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