BelytschkoPar< DomainA, DomainC, Dim > Class Template Reference

#include <belytschko_par.h>

Inheritance diagram for BelytschkoPar< DomainA, DomainC, Dim >:

Inheritance graph
[legend]
Collaboration diagram for BelytschkoPar< DomainA, DomainC, Dim >:

Collaboration graph
[legend]
List of all members.

Public Types

typedef BelytschkoTemplate<
DomainA, DomainC, Dim, BridgingPar<
DomainA, DomainC, Dim, 1 > > 
Parent

Public Member Functions

 BelytschkoPar (DomainAtomicInterface &A, DomainContinuumInterface &C, int geomID, Communicator &c)
virtual void Init ()
 function for initiation
virtual void Stucking ()
 function for applying the coupling
 ~BelytschkoPar ()

Detailed Description

template<typename DomainA, typename DomainC, unsigned int Dim>
class BelytschkoPar< DomainA, DomainC, Dim >

Definition at line 49 of file belytschko_par.h.


Member Typedef Documentation

template<typename DomainA, typename DomainC, unsigned int Dim>
typedef BelytschkoTemplate<DomainA,DomainC,Dim, BridgingPar<DomainA,DomainC,Dim, 1 > > BelytschkoPar< DomainA, DomainC, Dim >::Parent

Reimplemented from BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >.

Definition at line 56 of file belytschko_par.h.


Constructor & Destructor Documentation

template<typename DomainA, typename DomainC, unsigned int Dim>
BelytschkoPar< DomainA, DomainC, Dim >::BelytschkoPar ( DomainAtomicInterface A,
DomainContinuumInterface C,
int  geomID,
Communicator c 
) [inline]

template<typename DomainA, typename DomainC, unsigned int Dim>
BelytschkoPar< DomainA, DomainC, Dim >::~BelytschkoPar (  )  [inline]

Definition at line 66 of file belytschko_par.h.

00066 {}


Member Function Documentation

template<typename DomainA, typename DomainC, unsigned int Dim>
void BelytschkoPar< DomainA, DomainC, Dim >::Init (  )  [inline, virtual]

function for initiation

Implements BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >.

Definition at line 183 of file belytschko_par.cpp.

References BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::A, absolute_A, BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::Allocate(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::BuildAtomsConstraintMatrix(), Bridging< DomainA, DomainC, Dim, Pond >::BuildAtomsWeight(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::BuildContinuConstraintMatrix(), Bridging< DomainA, DomainC, Dim, Pond >::BuildContinuWeight(), BridgingPar< DomainA, DomainC, Dim, 1 >::communicateur, BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::CorrectAtomsWeights(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::CorrectContinuWeights(), BridgingPar< DomainA, DomainC, Dim, 1 >::CorrectSurfaceEffect(), DBG_INFO, Bridging< DomainA, DomainC, Dim, Pond >::Dump(), DUMP, BridgingPar< DomainA, DomainC, Dim, 1 >::duo_vector, BridgingPar< DomainA, DomainC, Dim, 1 >::GenerateCommunicationScheme(), BridgingPar< DomainA, DomainC, Dim, 1 >::GROUP_ID_ATOMS, BridgingPar< DomainA, DomainC, Dim, 1 >::GROUP_ID_CONTINU, BridgingPar< DomainA, DomainC, Dim, 1 >::local_atoms_in_rec, DuoDistributedVecteur::SynchronizeVecteurBySum(), and BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::taille.

00183                                              {
00184   char filename[256];
00185   
00186   DUMP("Computing freedom degrees weight",DBG_INFO);
00187   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS)){
00188     Parent::BuildAtomsWeight();
00189     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"unmatched","recatomes");
00190     Parent::Dump(filename,this->atomes_rec,true);
00191     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"unmatched","recatomes-fictifs");
00192     Parent::Dump(filename,this->atomes_fictifs,false);
00193   }
00194   else if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU)){
00195     Parent::BuildContinuWeight();
00196     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"unmatched","recelems");
00197     Parent::Dump(filename,this->noeuds_rec,this->elems_rec,true);
00198     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"unmatched","recelems-fictifs");
00199     Parent::Dump(filename,this->noeuds_fictifs,this->elems_fictifs,false);
00200   }
00201   
00202   DUMP("Computing communication scheme",DBG_INFO);
00203   Parent::GenerateCommunicationScheme();
00204 
00205 
00206   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS)){
00207     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"matched","recatomes");
00208     Parent::Dump(filename,this->atomes_rec,true);
00209     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"matched","recatomes-fictifs");
00210     Parent::Dump(filename,this->atomes_fictifs,false);
00211 
00212   }
00213   else if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU)){
00214     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"matched","recelems");
00215     Parent::Dump(filename,this->noeuds_rec,this->elems_rec,true);
00216     snprintf(filename,256,"%s-%d-%s-%s",this->name,my_proc_id,"matched","recelems-fictifs");
00217     Parent::Dump(filename,this->noeuds_fictifs,this->elems_fictifs,false);
00218   }
00219   
00220   //  DUMP("Exchange shape matrix");
00221   //  Parent::Smatrix_fictifs->TransitThroughNetwork(Parent::communicateur,*Parent::duo_vector_fictifs,Parent::GROUP_ID_CONTINU,Parent::GROUP_ID_ATOMS);
00222 
00223   unsigned int taille = Parent::local_atoms_in_rec;
00224 
00225   if(!Parent::local_atoms_in_rec){
00226     Parent::CorrectSurfaceEffect();
00227     return;
00228   }
00229 
00230 
00231 //   if(taille == 0)
00232 //     return;  
00233   DUMP("Computing initial constraint of size " << taille,DBG_INFO);
00234 
00235   Parent::Allocate(taille);
00236   
00237   DUMP("Correcting weights",DBG_INFO);
00238   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS))
00239     Parent::CorrectAtomsWeights();
00240   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU))
00241     Parent::CorrectContinuWeights();
00242 
00243   DUMP("BuildConstraintMatrix",DBG_INFO);
00244 
00245   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS))
00246     Parent::BuildAtomsConstraintMatrix();
00247   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU))
00248     Parent::BuildContinuConstraintMatrix();  
00249 
00250 
00251 
00252 #ifdef DEBUG_BRIDGE
00253   Parent::duo_vector->SynchronizeVecteurBySum("A",Parent::A,absolute_A,Parent::GROUP_ID_CONTINU,Parent::GROUP_ID_ATOMS,*Parent::communicateur);
00254 #else
00255   Parent::duo_vector->SynchronizeVecteurBySum("A",Parent::A,Parent::GROUP_ID_CONTINU,Parent::GROUP_ID_ATOMS,*Parent::communicateur);
00256 #endif
00257    
00258 
00259 
00260 //   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS)){
00261 //     char outputfile[40];     
00262 //     snprintf(outputfile,40,"constraint_matrix_atoms-%.4d.mat",my_proc_id);
00263 //     std::ofstream out(outputfile);
00264 //     for (unsigned int i=0; i<taille; ++i) 
00265 //       { 
00266 //      out << i+1 << "\t" << i+1  << "\t" << Parent::A[i] << std::endl; 
00267 //       } 
00268 //     out.close();
00269 //   }
00270   
00271 //   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU)){
00272 //     char outputfile[40];  
00273 //     snprintf(outputfile,40,"constraint_matrix_continu-%.4d.mat",my_proc_id);
00274 //     std::ofstream out(outputfile);
00275     
00276 //     for (unsigned int i=0; i<taille; ++i) 
00277 //       { 
00278 //      out << i+1 << "\t" << i+1  << "\t" << Parent::A[i] << std::endl; 
00279 //       } 
00280 //     out.close();
00281 //   }
00282 
00283 //  initial surface correction
00284   Parent::CorrectSurfaceEffect();
00285 }

Here is the call graph for this function:

template<typename DomainA, typename DomainC, unsigned int Dim>
void BelytschkoPar< DomainA, DomainC, Dim >::Stucking (  )  [inline, virtual]

function for applying the coupling

Implements BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >.

Definition at line 56 of file belytschko_par.cpp.

References BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::A, absolute_A, absolute_lambdasA, absolute_rhs, BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::ApplyAtomsCorrection(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::ApplyContinuCorrection(), Bridging< DomainA, DomainC, Dim, Pond >::assoc, Bridging< DomainA, DomainC, Dim, Pond >::atomes_fictifs, Bridging< DomainA, DomainC, Dim, Pond >::atomes_rec, BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::BuildAtomsRHS(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::BuildContinuRHS(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::CleanRHS(), BridgingPar< DomainA, DomainC, Dim, 1 >::communicateur, BridgingPar< DomainA, DomainC, Dim, 1 >::CorrectSurfaceEffect(), DBG_INFO, DuoDistributedVecteur::DistributeVecteur(), Bridging< DomainA, DomainC, Dim, Pond >::domC, DUMP, BridgingPar< DomainA, DomainC, Dim, 1 >::duo_vector, BridgingPar< DomainA, DomainC, Dim, 1 >::GROUP_ID_ATOMS, BridgingPar< DomainA, DomainC, Dim, 1 >::GROUP_ID_CONTINU, Bridging< DomainA, DomainC, Dim, Pond >::lambdasA, BridgingPar< DomainA, DomainC, Dim, 1 >::local_atoms_fictifs, BridgingPar< DomainA, DomainC, Dim, 1 >::local_atoms_in_rec, ContenerTableau< T >::nbElem(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::rhs, Bridging< DomainA, DomainC, Dim, Pond >::Smatrix, BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::SolveConstraintAtoms(), BelytschkoTemplate< DomainA, DomainC, Dim, BridgingPar< DomainA, DomainC, Dim, 1 > >::SolveConstraintContinu(), STARTTIMER, STOPTIMER, DuoDistributedVecteur::SynchronizeMigration(), DuoDistributedVecteur::SynchronizeVecteurBySum(), BridgingPar< DomainA, DomainC, Dim, 1 >::UnfragmentArray(), BridgingPar< DomainA, DomainC, Dim, 1 >::UnfragmentContener(), BridgingPar< DomainA, DomainC, Dim, 1 >::UnfragmentIndirectionArrays(), and BridgingPar< DomainA, DomainC, Dim, 1 >::UnfragmentScheme().

00056                                                  {
00057 
00058   DUMP("Starting coupling stage",DBG_INFO);
00059 
00060   STARTTIMER("waiting for starting coupling");
00061   //MPI_Barrier(MPI_COMM_WORLD);
00062   STOPTIMER("waiting for starting coupling");
00063 
00064   //update coherency for migrated atoms
00065   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS)){
00066     Parent::local_atoms_in_rec = Parent::atomes_rec.nbElem();
00067     Parent::local_atoms_fictifs = Parent::atomes_fictifs.nbElem();
00068   }
00069   DUMP("Correcting surface effect",DBG_INFO);
00070   //Attach_debugger(false);
00071   Parent::CorrectSurfaceEffect();
00072   if(!Parent::local_atoms_in_rec){
00073     //MPI_Barrier(MPI_COMM_WORLD);
00074     if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU)){
00075       typename Parent::_Vec_ & v = Parent::domC.getDofs().V();
00076       v.close();
00077     }
00078     //MPI_Barrier(MPI_COMM_WORLD);
00079     return;
00080   }
00081   DUMP("Synch with migration",DBG_INFO);  
00082   int fragmented_ratio = Parent::duo_vector->SynchronizeMigration(Parent::GROUP_ID_ATOMS,Parent::GROUP_ID_CONTINU,*Parent::communicateur);
00083 
00084   if (fragmented_ratio > 0){
00085 #ifdef DEBUG_BRIDGE
00086     UnfragmentArray(Parent::A,absolute_A,Parent::local_atoms_in_rec,*Parent::duo_vector);
00087 #else
00088     UnfragmentArray(Parent::A,Parent::local_atoms_in_rec,*Parent::duo_vector);
00089 #endif
00090     if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU)){
00091       UnfragmentIndirectionArrays(Parent::assoc,Parent::Smatrix,*Parent::duo_vector);
00092     }
00093     if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS)){
00094 #ifdef DEBUG_BRIDGE
00095       UnfragmentArray(Parent::lambdasA,absolute_lambdasA,Parent::local_atoms_in_rec,*Parent::duo_vector);
00096 #else
00097       UnfragmentArray(Parent::lambdasA,Parent::local_atoms_in_rec,*Parent::duo_vector);
00098 #endif
00099       UnfragmentContener(Parent::atomes_rec,*Parent::duo_vector);
00100       Parent::local_atoms_in_rec = Parent::atomes_rec.nbElem();      
00101     }
00102     //on a eventuellement compresse le tableau de reference d'atomes migres
00103     //on le met a jour  
00104 
00105     UnfragmentScheme(*Parent::duo_vector);
00106     //    Parent::duo_vector->print("rec");
00107     DUMP("correction du schemas de com",DBG_INFO);
00108   }
00109   DUMP("number of atoms to manage : " << Parent::local_atoms_in_rec,DBG_INFO);
00110 
00111   //  return;
00112   STARTTIMER("BuildRHS");
00113 
00114   DUMP("Clean RHS",DBG_INFO);  
00115   Parent::CleanRHS();
00116   DUMP("Build RHS",DBG_INFO);  
00117   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS))
00118     Parent::BuildAtomsRHS();
00119   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU))
00120     Parent::BuildContinuRHS();
00121   STOPTIMER("BuildRHS");
00122 
00123   STARTTIMER("waiting for synchro rhs");
00124   //MPI_Barrier(MPI_COMM_WORLD);
00125   STOPTIMER("waiting for synchro rhs");
00126 
00127   DUMP("RHS redistrib/reduction",DBG_INFO);  
00128   //synchronize les deux vecteurs par somme
00129   STARTTIMER("SynchRHS");
00130 #ifdef DEBUG_BRIDGE
00131   Parent::duo_vector->SynchronizeVecteurBySum("rhs",Parent::rhs,absolute_rhs*Dim,Parent::GROUP_ID_CONTINU,Parent::GROUP_ID_ATOMS,*Parent::communicateur,Dim);
00132 #else
00133   Parent::duo_vector->SynchronizeVecteurBySum("rhs",Parent::rhs,Parent::GROUP_ID_CONTINU,Parent::GROUP_ID_ATOMS,*Parent::communicateur,Dim);
00134 #endif
00135   //Parent::duo_vector->DistributeVecteur(Parent::rhs,Parent::GROUP_ID_CONTINU,Parent::GROUP_ID_ATOMS,*Parent::communicateur,Dim);
00136   //  Parent::duo_vector->DistributeVecteur(Parent::rhs,Parent::GROUP_ID_ATOMS,Parent::GROUP_ID_CONTINU,*Parent::communicateur,Dim);
00137 
00138   STOPTIMER("SynchRHS");
00139 
00140 //   if (Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS))
00141 //     {
00142 //       char outputfile[40];     
00143 //       snprintf(outputfile,40,"rhs_matrix-%.4d.mat",my_proc_id);
00144 //       std::ofstream out(outputfile);
00145 //       for (unsigned int i=0; i< Parent::local_atoms_in_rec; ++i) 
00146 //      { 
00147 //        out << i+1 << "\t" << i+1  << "\t" << Parent::rhs[i] << std::endl; 
00148 //      } 
00149 //       out.close();
00150 //     }
00151 
00152 #ifdef DEBUG_BRIDGE
00153   Parent::duo_vector->DistributeVecteur("A",Parent::A,absolute_A,Parent::GROUP_ID_ATOMS,Parent::GROUP_ID_CONTINU,*Parent::communicateur);
00154 #else
00155   Parent::duo_vector->DistributeVecteur("A",Parent::A,Parent::GROUP_ID_ATOMS,Parent::GROUP_ID_CONTINU,*Parent::communicateur);
00156 #endif
00157 
00158   DUMP("solving constraint",DBG_INFO);  
00159   STARTTIMER("Solving constraint");
00160   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS))
00161     Parent::SolveConstraintAtoms();
00162   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU))
00163     Parent::SolveConstraintContinu();
00164   STOPTIMER("Solving constraint");
00165 
00166   DUMP("Applying constraint",DBG_INFO);  
00167   STARTTIMER("Correcting");
00168   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_ATOMS))
00169     Parent::ApplyAtomsCorrection();
00170 
00171   if(Parent::communicateur->amIinGroup(Parent::GROUP_ID_CONTINU))
00172     Parent::ApplyContinuCorrection();
00173 
00174   STOPTIMER("Correcting");
00175   STARTTIMER("waiting for ending coupling");
00176   //MPI_Barrier(MPI_COMM_WORLD);
00177   STOPTIMER("waiting for ending coupling");
00178 
00179   DUMP("coupling stage all done",DBG_INFO);  
00180 }

Here is the call graph for this function:


The documentation for this class was generated from the following files:
Generated on Fri Sep 7 13:13:04 2007 for LibMultiScale by  doxygen 1.5.2