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 8*d71ae5a4SJacob Faibussowitsch static PetscErrorCode LabelPoints(DM dm) 9*d71ae5a4SJacob Faibussowitsch { 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)); 2048a46eb9SPierre Jolivet for (p = pStart; p < pEnd; ++p) PetscCall(DMLabelSetValue(label, p, p)); 21d410b0cfSMatthew G. Knepley PetscFunctionReturn(0); 22d410b0cfSMatthew G. Knepley } 23d410b0cfSMatthew G. Knepley 24*d71ae5a4SJacob Faibussowitsch static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 25*d71ae5a4SJacob Faibussowitsch { 26412e9a14SMatthew G. Knepley PetscFunctionBegin; 279566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, dm)); 289566063dSJacob Faibussowitsch PetscCall(DMSetType(*dm, DMPLEX)); 299566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 309566063dSJacob Faibussowitsch PetscCall(LabelPoints(*dm)); 319566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "post_label_")); 329566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 339566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL)); 349566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view")); 35412e9a14SMatthew G. Knepley PetscFunctionReturn(0); 36412e9a14SMatthew G. Knepley } 37412e9a14SMatthew G. Knepley 38*d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 39*d71ae5a4SJacob Faibussowitsch { 40412e9a14SMatthew G. Knepley DM dm; 41412e9a14SMatthew G. Knepley 42327415f7SBarry Smith PetscFunctionBeginUser; 439566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 449566063dSJacob Faibussowitsch PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm)); 459566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 469566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 47b122ec5aSJacob Faibussowitsch return 0; 48412e9a14SMatthew G. Knepley } 49412e9a14SMatthew G. Knepley 50412e9a14SMatthew G. Knepley /*TEST 51412e9a14SMatthew G. Knepley test: 52012bc364SMatthew G. Knepley suffix: ref_seg 53012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all 54012bc364SMatthew G. Knepley 55012bc364SMatthew G. Knepley test: 56412e9a14SMatthew G. Knepley suffix: ref_tri 5730602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all 58412e9a14SMatthew G. Knepley 59412e9a14SMatthew G. Knepley test: 60412e9a14SMatthew G. Knepley suffix: box_tri 61ecfb7de4SBlaise Bourdin requires: triangle parmetis 62412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 63ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 64412e9a14SMatthew G. Knepley 65412e9a14SMatthew G. Knepley test: 66412e9a14SMatthew G. Knepley suffix: ref_quad 6730602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all 68412e9a14SMatthew G. Knepley 69412e9a14SMatthew G. Knepley test: 70412e9a14SMatthew G. Knepley suffix: box_quad 71412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 72ecfb7de4SBlaise Bourdin requires: parmetis 73ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 74412e9a14SMatthew G. Knepley 75412e9a14SMatthew G. Knepley test: 76412e9a14SMatthew G. Knepley suffix: ref_tet 7730602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all 78412e9a14SMatthew G. Knepley 79412e9a14SMatthew G. Knepley test: 80412e9a14SMatthew G. Knepley suffix: box_tet 81ecfb7de4SBlaise Bourdin requires: ctetgen parmetis 82412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 83ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis 84412e9a14SMatthew G. Knepley 85412e9a14SMatthew G. Knepley test: 86412e9a14SMatthew G. Knepley suffix: ref_hex 8730602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all 88412e9a14SMatthew G. Knepley 89412e9a14SMatthew G. Knepley test: 90412e9a14SMatthew G. Knepley suffix: box_hex 91ecfb7de4SBlaise Bourdin requires: parmetis 92412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 93ecfb7de4SBlaise 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 94412e9a14SMatthew G. Knepley 95412e9a14SMatthew G. Knepley test: 96412e9a14SMatthew G. Knepley suffix: ref_trip 9730602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all 98412e9a14SMatthew G. Knepley 99412e9a14SMatthew G. Knepley test: 100412e9a14SMatthew G. Knepley suffix: ref_tquad 10130602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all 102412e9a14SMatthew G. Knepley 103412e9a14SMatthew G. Knepley test: 104412e9a14SMatthew G. Knepley suffix: ref_ttrip 10530602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all 106412e9a14SMatthew G. Knepley 107412e9a14SMatthew G. Knepley test: 108412e9a14SMatthew G. Knepley suffix: ref_tquadp 10930602db0SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all 110412e9a14SMatthew G. Knepley 111412e9a14SMatthew G. Knepley test: 112012bc364SMatthew G. Knepley suffix: ref_pyramid 113012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all 114012bc364SMatthew G. Knepley 115012bc364SMatthew G. Knepley testset: 116012bc364SMatthew G. Knepley args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all 117012bc364SMatthew G. Knepley 118012bc364SMatthew G. Knepley test: 11996ca5757SLisandro Dalcin suffix: ref_tri_tobox 120012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 121412e9a14SMatthew G. Knepley 122412e9a14SMatthew G. Knepley test: 12396ca5757SLisandro Dalcin suffix: box_tri_tobox 124ecfb7de4SBlaise Bourdin requires: triangle parmetis 125412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 126ecfb7de4SBlaise Bourdin args: -dm_plex_box_faces 3,3 -dm_refine 2 -petscpartitioner_type parmetis 127412e9a14SMatthew G. Knepley 128412e9a14SMatthew G. Knepley test: 12996ca5757SLisandro Dalcin suffix: ref_tet_tobox 130012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 131412e9a14SMatthew G. Knepley 132412e9a14SMatthew G. Knepley test: 13396ca5757SLisandro Dalcin suffix: box_tet_tobox 134ecfb7de4SBlaise Bourdin requires: ctetgen parmetis 135412e9a14SMatthew G. Knepley nsize: {{1 3 5}} 136ecfb7de4SBlaise Bourdin args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -petscpartitioner_type parmetis 137412e9a14SMatthew G. Knepley 138412e9a14SMatthew G. Knepley test: 13996ca5757SLisandro Dalcin suffix: ref_trip_tobox 140012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 141412e9a14SMatthew G. Knepley 142412e9a14SMatthew G. Knepley test: 14396ca5757SLisandro Dalcin suffix: ref_ttrip_tobox 144012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 145012bc364SMatthew G. Knepley 146012bc364SMatthew G. Knepley test: 147012bc364SMatthew G. Knepley suffix: ref_tquadp_tobox 148012bc364SMatthew G. Knepley args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 149412e9a14SMatthew G. Knepley 150d410b0cfSMatthew G. Knepley testset: 151d410b0cfSMatthew 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 152d410b0cfSMatthew G. Knepley 153d410b0cfSMatthew G. Knepley test: 154d410b0cfSMatthew G. Knepley suffix: extrude_quad 155d410b0cfSMatthew G. Knepley args: -dm_plex_simplex 0 156d410b0cfSMatthew G. Knepley 157412e9a14SMatthew G. Knepley TEST*/ 158