1412e9a14SMatthew G. Knepley static const char help[] = "Tests for regular refinement"; 2412e9a14SMatthew G. Knepley 3412e9a14SMatthew G. Knepley /* TODO 4412e9a14SMatthew G. Knepley - Add in simplex-to-hex tests 5412e9a14SMatthew G. Knepley */ 6412e9a14SMatthew G. Knepley 7412e9a14SMatthew G. Knepley #include <petscdmplex.h> 8412e9a14SMatthew G. Knepley #include <petscsf.h> 9412e9a14SMatthew G. Knepley 10412e9a14SMatthew G. Knepley #include <petsc/private/dmpleximpl.h> 11412e9a14SMatthew G. Knepley 12412e9a14SMatthew G. Knepley typedef struct { 13412e9a14SMatthew G. Knepley DMPolytopeType refCell; /* Use the reference cell */ 14412e9a14SMatthew G. Knepley PetscInt dim; /* The topological dimension */ 15412e9a14SMatthew G. Knepley PetscBool simplex; /* Flag for simplices */ 16412e9a14SMatthew G. Knepley } AppCtx; 17412e9a14SMatthew G. Knepley 18412e9a14SMatthew G. Knepley static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options) 19412e9a14SMatthew G. Knepley { 20412e9a14SMatthew G. Knepley PetscErrorCode ierr; 21412e9a14SMatthew G. Knepley 22412e9a14SMatthew G. Knepley PetscFunctionBeginUser; 23412e9a14SMatthew G. Knepley options->refCell = DM_POLYTOPE_UNKNOWN; 24412e9a14SMatthew G. Knepley options->dim = 2; 25412e9a14SMatthew G. Knepley options->simplex = PETSC_TRUE; 26412e9a14SMatthew G. Knepley 27412e9a14SMatthew G. Knepley ierr = PetscOptionsBegin(comm, "", "Parallel Mesh Orientation Options", "DMPLEX");CHKERRQ(ierr); 28412e9a14SMatthew G. Knepley ierr = PetscOptionsInt("-dim", "The topological dimension", "ex40.c", options->dim, &options->dim, NULL);CHKERRQ(ierr); 29412e9a14SMatthew G. Knepley ierr = PetscOptionsEnum("-ref_cell", "Use the reference cell", "ex40.c", DMPolytopeTypes, (PetscEnum) options->refCell, (PetscEnum *) &options->refCell, NULL);CHKERRQ(ierr); 30412e9a14SMatthew G. Knepley ierr = PetscOptionsBool("-simplex", "Flag for simplices", "ex40.c", options->simplex, &options->simplex, NULL);CHKERRQ(ierr); 31412e9a14SMatthew G. Knepley ierr = PetscOptionsEnd(); 32412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 33412e9a14SMatthew G. Knepley } 34412e9a14SMatthew G. Knepley 35412e9a14SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *ctx, DM *dm) 36412e9a14SMatthew G. Knepley { 37412e9a14SMatthew G. Knepley PetscErrorCode ierr; 38412e9a14SMatthew G. Knepley 39412e9a14SMatthew G. Knepley PetscFunctionBegin; 40412e9a14SMatthew G. Knepley if (ctx->refCell != DM_POLYTOPE_UNKNOWN) { 41412e9a14SMatthew G. Knepley ierr = DMPlexCreateReferenceCellByType(comm, ctx->refCell, dm);CHKERRQ(ierr); 42412e9a14SMatthew G. Knepley } else { 43412e9a14SMatthew G. Knepley ierr = DMPlexCreateBoxMesh(comm, ctx->dim, ctx->simplex, NULL, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr); 44412e9a14SMatthew G. Knepley } 45412e9a14SMatthew G. Knepley ierr = DMSetFromOptions(*dm);CHKERRQ(ierr); 46412e9a14SMatthew G. Knepley ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr); 47412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 48412e9a14SMatthew G. Knepley } 49412e9a14SMatthew G. Knepley 50412e9a14SMatthew G. Knepley int main(int argc, char **argv) 51412e9a14SMatthew G. Knepley { 52412e9a14SMatthew G. Knepley DM dm; 53412e9a14SMatthew G. Knepley AppCtx ctx; 54412e9a14SMatthew G. Knepley PetscErrorCode ierr; 55412e9a14SMatthew G. Knepley 56412e9a14SMatthew G. Knepley ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr; 57412e9a14SMatthew G. Knepley ierr = ProcessOptions(PETSC_COMM_WORLD, &ctx);CHKERRQ(ierr); 58412e9a14SMatthew G. Knepley ierr = CreateMesh(PETSC_COMM_WORLD, &ctx, &dm);CHKERRQ(ierr); 59412e9a14SMatthew G. Knepley ierr = DMDestroy(&dm);CHKERRQ(ierr); 60412e9a14SMatthew G. Knepley ierr = PetscFinalize(); 61412e9a14SMatthew G. Knepley return ierr; 62412e9a14SMatthew G. Knepley } 63412e9a14SMatthew G. Knepley 64412e9a14SMatthew G. Knepley /*TEST 65412e9a14SMatthew G. Knepley test: 66412e9a14SMatthew G. Knepley suffix: ref_tri 67412e9a14SMatthew G. Knepley args: -ref_cell triangle -dm_refine 2 -dm_plex_check_all 68412e9a14SMatthew G. Knepley 69412e9a14SMatthew G. Knepley test: 70412e9a14SMatthew G. Knepley suffix: box_tri 71*54fcfd0cSMatthew G. Knepley requires: triangle 72412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 73412e9a14SMatthew G. Knepley args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all 74412e9a14SMatthew G. Knepley 75412e9a14SMatthew G. Knepley test: 76412e9a14SMatthew G. Knepley suffix: ref_quad 77412e9a14SMatthew G. Knepley args: -ref_cell quadrilateral -dm_refine 2 -dm_plex_check_all 78412e9a14SMatthew G. Knepley 79412e9a14SMatthew G. Knepley test: 80412e9a14SMatthew G. Knepley suffix: box_quad 81412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 82412e9a14SMatthew G. Knepley args: -dm_plex_box_faces 3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all 83412e9a14SMatthew G. Knepley 84412e9a14SMatthew G. Knepley test: 85412e9a14SMatthew G. Knepley suffix: ref_tet 86412e9a14SMatthew G. Knepley args: -ref_cell tetrahedron -dm_refine 2 -dm_plex_check_all 87412e9a14SMatthew G. Knepley 88412e9a14SMatthew G. Knepley test: 89412e9a14SMatthew G. Knepley suffix: box_tet 90*54fcfd0cSMatthew G. Knepley requires: ctetgen 91412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 92412e9a14SMatthew G. Knepley args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all 93412e9a14SMatthew G. Knepley 94412e9a14SMatthew G. Knepley test: 95412e9a14SMatthew G. Knepley suffix: ref_hex 96412e9a14SMatthew G. Knepley args: -ref_cell hexahedron -simplex 0 -dm_refine 2 -dm_plex_check_all 97412e9a14SMatthew G. Knepley 98412e9a14SMatthew G. Knepley test: 99412e9a14SMatthew G. Knepley suffix: box_hex 100412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 101412e9a14SMatthew G. Knepley args: -dim 3 -dm_plex_box_faces 3,3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all 102412e9a14SMatthew G. Knepley 103412e9a14SMatthew G. Knepley test: 104412e9a14SMatthew G. Knepley suffix: ref_trip 105*54fcfd0cSMatthew G. Knepley args: -ref_cell triangular_prism -dm_refine 2 -dm_plex_check_all 106412e9a14SMatthew G. Knepley 107412e9a14SMatthew G. Knepley test: 108412e9a14SMatthew G. Knepley suffix: ref_tquad 109*54fcfd0cSMatthew G. Knepley args: -ref_cell tensor_quad -dm_refine 2 -dm_plex_check_all 110412e9a14SMatthew G. Knepley 111412e9a14SMatthew G. Knepley test: 112412e9a14SMatthew G. Knepley suffix: ref_ttrip 113*54fcfd0cSMatthew G. Knepley args: -ref_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all 114412e9a14SMatthew G. Knepley 115412e9a14SMatthew G. Knepley test: 116412e9a14SMatthew G. Knepley suffix: ref_tquadp 117*54fcfd0cSMatthew G. Knepley args: -ref_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all 118412e9a14SMatthew G. Knepley 119412e9a14SMatthew G. Knepley test: 120412e9a14SMatthew G. Knepley suffix: ref_tri_tohex 121412e9a14SMatthew G. Knepley args: -ref_cell triangle -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 122412e9a14SMatthew G. Knepley 123412e9a14SMatthew G. Knepley test: 124412e9a14SMatthew G. Knepley suffix: box_tri_tohex 125*54fcfd0cSMatthew G. Knepley requires: triangle 126412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 127412e9a14SMatthew G. Knepley args: -dm_plex_box_faces 3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 128412e9a14SMatthew G. Knepley 129412e9a14SMatthew G. Knepley test: 130412e9a14SMatthew G. Knepley suffix: ref_tet_tohex 131412e9a14SMatthew G. Knepley args: -ref_cell tetrahedron -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 132412e9a14SMatthew G. Knepley 133412e9a14SMatthew G. Knepley test: 134412e9a14SMatthew G. Knepley suffix: box_tet_tohex 135*54fcfd0cSMatthew G. Knepley requires: ctetgen 136412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 137412e9a14SMatthew G. Knepley args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 138412e9a14SMatthew G. Knepley 139412e9a14SMatthew G. Knepley test: 140412e9a14SMatthew G. Knepley suffix: ref_trip_tohex 141*54fcfd0cSMatthew G. Knepley args: -ref_cell triangular_prism -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 142412e9a14SMatthew G. Knepley 143412e9a14SMatthew G. Knepley test: 144412e9a14SMatthew G. Knepley suffix: ref_ttrip_tohex 145*54fcfd0cSMatthew G. Knepley args: -ref_cell tensor_triangular_prism -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all 146412e9a14SMatthew G. Knepley 147412e9a14SMatthew G. Knepley TEST*/ 148