17int main(
int argc,
char *argv[]) {
23 PetscBool flg = PETSC_TRUE;
28 if (flg != PETSC_TRUE) {
30 "*** ERROR -my_file (MESH FILE NEEDED)");
33 moab::Core mb_instance;
34 moab::Interface &moab = mb_instance;
43 auto get_dim = [&]() {
47 0, 3, nb_ents_3d,
true);
53 0, 2, nb_ents_2d,
true);
69 if (dim == 3 || dim == 2) {
74 "Dimension not handled by test");
80 auto refine_edges = [&](
auto bit0,
auto bit) {
88 Range edges_to_refine;
89 CHKERR moab.get_entities_by_type(*meshset_ptr, MBEDGE, edges_to_refine);
91 for (Range::iterator eit = edges_to_refine.begin();
92 eit != edges_to_refine.end(); eit++, ii++) {
95 CHKERR moab.add_entities(*meshset_ref_edges_ptr, &*eit, 1);
98 CHKERR refine->addVerticesInTheMiddleOfEdges(*meshset_ref_edges_ptr,
bit,
102 }
else if (dim == 2) {
106 "Dimension not handled by test");
111 auto refine_ents_hanging_nodes = [&](
auto bit0,
auto bit) {
120 CHKERR moab.get_entities_by_dimension(*meshset_ptr, dim, ents_dim);
122 for (Range::iterator eit = ents_dim.begin(); eit != ents_dim.end();
126 std::vector<EntityHandle> adj_ents;
127 CHKERR moab.get_adjacencies(&*eit, 1, 1,
false, adj_ents);
128 CHKERR moab.add_entities(*meshset_ref_edges_ptr, &*adj_ents.begin(),
133 CHKERR refine->addVerticesInTheMiddleOfEdges(*meshset_ref_edges_ptr,
bit,
134 false,
QUIET, 10000);
136 CHKERR refine->refineTetsHangingNodes(*meshset_ptr,
bit,
QUIET,
true);
137 }
else if (dim == 2) {
138 CHKERR refine->refineTrisHangingNodes(*meshset_ptr,
bit,
QUIET,
true);
141 "Dimension not handled by test");
146 auto save_blessed_field = [&](
auto bit) {
149 std::ofstream myfile;
150 myfile.open(
"mesh_refine.txt");
156 CHKERR moab.get_entities_by_handle(*out_meshset_tet_ptr, tets);
159 for (Range::iterator tit = tets.begin(); tit != tets.end(); tit++) {
162 CHKERR moab.get_connectivity(*tit, conn, num_nodes,
true);
164 for (
int nn = 0; nn < num_nodes; nn++) {
166 myfile << conn[nn] <<
" ";
180 auto save_vtk = [&](
auto bit) {
185 CHKERR moab.write_file(
"out_mesh_refine.vtk",
"VTK",
"",
186 out_meshset_tet_ptr->get_ptr(), 1);
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.