xref: /petsc/src/dm/impls/plex/tests/ex40.c (revision 412e9a14abbdcfab8bb1cbfb40875fcde8c4ce26)
1*412e9a14SMatthew G. Knepley static const char help[] = "Tests for regular refinement";
2*412e9a14SMatthew G. Knepley 
3*412e9a14SMatthew G. Knepley /* TODO
4*412e9a14SMatthew G. Knepley   - Add in simplex-to-hex tests
5*412e9a14SMatthew G. Knepley */
6*412e9a14SMatthew G. Knepley 
7*412e9a14SMatthew G. Knepley #include <petscdmplex.h>
8*412e9a14SMatthew G. Knepley #include <petscsf.h>
9*412e9a14SMatthew G. Knepley 
10*412e9a14SMatthew G. Knepley #include <petsc/private/dmpleximpl.h>
11*412e9a14SMatthew G. Knepley 
12*412e9a14SMatthew G. Knepley typedef struct {
13*412e9a14SMatthew G. Knepley   DMPolytopeType refCell; /* Use the reference cell */
14*412e9a14SMatthew G. Knepley   PetscInt       dim;     /* The topological dimension */
15*412e9a14SMatthew G. Knepley   PetscBool      simplex; /* Flag for simplices */
16*412e9a14SMatthew G. Knepley } AppCtx;
17*412e9a14SMatthew G. Knepley 
18*412e9a14SMatthew G. Knepley static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
19*412e9a14SMatthew G. Knepley {
20*412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
21*412e9a14SMatthew G. Knepley 
22*412e9a14SMatthew G. Knepley   PetscFunctionBeginUser;
23*412e9a14SMatthew G. Knepley   options->refCell = DM_POLYTOPE_UNKNOWN;
24*412e9a14SMatthew G. Knepley   options->dim     = 2;
25*412e9a14SMatthew G. Knepley   options->simplex = PETSC_TRUE;
26*412e9a14SMatthew G. Knepley 
27*412e9a14SMatthew G. Knepley   ierr = PetscOptionsBegin(comm, "", "Parallel Mesh Orientation Options", "DMPLEX");CHKERRQ(ierr);
28*412e9a14SMatthew G. Knepley   ierr = PetscOptionsInt("-dim", "The topological dimension", "ex40.c", options->dim, &options->dim, NULL);CHKERRQ(ierr);
29*412e9a14SMatthew G. Knepley   ierr = PetscOptionsEnum("-ref_cell", "Use the reference cell", "ex40.c", DMPolytopeTypes, (PetscEnum) options->refCell, (PetscEnum *) &options->refCell, NULL);CHKERRQ(ierr);
30*412e9a14SMatthew G. Knepley   ierr = PetscOptionsBool("-simplex", "Flag for simplices", "ex40.c", options->simplex, &options->simplex, NULL);CHKERRQ(ierr);
31*412e9a14SMatthew G. Knepley   ierr = PetscOptionsEnd();
32*412e9a14SMatthew G. Knepley   PetscFunctionReturn(0);
33*412e9a14SMatthew G. Knepley }
34*412e9a14SMatthew G. Knepley 
35*412e9a14SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *ctx, DM *dm)
36*412e9a14SMatthew G. Knepley {
37*412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
38*412e9a14SMatthew G. Knepley 
39*412e9a14SMatthew G. Knepley   PetscFunctionBegin;
40*412e9a14SMatthew G. Knepley   if (ctx->refCell != DM_POLYTOPE_UNKNOWN) {
41*412e9a14SMatthew G. Knepley     ierr = DMPlexCreateReferenceCellByType(comm, ctx->refCell, dm);CHKERRQ(ierr);
42*412e9a14SMatthew G. Knepley   } else {
43*412e9a14SMatthew G. Knepley     ierr = DMPlexCreateBoxMesh(comm, ctx->dim, ctx->simplex, NULL, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr);
44*412e9a14SMatthew G. Knepley   }
45*412e9a14SMatthew G. Knepley   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
46*412e9a14SMatthew G. Knepley   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
47*412e9a14SMatthew G. Knepley   PetscFunctionReturn(0);
48*412e9a14SMatthew G. Knepley }
49*412e9a14SMatthew G. Knepley 
50*412e9a14SMatthew G. Knepley int main(int argc, char **argv)
51*412e9a14SMatthew G. Knepley {
52*412e9a14SMatthew G. Knepley   DM             dm;
53*412e9a14SMatthew G. Knepley   AppCtx         ctx;
54*412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
55*412e9a14SMatthew G. Knepley 
56*412e9a14SMatthew G. Knepley   ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr;
57*412e9a14SMatthew G. Knepley   ierr = ProcessOptions(PETSC_COMM_WORLD, &ctx);CHKERRQ(ierr);
58*412e9a14SMatthew G. Knepley   ierr = CreateMesh(PETSC_COMM_WORLD, &ctx, &dm);CHKERRQ(ierr);
59*412e9a14SMatthew G. Knepley   ierr = DMDestroy(&dm);CHKERRQ(ierr);
60*412e9a14SMatthew G. Knepley   ierr = PetscFinalize();
61*412e9a14SMatthew G. Knepley   return ierr;
62*412e9a14SMatthew G. Knepley }
63*412e9a14SMatthew G. Knepley 
64*412e9a14SMatthew G. Knepley /*TEST
65*412e9a14SMatthew G. Knepley   test:
66*412e9a14SMatthew G. Knepley     suffix: ref_tri
67*412e9a14SMatthew G. Knepley     args: -ref_cell triangle -dm_refine 2 -dm_plex_check_all
68*412e9a14SMatthew G. Knepley 
69*412e9a14SMatthew G. Knepley   test:
70*412e9a14SMatthew G. Knepley     suffix: box_tri
71*412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
72*412e9a14SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all
73*412e9a14SMatthew G. Knepley 
74*412e9a14SMatthew G. Knepley   test:
75*412e9a14SMatthew G. Knepley     suffix: ref_quad
76*412e9a14SMatthew G. Knepley     args: -ref_cell quadrilateral -dm_refine 2 -dm_plex_check_all
77*412e9a14SMatthew G. Knepley 
78*412e9a14SMatthew G. Knepley   test:
79*412e9a14SMatthew G. Knepley     suffix: box_quad
80*412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
81*412e9a14SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all
82*412e9a14SMatthew G. Knepley 
83*412e9a14SMatthew G. Knepley   test:
84*412e9a14SMatthew G. Knepley     suffix: ref_tet
85*412e9a14SMatthew G. Knepley     args: -ref_cell tetrahedron -dm_refine 2 -dm_plex_check_all
86*412e9a14SMatthew G. Knepley 
87*412e9a14SMatthew G. Knepley   test:
88*412e9a14SMatthew G. Knepley     suffix: box_tet
89*412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
90*412e9a14SMatthew G. Knepley     args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all
91*412e9a14SMatthew G. Knepley 
92*412e9a14SMatthew G. Knepley   test:
93*412e9a14SMatthew G. Knepley     suffix: ref_hex
94*412e9a14SMatthew G. Knepley     args: -ref_cell hexahedron -simplex 0 -dm_refine 2 -dm_plex_check_all
95*412e9a14SMatthew G. Knepley 
96*412e9a14SMatthew G. Knepley   test:
97*412e9a14SMatthew G. Knepley     suffix: box_hex
98*412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
99*412e9a14SMatthew G. Knepley     args: -dim 3 -dm_plex_box_faces 3,3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all
100*412e9a14SMatthew G. Knepley 
101*412e9a14SMatthew G. Knepley   test:
102*412e9a14SMatthew G. Knepley     suffix: ref_trip
103*412e9a14SMatthew G. Knepley     args: -ref_cell "triangular prism" -dm_refine 2 -dm_plex_check_all
104*412e9a14SMatthew G. Knepley 
105*412e9a14SMatthew G. Knepley   test:
106*412e9a14SMatthew G. Knepley     suffix: ref_tquad
107*412e9a14SMatthew G. Knepley     args: -ref_cell "tensor quad" -dm_refine 2 -dm_plex_check_all
108*412e9a14SMatthew G. Knepley 
109*412e9a14SMatthew G. Knepley   test:
110*412e9a14SMatthew G. Knepley     suffix: ref_ttrip
111*412e9a14SMatthew G. Knepley     args: -ref_cell "tensor triangular prism" -dm_refine 2 -dm_plex_check_all
112*412e9a14SMatthew G. Knepley 
113*412e9a14SMatthew G. Knepley   test:
114*412e9a14SMatthew G. Knepley     suffix: ref_tquadp
115*412e9a14SMatthew G. Knepley     args: -ref_cell "tensor quadrilateral prism" -dm_refine 2 -dm_plex_check_all
116*412e9a14SMatthew G. Knepley 
117*412e9a14SMatthew G. Knepley   test:
118*412e9a14SMatthew G. Knepley     suffix: ref_tri_tohex
119*412e9a14SMatthew G. Knepley     args: -ref_cell triangle -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
120*412e9a14SMatthew G. Knepley 
121*412e9a14SMatthew G. Knepley   test:
122*412e9a14SMatthew G. Knepley     suffix: box_tri_tohex
123*412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
124*412e9a14SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
125*412e9a14SMatthew G. Knepley 
126*412e9a14SMatthew G. Knepley   test:
127*412e9a14SMatthew G. Knepley     suffix: ref_tet_tohex
128*412e9a14SMatthew G. Knepley     args: -ref_cell tetrahedron -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
129*412e9a14SMatthew G. Knepley 
130*412e9a14SMatthew G. Knepley   test:
131*412e9a14SMatthew G. Knepley     suffix: box_tet_tohex
132*412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
133*412e9a14SMatthew G. Knepley     args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
134*412e9a14SMatthew G. Knepley 
135*412e9a14SMatthew G. Knepley   test:
136*412e9a14SMatthew G. Knepley     suffix: ref_trip_tohex
137*412e9a14SMatthew G. Knepley     args: -ref_cell "triangular prism" -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
138*412e9a14SMatthew G. Knepley 
139*412e9a14SMatthew G. Knepley   test:
140*412e9a14SMatthew G. Knepley     suffix: ref_ttrip_tohex
141*412e9a14SMatthew G. Knepley     args: -ref_cell "tensor triangular prism" -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
142*412e9a14SMatthew G. Knepley 
143*412e9a14SMatthew G. Knepley TEST*/
144