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*327415f7SBarry Smith PetscFunctionBeginUser; 159566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 16c4762a1bSJed Brown /* Build of the DMDA -- 1D -- boundary_none */ 179566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_NONE\n")); 189566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 199566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 1)); 209566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 1, 1)); 219566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE)); 229566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 1)); 239566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 249566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 259566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 269566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"n1d_")); 279566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 289566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 299566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 309566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 31c4762a1bSJed Brown 32c4762a1bSJed Brown /* Build of the DMDA -- 1D -- boundary_ghosted */ 339566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_GHOSTED\n")); 349566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 359566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 1)); 369566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 1, 1)); 379566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED)); 389566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 399566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 409566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 419566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 429566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"g1d_")); 439566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 449566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 459566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 469566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 47c4762a1bSJed Brown 48c4762a1bSJed Brown /* Build of the DMDA -- 1D -- boundary_periodic */ 499566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_PERIODIC\n")); 509566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 519566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 1)); 529566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 1, 1)); 539566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC)); 549566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 559566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 569566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 579566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 589566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"p1d_")); 599566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 609566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 619566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 629566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 63c4762a1bSJed Brown 64c4762a1bSJed Brown /* Build of the DMDA -- 2D -- boundary_none */ 659566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_NONE\n")); 669566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 679566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 2)); 689566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 1)); 699566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE)); 709566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 719566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 729566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 739566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 749566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"n2d_")); 759566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 769566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 779566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 789566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 79c4762a1bSJed Brown 80c4762a1bSJed Brown /* Build of the DMDA -- 2D -- boundary_ghosted */ 819566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_GHOSTED\n")); 829566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 839566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 2)); 849566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 1)); 859566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED)); 869566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 879566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 889566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 899566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 909566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"g2d_")); 919566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 929566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 939566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 949566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 95c4762a1bSJed Brown 96c4762a1bSJed Brown /* Build of the DMDA -- 2D -- boundary_periodic */ 979566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_PERIODIC\n")); 989566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 999566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 2)); 1009566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 1)); 1019566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC)); 1029566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 1039566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 1049566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 1059566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1069566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"p2d_")); 1079566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1089566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 1099566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 1109566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 111c4762a1bSJed Brown 112c4762a1bSJed Brown /* Build of the DMDA -- 3D -- boundary_none */ 1139566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_NONE\n")); 1149566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 1159566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 3)); 1169566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 8)); 1179566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE)); 1189566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 1199566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 1209566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 1219566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1229566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"n3d_")); 1239566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1249566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 1259566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 1269566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 127c4762a1bSJed Brown 128c4762a1bSJed Brown /* Build of the DMDA -- 3D -- boundary_ghosted */ 1299566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_GHOSTED\n")); 1309566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 1319566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 3)); 1329566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 8)); 1339566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED)); 1349566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 1359566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 1369566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 1379566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1389566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"g3d_")); 1399566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1409566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 1419566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 1429566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 143c4762a1bSJed Brown 144c4762a1bSJed Brown /* Build of the DMDA -- 3D -- boundary_periodic */ 1459566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_PERIODIC\n")); 1469566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 1479566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 3)); 1489566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 8)); 1499566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC)); 1509566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 1519566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 1529566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 1539566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1549566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"p3d_")); 1559566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 1569566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 1579566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 1589566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 159c4762a1bSJed Brown 160c4762a1bSJed Brown /* test moving data in and out */ 1619566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 162b122ec5aSJacob Faibussowitsch return 0; 163c4762a1bSJed Brown } 164c4762a1bSJed Brown 165c4762a1bSJed Brown /*TEST 166c4762a1bSJed Brown 167c4762a1bSJed Brown test: 168c4762a1bSJed Brown 169c4762a1bSJed Brown TEST*/ 170