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