xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision db2b9530cea7203cdddcdfcaf19eada576ef3459)
1 static char help[] = "Tests various DMPlex routines to construct, refine and distribute a mesh.\n\n";
2 
3 #include <petscdmplex.h>
4 #include <petscdmplextransform.h>
5 #include <petscsf.h>
6 
7 enum {STAGE_LOAD, STAGE_DISTRIBUTE, STAGE_REFINE, STAGE_OVERLAP};
8 
9 typedef struct {
10   PetscLogEvent createMeshEvent;
11   PetscLogStage stages[4];
12   /* Domain and mesh definition */
13   PetscInt      dim;                             /* The topological mesh dimension */
14   PetscInt      overlap;                         /* The cell overlap to use during partitioning */
15   PetscBool     testp4est[2];
16   PetscBool     redistribute;
17   PetscBool     final_ref;                       /* Run refinement at the end */
18   PetscBool     final_diagnostics;               /* Run diagnostics on the final mesh */
19 } AppCtx;
20 
21 PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
22 {
23   PetscErrorCode ierr;
24 
25   PetscFunctionBegin;
26   options->dim               = 2;
27   options->overlap           = 0;
28   options->testp4est[0]      = PETSC_FALSE;
29   options->testp4est[1]      = PETSC_FALSE;
30   options->redistribute      = PETSC_FALSE;
31   options->final_ref         = PETSC_FALSE;
32   options->final_diagnostics = PETSC_TRUE;
33 
34   ierr = PetscOptionsBegin(comm, "", "Meshing Problem Options", "DMPLEX");CHKERRQ(ierr);
35   ierr = PetscOptionsRangeInt("-dim", "The topological mesh dimension", "ex1.c", options->dim, &options->dim, NULL,1,3);CHKERRQ(ierr);
36   ierr = PetscOptionsBoundedInt("-overlap", "The cell overlap for partitioning", "ex1.c", options->overlap, &options->overlap, NULL,0);CHKERRQ(ierr);
37   ierr = PetscOptionsBool("-test_p4est_seq", "Test p4est with sequential base DM", "ex1.c", options->testp4est[0], &options->testp4est[0], NULL);CHKERRQ(ierr);
38   ierr = PetscOptionsBool("-test_p4est_par", "Test p4est with parallel base DM", "ex1.c", options->testp4est[1], &options->testp4est[1], NULL);CHKERRQ(ierr);
39   ierr = PetscOptionsBool("-test_redistribute", "Test redistribution", "ex1.c", options->redistribute, &options->redistribute, NULL);CHKERRQ(ierr);
40   ierr = PetscOptionsBool("-final_ref", "Run uniform refinement on the final mesh", "ex1.c", options->final_ref, &options->final_ref, NULL);CHKERRQ(ierr);
41   ierr = PetscOptionsBool("-final_diagnostics", "Run diagnostics on the final mesh", "ex1.c", options->final_diagnostics, &options->final_diagnostics, NULL);CHKERRQ(ierr);
42   ierr = PetscOptionsEnd();CHKERRQ(ierr);
43 
44   ierr = PetscLogEventRegister("CreateMesh", DM_CLASSID, &options->createMeshEvent);CHKERRQ(ierr);
45   ierr = PetscLogStageRegister("MeshLoad",       &options->stages[STAGE_LOAD]);CHKERRQ(ierr);
46   ierr = PetscLogStageRegister("MeshDistribute", &options->stages[STAGE_DISTRIBUTE]);CHKERRQ(ierr);
47   ierr = PetscLogStageRegister("MeshRefine",     &options->stages[STAGE_REFINE]);CHKERRQ(ierr);
48   ierr = PetscLogStageRegister("MeshOverlap",    &options->stages[STAGE_OVERLAP]);CHKERRQ(ierr);
49   PetscFunctionReturn(0);
50 }
51 
52 PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
53 {
54   PetscInt       dim           = user->dim;
55   PetscBool      testp4est_seq = user->testp4est[0];
56   PetscBool      testp4est_par = user->testp4est[1];
57   PetscMPIInt    rank, size;
58   PetscBool      periodic;
59   PetscErrorCode ierr;
60 
61   PetscFunctionBegin;
62   ierr = PetscLogEventBegin(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);
63   ierr = MPI_Comm_rank(comm, &rank);CHKERRMPI(ierr);
64   ierr = MPI_Comm_size(comm, &size);CHKERRMPI(ierr);
65   ierr = PetscLogStagePush(user->stages[STAGE_LOAD]);CHKERRQ(ierr);
66   ierr = DMCreate(comm, dm);CHKERRQ(ierr);
67   ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr);
68   ierr = DMPlexDistributeSetDefault(*dm, PETSC_FALSE);CHKERRQ(ierr);
69   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
70 
71   /* For topologically periodic meshes, we first localize coordinates,
72      and then remove any information related with the
73      automatic computation of localized vertices.
74      This way, refinement operations and conversions to p4est
75      will preserve the shape of the domain in physical space */
76   ierr = DMLocalizeCoordinates(*dm);CHKERRQ(ierr);
77   ierr = DMGetPeriodicity(*dm, &periodic, NULL, NULL, NULL);CHKERRQ(ierr);
78   if (periodic) {ierr = DMSetPeriodicity(*dm, PETSC_TRUE, NULL, NULL, NULL);CHKERRQ(ierr);}
79 
80   ierr = DMViewFromOptions(*dm,NULL,"-init_dm_view");CHKERRQ(ierr);
81   ierr = DMGetDimension(*dm, &dim);CHKERRQ(ierr);
82 
83   if (testp4est_seq) {
84 #if defined(PETSC_HAVE_P4EST)
85     DM dmConv = NULL;
86 
87     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
88     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
89     ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
90     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
91     ierr = DMPlexCheckPointSF(*dm);CHKERRQ(ierr);
92     ierr = DMPlexCheckInterfaceCones(*dm);CHKERRQ(ierr);
93     ierr = DMPlexSetRefinementUniform(*dm, PETSC_TRUE);CHKERRQ(ierr);
94     ierr = DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX);CHKERRQ(ierr);
95     ierr = DMRefine(*dm, PETSC_COMM_WORLD, &dmConv);CHKERRQ(ierr);
96     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
97     if (dmConv) {
98       ierr = DMDestroy(dm);CHKERRQ(ierr);
99       *dm  = dmConv;
100     }
101     ierr = DMViewFromOptions(*dm,NULL,"-initref_dm_view");CHKERRQ(ierr);
102     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
103     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
104     ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
105     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
106     ierr = DMPlexCheckPointSF(*dm);CHKERRQ(ierr);
107     ierr = DMPlexCheckInterfaceCones(*dm);CHKERRQ(ierr);
108 
109     ierr = DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv);CHKERRQ(ierr);
110     if (dmConv) {
111       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_1_");CHKERRQ(ierr);
112       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
113       ierr = DMDestroy(dm);CHKERRQ(ierr);
114       *dm  = dmConv;
115     }
116     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_1_");CHKERRQ(ierr);
117     ierr = DMSetUp(*dm);CHKERRQ(ierr);
118     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
119     ierr = DMConvert(*dm,DMPLEX,&dmConv);CHKERRQ(ierr);
120     if (dmConv) {
121       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_2_");CHKERRQ(ierr);
122       ierr = DMPlexDistributeSetDefault(dmConv, PETSC_FALSE);CHKERRQ(ierr);
123       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
124       ierr = DMDestroy(dm);CHKERRQ(ierr);
125       *dm  = dmConv;
126     }
127     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_2_");CHKERRQ(ierr);
128     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
129     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
130 #else
131     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
132 #endif
133   }
134 
135   ierr = PetscLogStagePop();CHKERRQ(ierr);
136   if (!testp4est_seq) {
137     ierr = PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]);CHKERRQ(ierr);
138     ierr = DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view");CHKERRQ(ierr);
139     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "dist_");CHKERRQ(ierr);
140     ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
141     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
142     ierr = PetscLogStagePop();CHKERRQ(ierr);
143     ierr = DMViewFromOptions(*dm, NULL, "-distributed_dm_view");CHKERRQ(ierr);
144   }
145   ierr = PetscLogStagePush(user->stages[STAGE_REFINE]);CHKERRQ(ierr);
146   ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "ref_");CHKERRQ(ierr);
147   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
148   ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
149   ierr = PetscLogStagePop();CHKERRQ(ierr);
150 
151   if (testp4est_par) {
152 #if defined(PETSC_HAVE_P4EST)
153     DM dmConv = NULL;
154 
155     ierr = DMViewFromOptions(*dm, NULL, "-dm_tobox_view");CHKERRQ(ierr);
156     ierr = DMPlexSetRefinementUniform(*dm, PETSC_TRUE);CHKERRQ(ierr);
157     ierr = DMPlexSetTransformType(*dm, DMPLEXREFINETOBOX);CHKERRQ(ierr);
158     ierr = DMRefine(*dm, PETSC_COMM_WORLD, &dmConv);CHKERRQ(ierr);
159     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
160     if (dmConv) {
161       ierr = DMDestroy(dm);CHKERRQ(ierr);
162       *dm  = dmConv;
163     }
164     ierr = DMViewFromOptions(*dm, NULL, "-dm_tobox_view");CHKERRQ(ierr);
165     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
166     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
167     ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
168     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
169     ierr = DMPlexCheckPointSF(*dm);CHKERRQ(ierr);
170     ierr = DMPlexCheckInterfaceCones(*dm);CHKERRQ(ierr);
171 
172     ierr = DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv);CHKERRQ(ierr);
173     if (dmConv) {
174       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_1_");CHKERRQ(ierr);
175       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
176       ierr = DMDestroy(dm);CHKERRQ(ierr);
177       *dm  = dmConv;
178     }
179     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_1_");CHKERRQ(ierr);
180     ierr = DMSetUp(*dm);CHKERRQ(ierr);
181     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
182     ierr = DMConvert(*dm, DMPLEX, &dmConv);CHKERRQ(ierr);
183     if (dmConv) {
184       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_2_");CHKERRQ(ierr);
185       ierr = DMPlexDistributeSetDefault(dmConv, PETSC_FALSE);CHKERRQ(ierr);
186       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
187       ierr = DMDestroy(dm);CHKERRQ(ierr);
188       *dm  = dmConv;
189     }
190     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_2_");CHKERRQ(ierr);
191     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
192     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
193 #else
194     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
195 #endif
196   }
197 
198   /* test redistribution of an already distributed mesh */
199   if (user->redistribute) {
200     DM       distributedMesh;
201     PetscSF  sf;
202     PetscInt nranks;
203 
204     ierr = DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view");CHKERRQ(ierr);
205     ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);
206     if (distributedMesh) {
207       ierr = DMGetPointSF(distributedMesh, &sf);CHKERRQ(ierr);
208       ierr = PetscSFSetUp(sf);CHKERRQ(ierr);
209       ierr = DMGetNeighbors(distributedMesh, &nranks, NULL);CHKERRQ(ierr);
210       ierr = MPI_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm));CHKERRMPI(ierr);
211       ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %D\n", nranks);CHKERRQ(ierr);
212       ierr = DMDestroy(dm);CHKERRQ(ierr);
213       *dm  = distributedMesh;
214     }
215     ierr = DMViewFromOptions(*dm, NULL, "-dm_post_redist_view");CHKERRQ(ierr);
216   }
217 
218   if (user->overlap) {
219     DM overlapMesh = NULL;
220 
221     /* Add the overlap to refined mesh */
222     ierr = PetscLogStagePush(user->stages[STAGE_OVERLAP]);CHKERRQ(ierr);
223     ierr = DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view");CHKERRQ(ierr);
224     ierr = DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh);CHKERRQ(ierr);
225     if (overlapMesh) {
226       PetscInt overlap;
227       ierr = DMPlexGetOverlap(overlapMesh, &overlap);CHKERRQ(ierr);
228       ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %D\n", overlap);CHKERRQ(ierr);
229       ierr = DMDestroy(dm);CHKERRQ(ierr);
230       *dm = overlapMesh;
231     }
232     ierr = DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view");CHKERRQ(ierr);
233     ierr = PetscLogStagePop();CHKERRQ(ierr);
234   }
235   if (user->final_ref) {
236     DM refinedMesh = NULL;
237 
238     ierr = DMPlexSetRefinementUniform(*dm, PETSC_TRUE);CHKERRQ(ierr);
239     ierr = DMRefine(*dm, comm, &refinedMesh);CHKERRQ(ierr);
240     if (refinedMesh) {
241       ierr = DMDestroy(dm);CHKERRQ(ierr);
242       *dm  = refinedMesh;
243     }
244   }
245 
246   ierr = PetscObjectSetName((PetscObject) *dm, "Generated Mesh");CHKERRQ(ierr);
247   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
248   if (user->final_diagnostics) {
249     DMPlexInterpolatedFlag interpolated;
250     PetscInt  dim, depth;
251 
252     ierr = DMGetDimension(*dm, &dim);CHKERRQ(ierr);
253     ierr = DMPlexGetDepth(*dm, &depth);CHKERRQ(ierr);
254     ierr = DMPlexIsInterpolatedCollective(*dm, &interpolated);CHKERRQ(ierr);
255 
256     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
257     if (interpolated == DMPLEX_INTERPOLATED_FULL) {
258       ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
259     }
260     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
261     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
262   }
263   ierr = PetscLogEventEnd(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);
264   PetscFunctionReturn(0);
265 }
266 
267 int main(int argc, char **argv)
268 {
269   DM             dm;
270   AppCtx         user;
271   PetscErrorCode ierr;
272 
273   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
274   ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);
275   ierr = CreateMesh(PETSC_COMM_WORLD, &user, &dm);CHKERRQ(ierr);
276   ierr = DMDestroy(&dm);CHKERRQ(ierr);
277   ierr = PetscFinalize();
278   return ierr;
279 }
280 
281 /*TEST
282 
283   # CTetGen 0-1
284   test:
285     suffix: 0
286     requires: ctetgen
287     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
288   test:
289     suffix: 1
290     requires: ctetgen
291     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
292 
293   # 2D LaTex and ASCII output 2-9
294   test:
295     suffix: 2
296     requires: triangle
297     args: -dm_plex_interpolate 0 -dm_view ascii::ascii_latex
298   test:
299     suffix: 3
300     requires: triangle
301     args: -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
302   test:
303     suffix: 4
304     requires: triangle
305     nsize: 2
306     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_info_detail
307   test:
308     suffix: 5
309     requires: triangle
310     nsize: 2
311     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
312   test:
313     suffix: 6
314     args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_view ascii::ascii_info_detail
315   test:
316     suffix: 7
317     args: -dm_coord_space 0 -dm_plex_simplex 0 -ref_dm_refine 1 -dm_view ascii::ascii_info_detail
318   test:
319     suffix: 8
320     nsize: 2
321     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dm_view ascii::ascii_latex
322 
323   # 1D ASCII output
324   testset:
325     args: -dm_coord_space 0 -dm_plex_dim 1 -dm_view ascii::ascii_info_detail -dm_plex_check_all
326     test:
327       suffix: 1d_0
328       args:
329     test:
330       suffix: 1d_1
331       args: -ref_dm_refine 2
332     test:
333       suffix: 1d_2
334       args: -dm_plex_box_faces 5 -dm_plex_box_bd periodic
335 
336   # Parallel refinement tests with overlap
337   test:
338     suffix: refine_overlap_1d
339     nsize: 2
340     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
341   test:
342     suffix: refine_overlap_2d
343     requires: triangle
344     nsize: {{2 8}separate output}
345     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
346 
347   # Parallel extrusion tests
348   test:
349     suffix: spheresurface_extruded
350     nsize : 4
351     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dist_dm_distribute -petscpartitioner_type simple \
352           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
353 
354   test:
355     suffix: spheresurface_extruded_symmetric
356     nsize : 4
357     args: -dm_coord_space 0 -dm_plex_shape sphere -dm_extrude 3 -dm_plex_transform_extrude_symmetric -dist_dm_distribute -petscpartitioner_type simple \
358           -dm_plex_check_all -dm_view ::ascii_info_detail -dm_plex_view_coord_system spherical
359 
360   # Parallel simple partitioner tests
361   test:
362     suffix: part_simple_0
363     requires: triangle
364     nsize: 2
365     args: -dm_coord_space 0 -dm_plex_interpolate 0 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
366   test:
367     suffix: part_simple_1
368     requires: triangle
369     nsize: 8
370     args: -dm_coord_space 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type simple -dist_partition_view -dm_view ascii::ascii_info_detail
371 
372   # Parallel partitioner tests
373   test:
374     suffix: part_parmetis_0
375     requires: parmetis
376     nsize: 2
377     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
378   test:
379     suffix: part_ptscotch_0
380     requires: ptscotch
381     nsize: 2
382     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
383   test:
384     suffix: part_ptscotch_1
385     requires: ptscotch
386     nsize: 8
387     args: -dm_plex_simplex 0 -ref_dm_refine 1 -dist_dm_distribute -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
388 
389   # CGNS reader tests 10-11 (need to find smaller test meshes)
390   test:
391     suffix: cgns_0
392     requires: cgns
393     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/tut21.cgns -dm_view
394 
395   # Gmsh mesh reader tests
396   testset:
397     args: -dm_coord_space 0 -dm_view
398 
399     test:
400       suffix: gmsh_0
401       requires: !single
402       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
403     test:
404       suffix: gmsh_1
405       requires: !single
406       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh
407     test:
408       suffix: gmsh_2
409       requires: !single
410       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh
411     test:
412       suffix: gmsh_3
413       nsize: 3
414       requires: !single
415       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -dist_dm_distribute -petscpartitioner_type simple
416     test:
417       suffix: gmsh_4
418       nsize: 3
419       requires: !single
420       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dist_dm_distribute -petscpartitioner_type simple
421     test:
422       suffix: gmsh_5
423       requires: !single
424       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh
425     # TODO: it seems the mesh is not a valid gmsh (inverted cell)
426     test:
427       suffix: gmsh_6
428       requires: !single
429       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -final_diagnostics 0
430     test:
431       suffix: gmsh_7
432       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
433     test:
434       suffix: gmsh_8
435       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -dm_plex_check_all
436   testset:
437     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
438     test:
439       suffix: gmsh_9
440     test:
441       suffix: gmsh_9_periodic_0
442       args: -dm_plex_gmsh_periodic 0
443   testset:
444     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
445     test:
446       suffix: gmsh_10
447     test:
448       suffix: gmsh_10_periodic_0
449       args: -dm_plex_gmsh_periodic 0
450   testset:
451     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
452     test:
453       suffix: gmsh_11
454     test:
455       suffix: gmsh_11_periodic_0
456       args: -dm_plex_gmsh_periodic 0
457   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
458   test:
459     suffix: gmsh_12
460     nsize: 4
461     requires: !single mpiio
462     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
463   test:
464     suffix: gmsh_13_hybs2t
465     nsize: 4
466     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
467   test:
468     suffix: gmsh_14_ext
469     requires: !single
470     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
471   test:
472     suffix: gmsh_14_ext_s2t
473     requires: !single
474     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
475   test:
476     suffix: gmsh_15_hyb3d
477     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -dm_plex_check_all
478   test:
479     suffix: gmsh_15_hyb3d_vtk
480     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -dm_plex_gmsh_hybrid -dm_plex_check_all
481   test:
482     suffix: gmsh_15_hyb3d_s2t
483     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
484   test:
485     suffix: gmsh_16_spheresurface
486     nsize : 4
487     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
488   test:
489     suffix: gmsh_16_spheresurface_s2t
490     nsize : 4
491     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
492   test:
493     suffix: gmsh_16_spheresurface_extruded
494     nsize : 4
495     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
496   test:
497     suffix: gmsh_16_spheresurface_extruded_s2t
498     nsize : 4
499     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
500   test:
501     suffix: gmsh_17_hyb3d_interp_ascii
502     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -dm_plex_check_all
503   test:
504     suffix: exodus_17_hyb3d_interp_ascii
505     requires: exodusii
506     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -dm_plex_check_all
507 
508   # Legacy Gmsh v22/v40 ascii/binary reader tests
509   testset:
510     output_file: output/ex1_gmsh_3d_legacy.out
511     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
512     test:
513       suffix: gmsh_3d_ascii_v22
514       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
515     test:
516       suffix: gmsh_3d_ascii_v40
517       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
518     test:
519       suffix: gmsh_3d_binary_v22
520       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
521     test:
522       suffix: gmsh_3d_binary_v40
523       requires: long64
524       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
525 
526   # Gmsh v41 ascii/binary reader tests
527   testset: # 32bit mesh, sequential
528     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
529     output_file: output/ex1_gmsh_3d_32.out
530     test:
531       suffix: gmsh_3d_ascii_v41_32
532       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
533     test:
534       suffix: gmsh_3d_binary_v41_32
535       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
536     test:
537       suffix: gmsh_3d_binary_v41_32_mpiio
538       requires: defined(PETSC_HAVE_MPIIO)
539       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
540   test:
541     suffix: gmsh_quad_8node
542     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-qua-8node.msh \
543           -dm_view -dm_plex_check_all
544   test:
545     suffix: gmsh_hex_20node
546     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-hex-20node.msh \
547           -dm_view -dm_plex_check_all
548   testset:  # 32bit mesh, parallel
549     args: -dm_coord_space 0 -dist_dm_distribute -petscpartitioner_type simple -dm_view ::ascii_info_detail -dm_plex_check_all
550     nsize: 2
551     output_file: output/ex1_gmsh_3d_32_np2.out
552     test:
553       suffix: gmsh_3d_ascii_v41_32_np2
554       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
555     test:
556       suffix: gmsh_3d_binary_v41_32_np2
557       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
558     test:
559       suffix: gmsh_3d_binary_v41_32_np2_mpiio
560       requires: defined(PETSC_HAVE_MPIIO)
561       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
562   testset: # 64bit mesh, sequential
563     args: -dm_coord_space 0 -dm_view ::ascii_info_detail -dm_plex_check_all
564     output_file: output/ex1_gmsh_3d_64.out
565     test:
566       suffix: gmsh_3d_ascii_v41_64
567       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
568     test:
569       suffix: gmsh_3d_binary_v41_64
570       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
571     test:
572       suffix: gmsh_3d_binary_v41_64_mpiio
573       requires: defined(PETSC_HAVE_MPIIO)
574       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
575   testset:  # 64bit mesh, parallel
576     args: -dm_coord_space 0 -dist_dm_distribute -petscpartitioner_type simple -dm_view ::ascii_info_detail -dm_plex_check_all
577     nsize: 2
578     output_file: output/ex1_gmsh_3d_64_np2.out
579     test:
580       suffix: gmsh_3d_ascii_v41_64_np2
581       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
582     test:
583       suffix: gmsh_3d_binary_v41_64_np2
584       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
585     test:
586       suffix: gmsh_3d_binary_v41_64_np2_mpiio
587       requires: defined(PETSC_HAVE_MPIIO)
588       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
589 
590   # Fluent mesh reader tests
591   # TODO: Geometry checks fail
592   test:
593     suffix: fluent_0
594     requires: !complex
595     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dm_view -final_diagnostics 0
596   test:
597     suffix: fluent_1
598     nsize: 3
599     requires: !complex
600     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -dist_dm_distribute -petscpartitioner_type simple -dm_view -final_diagnostics 0
601   test:
602     suffix: fluent_2
603     requires: !complex
604     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -dm_view -final_diagnostics 0
605   test:
606     suffix: fluent_3
607     requires: !complex
608     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
609     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -dm_view -final_diagnostics 0
610 
611   # Med mesh reader tests, including parallel file reads
612   test:
613     suffix: med_0
614     requires: med
615     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dm_view
616   test:
617     suffix: med_1
618     requires: med
619     nsize: 3
620     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
621   test:
622     suffix: med_2
623     requires: med
624     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dm_view
625   test:
626     suffix: med_3
627     requires: med
628     TODO: MED
629     nsize: 3
630     args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -dist_dm_distribute -petscpartitioner_type simple -dm_view
631 
632   # Test shape quality
633   test:
634     suffix: test_shape
635     requires: ctetgen
636     args: -dm_plex_dim 3 -dim 3 -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
637 
638   # Test simplex to tensor conversion
639   test:
640     suffix: s2t2
641     requires: triangle
642     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
643 
644   test:
645     suffix: s2t3
646     requires: ctetgen
647     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
648 
649   # Test cylinder
650   testset:
651     args: -dm_plex_shape cylinder -dm_plex_check_all -dm_view
652     test:
653       suffix: cylinder
654       args: -ref_dm_refine 1
655     test:
656       suffix: cylinder_per
657       args: -dm_plex_cylinder_bd periodic -ref_dm_refine 1 -ref_dm_refine_remap 0
658     test:
659       suffix: cylinder_wedge
660       args: -dm_coord_space 0 -dm_plex_interpolate 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
661     test:
662       suffix: cylinder_wedge_int
663       output_file: output/ex1_cylinder_wedge.out
664       args: -dm_coord_space 0 -dm_plex_cell tensor_triangular_prism -dm_view vtk:
665 
666   test:
667     suffix: box_2d
668     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
669 
670   test:
671     suffix: box_2d_per
672     args: -dm_plex_simplex 0 -ref_dm_refine 2 -dm_plex_check_all -dm_view
673 
674   test:
675     suffix: box_2d_per_unint
676     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
677 
678   test:
679     suffix: box_3d
680     args: -dm_plex_dim 3 -dim 3 -dm_plex_simplex 0 -ref_dm_refine 3 -dm_plex_check_all -dm_view
681 
682   test:
683     requires: triangle
684     suffix: box_wedge
685     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
686 
687   testset:
688     requires: triangle
689     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
690     test:
691       suffix: box_wedge_s2t
692     test:
693       nsize: 3
694       args: -dist_dm_distribute -petscpartitioner_type simple
695       suffix: box_wedge_s2t_parallel
696 
697   # Test GLVis output
698   testset:
699     args: -dm_coord_space 0 -dm_plex_interpolate 0
700     test:
701       suffix: glvis_2d_tet
702       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
703     test:
704       suffix: glvis_2d_tet_per
705       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
706     test:
707       suffix: glvis_3d_tet
708       args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
709   testset:
710     args: -dm_coord_space 0
711     test:
712       suffix: glvis_2d_tet_per_mfem
713       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:
714     test:
715       suffix: glvis_2d_quad
716       args: -dm_plex_simplex 0 -dm_plex_box_faces 3,3 -dm_view glvis:
717     test:
718       suffix: glvis_2d_quad_per
719       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
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_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_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 TEST*/
935