xref: /petsc/src/dm/tutorials/ex19.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254) !
1c4762a1bSJed Brown /*
2c4762a1bSJed Brown      Demonstrates creating domain decomposition DAs and how to shuffle around data between the two
3c4762a1bSJed Brown  */
4c4762a1bSJed Brown 
5c4762a1bSJed Brown #include <petscdm.h>
6c4762a1bSJed Brown #include <petscdmda.h>
7c4762a1bSJed Brown 
8c4762a1bSJed Brown static char help[] = "Test for DMDA with overlap.\n\n";
9c4762a1bSJed Brown 
10c4762a1bSJed Brown int main(int argc,char **argv)
11c4762a1bSJed Brown {
12c4762a1bSJed Brown   DM             da;
13c4762a1bSJed Brown 
14*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscInitialize(&argc,&argv,(char*)0,help));
15c4762a1bSJed Brown   /* Build of the DMDA -- 1D -- boundary_none */
165f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_NONE\n"));
175f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
185f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 1));
195f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 1, 1));
205f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE));
215f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 1));
225f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
235f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
245f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
255f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"n1d_"));
265f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
275f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
285f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
295f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
30c4762a1bSJed Brown 
31c4762a1bSJed Brown   /* Build of the DMDA -- 1D -- boundary_ghosted */
325f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_GHOSTED\n"));
335f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
345f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 1));
355f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 1, 1));
365f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED));
375f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
385f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
395f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
405f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
415f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"g1d_"));
425f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
435f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
445f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
455f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
46c4762a1bSJed Brown 
47c4762a1bSJed Brown   /* Build of the DMDA -- 1D -- boundary_periodic */
485f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_PERIODIC\n"));
495f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
505f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 1));
515f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 1, 1));
525f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC));
535f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
545f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
555f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
565f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
575f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"p1d_"));
585f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
595f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
605f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
615f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
62c4762a1bSJed Brown 
63c4762a1bSJed Brown   /* Build of the DMDA -- 2D -- boundary_none */
645f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_NONE\n"));
655f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
665f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 2));
675f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 8, 1));
685f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE));
695f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
705f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
715f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
725f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
735f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"n2d_"));
745f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
755f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
765f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
775f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
78c4762a1bSJed Brown 
79c4762a1bSJed Brown   /* Build of the DMDA -- 2D -- boundary_ghosted */
805f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_GHOSTED\n"));
815f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
825f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 2));
835f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 8, 1));
845f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED));
855f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
865f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
875f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
885f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
895f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"g2d_"));
905f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
915f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
925f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
935f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
94c4762a1bSJed Brown 
95c4762a1bSJed Brown   /* Build of the DMDA -- 2D -- boundary_periodic */
965f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_PERIODIC\n"));
975f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
985f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 2));
995f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 8, 1));
1005f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC));
1015f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
1025f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
1035f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
1045f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1055f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"p2d_"));
1065f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1075f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
1085f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
1095f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
110c4762a1bSJed Brown 
111c4762a1bSJed Brown   /* Build of the DMDA -- 3D -- boundary_none */
1125f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_NONE\n"));
1135f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
1145f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 3));
1155f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 8, 8));
1165f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE));
1175f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
1185f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
1195f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
1205f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1215f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"n3d_"));
1225f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1235f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
1245f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
1255f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
126c4762a1bSJed Brown 
127c4762a1bSJed Brown   /* Build of the DMDA -- 3D -- boundary_ghosted */
1285f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_GHOSTED\n"));
1295f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
1305f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 3));
1315f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 8, 8));
1325f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED));
1335f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
1345f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
1355f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
1365f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1375f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"g3d_"));
1385f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1395f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
1405f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
1415f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
142c4762a1bSJed Brown 
143c4762a1bSJed Brown   /* Build of the DMDA -- 3D -- boundary_periodic */
1445f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_PERIODIC\n"));
1455f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDACreate(PETSC_COMM_WORLD, &da));
1465f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetDimension(da, 3));
1475f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetSizes(da, 8, 8, 8));
1485f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC));
1495f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetDof(da, 2));
1505f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetStencilWidth(da, 1));
1515f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDASetOverlap(da,1,1,1));
1525f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1535f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetOptionsPrefix(da,"p3d_"));
1545f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
1555f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
1565f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
1575f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
158c4762a1bSJed Brown 
159c4762a1bSJed Brown   /* test moving data in and out */
160*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscFinalize());
161*b122ec5aSJacob Faibussowitsch   return 0;
162c4762a1bSJed Brown }
163c4762a1bSJed Brown 
164c4762a1bSJed Brown /*TEST
165c4762a1bSJed Brown 
166c4762a1bSJed Brown    test:
167c4762a1bSJed Brown 
168c4762a1bSJed Brown TEST*/
169