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