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