xref: /petsc/src/dm/impls/plex/tests/ex1.c (revision c06a8e02ff6b77f4014c18ceca68570eef2eedb9)
1 static char help[] = "Tests various DMPlex routines to construct, refine and distribute a mesh.\n\n";
2 
3 #include <petscdmplex.h>
4 #include <petscsf.h>
5 
6 typedef enum {BOX, CYLINDER, SPHERE, BALL} DomainShape;
7 enum {STAGE_LOAD, STAGE_DISTRIBUTE, STAGE_REFINE, STAGE_OVERLAP};
8 
9 typedef struct {
10   DM            dm;                /* REQUIRED in order to use SNES evaluation functions */
11   PetscInt      debug;             /* The debugging level */
12   PetscLogEvent createMeshEvent;
13   PetscLogStage stages[4];
14   /* Domain and mesh definition */
15   PetscInt      dim;                             /* The topological mesh dimension */
16   PetscBool     interpolate;                     /* Generate intermediate mesh elements */
17   PetscReal     refinementLimit;                 /* The largest allowable cell volume */
18   PetscBool     cellSimplex;                     /* Use simplices or hexes */
19   PetscBool     cellWedge;                       /* Use wedges */
20   DomainShape   domainShape;                     /* Shape of the region to be meshed */
21   PetscInt      *domainBoxSizes;                 /* Sizes of the box mesh */
22   PetscReal     *domainBoxL,*domainBoxU;         /* Lower left, upper right corner of the box mesh */
23   DMBoundaryType periodicity[3];                 /* The domain periodicity */
24   char          filename[PETSC_MAX_PATH_LEN];    /* Import mesh from file */
25   char          bdfilename[PETSC_MAX_PATH_LEN];  /* Import mesh boundary from file */
26   char          extfilename[PETSC_MAX_PATH_LEN]; /* Import 2D mesh to be extruded from file */
27   PetscBool     testPartition;                   /* Use a fixed partitioning for testing */
28   PetscInt      overlap;                         /* The cell overlap to use during partitioning */
29   PetscReal     extrude_thickness;               /* Thickness of extrusion */
30   PetscInt      extrude_layers;                  /* Layers to be extruded */
31   PetscBool     testp4est[2];
32   PetscBool     redistribute;
33   PetscBool     final_ref;                       /* Run refinement at the end */
34   PetscBool     final_diagnostics;               /* Run diagnostics on the final mesh */
35 } AppCtx;
36 
37 PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
38 {
39   const char       *dShapes[4] = {"box", "cylinder", "sphere", "ball"};
40   PetscInt         shape, bd, n;
41   static PetscInt  domainBoxSizes[3] = {1,1,1};
42   static PetscReal domainBoxL[3] = {0.,0.,0.};
43   static PetscReal domainBoxU[3] = {1.,1.,1.};
44   PetscBool        flg;
45   PetscErrorCode   ierr;
46 
47   PetscFunctionBegin;
48   options->debug             = 0;
49   options->dim               = 2;
50   options->interpolate       = PETSC_FALSE;
51   options->refinementLimit   = 0.0;
52   options->cellSimplex       = PETSC_TRUE;
53   options->cellWedge         = PETSC_FALSE;
54   options->domainShape       = BOX;
55   options->domainBoxSizes    = NULL;
56   options->domainBoxL        = NULL;
57   options->domainBoxU        = NULL;
58   options->periodicity[0]    = DM_BOUNDARY_NONE;
59   options->periodicity[1]    = DM_BOUNDARY_NONE;
60   options->periodicity[2]    = DM_BOUNDARY_NONE;
61   options->filename[0]       = '\0';
62   options->bdfilename[0]     = '\0';
63   options->extfilename[0]    = '\0';
64   options->testPartition     = PETSC_FALSE;
65   options->overlap           = 0;
66   options->extrude_layers    = 2;
67   options->extrude_thickness = 0.1;
68   options->testp4est[0]      = PETSC_FALSE;
69   options->testp4est[1]      = PETSC_FALSE;
70   options->redistribute      = PETSC_FALSE;
71   options->final_ref         = PETSC_FALSE;
72   options->final_diagnostics = PETSC_TRUE;
73 
74   ierr = PetscOptionsBegin(comm, "", "Meshing Problem Options", "DMPLEX");CHKERRQ(ierr);
75   ierr = PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0);CHKERRQ(ierr);
76   ierr = PetscOptionsRangeInt("-dim", "The topological mesh dimension", "ex1.c", options->dim, &options->dim, NULL,1,3);CHKERRQ(ierr);
77   ierr = PetscOptionsBool("-interpolate", "Generate intermediate mesh elements", "ex1.c", options->interpolate, &options->interpolate, NULL);CHKERRQ(ierr);
78   ierr = PetscOptionsReal("-refinement_limit", "The largest allowable cell volume", "ex1.c", options->refinementLimit, &options->refinementLimit, NULL);CHKERRQ(ierr);
79   ierr = PetscOptionsBool("-cell_simplex", "Use simplices if true, otherwise hexes", "ex1.c", options->cellSimplex, &options->cellSimplex, NULL);CHKERRQ(ierr);
80   ierr = PetscOptionsBool("-cell_wedge", "Use wedges if true", "ex1.c", options->cellWedge, &options->cellWedge, NULL);CHKERRQ(ierr);
81   shape = options->domainShape;
82   ierr = PetscOptionsEList("-domain_shape","The shape of the domain","ex1.c", dShapes, 4, dShapes[options->domainShape], &shape, NULL);CHKERRQ(ierr);
83   options->domainShape = (DomainShape) shape;
84   ierr = PetscOptionsIntArray("-domain_box_sizes","The sizes of the box domain","ex1.c", domainBoxSizes, (n=3,&n), &flg);CHKERRQ(ierr);
85   if (flg) { options->domainShape = BOX; options->domainBoxSizes = domainBoxSizes;}
86   ierr = PetscOptionsRealArray("-domain_box_ll","Coordinates of the lower left corner of the box domain","ex1.c", domainBoxL, (n=3,&n), &flg);CHKERRQ(ierr);
87   if (flg) { options->domainBoxL = domainBoxL;}
88   ierr = PetscOptionsRealArray("-domain_box_ur","Coordinates of the upper right corner of the box domain","ex1.c", domainBoxU, (n=3,&n), &flg);CHKERRQ(ierr);
89   if (flg) { options->domainBoxU = domainBoxU;}
90   bd = options->periodicity[0];
91   ierr = PetscOptionsEList("-x_periodicity", "The x-boundary periodicity", "ex1.c", DMBoundaryTypes, 5, DMBoundaryTypes[options->periodicity[0]], &bd, NULL);CHKERRQ(ierr);
92   options->periodicity[0] = (DMBoundaryType) bd;
93   bd = options->periodicity[1];
94   ierr = PetscOptionsEList("-y_periodicity", "The y-boundary periodicity", "ex1.c", DMBoundaryTypes, 5, DMBoundaryTypes[options->periodicity[1]], &bd, NULL);CHKERRQ(ierr);
95   options->periodicity[1] = (DMBoundaryType) bd;
96   bd = options->periodicity[2];
97   ierr = PetscOptionsEList("-z_periodicity", "The z-boundary periodicity", "ex1.c", DMBoundaryTypes, 5, DMBoundaryTypes[options->periodicity[2]], &bd, NULL);CHKERRQ(ierr);
98   options->periodicity[2] = (DMBoundaryType) bd;
99   ierr = PetscOptionsString("-filename", "The mesh file", "ex1.c", options->filename, options->filename, PETSC_MAX_PATH_LEN, NULL);CHKERRQ(ierr);
100   ierr = PetscOptionsString("-bd_filename", "The mesh boundary file", "ex1.c", options->bdfilename, options->bdfilename, PETSC_MAX_PATH_LEN, NULL);CHKERRQ(ierr);
101   ierr = PetscOptionsString("-ext_filename", "The 2D mesh file to be extruded", "ex1.c", options->extfilename, options->extfilename, PETSC_MAX_PATH_LEN, NULL);CHKERRQ(ierr);
102   ierr = PetscOptionsBoundedInt("-ext_layers", "The number of layers to extrude", "ex1.c", options->extrude_layers, &options->extrude_layers, NULL,0);CHKERRQ(ierr);
103   ierr = PetscOptionsReal("-ext_thickness", "The thickness of the layer to be extruded", "ex1.c", options->extrude_thickness, &options->extrude_thickness, NULL);CHKERRQ(ierr);
104   ierr = PetscOptionsBool("-test_partition", "Use a fixed partition for testing", "ex1.c", options->testPartition, &options->testPartition, NULL);CHKERRQ(ierr);
105   ierr = PetscOptionsBoundedInt("-overlap", "The cell overlap for partitioning", "ex1.c", options->overlap, &options->overlap, NULL,0);CHKERRQ(ierr);
106   ierr = PetscOptionsBool("-test_p4est_seq", "Test p4est with sequential base DM", "ex1.c", options->testp4est[0], &options->testp4est[0], NULL);CHKERRQ(ierr);
107   ierr = PetscOptionsBool("-test_p4est_par", "Test p4est with parallel base DM", "ex1.c", options->testp4est[1], &options->testp4est[1], NULL);CHKERRQ(ierr);
108   ierr = PetscOptionsBool("-test_redistribute", "Test redistribution", "ex1.c", options->redistribute, &options->redistribute, NULL);CHKERRQ(ierr);
109   ierr = PetscOptionsBool("-final_ref", "Run uniform refinement on the final mesh", "ex1.c", options->final_ref, &options->final_ref, NULL);CHKERRQ(ierr);
110   ierr = PetscOptionsBool("-final_diagnostics", "Run diagnostics on the final mesh", "ex1.c", options->final_diagnostics, &options->final_diagnostics, NULL);CHKERRQ(ierr);
111   ierr = PetscOptionsEnd();
112 
113   ierr = PetscLogEventRegister("CreateMesh", DM_CLASSID, &options->createMeshEvent);CHKERRQ(ierr);
114   ierr = PetscLogStageRegister("MeshLoad",       &options->stages[STAGE_LOAD]);CHKERRQ(ierr);
115   ierr = PetscLogStageRegister("MeshDistribute", &options->stages[STAGE_DISTRIBUTE]);CHKERRQ(ierr);
116   ierr = PetscLogStageRegister("MeshRefine",     &options->stages[STAGE_REFINE]);CHKERRQ(ierr);
117   ierr = PetscLogStageRegister("MeshOverlap",    &options->stages[STAGE_OVERLAP]);CHKERRQ(ierr);
118   PetscFunctionReturn(0);
119 }
120 
121 /* Overload time to be the sphere radius */
122 static void snapToSphere(PetscInt dim, PetscInt Nf, PetscInt NfAux,
123                          const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
124                          const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
125                          PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[])
126 {
127   PetscReal norm2 = 0.0, fac;
128   PetscInt  n = uOff[1] - uOff[0], d;
129 
130   for (d = 0; d < n; ++d) norm2 += PetscSqr(PetscRealPart(u[d]));
131   fac = t/PetscSqrtReal(norm2);
132   for (d = 0; d < n; ++d) f0[d] = u[d]*fac;
133 }
134 
135 PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
136 {
137   PetscInt       dim                  = user->dim;
138   PetscBool      interpolate          = user->interpolate;
139   PetscReal      refinementLimit      = user->refinementLimit;
140   PetscBool      cellSimplex          = user->cellSimplex;
141   PetscBool      cellWedge            = user->cellWedge;
142   const char    *filename             = user->filename;
143   const char    *bdfilename           = user->bdfilename;
144   const char    *extfilename          = user->extfilename;
145   PetscBool      testp4est_seq        = user->testp4est[0];
146   PetscBool      testp4est_par        = user->testp4est[1];
147   PetscInt       triSizes_n2[2]       = {4, 4};
148   PetscInt       triPoints_n2[8]      = {3, 5, 6, 7, 0, 1, 2, 4};
149   PetscInt       triSizes_n8[8]       = {1, 1, 1, 1, 1, 1, 1, 1};
150   PetscInt       triPoints_n8[8]      = {0, 1, 2, 3, 4, 5, 6, 7};
151   PetscInt       quadSizes[2]         = {2, 2};
152   PetscInt       quadPoints[4]        = {2, 3, 0, 1};
153   PetscInt       gmshSizes_n3[3]      = {14, 14, 14};
154   PetscInt       gmshPoints_n3[42]    = {1, 2,  4,  5,  9, 10, 11, 15, 16, 20, 21, 27, 28, 29,
155                                          3, 8, 12, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
156                                          0, 6,  7, 13, 14, 17, 18, 19, 22, 23, 24, 25, 26, 41};
157   PetscInt       fluentSizes_n3[3]    = {50, 50, 50};
158   PetscInt       fluentPoints_n3[150] = { 5,  6,  7,  8, 12, 14, 16,  34,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  48,  50,  51,  80,  81,  89,
159                                          91, 93, 94, 95, 96, 97, 98,  99, 100, 101, 104, 121, 122, 124, 125, 126, 127, 128, 129, 131, 133, 143, 144, 145, 147,
160                                           1,  3,  4,  9, 10, 17, 18,  19,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  35,  47,  61,  71,  72,  73,  74,
161                                          75, 76, 77, 78, 79, 86, 87,  88,  90,  92, 113, 115, 116, 117, 118, 119, 120, 123, 138, 140, 141, 142, 146, 148, 149,
162                                           0,  2, 11, 13, 15, 20, 21,  22,  23,  49,  52,  53,  54,  55,  56,  57,  58,  59,  60,  62,  63,  64,  65,  66,  67,
163                                          68, 69, 70, 82, 83, 84, 85, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 114, 130, 132, 134, 135, 136, 137, 139};
164   size_t         len, bdlen, extlen;
165   PetscMPIInt    rank, size;
166   PetscBool      periodic;
167   PetscErrorCode ierr;
168 
169   PetscFunctionBegin;
170   ierr = PetscLogEventBegin(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);
171   ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);
172   ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr);
173   ierr = PetscStrlen(filename, &len);CHKERRQ(ierr);
174   ierr = PetscStrlen(bdfilename, &bdlen);CHKERRQ(ierr);
175   ierr = PetscStrlen(extfilename, &extlen);CHKERRQ(ierr);
176   ierr = PetscLogStagePush(user->stages[STAGE_LOAD]);CHKERRQ(ierr);
177   if (len) {
178     ierr = DMPlexCreateFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
179   } else if (bdlen) {
180     DM boundary;
181 
182     ierr = DMPlexCreateFromFile(comm, bdfilename, interpolate, &boundary);CHKERRQ(ierr);
183     ierr = DMPlexGenerate(boundary, NULL, interpolate, dm);CHKERRQ(ierr);
184     ierr = DMDestroy(&boundary);CHKERRQ(ierr);
185   } else if (extlen) {
186     DM edm;
187 
188     ierr = DMPlexCreateFromFile(comm, extfilename, interpolate, &edm);CHKERRQ(ierr);
189     ierr = DMPlexExtrude(edm, user->extrude_layers, user->extrude_thickness, PETSC_TRUE, interpolate, dm);CHKERRQ(ierr);
190     ierr = DMDestroy(&edm);CHKERRQ(ierr);
191   } else {
192     switch (user->domainShape) {
193     case BOX:
194       if (cellWedge) {
195         if (dim != 3) SETERRQ1(comm, PETSC_ERR_ARG_WRONG, "Dimension must be 3 for a wedge mesh, not %D", dim);
196         ierr = DMPlexCreateWedgeBoxMesh(comm, user->domainBoxSizes, user->domainBoxL, user->domainBoxU, user->periodicity, PETSC_FALSE, interpolate, dm);CHKERRQ(ierr);
197       } else {
198         ierr = DMPlexCreateBoxMesh(comm, dim, cellSimplex, user->domainBoxSizes, user->domainBoxL, user->domainBoxU, user->periodicity, interpolate, dm);CHKERRQ(ierr);
199       }
200       break;
201     case CYLINDER:
202       if (cellSimplex) SETERRQ(comm, PETSC_ERR_ARG_WRONG, "Cannot mesh a cylinder with simplices");
203       if (dim != 3)    SETERRQ1(comm, PETSC_ERR_ARG_WRONG, "Dimension must be 3 for a cylinder mesh, not %D", dim);
204       if (cellWedge) {
205         ierr = DMPlexCreateWedgeCylinderMesh(comm, 6, interpolate, dm);CHKERRQ(ierr);
206       } else {
207         ierr = DMPlexCreateHexCylinderMesh(comm, 1, user->periodicity[2], dm);CHKERRQ(ierr);
208       }
209       break;
210     case SPHERE:
211       ierr = DMPlexCreateSphereMesh(comm, dim, cellSimplex, dm);CHKERRQ(ierr);
212       break;
213     case BALL:
214       {
215         DM       sdm;
216         PetscInt Nr = 0, r;
217 
218         ierr = DMPlexCreateSphereMesh(comm, dim-1, cellSimplex, &sdm);CHKERRQ(ierr);
219         {
220           DM       cdm;
221           PetscFE  fe;
222           PetscInt dim, dE;
223 
224           ierr = DMGetCoordinateDM(sdm, &cdm);CHKERRQ(ierr);
225           ierr = DMGetDimension(sdm, &dim);CHKERRQ(ierr);
226           ierr = DMGetCoordinateDim(sdm, &dE);CHKERRQ(ierr);
227           ierr = PetscFECreateLagrange(PETSC_COMM_SELF, dim, dE, PETSC_TRUE, 1, -1, &fe);CHKERRQ(ierr);
228           ierr = DMSetField(cdm, 0, NULL, (PetscObject) fe);CHKERRQ(ierr);
229           ierr = PetscFEDestroy(&fe);CHKERRQ(ierr);
230           ierr = DMCreateDS(cdm);CHKERRQ(ierr);
231         }
232         ierr = PetscOptionsGetInt(NULL, "bd_", "-dm_refine", &Nr, NULL);CHKERRQ(ierr);
233         for (r = 0; r < Nr; ++r) {
234           DM rdm, cdm, rcdm;
235           ierr = DMRefine(sdm, PETSC_COMM_WORLD, &rdm);CHKERRQ(ierr);
236           ierr = DMGetCoordinateDM(sdm, &cdm);CHKERRQ(ierr);
237           ierr = DMGetCoordinateDM(rdm, &rcdm);CHKERRQ(ierr);
238           ierr = DMCopyDisc(cdm, rcdm);CHKERRQ(ierr);
239           ierr = DMPlexRemapGeometry(rdm, 1.0, snapToSphere);CHKERRQ(ierr);
240           ierr = DMDestroy(&sdm);CHKERRQ(ierr);
241           sdm  = rdm;
242         }
243         ierr = DMPlexGenerate(sdm, NULL, interpolate, dm);CHKERRQ(ierr);
244         ierr = DMDestroy(&sdm);CHKERRQ(ierr);
245       }
246       break;
247     default: SETERRQ1(comm, PETSC_ERR_ARG_WRONG, "Unknown domain shape %D", user->domainShape);
248     }
249   }
250 
251   /* For topologically periodic meshes, we first localize coordinates,
252      and then remove any information related with the
253      automatic computation of localized vertices.
254      This way, refinement operations and conversions to p4est
255      will preserve the shape of the domain in physical space */
256   ierr = DMLocalizeCoordinates(*dm);CHKERRQ(ierr);
257   ierr = DMGetPeriodicity(*dm,&periodic,NULL,NULL,NULL);CHKERRQ(ierr);
258   if (periodic) {
259     ierr = DMSetPeriodicity(*dm,PETSC_TRUE,NULL,NULL,NULL);CHKERRQ(ierr);
260   }
261 
262   ierr = DMViewFromOptions(*dm,NULL,"-init_dm_view");CHKERRQ(ierr);
263   ierr = DMGetDimension(*dm,&dim);CHKERRQ(ierr);
264 
265   if (testp4est_seq) {
266 #if defined(PETSC_HAVE_P4EST)
267     DM dmConv = NULL;
268 
269     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
270     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
271     ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
272     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
273     ierr = DMPlexCheckPointSF(*dm);CHKERRQ(ierr);
274     ierr = DMPlexCheckInterfaceCones(*dm);CHKERRQ(ierr);
275     ierr = DMPlexSetRefinementUniform(*dm, PETSC_TRUE);CHKERRQ(ierr);
276     ierr = DMPlexSetCellRefinerType(*dm, DM_REFINER_TO_BOX);CHKERRQ(ierr);
277     ierr = DMRefine(*dm, PETSC_COMM_WORLD, &dmConv);CHKERRQ(ierr);
278     if (dmConv) {
279       ierr = DMDestroy(dm);CHKERRQ(ierr);
280       *dm  = dmConv;
281     }
282     ierr = DMViewFromOptions(*dm,NULL,"-initref_dm_view");CHKERRQ(ierr);
283     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
284     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
285     ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
286     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
287     ierr = DMPlexCheckPointSF(*dm);CHKERRQ(ierr);
288     ierr = DMPlexCheckInterfaceCones(*dm);CHKERRQ(ierr);
289     user->cellSimplex = PETSC_FALSE;
290 
291     ierr = DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv);CHKERRQ(ierr);
292     if (dmConv) {
293       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_1_");CHKERRQ(ierr);
294       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
295       ierr = DMDestroy(dm);CHKERRQ(ierr);
296       *dm  = dmConv;
297     }
298     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_1_");CHKERRQ(ierr);
299     ierr = DMSetUp(*dm);CHKERRQ(ierr);
300     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
301     ierr = DMConvert(*dm,DMPLEX,&dmConv);CHKERRQ(ierr);
302     if (dmConv) {
303       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_seq_2_");CHKERRQ(ierr);
304       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
305       ierr = DMDestroy(dm);CHKERRQ(ierr);
306       *dm  = dmConv;
307     }
308     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_seq_2_");CHKERRQ(ierr);
309     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
310     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
311 #else
312     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
313 #endif
314   }
315 
316   ierr = PetscLogStagePop();CHKERRQ(ierr);
317   if (!testp4est_seq) {
318     DM refinedMesh     = NULL;
319     DM distributedMesh = NULL;
320 
321     if (user->testPartition) {
322       const PetscInt  *sizes = NULL;
323       const PetscInt  *points = NULL;
324       PetscPartitioner part;
325 
326       if (!rank) {
327         if (dim == 2 && cellSimplex && size == 2) {
328            sizes = triSizes_n2; points = triPoints_n2;
329         } else if (dim == 2 && cellSimplex && size == 8) {
330           sizes = triSizes_n8; points = triPoints_n8;
331         } else if (dim == 2 && !cellSimplex && size == 2) {
332           sizes = quadSizes; points = quadPoints;
333         } else if (dim == 2 && size == 3) {
334           PetscInt Nc;
335 
336           ierr = DMPlexGetHeightStratum(*dm, 0, NULL, &Nc);CHKERRQ(ierr);
337           if (Nc == 42) { /* Gmsh 3 & 4 */
338             sizes = gmshSizes_n3; points = gmshPoints_n3;
339           } else if (Nc == 150) { /* Fluent 1 */
340             sizes = fluentSizes_n3; points = fluentPoints_n3;
341           } else if (Nc == 42) { /* Med 1 */
342           } else if (Nc == 161) { /* Med 3 */
343           }
344         }
345       }
346       ierr = DMPlexGetPartitioner(*dm, &part);CHKERRQ(ierr);
347       ierr = PetscPartitionerSetType(part, PETSCPARTITIONERSHELL);CHKERRQ(ierr);
348       ierr = PetscPartitionerShellSetPartition(part, size, sizes, points);CHKERRQ(ierr);
349     } else {
350       PetscPartitioner part;
351 
352       ierr = DMPlexGetPartitioner(*dm,&part);CHKERRQ(ierr);
353       ierr = PetscPartitionerSetFromOptions(part);CHKERRQ(ierr);
354     }
355     /* Distribute mesh over processes */
356     ierr = PetscLogStagePush(user->stages[STAGE_DISTRIBUTE]);CHKERRQ(ierr);
357     ierr = DMViewFromOptions(*dm, NULL, "-dm_pre_dist_view");CHKERRQ(ierr);
358     ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);
359     if (distributedMesh) {
360       ierr = DMDestroy(dm);CHKERRQ(ierr);
361       *dm  = distributedMesh;
362     }
363     ierr = PetscLogStagePop();CHKERRQ(ierr);
364     ierr = DMViewFromOptions(*dm, NULL, "-distributed_dm_view");CHKERRQ(ierr);
365     /* Refine mesh using a volume constraint */
366     ierr = PetscLogStagePush(user->stages[STAGE_REFINE]);CHKERRQ(ierr);
367     ierr = DMPlexSetRefinementUniform(*dm, PETSC_FALSE);CHKERRQ(ierr);
368     ierr = DMPlexSetRefinementLimit(*dm, refinementLimit);CHKERRQ(ierr);
369     ierr = DMRefine(*dm, comm, &refinedMesh);CHKERRQ(ierr);
370     if (refinedMesh) {
371       ierr = DMDestroy(dm);CHKERRQ(ierr);
372       *dm  = refinedMesh;
373     }
374     ierr = PetscLogStagePop();CHKERRQ(ierr);
375   }
376   ierr = PetscLogStagePush(user->stages[STAGE_REFINE]);CHKERRQ(ierr);
377   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
378   ierr = PetscLogStagePop();CHKERRQ(ierr);
379 
380   if (testp4est_par) {
381 #if defined(PETSC_HAVE_P4EST)
382     DM dmConv = NULL;
383 
384     ierr = DMViewFromOptions(*dm, NULL, "-dm_tobox_view");CHKERRQ(ierr);
385     ierr = DMPlexSetRefinementUniform(*dm, PETSC_TRUE);CHKERRQ(ierr);
386     ierr = DMPlexSetCellRefinerType(*dm, DM_REFINER_TO_BOX);CHKERRQ(ierr);
387     ierr = DMRefine(*dm, PETSC_COMM_WORLD, &dmConv);CHKERRQ(ierr);
388     if (dmConv) {
389       ierr = DMDestroy(dm);CHKERRQ(ierr);
390       *dm  = dmConv;
391     }
392     user->cellSimplex = PETSC_FALSE;
393     ierr = DMViewFromOptions(*dm, NULL, "-dm_tobox_view");CHKERRQ(ierr);
394     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
395     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
396     ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
397     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
398     ierr = DMPlexCheckPointSF(*dm);CHKERRQ(ierr);
399     ierr = DMPlexCheckInterfaceCones(*dm);CHKERRQ(ierr);
400 
401     ierr = DMConvert(*dm,dim == 2 ? DMP4EST : DMP8EST,&dmConv);CHKERRQ(ierr);
402     if (dmConv) {
403       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_1_");CHKERRQ(ierr);
404       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
405       ierr = DMDestroy(dm);CHKERRQ(ierr);
406       *dm  = dmConv;
407     }
408     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_1_");CHKERRQ(ierr);
409     ierr = DMSetUp(*dm);CHKERRQ(ierr);
410     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
411     ierr = DMConvert(*dm, DMPLEX, &dmConv);CHKERRQ(ierr);
412     if (dmConv) {
413       ierr = PetscObjectSetOptionsPrefix((PetscObject) dmConv, "conv_par_2_");CHKERRQ(ierr);
414       ierr = DMSetFromOptions(dmConv);CHKERRQ(ierr);
415       ierr = DMDestroy(dm);CHKERRQ(ierr);
416       *dm  = dmConv;
417     }
418     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "conv_par_2_");CHKERRQ(ierr);
419     ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
420     ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
421 #else
422     SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Recompile with --download-p4est");
423 #endif
424   }
425 
426   /* test redistribution of an already distributed mesh */
427   if (user->redistribute) {
428     DM       distributedMesh;
429     PetscSF  sf;
430     PetscInt nranks;
431 
432     ierr = DMViewFromOptions(*dm, NULL, "-dm_pre_redist_view");CHKERRQ(ierr);
433     ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);
434     if (distributedMesh) {
435       ierr = DMGetPointSF(distributedMesh, &sf);CHKERRQ(ierr);
436       ierr = PetscSFSetUp(sf);CHKERRQ(ierr);
437       ierr = DMGetNeighbors(distributedMesh, &nranks, NULL);CHKERRQ(ierr);
438       ierr = MPI_Allreduce(MPI_IN_PLACE, &nranks, 1, MPIU_INT, MPI_MIN, PetscObjectComm((PetscObject)*dm));CHKERRQ(ierr);
439       ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)*dm)), "Minimum number of neighbors: %D\n", nranks);CHKERRQ(ierr);
440       ierr = DMDestroy(dm);CHKERRQ(ierr);
441       *dm  = distributedMesh;
442     }
443     ierr = DMViewFromOptions(*dm, NULL, "-dm_post_redist_view");CHKERRQ(ierr);
444   }
445 
446   if (user->overlap) {
447     DM overlapMesh = NULL;
448 
449     /* Add the overlap to refined mesh */
450     ierr = PetscLogStagePush(user->stages[STAGE_OVERLAP]);CHKERRQ(ierr);
451     ierr = DMViewFromOptions(*dm, NULL, "-dm_pre_overlap_view");CHKERRQ(ierr);
452     ierr = DMPlexDistributeOverlap(*dm, user->overlap, NULL, &overlapMesh);CHKERRQ(ierr);
453     if (overlapMesh) {
454       PetscInt overlap;
455       ierr = DMPlexGetOverlap(overlapMesh, &overlap);CHKERRQ(ierr);
456       ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "Overlap: %D\n", overlap);CHKERRQ(ierr);
457       ierr = DMDestroy(dm);CHKERRQ(ierr);
458       *dm = overlapMesh;
459     }
460     ierr = DMViewFromOptions(*dm, NULL, "-dm_post_overlap_view");CHKERRQ(ierr);
461     ierr = PetscLogStagePop();CHKERRQ(ierr);
462   }
463   if (user->final_ref) {
464     DM refinedMesh = NULL;
465 
466     ierr = DMPlexSetRefinementUniform(*dm, PETSC_TRUE);CHKERRQ(ierr);
467     ierr = DMRefine(*dm, comm, &refinedMesh);CHKERRQ(ierr);
468     if (refinedMesh) {
469       ierr = DMDestroy(dm);CHKERRQ(ierr);
470       *dm  = refinedMesh;
471     }
472   }
473 
474   ierr = PetscObjectSetName((PetscObject) *dm, "Simplicial Mesh");CHKERRQ(ierr);
475   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
476   if (user->final_diagnostics) {
477     DMPlexInterpolatedFlag interpolated;
478     PetscInt  dim, depth;
479 
480     ierr = DMGetDimension(*dm, &dim);CHKERRQ(ierr);
481     ierr = DMPlexGetDepth(*dm, &depth);CHKERRQ(ierr);
482     ierr = DMPlexIsInterpolatedCollective(*dm, &interpolated);CHKERRQ(ierr);
483 
484     ierr = DMPlexCheckSymmetry(*dm);CHKERRQ(ierr);
485     if (interpolated == DMPLEX_INTERPOLATED_FULL) {
486       ierr = DMPlexCheckFaces(*dm, 0);CHKERRQ(ierr);
487     }
488     ierr = DMPlexCheckSkeleton(*dm, 0);CHKERRQ(ierr);
489     ierr = DMPlexCheckGeometry(*dm);CHKERRQ(ierr);
490   }
491   ierr = PetscLogEventEnd(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);
492   user->dm = *dm;
493   PetscFunctionReturn(0);
494 }
495 
496 int main(int argc, char **argv)
497 {
498   AppCtx         user;                 /* user-defined work context */
499   PetscErrorCode ierr;
500 
501   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
502   ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);
503   ierr = CreateMesh(PETSC_COMM_WORLD, &user, &user.dm);CHKERRQ(ierr);
504   ierr = DMDestroy(&user.dm);CHKERRQ(ierr);
505   ierr = PetscFinalize();
506   return ierr;
507 }
508 
509 /*TEST
510 
511   # CTetGen 0-1
512   test:
513     suffix: 0
514     requires: ctetgen
515     args: -dim 3 -ctetgen_verbose 4 -dm_view ascii::ascii_info_detail -info :~sys
516   test:
517     suffix: 1
518     requires: ctetgen
519     args: -dim 3 -ctetgen_verbose 4 -refinement_limit 0.0625 -dm_view ascii::ascii_info_detail -info :~sys
520 
521 
522   # 2D LaTex and ASCII output 2-9
523   test:
524     suffix: 2
525     requires: triangle
526     args: -dim 2 -dm_view ascii::ascii_latex
527   test:
528     suffix: 3
529     requires: triangle
530     args: -dim 2 -dm_refine 1 -interpolate 1 -dm_view ascii::ascii_info_detail
531   test:
532     suffix: 4
533     requires: triangle
534     nsize: 2
535     args: -dim 2 -dm_refine 1 -interpolate 1 -test_partition -dm_view ascii::ascii_info_detail
536   test:
537     suffix: 5
538     requires: triangle
539     nsize: 2
540     args: -dim 2 -dm_refine 1 -interpolate 1 -test_partition -dm_view ascii::ascii_latex
541   test:
542     suffix: 6
543     args: -dim 2 -cell_simplex 0 -interpolate -dm_view ascii::ascii_info_detail
544   test:
545     suffix: 7
546     args: -dim 2 -cell_simplex 0 -interpolate -dm_refine 1 -dm_view ascii::ascii_info_detail
547   test:
548     suffix: 8
549     nsize: 2
550     args: -dim 2 -cell_simplex 0 -interpolate -dm_refine 1 -interpolate 1 -test_partition -dm_view ascii::ascii_latex
551 
552   # 1D ASCII output
553   test:
554     suffix: 1d_0
555     args: -dim 1 -domain_shape box -dm_view ascii::ascii_info_detail
556   test:
557     suffix: 1d_1
558     args: -dim 1 -domain_shape box -dm_refine 2 -dm_view ascii::ascii_info_detail
559   test:
560     suffix: 1d_2
561     args: -dim 1 -domain_box_sizes 5 -x_periodicity periodic -dm_view ascii::ascii_info_detail -dm_plex_check_all
562 
563   # Parallel refinement tests with overlap
564   test:
565     suffix: refine_overlap_1d
566     nsize: 2
567     args: -dim 1 -domain_box_sizes 4 -dm_refine 1 -overlap {{0 1 2}separate output} -petscpartitioner_type simple -dm_view ascii::ascii_info
568   test:
569     suffix: refine_overlap_2d
570     requires: triangle
571     nsize: {{2 8}separate output}
572     args: -dim 2 -cell_simplex 1 -dm_refine 1 -interpolate 1 -test_partition -overlap {{0 1 2}separate output} -dm_view ascii::ascii_info
573 
574   # Parallel simple partitioner tests
575   test:
576     suffix: part_simple_0
577     requires: triangle
578     nsize: 2
579     args: -dim 2 -cell_simplex 1 -dm_refine 0 -interpolate 0 -petscpartitioner_type simple -partition_view -dm_view ascii::ascii_info_detail
580   test:
581     suffix: part_simple_1
582     requires: triangle
583     nsize: 8
584     args: -dim 2 -cell_simplex 1 -dm_refine 1 -interpolate 1 -petscpartitioner_type simple -partition_view -dm_view ascii::ascii_info_detail
585 
586   # Parallel partitioner tests
587   test:
588     suffix: part_parmetis_0
589     requires: parmetis
590     nsize: 2
591     args: -dim 2 -cell_simplex 0 -dm_refine 1 -interpolate 1 -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
592   test:
593     suffix: part_ptscotch_0
594     requires: ptscotch
595     nsize: 2
596     args: -dim 2 -cell_simplex 0 -dm_refine 0 -interpolate 1 -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
597   test:
598     suffix: part_ptscotch_1
599     requires: ptscotch
600     nsize: 8
601     args: -dim 2 -cell_simplex 0 -dm_refine 1 -interpolate 1 -petscpartitioner_type ptscotch -petscpartitioner_view -petscpartitioner_ptscotch_imbalance 0.1
602 
603   # CGNS reader tests 10-11 (need to find smaller test meshes)
604   test:
605     suffix: cgns_0
606     requires: cgns
607     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/tut21.cgns -interpolate 1 -dm_view
608 
609   # Gmsh mesh reader tests
610   test:
611     suffix: gmsh_0
612     requires: !single
613     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh -interpolate 1 -dm_view
614   test:
615     suffix: gmsh_1
616     requires: !single
617     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -interpolate 1 -dm_view
618   test:
619     suffix: gmsh_2
620     requires: !single
621     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -interpolate 1 -dm_view
622   test:
623     suffix: gmsh_3
624     nsize: 3
625     requires: !single
626     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -test_partition -interpolate 1 -dm_view
627   test:
628     suffix: gmsh_4
629     nsize: 3
630     requires: !single
631     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -test_partition -interpolate 1 -dm_view
632   test:
633     suffix: gmsh_5
634     requires: !single
635     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_quad.msh -interpolate 1 -dm_view
636   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
637   test:
638     suffix: gmsh_6
639     requires: !single
640     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -interpolate 1 -dm_view -final_diagnostics 0
641   test:
642     suffix: gmsh_7
643     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
644   test:
645     suffix: gmsh_8
646     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
647   testset:
648     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic_bin.msh -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
649     test:
650       suffix: gmsh_9
651     test:
652       suffix: gmsh_9_periodic_0
653       args: -dm_plex_gmsh_periodic 0
654   testset:
655     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
656     test:
657       suffix: gmsh_10
658     test:
659       suffix: gmsh_10_periodic_0
660       args: -dm_plex_gmsh_periodic 0
661   testset:
662     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all -dm_refine 1
663     test:
664       suffix: gmsh_11
665     test:
666       suffix: gmsh_11_periodic_0
667       args: -dm_plex_gmsh_periodic 0
668   # TODO: it seems the mesh is not a valid gmsh (inverted cell)
669   test:
670     suffix: gmsh_12
671     nsize: 4
672     requires: !single mpiio
673     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin_physnames.msh -viewer_binary_mpiio -petscpartitioner_type simple -interpolate 1 -dm_view -final_diagnostics 0
674   test:
675     suffix: gmsh_13_hybs2t
676     nsize: 4
677     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -petscpartitioner_type simple -interpolate 1 -dm_view -dm_refine 1 -dm_plex_cell_refiner tobox -dm_plex_check_all
678   test:
679     suffix: gmsh_14_ext
680     requires: !single
681     args: -ext_layers 2 -ext_thickness 1.5 -ext_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dm_view -interpolate -dm_plex_check_all
682   test:
683     suffix: gmsh_14_ext_s2t
684     requires: !single
685     args: -ext_layers 2 -ext_thickness 1.5 -ext_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_bin.msh -dm_view -interpolate -dm_plex_check_all -dm_refine 1 -dm_plex_cell_refiner tobox
686   test:
687     suffix: gmsh_15_hyb3d
688     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -interpolate -dm_plex_check_all
689   test:
690     suffix: gmsh_15_hyb3d_vtk
691     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view vtk: -interpolate -dm_plex_gmsh_hybrid -dm_plex_check_all
692   test:
693     suffix: gmsh_15_hyb3d_s2t
694     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -dm_view -interpolate -dm_plex_check_all -dm_refine 1 -dm_plex_cell_refiner tobox
695   test:
696     suffix: gmsh_16_spheresurface
697     nsize : 4
698     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_plex_check_all -dm_view -interpolate -petscpartitioner_type simple
699   test:
700     suffix: gmsh_16_spheresurface_s2t
701     nsize : 4
702     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_refine 1 -dm_plex_cell_refiner tobox -dm_plex_check_all -dm_view -interpolate -petscpartitioner_type simple
703   test:
704     suffix: gmsh_16_spheresurface_extruded
705     nsize : 4
706     args: -ext_layers 3 -ext_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_plex_check_all -dm_view -interpolate -petscpartitioner_type simple
707   test:
708     suffix: gmsh_16_spheresurface_extruded_s2t
709     nsize : 4
710     args: -ext_layers 3 -ext_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_refine 1 -dm_plex_cell_refiner tobox -dm_plex_check_all -dm_view -interpolate -petscpartitioner_type simple
711   test:
712     suffix: gmsh_17_hyb3d_interp_ascii
713     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.msh -dm_view -interpolate -dm_plex_check_all
714   test:
715     suffix: exodus_17_hyb3d_interp_ascii
716     requires: exodusii
717     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_hexwedge.exo -dm_view -interpolate -dm_plex_check_all
718 
719   # Legacy Gmsh v22/v40 ascii/binary reader tests
720   testset:
721     output_file: output/ex1_gmsh_3d_legacy.out
722     args: -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
723     test:
724       suffix: gmsh_3d_ascii_v22
725       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh2
726     test:
727       suffix: gmsh_3d_ascii_v40
728       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii.msh4
729     test:
730       suffix: gmsh_3d_binary_v22
731       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh2
732     test:
733       suffix: gmsh_3d_binary_v40
734       requires: long64
735       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary.msh4
736 
737   # Gmsh v41 ascii/binary reader tests
738   testset: # 32bit mesh, sequential
739     args: -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
740     output_file: output/ex1_gmsh_3d_32.out
741     test:
742       suffix: gmsh_3d_ascii_v41_32
743       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
744     test:
745       suffix: gmsh_3d_binary_v41_32
746       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
747     test:
748       suffix: gmsh_3d_binary_v41_32_mpiio
749       requires: define(PETSC_HAVE_MPIIO)
750       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
751   testset:  # 32bit mesh, parallel
752     args:  -petscpartitioner_type simple -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
753     nsize: 2
754     output_file: output/ex1_gmsh_3d_32_np2.out
755     test:
756       suffix: gmsh_3d_ascii_v41_32_np2
757       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-32.msh
758     test:
759       suffix: gmsh_3d_binary_v41_32_np2
760       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh
761     test:
762       suffix: gmsh_3d_binary_v41_32_np2_mpiio
763       requires: define(PETSC_HAVE_MPIIO)
764       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-32.msh -viewer_binary_mpiio
765   testset: # 64bit mesh, sequential
766     args: -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
767     output_file: output/ex1_gmsh_3d_64.out
768     test:
769       suffix: gmsh_3d_ascii_v41_64
770       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
771     test:
772       suffix: gmsh_3d_binary_v41_64
773       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
774     test:
775       suffix: gmsh_3d_binary_v41_64_mpiio
776       requires: define(PETSC_HAVE_MPIIO)
777       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
778   testset:  # 64bit mesh, parallel
779     args:  -petscpartitioner_type simple -dm_view ::ascii_info_detail -interpolate -dm_plex_check_all
780     nsize: 2
781     output_file: output/ex1_gmsh_3d_64_np2.out
782     test:
783       suffix: gmsh_3d_ascii_v41_64_np2
784       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-ascii-64.msh
785     test:
786       suffix: gmsh_3d_binary_v41_64_np2
787       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh
788     test:
789       suffix: gmsh_3d_binary_v41_64_np2_mpiio
790       requires: define(PETSC_HAVE_MPIIO)
791       args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/gmsh-3d-binary-64.msh -viewer_binary_mpiio
792 
793   # Fluent mesh reader tests
794   # TODO: Geometry checks fail
795   test:
796     suffix: fluent_0
797     requires: !complex
798     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -interpolate 1 -dm_view -final_diagnostics 0
799   test:
800     suffix: fluent_1
801     nsize: 3
802     requires: !complex
803     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.cas -interpolate 1 -test_partition -dm_view -final_diagnostics 0
804   test:
805     suffix: fluent_2
806     requires: !complex
807     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets_ascii.cas -interpolate 1 -dm_view -final_diagnostics 0
808   test:
809     suffix: fluent_3
810     requires: !complex
811     TODO: Fails on non-linux: fseek(), fileno() ? https://gitlab.com/petsc/petsc/merge_requests/2206#note_238166382
812     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cube_5tets.cas -interpolate 1 -dm_view -final_diagnostics 0
813 
814   # Med mesh reader tests, including parallel file reads
815   test:
816     suffix: med_0
817     requires: med
818     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -interpolate 1 -dm_view
819   test:
820     suffix: med_1
821     requires: med
822     nsize: 3
823     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.med -interpolate 1 -petscpartitioner_type simple -dm_view
824   test:
825     suffix: med_2
826     requires: med
827     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -interpolate 1 -dm_view
828   test:
829     suffix: med_3
830     requires: med
831     TODO: MED
832     nsize: 3
833     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/cylinder.med -interpolate 1 -petscpartitioner_type simple -dm_view
834 
835   # Test shape quality
836   test:
837     suffix: test_shape
838     requires: ctetgen
839     args: -dim 3 -interpolate -dm_refine_hierarchy 3 -dm_plex_check_all -dm_plex_check_cell_shape
840 
841   # Test simplex to tensor conversion
842   test:
843     suffix: s2t2
844     requires: triangle
845     args: -dim 2 -dm_refine 1 -interpolate -dm_plex_cell_refiner tobox -refinement_limit 0.0625 -dm_view ascii::ascii_info_detail
846 
847   test:
848     suffix: s2t3
849     requires: ctetgen
850     args: -dim 3 -dm_refine 1 -interpolate -dm_plex_cell_refiner tobox -refinement_limit 0.0625 -dm_view ascii::ascii_info_detail
851 
852   # Test domain shapes
853   test:
854     suffix: cylinder
855     args: -dim 3 -cell_simplex 0 -interpolate -domain_shape cylinder -dm_plex_check_all -dm_view
856 
857   test:
858     suffix: cylinder_per
859     args: -dim 3 -cell_simplex 0 -interpolate -domain_shape cylinder -z_periodicity periodic -dm_plex_check_all -dm_view
860 
861   test:
862     suffix: cylinder_wedge
863     args: -dim 3 -cell_simplex 0 -interpolate -cell_wedge -domain_shape cylinder -dm_view vtk: -dm_plex_check_all
864 
865   test:
866     suffix: cylinder_wedge_int
867     output_file: output/ex1_cylinder_wedge.out
868     args: -dim 3 -cell_simplex 0 -interpolate -cell_wedge -domain_shape cylinder -dm_view vtk: -dm_plex_check_all
869 
870   test:
871     suffix: box_2d
872     args: -dim 2 -cell_simplex 0 -interpolate -domain_shape box -dm_refine 2 -dm_plex_check_all -dm_view
873 
874   test:
875     suffix: box_2d_per
876     args: -dim 2 -cell_simplex 0 -interpolate -domain_shape box -dm_refine 2 -dm_plex_check_all -dm_view
877 
878   test:
879     suffix: box_2d_per_unint
880     args: -dim 2 -cell_simplex 0 -interpolate 0 -domain_shape box -domain_box_sizes 3,3 -dm_plex_check_all -dm_view ::ascii_info_detail
881 
882   test:
883     suffix: box_3d
884     args: -dim 3 -cell_simplex 0 -interpolate -domain_shape box -dm_refine 3 -dm_plex_check_all -dm_view
885 
886   test:
887     requires: triangle
888     suffix: box_wedge
889     args: -dim 3 -cell_simplex 0 -interpolate -cell_wedge -domain_shape box -dm_view vtk: -dm_plex_check_all
890 
891   testset:
892     requires: triangle
893     args: -dim 3 -cell_simplex 0 -interpolate -cell_wedge -domain_shape box -domain_box_sizes 2,3,1 -dm_view -dm_plex_check_all -dm_refine 1 -dm_plex_cell_refiner tobox
894     test:
895       suffix: box_wedge_s2t
896     test:
897       nsize: 3
898       args: -petscpartitioner_type simple
899       suffix: box_wedge_s2t_parallel
900 
901   # Test GLVis output
902   test:
903     suffix: glvis_2d_tet
904     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
905 
906   test:
907     suffix: glvis_2d_tet_per
908     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
909 
910   test:
911     suffix: glvis_2d_tet_per_mfem
912     args: -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: -interpolate
913 
914   test:
915     suffix: glvis_2d_quad
916     args: -dim 2 -cell_simplex 0 -interpolate -domain_shape box -domain_box_sizes 3,3 -dm_view glvis:
917 
918   test:
919     suffix: glvis_2d_quad_per
920     args: -dim 2 -cell_simplex 0 -interpolate -domain_shape box -domain_box_sizes 3,3 -x_periodicity periodic -y_periodicity periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary
921 
922   test:
923     suffix: glvis_2d_quad_per_mfem
924     args: -dim 2 -cell_simplex 0 -interpolate -domain_shape box -domain_box_sizes 3,3 -x_periodicity periodic -y_periodicity periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem
925 
926   test:
927     suffix: glvis_3d_tet
928     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_plex_gmsh_periodic 0 -dm_view glvis:
929 
930   test:
931     suffix: glvis_3d_tet_per
932     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -dm_view glvis: -interpolate -viewer_glvis_dm_plex_enable_boundary
933 
934   test:
935     suffix: glvis_3d_tet_per_mfem
936     TODO: broken
937     args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere_bin.msh -viewer_glvis_dm_plex_enable_mfem -dm_view glvis: -interpolate
938 
939   test:
940     suffix: glvis_3d_hex
941     args: -dim 3 -cell_simplex 0 -interpolate -domain_shape box -domain_box_sizes 3,3,3 -dm_view glvis:
942 
943   test:
944     suffix: glvis_3d_hex_per
945     args: -dim 3 -cell_simplex 0 -interpolate -domain_shape box -domain_box_sizes 3,3,3 -x_periodicity periodic -y_periodicity periodic -z_periodicity periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary 0
946 
947   test:
948     suffix: glvis_3d_hex_per_mfem
949     args: -dim 3 -cell_simplex 0 -domain_shape box -domain_box_sizes 3,3,3 -x_periodicity periodic -y_periodicity periodic -z_periodicity periodic -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -viewer_glvis_dm_plex_enable_mfem -interpolate
950 
951   # Test P4EST
952   testset:
953     requires: p4est
954     args: -interpolate -dm_view -test_p4est_seq -conv_seq_2_dm_plex_check_all -conv_seq_1_dm_forest_minimum_refinement 1
955     test:
956       suffix: p4est_periodic
957       args: -dim 2 -domain_shape box -cell_simplex 0 -x_periodicity periodic -y_periodicity periodic -domain_box_sizes 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
958     test:
959       suffix: p4est_periodic_3d
960       args: -dim 3 -domain_shape box -cell_simplex 0 -x_periodicity periodic -y_periodicity periodic -z_periodicity -domain_box_sizes 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
961     test:
962       suffix: p4est_gmsh_periodic
963       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh
964     test:
965       suffix: p4est_gmsh_surface
966       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
967     test:
968       suffix: p4est_gmsh_surface_parallel
969       nsize: 2
970       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -petscpartitioner_type simple -dm_view ::load_balance
971     test:
972       suffix: p4est_hyb_2d
973       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh
974     test:
975       suffix: p4est_hyb_3d
976       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
977     test:
978       requires: ctetgen
979       suffix: p4est_s2t_bugfaces_3d
980       args: -conv_seq_1_dm_forest_initial_refinement 0 -conv_seq_1_dm_forest_maximum_refinement 0 -dim 3 -domain_box_sizes 1,1 -cell_simplex
981     test:
982       suffix: p4est_bug_overlapsf
983       nsize: 3
984       args: -dim 3 -cell_simplex 0 -domain_box_sizes 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
985     test:
986       suffix: p4est_redistribute
987       nsize: 3
988       args: -dim 3 -cell_simplex 0 -domain_box_sizes 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
989     test:
990       suffix: p4est_gmsh_s2t_3d
991       args: -conv_seq_1_dm_forest_initial_refinement 1 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
992     test:
993       suffix: p4est_gmsh_s2t_3d_hash
994       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
995     test:
996       requires: long_runtime
997       suffix: p4est_gmsh_periodic_3d
998       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh
999 
1000   testset:
1001     requires: p4est
1002     nsize: 6
1003     args: -interpolate -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
1004     test:
1005       TODO: interface cones do not conform
1006       suffix: p4est_par_periodic
1007       args: -dim 2 -domain_shape box -cell_simplex 0 -x_periodicity periodic -y_periodicity periodic -domain_box_sizes 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
1008     test:
1009       TODO: interface cones do not conform
1010       suffix: p4est_par_periodic_3d
1011       args: -dim 3 -domain_shape box -cell_simplex 0 -x_periodicity periodic -y_periodicity periodic -z_periodicity periodic -domain_box_sizes 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
1012     test:
1013       TODO: interface cones do not conform
1014       suffix: p4est_par_gmsh_periodic
1015       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh
1016     test:
1017       suffix: p4est_par_gmsh_surface
1018       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
1019     test:
1020       suffix: p4est_par_gmsh_s2t_3d
1021       args: -conv_par_1_dm_forest_initial_refinement 1 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
1022     test:
1023       TODO: interface cones do not conform
1024       suffix: p4est_par_gmsh_s2t_3d_hash
1025       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
1026     test:
1027       requires: long_runtime
1028       suffix: p4est_par_gmsh_periodic_3d
1029       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh
1030 
1031   testset:
1032     requires: p4est
1033     nsize: 6
1034     args: -interpolate -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 -petscpartitioner_type simple
1035     test:
1036       suffix: p4est_par_ovl_periodic
1037       args: -dim 2 -domain_shape box -cell_simplex 0 -x_periodicity periodic -y_periodicity periodic -domain_box_sizes 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
1038     #TODO Mesh cell 201 is inverted, vol = 0. (FVM Volume. Is it correct? -> Diagnostics disabled)
1039     test:
1040       suffix: p4est_par_ovl_periodic_3d
1041       args: -dim 3 -domain_shape box -cell_simplex 0 -x_periodicity periodic -y_periodicity periodic -z_periodicity -domain_box_sizes 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
1042     test:
1043       suffix: p4est_par_ovl_gmsh_periodic
1044       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square_periodic.msh
1045     test:
1046       suffix: p4est_par_ovl_gmsh_surface
1047       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3
1048     test:
1049       suffix: p4est_par_ovl_gmsh_s2t_3d
1050       args: -conv_par_1_dm_forest_initial_refinement 1 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
1051     test:
1052       suffix: p4est_par_ovl_gmsh_s2t_3d_hash
1053       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh
1054     test:
1055       requires: long_runtime
1056       suffix: p4est_par_ovl_gmsh_periodic_3d
1057       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/mesh-3d-box-innersphere.msh
1058     test:
1059       suffix: p4est_par_ovl_hyb_2d
1060       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh
1061     test:
1062       suffix: p4est_par_ovl_hyb_3d
1063       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 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh
1064 
1065   test:
1066     TODO: broken
1067     requires: p4est
1068     nsize: 2
1069     suffix: p4est_bug_labels_noovl
1070     args: -interpolate -test_p4est_seq -dm_plex_check_all -dm_forest_minimum_refinement 0 -dm_forest_partition_overlap 1 -dim 2 -domain_shape box -cell_simplex 0 -domain_box_sizes 3,3 -dm_forest_initial_refinement 0 -dm_forest_maximum_refinement 2 -dm_p4est_refine_pattern hash -petscpartitioner_type simple -dm_forest_print_label_error
1071 
1072   test:
1073     requires: p4est
1074     nsize: 2
1075     suffix: p4est_bug_distribute_overlap
1076     args: -interpolate -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 -dim 2 -domain_shape box -cell_simplex 0 -domain_box_sizes 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
1077     args: -dm_post_overlap_view
1078 
1079   test:
1080     suffix: glvis_2d_hyb
1081     args: -dim 2 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_triquad.msh -interpolate -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -petscpartitioner_type simple
1082 
1083   test:
1084     suffix: glvis_3d_hyb
1085     args: -dim 3 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_tetwedge.msh -interpolate -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -petscpartitioner_type simple
1086 
1087   test:
1088     suffix: glvis_3d_hyb_s2t
1089     args: -dim 3 -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/hybrid_3d_cube.msh -interpolate -dm_view glvis: -viewer_glvis_dm_plex_enable_boundary -petscpartitioner_type simple -dm_refine 1 -dm_plex_cell_refiner tobox -dm_plex_check_all
1090 TEST*/
1091