1 /*
2 Demonstrates creating domain decomposition DAs and how to shuffle around data between the two
3 */
4
5 #include <petscdm.h>
6 #include <petscdmda.h>
7
8 static char help[] = "Test for DMDA with overlap.\n\n";
9
main(int argc,char ** argv)10 int main(int argc, char **argv)
11 {
12 DM da;
13
14 PetscFunctionBeginUser;
15 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
16 /* Build of the DMDA -- 1D -- boundary_none */
17 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "1D -- DM_BOUNDARY_NONE\n"));
18 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
19 PetscCall(DMSetDimension(da, 1));
20 PetscCall(DMDASetSizes(da, 8, 1, 1));
21 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE));
22 PetscCall(DMDASetDof(da, 1));
23 PetscCall(DMDASetStencilWidth(da, 1));
24 PetscCall(DMDASetOverlap(da, 1, 1, 1));
25 PetscCall(DMSetFromOptions(da));
26 PetscCall(DMSetOptionsPrefix(da, "n1d_"));
27 PetscCall(DMSetFromOptions(da));
28 PetscCall(DMSetUp(da));
29 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
30 PetscCall(DMDestroy(&da));
31
32 /* Build of the DMDA -- 1D -- boundary_ghosted */
33 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "1D -- DM_BOUNDARY_GHOSTED\n"));
34 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
35 PetscCall(DMSetDimension(da, 1));
36 PetscCall(DMDASetSizes(da, 8, 1, 1));
37 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED));
38 PetscCall(DMDASetDof(da, 2));
39 PetscCall(DMDASetStencilWidth(da, 1));
40 PetscCall(DMDASetOverlap(da, 1, 1, 1));
41 PetscCall(DMSetFromOptions(da));
42 PetscCall(DMSetOptionsPrefix(da, "g1d_"));
43 PetscCall(DMSetFromOptions(da));
44 PetscCall(DMSetUp(da));
45 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
46 PetscCall(DMDestroy(&da));
47
48 /* Build of the DMDA -- 1D -- boundary_periodic */
49 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "1D -- DM_BOUNDARY_PERIODIC\n"));
50 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
51 PetscCall(DMSetDimension(da, 1));
52 PetscCall(DMDASetSizes(da, 8, 1, 1));
53 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC));
54 PetscCall(DMDASetDof(da, 2));
55 PetscCall(DMDASetStencilWidth(da, 1));
56 PetscCall(DMDASetOverlap(da, 1, 1, 1));
57 PetscCall(DMSetFromOptions(da));
58 PetscCall(DMSetOptionsPrefix(da, "p1d_"));
59 PetscCall(DMSetFromOptions(da));
60 PetscCall(DMSetUp(da));
61 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
62 PetscCall(DMDestroy(&da));
63
64 /* Build of the DMDA -- 2D -- boundary_none */
65 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "2D -- DM_BOUNDARY_NONE\n"));
66 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
67 PetscCall(DMSetDimension(da, 2));
68 PetscCall(DMDASetSizes(da, 8, 8, 1));
69 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE));
70 PetscCall(DMDASetDof(da, 2));
71 PetscCall(DMDASetStencilWidth(da, 1));
72 PetscCall(DMDASetOverlap(da, 1, 1, 1));
73 PetscCall(DMSetFromOptions(da));
74 PetscCall(DMSetOptionsPrefix(da, "n2d_"));
75 PetscCall(DMSetFromOptions(da));
76 PetscCall(DMSetUp(da));
77 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
78 PetscCall(DMDestroy(&da));
79
80 /* Build of the DMDA -- 2D -- boundary_ghosted */
81 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "2D -- DM_BOUNDARY_GHOSTED\n"));
82 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
83 PetscCall(DMSetDimension(da, 2));
84 PetscCall(DMDASetSizes(da, 8, 8, 1));
85 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED));
86 PetscCall(DMDASetDof(da, 2));
87 PetscCall(DMDASetStencilWidth(da, 1));
88 PetscCall(DMDASetOverlap(da, 1, 1, 1));
89 PetscCall(DMSetFromOptions(da));
90 PetscCall(DMSetOptionsPrefix(da, "g2d_"));
91 PetscCall(DMSetFromOptions(da));
92 PetscCall(DMSetUp(da));
93 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
94 PetscCall(DMDestroy(&da));
95
96 /* Build of the DMDA -- 2D -- boundary_periodic */
97 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "2D -- DM_BOUNDARY_PERIODIC\n"));
98 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
99 PetscCall(DMSetDimension(da, 2));
100 PetscCall(DMDASetSizes(da, 8, 8, 1));
101 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC));
102 PetscCall(DMDASetDof(da, 2));
103 PetscCall(DMDASetStencilWidth(da, 1));
104 PetscCall(DMDASetOverlap(da, 1, 1, 1));
105 PetscCall(DMSetFromOptions(da));
106 PetscCall(DMSetOptionsPrefix(da, "p2d_"));
107 PetscCall(DMSetFromOptions(da));
108 PetscCall(DMSetUp(da));
109 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
110 PetscCall(DMDestroy(&da));
111
112 /* Build of the DMDA -- 3D -- boundary_none */
113 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "3D -- DM_BOUNDARY_NONE\n"));
114 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
115 PetscCall(DMSetDimension(da, 3));
116 PetscCall(DMDASetSizes(da, 8, 8, 8));
117 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE));
118 PetscCall(DMDASetDof(da, 2));
119 PetscCall(DMDASetStencilWidth(da, 1));
120 PetscCall(DMDASetOverlap(da, 1, 1, 1));
121 PetscCall(DMSetFromOptions(da));
122 PetscCall(DMSetOptionsPrefix(da, "n3d_"));
123 PetscCall(DMSetFromOptions(da));
124 PetscCall(DMSetUp(da));
125 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
126 PetscCall(DMDestroy(&da));
127
128 /* Build of the DMDA -- 3D -- boundary_ghosted */
129 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "3D -- DM_BOUNDARY_GHOSTED\n"));
130 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
131 PetscCall(DMSetDimension(da, 3));
132 PetscCall(DMDASetSizes(da, 8, 8, 8));
133 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED));
134 PetscCall(DMDASetDof(da, 2));
135 PetscCall(DMDASetStencilWidth(da, 1));
136 PetscCall(DMDASetOverlap(da, 1, 1, 1));
137 PetscCall(DMSetFromOptions(da));
138 PetscCall(DMSetOptionsPrefix(da, "g3d_"));
139 PetscCall(DMSetFromOptions(da));
140 PetscCall(DMSetUp(da));
141 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
142 PetscCall(DMDestroy(&da));
143
144 /* Build of the DMDA -- 3D -- boundary_periodic */
145 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "3D -- DM_BOUNDARY_PERIODIC\n"));
146 PetscCall(DMDACreate(PETSC_COMM_WORLD, &da));
147 PetscCall(DMSetDimension(da, 3));
148 PetscCall(DMDASetSizes(da, 8, 8, 8));
149 PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC));
150 PetscCall(DMDASetDof(da, 2));
151 PetscCall(DMDASetStencilWidth(da, 1));
152 PetscCall(DMDASetOverlap(da, 1, 1, 1));
153 PetscCall(DMSetFromOptions(da));
154 PetscCall(DMSetOptionsPrefix(da, "p3d_"));
155 PetscCall(DMSetFromOptions(da));
156 PetscCall(DMSetUp(da));
157 PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
158 PetscCall(DMDestroy(&da));
159
160 /* test moving data in and out */
161 PetscCall(PetscFinalize());
162 return 0;
163 }
164
165 /*TEST
166
167 test:
168
169 TEST*/
170