Actual source code: ex1.c

  1: static char help[] = "Tests various DMPlex routines to construct, refine and distribute a mesh.\n\n";

  3: #include <petscdmplex.h>
  4: #include <petscdmplextransform.h>
  5: #include <petscsf.h>

  7: enum {
  8:   STAGE_LOAD,
  9:   STAGE_DISTRIBUTE,
 10:   STAGE_REFINE,
 11:   STAGE_OVERLAP
 12: };

 14: typedef struct {
 15:   PetscLogEvent createMeshEvent;
 16:   PetscLogStage stages[4];
 17:   /* Domain and mesh definition */
 18:   PetscInt  dim;     /* The topological mesh dimension */
 19:   PetscInt  overlap; /* The cell overlap to use during partitioning */
 20:   PetscBool testp4est[2];
 21:   PetscBool redistribute;
 22:   PetscBool final_ref;         /* Run refinement at the end */
 23:   PetscBool final_diagnostics; /* Run diagnostics on the final mesh */
 24: } AppCtx;

 26: PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
 27: {
 28:   PetscFunctionBegin;
 29:   options->dim               = 2;
 30:   options->overlap           = 0;
 31:   options->testp4est[0]      = PETSC_FALSE;
 32:   options->testp4est[1]      = PETSC_FALSE;
 33:   options->redistribute      = PETSC_FALSE;
 34:   options->final_ref         = PETSC_FALSE;
 35:   options->final_diagnostics = PETSC_TRUE;

 37:   PetscOptionsBegin(comm, "", "Meshing Problem Options", "DMPLEX");
 38:   PetscCall(PetscOptionsRangeInt("-dim", "The topological mesh dimension", "ex1.c", options->dim, &options->dim, NULL, 1, 3));
 39:   PetscCall(PetscOptionsBoundedInt("-overlap", "The cell overlap for partitioning", "ex1.c", options->overlap, &options->overlap, NULL, 0));
 40:   PetscCall(PetscOptionsBool("-test_p4est_seq", "Test p4est with sequential base DM", "ex1.c", options->testp4est[0], &options->testp4est[0], NULL));
 41:   PetscCall(PetscOptionsBool("-test_p4est_par", "Test p4est with parallel base DM", "ex1.c", options->testp4est[1], &options->testp4est[1], NULL));
 42:   PetscCall(PetscOptionsBool("-test_redistribute", "Test redistribution", "ex1.c", options->redistribute, &options->redistribute, NULL));
 43:   PetscCall(PetscOptionsBool("-final_ref", "Run uniform refinement on the final mesh", "ex1.c", options->final_ref, &options->final_ref, NULL));
 44:   PetscCall(PetscOptionsBool("-final_diagnostics", "Run diagnostics on the final mesh", "ex1.c", options->final_diagnostics, &options->final_diagnostics, NULL));
 45:   PetscOptionsEnd();

 47:   PetscCall(PetscLogEventRegister("CreateMesh", DM_CLASSID, &options->createMeshEvent));
 48:   PetscCall(PetscLogStageRegister("MeshLoad", &options->stages[STAGE_LOAD]));
 49:   PetscCall(PetscLogStageRegister("MeshDistribute", &options->stages[STAGE_DISTRIBUTE]));
 50:   PetscCall(PetscLogStageRegister("MeshRefine", &options->stages[STAGE_REFINE]));
 51:   PetscCall(PetscLogStageRegister("MeshOverlap", &options->stages[STAGE_OVERLAP]));
 52:   PetscFunctionReturn(PETSC_SUCCESS);
 53: }

 55: PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
 56: {
 57:   PetscInt    dim           = user->dim;
 58:   PetscBool   testp4est_seq = user->testp4est[0];
 59:   PetscBool   testp4est_par = user->testp4est[1];
 60:   PetscMPIInt rank, size;

 62:   PetscFunctionBegin;
 63:   PetscCall(PetscLogEventBegin(user->createMeshEvent, 0, 0, 0, 0));
 64:   PetscCallMPI(MPI_Comm_rank(comm, &rank));
 65:   PetscCallMPI(MPI_Comm_size(comm, &size));
 66:   PetscCall(PetscLogStagePush(user->stages[STAGE_LOAD]));
 67:   PetscCall(DMCreate(comm, dm));
 68:   PetscCall(DMSetType(*dm, DMPLEX));
 69:   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
 70:   PetscCall(DMSetFromOptions(*dm));
 71:   PetscCall(DMLocalizeCoordinates(*dm));

 73:   PetscCall(DMViewFromOptions(*dm, NULL, "-init_dm_view"));
 74:   PetscCall(DMGetDimension(*dm, &dim));

 76:   if (testp4est_seq) {
 77:     PetscCheck(PetscDefined(HAVE_P4EST), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Reconfigure PETSc with --download-p4est");
 78:     DM dmConv = NULL;

 80:     PetscCall(DMPlexCheck(*dm));
 81:     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
 82:     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
 83:     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
 84:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
 85:     if (dmConv) {
 86:       PetscCall(DMDestroy(dm));
 87:       *dm = dmConv;
 88:     }
 89:     PetscCall(DMViewFromOptions(*dm, NULL, "-initref_dm_view"));
 90:     PetscCall(DMPlexCheck(*dm));

 92:     /* For topologically periodic meshes, we first localize coordinates,
 93:        and then remove any information related with the
 94:        automatic computation of localized vertices.
 95:        This way, refinement operations and conversions to p4est
 96:        will preserve the shape of the domain in physical space */
 97:     PetscCall(DMSetPeriodicity(*dm, NULL, NULL, NULL));

 99:     PetscCall(DMConvert(*dm, dim == 2 ? DMP4EST : DMP8EST, &dmConv));
100:     if (dmConv) {
101:       PetscCall(PetscObjectSetOptionsPrefix((PetscObject)dmConv, "conv_seq_1_"));
102:       PetscCall(DMSetFromOptions(dmConv));
103:       PetscCall(DMDestroy(dm));
104:       *dm = dmConv;
105:     }
106:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "conv_seq_1_"));
107:     PetscCall(DMSetUp(*dm));
108:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
109:     PetscCall(DMConvert(*dm, DMPLEX, &dmConv));
110:     if (dmConv) {
111:       PetscCall(PetscObjectSetOptionsPrefix((PetscObject)dmConv, "conv_seq_2_"));
112:       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
113:       PetscCall(DMSetFromOptions(dmConv));
114:       PetscCall(DMDestroy(dm));
115:       *dm = dmConv;
116:     }
117:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "conv_seq_2_"));
118:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
119:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
120:   }

