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