xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision 40badf4fbc550ac1f60bd080eaff6de6d55b946d)
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   PetscErrorCode ierr;
271 
272   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
273   CHKERRQ(ProcessOptions(PETSC_COMM_WORLD, &user));
274   CHKERRQ(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
275   CHKERRQ(DMDestroy(&dm));
276   ierr = PetscFinalize();
277   return ierr;
278 }
279 
280 /*TEST
281 
282   # CTetGen 0-1
283   test:
284     suffix: 0
285     requires: ctetgen
286     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
287   test:
288     suffix: 1
289     requires: ctetgen
290     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
291 
292   # 2D LaTex and ASCII output 2-9
293   test:
294     suffix: 2
295     requires: triangle
296     args: -dm_plex_interpolate 0 -dm_view ascii::ascii_latex
297   test:
298     suffix: 3
299     requires: triangle
300     args: -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
301   test:
302     suffix: 4
303     requires: triangle
304     nsize: 2
305     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_info_detail
306   test:
307     suffix: 5
308     requires: triangle
309     nsize: 2
310     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
311   test:
312     suffix: 6
313     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_view ascii::ascii_info_detail
314   test:
315     suffix: 7
316     args: -dm_coord_space 0 -dm_plex_simplex 0 -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
317   test:
318     suffix: 8
319     nsize: 2
320     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
321 
322   # 1D ASCII output
323   testset:
324     args: -dm_coord_space 0 -dm_plex_dim 1 -dm_view ascii::ascii_info_detail -dm_plex_check_all
325     test:
326       suffix: 1d_0
327       args:
328     test:
329       suffix: 1d_1
330       args: -ref_dm_refine 2
331     test:
332       suffix: 1d_2
333       args: -dm_plex_box_faces 5 -dm_plex_box_bd periodic
334 
335   # Parallel refinement tests with overlap
336   test:
337     suffix: refine_overlap_1d
338     nsize: 2
339     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
340   test:
341     suffix: refine_overlap_2d
342     requires: triangle
343     nsize: {{2 8}separate output}
344     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
345 
346   # Parallel extrusion tests
347   test:
348     suffix: spheresurface_extruded
349     nsize : 4
350     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dist_dm_distribute -petscpartitioner_type simple \
351           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
352 
353   test:
354     suffix: spheresurface_extruded_symmetric
355     nsize : 4
356     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_symmetric -dist_dm_distribute -petscpartitioner_type simple \
357           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
358 
359   # Parallel simple partitioner tests
360   test:
361     suffix: part_simple_0
362     requires: triangle
363     nsize: 2
364     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
365   test:
366     suffix: part_simple_1
367     requires: triangle
368     nsize: 8
369     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
370 
371   # Parallel partitioner tests
372   test:
373     suffix: part_parmetis_0
374     requires: parmetis
375     nsize: 2
376     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
377   test:
378     suffix: part_ptscotch_0
379     requires: ptscotch
380     nsize: 2
381     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
382   test:
383     suffix: part_ptscotch_1
384     requires: ptscotch
385     nsize: 8
386     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
387 
388   # CGNS reader tests 10-11 (need to find smaller test meshes)
389   test:
390     suffix: cgns_0
391     requires: cgns
392     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/tut21.cgns -dm_view
393 
394   # Gmsh mesh reader tests
395   testset:
396     args: -dm_coord_space 0 -dm_view
397 
398     test:
399       suffix: gmsh_0
400       requires: !single
401       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
402     test:
403       suffix: gmsh_1
404       requires: !single
405       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
406     test:
407       suffix: gmsh_2
408       requires: !single
409       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
410     test:
411       suffix: gmsh_3
412       nsize: 3
413       requires: !single
414       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
415     test:
416       suffix: gmsh_4
417       nsize: 3
418       requires: !single
419       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
420     test:
421       suffix: gmsh_5
422       requires: !single
423       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
424     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
425     test:
426       suffix: gmsh_6
427       requires: !single
428       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
429     test:
430       suffix: gmsh_7
431       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
432     test:
433       suffix: gmsh_8
434       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
435   testset:
436     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
437     test:
438       suffix: gmsh_9
439     test:
440       suffix: gmsh_9_periodic_0
441       args: -dm_plex_gmsh_periodic 0
442   testset:
443     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
444     test:
445       suffix: gmsh_10
446     test:
447       suffix: gmsh_10_periodic_0
448       args: -dm_plex_gmsh_periodic 0
449   testset:
450     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
451     test:
452       suffix: gmsh_11
453     test:
454       suffix: gmsh_11_periodic_0
455       args: -dm_plex_gmsh_periodic 0
456   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
457   test:
458     suffix: gmsh_12
459     nsize: 4
460     requires: !single mpiio
461     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
462   test:
463     suffix: gmsh_13_hybs2t
464     nsize: 4
465     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
466   test:
467     suffix: gmsh_14_ext
468     requires: !single
469     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
470   test:
471     suffix: gmsh_14_ext_s2t
472     requires: !single
473     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
474   test:
475     suffix: gmsh_15_hyb3d
476     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
477   test:
478     suffix: gmsh_15_hyb3d_vtk
479     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -dm_plex_gmsh_hybrid -dm_plex_check_all
480   test:
481     suffix: gmsh_15_hyb3d_s2t
482     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
483   test:
484     suffix: gmsh_16_spheresurface
485     nsize : 4
486     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
487   test:
488     suffix: gmsh_16_spheresurface_s2t
489     nsize : 4
490     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
491   test:
492     suffix: gmsh_16_spheresurface_extruded
493     nsize : 4
494     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
495   test:
496     suffix: gmsh_16_spheresurface_extruded_s2t
497     nsize : 4
498     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
499   test:
500     suffix: gmsh_17_hyb3d_interp_ascii
501     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
502   test:
503     suffix: exodus_17_hyb3d_interp_ascii
504     requires: exodusii
505     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
506 
507   # Legacy Gmsh v22/v40 ascii/binary reader tests
508   testset:
509     output_file: output/ex1_gmsh_3d_legacy.out
510     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
511     test:
512       suffix: gmsh_3d_ascii_v22
513       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
514     test:
515       suffix: gmsh_3d_ascii_v40
516       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
517     test:
518       suffix: gmsh_3d_binary_v22
519       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
520     test:
521       suffix: gmsh_3d_binary_v40
522       requires: long64
523       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
524 
525   # Gmsh v41 ascii/binary reader tests
526   testset: # 32bit mesh, sequential
527     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
528     output_file: output/ex1_gmsh_3d_32.out
529     test:
530       suffix: gmsh_3d_ascii_v41_32
531       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
532     test:
533       suffix: gmsh_3d_binary_v41_32
534       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
535     test:
536       suffix: gmsh_3d_binary_v41_32_mpiio
537       requires: defined(PETSC_HAVE_MPIIO)
538       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
539   test:
540     suffix: gmsh_quad_8node
541     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
542           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
543   test:
544     suffix: gmsh_hex_20node
545     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
546           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
547   testset:  # 32bit mesh, parallel
548     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
549     nsize: 2
550     output_file: output/ex1_gmsh_3d_32_np2.out
551     test:
552       suffix: gmsh_3d_ascii_v41_32_np2
553       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
554     test:
555       suffix: gmsh_3d_binary_v41_32_np2
556       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
557     test:
558       suffix: gmsh_3d_binary_v41_32_np2_mpiio
559       requires: defined(PETSC_HAVE_MPIIO)
560       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
561   testset: # 64bit mesh, sequential
562     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
563     output_file: output/ex1_gmsh_3d_64.out
564     test:
565       suffix: gmsh_3d_ascii_v41_64
566       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
567     test:
568       suffix: gmsh_3d_binary_v41_64
569       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
570     test:
571       suffix: gmsh_3d_binary_v41_64_mpiio
572       requires: defined(PETSC_HAVE_MPIIO)
573       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
574   testset:  # 64bit mesh, parallel
575     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
576     nsize: 2
577     output_file: output/ex1_gmsh_3d_64_np2.out
578     test:
579       suffix: gmsh_3d_ascii_v41_64_np2
580       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
581     test:
582       suffix: gmsh_3d_binary_v41_64_np2
583       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
584     test:
585       suffix: gmsh_3d_binary_v41_64_np2_mpiio
586       requires: defined(PETSC_HAVE_MPIIO)
587       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
588 
589   # Fluent mesh reader tests
590   # TODO: Geometry checks fail
591   test:
592     suffix: fluent_0
593     requires: !complex
594     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view -final_diagnostics 0
595   test:
596     suffix: fluent_1
597     nsize: 3
598     requires: !complex
599     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
600   test:
601     suffix: fluent_2
602     requires: !complex
603     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view -final_diagnostics 0
604   test:
605     suffix: fluent_3
606     requires: !complex
607     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
608     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
609 
610   # Med mesh reader tests, including parallel file reads
611   test:
612     suffix: med_0
613     requires: med
614     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dm_view
615   test:
616     suffix: med_1
617     requires: med
618     nsize: 3
619     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
620   test:
621     suffix: med_2
622     requires: med
623     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dm_view
624   test:
625     suffix: med_3
626     requires: med
627     TODO: MED
628     nsize: 3
629     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
630 
631   # Test shape quality
632   test:
633     suffix: test_shape
634     requires: ctetgen
635     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
636 
637   # Test simplex to tensor conversion
638   test:
639     suffix: s2t2
640     requires: triangle
641     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
642 
643   test:
644     suffix: s2t3
645     requires: ctetgen
646     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
647 
648   # Test cylinder
649   testset:
650     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
651     test:
652       suffix: cylinder
653       args: -ref_dm_refine 1
654     test:
655       suffix: cylinder_per
656       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
657     test:
658       suffix: cylinder_wedge
659       args: -dm_coord_space 0 -dm_plex_interpolate 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
660     test:
661       suffix: cylinder_wedge_int
662       output_file: output/ex1_cylinder_wedge.out
663       args: -dm_coord_space 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
664 
665   test:
666     suffix: box_2d
667     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
668 
669   test:
670     suffix: box_2d_per
671     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
672 
673   test:
674     suffix: box_2d_per_unint
675     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
676 
677   test:
678     suffix: box_3d
679     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
680 
681   test:
682     requires: triangle
683     suffix: box_wedge
684     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
685 
686   testset:
687     requires: triangle
688     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
689     test:
690       suffix: box_wedge_s2t
691     test:
692       nsize: 3
693       args: -dist_dm_distribute -petscpartitioner_type simple
694       suffix: box_wedge_s2t_parallel
695 
696   # Test GLVis output
697   testset:
698     args: -dm_coord_space 0 -dm_plex_interpolate 0
699     test:
700       suffix: glvis_2d_tet
701       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
702     test:
703       suffix: glvis_2d_tet_per
704       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
705     test:
706       suffix: glvis_3d_tet
707       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
708   testset:
709     args: -dm_coord_space 0
710     test:
711       suffix: glvis_2d_tet_per_mfem
712       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:
713     test:
714       suffix: glvis_2d_quad
715       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
716     test:
717       suffix: glvis_2d_quad_per
718       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
719     test:
720       suffix: glvis_2d_quad_per_mfem
721       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
722     test:
723       suffix: glvis_3d_tet_per
724       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
725     test:
726       suffix: glvis_3d_tet_per_mfem
727       TODO: broken
728       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:
729     test:
730       suffix: glvis_3d_hex
731       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
732     test:
733       suffix: glvis_3d_hex_per
734       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
735     test:
736       suffix: glvis_3d_hex_per_mfem
737       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
738     test:
739       suffix: glvis_2d_hyb
740       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
741     test:
742       suffix: glvis_3d_hyb
743       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
744     test:
745       suffix: glvis_3d_hyb_s2t
746       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
747 
748   # Test P4EST
749   testset:
750     requires: p4est
751     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
752     test:
753       suffix: p4est_periodic
754       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
755     test:
756       suffix: p4est_periodic_3d
757       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
758     test:
759       suffix: p4est_gmsh_periodic
760       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
761     test:
762       suffix: p4est_gmsh_surface
763       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
764     test:
765       suffix: p4est_gmsh_surface_parallel
766       nsize: 2
767       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
768     test:
769       suffix: p4est_hyb_2d
770       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
771     test:
772       suffix: p4est_hyb_3d
773       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
774     test:
775       requires: ctetgen
776       suffix: p4est_s2t_bugfaces_3d
777       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
778     test:
779       suffix: p4est_bug_overlapsf
780       nsize: 3
781       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
782     test:
783       suffix: p4est_redistribute
784       nsize: 3
785       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
786     test:
787       suffix: p4est_gmsh_s2t_3d
788       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
789     test:
790       suffix: p4est_gmsh_s2t_3d_hash
791       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
792     test:
793       requires: long_runtime
794       suffix: p4est_gmsh_periodic_3d
795       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
796 
797   testset:
798     requires: p4est
799     nsize: 6
800     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
801     test:
802       TODO: interface cones do not conform
803       suffix: p4est_par_periodic
804       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
805     test:
806       TODO: interface cones do not conform
807       suffix: p4est_par_periodic_3d
808       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
809     test:
810       TODO: interface cones do not conform
811       suffix: p4est_par_gmsh_periodic
812       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
813     test:
814       suffix: p4est_par_gmsh_surface
815       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
816     test:
817       suffix: p4est_par_gmsh_s2t_3d
818       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
819     test:
820       TODO: interface cones do not conform
821       suffix: p4est_par_gmsh_s2t_3d_hash
822       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
823     test:
824       requires: long_runtime
825       suffix: p4est_par_gmsh_periodic_3d
826       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
827 
828   testset:
829     requires: p4est
830     nsize: 6
831     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
832     test:
833       suffix: p4est_par_ovl_periodic
834       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
835     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
836     test:
837       suffix: p4est_par_ovl_periodic_3d
838       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
839     test:
840       suffix: p4est_par_ovl_gmsh_periodic
841       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
842     test:
843       suffix: p4est_par_ovl_gmsh_surface
844       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
845     test:
846       suffix: p4est_par_ovl_gmsh_s2t_3d
847       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
848     test:
849       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
850       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
851     test:
852       requires: long_runtime
853       suffix: p4est_par_ovl_gmsh_periodic_3d
854       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
855     test:
856       suffix: p4est_par_ovl_hyb_2d
857       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
858     test:
859       suffix: p4est_par_ovl_hyb_3d
860       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
861 
862   test:
863     TODO: broken
864     requires: p4est
865     nsize: 2
866     suffix: p4est_bug_labels_noovl
867     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
868 
869   test:
870     requires: p4est
871     nsize: 2
872     suffix: p4est_bug_distribute_overlap
873     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
874     args: -dm_post_overlap_view
875 
876   test:
877     suffix: ref_alfeld2d_0
878     requires: triangle
879     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
880   test:
881     suffix: ref_alfeld3d_0
882     requires: ctetgen
883     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
884 
885   # Boundary layer refiners
886   test:
887     suffix: ref_bl_1
888     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
889   test:
890     suffix: ref_bl_2_tri
891     requires: triangle
892     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
893   test:
894     suffix: ref_bl_3_quad
895     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
896   test:
897     suffix: ref_bl_spheresurface_extruded
898     nsize : 4
899     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
900   test:
901     suffix: ref_bl_3d_hyb
902     nsize : 4
903     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
904 
905   testset:
906     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
907     test:
908       suffix: sphere_0
909       args:
910     test:
911       suffix: sphere_1
912       args: -ref_dm_refine 2
913     test:
914       suffix: sphere_2
915       args: -dm_plex_simplex 0
916     test:
917       suffix: sphere_3
918       args: -dm_plex_simplex 0 -ref_dm_refine 2
919 
920   test:
921     suffix: ball_0
922     requires: ctetgen
923     args: -dm_plex_dim 3 -dm_plex_shape ball -dm_plex_check_all -dm_view
924 
925   test:
926     suffix: ball_1
927     requires: ctetgen
928     args: -dm_plex_dim 3 -dm_plex_shape ball -bd_dm_refine 2 -dm_plex_check_all -dm_view
929 
930   test:
931     suffix: schwarz_p_extrude
932     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
933 TEST*/
934