34 libMesh::Order order = libMesh::FIRST,
35 libMesh::FEFamily family = libMesh::LAGRANGE)
37 libMesh::ExplicitSystem& elasticity_system =
38 input_systems.add_system<libMesh::ExplicitSystem> (
"Elasticity");
40 elasticity_system.add_variable(
"u", order, family);
41 elasticity_system.add_variable(
"v", order, family);
42 elasticity_system.add_variable(
"w", order, family);
44 return elasticity_system;
47 libMesh::ImplicitSystem&
add_elasticity( libMesh::EquationSystems& input_systems,
48 libMesh::Order order = libMesh::FIRST,
49 libMesh::FEFamily family = libMesh::LAGRANGE)
51 libMesh::ImplicitSystem& elasticity_system =
52 input_systems.add_system<libMesh::ImplicitSystem> (
"Elasticity");
54 elasticity_system.add_variable(
"u", order, family);
55 elasticity_system.add_variable(
"v", order, family);
56 elasticity_system.add_variable(
"w", order, family);
58 return elasticity_system;
61 int main(
int argc,
char** argv) {
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 =
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 =
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 =
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 =
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 =
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 =
305 libMesh::ExplicitSystem& elasticity_system_mediator
310 perf_log.pop(
"Mediator system",
"System initialization:");
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
libMesh::EquationSystems & set_BIG_EquationSystem(const std::string &name, libMesh::MeshBase &BIGMesh)
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)
int main(int argc, char **argv)
libMesh::EquationSystems & add_inter_EquationSystem(const std::string &name, libMesh::MeshBase &interMesh)
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)
libMesh::EquationSystems & add_micro_EquationSystem(const std::string &name, libMesh::MeshBase µMesh)
void assemble_coupling_elasticity_3D_parallel(const std::string BIG_name, const std::string micro_name, const std::string inter_name, const std::string mediator_name, const libMesh::MeshBase &mesh_R_BIG, const libMesh::MeshBase &mesh_R_micro, const std::unordered_map< int, std::pair< int, int > > &full_intersection_pairs_map, const std::unordered_map< int, std::pair< int, int > > &full_intersection_restricted_pairs_map, const std::unordered_map< int, int > &local_intersection_meshI_to_inter_map, const std::unordered_multimap< int, int > &inter_table_mediator_BIG, const std::unordered_multimap< int, int > &inter_table_mediator_micro, const std::string BIG_type="Elasticity", const std::string micro_type="Elasticity", bool bSameElemsType=true)
void use_H1_coupling(std::string name)
libMesh::ImplicitSystem & add_elasticity(libMesh::EquationSystems &input_systems, libMesh::Order order=libMesh::FIRST, libMesh::FEFamily family=libMesh::LAGRANGE)
Add a linear elasticity libMesh::LinearImplicitSystem to the input libMesh::EquationSystems& input_sy...
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_coupling_parameters(const std::string &name, double coupling_rigidity, double coupling_width)
Set physical parameters.
void print_matrices_matlab(const std::string &name, const std::string &outputRoot="coupling")
void print_PETSC_matrices(const std::string &name, const std::string &outputRoot="coupling")
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)
libMesh::EquationSystems & add_mediator_EquationSystem(const std::string &name, libMesh::MeshBase &mediatorMesh)
libMesh::EquationSystems & set_Restricted_BIG_EquationSystem(const std::string &name, libMesh::MeshBase &R_BIGMesh)
libMesh::EquationSystems & add_Restricted_micro_EquationSystem(const std::string &name, libMesh::MeshBase &R_microMesh)