xref: /petsc/src/dm/impls/plex/tests/ex40.c (revision d410b0cf18e1798d3d4c14858e0c2ffdbe2fea69)
1*d410b0cfSMatthew 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*d410b0cfSMatthew G. Knepley static PetscErrorCode LabelPoints(DM dm)
9*d410b0cfSMatthew G. Knepley {
10*d410b0cfSMatthew G. Knepley   DMLabel        label;
11*d410b0cfSMatthew G. Knepley   PetscInt       pStart, pEnd, p;
12*d410b0cfSMatthew G. Knepley   PetscBool      flg = PETSC_FALSE;
13*d410b0cfSMatthew G. Knepley   PetscErrorCode ierr;
14*d410b0cfSMatthew G. Knepley 
15*d410b0cfSMatthew G. Knepley   PetscFunctionBegin;
16*d410b0cfSMatthew G. Knepley   ierr = PetscOptionsGetBool(NULL, NULL, "-label_mesh", &flg, NULL);CHKERRQ(ierr);
17*d410b0cfSMatthew G. Knepley   if (!flg) PetscFunctionReturn(0);
18*d410b0cfSMatthew G. Knepley   ierr = DMCreateLabel(dm, "test");CHKERRQ(ierr);
19*d410b0cfSMatthew G. Knepley   ierr = DMGetLabel(dm, "test", &label);CHKERRQ(ierr);
20*d410b0cfSMatthew G. Knepley   ierr = DMPlexGetChart(dm, &pStart, &pEnd);CHKERRQ(ierr);
21*d410b0cfSMatthew G. Knepley   for (p = pStart; p < pEnd; ++p) {
22*d410b0cfSMatthew G. Knepley     ierr = DMLabelSetValue(label, p, p);CHKERRQ(ierr);
23*d410b0cfSMatthew G. Knepley   }
24*d410b0cfSMatthew G. Knepley   PetscFunctionReturn(0);
25*d410b0cfSMatthew G. Knepley }
26*d410b0cfSMatthew G. Knepley 
2730602db0SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm)
28412e9a14SMatthew G. Knepley {
29412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
30412e9a14SMatthew G. Knepley 
31412e9a14SMatthew G. Knepley   PetscFunctionBegin;
3230602db0SMatthew G. Knepley   ierr = DMCreate(comm, dm);CHKERRQ(ierr);
3330602db0SMatthew G. Knepley   ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr);
34412e9a14SMatthew G. Knepley   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
35*d410b0cfSMatthew G. Knepley   ierr = LabelPoints(*dm);CHKERRQ(ierr);
36*d410b0cfSMatthew G. Knepley   ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "post_label_");CHKERRQ(ierr);
37*d410b0cfSMatthew G. Knepley   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
38*d410b0cfSMatthew G. Knepley   ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, NULL);CHKERRQ(ierr);
39412e9a14SMatthew G. Knepley   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
40412e9a14SMatthew G. Knepley   PetscFunctionReturn(0);
41412e9a14SMatthew G. Knepley }
42412e9a14SMatthew G. Knepley 
43412e9a14SMatthew G. Knepley int main(int argc, char **argv)
44412e9a14SMatthew G. Knepley {
45412e9a14SMatthew G. Knepley   DM             dm;
46412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
47412e9a14SMatthew G. Knepley 
48412e9a14SMatthew G. Knepley   ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr;
4930602db0SMatthew G. Knepley   ierr = CreateMesh(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr);
50412e9a14SMatthew G. Knepley   ierr = DMDestroy(&dm);CHKERRQ(ierr);
51412e9a14SMatthew G. Knepley   ierr = PetscFinalize();
52412e9a14SMatthew G. Knepley   return ierr;
53412e9a14SMatthew G. Knepley }
54412e9a14SMatthew G. Knepley 
55412e9a14SMatthew G. Knepley /*TEST
56412e9a14SMatthew G. Knepley   test:
57012bc364SMatthew G. Knepley     suffix: ref_seg
58012bc364SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell segment -dm_refine 1 -dm_plex_check_all
59012bc364SMatthew G. Knepley 
60012bc364SMatthew G. Knepley   test:
61412e9a14SMatthew G. Knepley     suffix: ref_tri
6230602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2 -dm_plex_check_all
63412e9a14SMatthew G. Knepley 
64412e9a14SMatthew G. Knepley   test:
65412e9a14SMatthew G. Knepley     suffix: box_tri
6654fcfd0cSMatthew G. Knepley     requires: triangle
67412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
6830602db0SMatthew G. Knepley     args: -dm_distribute -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all
69412e9a14SMatthew G. Knepley 
70412e9a14SMatthew G. Knepley   test:
71412e9a14SMatthew G. Knepley     suffix: ref_quad
7230602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell quadrilateral -dm_refine 2 -dm_plex_check_all
73412e9a14SMatthew G. Knepley 
74412e9a14SMatthew G. Knepley   test:
75412e9a14SMatthew G. Knepley     suffix: box_quad
76412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
7730602db0SMatthew G. Knepley     args: -dm_distribute -dm_plex_box_faces 3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all
78412e9a14SMatthew G. Knepley 
79412e9a14SMatthew G. Knepley   test:
80412e9a14SMatthew G. Knepley     suffix: ref_tet
8130602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2 -dm_plex_check_all
82412e9a14SMatthew G. Knepley 
83412e9a14SMatthew G. Knepley   test:
84412e9a14SMatthew G. Knepley     suffix: box_tet
8554fcfd0cSMatthew G. Knepley     requires: ctetgen
86412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
8730602db0SMatthew G. Knepley     args: -dm_distribute -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all
88412e9a14SMatthew G. Knepley 
89412e9a14SMatthew G. Knepley   test:
90412e9a14SMatthew G. Knepley     suffix: ref_hex
9130602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell hexahedron -dm_refine 2 -dm_plex_check_all
92412e9a14SMatthew G. Knepley 
93412e9a14SMatthew G. Knepley   test:
94412e9a14SMatthew G. Knepley     suffix: box_hex
95412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
9630602db0SMatthew G. Knepley     args: -dm_distribute -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_simplex 0 -dm_refine 2 -dm_plex_check_all
97412e9a14SMatthew G. Knepley 
98412e9a14SMatthew G. Knepley   test:
99412e9a14SMatthew G. Knepley     suffix: ref_trip
10030602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2 -dm_plex_check_all
101412e9a14SMatthew G. Knepley 
102412e9a14SMatthew G. Knepley   test:
103412e9a14SMatthew G. Knepley     suffix: ref_tquad
10430602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quad -dm_refine 2 -dm_plex_check_all
105412e9a14SMatthew G. Knepley 
106412e9a14SMatthew G. Knepley   test:
107412e9a14SMatthew G. Knepley     suffix: ref_ttrip
10830602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all
109412e9a14SMatthew G. Knepley 
110412e9a14SMatthew G. Knepley   test:
111412e9a14SMatthew G. Knepley     suffix: ref_tquadp
11230602db0SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all
113412e9a14SMatthew G. Knepley 
114412e9a14SMatthew G. Knepley   test:
115012bc364SMatthew G. Knepley     suffix: ref_pyramid
116012bc364SMatthew G. Knepley     args: -dm_plex_reference_cell_domain -dm_plex_cell pyramid -dm_refine 2 -dm_plex_check_all
117012bc364SMatthew G. Knepley 
118012bc364SMatthew G. Knepley   testset:
119012bc364SMatthew G. Knepley     args: -dm_coord_space 0 -dm_plex_transform_type refine_tobox -dm_plex_check_all
120012bc364SMatthew G. Knepley 
121012bc364SMatthew G. Knepley     test:
12296ca5757SLisandro Dalcin       suffix: ref_tri_tobox
123012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell triangle -dm_refine 2
124412e9a14SMatthew G. Knepley 
125412e9a14SMatthew G. Knepley     test:
12696ca5757SLisandro Dalcin       suffix: box_tri_tobox
12754fcfd0cSMatthew G. Knepley       requires: triangle
128412e9a14SMatthew G. Knepley       nsize: {{1 3 5}}
129012bc364SMatthew G. Knepley       args: -dm_distribute -dm_plex_box_faces 3,3 -dm_refine 2
130412e9a14SMatthew G. Knepley 
131412e9a14SMatthew G. Knepley     test:
13296ca5757SLisandro Dalcin       suffix: ref_tet_tobox
133012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell tetrahedron -dm_refine 2
134412e9a14SMatthew G. Knepley 
135412e9a14SMatthew G. Knepley     test:
13696ca5757SLisandro Dalcin       suffix: box_tet_tobox
13754fcfd0cSMatthew G. Knepley       requires: ctetgen
138412e9a14SMatthew G. Knepley       nsize: {{1 3 5}}
139012bc364SMatthew G. Knepley       args: -dm_distribute -dm_plex_dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2
140412e9a14SMatthew G. Knepley 
141412e9a14SMatthew G. Knepley     test:
14296ca5757SLisandro Dalcin       suffix: ref_trip_tobox
143012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell triangular_prism -dm_refine 2
144412e9a14SMatthew G. Knepley 
145412e9a14SMatthew G. Knepley     test:
14696ca5757SLisandro Dalcin       suffix: ref_ttrip_tobox
147012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_triangular_prism -dm_refine 2
148012bc364SMatthew G. Knepley 
149012bc364SMatthew G. Knepley     test:
150012bc364SMatthew G. Knepley       suffix: ref_tquadp_tobox
151012bc364SMatthew G. Knepley       args: -dm_plex_reference_cell_domain -dm_plex_cell tensor_quadrilateral_prism -dm_refine 2
152412e9a14SMatthew G. Knepley 
153*d410b0cfSMatthew G. Knepley   testset:
154*d410b0cfSMatthew 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
155*d410b0cfSMatthew G. Knepley 
156*d410b0cfSMatthew G. Knepley     test:
157*d410b0cfSMatthew G. Knepley       suffix: extrude_quad
158*d410b0cfSMatthew G. Knepley       args: -dm_plex_simplex 0
159*d410b0cfSMatthew G. Knepley 
160412e9a14SMatthew G. Knepley TEST*/
161