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