xref: /petsc/src/dm/impls/plex/tests/ex40.c (revision fbf9dbe564678ed6eff1806adbc4c4f01b9743f4)
1 static const char help[] = "Tests for Plex transforms, including regular refinement";
2 
3 #include <petscdmplex.h>
4 #include <petscsf.h>
5 
6 #include <petsc/private/dmpleximpl.h>
7 
8 static PetscErrorCode LabelPoints(DM dm)
9 {
10   DMLabel   label;
11   PetscInt  pStart, pEnd, p;
12   PetscBool flg = PETSC_FALSE;
13 
14   PetscFunctionBegin;
15   PetscCall(PetscOptionsGetBool(NULL, NULL, "-label_mesh", &flg, NULL));
16   if (!flg) PetscFunctionReturn(PETSC_SUCCESS);
17   PetscCall(DMCreateLabel(dm, "test"));
18   PetscCall(DMGetLabel(dm, "test", &label));
19   PetscCall(DMPlexGetChart(dm, &pStart, &pEnd));
20   for (p = pStart; p < pEnd; ++p) PetscCall(DMLabelSetValue(label, p, p));
21   PetscFunctionReturn(PETSC_SUCCESS);
22 }
23 
24 static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm)
25 {
26   PetscFunctionBegin;
27   PetscCall(DMCreate(comm, dm));
28   PetscCall(DMSetType(*dm, DMPLEX));
29   PetscCall(DMSetFromOptions(*dm));
30   PetscCall(LabelPoints(*dm));
31   PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "post_label_"));
32   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
33   PetscCall(DMSetFromOptions(*dm));
34   PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, NULL));
35   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
36   PetscFunctionReturn(PETSC_SUCCESS);
37 }
38 
39 int main(int argc, char **argv)
40 {
41   DM dm;
42 
43   PetscFunctionBeginUser;
44   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
45   PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm));
46   PetscCall(DMDestroy(&dm));
47   PetscCall(PetscFinalize());
48   return 0;
49 }
50 
51 /*TEST
52   test:
53     suffix: ref_seg
54     args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all
55 
56   test:
57     suffix: ref_tri
58     args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all
59 
60   test:
61     suffix: box_tri
62     requires: triangle parmetis
63     nsize: {{1 3 5}}
64     args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis
65 
66   test:
67     suffix: ref_quad
68     args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all
69 
70   test:
71     suffix: box_quad
72     nsize: {{1 3 5}}
73     requires: parmetis
74     args: -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis
75 
76   test:
77     suffix: box_quad_label
78     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 
80   test:
81     suffix: ref_tet
82     args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all
83 
84   test:
85     suffix: box_tet
86     requires: ctetgen parmetis
87     nsize: {{1 3 5}}
88     args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all -petscpartitioner_type parmetis
89 
90   test:
91     suffix: ref_hex
92     args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all
93 
94   test:
95     suffix: box_hex
96     requires: parmetis
97     nsize: {{1 3 5}}
98     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
99 
100   test:
101     suffix: ref_trip
102     args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all
103 
104   test:
105     suffix: ref_tquad
106     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all
107 
108   test:
109     suffix: ref_ttrip
110     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all
111 
112   test:
113     suffix: ref_tquadp
114     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all
115 
116   test:
117     suffix: ref_pyramid
118     args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all
119 
120   testset:
121     args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all
122 
123     test:
124       suffix: ref_tri_tobox
125       args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2
126 
127     test:
128       suffix: box_tri_tobox
129       requires: triangle parmetis
130       nsize: {{1 3 5}}
131       args: -dm_plex_box_faces 3,3 -dm_refine 2 -petscpartitioner_type parmetis
132 
133     test:
134       suffix: ref_tet_tobox
135       args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2
136 
137     test:
138       suffix: box_tet_tobox
139       requires: ctetgen parmetis
140       nsize: {{1 3 5}}
141       args: -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -petscpartitioner_type parmetis
142 
143     test:
144       suffix: ref_trip_tobox
145       args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2
146 
147     test:
148       suffix: ref_ttrip_tobox
149       args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2
150 
151     test:
152       suffix: ref_tquadp_tobox
153       args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2
154 
155   testset:
156     args: -dm_coord_space 0 -label_mesh -post_label_dm_extrude 2 -post_label_dm_plex_check_all -dm_view ::ascii_info_detail
157 
158     test:
159       suffix: extrude_quad
160       args: -dm_plex_simplex 0
161 
162 TEST*/
163