xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254)
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");CHKERRQ(ierr);
35   CHKERRQ(PetscOptionsRangeInt("-dim", "The topological mesh dimension", "ex1.c", options->dim, &options->dim, NULL,1,3));
36   CHKERRQ(PetscOptionsBoundedInt("-overlap", "The cell overlap for partitioning", "ex1.c", options->overlap, &options->overlap, NULL,0));
37   CHKERRQ(PetscOptionsBool("-test_p4est_seq", "Test p4est with sequential base DM", "ex1.c", options->testp4est[0], &options->testp4est[0], NULL));
38   CHKERRQ(PetscOptionsBool("-test_p4est_par", "Test p4est with parallel base DM", "ex1.c", options->testp4est[1], &options->testp4est[1], NULL));
39   CHKERRQ(PetscOptionsBool("-test_redistribute", "Test redistribution", "ex1.c", options->redistribute, &options->redistribute, NULL));
40   CHKERRQ(PetscOptionsBool("-final_ref", "Run uniform refinement on the final mesh", "ex1.c", options->final_ref, &options->final_ref, NULL));
41   CHKERRQ(PetscOptionsBool("-final_diagnostics", "Run diagnostics on the final mesh", "ex1.c", options->final_diagnostics, &options->final_diagnostics, NULL));
42   ierr = PetscOptionsEnd();CHKERRQ(ierr);
43 
44   CHKERRQ(PetscLogEventRegister("CreateMesh", DM_CLASSID, &options->createMeshEvent));
45   CHKERRQ(PetscLogStageRegister("MeshLoad",       &options->stages[STAGE_LOAD]));
46   CHKERRQ(PetscLogStageRegister("MeshDistribute", &options->stages[STAGE_DISTRIBUTE]));
47   CHKERRQ(PetscLogStageRegister("MeshRefine",     &options->stages[STAGE_REFINE]));
48   CHKERRQ(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   CHKERRQ(PetscLogEventBegin(user->createMeshEvent,0,0,0,0));
62   CHKERRMPI(MPI_Comm_rank(comm, &rank));
63   CHKERRMPI(MPI_Comm_size(comm, &size));
64   CHKERRQ(PetscLogStagePush(user->stages[STAGE_LOAD]));
65   CHKERRQ(DMCreate(comm, dm));
66   CHKERRQ(DMSetType(*dm, DMPLEX));
67   CHKERRQ(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
68   CHKERRQ(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   CHKERRQ(DMLocalizeCoordinates(*dm));
76   CHKERRQ(DMGetPeriodicity(*dm, &periodic, NULL, NULL, NULL));
77   if (periodic) CHKERRQ(DMSetPeriodicity(*dm, PETSC_TRUE, NULL, NULL, NULL));
78 
79   CHKERRQ(DMViewFromOptions(*dm,NULL,"-init_dm_view"));
80   CHKERRQ(DMGetDimension(*dm, &dim));
81 
82   if (testp4est_seq) {
83 #if defined(PETSC_HAVE_P4EST)
84     DM dmConv = NULL;
85 
86     CHKERRQ(DMPlexCheckSymmetry(*dm));
87     CHKERRQ(DMPlexCheckSkeleton(*dm, 0));
88     CHKERRQ(DMPlexCheckFaces(*dm, 0));
89     CHKERRQ(DMPlexCheckGeometry(*dm));
90     CHKERRQ(DMPlexCheckPointSF(*dm));
91     CHKERRQ(DMPlexCheckInterfaceCones(*dm));
92     CHKERRQ(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
93     CHKERRQ(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
94     CHKERRQ(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
95     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
96     if (dmConv) {
97       CHKERRQ(DMDestroy(dm));
98       *dm  = dmConv;
99     }
100     CHKERRQ(DMViewFromOptions(*dm,NULL,"-initref_dm_view"));
101     CHKERRQ(DMPlexCheckSymmetry(*dm));
102     CHKERRQ(DMPlexCheckSkeleton(*dm, 0));
103     CHKERRQ(DMPlexCheckFaces(*dm, 0));
104     CHKERRQ(DMPlexCheckGeometry(*dm));
105     CHKERRQ(DMPlexCheckPointSF(*dm));
106     CHKERRQ(DMPlexCheckInterfaceCones(*dm));
107 
108     CHKERRQ(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
109     if (dmConv) {
110       CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_1_"));
111       CHKERRQ(DMSetFromOptions(dmConv));
112       CHKERRQ(DMDestroy(dm));
113       *dm  = dmConv;
114     }
115     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_1_"));
116     CHKERRQ(DMSetUp(*dm));
117     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_view"));
118     CHKERRQ(DMConvert(*dm,DMPLEX,&dmConv));
119     if (dmConv) {
120       CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_2_"));
121       CHKERRQ(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
122       CHKERRQ(DMSetFromOptions(dmConv));
123       CHKERRQ(DMDestroy(dm));
124       *dm  = dmConv;
125     }
126     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_2_"));
127     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_view"));
128     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
129 #else
130     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
131 #endif
132   }
133 
134   CHKERRQ(PetscLogStagePop());
135   if (!testp4est_seq) {
136     CHKERRQ(PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]));
137     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view"));
138     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, "dist_"));
139     CHKERRQ(DMSetFromOptions(*dm));
140     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
141     CHKERRQ(PetscLogStagePop());
142     CHKERRQ(DMViewFromOptions(*dm, NULL, "-distributed_dm_view"));
143   }
144   CHKERRQ(PetscLogStagePush(user->stages[STAGE_REFINE]));
145   CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, "ref_"));
146   CHKERRQ(DMSetFromOptions(*dm));
147   CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
148   CHKERRQ(PetscLogStagePop());
149 
150   if (testp4est_par) {
151 #if defined(PETSC_HAVE_P4EST)
152     DM dmConv = NULL;
153 
154     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
155     CHKERRQ(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
156     CHKERRQ(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
157     CHKERRQ(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
158     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
159     if (dmConv) {
160       CHKERRQ(DMDestroy(dm));
161       *dm  = dmConv;
162     }
163     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
164     CHKERRQ(DMPlexCheckSymmetry(*dm));
165     CHKERRQ(DMPlexCheckSkeleton(*dm, 0));
166     CHKERRQ(DMPlexCheckFaces(*dm, 0));
167     CHKERRQ(DMPlexCheckGeometry(*dm));
168     CHKERRQ(DMPlexCheckPointSF(*dm));
169     CHKERRQ(DMPlexCheckInterfaceCones(*dm));
170 
171     CHKERRQ(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
172     if (dmConv) {
173       CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_1_"));
174       CHKERRQ(DMSetFromOptions(dmConv));
175       CHKERRQ(DMDestroy(dm));
176       *dm  = dmConv;
177     }
178     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_1_"));
179     CHKERRQ(DMSetUp(*dm));
180     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_view"));
181     CHKERRQ(DMConvert(*dm, DMPLEX, &dmConv));
182     if (dmConv) {
183       CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_2_"));
184       CHKERRQ(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
185       CHKERRQ(DMSetFromOptions(dmConv));
186       CHKERRQ(DMDestroy(dm));
187       *dm  = dmConv;
188     }
189     CHKERRQ(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_2_"));
190     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_view"));
191     CHKERRQ(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     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view"));
204     CHKERRQ(DMPlexDistribute(*dm, 0, NULL, &distributedMesh));
205     if (distributedMesh) {
206       CHKERRQ(DMGetPointSF(distributedMesh, &sf));
207       CHKERRQ(PetscSFSetUp(sf));
208       CHKERRQ(DMGetNeighbors(distributedMesh, &nranks, NULL));
209       CHKERRMPI(MPI_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm)));
210       CHKERRQ(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %D\n", nranks));
211       CHKERRQ(DMDestroy(dm));
212       *dm  = distributedMesh;
213     }
214     CHKERRQ(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     CHKERRQ(PetscLogStagePush(user->stages[STAGE_OVERLAP]));
222     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view"));
223     CHKERRQ(DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh));
224     if (overlapMesh) {
225       PetscInt overlap;
226       CHKERRQ(DMPlexGetOverlap(overlapMesh, &overlap));
227       CHKERRQ(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %D\n", overlap));
228       CHKERRQ(DMDestroy(dm));
229       *dm = overlapMesh;
230     }
231     CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view"));
232     CHKERRQ(PetscLogStagePop());
233   }
234   if (user->final_ref) {
235     DM refinedMesh = NULL;
236 
237     CHKERRQ(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
238     CHKERRQ(DMRefine(*dm, comm, &refinedMesh));
239     if (refinedMesh) {
240       CHKERRQ(DMDestroy(dm));
241       *dm  = refinedMesh;
242     }
243   }
244 
245   CHKERRQ(PetscObjectSetName((PetscObject) *dm, "Generated Mesh"));
246   CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_view"));
247   if (user->final_diagnostics) {
248     DMPlexInterpolatedFlag interpolated;
249     PetscInt  dim, depth;
250 
251     CHKERRQ(DMGetDimension(*dm, &dim));
252     CHKERRQ(DMPlexGetDepth(*dm, &depth));
253     CHKERRQ(DMPlexIsInterpolatedCollective(*dm, &interpolated));
254 
255     CHKERRQ(DMPlexCheckSymmetry(*dm));
256     if (interpolated == DMPLEX_INTERPOLATED_FULL) {
257       CHKERRQ(DMPlexCheckFaces(*dm, 0));
258     }
259     CHKERRQ(DMPlexCheckSkeleton(*dm, 0));
260     CHKERRQ(DMPlexCheckGeometry(*dm));
261   }
262   CHKERRQ(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   CHKERRQ(PetscInitialize(&argc, &argv, NULL, help));
272   CHKERRQ(ProcessOptions(PETSC_COMM_WORLD, &user));
273   CHKERRQ(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
274   CHKERRQ(DMDestroy(&dm));
275   CHKERRQ(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   # Gmsh mesh reader tests
394   testset:
395     args: -dm_coord_space 0 -dm_view
396 
397     test:
398       suffix: gmsh_0
399       requires: !single
400       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
401     test:
402       suffix: gmsh_1
403       requires: !single
404       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
405     test:
406       suffix: gmsh_2
407       requires: !single
408       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
409     test:
410       suffix: gmsh_3
411       nsize: 3
412       requires: !single
413       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
414     test:
415       suffix: gmsh_4
416       nsize: 3
417       requires: !single
418       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
419     test:
420       suffix: gmsh_5
421       requires: !single
422       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
423     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
424     test:
425       suffix: gmsh_6
426       requires: !single
427       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
428     test:
429       suffix: gmsh_7
430       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
431     test:
432       suffix: gmsh_8
433       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
434   testset:
435     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
436     test:
437       suffix: gmsh_9
438     test:
439       suffix: gmsh_9_periodic_0
440       args: -dm_plex_gmsh_periodic 0
441   testset:
442     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
443     test:
444       suffix: gmsh_10
445     test:
446       suffix: gmsh_10_periodic_0
447       args: -dm_plex_gmsh_periodic 0
448   testset:
449     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
450     test:
451       suffix: gmsh_11
452     test:
453       suffix: gmsh_11_periodic_0
454       args: -dm_plex_gmsh_periodic 0
455   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
456   test:
457     suffix: gmsh_12
458     nsize: 4
459     requires: !single mpiio
460     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
461   test:
462     suffix: gmsh_13_hybs2t
463     nsize: 4
464     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
465   test:
466     suffix: gmsh_14_ext
467     requires: !single
468     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
469   test:
470     suffix: gmsh_14_ext_s2t
471     requires: !single
472     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
473   test:
474     suffix: gmsh_15_hyb3d
475     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
476   test:
477     suffix: gmsh_15_hyb3d_vtk
478     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -dm_plex_gmsh_hybrid -dm_plex_check_all
479   test:
480     suffix: gmsh_15_hyb3d_s2t
481     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
482   test:
483     suffix: gmsh_16_spheresurface
484     nsize : 4
485     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
486   test:
487     suffix: gmsh_16_spheresurface_s2t
488     nsize : 4
489     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
490   test:
491     suffix: gmsh_16_spheresurface_extruded
492     nsize : 4
493     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
494   test:
495     suffix: gmsh_16_spheresurface_extruded_s2t
496     nsize : 4
497     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
498   test:
499     suffix: gmsh_17_hyb3d_interp_ascii
500     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
501   test:
502     suffix: exodus_17_hyb3d_interp_ascii
503     requires: exodusii
504     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
505 
506   # Legacy Gmsh v22/v40 ascii/binary reader tests
507   testset:
508     output_file: output/ex1_gmsh_3d_legacy.out
509     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
510     test:
511       suffix: gmsh_3d_ascii_v22
512       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
513     test:
514       suffix: gmsh_3d_ascii_v40
515       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
516     test:
517       suffix: gmsh_3d_binary_v22
518       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
519     test:
520       suffix: gmsh_3d_binary_v40
521       requires: long64
522       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
523 
524   # Gmsh v41 ascii/binary reader tests
525   testset: # 32bit mesh, sequential
526     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
527     output_file: output/ex1_gmsh_3d_32.out
528     test:
529       suffix: gmsh_3d_ascii_v41_32
530       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
531     test:
532       suffix: gmsh_3d_binary_v41_32
533       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
534     test:
535       suffix: gmsh_3d_binary_v41_32_mpiio
536       requires: defined(PETSC_HAVE_MPIIO)
537       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
538   test:
539     suffix: gmsh_quad_8node
540     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
541           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
542   test:
543     suffix: gmsh_hex_20node
544     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
545           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
546   testset:  # 32bit mesh, parallel
547     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
548     nsize: 2
549     output_file: output/ex1_gmsh_3d_32_np2.out
550     test:
551       suffix: gmsh_3d_ascii_v41_32_np2
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_np2
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_np2_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   testset: # 64bit mesh, sequential
561     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
562     output_file: output/ex1_gmsh_3d_64.out
563     test:
564       suffix: gmsh_3d_ascii_v41_64
565       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
566     test:
567       suffix: gmsh_3d_binary_v41_64
568       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
569     test:
570       suffix: gmsh_3d_binary_v41_64_mpiio
571       requires: defined(PETSC_HAVE_MPIIO)
572       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
573   testset:  # 64bit mesh, parallel
574     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
575     nsize: 2
576     output_file: output/ex1_gmsh_3d_64_np2.out
577     test:
578       suffix: gmsh_3d_ascii_v41_64_np2
579       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
580     test:
581       suffix: gmsh_3d_binary_v41_64_np2
582       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
583     test:
584       suffix: gmsh_3d_binary_v41_64_np2_mpiio
585       requires: defined(PETSC_HAVE_MPIIO)
586       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
587 
588   # Fluent mesh reader tests
589   # TODO: Geometry checks fail
590   test:
591     suffix: fluent_0
592     requires: !complex
593     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view -final_diagnostics 0
594   test:
595     suffix: fluent_1
596     nsize: 3
597     requires: !complex
598     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
599   test:
600     suffix: fluent_2
601     requires: !complex
602     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view -final_diagnostics 0
603   test:
604     suffix: fluent_3
605     requires: !complex
606     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
607     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
608 
609   # Med mesh reader tests, including parallel file reads
610   test:
611     suffix: med_0
612     requires: med
613     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dm_view
614   test:
615     suffix: med_1
616     requires: med
617     nsize: 3
618     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
619   test:
620     suffix: med_2
621     requires: med
622     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dm_view
623   test:
624     suffix: med_3
625     requires: med
626     TODO: MED
627     nsize: 3
628     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
629 
630   # Test shape quality
631   test:
632     suffix: test_shape
633     requires: ctetgen
634     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
635 
636   # Test simplex to tensor conversion
637   test:
638     suffix: s2t2
639     requires: triangle
640     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
641 
642   test:
643     suffix: s2t3
644     requires: ctetgen
645     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
646 
647   # Test cylinder
648   testset:
649     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
650     test:
651       suffix: cylinder
652       args: -ref_dm_refine 1
653     test:
654       suffix: cylinder_per
655       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
656     test:
657       suffix: cylinder_wedge
658       args: -dm_coord_space 0 -dm_plex_interpolate 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
659     test:
660       suffix: cylinder_wedge_int
661       output_file: output/ex1_cylinder_wedge.out
662       args: -dm_coord_space 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
663 
664   test:
665     suffix: box_2d
666     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
667 
668   test:
669     suffix: box_2d_per
670     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
671 
672   test:
673     suffix: box_2d_per_unint
674     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
675 
676   test:
677     suffix: box_3d
678     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
679 
680   test:
681     requires: triangle
682     suffix: box_wedge
683     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
684 
685   testset:
686     requires: triangle
687     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
688     test:
689       suffix: box_wedge_s2t
690     test:
691       nsize: 3
692       args: -dist_dm_distribute -petscpartitioner_type simple
693       suffix: box_wedge_s2t_parallel
694 
695   # Test GLVis output
696   testset:
697     args: -dm_coord_space 0 -dm_plex_interpolate 0
698     test:
699       suffix: glvis_2d_tet
700       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
701     test:
702       suffix: glvis_2d_tet_per
703       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
704     test:
705       suffix: glvis_3d_tet
706       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
707   testset:
708     args: -dm_coord_space 0
709     test:
710       suffix: glvis_2d_tet_per_mfem
711       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:
712     test:
713       suffix: glvis_2d_quad
714       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
715     test:
716       suffix: glvis_2d_quad_per
717       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
718     test:
719       suffix: glvis_2d_quad_per_mfem
720       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
721     test:
722       suffix: glvis_3d_tet_per
723       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
724     test:
725       suffix: glvis_3d_tet_per_mfem
726       TODO: broken
727       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:
728     test:
729       suffix: glvis_3d_hex
730       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
731     test:
732       suffix: glvis_3d_hex_per
733       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
734     test:
735       suffix: glvis_3d_hex_per_mfem
736       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
737     test:
738       suffix: glvis_2d_hyb
739       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
740     test:
741       suffix: glvis_3d_hyb
742       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
743     test:
744       suffix: glvis_3d_hyb_s2t
745       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
746 
747   # Test P4EST
748   testset:
749     requires: p4est
750     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
751     test:
752       suffix: p4est_periodic
753       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
754     test:
755       suffix: p4est_periodic_3d
756       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
757     test:
758       suffix: p4est_gmsh_periodic
759       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
760     test:
761       suffix: p4est_gmsh_surface
762       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
763     test:
764       suffix: p4est_gmsh_surface_parallel
765       nsize: 2
766       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
767     test:
768       suffix: p4est_hyb_2d
769       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
770     test:
771       suffix: p4est_hyb_3d
772       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
773     test:
774       requires: ctetgen
775       suffix: p4est_s2t_bugfaces_3d
776       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
777     test:
778       suffix: p4est_bug_overlapsf
779       nsize: 3
780       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
781     test:
782       suffix: p4est_redistribute
783       nsize: 3
784       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
785     test:
786       suffix: p4est_gmsh_s2t_3d
787       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
788     test:
789       suffix: p4est_gmsh_s2t_3d_hash
790       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
791     test:
792       requires: long_runtime
793       suffix: p4est_gmsh_periodic_3d
794       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
795 
796   testset:
797     requires: p4est
798     nsize: 6
799     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
800     test:
801       TODO: interface cones do not conform
802       suffix: p4est_par_periodic
803       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
804     test:
805       TODO: interface cones do not conform
806       suffix: p4est_par_periodic_3d
807       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
808     test:
809       TODO: interface cones do not conform
810       suffix: p4est_par_gmsh_periodic
811       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
812     test:
813       suffix: p4est_par_gmsh_surface
814       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
815     test:
816       suffix: p4est_par_gmsh_s2t_3d
817       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
818     test:
819       TODO: interface cones do not conform
820       suffix: p4est_par_gmsh_s2t_3d_hash
821       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
822     test:
823       requires: long_runtime
824       suffix: p4est_par_gmsh_periodic_3d
825       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
826 
827   testset:
828     requires: p4est
829     nsize: 6
830     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
831     test:
832       suffix: p4est_par_ovl_periodic
833       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
834     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
835     test:
836       suffix: p4est_par_ovl_periodic_3d
837       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
838     test:
839       suffix: p4est_par_ovl_gmsh_periodic
840       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
841     test:
842       suffix: p4est_par_ovl_gmsh_surface
843       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
844     test:
845       suffix: p4est_par_ovl_gmsh_s2t_3d
846       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
847     test:
848       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
849       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
850     test:
851       requires: long_runtime
852       suffix: p4est_par_ovl_gmsh_periodic_3d
853       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
854     test:
855       suffix: p4est_par_ovl_hyb_2d
856       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
857     test:
858       suffix: p4est_par_ovl_hyb_3d
859       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
860 
861   test:
862     TODO: broken
863     requires: p4est
864     nsize: 2
865     suffix: p4est_bug_labels_noovl
866     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
867 
868   test:
869     requires: p4est
870     nsize: 2
871     suffix: p4est_bug_distribute_overlap
872     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
873     args: -dm_post_overlap_view
874 
875   test:
876     suffix: ref_alfeld2d_0
877     requires: triangle
878     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
879   test:
880     suffix: ref_alfeld3d_0
881     requires: ctetgen
882     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
883 
884   # Boundary layer refiners
885   test:
886     suffix: ref_bl_1
887     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
888   test:
889     suffix: ref_bl_2_tri
890     requires: triangle
891     args: -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
892   test:
893     suffix: ref_bl_3_quad
894     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
895   test:
896     suffix: ref_bl_spheresurface_extruded
897     nsize : 4
898     args: -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
899   test:
900     suffix: ref_bl_3d_hyb
901     nsize : 4
902     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
903 
904   testset:
905     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
906     test:
907       suffix: sphere_0
908       args:
909     test:
910       suffix: sphere_1
911       args: -ref_dm_refine 2
912     test:
913       suffix: sphere_2
914       args: -dm_plex_simplex 0
915     test:
916       suffix: sphere_3
917       args: -dm_plex_simplex 0 -ref_dm_refine 2
918 
919   test:
920     suffix: ball_0
921     requires: ctetgen
922     args: -dm_plex_dim 3 -dm_plex_shape ball -dm_plex_check_all -dm_view
923 
924   test:
925     suffix: ball_1
926     requires: ctetgen
927     args: -dm_plex_dim 3 -dm_plex_shape ball -bd_dm_refine 2 -dm_plex_check_all -dm_view
928 
929   test:
930     suffix: schwarz_p_extrude
931     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
932 TEST*/
933