1c4762a1bSJed Brown static char help[] = "Make a 2D grid of patches and view them\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown /* 4c4762a1bSJed Brown Serial Test 5c4762a1bSJed Brown Parallel Test where all zooms are serials 6c4762a1bSJed Brown Parallel Test where zooms are parallel 7c4762a1bSJed Brown 8c4762a1bSJed Brown Return DMPatch from Zoom 9c4762a1bSJed Brown Override refine from DMPatch to split cells 10c4762a1bSJed Brown */ 11c4762a1bSJed Brown #include <petscdmpatch.h> 12c4762a1bSJed Brown 13c4762a1bSJed Brown typedef struct { 14c4762a1bSJed Brown PetscInt debug; /* The debugging level */ 15c4762a1bSJed Brown PetscInt dim; /* The spatial dimension */ 16c4762a1bSJed Brown MatStencil patchSize; /* Size of patches */ 17c4762a1bSJed Brown MatStencil gridSize; /* Size of patch grid */ 18c4762a1bSJed Brown MatStencil commSize; /* Size of patch comm */ 19c4762a1bSJed Brown } AppCtx; 20c4762a1bSJed Brown 21*9371c9d4SSatish Balay PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options) { 22c4762a1bSJed Brown PetscInt patchSize, commSize, gridSize; 23c4762a1bSJed Brown 24c4762a1bSJed Brown PetscFunctionBegin; 25c4762a1bSJed Brown options->debug = 0; 26c4762a1bSJed Brown options->dim = 2; 27c4762a1bSJed Brown patchSize = 0; 28c4762a1bSJed Brown commSize = 0; 2960c22052SBarry Smith gridSize = 1; 30c4762a1bSJed Brown 31d0609cedSBarry Smith PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH"); 329566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL, 0)); 339566063dSJacob Faibussowitsch PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL, 1, 3)); 349566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL, 0)); 359566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL, 0)); 369566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL, 1)); 37d0609cedSBarry Smith PetscOptionsEnd(); 38c4762a1bSJed Brown 39c4762a1bSJed Brown options->patchSize.i = options->patchSize.j = options->patchSize.k = 1; 40c4762a1bSJed Brown options->commSize.i = options->commSize.j = options->commSize.k = 1; 41c4762a1bSJed Brown options->gridSize.i = options->gridSize.j = options->gridSize.k = 1; 42*9371c9d4SSatish Balay if (options->dim > 0) { 43*9371c9d4SSatish Balay options->patchSize.i = patchSize; 44*9371c9d4SSatish Balay options->commSize.i = commSize; 45*9371c9d4SSatish Balay options->gridSize.i = gridSize; 46*9371c9d4SSatish Balay } 47*9371c9d4SSatish Balay if (options->dim > 1) { 48*9371c9d4SSatish Balay options->patchSize.j = patchSize; 49*9371c9d4SSatish Balay options->commSize.j = commSize; 50*9371c9d4SSatish Balay options->gridSize.j = gridSize; 51*9371c9d4SSatish Balay } 52*9371c9d4SSatish Balay if (options->dim > 2) { 53*9371c9d4SSatish Balay options->patchSize.k = patchSize; 54*9371c9d4SSatish Balay options->commSize.k = commSize; 55*9371c9d4SSatish Balay options->gridSize.k = gridSize; 56*9371c9d4SSatish Balay } 57c4762a1bSJed Brown PetscFunctionReturn(0); 5860c22052SBarry Smith } 59c4762a1bSJed Brown 60*9371c9d4SSatish Balay int main(int argc, char **argv) { 61c4762a1bSJed Brown DM dm; 62c4762a1bSJed Brown AppCtx user; /* user-defined work context */ 63c4762a1bSJed Brown 64327415f7SBarry Smith PetscFunctionBeginUser; 659566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 669566063dSJacob Faibussowitsch PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user)); 679566063dSJacob Faibussowitsch PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm)); 689566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm, "Patch Mesh")); 699566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm)); 709566063dSJacob Faibussowitsch PetscCall(DMSetUp(dm)); 719566063dSJacob Faibussowitsch PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD)); 729566063dSJacob Faibussowitsch PetscCall(DMPatchSolve(dm)); 739566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 749566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 75b122ec5aSJacob Faibussowitsch return 0; 76c4762a1bSJed Brown } 7760c22052SBarry Smith 7860c22052SBarry Smith /*TEST 7960c22052SBarry Smith 8060c22052SBarry Smith test: 8160c22052SBarry Smith 8260c22052SBarry Smith TEST*/ 83