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