Actual source code: ex19.c

  1: /*
  2:      Demonstrates creating domain decomposition DAs and how to shuffle around data between the two
  3:  */

  5: #include <petscdm.h>
  6: #include <petscdmda.h>

  8: static char help[] = "Test for DMDA with overlap.\n\n";

 10: int main(int argc, char **argv)
 11: {
 12:   DM da;

 15:   PetscInitialize(&argc, &argv, (char *)0, help);
 16:   /* Build of the DMDA -- 1D -- boundary_none */
 17:   PetscPrintf(PETSC_COMM_WORLD, "1D -- DM_BOUNDARY_NONE\n");
 18:   DMDACreate(PETSC_COMM_WORLD, &da);
 19:   DMSetDimension(da, 1);
 20:   DMDASetSizes(da, 8, 1, 1);
 21:   DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE);
 22:   DMDASetDof(da, 1);
 23:   DMDASetStencilWidth(da, 1);
 24:   DMDASetOverlap(da, 1, 1, 1);
 25:   DMSetFromOptions(da);
 26:   DMSetOptionsPrefix(da, "n1d_");
 27:   DMSetFromOptions(da);
 28:   DMSetUp(da);
 29:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
 30:   DMDestroy(&da);

 32:   /* Build of the DMDA -- 1D -- boundary_ghosted */
 33:   PetscPrintf(PETSC_COMM_WORLD, "1D -- DM_BOUNDARY_GHOSTED\n");
 34:   DMDACreate(PETSC_COMM_WORLD, &da);
 35:   DMSetDimension(da, 1);
 36:   DMDASetSizes(da, 8, 1, 1);
 37:   DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED);
 38:   DMDASetDof(da, 2);
 39:   DMDASetStencilWidth(da, 1);
 40:   DMDASetOverlap(da, 1, 1, 1);
 41:   DMSetFromOptions(da);
 42:   DMSetOptionsPrefix(da, "g1d_");
 43:   DMSetFromOptions(da);
 44:   DMSetUp(da);
 45:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
 46:   DMDestroy(&da);

 48:   /* Build of the DMDA -- 1D -- boundary_periodic */
 49:   PetscPrintf(PETSC_COMM_WORLD, "1D -- DM_BOUNDARY_PERIODIC\n");
 50:   DMDACreate(PETSC_COMM_WORLD, &da);
 51:   DMSetDimension(da, 1);
 52:   DMDASetSizes(da, 8, 1, 1);
 53:   DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC);
 54:   DMDASetDof(da, 2);
 55:   DMDASetStencilWidth(da, 1);
 56:   DMDASetOverlap(da, 1, 1, 1);
 57:   DMSetFromOptions(da);
 58:   DMSetOptionsPrefix(da, "p1d_");
 59:   DMSetFromOptions(da);
 60:   DMSetUp(da);
 61:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
 62:   DMDestroy(&da);

 64:   /* Build of the DMDA -- 2D -- boundary_none */
 65:   PetscPrintf(PETSC_COMM_WORLD, "2D -- DM_BOUNDARY_NONE\n");
 66:   DMDACreate(PETSC_COMM_WORLD, &da);
 67:   DMSetDimension(da, 2);
 68:   DMDASetSizes(da, 8, 8, 1);
 69:   DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE);
 70:   DMDASetDof(da, 2);
 71:   DMDASetStencilWidth(da, 1);
 72:   DMDASetOverlap(da, 1, 1, 1);
 73:   DMSetFromOptions(da);
 74:   DMSetOptionsPrefix(da, "n2d_");
 75:   DMSetFromOptions(da);
 76:   DMSetUp(da);
 77:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
 78:   DMDestroy(&da);

 80:   /* Build of the DMDA -- 2D -- boundary_ghosted */
 81:   PetscPrintf(PETSC_COMM_WORLD, "2D -- DM_BOUNDARY_GHOSTED\n");
 82:   DMDACreate(PETSC_COMM_WORLD, &da);
 83:   DMSetDimension(da, 2);
 84:   DMDASetSizes(da, 8, 8, 1);
 85:   DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED);
 86:   DMDASetDof(da, 2);
 87:   DMDASetStencilWidth(da, 1);
 88:   DMDASetOverlap(da, 1, 1, 1);
 89:   DMSetFromOptions(da);
 90:   DMSetOptionsPrefix(da, "g2d_");
 91:   DMSetFromOptions(da);
 92:   DMSetUp(da);
 93:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
 94:   DMDestroy(&da);

 96:   /* Build of the DMDA -- 2D -- boundary_periodic */
 97:   PetscPrintf(PETSC_COMM_WORLD, "2D -- DM_BOUNDARY_PERIODIC\n");
 98:   DMDACreate(PETSC_COMM_WORLD, &da);
 99:   DMSetDimension(da, 2);
