64 libMesh::LibMeshInit init(argc, argv);
67 const bool MASTER_bPerfLog_carl_libmesh =
true;
68 libMesh::PerfLog perf_log(
"Main program", MASTER_bPerfLog_carl_libmesh);
71 libMesh::Parallel::Communicator& WorldComm = init.comm();
74 int rank = WorldComm.rank();
75 int nodes = WorldComm.size();
78 libMesh::Parallel::Communicator LocalComm;
79 WorldComm.split(rank,rank,LocalComm);
84 GetPot command_line(argc, argv);
90 std::string input_filename;
91 if (command_line.search(2,
"--inputfile",
"-i")) {
92 input_filename = command_line.next(input_filename);
93 field_parser.parse_input_file(input_filename,
"#",
"\n",
" \t\n");
95 field_parser = command_line;
102 const unsigned int dim = 3;
104 libmesh_example_requires(dim == LIBMESH_DIM,
"3D support");
109 perf_log.push(
"Meshes - Parallel",
"Read files:");
110 libMesh::Mesh mesh_BIG(WorldComm, dim);
112 mesh_BIG.prepare_for_use();
114 libMesh::Mesh mesh_micro(WorldComm, dim);
116 mesh_micro.prepare_for_use();
118 libMesh::Mesh mesh_mediator(WorldComm, dim);
119 mesh_mediator.allow_renumbering(
false);
121 mesh_mediator.prepare_for_use();
123 perf_log.pop(
"Meshes - Parallel",
"Read files:");
133 perf_log.push(
"Meshes - Serial",
"Read files:");
134 libMesh::ReplicatedMesh mesh_R_BIG(WorldComm, dim);
135 mesh_R_BIG.allow_renumbering(
false);
137 mesh_R_BIG.prepare_for_use();
139 libMesh::ReplicatedMesh mesh_R_micro(WorldComm, dim);
140 mesh_R_micro.allow_renumbering(
false);
142 mesh_R_micro.prepare_for_use();
145 libMesh::Mesh mesh_inter(LocalComm, dim);
146 mesh_inter.allow_renumbering(
false);
148 + std::to_string(rank) +
"_n_" + std::to_string(nodes) +
".e";
150 + std::to_string(rank) +
"_n_" + std::to_string(nodes) +
"_inter_table.dat";
151 std::string global_inter_table_filename = input_params.
common_inter_file +
"_global_inter_pairs.dat";
153 mesh_inter.read(local_inter_mesh_filename);
154 mesh_inter.prepare_for_use();
156 perf_log.pop(
"Meshes - Serial",
"Read files:");
159 perf_log.push(
"Equivalence / intersection tables",
"Read files:");
162 std::unordered_map<int,std::pair<int,int> > local_intersection_pairs_map;
165 std::unordered_map<int,std::pair<int,int> > local_intersection_restricted_pairs_map;
168 std::unordered_map<int,int> local_intersection_meshI_to_inter_map;
171 std::unordered_map<int,int> equivalence_table_BIG_to_R_BIG;
172 std::unordered_map<int,int> equivalence_table_micro_to_R_micro;
173 std::unordered_map<int,int> equivalence_table_R_BIG_to_BIG;
174 std::unordered_map<int,int> equivalence_table_R_micro_to_micro;
182 equivalence_table_BIG_to_R_BIG,
183 equivalence_table_micro_to_R_micro,
184 equivalence_table_R_BIG_to_BIG,
185 equivalence_table_R_micro_to_micro);
193 local_inter_table_filename,
197 equivalence_table_BIG_to_R_BIG,
198 equivalence_table_micro_to_R_micro,
200 local_intersection_pairs_map,
201 local_intersection_restricted_pairs_map,
202 local_intersection_meshI_to_inter_map);
209 local_inter_table_filename,
213 equivalence_table_micro_to_R_micro,
214 equivalence_table_BIG_to_R_BIG,
216 local_intersection_pairs_map,
217 local_intersection_restricted_pairs_map,
218 local_intersection_meshI_to_inter_map);
222 std::unordered_multimap<int,int> inter_mediator_BIG;
223 std::unordered_multimap<int,int> inter_mediator_micro;
226 global_inter_table_filename,
227 equivalence_table_BIG_to_R_BIG,
228 equivalence_table_R_BIG_to_BIG,
230 inter_mediator_micro);
231 perf_log.pop(
"Equivalence / intersection tables",
"Read files:");
234 perf_log.push(
"Initialization",
"System initialization:");
237 libMesh::EquationSystems& equation_systems_inter =
238 CoupledMatrices.add_inter_EquationSystem(
"InterSys", mesh_inter);
240 libMesh::ExplicitSystem& elasticity_system_inter
245 perf_log.pop(
"Initialization",
"System initialization:");
249 perf_log.push(
"Macro system",
"System initialization:");
250 libMesh::EquationSystems& equation_systems_BIG =
251 CoupledMatrices.set_BIG_EquationSystem(
"BigSys", mesh_BIG);
254 libMesh::ExplicitSystem& elasticity_system_BIG
258 perf_log.pop(
"Macro system",
"System initialization:");
262 perf_log.push(
"Micro system",
"System initialization:");
263 libMesh::EquationSystems& equation_systems_micro =
264 CoupledMatrices.add_micro_EquationSystem<libMesh::PetscMatrix<libMesh::Number> >(
"MicroSys", mesh_micro);
267 libMesh::ExplicitSystem& elasticity_system_micro
271 perf_log.pop(
"Micro system",
"System initialization:");
274 perf_log.push(
"RESTRICTED macro system",
"System initialization:");
275 libMesh::EquationSystems& equation_systems_R_BIG =
276 CoupledMatrices.set_Restricted_BIG_EquationSystem(
"BigSys", mesh_R_BIG);
279 libMesh::ExplicitSystem& elasticity_system_R_BIG
284 perf_log.pop(
"RESTRICTED macro system",
"System initialization:");
288 perf_log.push(
"RESTRICTED micro system",
"System initialization:");
289 libMesh::EquationSystems& equation_systems_R_micro =
290 CoupledMatrices.add_Restricted_micro_EquationSystem(
"MicroSys", mesh_R_micro);
293 libMesh::ExplicitSystem& elasticity_system_R_micro
297 perf_log.pop(
"RESTRICTED micro system",
"System initialization:");
301 perf_log.push(
"Mediator system",
"System initialization:");
302 libMesh::EquationSystems& equation_systems_mediator =
303 CoupledMatrices.add_mediator_EquationSystem(
"MediatorSys", mesh_mediator);
305 libMesh::ExplicitSystem& elasticity_system_mediator
310 perf_log.pop(
"Mediator system",
"System initialization:");
316 CoupledMatrices.use_H1_coupling(
"MicroSys");
319 CoupledMatrices.assemble_coupling_elasticity_3D_parallel(
"BigSys",
"MicroSys",
320 "InterSys",
"MediatorSys",
321 mesh_R_BIG, mesh_R_micro,
322 local_intersection_pairs_map,
323 local_intersection_restricted_pairs_map,
324 local_intersection_meshI_to_inter_map,
326 inter_mediator_micro);
331 std::string command_string =
"mkdir -p " + input_params.
output_folder;
337 #ifdef PRINT_MATLAB_DEBUG
338 CoupledMatrices.print_matrices_matlab(
"MicroSys",input_params.
output_folder);
340 CoupledMatrices.print_PETSC_matrices(
"MicroSys",input_params.
output_folder);
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)
libMesh::ExplicitSystem & add_explicit_elasticity(libMesh::EquationSystems &input_systems, libMesh::Order order=libMesh::FIRST, libMesh::FEFamily family=libMesh::LAGRANGE)
std::string exec_command(const std::string &cmd)
void reduced_system_init(Sys &system_input)
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 get_assemble_coupling_input_params(GetPot &field_parser, coupling_assemble_coupling_input_params &input_params)
Parser function for the construction of the coupling matrices.
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)