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