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