xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision b75c6efc21bfcba5897c8ca359bc3d0e82c122c1)
1 static char help[] = "Tests various DMPlex routines to construct, refine and distribute a mesh.\n\n";
2 
3 #include <petscdmplex.h>
4 #include <petscdmplextransform.h>
5 #include <petscsf.h>
6 
7 enum {
8   STAGE_LOAD,
9   STAGE_DISTRIBUTE,
10   STAGE_REFINE,
11   STAGE_OVERLAP
12 };
13 
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;
25 
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;
36 
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();
46 
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 }
54 
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;
61 
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));
72 
73   PetscCall(DMViewFromOptions(*dm, NULL, "-init_dm_view"));
74   PetscCall(DMGetDimension(*dm, &dim));
75 
76   if (testp4est_seq) {
77     PetscCheck(PetscDefined(HAVE_P4EST), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Reconfigure PETSc with --download-p4est");
78     DM dmConv = NULL;
79 
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));
91 
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));
98 
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   }
121 
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());
137 
138   if (testp4est_par) {
139     PetscCheck(PetscDefined(HAVE_P4EST), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Reconfigure PETSc with --download-p4est");
140     DM dmConv = NULL;
141 
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));
154 
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   }
177 
178   /* test redistribution of an already distributed mesh */
179   if (user->redistribute) {
180     DM       distributedMesh;
181     PetscSF  sf;
182     PetscInt nranks;
183 
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(MPI_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   }
197 
198   if (user->overlap) {
199     DM overlapMesh = NULL;
200 
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;
217 
218     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
219     PetscCall(DMRefine(*dm, comm, &refinedMesh));
220     if (refinedMesh) {
221       PetscCall(DMDestroy(dm));
222       *dm = refinedMesh;
223     }
224   }
225 
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 }
232 
233 int main(int argc, char **argv)
234 {
235   DM     dm;
236   AppCtx user;
237 
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 }
246 
247 /*TEST
248 
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
258 
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
293 
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
306 
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
317 
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 
323   test:
324     # This test needs a non-tensor prism so we can make a coordinate space
325     suffix: spheresurface_extruded
326     nsize : 4
327     args: -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_use_tensor 0 \
328           -dist_dm_distribute -petscpartitioner_type simple \
329           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
330 
331   test:
332     # This test needs a non-tensor prism so we can make a coordinate space
333     suffix: spheresurface_extruded_symmetric
334     nsize : 4
335     args: -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_use_tensor 0 -dm_plex_transform_extrude_symmetric \
336           -dist_dm_distribute -petscpartitioner_type simple \
337           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
338 
339   test:
340     # Test with a tensor prism which cannot have a coordinate space
341     suffix: spheresurface_extruded_nocoord
342     nsize : 4
343     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 \
344           -dist_dm_distribute -petscpartitioner_type simple \
345           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
346 
347   # Parallel simple partitioner tests
348   test:
349     suffix: part_simple_0
350     requires: triangle
351     nsize: 2
352     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
353   test:
354     suffix: part_simple_1
355     requires: triangle
356     nsize: 8
357     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
358 
359   # Parallel partitioner tests
360   test:
361     suffix: part_parmetis_0
362     requires: parmetis
363     nsize: 2
364     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
365   test:
366     suffix: part_ptscotch_0
367     requires: ptscotch
368     nsize: 2
369     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
370   test:
371     suffix: part_ptscotch_1
372     requires: ptscotch
373     nsize: 8
374     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
375 
376   # CGNS reader tests 10-11 (need to find smaller test meshes)
377   test:
378     suffix: cgns_0
379     requires: cgns
380     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/tut21.cgns -dm_view
381 
382   # ExodusII reader tests
383   testset:
384     args: -dm_plex_boundary_label boundary -dm_plex_check_all -dm_view
385     test:
386       suffix: exo_0
387       requires: exodusii
388       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad.exo
389     test:
390       suffix: exo_1
391       requires: exodusii
392       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad-15.exo
393     test:
394       suffix: exo_2
395       requires: exodusii
396       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/squaremotor-30.exo
397     test:
398       suffix: exo_3
399       requires: exodusii
400       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo
401     test:
402       suffix: exo_4
403       requires: exodusii
404      args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/simpleblock-100.exo
405 
406   # Gmsh mesh reader tests
407   testset:
408     args: -dm_coord_space 0 -dm_view
409 
410     test:
411       suffix: gmsh_0
412       requires: !single
413       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
414     test:
415       suffix: gmsh_1
416       requires: !single
417       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
418     test:
419       suffix: gmsh_2
420       requires: !single
421       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
422     test:
423       suffix: gmsh_3
424       nsize: 3
425       requires: !single
426       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
427     test:
428       suffix: gmsh_4
429       nsize: 3
430       requires: !single
431       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
432     test:
433       suffix: gmsh_5
434       requires: !single
435       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
436     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
437     test:
438       suffix: gmsh_6
439       requires: !single
440       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
441     test:
442       suffix: gmsh_7
443       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
444     test:
445       suffix: gmsh_8
446       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
447   testset:
448     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
449     test:
450       suffix: gmsh_9
451     test:
452       suffix: gmsh_9_periodic_0
453       args: -dm_plex_gmsh_periodic 0
454   testset:
455     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
456     test:
457       suffix: gmsh_10
458     test:
459       suffix: gmsh_10_periodic_0
460       args: -dm_plex_gmsh_periodic 0
461   testset:
462     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
463     test:
464       suffix: gmsh_11
465     test:
466       suffix: gmsh_11_periodic_0
467       args: -dm_plex_gmsh_periodic 0
468   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
469   test:
470     suffix: gmsh_12
471     nsize: 4
472     requires: !single mpiio
473     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
474   test:
475     suffix: gmsh_13_hybs2t
476     nsize: 4
477     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
478   test:
479     suffix: gmsh_14_ext
480     requires: !single
481     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
482   test:
483     suffix: gmsh_14_ext_s2t
484     requires: !single
485     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
486   test:
487     suffix: gmsh_15_hyb3d
488     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
489   test:
490     suffix: gmsh_15_hyb3d_vtk
491     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -dm_plex_gmsh_hybrid -dm_plex_check_all
492   test:
493     suffix: gmsh_15_hyb3d_s2t
494     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
495   test:
496     suffix: gmsh_16_spheresurface
497     nsize : 4
498     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
499   test:
500     suffix: gmsh_16_spheresurface_s2t
501     nsize : 4
502     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
503   test:
504     suffix: gmsh_16_spheresurface_extruded
505     nsize : 4
506     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
507   test:
508     suffix: gmsh_16_spheresurface_extruded_s2t
509     nsize : 4
510     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
511   test:
512     suffix: gmsh_17_hyb3d_interp_ascii
513     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
514   test:
515     suffix: exodus_17_hyb3d_interp_ascii
516     requires: exodusii
517     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
518 
519   # Legacy Gmsh v22/v40 ascii/binary reader tests
520   testset:
521     output_file: output/ex1_gmsh_3d_legacy.out
522     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
523     test:
524       suffix: gmsh_3d_ascii_v22
525       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
526     test:
527       suffix: gmsh_3d_ascii_v40
528       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
529     test:
530       suffix: gmsh_3d_binary_v22
531       # Could not remake binary to remove extra face labeling
532       output_file: output/ex1_gmsh_3d_legacy_v22_bin.out
533       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
534     test:
535       suffix: gmsh_3d_binary_v40
536       requires: long64
537       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
538 
539   # Gmsh v41 ascii/binary reader tests
540   testset: # 32bit mesh, sequential
541     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
542     output_file: output/ex1_gmsh_3d_32.out
543     test:
544       suffix: gmsh_3d_ascii_v41_32
545       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
546     test:
547       suffix: gmsh_3d_binary_v41_32
548       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
549     test:
550       suffix: gmsh_3d_binary_v41_32_mpiio
551       requires: defined(PETSC_HAVE_MPIIO)
552       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
553   test:
554     suffix: gmsh_quad_8node
555     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
556           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
557   test:
558     suffix: gmsh_hex_20node
559     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
560           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
561   testset:  # 32bit mesh, parallel
562     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
563     nsize: 2
564     output_file: output/ex1_gmsh_3d_32_np2.out
565     test:
566       suffix: gmsh_3d_ascii_v41_32_np2
567       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
568     test:
569       suffix: gmsh_3d_binary_v41_32_np2
570       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
571     test:
572       suffix: gmsh_3d_binary_v41_32_np2_mpiio
573       requires: defined(PETSC_HAVE_MPIIO)
574       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
575   testset: # 64bit mesh, sequential
576     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
577     output_file: output/ex1_gmsh_3d_64.out
578     test:
579       suffix: gmsh_3d_ascii_v41_64
580       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
581     test:
582       suffix: gmsh_3d_binary_v41_64
583       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
584     test:
585       suffix: gmsh_3d_binary_v41_64_mpiio
586       requires: defined(PETSC_HAVE_MPIIO)
587       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
588   testset:  # 64bit mesh, parallel
589     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
590     nsize: 2
591     output_file: output/ex1_gmsh_3d_64_np2.out
592     test:
593       suffix: gmsh_3d_ascii_v41_64_np2
594       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
595     test:
596       suffix: gmsh_3d_binary_v41_64_np2
597       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
598     test:
599       suffix: gmsh_3d_binary_v41_64_np2_mpiio
600       requires: defined(PETSC_HAVE_MPIIO)
601       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
602 
603   # Fluent mesh reader tests
604   # TODO: Geometry checks fail
605   test:
606     suffix: fluent_0
607     requires: !complex
608     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view -final_diagnostics 0
609   test:
610     suffix: fluent_1
611     nsize: 3
612     requires: !complex
613     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
614   test:
615     suffix: fluent_2
616     requires: !complex
617     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view -final_diagnostics 0
618   test:
619     suffix: fluent_3
620     requires: !complex
621     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
622     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
623 
624   # Med mesh reader tests, including parallel file reads
625   test:
626     suffix: med_0
627     requires: med
628     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dm_view
629   test:
630     suffix: med_1
631     requires: med
632     nsize: 3
633     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
634   test:
635     suffix: med_2
636     requires: med
637     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dm_view
638   test:
639     suffix: med_3
640     requires: med
641     TODO: MED
642     nsize: 3
643     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
644 
645   # Test shape quality
646   test:
647     suffix: test_shape
648     requires: ctetgen
649     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
650 
651   # Test simplex to tensor conversion
652   test:
653     suffix: s2t2
654     requires: triangle
655     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
656 
657   test:
658     suffix: s2t3
659     requires: ctetgen
660     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
661 
662   # Test cylinder
663   testset:
664     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
665     test:
666       suffix: cylinder
667       args: -ref_dm_refine 1
668     test:
669       suffix: cylinder_per
670       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
671     test:
672       suffix: cylinder_wedge
673       args: -dm_coord_space 0 -dm_plex_interpolate 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
674     test:
675       suffix: cylinder_wedge_int
676       output_file: output/ex1_cylinder_wedge.out
677       args: -dm_coord_space 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
678 
679   test:
680     suffix: box_2d
681     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
682 
683   test:
684     suffix: box_2d_per
685     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
686 
687   test:
688     suffix: box_2d_per_unint
689     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
690 
691   test:
692     suffix: box_3d
693     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
694 
695   test:
696     requires: triangle
697     suffix: box_wedge
698     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
699 
700   testset:
701     requires: triangle
702     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
703     test:
704       suffix: box_wedge_s2t
705     test:
706       nsize: 3
707       args: -dist_dm_distribute -petscpartitioner_type simple
708       suffix: box_wedge_s2t_parallel
709 
710   # Test GLVis output
711   testset:
712     args: -dm_coord_space 0 -dm_plex_interpolate 0
713     test:
714       suffix: glvis_2d_tet
715       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
716     test:
717       suffix: glvis_2d_tet_per
718       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
719     test:
720       suffix: glvis_3d_tet
721       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
722   testset:
723     args: -dm_coord_space 0
724     test:
725       suffix: glvis_2d_tet_per_mfem
726       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:
727     test:
728       suffix: glvis_2d_quad
729       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
730     test:
731       suffix: glvis_2d_quad_per
732       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
733     test:
734       suffix: glvis_2d_quad_per_shift
735       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
736     test:
737       suffix: glvis_2d_quad_per_mfem
738       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
739     test:
740       suffix: glvis_3d_tet_per
741       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
742     test:
743       suffix: glvis_3d_tet_per_mfem
744       TODO: broken
745       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:
746     test:
747       suffix: glvis_3d_hex
748       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
749     test:
750       suffix: glvis_3d_hex_per
751       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
752     test:
753       suffix: glvis_3d_hex_per_mfem
754       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
755     test:
756       suffix: glvis_2d_hyb
757       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
758     test:
759       suffix: glvis_3d_hyb
760       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
761     test:
762       suffix: glvis_3d_hyb_s2t
763       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
764 
765   # Test P4EST
766   testset:
767     requires: p4est
768     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
769     test:
770       suffix: p4est_periodic
771       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
772     test:
773       suffix: p4est_periodic_3d
774       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,none -dm_plex_box_faces 3,5,4 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 2 -conv_seq_1_dm_p4est_refine_pattern hash
775     test:
776       suffix: p4est_gmsh_periodic
777       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
778     test:
779       suffix: p4est_gmsh_surface
780       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
781     test:
782       suffix: p4est_gmsh_surface_parallel
783       nsize: 2
784       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
785     test:
786       suffix: p4est_hyb_2d
787       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
788     test:
789       suffix: p4est_hyb_3d
790       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
791     test:
792       requires: ctetgen
793       suffix: p4est_s2t_bugfaces_3d
794       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
795     test:
796       suffix: p4est_bug_overlapsf
797       nsize: 3
798       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
799     test:
800       suffix: p4est_redistribute
801       nsize: 3
802       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
803     test:
804       suffix: p4est_gmsh_s2t_3d
805       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
806     test:
807       suffix: p4est_gmsh_s2t_3d_hash
808       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
809     test:
810       requires: long_runtime
811       suffix: p4est_gmsh_periodic_3d
812       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
813 
814   testset:
815     requires: p4est
816     nsize: 6
817     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
818     test:
819       TODO: interface cones do not conform
820       suffix: p4est_par_periodic
821       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
822     test:
823       TODO: interface cones do not conform
824       suffix: p4est_par_periodic_3d
825       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
826     test:
827       TODO: interface cones do not conform
828       suffix: p4est_par_gmsh_periodic
829       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
830     test:
831       suffix: p4est_par_gmsh_surface
832       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
833     test:
834       suffix: p4est_par_gmsh_s2t_3d
835       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
836     test:
837       TODO: interface cones do not conform
838       suffix: p4est_par_gmsh_s2t_3d_hash
839       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
840     test:
841       requires: long_runtime
842       suffix: p4est_par_gmsh_periodic_3d
843       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
844 
845   testset:
846     requires: p4est
847     nsize: 6
848     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
849     test:
850       suffix: p4est_par_ovl_periodic
851       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
852     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
853     test:
854       suffix: p4est_par_ovl_periodic_3d
855       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,none -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 -final_diagnostics 0
856     test:
857       suffix: p4est_par_ovl_gmsh_periodic
858       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
859     test:
860       suffix: p4est_par_ovl_gmsh_surface
861       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
862     test:
863       suffix: p4est_par_ovl_gmsh_s2t_3d
864       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
865     test:
866       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
867       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
868     test:
869       requires: long_runtime
870       suffix: p4est_par_ovl_gmsh_periodic_3d
871       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
872     test:
873       suffix: p4est_par_ovl_hyb_2d
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/hybrid_triquad.msh
875     test:
876       suffix: p4est_par_ovl_hyb_3d
877       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_tetwedge.msh
878 
879   test:
880     TODO: broken
881     requires: p4est
882     nsize: 2
883     suffix: p4est_bug_labels_noovl
884     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
885 
886   test:
887     requires: p4est
888     nsize: 2
889     suffix: p4est_bug_distribute_overlap
890     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
891     args: -dm_post_overlap_view
892 
893   test:
894     suffix: ref_alfeld2d_0
895     requires: triangle
896     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
897   test:
898     suffix: ref_alfeld3d_0
899     requires: ctetgen
900     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
901 
902   # Boundary layer refiners
903   test:
904     suffix: ref_bl_1
905     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
906   test:
907     suffix: ref_bl_2_tri
908     requires: triangle
909     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
910   test:
911     suffix: ref_bl_3_quad
912     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
913   test:
914     suffix: ref_bl_spheresurface_extruded
915     nsize : 4
916     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
917   test:
918     suffix: ref_bl_3d_hyb
919     nsize : 4
920     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
921 
922   testset:
923     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
924     test:
925       suffix: sphere_0
926       args:
927     test:
928       suffix: sphere_1
929       args: -ref_dm_refine 2
930     test:
931       suffix: sphere_2
932       args: -dm_plex_simplex 0
933     test:
934       suffix: sphere_3
935       args: -dm_plex_simplex 0 -ref_dm_refine 2
936 
937   test:
938     suffix: ball_0
939     requires: ctetgen
940     args: -dm_plex_dim 3 -dm_plex_shape ball -dm_plex_check_all -dm_view
941 
942   test:
943     suffix: ball_1
944     requires: ctetgen
945     args: -dm_plex_dim 3 -dm_plex_shape ball -bd_dm_refine 2 -dm_plex_check_all -dm_view
946 
947   test:
948     suffix: schwarz_p_extrude
949     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
950 
951   test:
952     suffix: pyr_mixed_0
953     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/pyr_tet.msh -dm_plex_check_all -dm_view
954 
955   test:
956     suffix: hypercubic_0
957     args: -dm_plex_dim 2 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3 -dm_plex_check_all -dm_view
958 
959   test:
960     suffix: hypercubic_1
961     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3 -dm_plex_check_all -dm_view
962 
963   test:
964     suffix: hypercubic_2
965     args: -dm_plex_dim 4 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3 -dm_view \
966           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0
967 
968   test:
969     suffix: hypercubic_3
970     args: -dm_plex_dim 5 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3,3 -dm_view \
971           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0
972 
973   test:
974     suffix: hypercubic_4
975     args: -dm_plex_dim 6 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3,3,3 -dm_view \
976           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0
977 TEST*/
978