100:   DMDASetSizes(da, 8, 8, 1);
101:   DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC);
102:   DMDASetDof(da, 2);
103:   DMDASetStencilWidth(da, 1);
104:   DMDASetOverlap(da, 1, 1, 1);
105:   DMSetFromOptions(da);
106:   DMSetOptionsPrefix(da, "p2d_");
107:   DMSetFromOptions(da);
108:   DMSetUp(da);
109:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
110:   DMDestroy(&da);

112:   /* Build of the DMDA -- 3D -- boundary_none */
113:   PetscPrintf(PETSC_COMM_WORLD, "3D -- DM_BOUNDARY_NONE\n");
114:   DMDACreate(PETSC_COMM_WORLD, &da);
115:   DMSetDimension(da, 3);
116:   DMDASetSizes(da, 8, 8, 8);
117:   DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE);
118:   DMDASetDof(da, 2);
119:   DMDASetStencilWidth(da, 1);
120:   DMDASetOverlap(da, 1, 1, 1);
121:   DMSetFromOptions(da);
122:   DMSetOptionsPrefix(da, "n3d_");
123:   DMSetFromOptions(da);
124:   DMSetUp(da);
125:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
126:   DMDestroy(&da);

128:   /* Build of the DMDA -- 3D -- boundary_ghosted */
129:   PetscPrintf(PETSC_COMM_WORLD, "3D -- DM_BOUNDARY_GHOSTED\n");
130:   DMDACreate(PETSC_COMM_WORLD, &da);
131:   DMSetDimension(da, 3);
132:   DMDASetSizes(da, 8, 8, 8);
133:   DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED);
134:   DMDASetDof(da, 2);
135:   DMDASetStencilWidth(da, 1);
136:   DMDASetOverlap(da, 1, 1, 1);
137:   DMSetFromOptions(da);
138:   DMSetOptionsPrefix(da, "g3d_");
139:   DMSetFromOptions(da);
140:   DMSetUp(da);
141:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
142:   DMDestroy(&da);

144:   /* Build of the DMDA -- 3D -- boundary_periodic */
145:   PetscPrintf(PETSC_COMM_WORLD, "3D -- DM_BOUNDARY_PERIODIC\n");
146:   DMDACreate(PETSC_COMM_WORLD, &da);
147:   DMSetDimension(da, 3);
148:   DMDASetSizes(da, 8, 8, 8);
149:   DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC);
150:   DMDASetDof(da, 2);
151:   DMDASetStencilWidth(da, 1);
152:   DMDASetOverlap(da, 1, 1, 1);
153:   DMSetFromOptions(da);
154:   DMSetOptionsPrefix(da, "p3d_");
155:   DMSetFromOptions(da);
156:   DMSetUp(da);
157:   DMView(da, PETSC_VIEWER_STDOUT_WORLD);
158:   DMDestroy(&da);

160:   /* test moving data in and out */
161:   PetscFinalize();
162:   return 0;
163: }

165: /*TEST

167:    test:

169: TEST*/