1*412e9a14SMatthew G. Knepley static const char help[] = "Tests for regular refinement"; 2*412e9a14SMatthew G. Knepley 3*412e9a14SMatthew G. Knepley /* TODO 4*412e9a14SMatthew G. Knepley - Add in simplex-to-hex tests 5*412e9a14SMatthew G. Knepley */ 6*412e9a14SMatthew G. Knepley 7*412e9a14SMatthew G. Knepley #include <petscdmplex.h> 8*412e9a14SMatthew G. Knepley #include <petscsf.h> 9*412e9a14SMatthew G. Knepley 10*412e9a14SMatthew G. Knepley #include <petsc/private/dmpleximpl.h> 11*412e9a14SMatthew G. Knepley 12*412e9a14SMatthew G. Knepley typedef struct { 13*412e9a14SMatthew G. Knepley DMPolytopeType refCell; /* Use the reference cell */ 14*412e9a14SMatthew G. Knepley PetscInt dim; /* The topological dimension */ 15*412e9a14SMatthew G. Knepley PetscBool simplex; /* Flag for simplices */ 16*412e9a14SMatthew G. Knepley } AppCtx; 17*412e9a14SMatthew G. Knepley 18*412e9a14SMatthew G. Knepley static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options) 19*412e9a14SMatthew G. Knepley { 20*412e9a14SMatthew G. Knepley PetscErrorCode ierr; 21*412e9a14SMatthew G. Knepley 22*412e9a14SMatthew G. Knepley PetscFunctionBeginUser; 23*412e9a14SMatthew G. Knepley options->refCell = DM_POLYTOPE_UNKNOWN; 24*412e9a14SMatthew G. Knepley options->dim = 2; 25*412e9a14SMatthew G. Knepley options->simplex = PETSC_TRUE; 26*412e9a14SMatthew G. Knepley 27*412e9a14SMatthew G. Knepley ierr = PetscOptionsBegin(comm, "", "Parallel Mesh Orientation Options", "DMPLEX");CHKERRQ(ierr); 28*412e9a14SMatthew G. Knepley ierr = PetscOptionsInt("-dim", "The topological dimension", "ex40.c", options->dim, &options->dim, NULL);CHKERRQ(ierr); 29*412e9a14SMatthew G. Knepley ierr = PetscOptionsEnum("-ref_cell", "Use the reference cell", "ex40.c", DMPolytopeTypes, (PetscEnum) options->refCell, (PetscEnum *) &options->refCell, NULL);CHKERRQ(ierr); 30*412e9a14SMatthew G. Knepley ierr = PetscOptionsBool("-simplex", "Flag for simplices", "ex40.c", options->simplex, &options->simplex, NULL);CHKERRQ(ierr); 31*412e9a14SMatthew G. Knepley ierr = PetscOptionsEnd(); 32*412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 33*412e9a14SMatthew G. Knepley } 34*412e9a14SMatthew G. Knepley 35*412e9a14SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *ctx, DM *dm) 36*412e9a14SMatthew G. Knepley { 37*412e9a14SMatthew G. Knepley PetscErrorCode ierr; 38*412e9a14SMatthew G. Knepley 39*412e9a14SMatthew G. Knepley PetscFunctionBegin; 40*412e9a14SMatthew G. Knepley if (ctx->refCell != DM_POLYTOPE_UNKNOWN) { 41*412e9a14SMatthew G. Knepley ierr = DMPlexCreateReferenceCellByType(comm, ctx->refCell, dm);CHKERRQ(ierr); 42*412e9a14SMatthew G. Knepley } else { 43*412e9a14SMatthew G. Knepley ierr = DMPlexCreateBoxMesh(comm, ctx->dim, ctx->simplex, NULL, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr); 44*412e9a14SMatthew G. Knepley } 45*412e9a14SMatthew G. Knepley ierr = DMSetFromOptions(*dm);CHKERRQ(ierr); 46*412e9a14SMatthew G. Knepley ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr); 47*412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 48*412e9a14SMatthew G. Knepley } 49*412e9a14SMatthew G. Knepley 50*412e9a14SMatthew G. Knepley int main(int argc, char **argv) 51*412e9a14SMatthew G. Knepley { 52*412e9a14SMatthew G. Knepley DM dm; 53*412e9a14SMatthew G. Knepley AppCtx ctx; 54*412e9a14SMatthew G. Knepley PetscErrorCode ierr; 55*412e9a14SMatthew G. Knepley 56*412e9a14SMatthew G. Knepley ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr; 57*412e9a14SMatthew G. Knepley ierr = ProcessOptions(PETSC_COMM_WORLD, &ctx);CHKERRQ(ierr); 58*412e9a14SMatthew G. Knepley ierr = CreateMesh(PETSC_COMM_WORLD, &ctx, &dm);CHKERRQ(ierr); 59*412e9a14SMatthew G. Knepley ierr = DMDestroy(&dm);CHKERRQ(ierr); 60*412e9a14SMatthew G. Knepley ierr = PetscFinalize(); 61*412e9a14SMatthew G. Knepley return ierr; 62*412e9a14SMatthew G. Knepley } 63*412e9a14SMatthew G. Knepley 64*412e9a14SMatthew G. Knepley /*TEST 65*412e9a14SMatthew G. Knepley test: 66*412e9a14SMatthew G. Knepley suffix: ref_tri 67*412e9a14SMatthew G. Knepley args: -ref_cell triangle -dm_refine 2 -dm_plex_check_all 68*412e9a14SMatthew G. Knepley 69*412e9a14SMatthew G. Knepley test: 70*412e9a14SMatthew G. Knepley suffix: box_tri 71*412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 72*412e9a14SMatthew G. Knepley args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all 73*412e9a14SMatthew G. Knepley 74*412e9a14SMatthew G. Knepley test: 75*412e9a14SMatthew G. Knepley suffix: ref_quad 76*412e9a14SMatthew G. Knepley args: -ref_cell quadrilateral -dm_refine 2 -dm_plex_check_all 77*412e9a14SMatthew G. Knepley 78*412e9a14SMatthew G. Knepley test: 79*412e9a14SMatthew G. Knepley suffix: box_quad 80*412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 81*412e9a14SMatthew G. Knepley args: -dm_plex_box_faces 3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all 82*412e9a14SMatthew G. Knepley 83*412e9a14SMatthew G. Knepley test: 84*412e9a14SMatthew G. Knepley suffix: ref_tet 85*412e9a14SMatthew G. Knepley args: -ref_cell tetrahedron -dm_refine 2 -dm_plex_check_all 86*412e9a14SMatthew G. Knepley 87*412e9a14SMatthew G. Knepley test: 88*412e9a14SMatthew G. Knepley suffix: box_tet 89*412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 90*412e9a14SMatthew G. Knepley args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all 91*412e9a14SMatthew G. Knepley 92*412e9a14SMatthew G. Knepley test: 93*412e9a14SMatthew G. Knepley suffix: ref_hex 94*412e9a14SMatthew G. Knepley args: -ref_cell hexahedron -simplex 0 -dm_refine 2 -dm_plex_check_all 95*412e9a14SMatthew G. Knepley 96*412e9a14SMatthew G. Knepley test: 97*412e9a14SMatthew G. Knepley suffix: box_hex 98*412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 99*412e9a14SMatthew G. Knepley args: -dim 3 -dm_plex_box_faces 3,3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all 100*412e9a14SMatthew G. Knepley 101*412e9a14SMatthew G. Knepley test: 102*412e9a14SMatthew G. Knepley suffix: ref_trip 103*412e9a14SMatthew G. Knepley args: -ref_cell "triangular prism" -dm_refine 2 -dm_plex_check_all 104*412e9a14SMatthew G. Knepley 105*412e9a14SMatthew G. Knepley test: 106*412e9a14SMatthew G. Knepley suffix: ref_tquad 107*412e9a14SMatthew G. Knepley args: -ref_cell "tensor quad" -dm_refine 2 -dm_plex_check_all 108*412e9a14SMatthew G. Knepley 109*412e9a14SMatthew G. Knepley test: 110*412e9a14SMatthew G. Knepley suffix: ref_ttrip 111*412e9a14SMatthew G. Knepley args: -ref_cell "tensor triangular prism" -dm_refine 2 -dm_plex_check_all 112*412e9a14SMatthew G. Knepley 113*412e9a14SMatthew G. Knepley test: 114*412e9a14SMatthew G. Knepley suffix: ref_tquadp 115*412e9a14SMatthew G. Knepley args: -ref_cell "tensor quadrilateral prism" -dm_refine 2 -dm_plex_check_all 116*412e9a14SMatthew G. Knepley 117*412e9a14SMatthew G. Knepley test: 118*412e9a14SMatthew G. Knepley suffix: ref_tri_tohex 119*412e9a14SMatthew G. Knepley args: -ref_cell triangle -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 120*412e9a14SMatthew G. Knepley 121*412e9a14SMatthew G. Knepley test: 122*412e9a14SMatthew G. Knepley suffix: box_tri_tohex 123*412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 124*412e9a14SMatthew G. Knepley args: -dm_plex_box_faces 3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 125*412e9a14SMatthew G. Knepley 126*412e9a14SMatthew G. Knepley test: 127*412e9a14SMatthew G. Knepley suffix: ref_tet_tohex 128*412e9a14SMatthew G. Knepley args: -ref_cell tetrahedron -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 129*412e9a14SMatthew G. Knepley 130*412e9a14SMatthew G. Knepley test: 131*412e9a14SMatthew G. Knepley suffix: box_tet_tohex 132*412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 133*412e9a14SMatthew G. Knepley args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 134*412e9a14SMatthew G. Knepley 135*412e9a14SMatthew G. Knepley test: 136*412e9a14SMatthew G. Knepley suffix: ref_trip_tohex 137*412e9a14SMatthew G. Knepley args: -ref_cell "triangular prism" -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 138*412e9a14SMatthew G. Knepley 139*412e9a14SMatthew G. Knepley test: 140*412e9a14SMatthew G. Knepley suffix: ref_ttrip_tohex 141*412e9a14SMatthew G. Knepley args: -ref_cell "tensor triangular prism" -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 142*412e9a14SMatthew G. Knepley 143*412e9a14SMatthew G. Knepley TEST*/ 144