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*9566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 15c4762a1bSJed Brown /* Build of the DMDA -- 1D -- boundary_none */ 16*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_NONE\n")); 17*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 18*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 1)); 19*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 1, 1)); 20*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE)); 21*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 1)); 22*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 23*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 24*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 25*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"n1d_")); 26*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 27*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 28*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 29*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 30c4762a1bSJed Brown 31c4762a1bSJed Brown /* Build of the DMDA -- 1D -- boundary_ghosted */ 32*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_GHOSTED\n")); 33*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 34*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 1)); 35*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 1, 1)); 36*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED)); 37*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 38*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 39*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 40*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 41*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"g1d_")); 42*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 43*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 44*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 45*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 46c4762a1bSJed Brown 47c4762a1bSJed Brown /* Build of the DMDA -- 1D -- boundary_periodic */ 48*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"1D -- DM_BOUNDARY_PERIODIC\n")); 49*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 50*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 1)); 51*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 1, 1)); 52*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC)); 53*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 54*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 55*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 56*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 57*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"p1d_")); 58*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 59*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 60*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 61*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 62c4762a1bSJed Brown 63c4762a1bSJed Brown /* Build of the DMDA -- 2D -- boundary_none */ 64*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_NONE\n")); 65*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 66*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 2)); 67*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 1)); 68*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE)); 69*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 70*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 71*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 72*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 73*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"n2d_")); 74*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 75*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 76*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 77*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 78c4762a1bSJed Brown 79c4762a1bSJed Brown /* Build of the DMDA -- 2D -- boundary_ghosted */ 80*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_GHOSTED\n")); 81*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 82*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 2)); 83*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 1)); 84*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED)); 85*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 86*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 87*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 88*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 89*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"g2d_")); 90*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 91*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 92*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 93*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 94c4762a1bSJed Brown 95c4762a1bSJed Brown /* Build of the DMDA -- 2D -- boundary_periodic */ 96*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"2D -- DM_BOUNDARY_PERIODIC\n")); 97*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 98*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 2)); 99*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 1)); 100*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC)); 101*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 102*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 103*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 104*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 105*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"p2d_")); 106*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 107*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 108*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 109*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 110c4762a1bSJed Brown 111c4762a1bSJed Brown /* Build of the DMDA -- 3D -- boundary_none */ 112*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_NONE\n")); 113*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 114*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 3)); 115*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 8)); 116*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE)); 117*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 118*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 119*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 120*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 121*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"n3d_")); 122*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 123*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 124*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 125*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 126c4762a1bSJed Brown 127c4762a1bSJed Brown /* Build of the DMDA -- 3D -- boundary_ghosted */ 128*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_GHOSTED\n")); 129*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 130*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 3)); 131*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 8)); 132*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED)); 133*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 134*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 135*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 136*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 137*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"g3d_")); 138*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 139*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 140*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 141*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 142c4762a1bSJed Brown 143c4762a1bSJed Brown /* Build of the DMDA -- 3D -- boundary_periodic */ 144*9566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"3D -- DM_BOUNDARY_PERIODIC\n")); 145*9566063dSJacob Faibussowitsch PetscCall(DMDACreate(PETSC_COMM_WORLD, &da)); 146*9566063dSJacob Faibussowitsch PetscCall(DMSetDimension(da, 3)); 147*9566063dSJacob Faibussowitsch PetscCall(DMDASetSizes(da, 8, 8, 8)); 148*9566063dSJacob Faibussowitsch PetscCall(DMDASetBoundaryType(da, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC)); 149*9566063dSJacob Faibussowitsch PetscCall(DMDASetDof(da, 2)); 150*9566063dSJacob Faibussowitsch PetscCall(DMDASetStencilWidth(da, 1)); 151*9566063dSJacob Faibussowitsch PetscCall(DMDASetOverlap(da,1,1,1)); 152*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 153*9566063dSJacob Faibussowitsch PetscCall(DMSetOptionsPrefix(da,"p3d_")); 154*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da)); 155*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(da)); 156*9566063dSJacob Faibussowitsch PetscCall(DMView(da,PETSC_VIEWER_STDOUT_WORLD)); 157*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da)); 158c4762a1bSJed Brown 159c4762a1bSJed Brown /* test moving data in and out */ 160*9566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 161b122ec5aSJacob Faibussowitsch return 0; 162c4762a1bSJed Brown } 163c4762a1bSJed Brown 164c4762a1bSJed Brown /*TEST 165c4762a1bSJed Brown 166c4762a1bSJed Brown test: 167c4762a1bSJed Brown 168c4762a1bSJed Brown TEST*/ 169