xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision 11486bccf1aeea1ca5536228f99d437b39bdaca6)
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 
57   PetscFunctionBegin;
58   PetscCall(PetscLogEventBegin(user->createMeshEvent,0,0,0,0));
59   PetscCallMPI(MPI_Comm_rank(comm, &rank));
60   PetscCallMPI(MPI_Comm_size(comm, &size));
61   PetscCall(PetscLogStagePush(user->stages[STAGE_LOAD]));
62   PetscCall(DMCreate(comm, dm));
63   PetscCall(DMSetType(*dm, DMPLEX));
64   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
65   PetscCall(DMSetFromOptions(*dm));
66   PetscCall(DMLocalizeCoordinates(*dm));
67 
68   PetscCall(DMViewFromOptions(*dm,NULL,"-init_dm_view"));
69   PetscCall(DMGetDimension(*dm, &dim));
70 
71   if (testp4est_seq) {
72     PetscCheck(PetscDefined(HAVE_P4EST),PETSC_COMM_WORLD,PETSC_ERR_SUP,"Reconfigure PETSc with --download-p4est");
73     DM dmConv = NULL;
74 
75     PetscCall(DMPlexCheck(*dm));
76     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
77     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
78     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
79     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
80     if (dmConv) {
81       PetscCall(DMDestroy(dm));
82       *dm  = dmConv;
83     }
84     PetscCall(DMViewFromOptions(*dm,NULL,"-initref_dm_view"));
85     PetscCall(DMPlexCheck(*dm));
86 
87     /* For topologically periodic meshes, we first localize coordinates,
88        and then remove any information related with the
89        automatic computation of localized vertices.
90        This way, refinement operations and conversions to p4est
91        will preserve the shape of the domain in physical space */
92     PetscCall(DMSetPeriodicity(*dm, NULL, NULL, NULL));
93 
94     PetscCall(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
95     if (dmConv) {
96       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_1_"));
97       PetscCall(DMSetFromOptions(dmConv));
98       PetscCall(DMDestroy(dm));
99       *dm  = dmConv;
100     }
101     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_1_"));
102     PetscCall(DMSetUp(*dm));
103     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
104     PetscCall(DMConvert(*dm,DMPLEX,&dmConv));
105     if (dmConv) {
106       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_2_"));
107       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
108       PetscCall(DMSetFromOptions(dmConv));
109       PetscCall(DMDestroy(dm));
110       *dm  = dmConv;
111     }
112     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_2_"));
113     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
114     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
115   }
116 
117   PetscCall(PetscLogStagePop());
118   if (!testp4est_seq) {
119     PetscCall(PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]));
120     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view"));
121     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "dist_"));
122     PetscCall(DMSetFromOptions(*dm));
123     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
124     PetscCall(PetscLogStagePop());
125     PetscCall(DMViewFromOptions(*dm, NULL, "-distributed_dm_view"));
126   }
127   PetscCall(PetscLogStagePush(user->stages[STAGE_REFINE]));
128   PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "ref_"));
129   PetscCall(DMSetFromOptions(*dm));
130   PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
131   PetscCall(PetscLogStagePop());
132 
133   if (testp4est_par) {
134     PetscCheck(PetscDefined(HAVE_P4EST),PETSC_COMM_WORLD,PETSC_ERR_SUP,"Reconfigure PETSc with --download-p4est");
135     DM dmConv = NULL;
136 
137     PetscCall(DMPlexCheck(*dm));
138     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
139     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
140     PetscCall(DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX));
141     PetscCall(DMRefine(*dm, PETSC_COMM_WORLD, &dmConv));
142     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
143     if (dmConv) {
144       PetscCall(DMDestroy(dm));
145       *dm  = dmConv;
146     }
147     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_tobox_view"));
148     PetscCall(DMPlexCheck(*dm));
149 
150     PetscCall(DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv));
151     if (dmConv) {
152       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_1_"));
153       PetscCall(DMSetFromOptions(dmConv));
154       PetscCall(DMDestroy(dm));
155       *dm  = dmConv;
156     }
157     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_1_"));
158     PetscCall(DMSetUp(*dm));
159     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
160     PetscCall(DMConvert(*dm, DMPLEX, &dmConv));
161     if (dmConv) {
162       PetscCall(PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_2_"));
163       PetscCall(DMPlexDistributeSetDefault(dmConv, PETSC_FALSE));
164       PetscCall(DMSetFromOptions(dmConv));
165       PetscCall(DMDestroy(dm));
166       *dm  = dmConv;
167     }
168     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_2_"));
169     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
170     PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL));
171   }
172 
173   /* test redistribution of an already distributed mesh */
174   if (user->redistribute) {
175     DM       distributedMesh;
176     PetscSF  sf;
177     PetscInt nranks;
178 
179     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view"));
180     PetscCall(DMPlexDistribute(*dm, 0, NULL, &distributedMesh));
181     if (distributedMesh) {
182       PetscCall(DMGetPointSF(distributedMesh, &sf));
183       PetscCall(PetscSFSetUp(sf));
184       PetscCall(DMGetNeighbors(distributedMesh, &nranks, NULL));
185       PetscCallMPI(MPI_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm)));
186       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %" PetscInt_FMT "\n", nranks));
187       PetscCall(DMDestroy(dm));
188       *dm  = distributedMesh;
189     }
190     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_redist_view"));
191   }
192 
193   if (user->overlap) {
194     DM overlapMesh = NULL;
195 
196     /* Add the overlap to refined mesh */
197     PetscCall(PetscLogStagePush(user->stages[STAGE_OVERLAP]));
198     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view"));
199     PetscCall(DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh));
200     if (overlapMesh) {
201       PetscInt overlap;
202       PetscCall(DMPlexGetOverlap(overlapMesh, &overlap));
203       PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %" PetscInt_FMT "\n", overlap));
204       PetscCall(DMDestroy(dm));
205       *dm = overlapMesh;
206     }
207     PetscCall(DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view"));
208     PetscCall(PetscLogStagePop());
209   }
210   if (user->final_ref) {
211     DM refinedMesh = NULL;
212 
213     PetscCall(DMPlexSetRefinementUniform(*dm, PETSC_TRUE));
214     PetscCall(DMRefine(*dm, comm, &refinedMesh));
215     if (refinedMesh) {
216       PetscCall(DMDestroy(dm));
217       *dm  = refinedMesh;
218     }
219   }
220 
221   PetscCall(PetscObjectSetName((PetscObject) *dm, "Generated Mesh"));
222   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
223   if (user->final_diagnostics) PetscCall(DMPlexCheck(*dm));
224   PetscCall(PetscLogEventEnd(user->createMeshEvent,0,0,0,0));
225   PetscFunctionReturn(0);
226 }
227 
228 int main(int argc, char **argv)
229 {
230   DM             dm;
231   AppCtx         user;
232 
233   PetscFunctionBeginUser;
234   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
235   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
236   PetscCall(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
237   PetscCall(DMDestroy(&dm));
238   PetscCall(PetscFinalize());
239   return 0;
240 }
241 
242 /*TEST
243 
244   # CTetGen 0-1
245   test:
246     suffix: 0
247     requires: ctetgen
248     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
249   test:
250     suffix: 1
251     requires: ctetgen
252     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
253 
254   # 2D LaTex and ASCII output 2-9
255   test:
256     suffix: 2
257     requires: triangle
258     args: -dm_plex_interpolate 0 -dm_view ascii::ascii_latex
259   test:
260     suffix: 3
261     requires: triangle
262     args: -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
263   test:
264     suffix: 4
265     requires: triangle
266     nsize: 2
267     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_info_detail
268   test:
269     suffix: 5
270     requires: triangle
271     nsize: 2
272     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
273   test:
274     suffix: 6
275     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_view ascii::ascii_info_detail
276   test:
277     suffix: 7
278     args: -dm_coord_space 0 -dm_plex_simplex 0 -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
279   test:
280     suffix: 8
281     nsize: 2
282     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
283   test:
284     suffix: box_2d_latex_xper
285     nsize: 1
286     args: -dm_plex_simplex 0 -dm_plex_box_faces 5,5 -dm_plex_box_bd periodic,none \
287           -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex -dm_plex_view_edges 0
288 
289   # 1D ASCII output
290   testset:
291     args: -dm_coord_space 0 -dm_plex_dim 1 -dm_view ascii::ascii_info_detail -dm_plex_check_all
292     test:
293       suffix: 1d_0
294       args:
295     test:
296       suffix: 1d_1
297       args: -ref_dm_refine 2
298     test:
299       suffix: 1d_2
300       args: -dm_plex_box_faces 5 -dm_plex_box_bd periodic
301 
302   # Parallel refinement tests with overlap
303   test:
304     suffix: refine_overlap_1d
305     nsize: 2
306     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
307   test:
308     suffix: refine_overlap_2d
309     requires: triangle
310     nsize: {{2 8}separate output}
311     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
312 
313   # Parallel extrusion tests
314   test:
315     suffix: spheresurface_extruded
316     nsize : 4
317     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dist_dm_distribute -petscpartitioner_type simple \
318           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
319 
320   test:
321     suffix: spheresurface_extruded_symmetric
322     nsize : 4
323     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_symmetric -dist_dm_distribute -petscpartitioner_type simple \
324           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
325 
326   # Parallel simple partitioner tests
327   test:
328     suffix: part_simple_0
329     requires: triangle
330     nsize: 2
331     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
332   test:
333     suffix: part_simple_1
334     requires: triangle
335     nsize: 8
336     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
337 
338   # Parallel partitioner tests
339   test:
340     suffix: part_parmetis_0
341     requires: parmetis
342     nsize: 2
343     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
344   test:
345     suffix: part_ptscotch_0
346     requires: ptscotch
347     nsize: 2
348     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
349   test:
350     suffix: part_ptscotch_1
351     requires: ptscotch
352     nsize: 8
353     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
354 
355   # CGNS reader tests 10-11 (need to find smaller test meshes)
356   test:
357     suffix: cgns_0
358     requires: cgns
359     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/tut21.cgns -dm_view
360 
361   # ExodusII reader tests
362   testset:
363     args: -dm_plex_boundary_label boundary -dm_plex_check_all -dm_view
364     test:
365       suffix: exo_0
366       requires: exodusii
367       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad.exo
368     test:
369       suffix: exo_1
370       requires: exodusii
371       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad-15.exo
372     test:
373       suffix: exo_2
374       requires: exodusii
375       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/squaremotor-30.exo
376     test:
377       suffix: exo_3
378       requires: exodusii
379       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo
380     test:
381       suffix: exo_4
382       requires: exodusii
383      args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/simpleblock-100.exo
384 
385   # Gmsh mesh reader tests
386   testset:
387     args: -dm_coord_space 0 -dm_view
388 
389     test:
390       suffix: gmsh_0
391       requires: !single
392       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
393     test:
394       suffix: gmsh_1
395       requires: !single
396       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
397     test:
398       suffix: gmsh_2
399       requires: !single
400       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
401     test:
402       suffix: gmsh_3
403       nsize: 3
404       requires: !single
405       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
406     test:
407       suffix: gmsh_4
408       nsize: 3
409       requires: !single
410       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
411     test:
412       suffix: gmsh_5
413       requires: !single
414       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
415     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
416     test:
417       suffix: gmsh_6
418       requires: !single
419       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
420     test:
421       suffix: gmsh_7
422       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
423     test:
424       suffix: gmsh_8
425       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
426   testset:
427     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
428     test:
429       suffix: gmsh_9
430     test:
431       suffix: gmsh_9_periodic_0
432       args: -dm_plex_gmsh_periodic 0
433   testset:
434     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
435     test:
436       suffix: gmsh_10
437     test:
438       suffix: gmsh_10_periodic_0
439       args: -dm_plex_gmsh_periodic 0
440   testset:
441     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
442     test:
443       suffix: gmsh_11
444     test:
445       suffix: gmsh_11_periodic_0
446       args: -dm_plex_gmsh_periodic 0
447   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
448   test:
449     suffix: gmsh_12
450     nsize: 4
451     requires: !single mpiio
452     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
453   test:
454     suffix: gmsh_13_hybs2t
455     nsize: 4
456     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
457   test:
458     suffix: gmsh_14_ext
459     requires: !single
460     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
461   test:
462     suffix: gmsh_14_ext_s2t
463     requires: !single
464     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
465   test:
466     suffix: gmsh_15_hyb3d
467     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
468   test:
469     suffix: gmsh_15_hyb3d_vtk
470     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -dm_plex_gmsh_hybrid -dm_plex_check_all
471   test:
472     suffix: gmsh_15_hyb3d_s2t
473     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
474   test:
475     suffix: gmsh_16_spheresurface
476     nsize : 4
477     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
478   test:
479     suffix: gmsh_16_spheresurface_s2t
480     nsize : 4
481     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
482   test:
483     suffix: gmsh_16_spheresurface_extruded
484     nsize : 4
485     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
486   test:
487     suffix: gmsh_16_spheresurface_extruded_s2t
488     nsize : 4
489     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
490   test:
491     suffix: gmsh_17_hyb3d_interp_ascii
492     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
493   test:
494     suffix: exodus_17_hyb3d_interp_ascii
495     requires: exodusii
496     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
497 
498   # Legacy Gmsh v22/v40 ascii/binary reader tests
499   testset:
500     output_file: output/ex1_gmsh_3d_legacy.out
501     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
502     test:
503       suffix: gmsh_3d_ascii_v22
504       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
505     test:
506       suffix: gmsh_3d_ascii_v40
507       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
508     test:
509       suffix: gmsh_3d_binary_v22
510       # Could not remake binary to remove extra face labeling
511       output_file: output/ex1_gmsh_3d_legacy_v22_bin.out
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_shift
714       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
715     test:
716       suffix: glvis_2d_quad_per_mfem
717       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_plex_box_bd periodic,periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem
718     test:
719       suffix: glvis_3d_tet_per
720       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
721     test:
722       suffix: glvis_3d_tet_per_mfem
723       TODO: broken
724       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:
725     test:
726       suffix: glvis_3d_hex
727       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
728     test:
729       suffix: glvis_3d_hex_per
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 0
731     test:
732       suffix: glvis_3d_hex_per_mfem
733       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_plex_box_bd periodic,periodic,periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem
734     test:
735       suffix: glvis_2d_hyb
736       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
737     test:
738       suffix: glvis_3d_hyb
739       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
740     test:
741       suffix: glvis_3d_hyb_s2t
742       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
743 
744   # Test P4EST
745   testset:
746     requires: p4est
747     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
748     test:
749       suffix: p4est_periodic
750       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
751     test:
752       suffix: p4est_periodic_3d
753       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
754     test:
755       suffix: p4est_gmsh_periodic
756       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
757     test:
758       suffix: p4est_gmsh_surface
759       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
760     test:
761       suffix: p4est_gmsh_surface_parallel
762       nsize: 2
763       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -petscpartitioner_type simple -dm_view ::load_balance
764     test:
765       suffix: p4est_hyb_2d
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_triquad.msh
767     test:
768       suffix: p4est_hyb_3d
769       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
770     test:
771       requires: ctetgen
772       suffix: p4est_s2t_bugfaces_3d
773       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
774     test:
775       suffix: p4est_bug_overlapsf
776       nsize: 3
777       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
778     test:
779       suffix: p4est_redistribute
780       nsize: 3
781       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 2,2,1 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash -petscpartitioner_type simple -test_redistribute -dm_plex_csr_alg {{mat graph overlap}} -dm_view ::load_balance
782     test:
783       suffix: p4est_gmsh_s2t_3d
784       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
785     test:
786       suffix: p4est_gmsh_s2t_3d_hash
787       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
788     test:
789       requires: long_runtime
790       suffix: p4est_gmsh_periodic_3d
791       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
792 
793   testset:
794     requires: p4est
795     nsize: 6
796     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
797     test:
798       TODO: interface cones do not conform
799       suffix: p4est_par_periodic
800       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
801     test:
802       TODO: interface cones do not conform
803       suffix: p4est_par_periodic_3d
804       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
805     test:
806       TODO: interface cones do not conform
807       suffix: p4est_par_gmsh_periodic
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/square_periodic.msh
809     test:
810       suffix: p4est_par_gmsh_surface
811       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
812     test:
813       suffix: p4est_par_gmsh_s2t_3d
814       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
815     test:
816       TODO: interface cones do not conform
817       suffix: p4est_par_gmsh_s2t_3d_hash
818       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
819     test:
820       requires: long_runtime
821       suffix: p4est_par_gmsh_periodic_3d
822       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
823 
824   testset:
825     requires: p4est
826     nsize: 6
827     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
828     test:
829       suffix: p4est_par_ovl_periodic
830       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
831     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
832     test:
833       suffix: p4est_par_ovl_periodic_3d
834       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
835     test:
836       suffix: p4est_par_ovl_gmsh_periodic
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/square_periodic.msh
838     test:
839       suffix: p4est_par_ovl_gmsh_surface
840       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
841     test:
842       suffix: p4est_par_ovl_gmsh_s2t_3d
843       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
844     test:
845       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
846       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
847     test:
848       requires: long_runtime
849       suffix: p4est_par_ovl_gmsh_periodic_3d
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/mesh-3d-box-innersphere.msh
851     test:
852       suffix: p4est_par_ovl_hyb_2d
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_triquad.msh
854     test:
855       suffix: p4est_par_ovl_hyb_3d
856       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
857 
858   test:
859     TODO: broken
860     requires: p4est
861     nsize: 2
862     suffix: p4est_bug_labels_noovl
863     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
864 
865   test:
866     requires: p4est
867     nsize: 2
868     suffix: p4est_bug_distribute_overlap
869     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
870     args: -dm_post_overlap_view
871 
872   test:
873     suffix: ref_alfeld2d_0
874     requires: triangle
875     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
876   test:
877     suffix: ref_alfeld3d_0
878     requires: ctetgen
879     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
880 
881   # Boundary layer refiners
882   test:
883     suffix: ref_bl_1
884     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
885   test:
886     suffix: ref_bl_2_tri
887     requires: triangle
888     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
889   test:
890     suffix: ref_bl_3_quad
891     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
892   test:
893     suffix: ref_bl_spheresurface_extruded
894     nsize : 4
895     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
896   test:
897     suffix: ref_bl_3d_hyb
898     nsize : 4
899     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
900 
901   testset:
902     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
903     test:
904       suffix: sphere_0
905       args:
906     test:
907       suffix: sphere_1
908       args: -ref_dm_refine 2
909     test:
910       suffix: sphere_2
911       args: -dm_plex_simplex 0
912     test:
913       suffix: sphere_3
914       args: -dm_plex_simplex 0 -ref_dm_refine 2
915 
916   test:
917     suffix: ball_0
918     requires: ctetgen
919     args: -dm_plex_dim 3 -dm_plex_shape ball -dm_plex_check_all -dm_view
920 
921   test:
922     suffix: ball_1
923     requires: ctetgen
924     args: -dm_plex_dim 3 -dm_plex_shape ball -bd_dm_refine 2 -dm_plex_check_all -dm_view
925 
926   test:
927     suffix: schwarz_p_extrude
928     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
929 
930   test:
931     suffix: pyr_mixed_0
932     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/pyr_tet.msh -dm_plex_check_all -dm_view
933 TEST*/
934