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