#include <belytschko_par.h>
Inheritance diagram for BelytschkoPar< DomainA, DomainC, Dim >:


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 () | |
Definition at line 49 of file belytschko_par.h.
| 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.
| BelytschkoPar< DomainA, DomainC, Dim >::BelytschkoPar | ( | DomainAtomicInterface & | A, | |
| DomainContinuumInterface & | C, | |||
| int | geomID, | |||
| Communicator & | c | |||
| ) | [inline] |
| BelytschkoPar< DomainA, DomainC, Dim >::~BelytschkoPar | ( | ) | [inline] |
| 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:

| 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:

1.5.2