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