Actual source code: ex17.c
1: static char help[] = "Test DMStag IS computation\n\n";
3: #include <petscdm.h>
4: #include <petscdmstag.h>
6: int main(int argc, char **argv)
7: {
8: DM dm;
9: PetscInt dim, dof0, dof1, dof2, dof3;
10: PetscBool flg;
12: /* Create a DMStag object */
14: PetscInitialize(&argc, &argv, (char *)0, help);
15: PetscOptionsGetInt(NULL, NULL, "-dim", &dim, &flg);
16: if (!flg) {
17: PetscPrintf(PETSC_COMM_WORLD, "Supply -dim option\n");
18: return 1;
19: }
20: if (dim == 1) {
21: DMStagCreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, 8, 1, 1, DMSTAG_STENCIL_BOX, 1, NULL, &dm);
22: } else if (dim == 2) {
23: DMStagCreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 4, 6, PETSC_DECIDE, PETSC_DECIDE, 0, 1, 1, DMSTAG_STENCIL_BOX, 1, NULL, NULL, &dm);
24: } else if (dim == 3) {
25: DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 2, 3, 3, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 1, 1, 1, 1, DMSTAG_STENCIL_BOX, 1, NULL, NULL, NULL, &dm);
26: } else {
27: PetscPrintf(PETSC_COMM_WORLD, "Supply -dim option with value 1, 2, or 3\n");
28: return 1;
29: }
30: DMSetFromOptions(dm);
31: DMSetUp(dm);
32: DMView(dm, PETSC_VIEWER_STDOUT_WORLD);
33: DMStagGetDOF(dm, &dof0, &dof1, &dof2, &dof3);
35: {
36: IS is;
37: DMStagStencil s;
38: s.c = 0;
39: s.loc = DMSTAG_ELEMENT;
40: DMStagCreateISFromStencils(dm, 1, &s, &is);
41: PetscPrintf(PETSC_COMM_WORLD, "Test 1\n");
42: ISView(is, PETSC_VIEWER_STDOUT_WORLD);
43: ISDestroy(&is);
44: }
45: {
46: IS is;
47: DMStagStencil s;
48: s.c = 0;
49: s.loc = DMSTAG_RIGHT;
50: DMStagCreateISFromStencils(dm, 1, &s, &is);
51: PetscPrintf(PETSC_COMM_WORLD, "Test 2\n");
52: ISView(is, PETSC_VIEWER_STDOUT_WORLD);
53: ISDestroy(&is);
54: }
55: if (dim > 1) {
56: IS is;
57: DMStagStencil s[2];
58: s[0].c = 0;
59: s[0].loc = DMSTAG_DOWN;
60: s[1].c = 0;
61: s[1].loc = DMSTAG_LEFT;
62: DMStagCreateISFromStencils(dm, 2, s, &is);
63: PetscPrintf(PETSC_COMM_WORLD, "Test 3\n");
64: ISView(is, PETSC_VIEWER_STDOUT_WORLD);
65: ISDestroy(&is);
66: }
67: if (dim == 2 && dof1 > 1) {
68: IS is;
69: DMStagStencil s[5];
70: s[0].c = 0;
71: s[0].loc = DMSTAG_DOWN;
72: s[1].c = 0;
73: s[1].loc = DMSTAG_DOWN; /* redundant, should be ignored */
74: s[2].c = 0;
75: s[2].loc = DMSTAG_LEFT;
76: s[3].c = 0;
77: s[3].loc = DMSTAG_RIGHT; /* redundant, should be ignored */
78: s[4].c = 1;
79: s[4].loc = DMSTAG_RIGHT;
80: DMStagCreateISFromStencils(dm, 5, s, &is);
81: PetscPrintf(PETSC_COMM_WORLD, "Test 4\n");
82: ISView(is, PETSC_VIEWER_STDOUT_WORLD);
83: ISDestroy(&is);
84: }
85: if (dim == 3 && dof0 > 1) {
86: IS is;
87: DMStagStencil s[3];
88: s[0].c = 0;
89: s[0].loc = DMSTAG_BACK_DOWN_LEFT;
90: s[1].c = 0;
91: s[1].loc = DMSTAG_FRONT_UP_RIGHT; /* redundant, should be ignored */
92: s[2].c = 1;
93: s[2].loc = DMSTAG_FRONT_DOWN_RIGHT;
94: DMStagCreateISFromStencils(dm, 3, s, &is);
95: PetscPrintf(PETSC_COMM_WORLD, "Test 5\n");
96: ISView(is, PETSC_VIEWER_STDOUT_WORLD);
97: ISDestroy(&is);
98: }
99: if (dim == 3) {
100: IS is;
101: DMStagStencil s[4];
103: s[0].c = 0;
104: s[0].loc = DMSTAG_ELEMENT;
105: s[1].c = 0;
106: s[1].loc = DMSTAG_BACK_LEFT;
107: s[2].c = 0;
108: s[2].loc = DMSTAG_BACK_DOWN_LEFT;
109: s[3].c = 0;
110: s[3].loc = DMSTAG_DOWN;
111: DMStagCreateISFromStencils(dm, 4, s, &is);
112: PetscPrintf(PETSC_COMM_WORLD, "Test 6\n");
113: ISView(is, PETSC_VIEWER_STDOUT_WORLD);
114: ISDestroy(&is);
115: }
117: DMDestroy(&dm);
118: PetscFinalize();
119: return 0;
120: }
122: /*TEST
124: test:
125: suffix: 1
126: nsize: 1
127: args: -dim 2
129: test:
130: suffix: 2
131: nsize: 1
132: args: -dim 2
134: test:
135: suffix: 3
136: nsize: 2
137: args: -dim 2 -stag_dof_1 2
139: test:
140: suffix: 4
141: nsize: 1
142: args: -dim 3 -stag_dof_0 3
144: test:
145: suffix: 5
146: nsize: 2
147: args: -dim 3 -stag_dof_0 2
149: test:
150: suffix: 6
151: nsize: 1
152: args: -dim 1
154: test:
155: suffix: 7
156: nsize: 2
157: args: -dim 1
159: TEST*/