xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision ccfb0f9f40a0131988d7995ed9679700dae2a75a)
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(PETSC_SUCCESS);
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(MPIU_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(PETSC_SUCCESS);
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     output_file: output/empty.out
323 
324   test:
325     # This test needs a non-tensor prism so we can make a coordinate space
326     suffix: spheresurface_extruded
327     nsize : 4
328     args: -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_use_tensor 0 \
329           -dist_dm_distribute -petscpartitioner_type simple \
330           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
331 
332   test:
333     # This test needs a non-tensor prism so we can make a coordinate space
334     suffix: spheresurface_extruded_symmetric
335     nsize : 4
336     args: -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_use_tensor 0 -dm_plex_transform_extrude_symmetric \
337           -dist_dm_distribute -petscpartitioner_type simple \
338           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
339 
340   test:
341     # Test with a tensor prism which cannot have a coordinate space
342     suffix: spheresurface_extruded_nocoord
343     nsize : 4
344     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 \
345           -dist_dm_distribute -petscpartitioner_type simple \
346           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
347 
348   # Parallel simple partitioner tests
349   test:
350     suffix: part_simple_0
351     requires: triangle
352     nsize: 2
353     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
354   test:
355     suffix: part_simple_1
356     requires: triangle
357     nsize: 8
358     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
359 
360   # Parallel partitioner tests
361   test:
362     suffix: part_parmetis_0
363     requires: parmetis
364     nsize: 2
365     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
366   test:
367     suffix: part_ptscotch_0
368     requires: ptscotch
369     nsize: 2
370     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
371   test:
372     suffix: part_ptscotch_1
373     requires: ptscotch
374     nsize: 8
375     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
376 
377   # CGNS reader tests 10-11 (need to find smaller test meshes)
378   test:
379     suffix: cgns_0
380     requires: datafilespath cgns
381     args: -dm_plex_filename ${DATAFILESPATH}/meshes/tut21.cgns -dm_view
382 
383   # ExodusII reader tests
384   testset:
385     args: -dm_plex_boundary_label boundary -dm_plex_check_all -dm_view
386     test:
387       suffix: exo_0
388       requires: exodusii
389       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad.exo
390     test:
391       suffix: exo_1
392       requires: exodusii
393       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/sevenside-quad-15.exo
394     test:
395       suffix: exo_2
396       requires: exodusii
397       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/squaremotor-30.exo
398     test:
399       suffix: exo_3
400       requires: exodusii
401       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo
402     test:
403       suffix: exo_4
404       requires: exodusii
405       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/simpleblock-100.exo
406     test:
407       suffix: exo_1d_0
408       requires: exodusii
409       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/1d-2elems.e
410 
411   # Gmsh mesh reader tests
412   testset:
413     args: -dm_coord_space 0 -dm_view
414 
415     test:
416       suffix: gmsh_0
417       requires: !single
418       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
419     test:
420       suffix: gmsh_1
421       requires: !single
422       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
423     test:
424       suffix: gmsh_1_box_label
425       requires: !single
426       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dm_plex_box_label
427     test:
428       suffix: gmsh_2
429       requires: !single
430       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
431     test:
432       suffix: gmsh_3
433       nsize: 3
434       requires: !single
435       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
436     test:
437       suffix: gmsh_4
438       nsize: 3
439       requires: !single
440       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
441     test:
442       suffix: gmsh_5
443       requires: !single
444       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
445     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
446     test:
447       suffix: gmsh_6
448       requires: !single
449       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
450     test:
451       suffix: gmsh_7
452       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
453     test:
454       suffix: gmsh_8
455       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
456   testset:
457     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
458     test:
459       suffix: gmsh_9
460     test:
461       suffix: gmsh_9_periodic_0
462       args: -dm_plex_gmsh_periodic 0
463   testset:
464     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
465     test:
466       suffix: gmsh_10
467     test:
468       suffix: gmsh_10_periodic_0
469       args: -dm_plex_gmsh_periodic 0
470   testset:
471     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
472     test:
473       suffix: gmsh_11
474     test:
475       suffix: gmsh_11_periodic_0
476       args: -dm_plex_gmsh_periodic 0
477   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
478   test:
479     suffix: gmsh_12
480     nsize: 4
481     requires: !single mpiio
482     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
483   test:
484     suffix: gmsh_13_hybs2t
485     nsize: 4
486     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
487   test:
488     suffix: gmsh_14_ext
489     requires: !single
490     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
491   test:
492     suffix: gmsh_14_ext_s2t
493     requires: !single
494     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
495   test:
496     suffix: gmsh_15_hyb3d
497     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
498   test:
499     suffix: gmsh_15_hyb3d_s2t
500     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
501   test:
502     suffix: gmsh_16_spheresurface
503     nsize : 4
504     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
505   test:
506     suffix: gmsh_16_spheresurface_s2t
507     nsize : 4
508     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
509   test:
510     suffix: gmsh_16_spheresurface_extruded
511     nsize : 4
512     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
513   test:
514     suffix: gmsh_16_spheresurface_extruded_s2t
515     nsize : 4
516     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
517   test:
518     suffix: gmsh_17_hyb3d_interp_ascii
519     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
520   test:
521     suffix: exodus_17_hyb3d_interp_ascii
522     requires: exodusii
523     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
524 
525   # Legacy Gmsh v22/v40 ascii/binary reader tests
526   testset:
527     output_file: output/ex1_gmsh_3d_legacy.out
528     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
529     test:
530       suffix: gmsh_3d_ascii_v22
531       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
532     test:
533       suffix: gmsh_3d_ascii_v40
534       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
535     test:
536       suffix: gmsh_3d_binary_v22
537       # Could not remake binary to remove extra face labeling
538       output_file: output/ex1_gmsh_3d_legacy_v22_bin.out
539       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
540     test:
541       suffix: gmsh_3d_binary_v40
542       requires: long64
543       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
544 
545   # Gmsh v41 ascii/binary reader tests
546   testset: # 32-bit mesh, sequential
547     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
548     output_file: output/ex1_gmsh_3d_32.out
549     test:
550       suffix: gmsh_3d_ascii_v41_32
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
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_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   test:
560     suffix: gmsh_quad_8node
561     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
562           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
563   test:
564     suffix: gmsh_hex_20node
565     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
566           -dm_view -dm_plex_check_all -dm_plex_gmsh_mark_vertices
567   testset:  # 32-bit mesh, parallel
568     args: -dm_coord_space 0 -dist_dm_distribute -petscpartitioner_type simple -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
569     nsize: 2
570     output_file: output/ex1_gmsh_3d_32_np2.out
571     test:
572       suffix: gmsh_3d_ascii_v41_32_np2
573       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
574     test:
575       suffix: gmsh_3d_binary_v41_32_np2
576       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
577     test:
578       suffix: gmsh_3d_binary_v41_32_np2_mpiio
579       requires: defined(PETSC_HAVE_MPIIO)
580       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
581   testset: # 64-bit mesh, sequential
582     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all -dm_plex_gmsh_mark_vertices
583     output_file: output/ex1_gmsh_3d_64.out
584     test:
585       suffix: gmsh_3d_ascii_v41_64
586       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
587     test:
588       suffix: gmsh_3d_binary_v41_64
589       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
590     test:
591       suffix: gmsh_3d_binary_v41_64_mpiio
592       requires: defined(PETSC_HAVE_MPIIO)
593       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
594   testset:  # 64-bit mesh, parallel
595     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
596     nsize: 2
597     output_file: output/ex1_gmsh_3d_64_np2.out
598     test:
599       suffix: gmsh_3d_ascii_v41_64_np2
600       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
601     test:
602       suffix: gmsh_3d_binary_v41_64_np2
603       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
604     test:
605       suffix: gmsh_3d_binary_v41_64_np2_mpiio
606       requires: defined(PETSC_HAVE_MPIIO)
607       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
608 
609   # Fluent mesh reader tests
610   test:
611     suffix: fluent_0
612     requires: !complex
613     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view
614   test:
615     suffix: fluent_1
616     nsize: 3
617     requires: !complex
618     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view
619   test:
620     suffix: fluent_2
621     requires: !complex
622     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view
623   test:
624     suffix: fluent_3
625     requires: !complex
626     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
627     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
628   test:
629     suffix: fluent_4
630     requires: !complex defined(PETSC_USE_INFO)
631     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/testcase3D.cas -info :viewer -dm_view
632   test:
633     suffix: fluent_5
634     requires: !complex defined(PETSC_USE_INFO)
635     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/wedge_cylinder.cas -info :viewer -dm_view
636 
637   # STL mesh reader tests
638   test:
639     suffix: stl_0
640     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube.stl -dm_view
641 
642   # Shapefile reader tests
643   test:
644     suffix: shp_0
645     requires: datafilespath
646     args: -dm_plex_filename ${DATAFILESPATH}/meshes/NYState.shp -dm_view
647 
648   # Test shape quality
649   test:
650     suffix: test_shape
651     requires: ctetgen
652     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
653 
654   # Test simplex to tensor conversion
655   test:
656     suffix: s2t2
657     requires: triangle
658     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
659 
660   test:
661     suffix: s2t3
662     requires: ctetgen
663     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
664 
665   # Test cylinder
666   testset:
667     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
668     test:
669       suffix: cylinder
670       args: -ref_dm_refine 1
671     test:
672       suffix: cylinder_per
673       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
674 
675   test:
676     suffix: box_2d
677     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
678 
679   test:
680     suffix: box_2d_per
681     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
682 
683   test:
684     suffix: box_2d_per_unint
685     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
686 
687   test:
688     suffix: box_3d
689     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
690 
691   test:
692     requires: triangle
693     suffix: box_wedge
694     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
695 
696   testset:
697     requires: triangle
698     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
699     test:
700       suffix: box_wedge_s2t
701     test:
702       nsize: 3
703       args: -dist_dm_distribute -petscpartitioner_type simple
704       suffix: box_wedge_s2t_parallel
705 
706   # Test GLVis output
707   testset:
708     args: -dm_coord_space 0 -dm_plex_interpolate 0
709     test:
710       suffix: glvis_2d_tet
711       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
712     test:
713       suffix: glvis_2d_tet_per
714       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
715     test:
716       suffix: glvis_3d_tet
717       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
718   testset:
719     args: -dm_coord_space 0
720     test:
721       suffix: glvis_2d_tet_per_mfem
722       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:
723     test:
724       suffix: glvis_2d_quad
725       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
726     test:
727       suffix: glvis_2d_quad_per
728       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
729     test:
730       suffix: glvis_2d_quad_per_shift
731       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
732     test:
733       suffix: glvis_2d_quad_per_mfem
734       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
735     test:
736       suffix: glvis_3d_tet_per
737       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
738     test:
739       suffix: glvis_3d_tet_per_mfem
740       TODO: broken
741       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:
742     test:
743       suffix: glvis_3d_hex
744       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 3,3,3 -dm_view glvis:
745     test:
746       suffix: glvis_3d_hex_per
747       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
748     test:
749       suffix: glvis_3d_hex_per_mfem
750       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
751     test:
752       suffix: glvis_2d_hyb
753       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
754     test:
755       suffix: glvis_3d_hyb
756       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
757     test:
758       suffix: glvis_3d_hyb_s2t
759       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
760 
761   # Test P4EST
762   testset:
763     requires: p4est
764     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
765     test:
766       suffix: p4est_periodic
767       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
768     test:
769       suffix: p4est_periodic_3d
770       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,none -dm_plex_box_faces 3,3,2 -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 1 -conv_seq_1_dm_p4est_refine_pattern hash
771     test:
772       suffix: p4est_gmsh_periodic
773       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
774     test:
775       suffix: p4est_gmsh_surface
776       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
777     test:
778       suffix: p4est_gmsh_surface_parallel
779       nsize: 2
780       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
781     test:
782       suffix: p4est_hyb_2d
783       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
784     test:
785       suffix: p4est_hyb_3d
786       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
787     test:
788       requires: ctetgen
789       suffix: p4est_s2t_bugfaces_3d
790       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
791     test:
792       suffix: p4est_bug_overlapsf
793       nsize: 3
794       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
795     test:
796       suffix: p4est_redistribute
797       nsize: 3
798       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
799     test:
800       suffix: p4est_gmsh_s2t_3d
801       args: -conv_seq_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
802     test:
803       suffix: p4est_gmsh_s2t_3d_hash
804       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
805     test:
806       requires: long_runtime
807       suffix: p4est_gmsh_periodic_3d
808       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
809 
810   testset:
811     requires: p4est
812     nsize: 6
813     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
814     test:
815       TODO: interface cones do not conform
816       suffix: p4est_par_periodic
817       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
818     test:
819       TODO: interface cones do not conform
820       suffix: p4est_par_periodic_3d
821       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
822     test:
823       TODO: interface cones do not conform
824       suffix: p4est_par_gmsh_periodic
825       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
826     test:
827       suffix: p4est_par_gmsh_surface
828       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
829       output_file: output/empty.out
830     test:
831       suffix: p4est_par_gmsh_s2t_3d
832       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
833       output_file: output/empty.out
834     test:
835       TODO: interface cones do not conform
836       suffix: p4est_par_gmsh_s2t_3d_hash
837       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
838     test:
839       requires: long_runtime
840       suffix: p4est_par_gmsh_periodic_3d
841       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
842 
843   testset:
844     requires: p4est
845     nsize: 6
846     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
847     test:
848       suffix: p4est_par_ovl_periodic
849       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
850       output_file: output/empty.out
851     # Problem for -dm_plex_box_faces 3,5,4 -conv_par_1_dm_forest_maximum_refinement 2
852     test:
853       suffix: p4est_par_ovl_periodic_3d
854       args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_bd periodic,periodic,none \
855               -dm_plex_box_faces 3,5,2 \
856               -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 1 \
857                 -conv_par_1_dm_p4est_refine_pattern hash
858       output_file: output/empty.out
859     test:
860       suffix: p4est_par_ovl_gmsh_periodic
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/square_periodic.msh
862       output_file: output/empty.out
863     test:
864       suffix: p4est_par_ovl_gmsh_surface
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/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
866       output_file: output/empty.out
867     test:
868       suffix: p4est_par_ovl_gmsh_s2t_3d
869       args: -conv_par_1_dm_forest_initial_refinement 1 -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
870       output_file: output/empty.out
871     test:
872       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
873       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
874       output_file: output/empty.out
875     test:
876       requires: long_runtime
877       suffix: p4est_par_ovl_gmsh_periodic_3d
878       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
879       output_file: output/empty.out
880     test:
881       suffix: p4est_par_ovl_hyb_2d
882       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
883       output_file: output/empty.out
884     # -conv_par_1_dm_forest_maximum_refinement 1 was too expensive
885     test:
886       suffix: p4est_par_ovl_hyb_3d
887       args: -conv_par_1_dm_forest_initial_refinement 0 -conv_par_1_dm_forest_maximum_refinement 0 -conv_par_1_dm_p4est_refine_pattern hash -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
888       output_file: output/empty.out
889 
890   test:
891     TODO: broken
892     requires: p4est
893     nsize: 2
894     suffix: p4est_bug_labels_noovl
895     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
896 
897   test:
898     requires: p4est
899     nsize: 2
900     suffix: p4est_bug_distribute_overlap
901     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
902     args: -dm_post_overlap_view
903 
904   test:
905     suffix: ref_alfeld2d_0
906     requires: triangle
907     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
908   test:
909     suffix: ref_alfeld3d_0
910     requires: ctetgen
911     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
912 
913   # Boundary layer refiners
914   test:
915     suffix: ref_bl_1
916     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
917   test:
918     suffix: ref_bl_2_tri
919     requires: triangle
920     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
921   test:
922     suffix: ref_bl_3_quad
923     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
924   test:
925     suffix: ref_bl_spheresurface_extruded
926     nsize : 4
927     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
928   test:
929     suffix: ref_bl_3d_hyb
930     nsize : 4
931     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
932 
933   testset:
934     args: -dm_plex_shape sphere -dm_plex_check_all -dm_view
935     test:
936       suffix: sphere_0
937       args:
938     test:
939       suffix: sphere_1
940       args: -ref_dm_refine 2
941     test:
942       suffix: sphere_2
943       args: -dm_plex_simplex 0
944     test:
945       suffix: sphere_3
946       args: -dm_plex_simplex 0 -ref_dm_refine 2
947     test:
948       suffix: sphere_4
949       args: -dm_plex_dim 1 -ref_dm_refine 2
950 
951   testset:
952     args: -dm_plex_shape ball -dm_plex_check_all -dm_view
953 
954     test:
955       suffix: ball_0
956       requires: ctetgen
957       args: -dm_plex_dim 3
958 
959     test:
960       suffix: ball_1
961       requires: ctetgen
962       args: -dm_plex_dim 3 -bd_dm_refine 2
963 
964     test:
965       suffix: ball_2
966       requires: triangle
967       args: -dm_plex_dim 2 -bd_dm_refine 2
968 
969   test:
970     suffix: schwarz_p_extrude
971     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
972 
973   test:
974     suffix: schwarz_p_refine
975     args: -dm_plex_shape schwarz_p -dm_plex_tps_extent 1,1,1 -dm_plex_tps_refine 1 -dm_plex_tps_layers 1 -dm_plex_tps_thickness .2 -dm_view
976 
977   test:
978     suffix: pyr_mixed_0
979     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/pyr_tet.msh -dm_plex_check_all -dm_view
980 
981   test:
982     suffix: hypercubic_0
983     args: -dm_plex_dim 2 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3 -dm_plex_check_all \
984           -dm_view -dm_plex_print_adj 3
985 
986   test:
987     suffix: hypercubic_0_par
988     nsize: 4
989     args: -dm_plex_dim 2 -dm_plex_shape hypercubic -dm_plex_box_faces 4,4 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
990           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf
991 
992   test:
993     suffix: hypercubic_1
994     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3 -dm_plex_check_all \
995           -dm_view -dm_plex_print_adj 3
996 
997   test:
998     suffix: hypercubic_1_par
999     requires: !quad
1000     nsize: 8
1001     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 4,4,4 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1002           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf
1003 
1004   test:
1005     suffix: hypercubic_1_par_ov_3
1006     requires: !quad
1007     nsize: 8
1008     args: -dm_plex_dim 3 -dm_plex_shape hypercubic -dm_plex_box_faces 6,6,6 -dm_distribute_overlap 3 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1009           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf
1010 
1011   test:
1012     suffix: hypercubic_2
1013     args: -dm_plex_dim 4 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3 -dm_view -dm_plex_print_adj 3 \
1014           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0
1015 
1016   test:
1017     suffix: hypercubic_2_par
1018     requires: !quad
1019     nsize: 16
1020     args: -dm_plex_dim 4 -dm_plex_shape hypercubic -dm_plex_box_faces 4,4,4,4 -dm_view -dm_plex_print_adj 3 -final_diagnostics 0 \
1021           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf
1022 
1023   test:
1024     suffix: hypercubic_3
1025     args: -dm_plex_dim 5 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3,3 -dm_view -dm_plex_print_adj 3 \
1026           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0
1027 
1028   test:
1029     suffix: hypercubic_4
1030     args: -dm_plex_dim 6 -dm_plex_shape hypercubic -dm_plex_box_faces 3,3,3,3,3,3 -dm_view -dm_plex_print_adj 3 \
1031           -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces -dm_plex_check_pointsf -final_diagnostics 0
1032 
1033   test:
1034     suffix: crisscross
1035     args: -dm_plex_box_crisscross -dm_plex_box_faces 4,8 -dm_plex_check_all -final_diagnostics -dm_view ::ascii_info_detail -dm_plex_box_lower -1,-2 -dm_plex_box_upper 1,2 -dm_plex_box_bd {{none,none periodic,none none,periodic periodic,periodic}separate output}
1036 
1037 TEST*/
1038