xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision c3e4dd79e17d3f0a51a524340fae4661630fd09e)
1 static char help[] = "Tests various DMPlex routines to construct, refine and distribute a mesh.\n\n";
2 
3 #include <petscdmplex.h>
4 #include <petscdmplextransform.h>
5 #include <petscsf.h>
6 
7 enum {STAGE_LOAD, STAGE_DISTRIBUTE, STAGE_REFINE, STAGE_OVERLAP};
8 
9 typedef struct {
10   PetscLogEvent createMeshEvent;
11   PetscLogStage stages[4];
12   /* Domain and mesh definition */
13   PetscInt      dim;                             /* The topological mesh dimension */
14   PetscInt      overlap;                         /* The cell overlap to use during partitioning */
15   PetscBool     testp4est[2];
16   PetscBool     redistribute;
17   PetscBool     final_ref;                       /* Run refinement at the end */
18   PetscBool     final_diagnostics;               /* Run diagnostics on the final mesh */
19 } AppCtx;
20 
21 PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
22 {
23   PetscFunctionBegin;
24   options->dim               = 2;
25   options->overlap           = 0;
26   options->testp4est[0]      = PETSC_FALSE;
27   options->testp4est[1]      = PETSC_FALSE;
28   options->redistribute      = PETSC_FALSE;
29   options->final_ref         = PETSC_FALSE;
30   options->final_diagnostics = PETSC_TRUE;
31 
32   PetscOptionsBegin(comm, "", "Meshing Problem Options", "DMPLEX");
33   PetscCall(PetscOptionsRangeInt("-dim", "The topological mesh dimension", "ex1.c", options->dim, &options->dim, NULL,1,3));
34   PetscCall(PetscOptionsBoundedInt("-overlap", "The cell overlap for partitioning", "ex1.c", options->overlap, &options->overlap, NULL,0));
35   PetscCall(PetscOptionsBool("-test_p4est_seq", "Test p4est with sequential base DM", "ex1.c", options->testp4est[0], &options->testp4est[0], NULL));
36   PetscCall(PetscOptionsBool("-test_p4est_par", "Test p4est with parallel base DM", "ex1.c", options->testp4est[1], &options->testp4est[1], NULL));
37   PetscCall(PetscOptionsBool("-test_redistribute", "Test redistribution", "ex1.c", options->redistribute, &options->redistribute, NULL));
38   PetscCall(PetscOptionsBool("-final_ref", "Run uniform refinement on the final mesh", "ex1.c", options->final_ref, &options->final_ref, NULL));
39   PetscCall(PetscOptionsBool("-final_diagnostics", "Run diagnostics on the final mesh", "ex1.c", options->final_diagnostics, &options->final_diagnostics, NULL));
40   PetscOptionsEnd();
41 
42   PetscCall(PetscLogEventRegister("CreateMesh", DM_CLASSID, &options->createMeshEvent));
43   PetscCall(PetscLogStageRegister("MeshLoad",       &options->stages[STAGE_LOAD]));
44   PetscCall(PetscLogStageRegister("MeshDistribute", &options->stages[STAGE_DISTRIBUTE]));
45   PetscCall(PetscLogStageRegister("MeshRefine",     &options->stages[STAGE_REFINE]));
46   PetscCall(PetscLogStageRegister("MeshOverlap",    &options->stages[STAGE_OVERLAP]));
47   PetscFunctionReturn(0);
48 }
49 
50 PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
51 {
52   PetscInt       dim           = user->dim;
53   PetscBool      testp4est_seq = user->testp4est[0];
54   PetscBool      testp4est_par = user->testp4est[1];
55   PetscMPIInt    rank, size;
56   PetscBool      periodic;
57 
58   PetscFunctionBegin;
59   PetscCall(PetscLogEventBegin(user->createMeshEvent,0,0,0,0));
60   PetscCallMPI(MPI_Comm_rank(comm, &rank));
61   PetscCallMPI(MPI_Comm_size(comm, &size));
62   PetscCall(PetscLogStagePush(user->stages[STAGE_LOAD]));
63   PetscCall(DMCreate(comm, dm));
64   PetscCall(DMSetType(*dm, DMPLEX));
65   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
66   PetscCall(DMSetFromOptions(*dm));
67 
68   /* For topologically periodic meshes, we first localize coordinates,
69      and then remove any information related with the
70      automatic computation of localized vertices.
71      This way, refinement operations and conversions to p4est
72      will preserve the shape of the domain in physical space */
73   PetscCall(DMLocalizeCoordinates(*dm));
74   PetscCall(DMGetPeriodicity(*dm, &periodic, NULL, NULL, NULL));
75   if (periodic) PetscCall(DMSetPeriodicity(*dm, PETSC_TRUE, NULL, NULL, NULL));
76 
77   PetscCall(DMViewFromOptions(*dm,NULL,"-init_dm_view"));
78   PetscCall(DMGetDimension(*dm, &dim));
79 
80   if (testp4est_seq) {
81 #if defined(PETSC_HAVE_P4EST)
82     DM dmConv = NULL;
83 
84     PetscCall(DMPlexCheck(*dm));
85     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
86     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
87     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
88     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
89     if (dmConv) {
90       PetscCall(DMDestroy(dm));
91       *dm  = dmConv;
92     }
93     PetscCall(DMViewFromOptions(*dm,NULL,"-initref_dm_view"));
94     PetscCall(DMPlexCheck(*dm));
95 
96     PetscCall(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
97     if (dmConv) {
98       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_1_"));
99       PetscCall(DMSetFromOptions(dmConv));
100       PetscCall(DMDestroy(dm));
101       *dm  = dmConv;
102     }
103     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_1_"));
104     PetscCall(DMSetUp(*dm));
105     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
106     PetscCall(DMConvert(*dm,DMPLEX,&dmConv));
107     if (dmConv) {
108       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_2_"));
109       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
110       PetscCall(DMSetFromOptions(dmConv));
111       PetscCall(DMDestroy(dm));
112       *dm  = dmConv;
113     }
114     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_2_"));
115     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
116     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
117 #else
118     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
119 #endif
120   }
121 
122   PetscCall(PetscLogStagePop());
123   if (!testp4est_seq) {
124     PetscCall(PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]));
125     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view"));
126     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "dist_"));
127     PetscCall(DMSetFromOptions(*dm));
128     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
129     PetscCall(PetscLogStagePop());
130     PetscCall(DMViewFromOptions(*dm, NULL, "-distributed_dm_view"));
131   }
132   PetscCall(PetscLogStagePush(user->stages[STAGE_REFINE]));
133   PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "ref_"));
134   PetscCall(DMSetFromOptions(*dm));
135   PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
136   PetscCall(PetscLogStagePop());
137 
138   if (testp4est_par) {
139 #if defined(PETSC_HAVE_P4EST)
140     DM dmConv = NULL;
141 
142     PetscCall(DMPlexCheck(*dm));
143     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
144     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
145     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
146     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
147     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
148     if (dmConv) {
149       PetscCall(DMDestroy(dm));
150       *dm  = dmConv;
151     }
152     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
153     PetscCall(DMPlexCheck(*dm));
154 
155     PetscCall(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
156     if (dmConv) {
157       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_1_"));
158       PetscCall(DMSetFromOptions(dmConv));
159       PetscCall(DMDestroy(dm));
160       *dm  = dmConv;
161     }
162     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_1_"));
163     PetscCall(DMSetUp(*dm));
164     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
165     PetscCall(DMConvert(*dm, DMPLEX, &dmConv));
166     if (dmConv) {
167       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_2_"));
168       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
169       PetscCall(DMSetFromOptions(dmConv));
170       PetscCall(DMDestroy(dm));
171       *dm  = dmConv;
172     }
173     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_2_"));
174     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
175     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
176 #else
177     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
178 #endif
179   }
180 
181   /* test redistribution of an already distributed mesh */
182   if (user->redistribute) {
183     DM       distributedMesh;
184     PetscSF  sf;
185     PetscInt nranks;
186 
187     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view"));
188     PetscCall(DMPlexDistribute(*dm, 0, NULL, &distributedMesh));
189     if (distributedMesh) {
190       PetscCall(DMGetPointSF(distributedMesh, &sf));
191       PetscCall(PetscSFSetUp(sf));
192       PetscCall(DMGetNeighbors(distributedMesh, &nranks, NULL));
193       PetscCallMPI(MPI_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm)));
194       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %" PetscInt_FMT "\n", nranks));
195       PetscCall(DMDestroy(dm));
196       *dm  = distributedMesh;
197     }
198     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_redist_view"));
199   }
200 
201   if (user->overlap) {
202     DM overlapMesh = NULL;
203 
204     /* Add the overlap to refined mesh */
205     PetscCall(PetscLogStagePush(user->stages[STAGE_OVERLAP]));
206     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view"));
207     PetscCall(DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh));
208     if (overlapMesh) {
209       PetscInt overlap;
210       PetscCall(DMPlexGetOverlap(overlapMesh, &overlap));
211       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %" PetscInt_FMT "\n", overlap));
212       PetscCall(DMDestroy(dm));
213       *dm = overlapMesh;
214     }
215     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view"));
216     PetscCall(PetscLogStagePop());
217   }
218   if (user->final_ref) {
219     DM refinedMesh = NULL;
220 
221     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
222     PetscCall(DMRefine(*dm, comm, &refinedMesh));
223     if (refinedMesh) {
224       PetscCall(DMDestroy(dm));
225       *dm  = refinedMesh;
226     }
227   }
228 
229   PetscCall(PetscObjectSetName((PetscObject) *dm, "Generated Mesh"));
230   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
231   if (user->final_diagnostics) PetscCall(DMPlexCheck(*dm));
232   PetscCall(PetscLogEventEnd(user->createMeshEvent,0,0,0,0));
233   PetscFunctionReturn(0);
234 }
235 
236 int main(int argc, char **argv)
237 {
238   DM             dm;
239   AppCtx         user;
240 
241   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
242   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
243   PetscCall(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
244   PetscCall(DMDestroy(&dm));
245   PetscCall(PetscFinalize());
246   return 0;
247 }
248 
249 /*TEST
250 
251   # CTetGen 0-1
252   test:
253     suffix: 0
254     requires: ctetgen
255     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
256   test:
257     suffix: 1
258     requires: ctetgen
259     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
260 
261   # 2D LaTex and ASCII output 2-9
262   test:
263     suffix: 2
264     requires: triangle
265     args: -dm_plex_interpolate 0 -dm_view ascii::ascii_latex
266   test:
267     suffix: 3
268     requires: triangle
269     args: -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
270   test:
271     suffix: 4
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_info_detail
275   test:
276     suffix: 5
277     requires: triangle
278     nsize: 2
279     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
280   test:
281     suffix: 6
282     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_view ascii::ascii_info_detail
283   test:
284     suffix: 7
285     args: -dm_coord_space 0 -dm_plex_simplex 0 -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
286   test:
287     suffix: 8
288     nsize: 2
289     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
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       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
513     test:
514       suffix: gmsh_3d_binary_v40
515       requires: long64
516       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
517 
518   # Gmsh v41 ascii/binary reader tests
519   testset: # 32bit mesh, sequential
520     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
521     output_file: output/ex1_gmsh_3d_32.out
522     test:
523       suffix: gmsh_3d_ascii_v41_32
524       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
525     test:
526       suffix: gmsh_3d_binary_v41_32
527       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
528     test:
529       suffix: gmsh_3d_binary_v41_32_mpiio
530       requires: defined(PETSC_HAVE_MPIIO)
531       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
532   test:
533     suffix: gmsh_quad_8node
534     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
535           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
536   test:
537     suffix: gmsh_hex_20node
538     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
539           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
540   testset:  # 32bit mesh, parallel
541     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
542     nsize: 2
543     output_file: output/ex1_gmsh_3d_32_np2.out
544     test:
545       suffix: gmsh_3d_ascii_v41_32_np2
546       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
547     test:
548       suffix: gmsh_3d_binary_v41_32_np2
549       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
550     test:
551       suffix: gmsh_3d_binary_v41_32_np2_mpiio
552       requires: defined(PETSC_HAVE_MPIIO)
553       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
554   testset: # 64bit mesh, sequential
555     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
556     output_file: output/ex1_gmsh_3d_64.out
557     test:
558       suffix: gmsh_3d_ascii_v41_64
559       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
560     test:
561       suffix: gmsh_3d_binary_v41_64
562       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
563     test:
564       suffix: gmsh_3d_binary_v41_64_mpiio
565       requires: defined(PETSC_HAVE_MPIIO)
566       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
567   testset:  # 64bit mesh, parallel
568     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
569     nsize: 2
570     output_file: output/ex1_gmsh_3d_64_np2.out
571     test:
572       suffix: gmsh_3d_ascii_v41_64_np2
573       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
574     test:
575       suffix: gmsh_3d_binary_v41_64_np2
576       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
577     test:
578       suffix: gmsh_3d_binary_v41_64_np2_mpiio
579       requires: defined(PETSC_HAVE_MPIIO)
580       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
581 
582   # Fluent mesh reader tests
583   # TODO: Geometry checks fail
584   test:
585     suffix: fluent_0
586     requires: !complex
587     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view -final_diagnostics 0
588   test:
589     suffix: fluent_1
590     nsize: 3
591     requires: !complex
592     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
593   test:
594     suffix: fluent_2
595     requires: !complex
596     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view -final_diagnostics 0
597   test:
598     suffix: fluent_3
599     requires: !complex
600     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
601     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
602 
603   # Med mesh reader tests, including parallel file reads
604   test:
605     suffix: med_0
606     requires: med
607     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dm_view
608   test:
609     suffix: med_1
610     requires: med
611     nsize: 3
612     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
613   test:
614     suffix: med_2
615     requires: med
616     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dm_view
617   test:
618     suffix: med_3
619     requires: med
620     TODO: MED
621     nsize: 3
622     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
623 
624   # Test shape quality
625   test:
626     suffix: test_shape
627     requires: ctetgen
628     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
629 
630   # Test simplex to tensor conversion
631   test:
632     suffix: s2t2
633     requires: triangle
634     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
635 
636   test:
637     suffix: s2t3
638     requires: ctetgen
639     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
640 
641   # Test cylinder
642   testset:
643     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
644     test:
645       suffix: cylinder
646       args: -ref_dm_refine 1
647     test:
648       suffix: cylinder_per
649       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
650     test:
651       suffix: cylinder_wedge
652       args: -dm_coord_space 0 -dm_plex_interpolate 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
653     test:
654       suffix: cylinder_wedge_int
655       output_file: output/ex1_cylinder_wedge.out
656       args: -dm_coord_space 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
657 
658   test:
659     suffix: box_2d
660     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
661 
662   test:
663     suffix: box_2d_per
664     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
665 
666   test:
667     suffix: box_2d_per_unint
668     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
669 
670   test:
671     suffix: box_3d
672     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
673 
674   test:
675     requires: triangle
676     suffix: box_wedge
677     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
678 
679   testset:
680     requires: triangle
681     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
682     test:
683       suffix: box_wedge_s2t
684     test:
685       nsize: 3
686       args: -dist_dm_distribute -petscpartitioner_type simple
687       suffix: box_wedge_s2t_parallel
688 
689   # Test GLVis output
690   testset:
691     args: -dm_coord_space 0 -dm_plex_interpolate 0
692     test:
693       suffix: glvis_2d_tet
694       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
695     test:
696       suffix: glvis_2d_tet_per
697       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
698     test:
699       suffix: glvis_3d_tet
700       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
701   testset:
702     args: -dm_coord_space 0
703     test:
704       suffix: glvis_2d_tet_per_mfem
705       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:
706     test:
707       suffix: glvis_2d_quad
708       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
709     test:
710       suffix: glvis_2d_quad_per
711       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
712     test:
713       suffix: glvis_2d_quad_per_mfem
714       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
715     test:
716       suffix: glvis_3d_tet_per
717       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
718     test:
719       suffix: glvis_3d_tet_per_mfem
720       TODO: broken
721       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:
722     test:
723       suffix: glvis_3d_hex
724       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
725     test:
726       suffix: glvis_3d_hex_per
727       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
728     test:
729       suffix: glvis_3d_hex_per_mfem
730       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
731     test:
732       suffix: glvis_2d_hyb
733       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
734     test:
735       suffix: glvis_3d_hyb
736       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
737     test:
738       suffix: glvis_3d_hyb_s2t
739       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
740 
741   # Test P4EST
742   testset:
743     requires: p4est
744     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
745     test:
746       suffix: p4est_periodic
747       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
748     test:
749       suffix: p4est_periodic_3d
750       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
751     test:
752       suffix: p4est_gmsh_periodic
753       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
754     test:
755       suffix: p4est_gmsh_surface
756       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
757     test:
758       suffix: p4est_gmsh_surface_parallel
759       nsize: 2
760       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
761     test:
762       suffix: p4est_hyb_2d
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/hybrid_triquad.msh
764     test:
765       suffix: p4est_hyb_3d
766       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
767     test:
768       requires: ctetgen
769       suffix: p4est_s2t_bugfaces_3d
770       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
771     test:
772       suffix: p4est_bug_overlapsf
773       nsize: 3
774       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
775     test:
776       suffix: p4est_redistribute
777       nsize: 3
778       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
779     test:
780       suffix: p4est_gmsh_s2t_3d
781       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
782     test:
783       suffix: p4est_gmsh_s2t_3d_hash
784       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
785     test:
786       requires: long_runtime
787       suffix: p4est_gmsh_periodic_3d
788       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
789 
790   testset:
791     requires: p4est
792     nsize: 6
793     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
794     test:
795       TODO: interface cones do not conform
796       suffix: p4est_par_periodic
797       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
798     test:
799       TODO: interface cones do not conform
800       suffix: p4est_par_periodic_3d
801       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
802     test:
803       TODO: interface cones do not conform
804       suffix: p4est_par_gmsh_periodic
805       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
806     test:
807       suffix: p4est_par_gmsh_surface
808       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
809     test:
810       suffix: p4est_par_gmsh_s2t_3d
811       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
812     test:
813       TODO: interface cones do not conform
814       suffix: p4est_par_gmsh_s2t_3d_hash
815       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
816     test:
817       requires: long_runtime
818       suffix: p4est_par_gmsh_periodic_3d
819       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
820 
821   testset:
822     requires: p4est
823     nsize: 6
824     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
825     test:
826       suffix: p4est_par_ovl_periodic
827       args: -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic -dm_plex_box_faces 3,5 -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash
828     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
829     test:
830       suffix: p4est_par_ovl_periodic_3d
831       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
832     test:
833       suffix: p4est_par_ovl_gmsh_periodic
834       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
835     test:
836       suffix: p4est_par_ovl_gmsh_surface
837       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
838     test:
839       suffix: p4est_par_ovl_gmsh_s2t_3d
840       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
841     test:
842       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
843       args: -conv_par_1_dm_forest_initial_refinement 1 -conv_par_1_dm_forest_maximum_refinement 2 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
844     test:
845       requires: long_runtime
846       suffix: p4est_par_ovl_gmsh_periodic_3d
847       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh
848     test:
849       suffix: p4est_par_ovl_hyb_2d
850       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
851     test:
852       suffix: p4est_par_ovl_hyb_3d
853       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
854 
855   test:
856     TODO: broken
857     requires: p4est
858     nsize: 2
859     suffix: p4est_bug_labels_noovl
860     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
861 
862   test:
863     requires: p4est
864     nsize: 2
865     suffix: p4est_bug_distribute_overlap
866     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
867     args: -dm_post_overlap_view
868 
869   test:
870     suffix: ref_alfeld2d_0
871     requires: triangle
872     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
873   test:
874     suffix: ref_alfeld3d_0
875     requires: ctetgen
876     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
877 
878   # Boundary layer refiners
879   test:
880     suffix: ref_bl_1
881     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
882   test:
883     suffix: ref_bl_2_tri
884     requires: triangle
885     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
886   test:
887     suffix: ref_bl_3_quad
888     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
889   test:
890     suffix: ref_bl_spheresurface_extruded
891     nsize : 4
892     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
893   test:
894     suffix: ref_bl_3d_hyb
895     nsize : 4
896     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
897 
898   testset:
899     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
900     test:
901       suffix: sphere_0
902       args:
903     test:
904       suffix: sphere_1
905       args: -ref_dm_refine 2
906     test:
907       suffix: sphere_2
908       args: -dm_plex_simplex 0
909     test:
910       suffix: sphere_3
911       args: -dm_plex_simplex 0 -ref_dm_refine 2
912 
913   test:
914     suffix: ball_0
915     requires: ctetgen
916     args: -dm_plex_dim 3 -dm_plex_shape ball -dm_plex_check_all -dm_view
917 
918   test:
919     suffix: ball_1
920     requires: ctetgen
921     args: -dm_plex_dim 3 -dm_plex_shape ball -bd_dm_refine 2 -dm_plex_check_all -dm_view
922 
923   test:
924     suffix: schwarz_p_extrude
925     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
926 TEST*/
927