122:   PetscCall(PetscLogStagePop());
123:   if (!testp4est_seq) {
124:     PetscCall(PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]));
125:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view"));
126:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "dist_"));
127:     PetscCall(DMSetFromOptions(*dm));
128:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
129:     PetscCall(PetscLogStagePop());
130:     PetscCall(DMViewFromOptions(*dm, NULL, "-distributed_dm_view"));
131:   }
132:   PetscCall(PetscLogStagePush(user->stages[STAGE_REFINE]));
133:   PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "ref_"));
134:   PetscCall(DMSetFromOptions(*dm));
135:   PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
136:   PetscCall(PetscLogStagePop());

138:   if (testp4est_par) {
139:     PetscCheck(PetscDefined(HAVE_P4EST), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Reconfigure PETSc with --download-p4est");
140:     DM dmConv = NULL;

142:     PetscCall(DMPlexCheck(*dm));
143:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
144:     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
145:     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
146:     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
147:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
148:     if (dmConv) {
149:       PetscCall(DMDestroy(dm));
150:       *dm = dmConv;
151:     }
152:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
153:     PetscCall(DMPlexCheck(*dm));

155:     PetscCall(DMConvert(*dm, dim == 2 ? DMP4EST : DMP8EST, &dmConv));
156:     if (dmConv) {
157:       PetscCall(PetscObjectSetOptionsPrefix((PetscObject)dmConv, "conv_par_1_"));
158:       PetscCall(DMSetFromOptions(dmConv));
159:       PetscCall(DMDestroy(dm));
160:       *dm = dmConv;
161:     }
162:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "conv_par_1_"));
163:     PetscCall(DMSetUp(*dm));
164:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
165:     PetscCall(DMConvert(*dm, DMPLEX, &dmConv));
166:     if (dmConv) {
167:       PetscCall(PetscObjectSetOptionsPrefix((PetscObject)dmConv, "conv_par_2_"));
168:       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
169:       PetscCall(DMSetFromOptions(dmConv));
170:       PetscCall(DMDestroy(dm));
171:       *dm = dmConv;
172:     }
173:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "conv_par_2_"));
174:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
175:     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
176:   }

178:   /* test redistribution of an already distributed mesh */
179:   if (user->redistribute) {
180:     DM       distributedMesh;
181:     PetscSF  sf;
182:     PetscInt nranks;

184:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view"));
185:     PetscCall(DMPlexDistribute(*dm, 0, NULL, &distributedMesh));
186:     if (distributedMesh) {
187:       PetscCall(DMGetPointSF(distributedMesh, &sf));
188:       PetscCall(PetscSFSetUp(sf));
189:       PetscCall(DMGetNeighbors(distributedMesh, &nranks, NULL));
190:       PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm)));
191:       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %" PetscInt_FMT "\n", nranks));
192:       PetscCall(DMDestroy(dm));
193:       *dm = distributedMesh;
194:     }
195:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_redist_view"));
196:   }

198:   if (user->overlap) {
199:     DM overlapMesh = NULL;

201:     /* Add the overlap to refined mesh */
202:     PetscCall(PetscLogStagePush(user->stages[STAGE_OVERLAP]));
203:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view"));
204:     PetscCall(DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh));
205:     if (overlapMesh) {
206:       PetscInt overlap;
207:       PetscCall(DMPlexGetOverlap(overlapMesh, &overlap));
208:       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %" PetscInt_FMT "\n", overlap));
209:       PetscCall(DMDestroy(dm));
210:       *dm = overlapMesh;
211:     }
212:     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view"));
213:     PetscCall(PetscLogStagePop());
214:   }
215:   if (user->final_ref) {
216:     DM refinedMesh = NULL;

218:     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
219:     PetscCall(DMRefine(*dm, comm, &refinedMesh));
220:     if (refinedMesh) {
221:       PetscCall(DMDestroy(dm));
222:       *dm = refinedMesh;
223:     }
224:   }

