xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision cac4c232dc4f93991e342196e27ef7b0655dac7b)
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 {STAGE_LOAD, STAGE_DISTRIBUTE, STAGE_REFINE, STAGE_OVERLAP};
8 
9 typedef struct {
10   PetscLogEvent createMeshEvent;
11   PetscLogStage stages[4];
12   /* Domain and mesh definition */
13   PetscInt      dim;                             /* The topological mesh dimension */
14   PetscInt      overlap;                         /* The cell overlap to use during partitioning */
15   PetscBool     testp4est[2];
16   PetscBool     redistribute;
17   PetscBool     final_ref;                       /* Run refinement at the end */
18   PetscBool     final_diagnostics;               /* Run diagnostics on the final mesh */
19 } AppCtx;
20 
21 PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
22 {
23   PetscErrorCode ierr;
24 
25   PetscFunctionBegin;
26   options->dim               = 2;
27   options->overlap           = 0;
28   options->testp4est[0]      = PETSC_FALSE;
29   options->testp4est[1]      = PETSC_FALSE;
30   options->redistribute      = PETSC_FALSE;
31   options->final_ref         = PETSC_FALSE;
32   options->final_diagnostics = PETSC_TRUE;
33 
34   ierr = PetscOptionsBegin(comm, "", "Meshing Problem Options", "DMPLEX");PetscCall(ierr);
35   PetscCall(PetscOptionsRangeInt("-dim", "The topological mesh dimension", "ex1.c", options->dim, &options->dim, NULL,1,3));
36   PetscCall(PetscOptionsBoundedInt("-overlap", "The cell overlap for partitioning", "ex1.c", options->overlap, &options->overlap, NULL,0));
37   PetscCall(PetscOptionsBool("-test_p4est_seq", "Test p4est with sequential base DM", "ex1.c", options->testp4est[0], &options->testp4est[0], NULL));
38   PetscCall(PetscOptionsBool("-test_p4est_par", "Test p4est with parallel base DM", "ex1.c", options->testp4est[1], &options->testp4est[1], NULL));
39   PetscCall(PetscOptionsBool("-test_redistribute", "Test redistribution", "ex1.c", options->redistribute, &options->redistribute, NULL));
40   PetscCall(PetscOptionsBool("-final_ref", "Run uniform refinement on the final mesh", "ex1.c", options->final_ref, &options->final_ref, NULL));
41   PetscCall(PetscOptionsBool("-final_diagnostics", "Run diagnostics on the final mesh", "ex1.c", options->final_diagnostics, &options->final_diagnostics, NULL));
42   ierr = PetscOptionsEnd();PetscCall(ierr);
43 
44   PetscCall(PetscLogEventRegister("CreateMesh", DM_CLASSID, &options->createMeshEvent));
45   PetscCall(PetscLogStageRegister("MeshLoad",       &options->stages[STAGE_LOAD]));
46   PetscCall(PetscLogStageRegister("MeshDistribute", &options->stages[STAGE_DISTRIBUTE]));
47   PetscCall(PetscLogStageRegister("MeshRefine",     &options->stages[STAGE_REFINE]));
48   PetscCall(PetscLogStageRegister("MeshOverlap",    &options->stages[STAGE_OVERLAP]));
49   PetscFunctionReturn(0);
50 }
51 
52 PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
53 {
54   PetscInt       dim           = user->dim;
55   PetscBool      testp4est_seq = user->testp4est[0];
56   PetscBool      testp4est_par = user->testp4est[1];
57   PetscMPIInt    rank, size;
58   PetscBool      periodic;
59 
60   PetscFunctionBegin;
61   PetscCall(PetscLogEventBegin(user->createMeshEvent,0,0,0,0));
62   PetscCallMPI(MPI_Comm_rank(comm, &rank));
63   PetscCallMPI(MPI_Comm_size(comm, &size));
64   PetscCall(PetscLogStagePush(user->stages[STAGE_LOAD]));
65   PetscCall(DMCreate(comm, dm));
66   PetscCall(DMSetType(*dm, DMPLEX));
67   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
68   PetscCall(DMSetFromOptions(*dm));
69 
70   /* For topologically periodic meshes, we first localize coordinates,
71      and then remove any information related with the
72      automatic computation of localized vertices.
73      This way, refinement operations and conversions to p4est
74      will preserve the shape of the domain in physical space */
75   PetscCall(DMLocalizeCoordinates(*dm));
76   PetscCall(DMGetPeriodicity(*dm, &periodic, NULL, NULL, NULL));
77   if (periodic) PetscCall(DMSetPeriodicity(*dm, PETSC_TRUE, NULL, NULL, NULL));
78 
79   PetscCall(DMViewFromOptions(*dm,NULL,"-init_dm_view"));
80   PetscCall(DMGetDimension(*dm, &dim));
81 
82   if (testp4est_seq) {
83 #if defined(PETSC_HAVE_P4EST)
84     DM dmConv = NULL;
85 
86     PetscCall(DMPlexCheckSymmetry(*dm));
87     PetscCall(DMPlexCheckSkeleton(*dm, 0));
88     PetscCall(DMPlexCheckFaces(*dm, 0));
89     PetscCall(DMPlexCheckGeometry(*dm));
90     PetscCall(DMPlexCheckPointSF(*dm));
91     PetscCall(DMPlexCheckInterfaceCones(*dm));
92     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
93     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
94     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
95     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
96     if (dmConv) {
97       PetscCall(DMDestroy(dm));
98       *dm  = dmConv;
99     }
100     PetscCall(DMViewFromOptions(*dm,NULL,"-initref_dm_view"));
101     PetscCall(DMPlexCheckSymmetry(*dm));
102     PetscCall(DMPlexCheckSkeleton(*dm, 0));
103     PetscCall(DMPlexCheckFaces(*dm, 0));
104     PetscCall(DMPlexCheckGeometry(*dm));
105     PetscCall(DMPlexCheckPointSF(*dm));
106     PetscCall(DMPlexCheckInterfaceCones(*dm));
107 
108     PetscCall(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
109     if (dmConv) {
110       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_1_"));
111       PetscCall(DMSetFromOptions(dmConv));
112       PetscCall(DMDestroy(dm));
113       *dm  = dmConv;
114     }
115     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_1_"));
116     PetscCall(DMSetUp(*dm));
117     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
118     PetscCall(DMConvert(*dm,DMPLEX,&dmConv));
119     if (dmConv) {
120       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_2_"));
121       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
122       PetscCall(DMSetFromOptions(dmConv));
123       PetscCall(DMDestroy(dm));
124       *dm  = dmConv;
125     }
126     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_2_"));
127     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
128     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
129 #else
130     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
131 #endif
132   }
133 
134   PetscCall(PetscLogStagePop());
135   if (!testp4est_seq) {
136     PetscCall(PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]));
137     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view"));
138     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "dist_"));
139     PetscCall(DMSetFromOptions(*dm));
140     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
141     PetscCall(PetscLogStagePop());
142     PetscCall(DMViewFromOptions(*dm, NULL, "-distributed_dm_view"));
143   }
144   PetscCall(PetscLogStagePush(user->stages[STAGE_REFINE]));
145   PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "ref_"));
146   PetscCall(DMSetFromOptions(*dm));
147   PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
148   PetscCall(PetscLogStagePop());
149 
150   if (testp4est_par) {
151 #if defined(PETSC_HAVE_P4EST)
152     DM dmConv = NULL;
153 
154     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
155     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
156     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
157     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
158     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
159     if (dmConv) {
160       PetscCall(DMDestroy(dm));
161       *dm  = dmConv;
162     }
163     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
164     PetscCall(DMPlexCheckSymmetry(*dm));
165     PetscCall(DMPlexCheckSkeleton(*dm, 0));
166     PetscCall(DMPlexCheckFaces(*dm, 0));
167     PetscCall(DMPlexCheckGeometry(*dm));
168     PetscCall(DMPlexCheckPointSF(*dm));
169     PetscCall(DMPlexCheckInterfaceCones(*dm));
170 
171     PetscCall(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
172     if (dmConv) {
173       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_1_"));
174       PetscCall(DMSetFromOptions(dmConv));
175       PetscCall(DMDestroy(dm));
176       *dm  = dmConv;
177     }
178     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_1_"));
179     PetscCall(DMSetUp(*dm));
180     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
181     PetscCall(DMConvert(*dm, DMPLEX, &dmConv));
182     if (dmConv) {
183       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_2_"));
184       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
185       PetscCall(DMSetFromOptions(dmConv));
186       PetscCall(DMDestroy(dm));
187       *dm  = dmConv;
188     }
189     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_2_"));
190     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
191     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
192 #else
193     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
194 #endif
195   }
196 
197   /* test redistribution of an already distributed mesh */
198   if (user->redistribute) {
199     DM       distributedMesh;
200     PetscSF  sf;
201     PetscInt nranks;
202 
203     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view"));
204     PetscCall(DMPlexDistribute(*dm, 0, NULL, &distributedMesh));
205     if (distributedMesh) {
206       PetscCall(DMGetPointSF(distributedMesh, &sf));
207       PetscCall(PetscSFSetUp(sf));
208       PetscCall(DMGetNeighbors(distributedMesh, &nranks, NULL));
209       PetscCallMPI(MPI_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm)));
210       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %D\n", nranks));
211       PetscCall(DMDestroy(dm));
212       *dm  = distributedMesh;
213     }
214     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_redist_view"));
215   }
216 
217   if (user->overlap) {
218     DM overlapMesh = NULL;
219 
220     /* Add the overlap to refined mesh */
221     PetscCall(PetscLogStagePush(user->stages[STAGE_OVERLAP]));
222     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view"));
223     PetscCall(DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh));
224     if (overlapMesh) {
225       PetscInt overlap;
226       PetscCall(DMPlexGetOverlap(overlapMesh, &overlap));
227       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %D\n", overlap));
228       PetscCall(DMDestroy(dm));
229       *dm = overlapMesh;
230     }
231     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view"));
232     PetscCall(PetscLogStagePop());
233   }
234   if (user->final_ref) {
235     DM refinedMesh = NULL;
236 
237     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
238     PetscCall(DMRefine(*dm, comm, &refinedMesh));
239     if (refinedMesh) {
240       PetscCall(DMDestroy(dm));
241       *dm  = refinedMesh;
242     }
243   }
244 
245   PetscCall(PetscObjectSetName((PetscObject) *dm, "Generated Mesh"));
246   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
247   if (user->final_diagnostics) {
248     DMPlexInterpolatedFlag interpolated;
249     PetscInt  dim, depth;
250 
251     PetscCall(DMGetDimension(*dm, &dim));
252     PetscCall(DMPlexGetDepth(*dm, &depth));
253     PetscCall(DMPlexIsInterpolatedCollective(*dm, &interpolated));
254 
255     PetscCall(DMPlexCheckSymmetry(*dm));
256     if (interpolated == DMPLEX_INTERPOLATED_FULL) {
257       PetscCall(DMPlexCheckFaces(*dm, 0));
258     }
259     PetscCall(DMPlexCheckSkeleton(*dm, 0));
260     PetscCall(DMPlexCheckGeometry(*dm));
261   }
262   PetscCall(PetscLogEventEnd(user->createMeshEvent,0,0,0,0));
263   PetscFunctionReturn(0);
264 }
265 
266 int main(int argc, char **argv)
267 {
268   DM             dm;
269   AppCtx         user;
270 
271   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
272   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
273   PetscCall(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
274   PetscCall(DMDestroy(&dm));
275   PetscCall(PetscFinalize());
276   return 0;
277 }
278 
279 /*TEST
280 
281   # CTetGen 0-1
282   test:
283     suffix: 0
284     requires: ctetgen
285     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
286   test:
287     suffix: 1
288     requires: ctetgen
289     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
290 
291   # 2D LaTex and ASCII output 2-9
292   test:
293     suffix: 2
294     requires: triangle
295     args: -dm_plex_interpolate 0 -dm_view ascii::ascii_latex
296   test:
297     suffix: 3
298     requires: triangle
299     args: -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
300   test:
301     suffix: 4
302     requires: triangle
303     nsize: 2
304     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_info_detail
305   test:
306     suffix: 5
307     requires: triangle
308     nsize: 2
309     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
310   test:
311     suffix: 6
312     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_view ascii::ascii_info_detail
313   test:
314     suffix: 7
315     args: -dm_coord_space 0 -dm_plex_simplex 0 -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
316   test:
317     suffix: 8
318     nsize: 2
319     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
320 
321   # 1D ASCII output
322   testset:
323     args: -dm_coord_space 0 -dm_plex_dim 1 -dm_view ascii::ascii_info_detail -dm_plex_check_all
324     test:
325       suffix: 1d_0
326       args:
327     test:
328       suffix: 1d_1
329       args: -ref_dm_refine 2
330     test:
331       suffix: 1d_2
332       args: -dm_plex_box_faces 5 -dm_plex_box_bd periodic
333 
334   # Parallel refinement tests with overlap
335   test:
336     suffix: refine_overlap_1d
337     nsize: 2
338     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
339   test:
340     suffix: refine_overlap_2d
341     requires: triangle
342     nsize: {{2 8}separate output}
343     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
344 
345   # Parallel extrusion tests
346   test:
347     suffix: spheresurface_extruded
348     nsize : 4
349     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dist_dm_distribute -petscpartitioner_type simple \
350           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
351 
352   test:
353     suffix: spheresurface_extruded_symmetric
354     nsize : 4
355     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_symmetric -dist_dm_distribute -petscpartitioner_type simple \
356           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
357 
358   # Parallel simple partitioner tests
359   test:
360     suffix: part_simple_0
361     requires: triangle
362     nsize: 2
363     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
364   test:
365     suffix: part_simple_1
366     requires: triangle
367     nsize: 8
368     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
369 
370   # Parallel partitioner tests
371   test:
372     suffix: part_parmetis_0
373     requires: parmetis
374     nsize: 2
375     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
376   test:
377     suffix: part_ptscotch_0
378     requires: ptscotch
379     nsize: 2
380     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
381   test:
382     suffix: part_ptscotch_1
383     requires: ptscotch
384     nsize: 8
385     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
386 
387   # CGNS reader tests 10-11 (need to find smaller test meshes)
388   test:
389     suffix: cgns_0
390     requires: cgns
391     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/tut21.cgns -dm_view
392 
393   # ExodusII reader tests
394   testset:
395     args: -dm_plex_boundary_label boundary -dm_plex_check_all -dm_view
396     test:
397       suffix: exo_0
398       requires: exodusii
399       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad.exo
400     test:
401       suffix: exo_1
402       requires: exodusii
403       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad-15.exo
404     test:
405       suffix: exo_2
406       requires: exodusii
407       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/squaremotor-30.exo
408     test:
409       suffix: exo_3
410       requires: exodusii
411       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo
412     test:
413       suffix: exo_4
414       requires: exodusii
415      args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/simpleblock-100.exo
416 
417   # Gmsh mesh reader tests
418   testset:
419     args: -dm_coord_space 0 -dm_view
420 
421     test:
422       suffix: gmsh_0
423       requires: !single
424       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
425     test:
426       suffix: gmsh_1
427       requires: !single
428       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
429     test:
430       suffix: gmsh_2
431       requires: !single
432       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
433     test:
434       suffix: gmsh_3
435       nsize: 3
436       requires: !single
437       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
438     test:
439       suffix: gmsh_4
440       nsize: 3
441       requires: !single
442       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
443     test:
444       suffix: gmsh_5
445       requires: !single
446       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
447     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
448     test:
449       suffix: gmsh_6
450       requires: !single
451       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
452     test:
453       suffix: gmsh_7
454       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
455     test:
456       suffix: gmsh_8
457       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
458   testset:
459     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
460     test:
461       suffix: gmsh_9
462     test:
463       suffix: gmsh_9_periodic_0
464       args: -dm_plex_gmsh_periodic 0
465   testset:
466     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
467     test:
468       suffix: gmsh_10
469     test:
470       suffix: gmsh_10_periodic_0
471       args: -dm_plex_gmsh_periodic 0
472   testset:
473     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
474     test:
475       suffix: gmsh_11
476     test:
477       suffix: gmsh_11_periodic_0
478       args: -dm_plex_gmsh_periodic 0
479   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
480   test:
481     suffix: gmsh_12
482     nsize: 4
483     requires: !single mpiio
484     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
485   test:
486     suffix: gmsh_13_hybs2t
487     nsize: 4
488     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
489   test:
490     suffix: gmsh_14_ext
491     requires: !single
492     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
493   test:
494     suffix: gmsh_14_ext_s2t
495     requires: !single
496     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
497   test:
498     suffix: gmsh_15_hyb3d
499     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
500   test:
501     suffix: gmsh_15_hyb3d_vtk
502     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -dm_plex_gmsh_hybrid -dm_plex_check_all
503   test:
504     suffix: gmsh_15_hyb3d_s2t
505     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
506   test:
507     suffix: gmsh_16_spheresurface
508     nsize : 4
509     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
510   test:
511     suffix: gmsh_16_spheresurface_s2t
512     nsize : 4
513     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
514   test:
515     suffix: gmsh_16_spheresurface_extruded
516     nsize : 4
517     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
518   test:
519     suffix: gmsh_16_spheresurface_extruded_s2t
520     nsize : 4
521     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
522   test:
523     suffix: gmsh_17_hyb3d_interp_ascii
524     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
525   test:
526     suffix: exodus_17_hyb3d_interp_ascii
527     requires: exodusii
528     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
529 
530   # Legacy Gmsh v22/v40 ascii/binary reader tests
531   testset:
532     output_file: output/ex1_gmsh_3d_legacy.out
533     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
534     test:
535       suffix: gmsh_3d_ascii_v22
536       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
537     test:
538       suffix: gmsh_3d_ascii_v40
539       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
540     test:
541       suffix: gmsh_3d_binary_v22
542       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
543     test:
544       suffix: gmsh_3d_binary_v40
545       requires: long64
546       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
547 
548   # Gmsh v41 ascii/binary reader tests
549   testset: # 32bit mesh, sequential
550     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
551     output_file: output/ex1_gmsh_3d_32.out
552     test:
553       suffix: gmsh_3d_ascii_v41_32
554       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
555     test:
556       suffix: gmsh_3d_binary_v41_32
557       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
558     test:
559       suffix: gmsh_3d_binary_v41_32_mpiio
560       requires: defined(PETSC_HAVE_MPIIO)
561       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
562   test:
563     suffix: gmsh_quad_8node
564     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
565           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
566   test:
567     suffix: gmsh_hex_20node
568     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
569           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
570   testset:  # 32bit mesh, parallel
571     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
572     nsize: 2
573     output_file: output/ex1_gmsh_3d_32_np2.out
574     test:
575       suffix: gmsh_3d_ascii_v41_32_np2
576       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
577     test:
578       suffix: gmsh_3d_binary_v41_32_np2
579       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
580     test:
581       suffix: gmsh_3d_binary_v41_32_np2_mpiio
582       requires: defined(PETSC_HAVE_MPIIO)
583       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
584   testset: # 64bit mesh, sequential
585     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
586     output_file: output/ex1_gmsh_3d_64.out
587     test:
588       suffix: gmsh_3d_ascii_v41_64
589       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
590     test:
591       suffix: gmsh_3d_binary_v41_64
592       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
593     test:
594       suffix: gmsh_3d_binary_v41_64_mpiio
595       requires: defined(PETSC_HAVE_MPIIO)
596       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
597   testset:  # 64bit mesh, parallel
598     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
599     nsize: 2
600     output_file: output/ex1_gmsh_3d_64_np2.out
601     test:
602       suffix: gmsh_3d_ascii_v41_64_np2
603       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
604     test:
605       suffix: gmsh_3d_binary_v41_64_np2
606       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
607     test:
608       suffix: gmsh_3d_binary_v41_64_np2_mpiio
609       requires: defined(PETSC_HAVE_MPIIO)
610       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
611 
612   # Fluent mesh reader tests
613   # TODO: Geometry checks fail
614   test:
615     suffix: fluent_0
616     requires: !complex
617     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view -final_diagnostics 0
618   test:
619     suffix: fluent_1
620     nsize: 3
621     requires: !complex
622     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
623   test:
624     suffix: fluent_2
625     requires: !complex
626     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view -final_diagnostics 0
627   test:
628     suffix: fluent_3
629     requires: !complex
630     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
631     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
632 
633   # Med mesh reader tests, including parallel file reads
634   test:
635     suffix: med_0
636     requires: med
637     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dm_view
638   test:
639     suffix: med_1
640     requires: med
641     nsize: 3
642     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
643   test:
644     suffix: med_2
645     requires: med
646     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dm_view
647   test:
648     suffix: med_3
649     requires: med
650     TODO: MED
651     nsize: 3
652     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
653 
654   # Test shape quality
655   test:
656     suffix: test_shape
657     requires: ctetgen
658     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
659 
660   # Test simplex to tensor conversion
661   test:
662     suffix: s2t2
663     requires: triangle
664     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
665 
666   test:
667     suffix: s2t3
668     requires: ctetgen
669     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
670 
671   # Test cylinder
672   testset:
673     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
674     test:
675       suffix: cylinder
676       args: -ref_dm_refine 1
677     test:
678       suffix: cylinder_per
679       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
680     test:
681       suffix: cylinder_wedge
682       args: -dm_coord_space 0 -dm_plex_interpolate 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
683     test:
684       suffix: cylinder_wedge_int
685       output_file: output/ex1_cylinder_wedge.out
686       args: -dm_coord_space 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
687 
688   test:
689     suffix: box_2d
690     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
691 
692   test:
693     suffix: box_2d_per
694     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
695 
696   test:
697     suffix: box_2d_per_unint
698     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
699 
700   test:
701     suffix: box_3d
702     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
703 
704   test:
705     requires: triangle
706     suffix: box_wedge
707     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
708 
709   testset:
710     requires: triangle
711     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
712     test:
713       suffix: box_wedge_s2t
714     test:
715       nsize: 3
716       args: -dist_dm_distribute -petscpartitioner_type simple
717       suffix: box_wedge_s2t_parallel
718 
719   # Test GLVis output
720   testset:
721     args: -dm_coord_space 0 -dm_plex_interpolate 0
722     test:
723       suffix: glvis_2d_tet
724       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
725     test:
726       suffix: glvis_2d_tet_per
727       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
728     test:
729       suffix: glvis_3d_tet
730       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
731   testset:
732     args: -dm_coord_space 0
733     test:
734       suffix: glvis_2d_tet_per_mfem
735       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:
736     test:
737       suffix: glvis_2d_quad
738       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
739     test:
740       suffix: glvis_2d_quad_per
741       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
742     test:
743       suffix: glvis_2d_quad_per_mfem
744       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
745     test:
746       suffix: glvis_3d_tet_per
747       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
748     test:
749       suffix: glvis_3d_tet_per_mfem
750       TODO: broken
751       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:
752     test:
753       suffix: glvis_3d_hex
754       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
755     test:
756       suffix: glvis_3d_hex_per
757       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
758     test:
759       suffix: glvis_3d_hex_per_mfem
760       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
761     test:
762       suffix: glvis_2d_hyb
763       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
764     test:
765       suffix: glvis_3d_hyb
766       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
767     test:
768       suffix: glvis_3d_hyb_s2t
769       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 
771   # Test P4EST
772   testset:
773     requires: p4est
774     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
775     test:
776       suffix: p4est_periodic
777       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
778     test:
779       suffix: p4est_periodic_3d
780       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
781     test:
782       suffix: p4est_gmsh_periodic
783       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
784     test:
785       suffix: p4est_gmsh_surface
786       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
787     test:
788       suffix: p4est_gmsh_surface_parallel
789       nsize: 2
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/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -petscpartitioner_type simple -dm_view ::load_balance
791     test:
792       suffix: p4est_hyb_2d
793       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
794     test:
795       suffix: p4est_hyb_3d
796       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
797     test:
798       requires: ctetgen
799       suffix: p4est_s2t_bugfaces_3d
800       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
801     test:
802       suffix: p4est_bug_overlapsf
803       nsize: 3
804       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
805     test:
806       suffix: p4est_redistribute
807       nsize: 3
808       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
809     test:
810       suffix: p4est_gmsh_s2t_3d
811       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
812     test:
813       suffix: p4est_gmsh_s2t_3d_hash
814       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
815     test:
816       requires: long_runtime
817       suffix: p4est_gmsh_periodic_3d
818       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 
820   testset:
821     requires: p4est
822     nsize: 6
823     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
824     test:
825       TODO: interface cones do not conform
826       suffix: p4est_par_periodic
827       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
828     test:
829       TODO: interface cones do not conform
830       suffix: p4est_par_periodic_3d
831       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
832     test:
833       TODO: interface cones do not conform
834       suffix: p4est_par_gmsh_periodic
835       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
836     test:
837       suffix: p4est_par_gmsh_surface
838       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
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     test:
843       TODO: interface cones do not conform
844       suffix: p4est_par_gmsh_s2t_3d_hash
845       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
846     test:
847       requires: long_runtime
848       suffix: p4est_par_gmsh_periodic_3d
849       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
850 
851   testset:
852     requires: p4est
853     nsize: 6
854     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
855     test:
856       suffix: p4est_par_ovl_periodic
857       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
858     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
859     test:
860       suffix: p4est_par_ovl_periodic_3d
861       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
862     test:
863       suffix: p4est_par_ovl_gmsh_periodic
864       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
865     test:
866       suffix: p4est_par_ovl_gmsh_surface
867       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
868     test:
869       suffix: p4est_par_ovl_gmsh_s2t_3d
870       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
871     test:
872       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
873       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
874     test:
875       requires: long_runtime
876       suffix: p4est_par_ovl_gmsh_periodic_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/mesh-3d-box-innersphere.msh
878     test:
879       suffix: p4est_par_ovl_hyb_2d
880       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
881     test:
882       suffix: p4est_par_ovl_hyb_3d
883       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
884 
885   test:
886     TODO: broken
887     requires: p4est
888     nsize: 2
889     suffix: p4est_bug_labels_noovl
890     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
891 
892   test:
893     requires: p4est
894     nsize: 2
895     suffix: p4est_bug_distribute_overlap
896     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
897     args: -dm_post_overlap_view
898 
899   test:
900     suffix: ref_alfeld2d_0
901     requires: triangle
902     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
903   test:
904     suffix: ref_alfeld3d_0
905     requires: ctetgen
906     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
907 
908   # Boundary layer refiners
909   test:
910     suffix: ref_bl_1
911     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
912   test:
913     suffix: ref_bl_2_tri
914     requires: triangle
915     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
916   test:
917     suffix: ref_bl_3_quad
918     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
919   test:
920     suffix: ref_bl_spheresurface_extruded
921     nsize : 4
922     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
923   test:
924     suffix: ref_bl_3d_hyb
925     nsize : 4
926     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
927 
928   testset:
929     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
930     test:
931       suffix: sphere_0
932       args:
933     test:
934       suffix: sphere_1
935       args: -ref_dm_refine 2
936     test:
937       suffix: sphere_2
938       args: -dm_plex_simplex 0
939     test:
940       suffix: sphere_3
941       args: -dm_plex_simplex 0 -ref_dm_refine 2
942 
943   test:
944     suffix: ball_0
945     requires: ctetgen
946     args: -dm_plex_dim 3 -dm_plex_shape ball -dm_plex_check_all -dm_view
947 
948   test:
949     suffix: ball_1
950     requires: ctetgen
951     args: -dm_plex_dim 3 -dm_plex_shape ball -bd_dm_refine 2 -dm_plex_check_all -dm_view
952 
953   test:
954     suffix: schwarz_p_extrude
955     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
956 TEST*/
957