1*d410b0cfSMatthew G. Knepley static const char help[] = "Tests for Plex transforms, including regular refinement"; 2412e9a14SMatthew G. Knepley 3412e9a14SMatthew G. Knepley #include <petscdmplex.h> 4412e9a14SMatthew G. Knepley #include <petscsf.h> 5412e9a14SMatthew G. Knepley 6412e9a14SMatthew G. Knepley #include <petsc/private/dmpleximpl.h> 7412e9a14SMatthew G. Knepley 8*d410b0cfSMatthew G. Knepley static PetscErrorCode LabelPoints(DM dm) 9*d410b0cfSMatthew G. Knepley { 10*d410b0cfSMatthew G. Knepley DMLabel label; 11*d410b0cfSMatthew G. Knepley PetscInt pStart, pEnd, p; 12*d410b0cfSMatthew G. Knepley PetscBool flg = PETSC_FALSE; 13*d410b0cfSMatthew G. Knepley PetscErrorCode ierr; 14*d410b0cfSMatthew G. Knepley 15*d410b0cfSMatthew G. Knepley PetscFunctionBegin; 16*d410b0cfSMatthew G. Knepley ierr = PetscOptionsGetBool(NULL, NULL, "-label_mesh", &flg, NULL);CHKERRQ(ierr); 17*d410b0cfSMatthew G. Knepley if (!flg) PetscFunctionReturn(0); 18*d410b0cfSMatthew G. Knepley ierr = DMCreateLabel(dm, "test");CHKERRQ(ierr); 19*d410b0cfSMatthew G. Knepley ierr = DMGetLabel(dm, "test", &label);CHKERRQ(ierr); 20*d410b0cfSMatthew G. Knepley ierr = DMPlexGetChart(dm, &pStart, &pEnd);CHKERRQ(ierr); 21*d410b0cfSMatthew G. Knepley for (p = pStart; p < pEnd; ++p) { 22*d410b0cfSMatthew G. Knepley ierr = DMLabelSetValue(label, p, p);CHKERRQ(ierr); 23*d410b0cfSMatthew G. Knepley } 24*d410b0cfSMatthew G. Knepley PetscFunctionReturn(0); 25*d410b0cfSMatthew G. Knepley } 26*d410b0cfSMatthew G. Knepley 2730602db0SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 28412e9a14SMatthew G. Knepley { 29412e9a14SMatthew G. Knepley PetscErrorCode ierr; 30412e9a14SMatthew G. Knepley 31412e9a14SMatthew G. Knepley PetscFunctionBegin; 3230602db0SMatthew G. Knepley ierr = DMCreate(comm, dm);CHKERRQ(ierr); 3330602db0SMatthew G. Knepley ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr); 34412e9a14SMatthew G. Knepley ierr = DMSetFromOptions(*dm);CHKERRQ(ierr); 35*d410b0cfSMatthew G. Knepley ierr = LabelPoints(*dm);CHKERRQ(ierr); 36*d410b0cfSMatthew G. Knepley ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "post_label_");CHKERRQ(ierr); 37*d410b0cfSMatthew G. Knepley ierr = DMSetFromOptions(*dm);CHKERRQ(ierr); 38*d410b0cfSMatthew G. Knepley ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr); 39412e9a14SMatthew G. Knepley ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr); 40412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 41412e9a14SMatthew G. Knepley } 42412e9a14SMatthew G. Knepley 43412e9a14SMatthew G. Knepley int main(int argc, char **argv) 44412e9a14SMatthew G. Knepley { 45412e9a14SMatthew G. Knepley DM dm; 46412e9a14SMatthew G. Knepley PetscErrorCode ierr; 47412e9a14SMatthew G. Knepley 48412e9a14SMatthew G. Knepley ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr; 4930602db0SMatthew G. Knepley ierr = CreateMesh(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr); 50412e9a14SMatthew G. Knepley ierr = DMDestroy(&dm);CHKERRQ(ierr); 51412e9a14SMatthew G. Knepley ierr = PetscFinalize(); 52412e9a14SMatthew G. Knepley return ierr; 53412e9a14SMatthew G. Knepley } 54412e9a14SMatthew G. Knepley 55412e9a14SMatthew G. Knepley /*TEST 56412e9a14SMatthew G. Knepley test: 57012bc364SMatthew G. Knepley suffix: ref_seg 58012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all 59012bc364SMatthew G. Knepley 60012bc364SMatthew G. Knepley test: 61412e9a14SMatthew G. Knepley suffix: ref_tri 6230602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all 63412e9a14SMatthew G. Knepley 64412e9a14SMatthew G. Knepley test: 65412e9a14SMatthew G. Knepley suffix: box_tri 6654fcfd0cSMatthew G. Knepley requires: triangle 67412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 6830602db0SMatthew G. Knepley args: -dm_distribute -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all 69412e9a14SMatthew G. Knepley 70412e9a14SMatthew G. Knepley test: 71412e9a14SMatthew G. Knepley suffix: ref_quad 7230602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all 73412e9a14SMatthew G. Knepley 74412e9a14SMatthew G. Knepley test: 75412e9a14SMatthew G. Knepley suffix: box_quad 76412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 7730602db0SMatthew G. Knepley args: -dm_distribute -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all 78412e9a14SMatthew G. Knepley 79412e9a14SMatthew G. Knepley test: 80412e9a14SMatthew G. Knepley suffix: ref_tet 8130602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all 82412e9a14SMatthew G. Knepley 83412e9a14SMatthew G. Knepley test: 84412e9a14SMatthew G. Knepley suffix: box_tet 8554fcfd0cSMatthew G. Knepley requires: ctetgen 86412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 8730602db0SMatthew G. Knepley args: -dm_distribute -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all 88412e9a14SMatthew G. Knepley 89412e9a14SMatthew G. Knepley test: 90412e9a14SMatthew G. Knepley suffix: ref_hex 9130602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all 92412e9a14SMatthew G. Knepley 93412e9a14SMatthew G. Knepley test: 94412e9a14SMatthew G. Knepley suffix: box_hex 95412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 9630602db0SMatthew G. Knepley args: -dm_distribute -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all 97412e9a14SMatthew G. Knepley 98412e9a14SMatthew G. Knepley test: 99412e9a14SMatthew G. Knepley suffix: ref_trip 10030602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all 101412e9a14SMatthew G. Knepley 102412e9a14SMatthew G. Knepley test: 103412e9a14SMatthew G. Knepley suffix: ref_tquad 10430602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all 105412e9a14SMatthew G. Knepley 106412e9a14SMatthew G. Knepley test: 107412e9a14SMatthew G. Knepley suffix: ref_ttrip 10830602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all 109412e9a14SMatthew G. Knepley 110412e9a14SMatthew G. Knepley test: 111412e9a14SMatthew G. Knepley suffix: ref_tquadp 11230602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all 113412e9a14SMatthew G. Knepley 114412e9a14SMatthew G. Knepley test: 115012bc364SMatthew G. Knepley suffix: ref_pyramid 116012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all 117012bc364SMatthew G. Knepley 118012bc364SMatthew G. Knepley testset: 119012bc364SMatthew G. Knepley args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all 120012bc364SMatthew G. Knepley 121012bc364SMatthew G. Knepley test: 12296ca5757SLisandro Dalcin suffix: ref_tri_tobox 123012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 124412e9a14SMatthew G. Knepley 125412e9a14SMatthew G. Knepley test: 12696ca5757SLisandro Dalcin suffix: box_tri_tobox 12754fcfd0cSMatthew G. Knepley requires: triangle 128412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 129012bc364SMatthew G. Knepley args: -dm_distribute -dm_plex_box_faces 3,3 -dm_refine 2 130412e9a14SMatthew G. Knepley 131412e9a14SMatthew G. Knepley test: 13296ca5757SLisandro Dalcin suffix: ref_tet_tobox 133012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 134412e9a14SMatthew G. Knepley 135412e9a14SMatthew G. Knepley test: 13696ca5757SLisandro Dalcin suffix: box_tet_tobox 13754fcfd0cSMatthew G. Knepley requires: ctetgen 138412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 139012bc364SMatthew G. Knepley args: -dm_distribute -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 140412e9a14SMatthew G. Knepley 141412e9a14SMatthew G. Knepley test: 14296ca5757SLisandro Dalcin suffix: ref_trip_tobox 143012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 144412e9a14SMatthew G. Knepley 145412e9a14SMatthew G. Knepley test: 14696ca5757SLisandro Dalcin suffix: ref_ttrip_tobox 147012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 148012bc364SMatthew G. Knepley 149012bc364SMatthew G. Knepley test: 150012bc364SMatthew G. Knepley suffix: ref_tquadp_tobox 151012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 152412e9a14SMatthew G. Knepley 153*d410b0cfSMatthew G. Knepley testset: 154*d410b0cfSMatthew G. Knepley args: -dm_coord_space 0 -label_mesh -post_label_dm_extrude 2 -post_label_dm_plex_check_all -dm_view ::ascii_info_detail 155*d410b0cfSMatthew G. Knepley 156*d410b0cfSMatthew G. Knepley test: 157*d410b0cfSMatthew G. Knepley suffix: extrude_quad 158*d410b0cfSMatthew G. Knepley args: -dm_plex_simplex 0 159*d410b0cfSMatthew G. Knepley 160412e9a14SMatthew G. Knepley TEST*/ 161