7 std::vector<int>& domain_Idx_micro,
8 std::vector<int>& domain_Idx_coupling
11 std::ifstream dataF(filename);
14 std::string bufferLine;
15 std::stringstream dataBuffer;
18 while(std::getline(dataF,bufferLine))
20 if(bufferLine.compare(
"$MacroDomainIdx")==0)
22 dataF >> domain_Idx_BIG;
25 if(bufferLine.compare(
"$NbOfMicroDomainIdx")==0)
27 dataF >> nb_of_domain_Idx;
29 domain_Idx_micro.resize(nb_of_domain_Idx);
30 domain_Idx_coupling.resize(nb_of_domain_Idx);
33 if(bufferLine.compare(
"$MicroDomainIdxs")==0)
35 for(
int iii = 0; iii < nb_of_domain_Idx; ++iii )
37 dataF >> domain_Idx_micro[iii];
41 if(bufferLine.compare(
"$CouplingDomainIdxs")==0)
43 for(
int iii = 0; iii < nb_of_domain_Idx; ++iii )
45 dataF >> domain_Idx_coupling[iii];
55 std::string& intersection_table_I_Filename,
56 std::unordered_map<int,int>& mesh_restrict_ElemMap,
57 std::unordered_map<int,int>& mesh_micro_ElemMap,
58 std::unordered_map<int,int>& mesh_inter_ElemMap,
59 std::vector<std::pair<int,int> >& intersection_table_restrict_B,
60 std::unordered_multimap<int,int>& intersection_table_I
63 std::ifstream table_restrict_B_file(intersection_table_restrict_B_Filename);
64 std::ifstream table_I_file(intersection_table_I_Filename);
66 int nbOfIntersections_restrict_B = -1;
67 int nbOfIntersectionsI = -1;
68 int nbOfTotalTetrasI = -1;
77 table_restrict_B_file >> nbOfIntersections_restrict_B;
78 table_I_file >> nbOfIntersectionsI >> nbOfTotalTetrasI;
80 homemade_assert_msg(nbOfIntersections_restrict_B == nbOfIntersectionsI,
"Incompatible intersection table files!");
82 intersection_table_restrict_B.resize(nbOfIntersections_restrict_B);
83 intersection_table_I.reserve(2*nbOfTotalTetrasI);
85 for(
int iii = 0; iii < nbOfIntersections_restrict_B; ++iii)
87 table_restrict_B_file >> dummyInt >> extIdxA >> extIdxB;
88 intersection_table_restrict_B[iii].first = mesh_restrict_ElemMap[extIdxA];
89 intersection_table_restrict_B[iii].second = mesh_micro_ElemMap[extIdxB];
91 table_I_file >> dummyInt >> nbOfTetras;
92 for(
int jjj = 0; jjj < nbOfTetras; ++jjj)
94 table_I_file >> extIdxI;
95 tetraIdx = mesh_inter_ElemMap[extIdxI];
96 intersection_table_I.emplace(dummyInt,tetraIdx);
100 table_restrict_B_file.close();
101 table_I_file.close();
105 std::string& intersection_table_restrict_B_Filename,
106 std::string& intersection_table_I_Filename,
107 std::unordered_map<int,int>& mesh_restrict_ElemMap,
108 std::unordered_map<int,int>& mesh_micro_ElemMap,
109 std::unordered_map<int,int>& mesh_BIG_ElemMap,
110 std::unordered_map<int,int>& mesh_inter_ElemMap,
111 std::unordered_map<int,int>& equivalence_table_restrict_A,
112 std::vector<std::pair<int,int> >& intersection_table_restrict_B,
113 std::unordered_multimap<int,int>& intersection_table_I
116 std::ifstream table_restrict_A_file(equivalence_table_restrict_A_Filename);
117 std::ifstream table_restrict_B_file(intersection_table_restrict_B_Filename);
118 std::ifstream table_I_file(intersection_table_I_Filename);
120 int nbOfEquivalences_restrict_A = -1;
121 int nbOfIntersections_restrict_B = -1;
122 int nbOfIntersectionsI = -1;
123 int nbOfTotalTetrasI = -1;
133 int idxRestrict = -1;
136 table_restrict_A_file >> nbOfEquivalences_restrict_A;
137 std::unordered_map<int,int> temp_equivalence_table_A_restrict(nbOfEquivalences_restrict_A);
138 equivalence_table_restrict_A.reserve(nbOfEquivalences_restrict_A);
140 for(
int iii = 0; iii < nbOfEquivalences_restrict_A; ++iii)
142 table_restrict_A_file >> extIdxR >> extIdxA;
144 idxA = mesh_BIG_ElemMap[extIdxA];
145 idxRestrict = mesh_restrict_ElemMap[extIdxR];
147 temp_equivalence_table_A_restrict[idxA] = idxRestrict;
148 equivalence_table_restrict_A[idxRestrict] = idxA;
151 table_restrict_B_file >> nbOfIntersections_restrict_B;
152 table_I_file >> nbOfIntersectionsI >> nbOfTotalTetrasI;
154 homemade_assert_msg(nbOfIntersections_restrict_B == nbOfIntersectionsI,
"Incompatible intersection table files!");
156 intersection_table_restrict_B.resize(nbOfIntersections_restrict_B);
157 intersection_table_I.reserve(nbOfTotalTetrasI);
159 for(
int iii = 0; iii < nbOfIntersections_restrict_B; ++iii)
161 table_restrict_B_file >> dummyInt >> extIdxA >> extIdxB;
163 idxA = mesh_BIG_ElemMap[extIdxA];
164 intersection_table_restrict_B[iii].first = temp_equivalence_table_A_restrict[idxA];
165 intersection_table_restrict_B[iii].second = mesh_micro_ElemMap[extIdxB];
167 table_I_file >> dummyInt >> nbOfTetras;
168 for(
int jjj = 0; jjj < nbOfTetras; ++jjj)
170 table_I_file >> extIdxI;
171 tetraIdx = mesh_inter_ElemMap[extIdxI];
172 intersection_table_I.emplace(dummyInt,tetraIdx);
176 table_restrict_A_file.close();
177 table_restrict_B_file.close();
178 table_I_file.close();
183 const libMesh::Parallel::Communicator& WorldComm,
184 const std::string& intersection_full_table_Filename,
185 const std::string& equivalence_table_A_Filename,
186 const std::string& equivalence_table_B_Filename,
187 std::vector<carl::IntersectionData>& intersection_full_table,
188 std::unordered_map<int,int>& equivalence_table_A_to_R_A,
189 std::unordered_map<int,int>& equivalence_table_B_to_R_B,
190 std::unordered_map<int,int>& equivalence_table_R_A_to_A,
191 std::unordered_map<int,int>& equivalence_table_R_B_to_B
194 int rank = WorldComm.rank();
198 std::vector<int> dummy_equivalence_table_A;
199 std::vector<int> dummy_equivalence_table_B;
200 std::vector<int> dummy_intersection_full_table;
202 int nbOfIntersections = -1;
203 int nbOfInterElems = -1;
204 int nbOfRestricted_A_Elems = -1;
205 int nbOfRestricted_B_Elems = -1;
210 std::ifstream intersection_full_file(intersection_full_table_Filename);
212 intersection_full_file >> nbOfIntersections >> nbOfInterElems;
213 dummy_intersection_full_table.resize(4*nbOfInterElems);
215 for(
int iii = 0; iii < nbOfInterElems; ++iii)
217 intersection_full_file
218 >> dummy_intersection_full_table[4*iii]
219 >> dummy_intersection_full_table[4*iii + 1]
220 >> dummy_intersection_full_table[4*iii + 2]
221 >> dummy_intersection_full_table[4*iii + 3];
223 intersection_full_file.close();
225 std::ifstream equivalence_A_file(equivalence_table_A_Filename);
227 equivalence_A_file >> nbOfRestricted_A_Elems;
228 dummy_equivalence_table_A.resize(2*nbOfRestricted_A_Elems);
230 for(
int iii = 0; iii < nbOfRestricted_A_Elems; ++iii)
232 equivalence_A_file >> dummy_equivalence_table_A[2*iii]
233 >> dummy_equivalence_table_A[2*iii + 1];
235 equivalence_A_file.close();
237 std::ifstream equivalence_B_file(equivalence_table_B_Filename);
239 equivalence_B_file >> nbOfRestricted_B_Elems;
240 dummy_equivalence_table_B.resize(2*nbOfRestricted_B_Elems);
242 for(
int iii = 0; iii < nbOfRestricted_B_Elems; ++iii)
244 equivalence_B_file >> dummy_equivalence_table_B[2*iii]
245 >> dummy_equivalence_table_B[2*iii + 1];
247 equivalence_B_file.close();
251 WorldComm.broadcast(nbOfIntersections);
252 WorldComm.broadcast(nbOfInterElems);
253 WorldComm.broadcast(nbOfRestricted_A_Elems);
254 WorldComm.broadcast(nbOfRestricted_B_Elems);
258 dummy_intersection_full_table.resize(4*nbOfInterElems);
259 dummy_equivalence_table_A.resize(2*nbOfRestricted_A_Elems);
260 dummy_equivalence_table_B.resize(2*nbOfRestricted_B_Elems);
265 WorldComm.broadcast(dummy_intersection_full_table);
266 WorldComm.broadcast(dummy_equivalence_table_A);
267 WorldComm.broadcast(dummy_equivalence_table_B);
270 intersection_full_table.resize(nbOfInterElems);
271 equivalence_table_A_to_R_A.reserve(nbOfRestricted_A_Elems);
272 equivalence_table_B_to_R_B.reserve(nbOfRestricted_B_Elems);
274 equivalence_table_R_A_to_A.reserve(nbOfRestricted_A_Elems);
275 equivalence_table_R_B_to_B.reserve(nbOfRestricted_B_Elems);
277 for(
int iii = 0; iii < nbOfInterElems; ++iii)
279 intersection_full_table[iii].InterMeshIdx
280 = dummy_intersection_full_table[4*iii];
281 intersection_full_table[iii].AMeshIdx
282 = dummy_intersection_full_table[4*iii + 1];
283 intersection_full_table[iii].BMeshIdx
284 = dummy_intersection_full_table[4*iii + 2];
285 intersection_full_table[iii].IntersectionID
286 = dummy_intersection_full_table[4*iii + 3];
289 for(
int iii = 0; iii < nbOfRestricted_A_Elems; ++iii)
291 equivalence_table_R_A_to_A[dummy_equivalence_table_A[2*iii]] =
292 dummy_equivalence_table_A[2*iii + 1];
293 equivalence_table_A_to_R_A[dummy_equivalence_table_A[2*iii + 1]] =
294 dummy_equivalence_table_A[2*iii];
297 for(
int iii = 0; iii < nbOfRestricted_B_Elems; ++iii)
299 equivalence_table_R_B_to_B[dummy_equivalence_table_B[2*iii]] =
300 dummy_equivalence_table_B[2*iii + 1];
301 equivalence_table_B_to_R_B[dummy_equivalence_table_B[2*iii + 1]] =
302 dummy_equivalence_table_B[2*iii];
307 const libMesh::Parallel::Communicator& WorldComm,
308 const std::string& equivalence_table_A_Filename,
309 const std::string& equivalence_table_B_Filename,
311 std::unordered_map<int,int>& equivalence_table_A_to_R_A,
312 std::unordered_map<int,int>& equivalence_table_B_to_R_B,
313 std::unordered_map<int,int>& equivalence_table_R_A_to_A,
314 std::unordered_map<int,int>& equivalence_table_R_B_to_B )
316 int rank = WorldComm.rank();
320 std::vector<int> dummy_equivalence_table_A;
321 std::vector<int> dummy_equivalence_table_B;
323 int nbOfRestricted_A_Elems = -1;
324 int nbOfRestricted_B_Elems = -1;
332 std::ifstream equivalence_A_file(equivalence_table_A_Filename);
334 equivalence_A_file >> nbOfRestricted_A_Elems;
335 dummy_equivalence_table_A.resize(2*nbOfRestricted_A_Elems);
337 for(
int iii = 0; iii < nbOfRestricted_A_Elems; ++iii)
339 equivalence_A_file >> temp_RX
342 dummy_equivalence_table_A[2*iii] = temp_RX;
343 dummy_equivalence_table_A[2*iii + 1] = temp_X;
345 equivalence_A_file.close();
347 std::ifstream equivalence_B_file(equivalence_table_B_Filename);
349 equivalence_B_file >> nbOfRestricted_B_Elems;
350 dummy_equivalence_table_B.resize(2*nbOfRestricted_B_Elems);
352 for(
int iii = 0; iii < nbOfRestricted_B_Elems; ++iii)
354 equivalence_B_file >> temp_RX
357 dummy_equivalence_table_B[2*iii] = temp_RX;
358 dummy_equivalence_table_B[2*iii + 1] = temp_X;
360 equivalence_B_file.close();
364 WorldComm.broadcast(nbOfRestricted_A_Elems);
365 WorldComm.broadcast(nbOfRestricted_B_Elems);
369 dummy_equivalence_table_A.resize(2*nbOfRestricted_A_Elems);
370 dummy_equivalence_table_B.resize(2*nbOfRestricted_B_Elems);
375 WorldComm.broadcast(dummy_equivalence_table_A);
376 WorldComm.broadcast(dummy_equivalence_table_B);
379 equivalence_table_A_to_R_A.reserve(nbOfRestricted_A_Elems);
380 equivalence_table_B_to_R_B.reserve(nbOfRestricted_B_Elems);
382 equivalence_table_R_A_to_A.reserve(nbOfRestricted_A_Elems);
383 equivalence_table_R_B_to_B.reserve(nbOfRestricted_B_Elems);
385 for(
int iii = 0; iii < nbOfRestricted_A_Elems; ++iii)
387 equivalence_table_R_A_to_A[dummy_equivalence_table_A[2*iii]] =
388 dummy_equivalence_table_A[2*iii + 1];
389 equivalence_table_A_to_R_A[dummy_equivalence_table_A[2*iii + 1]] =
390 dummy_equivalence_table_A[2*iii];
393 for(
int iii = 0; iii < nbOfRestricted_B_Elems; ++iii)
395 equivalence_table_R_B_to_B[dummy_equivalence_table_B[2*iii]] =
396 dummy_equivalence_table_B[2*iii + 1];
397 equivalence_table_B_to_R_B[dummy_equivalence_table_B[2*iii + 1]] =
398 dummy_equivalence_table_B[2*iii];
403 const std::unordered_map<
int,std::pair<int,int> >& intersection_pairs_map,
404 const std::unordered_map<int,int>& equivalence_table_A_to_R_A,
405 const std::unordered_map<int,int>& equivalence_table_B_to_R_B,
406 std::unordered_map<
int,std::pair<int,int> >& intersection_restricted_pairs_map)
409 intersection_restricted_pairs_map.reserve(equivalence_table_A_to_R_A.size());
418 std::unordered_map<int,std::pair<int,int> >::const_iterator mapIt =
419 intersection_pairs_map.begin();
420 std::unordered_map<int,std::pair<int,int> >::const_iterator end_mapIt =
421 intersection_pairs_map.end();
423 for( ; mapIt != end_mapIt; ++mapIt)
425 interID = mapIt->first;
426 idxA = mapIt->second.first;
427 idxB = mapIt->second.second;
429 idxRA = equivalence_table_A_to_R_A.at(idxA);
430 idxRB = equivalence_table_B_to_R_B.at(idxB);
432 intersection_restricted_pairs_map[interID] =
433 std::pair<int,int>(idxRA,idxRB);
438 const libMesh::Parallel::Communicator& WorldComm,
439 const std::string& intersection_full_table_Filename,
441 std::unordered_map<
int,std::pair<int,int> >& full_intersection_pairs_map,
442 std::unordered_map<int,int>& full_intersection_meshI_to_inter_map)
444 int rank = WorldComm.rank();
448 std::vector<int> dummy_intersections_IDs;
449 std::vector<int> dummy_intersection_pairs_table;
450 std::vector<int> dummy_all_intersections_table;
451 std::vector<int> dummy_intersections_sizes_table;
453 int nbOfIntersections = -1;
454 int nbOfInterElems = -1;
457 int temp_interID = -1;
461 int temp_nbOfInter = -1;
468 std::ifstream intersection_full_file(intersection_full_table_Filename);
470 intersection_full_file >> nbOfIntersections >> nbOfInterElems;
472 dummy_intersections_IDs.resize(nbOfIntersections);
473 dummy_intersection_pairs_table.resize(2*nbOfIntersections);
474 dummy_all_intersections_table.resize(nbOfInterElems);
475 dummy_intersections_sizes_table.resize(nbOfIntersections);
477 for(
int iii = 0; iii < nbOfIntersections; ++iii)
482 intersection_full_file >> temp_interID
483 >> temp_idxA >> temp_idxB
486 dummy_intersections_IDs[iii] = temp_interID;
487 dummy_intersection_pairs_table[2*iii] = temp_idxA;
488 dummy_intersection_pairs_table[2*iii + 1] = temp_idxB;
489 dummy_intersections_sizes_table[iii] = temp_nbOfInter;
492 for(
int jjj = 0; jjj < temp_nbOfInter; ++jjj)
494 intersection_full_file >> temp_idxI;
495 dummy_all_intersections_table[interIdx] = temp_idxI;
500 intersection_full_file.close();
504 WorldComm.broadcast(nbOfIntersections);
505 WorldComm.broadcast(nbOfInterElems);
509 dummy_intersections_IDs.resize(nbOfIntersections);
510 dummy_intersection_pairs_table.resize(2*nbOfIntersections);
511 dummy_all_intersections_table.resize(nbOfInterElems);
512 dummy_intersections_sizes_table.resize(nbOfIntersections);
517 WorldComm.broadcast(dummy_intersections_IDs);
518 WorldComm.broadcast(dummy_intersection_pairs_table);
519 WorldComm.broadcast(dummy_all_intersections_table);
520 WorldComm.broadcast(dummy_intersections_sizes_table);
522 full_intersection_pairs_map.reserve(nbOfIntersections);
523 full_intersection_meshI_to_inter_map.reserve(nbOfInterElems);
528 for(
int iii = 0; iii < nbOfIntersections; ++iii)
530 temp_interID = dummy_intersections_IDs[iii];
531 temp_idxA = dummy_intersection_pairs_table[2*iii];
532 temp_idxB = dummy_intersection_pairs_table[2*iii + 1];
534 full_intersection_pairs_map[temp_interID] = std::pair<int,int>(temp_idxA,temp_idxB);
536 temp_nbOfInter = dummy_intersections_sizes_table[iii];
537 for(
int jjj = 0; jjj < temp_nbOfInter; ++jjj)
539 temp_idxI = dummy_all_intersections_table[interIdx];
540 full_intersection_meshI_to_inter_map[temp_idxI] = temp_interID;
547 const libMesh::Parallel::Communicator& WorldComm,
548 const std::string& intersection_local_table_Filename,
550 std::unordered_map<
int,std::pair<int,int> >& local_intersection_pairs_map,
551 std::unordered_map<int,int>& local_intersection_meshI_to_inter_map)
553 int nbOfIntersections = -1;
554 int nbOfInterElems = -1;
557 int temp_interID = -1;
561 int temp_nbOfInter = -1;
567 std::ifstream intersection_full_file(intersection_local_table_Filename);
569 intersection_full_file >> nbOfIntersections >> nbOfInterElems >> temp_dummy;
571 for(
int iii = 0; iii < nbOfIntersections; ++iii)
576 intersection_full_file >> temp_interID
577 >> temp_idxA >> temp_idxB
580 local_intersection_pairs_map[temp_interID] = std::pair<int,int>(temp_idxA,temp_idxB);
583 for(
int jjj = 0; jjj < temp_nbOfInter; ++jjj)
585 intersection_full_file >> temp_idxI;
586 local_intersection_meshI_to_inter_map[temp_idxI] = temp_interID;
590 intersection_full_file.close();
596 const libMesh::Parallel::Communicator& WorldComm,
597 const libMesh::Mesh& mesh_intersection,
598 const std::string& intersection_full_table_Filename,
599 const std::string& equivalence_table_A_Filename,
600 const std::string& equivalence_table_B_Filename,
602 const std::unordered_map<int,int>& equivalence_table_A_to_R_A,
603 const std::unordered_map<int,int>& equivalence_table_B_to_R_B,
605 std::unordered_map<
int,std::pair<int,int> >& full_intersection_pairs_map,
606 std::unordered_map<
int,std::pair<int,int> >& full_intersection_restricted_pairs_map,
607 std::unordered_map<int,int>& local_intersection_meshI_to_inter_map
611 std::unordered_map<int,int> full_intersection_meshI_to_inter_map;
613 full_intersection_pairs_map,full_intersection_meshI_to_inter_map);
617 equivalence_table_A_to_R_A,equivalence_table_B_to_R_B,
618 full_intersection_restricted_pairs_map);
621 libMesh::MeshBase::const_element_iterator elemIt = mesh_intersection.active_local_elements_begin();
622 const libMesh::MeshBase::const_element_iterator end_elemIt = mesh_intersection.active_local_elements_end();
623 int local_nbOfInters = mesh_intersection.n_active_local_elem();
624 local_intersection_meshI_to_inter_map.reserve(local_nbOfInters);
630 for( ; elemIt != end_elemIt; ++ elemIt)
632 const libMesh::Elem* elem = *elemIt;
633 idxI_table = elem->id();
634 interID = full_intersection_meshI_to_inter_map[idxI_table];
635 local_intersection_meshI_to_inter_map[idxI_table] = interID;
640 const libMesh::Parallel::Communicator& WorldComm,
641 const libMesh::Mesh& mesh_intersection,
642 const std::string& intersection_local_table_Filename,
643 const std::string& equivalence_table_A_Filename,
644 const std::string& equivalence_table_B_Filename,
646 const std::unordered_map<int,int>& equivalence_table_A_to_R_A,
647 const std::unordered_map<int,int>& equivalence_table_B_to_R_B,
649 std::unordered_map<
int,std::pair<int,int> >& local_intersection_pairs_map,
650 std::unordered_map<
int,std::pair<int,int> >& local_intersection_restricted_pairs_map,
651 std::unordered_map<int,int>& local_intersection_meshI_to_inter_map
655 std::unordered_map<int,int> full_intersection_meshI_to_inter_map;
657 local_intersection_pairs_map,full_intersection_meshI_to_inter_map);
661 equivalence_table_A_to_R_A,equivalence_table_B_to_R_B,
662 local_intersection_restricted_pairs_map);
665 libMesh::MeshBase::const_element_iterator elemIt = mesh_intersection.active_local_elements_begin();
666 const libMesh::MeshBase::const_element_iterator end_elemIt = mesh_intersection.active_local_elements_end();
667 int local_nbOfInters = mesh_intersection.n_active_local_elem();
668 local_intersection_meshI_to_inter_map.reserve(local_nbOfInters);
674 for( ; elemIt != end_elemIt; ++ elemIt)
676 const libMesh::Elem* elem = *elemIt;
677 idxI_table = elem->id();
678 interID = full_intersection_meshI_to_inter_map[idxI_table];
679 local_intersection_meshI_to_inter_map[idxI_table] = interID;
684 const libMesh::Parallel::Communicator& WorldComm,
685 const std::string& intersection_global_table_Filename,
686 const std::unordered_map<int,int>& equivalence_table_system_to_mediator,
687 const std::unordered_map<int,int>& equivalence_table_mediator_to_system,
689 std::unordered_multimap<int,int>& inter_mediator_A,
690 std::unordered_multimap<int,int>& inter_mediator_B)
693 int rank = WorldComm.rank();
694 int nodes = WorldComm.size();
697 std::vector<int> temp_idxA;
698 std::vector<int> temp_idxB;
700 int nbOfIntersections = -1;
701 int nbOfInterElems = -1;
703 std::string dummy_data;
707 std::ifstream intersection_full_file(intersection_global_table_Filename);
708 intersection_full_file >> nbOfIntersections >> nbOfInterElems;
710 temp_idxA.resize(nbOfIntersections);
711 temp_idxB.resize(nbOfIntersections);
713 for(
int iii = 0; iii < nbOfIntersections; ++iii)
718 intersection_full_file >> temp_idxA[iii] >> temp_idxB[iii];
719 intersection_full_file.ignore(std::numeric_limits<std::streamsize>::max(),
'\n');
721 intersection_full_file.close();
726 WorldComm.broadcast(nbOfIntersections);
730 temp_idxA.resize(nbOfIntersections);
731 temp_idxB.resize(nbOfIntersections);
733 WorldComm.broadcast(temp_idxA);
734 WorldComm.broadcast(temp_idxB);
737 inter_mediator_A.reserve(nbOfIntersections);
738 inter_mediator_B.reserve(nbOfIntersections);
741 for(
int iii = 0; iii < nbOfIntersections; ++iii)
743 mediator_idx = equivalence_table_system_to_mediator.at(temp_idxA[iii]);
744 inter_mediator_B.emplace(std::make_pair(mediator_idx, temp_idxB[iii]));
748 for(
unsigned int iii = 0; iii < equivalence_table_system_to_mediator.size(); ++iii)
750 system_idx = equivalence_table_mediator_to_system.at(iii);
751 inter_mediator_A.emplace(std::make_pair(iii, system_idx));
756 const libMesh::Parallel::Communicator& WorldComm,
757 libMesh::Mesh& mesh_input,
758 libMesh::Mesh& mesh_intersect,
759 std::unordered_map<
int,std::pair<int,int> >& local_intersection_pairs_map,
762 std::vector<double> mesh_input_weights;
763 mesh_input_weights.resize(mesh_input.n_elem(),0);
766 std::vector<int> inter_per_elem(mesh_intersect.n_elem());
768 std::unordered_map<int,std::pair<int,int> >::const_iterator inter_pairsIt =
769 local_intersection_pairs_map.begin();
770 const std::unordered_map<int,std::pair<int,int> >::const_iterator end_inter_pairsIt =
771 local_intersection_pairs_map.end();
772 for( ; inter_pairsIt != end_inter_pairsIt; ++inter_pairsIt)
774 const std::pair<int,int>& dummy_pair = inter_pairsIt->second;
778 ++inter_per_elem[dummy_pair.first];
782 ++inter_per_elem[dummy_pair.second];
786 inter_pairsIt = local_intersection_pairs_map.begin();
787 for( ; inter_pairsIt != end_inter_pairsIt; ++inter_pairsIt)
789 const std::pair<int,int>& dummy_pair = inter_pairsIt->second;
793 mesh_input_weights[dummy_pair.second] += inter_per_elem[dummy_pair.first];
797 mesh_input_weights[dummy_pair.first] += inter_per_elem[dummy_pair.second];
801 WorldComm.sum(mesh_input_weights);
804 libMesh::MeshBase::const_element_iterator mesh_inputIt =
805 mesh_input.elements_begin();
806 const libMesh::MeshBase::const_element_iterator end_mesh_inputIt =
807 mesh_input.elements_end();
808 for( ; mesh_inputIt != end_mesh_inputIt; ++mesh_inputIt )
810 const libMesh::Elem* elem_input = *mesh_inputIt;
811 int idxinput = elem_input->id();
813 mesh_input_weights[idxinput] += elem_input->n_nodes();
816 libMesh::ErrorVector dummy_input_error(mesh_input.n_elem());
817 for(
unsigned int iii = 0; iii < mesh_input.n_elem(); ++iii)
818 dummy_input_error[iii] = mesh_input_weights[iii];
820 libMesh::Partitioner * dummy_partitioner_input = mesh_input.partitioner().get();
821 dummy_partitioner_input->attach_weights(&dummy_input_error);
822 mesh_input.partition();
void set_restricted_intersection_pairs_table(const std::unordered_map< int, std::pair< int, int > > &full_intersection_pairs_map, const std::unordered_map< int, int > &equivalence_table_A_to_R_A, const std::unordered_map< int, int > &equivalence_table_B_to_R_B, std::unordered_map< int, std::pair< int, int > > &full_intersection_restricted_pairs_map)
void generate_intersection_tables_full(std::string &equivalence_table_restrict_A_Filename, std::string &intersection_table_restrict_B_Filename, std::string &intersection_table_I_Filename, std::unordered_map< int, int > &mesh_restrict_ElemMap, std::unordered_map< int, int > &mesh_micro_ElemMap, std::unordered_map< int, int > &mesh_BIG_ElemMap, std::unordered_map< int, int > &mesh_inter_ElemMap, std::unordered_map< int, int > &equivalence_table_restrict_A, std::vector< std::pair< int, int > > &intersection_table_restrict_B, std::unordered_multimap< int, int > &intersection_table_I)
void set_local_intersection_tables(const libMesh::Parallel::Communicator &WorldComm, const libMesh::Mesh &mesh_intersection, const std::string &intersection_local_table_Filename, const std::string &equivalence_table_A_Filename, const std::string &equivalence_table_B_Filename, const std::unordered_map< int, int > &equivalence_table_A_to_R_A, const std::unordered_map< int, int > &equivalence_table_B_to_R_B, std::unordered_map< int, std::pair< int, int > > &local_intersection_pairs_map, std::unordered_map< int, std::pair< int, int > > &local_intersection_restricted_pairs_map, std::unordered_map< int, int > &local_intersection_meshI_to_inter_map)
void set_intersection_tables(const libMesh::Parallel::Communicator &WorldComm, const libMesh::Mesh &mesh_intersection, const std::string &intersection_full_table_Filename, const std::string &equivalence_table_A_Filename, const std::string &equivalence_table_B_Filename, const std::unordered_map< int, int > &equivalence_table_A_to_R_A, const std::unordered_map< int, int > &equivalence_table_B_to_R_B, std::unordered_map< int, std::pair< int, int > > &full_intersection_pairs_map, std::unordered_map< int, std::pair< int, int > > &full_intersection_restricted_pairs_map, std::unordered_map< int, int > &local_intersection_meshI_to_inter_map)
void set_weight_function_domain_idx(std::string &filename, int &domain_Idx_BIG, int &nb_of_domain_Idx_micro, std::vector< int > &domain_Idx_micro, std::vector< int > &domain_Idx_coupling)
void set_full_intersection_tables(const libMesh::Parallel::Communicator &WorldComm, const std::string &intersection_full_table_Filename, std::unordered_map< int, std::pair< int, int > > &full_intersection_pairs_map, std::unordered_map< int, int > &full_intersection_meshI_to_inter_map)
void build_intersection_and_restriction_tables(const libMesh::Parallel::Communicator &WorldComm, const std::string &intersection_full_table_Filename, const std::string &equivalence_table_A_Filename, const std::string &equivalence_table_B_Filename, std::vector< carl::IntersectionData > &intersection_full_table, std::unordered_map< int, int > &equivalence_table_A_to_R_A, std::unordered_map< int, int > &equivalence_table_B_to_R_B, std::unordered_map< int, int > &equivalence_table_R_A_to_A, std::unordered_map< int, int > &equivalence_table_R_B_to_B)
void set_equivalence_tables(const libMesh::Parallel::Communicator &WorldComm, const std::string &equivalence_table_A_Filename, const std::string &equivalence_table_B_Filename, std::unordered_map< int, int > &equivalence_table_A_to_R_A, std::unordered_map< int, int > &equivalence_table_B_to_R_B, std::unordered_map< int, int > &equivalence_table_R_A_to_A, std::unordered_map< int, int > &equivalence_table_R_B_to_B)
void repartition_system_meshes(const libMesh::Parallel::Communicator &WorldComm, libMesh::Mesh &mesh_input, libMesh::Mesh &mesh_intersect, std::unordered_map< int, std::pair< int, int > > &local_intersection_pairs_map, bool bUseSecond=true)
void read_local_intersection_tables(const libMesh::Parallel::Communicator &WorldComm, const std::string &intersection_local_table_Filename, std::unordered_map< int, std::pair< int, int > > &local_intersection_pairs_map, std::unordered_map< int, int > &local_intersection_meshI_to_inter_map)
void generate_intersection_tables_partial(std::string &intersection_table_restrict_B_Filename, std::string &intersection_table_I_Filename, std::unordered_map< int, int > &mesh_restrict_ElemMap, std::unordered_map< int, int > &mesh_micro_ElemMap, std::unordered_map< int, int > &mesh_inter_ElemMap, std::vector< std::pair< int, int > > &intersection_table_restrict_B, std::unordered_multimap< int, int > &intersection_table_I)
void set_global_mediator_system_intersection_lists(const libMesh::Parallel::Communicator &WorldComm, const std::string &intersection_global_table_Filename, const std::unordered_map< int, int > &equivalence_table_system_to_mediator, const std::unordered_map< int, int > &equivalence_table_mediator_to_system, std::unordered_multimap< int, int > &inter_mediator_A, std::unordered_multimap< int, int > &inter_mediator_B)