xref: /petsc/src/dm/impls/plex/tests/ex40.c (revision ecfb7de4a3f6884128371a2e0d7da6703da13838)
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