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