226:   PetscCall(PetscObjectSetName((PetscObject)*dm, "Generated Mesh"));
227:   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
228:   if (user->final_diagnostics) PetscCall(DMPlexCheck(*dm));
229:   PetscCall(PetscLogEventEnd(user->createMeshEvent, 0, 0, 0, 0));
230:   PetscFunctionReturn(PETSC_SUCCESS);
231: }

233: int main(int argc, char **argv)
234: {
235:   DM     dm;
236:   AppCtx user;

238:   PetscFunctionBeginUser;
239:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
240:   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
241:   PetscCall(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
242:   PetscCall(DMDestroy(&dm));
243:   PetscCall(PetscFinalize());
244:   return 0;
245: }

247: /*TEST

249:   # CTetGen 0-1
250:   test:
251:     suffix: 0
252:     requires: ctetgen
253:     args: -dm_coord_space 0 -dm_plex_dim 3 -dim 3 -dm_plex_interpolate 0 -ctetgen_verbose 4 -dm_view ascii::ascii_info_detail -info :~sys
254:   test:
255:     suffix: 1
256:     requires: ctetgen
257:     args: -dm_coord_space 0 -dm_plex_dim 3 -dim 3 -dm_plex_interpolate 0 -ctetgen_verbose 4 -dm_refine_volume_limit_pre 0.0625 -dm_view ascii::ascii_info_detail -info :~sys

259:   # 2D LaTex and ASCII output 2-9
260:   test:
261:     suffix: 2
262:     requires: triangle
263:     args: -dm_plex_interpolate 0 -dm_view ascii::ascii_latex
264:   test:
265:     suffix: 3
266:     requires: triangle
267:     args: -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
268:   test:
269:     suffix: 4
270:     requires: triangle
271:     nsize: 2
272:     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_info_detail
273:   test:
274:     suffix: 5
275:     requires: triangle
276:     nsize: 2
277:     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
278:   test:
279:     suffix: 6
280:     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_view ascii::ascii_info_detail
281:   test:
282:     suffix: 7
283:     args: -dm_coord_space 0 -dm_plex_simplex 0 -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
284:   test:
285:     suffix: 8
286:     nsize: 2
287:     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
288:   test:
289:     suffix: box_2d_latex_xper
290:     nsize: 1
291:     args: -dm_plex_simplex 0 -dm_plex_box_faces 5,5 -dm_plex_box_bd periodic,none \
292:           -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex -dm_plex_view_edges 0

294:   # 1D ASCII output
295:   testset:
296:     args: -dm_coord_space 0 -dm_plex_dim 1 -dm_view ascii::ascii_info_detail -dm_plex_check_all
297:     test:
298:       suffix: 1d_0
299:       args:
300:     test:
301:       suffix: 1d_1
302:       args: -ref_dm_refine 2
303:     test:
304:       suffix: 1d_2
305:       args: -dm_plex_box_faces 5 -dm_plex_box_bd periodic

307:   # Parallel refinement tests with overlap
308:   test:
309:     suffix: refine_overlap_1d
310:     nsize: 2
311:     args: -dm_plex_dim 1 -dim 1 -dm_plex_box_faces 4 -dm_plex_box_faces 4 -ref_dm_refine 1 -overlap {{0 1 2}separate output} -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_info
312:   test:
313:     suffix: refine_overlap_2d
314:     requires: triangle
315:     nsize: {{2 8}separate output}
316:     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -overlap {{0 1 2}separate output} -dm_view ascii::ascii_info

318:   # Parallel extrusion tests
319:   test:
320:     suffix: 1d_extruded
321:     args: -dm_plex_dim 1 -dm_plex_box_faces 5 -dm_extrude 3 -dm_plex_check_all -dm_view draw
322:     output_file: output/empty.out

324:   test:
325:     # This test needs a non-tensor prism so we can make a coordinate space
326:     suffix: spheresurface_extruded
327:     nsize : 4
328:     args: -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_use_tensor 0 \
329:           -dist_dm_distribute -petscpartitioner_type simple \
330:           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical

332:   test:
333:     # This test needs a non-tensor prism so we can make a coordinate space
334:     suffix: spheresurface_extruded_symmetric
335:     nsize : 4
336:     args: -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_use_tensor 0 -dm_plex_transform_extrude_symmetric \
337:           -dist_dm_distribute -petscpartitioner_type simple \
338:           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical

340:   test:
341:     # Test with a tensor prism which cannot have a coordinate space
342:     suffix: spheresurface_extruded_nocoord
343:     nsize : 4
344:     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 \
345:           -dist_dm_distribute -petscpartitioner_type simple \
346:           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical

348:   # Parallel simple partitioner tests
349:   test:
350:     suffix: part_simple_0
351:     requires: triangle
352:     nsize: 2
353:     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
354:   test:
355:     suffix: part_simple_1
356:     requires: triangle
357:     nsize: 8
358:     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail

360:   # Parallel partitioner tests
361:   test:
362:     suffix: part_parmetis_0
363:     requires: parmetis
364:     nsize: 2
365:     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type parmetis -dm_view -petscpartitioner_view -test_redistribute -dm_plex_csr_alg {{mat graph overlap}} -dm_pre_redist_view ::load_balance -dm_post_redist_view ::load_balance -petscpartitioner_view_graph
366:   test:
367:     suffix: part_ptscotch_0
368:     requires: ptscotch
369:     nsize: 2
370:     args: -dm_plex_simplex 0 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_strategy quality -test_redistribute -dm_plex_csr_alg {{mat graph overlap}} -dm_pre_redist_view ::load_balance -dm_post_redist_view ::load_balance -petscpartitioner_view_graph
371:   test:
372:     suffix: part_ptscotch_1
373:     requires: ptscotch
374:     nsize: 8
375:     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1

377:   # CGNS reader tests 10-11 (need to find smaller test meshes)
378:   test:
379:     suffix: cgns_0
380:     requires: datafilespath cgns
381:     args: -dm_plex_filename ${DATAFILESPATH}/meshes/tut21.cgns -dm_view

383:   # ExodusII reader tests
384:   testset:
385:     args: -dm_plex_boundary_label boundary -dm_plex_check_all -dm_view
386:     test:
387:       suffix: exo_0
388:       requires: exodusii
389:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad.exo
390:     test:
391:       suffix: exo_1
392:       requires: exodusii
393:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad-15.exo
394:     test:
395:       suffix: exo_2
396:       requires: exodusii
397:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/squaremotor-30.exo
398:     test:
399:       suffix: exo_3
400:       requires: exodusii
401:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo
402:     test:
403:       suffix: exo_4
404:       requires: exodusii
405:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/simpleblock-100.exo
406:     test:
407:       suffix: exo_1d_0
408:       requires: exodusii
409:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/1d-2elems.e

411:   # Gmsh mesh reader tests
412:   testset:
413:     args: -dm_coord_space 0 -dm_view

415:     test:
416:       suffix: gmsh_0
417:       requires: !single
418:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
419:     test:
420:       suffix: gmsh_1
421:       requires: !single
422:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
423:     test:
424:       suffix: gmsh_1_box_label
425:       requires: !single
426:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dm_plex_box_label
427:     test:
428:       suffix: gmsh_2
429:       requires: !single
430:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
431:     test:
432:       suffix: gmsh_3
433:       nsize: 3
434:       requires: !single
435:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
436:     test:
437:       suffix: gmsh_4
438:       nsize: 3
439:       requires: !single
440:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
441:     test:
442:       suffix: gmsh_5
443:       requires: !single
444:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
445:     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
446:     test:
447:       suffix: gmsh_6
448:       requires: !single
449:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
450:     test:
451:       suffix: gmsh_7
452:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_view ::ascii_info_detail -dm_plex_check_all
453:     test:
454:       suffix: gmsh_8
455:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
456:   testset:
457:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic_bin.msh -dm_view ::ascii_info_detail -dm_plex_check_all
458:     test:
459:       suffix: gmsh_9
460:     test:
461:       suffix: gmsh_9_periodic_0
462:       args: -dm_plex_gmsh_periodic 0
463:   testset:
464:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view ::ascii_info_detail -dm_plex_check_all
465:     test:
466:       suffix: gmsh_10
467:     test:
468:       suffix: gmsh_10_periodic_0
469:       args: -dm_plex_gmsh_periodic 0
470:   testset:
471:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view ::ascii_info_detail -dm_plex_check_all -ref_dm_refine 1
472:     test:
473:       suffix: gmsh_11
474:     test:
475:       suffix: gmsh_11_periodic_0
476:       args: -dm_plex_gmsh_periodic 0
477:   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
478:   test:
479:     suffix: gmsh_12
480:     nsize: 4
481:     requires: !single mpiio
482:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -viewer_binary_mpiio -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
483:   test:
484:     suffix: gmsh_13_hybs2t
485:     nsize: 4
486:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dist_dm_distribute -petscpartitioner_type simple -dm_view -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox -dm_plex_check_all
487:   test:
488:     suffix: gmsh_14_ext
489:     requires: !single
490:     args: -dm_coord_space 0 -dm_extrude 2 -dm_plex_transform_extrude_thickness 1.5 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dm_view -dm_plex_check_all
491:   test:
492:     suffix: gmsh_14_ext_s2t
493:     requires: !single
494:     args: -dm_coord_space 0 -dm_extrude 2 -dm_plex_transform_extrude_thickness 1.5 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox
495:   test:
496:     suffix: gmsh_15_hyb3d
497:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
498:   test:
499:     suffix: gmsh_15_hyb3d_s2t
500:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox
501:   test:
502:     suffix: gmsh_16_spheresurface
503:     nsize : 4
504:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_plex_check_all -dm_view -dist_dm_distribute -petscpartitioner_type simple
505:   test:
506:     suffix: gmsh_16_spheresurface_s2t
507:     nsize : 4
508:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox -dm_plex_check_all -dm_view -dist_dm_distribute -petscpartitioner_type simple
509:   test:
510:     suffix: gmsh_16_spheresurface_extruded
511:     nsize : 4
512:     args: -dm_coord_space 0 -dm_extrude 3 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_plex_check_all -dm_view -dist_dm_distribute -petscpartitioner_type simple
513:   test:
514:     suffix: gmsh_16_spheresurface_extruded_s2t
515:     nsize : 4
516:     args: -dm_coord_space 0 -dm_extrude 3 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox -dm_plex_check_all -dm_view -dist_dm_distribute -petscpartitioner_type simple
517:   test:
518:     suffix: gmsh_17_hyb3d_interp_ascii
519:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
520:   test:
521:     suffix: exodus_17_hyb3d_interp_ascii
522:     requires: exodusii
523:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all

525:   # Legacy Gmsh v22/v40 ascii/binary reader tests
526:   testset:
527:     output_file: output/ex1_gmsh_3d_legacy.out
528:     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
529:     test:
530:       suffix: gmsh_3d_ascii_v22
531:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
532:     test:
533:       suffix: gmsh_3d_ascii_v40
534:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
535:     test:
536:       suffix: gmsh_3d_binary_v22
537:       # Could not remake binary to remove extra face labeling
538:       output_file: output/ex1_gmsh_3d_legacy_v22_bin.out
539:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
540:     test:
541:       suffix: gmsh_3d_binary_v40
542:       requires: long64
543:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4

545:   # Gmsh v41 ascii/binary reader tests
546:   testset: # 32-bit mesh, sequential
547:     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
548:     output_file: output/ex1_gmsh_3d_32.out
549:     test:
550:       suffix: gmsh_3d_ascii_v41_32
551:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
552:     test:
553:       suffix: gmsh_3d_binary_v41_32
554:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
555:     test:
556:       suffix: gmsh_3d_binary_v41_32_mpiio
557:       requires: defined(PETSC_HAVE_MPIIO)
558:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
559:   test:
560:     suffix: gmsh_quad_8node
561:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
562:           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
563:   test:
564:     suffix: gmsh_hex_20node
565:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
566:           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
567:   testset:  # 32-bit mesh, parallel
568:     args: -dm_coord_space 0 -dist_dm_distribute -petscpartitioner_type simple -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
569:     nsize: 2
570:     output_file: output/ex1_gmsh_3d_32_np2.out
571:     test:
572:       suffix: gmsh_3d_ascii_v41_32_np2
573:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
574:     test:
575:       suffix: gmsh_3d_binary_v41_32_np2
576:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
577:     test:
578:       suffix: gmsh_3d_binary_v41_32_np2_mpiio
579:       requires: defined(PETSC_HAVE_MPIIO)
580:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
581:   testset: # 64-bit mesh, sequential
582:     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
583:     output_file: output/ex1_gmsh_3d_64.out
584:     test:
585:       suffix: gmsh_3d_ascii_v41_64
586:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
587:     test:
588:       suffix: gmsh_3d_binary_v41_64
589:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
590:     test:
591:       suffix: gmsh_3d_binary_v41_64_mpiio
592:       requires: defined(PETSC_HAVE_MPIIO)
593:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
594:   testset:  # 64-bit mesh, parallel
595:     args: -dm_coord_space 0 -dist_dm_distribute -petscpartitioner_type simple -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
596:     nsize: 2
597:     output_file: output/ex1_gmsh_3d_64_np2.out
598:     test:
599:       suffix: gmsh_3d_ascii_v41_64_np2
600:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
601:     test:
602:       suffix: gmsh_3d_binary_v41_64_np2
603:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
604:     test:
605:       suffix: gmsh_3d_binary_v41_64_np2_mpiio
606:       requires: defined(PETSC_HAVE_MPIIO)
607:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio

609:   # Fluent mesh reader tests
610:   test:
611:     suffix: fluent_0
612:     requires: !complex
613:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view
614:   test:
615:     suffix: fluent_1
616:     nsize: 3
617:     requires: !complex
618:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view
619:   test:
620:     suffix: fluent_2
621:     requires: !complex
622:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view
623:   test:
624:     suffix: fluent_3
625:     requires: !complex
626:     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
627:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
628:   test:
629:     suffix: fluent_4
630:     requires: !complex defined(PETSC_USE_INFO)
631:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/testcase3D.cas -info :viewer -dm_view
632:   test:
633:     suffix: fluent_5
634:     requires: !complex defined(PETSC_USE_INFO)
635:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/wedge_cylinder.cas -info :viewer -dm_view

637:   # STL mesh reader tests
638:   test:
639:     suffix: stl_0
640:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube.stl -dm_view

642:   # Shapefile reader tests
643:   test:
644:     suffix: shp_0
645:     requires: datafilespath
646:     args: -dm_plex_filename ${DATAFILESPATH}/meshes/NYState.shp -dm_view

648:   # Test shape quality
649:   test:
650:     suffix: test_shape
651:     requires: ctetgen
652:     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape

654:   # Test simplex to tensor conversion
655:   test:
656:     suffix: s2t2
657:     requires: triangle
658:     args: -dm_coord_space 0 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox -dm_refine_volume_limit_pre 0.0625 -dm_view ascii::ascii_info_detail

660:   test:
661:     suffix: s2t3
662:     requires: ctetgen
663:     args: -dm_coord_space 0 -dm_plex_dim 3 -dim 3 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox -dm_refine_volume_limit_pre 0.0625 -dm_view ascii::ascii_info_detail

665:   # Test quad to simplex conversion
666:   test:
667:     suffix: q2s2_0
668:     args: -dm_plex_box_faces 5,3 -dm_plex_simplex 0 -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tosimplex -final_diagnostics

670:   test:
671:     suffix: q2s2_1
672:     args: -dm_plex_box_faces 5,3 -dm_plex_simplex 0 -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tosimplex -ref_dm_plex_transform_tosimplex_reflect 1 -final_diagnostics

674:   # Test cylinder
675:   testset:
676:     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
677:     test:
678:       suffix: cylinder
679:       args: -ref_dm_refine 1
680:     test:
681:       suffix: cylinder_per
682:       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0

684:   test:
685:     suffix: box_2d
686:     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view

688:   test:
689:     suffix: box_2d_per
690:     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view

692:   test:
693:     suffix: box_2d_per_unint
694:     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_plex_interpolate 0 -dm_plex_box_faces 3,3 -dm_plex_box_faces 3,3 -dm_plex_check_all -dm_view ::ascii_info_detail

696:   test:
697:     suffix: box_3d
698:     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view

700:   test:
701:     requires: triangle
702:     suffix: box_wedge
703:     args: -dm_coord_space 0 -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk: -dm_plex_check_all

705:   testset:
706:     requires: triangle
707:     args: -dm_coord_space 0 -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_cell tensor_triangular_prism -dm_plex_box_faces 2,3,1 -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox
708:     test:
709:       suffix: box_wedge_s2t
710:     test:
711:       nsize: 3
712:       args: -dist_dm_distribute -petscpartitioner_type simple
713:       suffix: box_wedge_s2t_parallel

715:   # Test GLVis output
716:   testset:
717:     args: -dm_coord_space 0 -dm_plex_interpolate 0
718:     test:
719:       suffix: glvis_2d_tet
720:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
721:     test:
722:       suffix: glvis_2d_tet_per
723:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
724:     test:
725:       suffix: glvis_3d_tet
726:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
727:   testset:
728:     args: -dm_coord_space 0
729:     test:
730:       suffix: glvis_2d_tet_per_mfem
731:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem -dm_view glvis:
732:     test:
733:       suffix: glvis_2d_quad
734:       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
735:     test:
736:       suffix: glvis_2d_quad_per
737:       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_plex_box_bd periodic,periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
738:     test:
739:       suffix: glvis_2d_quad_per_shift
740:       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_plex_box_bd periodic,periodic -dm_plex_box_lower -1,-1 -dm_plex_box_upper 1,1 -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
741:     test:
742:       suffix: glvis_2d_quad_per_mfem
743:       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_plex_box_bd periodic,periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem
744:     test:
745:       suffix: glvis_3d_tet_per
746:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
747:     test:
748:       suffix: glvis_3d_tet_per_mfem
749:       TODO: broken
750:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -viewer_glvis_dm_plex_enable_mfem -dm_view glvis:
751:     test:
752:       suffix: glvis_3d_hex
753:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
754:     test:
755:       suffix: glvis_3d_hex_per
756:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_plex_box_bd periodic,periodic,periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
757:     test:
758:       suffix: glvis_3d_hex_per_mfem
759:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_plex_box_bd periodic,periodic,periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem
760:     test:
761:       suffix: glvis_2d_hyb
762:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
763:     test:
764:       suffix: glvis_3d_hyb
765:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
766:     test:
767:       suffix: glvis_3d_hyb_s2t
768:       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_3d_cube.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -ref_dm_refine 1 -ref_dm_plex_transform_type refine_tobox -dm_plex_check_all

770:   # Test P4EST
771:   testset:
772:     requires: p4est
773:     args: -dm_coord_space 0 -dm_view -test_p4est_seq -conv_seq_2_dm_plex_check_all -conv_seq_1_dm_forest_minimum_refinement 1
774:     test:
775:       suffix: p4est_periodic
776:       args: -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic -dm_plex_box_faces 3,5 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 2 -conv_seq_1_dm_p4est_refine_pattern hash
777:     test:
778:       suffix: p4est_periodic_3d
779:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,none -dm_plex_box_faces 3,3,2 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash
780:     test:
781:       suffix: p4est_gmsh_periodic
782:       args: -dm_coord_space 0 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh
783:     test:
784:       suffix: p4est_gmsh_surface
785:       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
786:     test:
787:       suffix: p4est_gmsh_surface_parallel
788:       nsize: 2
789:       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -petscpartitioner_type simple -dm_view ::load_balance
790:     test:
791:       suffix: p4est_hyb_2d
792:       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh
793:     test:
794:       suffix: p4est_hyb_3d
795:       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
796:     test:
797:       requires: ctetgen
798:       suffix: p4est_s2t_bugfaces_3d
799:       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 0 -dm_plex_dim 3 -dm_plex_box_faces 1,1
800:     test:
801:       suffix: p4est_bug_overlapsf
802:       nsize: 3
803:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 2,2,1 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -petscpartitioner_type simple
804:     test:
805:       suffix: p4est_redistribute
806:       nsize: 3
807:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 2,2,1 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -petscpartitioner_type simple -test_redistribute -dm_plex_csr_alg {{mat graph overlap}} -dm_view ::load_balance
808:     test:
809:       suffix: p4est_gmsh_s2t_3d
810:       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
811:     test:
812:       suffix: p4est_gmsh_s2t_3d_hash
813:       args: -conv_seq_1_dm_forest_initial_refinement 1 -conv_seq_1_dm_forest_maximum_refinement 2 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
814:     test:
815:       requires: long_runtime
816:       suffix: p4est_gmsh_periodic_3d
817:       args: -dm_coord_space 0 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh

819:   testset:
820:     requires: p4est
821:     nsize: 6
822:     args: -dm_coord_space 0 -test_p4est_par -conv_par_2_dm_plex_check_all -conv_par_1_dm_forest_minimum_refinement 1 -conv_par_1_dm_forest_partition_overlap 0 -dist_dm_distribute
823:     test:
824:       TODO: interface cones do not conform
825:       suffix: p4est_par_periodic
826:       args: -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic -dm_plex_box_faces 3,5 -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash
827:     test:
828:       TODO: interface cones do not conform
829:       suffix: p4est_par_periodic_3d
830:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,periodic -dm_plex_box_faces 3,5,4 -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash
831:     test:
832:       TODO: interface cones do not conform
833:       suffix: p4est_par_gmsh_periodic
834:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh
835:     test:
836:       suffix: p4est_par_gmsh_surface
837:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
838:       output_file: output/empty.out
839:     test:
840:       suffix: p4est_par_gmsh_s2t_3d
841:       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
842:       output_file: output/empty.out
843:     test:
844:       TODO: interface cones do not conform
845:       suffix: p4est_par_gmsh_s2t_3d_hash
846:       args: -conv_par_1_dm_forest_initial_refinement 1 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
847:     test:
848:       requires: long_runtime
849:       suffix: p4est_par_gmsh_periodic_3d
850:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh

852:   testset:
853:     requires: p4est
854:     nsize: 6
855:     args: -dm_coord_space 0 -test_p4est_par -conv_par_2_dm_plex_check_all -conv_par_1_dm_forest_minimum_refinement 1 -conv_par_1_dm_forest_partition_overlap 1 -dist_dm_distribute -petscpartitioner_type simple
856:     test:
857:       suffix: p4est_par_ovl_periodic
858:       args: -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic -dm_plex_box_faces 3,5 -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash
859:       output_file: output/empty.out
860:     # Problem for -dm_plex_box_faces 3,5,4 -conv_par_1_dm_forest_maximum_refinement 2
861:     test:
862:       suffix: p4est_par_ovl_periodic_3d
863:       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,none \
864:               -dm_plex_box_faces 3,5,2 \
865:               -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 \
866:                 -conv_par_1_dm_p4est_refine_pattern hash
867:       output_file: output/empty.out
868:     test:
869:       suffix: p4est_par_ovl_gmsh_periodic
870:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh
871:       output_file: output/empty.out
872:     test:
873:       suffix: p4est_par_ovl_gmsh_surface
874:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
875:       output_file: output/empty.out
876:     test:
877:       suffix: p4est_par_ovl_gmsh_s2t_3d
878:       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
879:       output_file: output/empty.out
880:     test:
881:       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
882:       args: -conv_par_1_dm_forest_initial_refinement 1 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
883:       output_file: output/empty.out
884:     test:
885:       requires: long_runtime
886:       suffix: p4est_par_ovl_gmsh_periodic_3d
887:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh
888:       output_file: output/empty.out
889:     test:
890:       suffix: p4est_par_ovl_hyb_2d
891:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh
892:       output_file: output/empty.out
893:     # -conv_par_1_dm_forest_maximum_refinement 1 was too expensive
894:     test:
895:       suffix: p4est_par_ovl_hyb_3d
896:       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 0 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
897:       output_file: output/empty.out

899:   test:
900:     TODO: broken
901:     requires: p4est
902:     nsize: 2
903:     suffix: p4est_bug_labels_noovl
904:     args: -test_p4est_seq -dm_plex_check_all -dm_forest_minimum_refinement 0 -dm_forest_partition_overlap 1 -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_forest_initial_refinement 0 -dm_forest_maximum_refinement 2 -dm_p4est_refine_pattern hash -dist_dm_distribute -petscpartitioner_type simple -dm_forest_print_label_error

906:   test:
907:     requires: p4est
908:     nsize: 2
909:     suffix: p4est_bug_distribute_overlap
910:     args: -dm_coord_space 0 -test_p4est_seq -conv_seq_2_dm_plex_check_all -conv_seq_1_dm_forest_minimum_refinement 0 -conv_seq_1_dm_forest_partition_overlap 0 -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 2 -conv_seq_1_dm_p4est_refine_pattern hash -petscpartitioner_type simple -overlap 1 -dm_view ::load_balance
911:     args: -dm_post_overlap_view

913:   test:
914:     suffix: ref_alfeld2d_0
915:     requires: triangle
916:     args: -dm_plex_box_faces 5,3 -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_alfeld -final_diagnostics
917:   test:
918:     suffix: ref_alfeld2d_1
919:     args: -dm_plex_box_faces 5,3 -dm_plex_simplex 0 -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_alfeld -final_diagnostics
920:   test:
921:     suffix: ref_alfeld3d_0
922:     requires: ctetgen
923:     args: -dm_plex_dim 3 -dm_plex_box_faces 5,1,1 -dm_view -dm_plex_check_all -ref_dm_refine 1 -ref_dm_plex_transform_type refine_alfeld -final_diagnostics

925:   # Boundary layer refiners
926:   test:
927:     suffix: ref_bl_1
928:     args: -dm_plex_dim 1 -dm_plex_simplex 0 -dm_plex_box_faces 5,1 -dm_view -dm_plex_check_all 0 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_boundary_layer -dm_extrude 2 -final_diagnostics -ref_dm_plex_transform_bl_splits 3
929:   test:
930:     suffix: ref_bl_2_tri
931:     requires: triangle
932:     args: -dm_coord_space 0 -dm_plex_box_faces 5,3 -dm_view -dm_plex_check_all 0 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_boundary_layer -dm_extrude 3 -final_diagnostics -ref_dm_plex_transform_bl_splits 4
933:   test:
934:     suffix: ref_bl_3_quad
935:     args: -dm_plex_simplex 0 -dm_plex_box_faces 5,1 -dm_view -dm_plex_check_all 0 -ref_dm_refine 1 -ref_dm_plex_transform_type refine_boundary_layer -dm_extrude 3 -final_diagnostics -ref_dm_plex_transform_bl_splits 4
936:   test:
937:     suffix: ref_bl_spheresurface_extruded
938:     nsize : 4
939:     args: -dm_coord_space 0 -dm_extrude 3 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_plex_check_all -dm_view -dist_dm_distribute -petscpartitioner_type simple -final_diagnostics -ref_dm_refine 1 -ref_dm_plex_transform_type refine_boundary_layer -ref_dm_plex_transform_bl_splits 2
940:   test:
941:     suffix: ref_bl_3d_hyb
942:     nsize : 4
943:     args: -dm_coord_space 0 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_3d_cube.msh -dm_plex_check_all -dm_view -dist_dm_distribute -petscpartitioner_type simple -final_diagnostics -ref_dm_refine 1 -ref_dm_plex_transform_type refine_boundary_layer -ref_dm_plex_transform_bl_splits 4 -ref_dm_plex_transform_bl_height_factor 3.1

945:   testset:
946:     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
947:     test:
948:       suffix: sphere_0
949:       args:
950:     test:
951:       suffix: sphere_1
952:       args: -ref_dm_refine 2
953:     test:
954:       suffix: sphere_2
955:       args: -dm_plex_simplex 0
956:     test:
957:       suffix: sphere_3
958:       args: -dm_plex_simplex 0 -ref_dm_refine 2
959:     test:
960:       suffix: sphere_4
961:       args: -dm_plex_dim 1 -ref_dm_refine 2

963:   testset:
964:     args: -dm_plex_shape ball -dm_plex_check_all -dm_view

966:     test:
967:       suffix: ball_0
968:       requires: ctetgen
969:       args: -dm_plex_dim 3

971:     test:
972:       suffix: ball_1
973:       requires: ctetgen
974:       args: -dm_plex_dim 3 -bd_dm_refine 2

976:     test:
977:       suffix: ball_2
978:       requires: triangle
979:       args: -dm_plex_dim 2 -bd_dm_refine 2

981:   test:
982:     suffix: schwarz_p_extrude
983:     args: -dm_plex_shape schwarz_p -dm_plex_tps_extent 1,1,1 -dm_plex_tps_layers 1 -dm_plex_tps_thickness .2 -dm_view

985:   test:
986:     suffix: schwarz_p_refine
987:     args: -dm_plex_shape schwarz_p -dm_plex_tps_extent 1,1,1 -dm_plex_tps_refine 1 -dm_plex_tps_layers 1 -dm_plex_tps_thickness .2 -dm_view

989:   test:
990:     suffix: pyr_mixed_0
991:     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/pyr_tet.msh -dm_plex_check_all -dm_view

993:   test:
994:     suffix: hypercubic_0
995:     args: -dm_plex_dim 2 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3 -dm_plex_check_all \
996:           -dm_view -dm_plex_print_adj 3

998:   test:
999:     suffix: hypercubic_0_par
1000:     nsize: 4
1001:     args: -dm_plex_dim 2 -dm_plex_shape hypercubic -dm_plex_box_faces 4,4 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1002:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf

1004:   test:
1005:     suffix: hypercubic_1
1006:     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3 -dm_plex_check_all \
1007:           -dm_view -dm_plex_print_adj 3

1009:   test:
1010:     suffix: hypercubic_1_par
1011:     requires: !quad
1012:     nsize: 8
1013:     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 4,4,4 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1014:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf

1016:   test:
1017:     suffix: hypercubic_1_par_ov_3
1018:     requires: !quad
1019:     nsize: 8
1020:     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 6,6,6 -dm_distribute_overlap 3 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1021:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf

1023:   test:
1024:     suffix: hypercubic_2
1025:     args: -dm_plex_dim 4 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3 -dm_view -dm_plex_print_adj 3 \
1026:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0

1028:   test:
1029:     suffix: hypercubic_2_par
1030:     requires: !quad
1031:     nsize: 16
1032:     args: -dm_plex_dim 4 -dm_plex_shape hypercubic -dm_plex_box_faces 4,4,4,4 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1033:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf

1035:   test:
1036:     suffix: hypercubic_3
1037:     args: -dm_plex_dim 5 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3,3 -dm_view -dm_plex_print_adj 3 \
1038:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0

1040:   test:
1041:     suffix: hypercubic_4
1042:     args: -dm_plex_dim 6 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3,3,3 -dm_view -dm_plex_print_adj 3 \
1043:           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0

1045:   test:
1046:     suffix: crisscross
1047:     args: -dm_plex_box_crisscross -dm_plex_box_faces 4,8 -dm_plex_check_all -final_diagnostics -dm_view ::ascii_info_detail -dm_plex_box_lower -1,-2 -dm_plex_box_upper 1,2 -dm_plex_box_bd {{none,none periodic,none none,periodic periodic,periodic}separate output}

1049: TEST*/