1d410b0cfSMatthew 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 8d410b0cfSMatthew G. Knepley static PetscErrorCode LabelPoints(DM dm) 9d410b0cfSMatthew G. Knepley { 10d410b0cfSMatthew G. Knepley DMLabel label; 11d410b0cfSMatthew G. Knepley PetscInt pStart, pEnd, p; 12d410b0cfSMatthew G. Knepley PetscBool flg = PETSC_FALSE; 13d410b0cfSMatthew G. Knepley 14d410b0cfSMatthew G. Knepley PetscFunctionBegin; 159566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetBool(NULL, NULL, "-label_mesh", &flg, NULL)); 16d410b0cfSMatthew G. Knepley if (!flg) PetscFunctionReturn(0); 179566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm, "test")); 189566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "test", &label)); 199566063dSJacob Faibussowitsch PetscCall(DMPlexGetChart(dm, &pStart, &pEnd)); 20d410b0cfSMatthew G. Knepley for (p = pStart; p < pEnd; ++p) { 219566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label, p, p)); 22d410b0cfSMatthew G. Knepley } 23d410b0cfSMatthew G. Knepley PetscFunctionReturn(0); 24d410b0cfSMatthew G. Knepley } 25d410b0cfSMatthew G. Knepley 2630602db0SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 27412e9a14SMatthew G. Knepley { 28412e9a14SMatthew G. Knepley PetscFunctionBegin; 299566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, dm)); 309566063dSJacob Faibussowitsch PetscCall(DMSetType(*dm, DMPLEX)); 319566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 329566063dSJacob Faibussowitsch PetscCall(LabelPoints(*dm)); 339566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, "post_label_")); 349566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 359566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL)); 369566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view")); 37412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 38412e9a14SMatthew G. Knepley } 39412e9a14SMatthew G. Knepley 40412e9a14SMatthew G. Knepley int main(int argc, char **argv) 41412e9a14SMatthew G. Knepley { 42412e9a14SMatthew G. Knepley DM dm; 43412e9a14SMatthew G. Knepley 44327415f7SBarry Smith PetscFunctionBeginUser; 459566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 469566063dSJacob Faibussowitsch PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm)); 479566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 489566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 49b122ec5aSJacob Faibussowitsch return 0; 50412e9a14SMatthew G. Knepley } 51412e9a14SMatthew G. Knepley 52412e9a14SMatthew G. Knepley /*TEST 53412e9a14SMatthew G. Knepley test: 54012bc364SMatthew G. Knepley suffix: ref_seg 55012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all 56012bc364SMatthew G. Knepley 57012bc364SMatthew G. Knepley test: 58412e9a14SMatthew G. Knepley suffix: ref_tri 5930602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all 60412e9a14SMatthew G. Knepley 61412e9a14SMatthew G. Knepley test: 62412e9a14SMatthew G. Knepley suffix: box_tri 63*ecfb7de4SBlaise Bourdin requires: triangle parmetis 64412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 65*ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 66412e9a14SMatthew G. Knepley 67412e9a14SMatthew G. Knepley test: 68412e9a14SMatthew G. Knepley suffix: ref_quad 6930602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all 70412e9a14SMatthew G. Knepley 71412e9a14SMatthew G. Knepley test: 72412e9a14SMatthew G. Knepley suffix: box_quad 73412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 74*ecfb7de4SBlaise Bourdin requires: parmetis 75*ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 76412e9a14SMatthew G. Knepley 77412e9a14SMatthew G. Knepley test: 78412e9a14SMatthew G. Knepley suffix: ref_tet 7930602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all 80412e9a14SMatthew G. Knepley 81412e9a14SMatthew G. Knepley test: 82412e9a14SMatthew G. Knepley suffix: box_tet 83*ecfb7de4SBlaise Bourdin requires: ctetgen parmetis 84412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 85*ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 86412e9a14SMatthew G. Knepley 87412e9a14SMatthew G. Knepley test: 88412e9a14SMatthew G. Knepley suffix: ref_hex 8930602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all 90412e9a14SMatthew G. Knepley 91412e9a14SMatthew G. Knepley test: 92412e9a14SMatthew G. Knepley suffix: box_hex 93*ecfb7de4SBlaise Bourdin requires: parmetis 94412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 95*ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 96412e9a14SMatthew G. Knepley 97412e9a14SMatthew G. Knepley test: 98412e9a14SMatthew G. Knepley suffix: ref_trip 9930602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all 100412e9a14SMatthew G. Knepley 101412e9a14SMatthew G. Knepley test: 102412e9a14SMatthew G. Knepley suffix: ref_tquad 10330602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all 104412e9a14SMatthew G. Knepley 105412e9a14SMatthew G. Knepley test: 106412e9a14SMatthew G. Knepley suffix: ref_ttrip 10730602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all 108412e9a14SMatthew G. Knepley 109412e9a14SMatthew G. Knepley test: 110412e9a14SMatthew G. Knepley suffix: ref_tquadp 11130602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all 112412e9a14SMatthew G. Knepley 113412e9a14SMatthew G. Knepley test: 114012bc364SMatthew G. Knepley suffix: ref_pyramid 115012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all 116012bc364SMatthew G. Knepley 117012bc364SMatthew G. Knepley testset: 118012bc364SMatthew G. Knepley args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all 119012bc364SMatthew G. Knepley 120012bc364SMatthew G. Knepley test: 12196ca5757SLisandro Dalcin suffix: ref_tri_tobox 122012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 123412e9a14SMatthew G. Knepley 124412e9a14SMatthew G. Knepley test: 12596ca5757SLisandro Dalcin suffix: box_tri_tobox 126*ecfb7de4SBlaise Bourdin requires: triangle parmetis 127412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 128*ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_refine 2 -petscpartitioner_type parmetis 129412e9a14SMatthew G. Knepley 130412e9a14SMatthew G. Knepley test: 13196ca5757SLisandro Dalcin suffix: ref_tet_tobox 132012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 133412e9a14SMatthew G. Knepley 134412e9a14SMatthew G. Knepley test: 13596ca5757SLisandro Dalcin suffix: box_tet_tobox 136*ecfb7de4SBlaise Bourdin requires: ctetgen parmetis 137412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 138*ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -petscpartitioner_type parmetis 139412e9a14SMatthew G. Knepley 140412e9a14SMatthew G. Knepley test: 14196ca5757SLisandro Dalcin suffix: ref_trip_tobox 142012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 143412e9a14SMatthew G. Knepley 144412e9a14SMatthew G. Knepley test: 14596ca5757SLisandro Dalcin suffix: ref_ttrip_tobox 146012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 147012bc364SMatthew G. Knepley 148012bc364SMatthew G. Knepley test: 149012bc364SMatthew G. Knepley suffix: ref_tquadp_tobox 150012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 151412e9a14SMatthew G. Knepley 152d410b0cfSMatthew G. Knepley testset: 153d410b0cfSMatthew 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 154d410b0cfSMatthew G. Knepley 155d410b0cfSMatthew G. Knepley test: 156d410b0cfSMatthew G. Knepley suffix: extrude_quad 157d410b0cfSMatthew G. Knepley args: -dm_plex_simplex 0 158d410b0cfSMatthew G. Knepley 159412e9a14SMatthew G. Knepley TEST*/ 160