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