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 89371c9d4SSatish Balay static PetscErrorCode LabelPoints(DM dm) { 9d410b0cfSMatthew G. Knepley DMLabel label; 10d410b0cfSMatthew G. Knepley PetscInt pStart, pEnd, p; 11d410b0cfSMatthew G. Knepley PetscBool flg = PETSC_FALSE; 12d410b0cfSMatthew G. Knepley 13d410b0cfSMatthew G. Knepley PetscFunctionBegin; 149566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetBool(NULL, NULL, "-label_mesh", &flg, NULL)); 15d410b0cfSMatthew G. Knepley if (!flg) PetscFunctionReturn(0); 169566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm, "test")); 179566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "test", &label)); 189566063dSJacob Faibussowitsch PetscCall(DMPlexGetChart(dm, &pStart, &pEnd)); 19*48a46eb9SPierre Jolivet for (p = pStart; p < pEnd; ++p) PetscCall(DMLabelSetValue(label, p, p)); 20d410b0cfSMatthew G. Knepley PetscFunctionReturn(0); 21d410b0cfSMatthew G. Knepley } 22d410b0cfSMatthew G. Knepley 239371c9d4SSatish Balay static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) { 24412e9a14SMatthew G. Knepley PetscFunctionBegin; 259566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, dm)); 269566063dSJacob Faibussowitsch PetscCall(DMSetType(*dm, DMPLEX)); 279566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 289566063dSJacob Faibussowitsch PetscCall(LabelPoints(*dm)); 299566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "post_label_")); 309566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 319566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL)); 329566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view")); 33412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 34412e9a14SMatthew G. Knepley } 35412e9a14SMatthew G. Knepley 369371c9d4SSatish Balay int main(int argc, char **argv) { 37412e9a14SMatthew G. Knepley DM dm; 38412e9a14SMatthew G. Knepley 39327415f7SBarry Smith PetscFunctionBeginUser; 409566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 419566063dSJacob Faibussowitsch PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm)); 429566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 439566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 44b122ec5aSJacob Faibussowitsch return 0; 45412e9a14SMatthew G. Knepley } 46412e9a14SMatthew G. Knepley 47412e9a14SMatthew G. Knepley /*TEST 48412e9a14SMatthew G. Knepley test: 49012bc364SMatthew G. Knepley suffix: ref_seg 50012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all 51012bc364SMatthew G. Knepley 52012bc364SMatthew G. Knepley test: 53412e9a14SMatthew G. Knepley suffix: ref_tri 5430602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all 55412e9a14SMatthew G. Knepley 56412e9a14SMatthew G. Knepley test: 57412e9a14SMatthew G. Knepley suffix: box_tri 58ecfb7de4SBlaise Bourdin requires: triangle parmetis 59412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 60ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 61412e9a14SMatthew G. Knepley 62412e9a14SMatthew G. Knepley test: 63412e9a14SMatthew G. Knepley suffix: ref_quad 6430602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all 65412e9a14SMatthew G. Knepley 66412e9a14SMatthew G. Knepley test: 67412e9a14SMatthew G. Knepley suffix: box_quad 68412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 69ecfb7de4SBlaise Bourdin requires: parmetis 70ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 71412e9a14SMatthew G. Knepley 72412e9a14SMatthew G. Knepley test: 73412e9a14SMatthew G. Knepley suffix: ref_tet 7430602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all 75412e9a14SMatthew G. Knepley 76412e9a14SMatthew G. Knepley test: 77412e9a14SMatthew G. Knepley suffix: box_tet 78ecfb7de4SBlaise Bourdin requires: ctetgen parmetis 79412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 80ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 81412e9a14SMatthew G. Knepley 82412e9a14SMatthew G. Knepley test: 83412e9a14SMatthew G. Knepley suffix: ref_hex 8430602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all 85412e9a14SMatthew G. Knepley 86412e9a14SMatthew G. Knepley test: 87412e9a14SMatthew G. Knepley suffix: box_hex 88ecfb7de4SBlaise Bourdin requires: parmetis 89412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 90ecfb7de4SBlaise 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 91412e9a14SMatthew G. Knepley 92412e9a14SMatthew G. Knepley test: 93412e9a14SMatthew G. Knepley suffix: ref_trip 9430602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all 95412e9a14SMatthew G. Knepley 96412e9a14SMatthew G. Knepley test: 97412e9a14SMatthew G. Knepley suffix: ref_tquad 9830602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all 99412e9a14SMatthew G. Knepley 100412e9a14SMatthew G. Knepley test: 101412e9a14SMatthew G. Knepley suffix: ref_ttrip 10230602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all 103412e9a14SMatthew G. Knepley 104412e9a14SMatthew G. Knepley test: 105412e9a14SMatthew G. Knepley suffix: ref_tquadp 10630602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all 107412e9a14SMatthew G. Knepley 108412e9a14SMatthew G. Knepley test: 109012bc364SMatthew G. Knepley suffix: ref_pyramid 110012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all 111012bc364SMatthew G. Knepley 112012bc364SMatthew G. Knepley testset: 113012bc364SMatthew G. Knepley args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all 114012bc364SMatthew G. Knepley 115012bc364SMatthew G. Knepley test: 11696ca5757SLisandro Dalcin suffix: ref_tri_tobox 117012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 118412e9a14SMatthew G. Knepley 119412e9a14SMatthew G. Knepley test: 12096ca5757SLisandro Dalcin suffix: box_tri_tobox 121ecfb7de4SBlaise Bourdin requires: triangle parmetis 122412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 123ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_refine 2 -petscpartitioner_type parmetis 124412e9a14SMatthew G. Knepley 125412e9a14SMatthew G. Knepley test: 12696ca5757SLisandro Dalcin suffix: ref_tet_tobox 127012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 128412e9a14SMatthew G. Knepley 129412e9a14SMatthew G. Knepley test: 13096ca5757SLisandro Dalcin suffix: box_tet_tobox 131ecfb7de4SBlaise Bourdin requires: ctetgen parmetis 132412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 133ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -petscpartitioner_type parmetis 134412e9a14SMatthew G. Knepley 135412e9a14SMatthew G. Knepley test: 13696ca5757SLisandro Dalcin suffix: ref_trip_tobox 137012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 138412e9a14SMatthew G. Knepley 139412e9a14SMatthew G. Knepley test: 14096ca5757SLisandro Dalcin suffix: ref_ttrip_tobox 141012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 142012bc364SMatthew G. Knepley 143012bc364SMatthew G. Knepley test: 144012bc364SMatthew G. Knepley suffix: ref_tquadp_tobox 145012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 146412e9a14SMatthew G. Knepley 147d410b0cfSMatthew G. Knepley testset: 148d410b0cfSMatthew 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 149d410b0cfSMatthew G. Knepley 150d410b0cfSMatthew G. Knepley test: 151d410b0cfSMatthew G. Knepley suffix: extrude_quad 152d410b0cfSMatthew G. Knepley args: -dm_plex_simplex 0 153d410b0cfSMatthew G. Knepley 154412e9a14SMatthew G. Knepley TEST*/ 155