CArl
Code Arlequin / C++ implementation
mesh_tables.h
Go to the documentation of this file.
1 /*
2  * mesh_tables.h
3  *
4  * Created on: Jan 26, 2016
5  * Author: Thiago Milanetto Schlittler
6  *
7  * File containing the tools used to read and generate the mesh tables
8  */
9 
10 #ifndef COMMON_LIBMESH_CODE_MESH_TABLES_H_
11 #define COMMON_LIBMESH_CODE_MESH_TABLES_H_
12 
13 #include "carl_headers.h"
14 #include "mpi_carl_tools.h"
15 
16 namespace carl
17 {
18 
19 void set_weight_function_domain_idx( std::string &filename,
20  int& domain_Idx_BIG,
21  int& nb_of_domain_Idx_micro,
22  std::vector<int>& domain_Idx_micro,
23  std::vector<int>& domain_Idx_coupling
24  );
25 
26 //void set_mesh_Gmsh(
27 // libMesh::Mesh& mesh,
28 // const std::string& mesh_file,
29 // std::unordered_map<int,int>& mesh_NodeMap,
30 // std::unordered_map<int,int>& mesh_ElemMap
31 // );
32 //
33 //void set_mesh_Gmsh(
34 // libMesh::Mesh& mesh,
35 // const std::string& mesh_file,
36 // std::unordered_map<int,int> &node_gmsh_to_libmesh_map,
37 // std::unordered_map<int,int> &node_libmesh_to_gmsh_map,
38 // std::unordered_map<int,int> &element_gmsh_to_libmesh_map,
39 // std::unordered_map<int,int> &element_libmesh_to_gmsh_map
40 // );
41 //template<typename libMeshMesh>
42 //void set_mesh_Gmsh(
43 // libMeshMesh& mesh,
44 // const std::string& mesh_file
45 // );
46 
47 //void create_mesh_map(
48 // const std::string &filename,
49 // std::unordered_map<int,int> &node_map,
50 // std::unordered_map<int,int> &element_map
51 // );
52 //
53 //void create_mesh_map(
54 // const std::string &filename,
55 // std::unordered_map<int,int> &node_gmsh_to_libmesh_map,
56 // std::unordered_map<int,int> &node_libmesh_to_gmsh_map,
57 // std::unordered_map<int,int> &element_gmsh_to_libmesh_map,
58 // std::unordered_map<int,int> &element_libmesh_to_gmsh_map
59 // );
60 //
61 //void create_mesh_map(
62 // const std::string &filename,
63 // std::unordered_map<int,int> &node_map,
64 // std::unordered_map<int,int> &element_map,
65 // const libMesh::Parallel::Communicator& WorldComm
66 // );
67 //
68 //void create_mesh_map(
69 // const std::string &filename,
70 // std::unordered_map<int,int> &node_gmsh_to_libmesh_map,
71 // std::unordered_map<int,int> &node_libmesh_to_gmsh_map,
72 // std::unordered_map<int,int> &element_gmsh_to_libmesh_map,
73 // std::unordered_map<int,int> &element_libmesh_to_gmsh_map,
74 // const libMesh::Parallel::Communicator& WorldComm
75 // );
76 //
77 //void build_mesh_map_Gmsh(
78 // const std::string &filename,
79 // std::unordered_map<int,int> &node_map,
80 // std::unordered_map<int,int> &element_map
81 // );
82 //
83 //void build_mesh_map_Gmsh(
84 // const std::string &filename,
85 // std::unordered_map<int,int> &node_gmsh_to_libmesh_map,
86 // std::unordered_map<int,int> &node_libmesh_to_gmsh_map,
87 // std::unordered_map<int,int> &element_gmsh_to_libmesh_map,
88 // std::unordered_map<int,int> &element_libmesh_to_gmsh_map
89 // );
90 
92  const libMesh::Parallel::Communicator& WorldComm,
93  const std::string& intersection_full_table_Filename,
94  const std::string& equivalence_table_A_Filename,
95  const std::string& equivalence_table_B_Filename,
96  std::vector<carl::IntersectionData>& intersection_full_table,
97  std::unordered_map<int,int>& equivalence_table_A_to_R_A,
98  std::unordered_map<int,int>& equivalence_table_B_to_R_B,
99  std::unordered_map<int,int>& equivalence_table_R_A_to_A,
100  std::unordered_map<int,int>& equivalence_table_R_B_to_B
101  );
102 
103 void generate_intersection_tables_partial( std::string& intersection_table_restrict_B_Filename,
104  std::string& intersection_table_I_Filename,
105  std::unordered_map<int,int>& mesh_restrict_ElemMap,
106  std::unordered_map<int,int>& mesh_micro_ElemMap,
107  std::unordered_map<int,int>& mesh_inter_ElemMap,
108  std::vector<std::pair<int,int> >& intersection_table_restrict_B,
109  std::unordered_multimap<int,int>& intersection_table_I
110  );
111 
112 void generate_intersection_tables_full( std::string& equivalence_table_restrict_A_Filename,
113  std::string& intersection_table_restrict_B_Filename,
114  std::string& intersection_table_I_Filename,
115  std::unordered_map<int,int>& mesh_restrict_ElemMap,
116  std::unordered_map<int,int>& mesh_micro_ElemMap,
117  std::unordered_map<int,int>& mesh_BIG_ElemMap,
118  std::unordered_map<int,int>& mesh_inter_ElemMap,
119  std::unordered_map<int,int>& equivalence_table_restrict_A,
120  std::vector<std::pair<int,int> >& intersection_table_restrict_B,
121  std::unordered_multimap<int,int>& intersection_table_I
122  );
123 
125  const libMesh::Parallel::Communicator& WorldComm,
126  const std::string& equivalence_table_A_Filename,
127  const std::string& equivalence_table_B_Filename,
128 
129  std::unordered_map<int,int>& equivalence_table_A_to_R_A,
130  std::unordered_map<int,int>& equivalence_table_B_to_R_B,
131  std::unordered_map<int,int>& equivalence_table_R_A_to_A,
132  std::unordered_map<int,int>& equivalence_table_R_B_to_B );
133 
135  const std::unordered_map<int,std::pair<int,int> >& full_intersection_pairs_map,
136  const std::unordered_map<int,int>& equivalence_table_A_to_R_A,
137  const std::unordered_map<int,int>& equivalence_table_B_to_R_B,
138  std::unordered_map<int,std::pair<int,int> >& full_intersection_restricted_pairs_map);
139 
141  const libMesh::Parallel::Communicator& WorldComm,
142  const std::string& intersection_full_table_Filename,
143 
144  std::unordered_map<int,std::pair<int,int> >& full_intersection_pairs_map,
145  std::unordered_map<int,int>& full_intersection_meshI_to_inter_map);
146 
148  const libMesh::Parallel::Communicator& WorldComm,
149  const libMesh::Mesh& mesh_intersection,
150  const std::string& intersection_full_table_Filename,
151  const std::string& equivalence_table_A_Filename,
152  const std::string& equivalence_table_B_Filename,
153 
154  const std::unordered_map<int,int>& equivalence_table_A_to_R_A,
155  const std::unordered_map<int,int>& equivalence_table_B_to_R_B,
156 
157  std::unordered_map<int,std::pair<int,int> >& full_intersection_pairs_map,
158  std::unordered_map<int,std::pair<int,int> >& full_intersection_restricted_pairs_map,
159  std::unordered_map<int,int>& local_intersection_meshI_to_inter_map
160  );
161 
163  const libMesh::Parallel::Communicator& WorldComm,
164  const std::string& intersection_local_table_Filename,
165 
166  std::unordered_map<int,std::pair<int,int> >& local_intersection_pairs_map,
167  std::unordered_map<int,int>& local_intersection_meshI_to_inter_map);
168 
170  const libMesh::Parallel::Communicator& WorldComm,
171  const libMesh::Mesh& mesh_intersection,
172  const std::string& intersection_local_table_Filename,
173  const std::string& equivalence_table_A_Filename,
174  const std::string& equivalence_table_B_Filename,
175 
176  const std::unordered_map<int,int>& equivalence_table_A_to_R_A,
177  const std::unordered_map<int,int>& equivalence_table_B_to_R_B,
178 
179  std::unordered_map<int,std::pair<int,int> >& local_intersection_pairs_map,
180  std::unordered_map<int,std::pair<int,int> >& local_intersection_restricted_pairs_map,
181  std::unordered_map<int,int>& local_intersection_meshI_to_inter_map
182  );
183 
185  const libMesh::Parallel::Communicator& WorldComm,
186  const std::string& intersection_global_table_Filename,
187  const std::unordered_map<int,int>& equivalence_table_system_to_mediator,
188  const std::unordered_map<int,int>& equivalence_table_mediator_to_system,
189 
190  std::unordered_multimap<int,int>& inter_mediator_A,
191  std::unordered_multimap<int,int>& inter_mediator_B);
192 
194  const libMesh::Parallel::Communicator& WorldComm,
195  libMesh::Mesh& mesh_input,
196  libMesh::Mesh& mesh_intersect,
197  std::unordered_map<int,std::pair<int,int> >& local_intersection_pairs_map,
198  bool bUseSecond = true);
199 };
200 
201 
202 
203 
204 
205 
206 
207 #endif /* COMMON_LIBMESH_CODE_MESH_TABLES_H_ */
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)
Definition: mesh_tables.cpp:4
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)
Definition: mesh_tables.cpp:54
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)