xref: /petsc/src/dm/impls/plex/tests/ex40.c (revision 533617b7309deb0f9f6f8302a5f0bbde6ea8bf07)
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 
8d71ae5a4SJacob Faibussowitsch static PetscErrorCode LabelPoints(DM dm)
9d71ae5a4SJacob 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));
163ba16761SJacob Faibussowitsch   if (!flg) PetscFunctionReturn(PETSC_SUCCESS);
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));
213ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
22d410b0cfSMatthew G. Knepley }
23d410b0cfSMatthew G. Knepley 
24d71ae5a4SJacob Faibussowitsch static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm)
25d71ae5a4SJacob 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_"));
32d4c22693SJed Brown   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
339566063dSJacob Faibussowitsch   PetscCall(DMSetFromOptions(*dm));
349566063dSJacob Faibussowitsch   PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
359566063dSJacob Faibussowitsch   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
363ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
37412e9a14SMatthew G. Knepley }
38412e9a14SMatthew G. Knepley 
39d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
40d71ae5a4SJacob Faibussowitsch {
41412e9a14SMatthew G. Knepley   DM dm;
42412e9a14SMatthew G. Knepley 
43327415f7SBarry Smith   PetscFunctionBeginUser;
449566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
459566063dSJacob Faibussowitsch   PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm));
469566063dSJacob Faibussowitsch   PetscCall(DMDestroy(&dm));
479566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
48b122ec5aSJacob Faibussowitsch   return 0;
49412e9a14SMatthew G. Knepley }
50412e9a14SMatthew G. Knepley 
51412e9a14SMatthew G. Knepley /*TEST
52412e9a14SMatthew G. Knepley   test:
53012bc364SMatthew G. Knepley     suffix: ref_seg
54012bc364SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all
55012bc364SMatthew G. Knepley 
56012bc364SMatthew G. Knepley   test:
57412e9a14SMatthew G. Knepley     suffix: ref_tri
5830602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all
59412e9a14SMatthew G. Knepley 
60412e9a14SMatthew G. Knepley   test:
61412e9a14SMatthew G. Knepley     suffix: box_tri
62ecfb7de4SBlaise Bourdin     requires: triangle parmetis
63412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
64ecfb7de4SBlaise Bourdin     args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis
65412e9a14SMatthew G. Knepley 
66412e9a14SMatthew G. Knepley   test:
67412e9a14SMatthew G. Knepley     suffix: ref_quad
6830602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all
69412e9a14SMatthew G. Knepley 
70412e9a14SMatthew G. Knepley   test:
71412e9a14SMatthew G. Knepley     suffix: box_quad
72412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
73ecfb7de4SBlaise Bourdin     requires: parmetis
74ecfb7de4SBlaise Bourdin     args: -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis
75412e9a14SMatthew G. Knepley 
76412e9a14SMatthew G. Knepley   test:
77*533617b7SMatthew G. Knepley     suffix: box_quad_label
78*533617b7SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -dm_plex_transform_label_match_strata {{0 1}separate output} -dm_view
79*533617b7SMatthew G. Knepley 
80*533617b7SMatthew G. Knepley   test:
81412e9a14SMatthew G. Knepley     suffix: ref_tet
8230602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all
83412e9a14SMatthew G. Knepley 
84412e9a14SMatthew G. Knepley   test:
85412e9a14SMatthew G. Knepley     suffix: box_tet
86ecfb7de4SBlaise Bourdin     requires: ctetgen parmetis
87412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
88ecfb7de4SBlaise Bourdin     args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis
89412e9a14SMatthew G. Knepley 
90412e9a14SMatthew G. Knepley   test:
91412e9a14SMatthew G. Knepley     suffix: ref_hex
9230602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all
93412e9a14SMatthew G. Knepley 
94412e9a14SMatthew G. Knepley   test:
95412e9a14SMatthew G. Knepley     suffix: box_hex
96ecfb7de4SBlaise Bourdin     requires: parmetis
97412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
98ecfb7de4SBlaise 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
99412e9a14SMatthew G. Knepley 
100412e9a14SMatthew G. Knepley   test:
101412e9a14SMatthew G. Knepley     suffix: ref_trip
10230602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all
103412e9a14SMatthew G. Knepley 
104412e9a14SMatthew G. Knepley   test:
105412e9a14SMatthew G. Knepley     suffix: ref_tquad
10630602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all
107412e9a14SMatthew G. Knepley 
108412e9a14SMatthew G. Knepley   test:
109412e9a14SMatthew G. Knepley     suffix: ref_ttrip
11030602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all
111412e9a14SMatthew G. Knepley 
112412e9a14SMatthew G. Knepley   test:
113412e9a14SMatthew G. Knepley     suffix: ref_tquadp
11430602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all
115412e9a14SMatthew G. Knepley 
116412e9a14SMatthew G. Knepley   test:
117012bc364SMatthew G. Knepley     suffix: ref_pyramid
118012bc364SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all
119012bc364SMatthew G. Knepley 
120012bc364SMatthew G. Knepley   testset:
121012bc364SMatthew G. Knepley     args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all
122012bc364SMatthew G. Knepley 
123012bc364SMatthew G. Knepley     test:
12496ca5757SLisandro Dalcin       suffix: ref_tri_tobox
125012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2
126412e9a14SMatthew G. Knepley 
127412e9a14SMatthew G. Knepley     test:
12896ca5757SLisandro Dalcin       suffix: box_tri_tobox
129ecfb7de4SBlaise Bourdin       requires: triangle parmetis
130412e9a14SMatthew G. Knepley       nsize: {{1 3 5}}
131ecfb7de4SBlaise Bourdin       args: -dm_plex_box_faces 3,3 -dm_refine 2 -petscpartitioner_type parmetis
132412e9a14SMatthew G. Knepley 
133412e9a14SMatthew G. Knepley     test:
13496ca5757SLisandro Dalcin       suffix: ref_tet_tobox
135012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2
136412e9a14SMatthew G. Knepley 
137412e9a14SMatthew G. Knepley     test:
13896ca5757SLisandro Dalcin       suffix: box_tet_tobox
139ecfb7de4SBlaise Bourdin       requires: ctetgen parmetis
140412e9a14SMatthew G. Knepley       nsize: {{1 3 5}}
141ecfb7de4SBlaise Bourdin       args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -petscpartitioner_type parmetis
142412e9a14SMatthew G. Knepley 
143412e9a14SMatthew G. Knepley     test:
14496ca5757SLisandro Dalcin       suffix: ref_trip_tobox
145012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2
146412e9a14SMatthew G. Knepley 
147412e9a14SMatthew G. Knepley     test:
14896ca5757SLisandro Dalcin       suffix: ref_ttrip_tobox
149012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2
150012bc364SMatthew G. Knepley 
151012bc364SMatthew G. Knepley     test:
152012bc364SMatthew G. Knepley       suffix: ref_tquadp_tobox
153012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2
154412e9a14SMatthew G. Knepley 
155d410b0cfSMatthew G. Knepley   testset:
156d410b0cfSMatthew 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
157d410b0cfSMatthew G. Knepley 
158d410b0cfSMatthew G. Knepley     test:
159d410b0cfSMatthew G. Knepley       suffix: extrude_quad
160d410b0cfSMatthew G. Knepley       args: -dm_plex_simplex 0
161d410b0cfSMatthew G. Knepley 
162412e9a14SMatthew G. Knepley TEST*/
163