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