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;

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

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

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

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

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

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

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

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

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

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

164: /*TEST

166:    test:

168: TEST*/