xref: /petsc/src/dm/impls/plex/tests/ex40.c (revision 54fcfd0cd9e0b528eddf17b6a03728eb052cdf36)
1412e9a14SMatthew G. Knepley static const char help[] = "Tests for regular refinement";
2412e9a14SMatthew G. Knepley 
3412e9a14SMatthew G. Knepley /* TODO
4412e9a14SMatthew G. Knepley   - Add in simplex-to-hex tests
5412e9a14SMatthew G. Knepley */
6412e9a14SMatthew G. Knepley 
7412e9a14SMatthew G. Knepley #include <petscdmplex.h>
8412e9a14SMatthew G. Knepley #include <petscsf.h>
9412e9a14SMatthew G. Knepley 
10412e9a14SMatthew G. Knepley #include <petsc/private/dmpleximpl.h>
11412e9a14SMatthew G. Knepley 
12412e9a14SMatthew G. Knepley typedef struct {
13412e9a14SMatthew G. Knepley   DMPolytopeType refCell; /* Use the reference cell */
14412e9a14SMatthew G. Knepley   PetscInt       dim;     /* The topological dimension */
15412e9a14SMatthew G. Knepley   PetscBool      simplex; /* Flag for simplices */
16412e9a14SMatthew G. Knepley } AppCtx;
17412e9a14SMatthew G. Knepley 
18412e9a14SMatthew G. Knepley static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
19412e9a14SMatthew G. Knepley {
20412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
21412e9a14SMatthew G. Knepley 
22412e9a14SMatthew G. Knepley   PetscFunctionBeginUser;
23412e9a14SMatthew G. Knepley   options->refCell = DM_POLYTOPE_UNKNOWN;
24412e9a14SMatthew G. Knepley   options->dim     = 2;
25412e9a14SMatthew G. Knepley   options->simplex = PETSC_TRUE;
26412e9a14SMatthew G. Knepley 
27412e9a14SMatthew G. Knepley   ierr = PetscOptionsBegin(comm, "", "Parallel Mesh Orientation Options", "DMPLEX");CHKERRQ(ierr);
28412e9a14SMatthew G. Knepley   ierr = PetscOptionsInt("-dim", "The topological dimension", "ex40.c", options->dim, &options->dim, NULL);CHKERRQ(ierr);
29412e9a14SMatthew G. Knepley   ierr = PetscOptionsEnum("-ref_cell", "Use the reference cell", "ex40.c", DMPolytopeTypes, (PetscEnum) options->refCell, (PetscEnum *) &options->refCell, NULL);CHKERRQ(ierr);
30412e9a14SMatthew G. Knepley   ierr = PetscOptionsBool("-simplex", "Flag for simplices", "ex40.c", options->simplex, &options->simplex, NULL);CHKERRQ(ierr);
31412e9a14SMatthew G. Knepley   ierr = PetscOptionsEnd();
32412e9a14SMatthew G. Knepley   PetscFunctionReturn(0);
33412e9a14SMatthew G. Knepley }
34412e9a14SMatthew G. Knepley 
35412e9a14SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *ctx, DM *dm)
36412e9a14SMatthew G. Knepley {
37412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
38412e9a14SMatthew G. Knepley 
39412e9a14SMatthew G. Knepley   PetscFunctionBegin;
40412e9a14SMatthew G. Knepley   if (ctx->refCell != DM_POLYTOPE_UNKNOWN) {
41412e9a14SMatthew G. Knepley     ierr = DMPlexCreateReferenceCellByType(comm, ctx->refCell, dm);CHKERRQ(ierr);
42412e9a14SMatthew G. Knepley   } else {
43412e9a14SMatthew G. Knepley     ierr = DMPlexCreateBoxMesh(comm, ctx->dim, ctx->simplex, NULL, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr);
44412e9a14SMatthew G. Knepley   }
45412e9a14SMatthew G. Knepley   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
46412e9a14SMatthew G. Knepley   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
47412e9a14SMatthew G. Knepley   PetscFunctionReturn(0);
48412e9a14SMatthew G. Knepley }
49412e9a14SMatthew G. Knepley 
50412e9a14SMatthew G. Knepley int main(int argc, char **argv)
51412e9a14SMatthew G. Knepley {
52412e9a14SMatthew G. Knepley   DM             dm;
53412e9a14SMatthew G. Knepley   AppCtx         ctx;
54412e9a14SMatthew G. Knepley   PetscErrorCode ierr;
55412e9a14SMatthew G. Knepley 
56412e9a14SMatthew G. Knepley   ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr;
57412e9a14SMatthew G. Knepley   ierr = ProcessOptions(PETSC_COMM_WORLD, &ctx);CHKERRQ(ierr);
58412e9a14SMatthew G. Knepley   ierr = CreateMesh(PETSC_COMM_WORLD, &ctx, &dm);CHKERRQ(ierr);
59412e9a14SMatthew G. Knepley   ierr = DMDestroy(&dm);CHKERRQ(ierr);
60412e9a14SMatthew G. Knepley   ierr = PetscFinalize();
61412e9a14SMatthew G. Knepley   return ierr;
62412e9a14SMatthew G. Knepley }
63412e9a14SMatthew G. Knepley 
64412e9a14SMatthew G. Knepley /*TEST
65412e9a14SMatthew G. Knepley   test:
66412e9a14SMatthew G. Knepley     suffix: ref_tri
67412e9a14SMatthew G. Knepley     args: -ref_cell triangle -dm_refine 2 -dm_plex_check_all
68412e9a14SMatthew G. Knepley 
69412e9a14SMatthew G. Knepley   test:
70412e9a14SMatthew G. Knepley     suffix: box_tri
71*54fcfd0cSMatthew G. Knepley     requires: triangle
72412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
73412e9a14SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -dm_refine 2 -dm_plex_check_all
74412e9a14SMatthew G. Knepley 
75412e9a14SMatthew G. Knepley   test:
76412e9a14SMatthew G. Knepley     suffix: ref_quad
77412e9a14SMatthew G. Knepley     args: -ref_cell quadrilateral -dm_refine 2 -dm_plex_check_all
78412e9a14SMatthew G. Knepley 
79412e9a14SMatthew G. Knepley   test:
80412e9a14SMatthew G. Knepley     suffix: box_quad
81412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
82412e9a14SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all
83412e9a14SMatthew G. Knepley 
84412e9a14SMatthew G. Knepley   test:
85412e9a14SMatthew G. Knepley     suffix: ref_tet
86412e9a14SMatthew G. Knepley     args: -ref_cell tetrahedron -dm_refine 2 -dm_plex_check_all
87412e9a14SMatthew G. Knepley 
88412e9a14SMatthew G. Knepley   test:
89412e9a14SMatthew G. Knepley     suffix: box_tet
90*54fcfd0cSMatthew G. Knepley     requires: ctetgen
91412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
92412e9a14SMatthew G. Knepley     args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_refine 2 -dm_plex_check_all
93412e9a14SMatthew G. Knepley 
94412e9a14SMatthew G. Knepley   test:
95412e9a14SMatthew G. Knepley     suffix: ref_hex
96412e9a14SMatthew G. Knepley     args: -ref_cell hexahedron -simplex 0 -dm_refine 2 -dm_plex_check_all
97412e9a14SMatthew G. Knepley 
98412e9a14SMatthew G. Knepley   test:
99412e9a14SMatthew G. Knepley     suffix: box_hex
100412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
101412e9a14SMatthew G. Knepley     args: -dim 3 -dm_plex_box_faces 3,3,3 -simplex 0 -dm_refine 2 -dm_plex_check_all
102412e9a14SMatthew G. Knepley 
103412e9a14SMatthew G. Knepley   test:
104412e9a14SMatthew G. Knepley     suffix: ref_trip
105*54fcfd0cSMatthew G. Knepley     args: -ref_cell triangular_prism -dm_refine 2 -dm_plex_check_all
106412e9a14SMatthew G. Knepley 
107412e9a14SMatthew G. Knepley   test:
108412e9a14SMatthew G. Knepley     suffix: ref_tquad
109*54fcfd0cSMatthew G. Knepley     args: -ref_cell tensor_quad -dm_refine 2 -dm_plex_check_all
110412e9a14SMatthew G. Knepley 
111412e9a14SMatthew G. Knepley   test:
112412e9a14SMatthew G. Knepley     suffix: ref_ttrip
113*54fcfd0cSMatthew G. Knepley     args: -ref_cell tensor_triangular_prism -dm_refine 2 -dm_plex_check_all
114412e9a14SMatthew G. Knepley 
115412e9a14SMatthew G. Knepley   test:
116412e9a14SMatthew G. Knepley     suffix: ref_tquadp
117*54fcfd0cSMatthew G. Knepley     args: -ref_cell tensor_quadrilateral_prism -dm_refine 2 -dm_plex_check_all
118412e9a14SMatthew G. Knepley 
119412e9a14SMatthew G. Knepley   test:
120412e9a14SMatthew G. Knepley     suffix: ref_tri_tohex
121412e9a14SMatthew G. Knepley     args: -ref_cell triangle -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
122412e9a14SMatthew G. Knepley 
123412e9a14SMatthew G. Knepley   test:
124412e9a14SMatthew G. Knepley     suffix: box_tri_tohex
125*54fcfd0cSMatthew G. Knepley     requires: triangle
126412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
127412e9a14SMatthew G. Knepley     args: -dm_plex_box_faces 3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
128412e9a14SMatthew G. Knepley 
129412e9a14SMatthew G. Knepley   test:
130412e9a14SMatthew G. Knepley     suffix: ref_tet_tohex
131412e9a14SMatthew G. Knepley     args: -ref_cell tetrahedron -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
132412e9a14SMatthew G. Knepley 
133412e9a14SMatthew G. Knepley   test:
134412e9a14SMatthew G. Knepley     suffix: box_tet_tohex
135*54fcfd0cSMatthew G. Knepley     requires: ctetgen
136412e9a14SMatthew G. Knepley     nsize: {{1 3 5}}
137412e9a14SMatthew G. Knepley     args: -dim 3 -dm_plex_box_faces 3,3,3 -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
138412e9a14SMatthew G. Knepley 
139412e9a14SMatthew G. Knepley   test:
140412e9a14SMatthew G. Knepley     suffix: ref_trip_tohex
141*54fcfd0cSMatthew G. Knepley     args: -ref_cell triangular_prism -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
142412e9a14SMatthew G. Knepley 
143412e9a14SMatthew G. Knepley   test:
144412e9a14SMatthew G. Knepley     suffix: ref_ttrip_tohex
145*54fcfd0cSMatthew G. Knepley     args: -ref_cell tensor_triangular_prism -dm_plex_cell_refiner tohex -dm_refine 2 -dm_plex_check_all
146412e9a14SMatthew G. Knepley 
147412e9a14SMatthew G. Knepley TEST*/
148