14 {
15
17
18 try {
19
20 moab::Core mb_instance;
21 moab::Interface &moab = mb_instance;
22 ParallelComm *pcomm = ParallelComm::get_pcomm(&moab,
MYPCOMM_INDEX);
23 if (pcomm == NULL)
24 pcomm = new ParallelComm(&moab, PETSC_COMM_WORLD);
25
26
28 char mesh_out_file[255] = "out.h5m";
29 PetscBool flg_file = PETSC_FALSE;
30 PetscBool flg_n_part = PETSC_FALSE;
31 PetscBool flg_part = PETSC_FALSE;
32 PetscBool only_tags = PETSC_FALSE;
33 PetscInt n_partas = 1;
34 PetscBool create_lower_dim_ents = PETSC_TRUE;
36 PetscInt adj_dim = 2;
37
38 ierr = PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"none",
"none");
40
41 CHKERR PetscOptionsString(
"-my_file",
"mesh file name",
"",
"mesh.h5m",
43 if (flg_file != PETSC_TRUE)
44 CHKERR PetscOptionsString(
"-file_name",
"mesh file name",
"",
"mesh.h5m",
46 if (flg_file != PETSC_TRUE)
47 SETERRQ(PETSC_COMM_SELF, 1,
48 "*** ERROR -my_file (-file_name) (mesh file needed)");
49
50 const char *option;
51 option = "";
53
54 CHKERR PetscOptionsString(
"-output_file",
"output mesh file name",
"",
55 "out.h5m", mesh_out_file, 255, PETSC_NULL);
56 CHKERR PetscOptionsInt(
"-my_nparts",
"number of parts",
"", n_partas,
57 &n_partas, &flg_n_part);
58 CHKERR PetscOptionsInt(
"-nparts",
"number of parts",
"", n_partas,
59 &n_partas, &flg_part);
60
61 if (!flg_n_part && !flg_part)
62 SETERRQ(PETSC_COMM_SELF, 1,
63 "*** ERROR partitioning number not given (-nparts)");
64
65 auto get_nb_ents_by_dim = [&](
const int dim) {
66 int nb;
67 CHKERR moab.get_number_entities_by_dimension(0,
dim, nb);
68 return nb;
69 };
71 if (get_nb_ents_by_dim(
dim))
72 break;
73 }
74
77 "Dimension of entities to partition not found");
78
79 CHKERR PetscOptionsInt(
"-dim",
"entities dim",
"",
dim, &
dim, PETSC_NULL);
81 CHKERR PetscOptionsInt(
"-adj_dim",
"adjacency dim",
"", adj_dim, &adj_dim,
82 PETSC_NULL);
84 "-my_create_lower_dim_ents", "if tru create lower dimension entireties",
85 "", create_lower_dim_ents, &create_lower_dim_ents, PETSC_NULL);
86 CHKERR PetscOptionsBool(
"-block_tags",
"only block and meshsests tags",
"",
87 only_tags, &only_tags, PETSC_NULL);
88
89 ierr = PetscOptionsEnd();
91
92
95
97 CHKERR meshsets_interface_ptr->setMeshsetFromFile();
98
102 meshsets_interface_ptr->getBegin();
103 cit != meshsets_interface_ptr->getEnd(); cit++)
106
107 {
109 CHKERR moab.get_entities_by_dimension(0,
dim, ents_dim,
false);
110 if (create_lower_dim_ents) {
113 CHKERR moab.get_adjacencies(ents_dim, 2,
true, faces,
114 moab::Interface::UNION);
115 }
118 CHKERR moab.get_adjacencies(ents_dim, 1,
true, edges,
119 moab::Interface::UNION);
120 }
121 }
124 ents_dim,
dim, adj_dim, n_partas,
nullptr,
nullptr,
nullptr,
VERBOSE);
125 }
126
127 auto get_tag_list = [&]() {
128 std::vector<Tag> tags_list;
131 for (
auto &
m : list) {
132 auto meshset =
m.getMeshset();
133 std::vector<Tag> tmp_tags_list;
135 tmp_tags_list);
136 for (
auto t : tmp_tags_list) {
137 tags_list.push_back(
t);
138 }
139 }
140
141 return tags_list;
142 };
143
146 if (only_tags) {
147 auto tags_list = get_tag_list();
148 std::sort(tags_list.begin(), tags_list.end());
149 auto new_end = std::unique(tags_list.begin(), tags_list.end());
150 tags_list.resize(std::distance(tags_list.begin(), new_end));
151 tags_list.push_back(pcomm->part_tag());
152
153 CHKERR moab.write_file(mesh_out_file,
"MOAB",
"", &root_mesh, 1,
154 &*tags_list.begin(), tags_list.size());
155 } else {
156 CHKERR moab.write_file(mesh_out_file,
"MOAB",
"");
157 }
158 }
159 }
161
164
165 return 0;
166}
#define CATCH_ERRORS
Catch errors.
#define MYPCOMM_INDEX
default communicator number PCOMM
@ MOFEM_DATA_INCONSISTENCY
#define CHKERR
Inline error check.
FTensor::Index< 'm', SPACE_DIM > m
#define MOFEM_LOG(channel, severity)
Log.
SeverityLevel
Severity levels.
#define MOFEM_LOG_TAG(channel, tag)
Tag channel.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
MoFEMErrorCode partitionMesh(const Range &ents, const int dim, const int adj_dim, const int n_parts, Tag *th_vertex_weights=nullptr, Tag *th_edge_weights=nullptr, Tag *th_part_weights=nullptr, int verb=VERBOSE, const bool debug=false)
Set partition tag to each finite element in the problem.
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
multi_index_container< CubitMeshSets, indexed_by< hashed_unique< tag< Meshset_mi_tag >, member< CubitMeshSets, EntityHandle, &CubitMeshSets::meshset > >, ordered_non_unique< tag< CubitMeshsetType_mi_tag >, const_mem_fun< CubitMeshSets, unsigned long int, &CubitMeshSets::getBcTypeULong > >, ordered_non_unique< tag< CubitMeshsetMaskedType_mi_tag >, const_mem_fun< CubitMeshSets, unsigned long int, &CubitMeshSets::getMaksedBcTypeULong > >, ordered_non_unique< tag< CubitMeshsets_name >, const_mem_fun< CubitMeshSets, std::string, &CubitMeshSets::getName > >, hashed_unique< tag< Composite_Cubit_msId_And_MeshsetType_mi_tag >, composite_key< CubitMeshSets, const_mem_fun< CubitMeshSets, int, &CubitMeshSets::getMeshsetId >, const_mem_fun< CubitMeshSets, unsigned long int, &CubitMeshSets::getMaksedBcTypeULong > > > > > CubitMeshSet_multiIndex
Stores data about meshsets (see CubitMeshSets) storing data about boundary conditions,...
constexpr double t
plate stiffness
virtual moab::Interface & get_moab()=0
virtual int get_comm_rank() const =0
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.
static MoFEMErrorCode Finalize()
Checks for options to be called at the conclusion of the program.
Deprecated interface functions.
Interface for managing meshsets containing materials and boundary conditions.
CubitMeshSet_multiIndex & getMeshsetsMultindex()
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.