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 21c4762a1bSJed Brown PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options) 22c4762a1bSJed Brown { 23c4762a1bSJed Brown PetscInt patchSize, commSize, gridSize; 24c4762a1bSJed Brown PetscErrorCode ierr; 25c4762a1bSJed Brown 26c4762a1bSJed Brown PetscFunctionBegin; 27c4762a1bSJed Brown options->debug = 0; 28c4762a1bSJed Brown options->dim = 2; 29c4762a1bSJed Brown patchSize = 0; 30c4762a1bSJed Brown commSize = 0; 3160c22052SBarry Smith gridSize = 1; 32c4762a1bSJed Brown 33*9566063dSJacob Faibussowitsch ierr = PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH");PetscCall(ierr); 34*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0)); 35*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3)); 36*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0)); 37*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0)); 38*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL,1)); 39*9566063dSJacob Faibussowitsch ierr = PetscOptionsEnd();PetscCall(ierr); 40c4762a1bSJed Brown 41c4762a1bSJed Brown options->patchSize.i = options->patchSize.j = options->patchSize.k = 1; 42c4762a1bSJed Brown options->commSize.i = options->commSize.j = options->commSize.k = 1; 43c4762a1bSJed Brown options->gridSize.i = options->gridSize.j = options->gridSize.k = 1; 44c4762a1bSJed Brown if (options->dim > 0) {options->patchSize.i = patchSize; options->commSize.i = commSize; options->gridSize.i = gridSize;} 45c4762a1bSJed Brown if (options->dim > 1) {options->patchSize.j = patchSize; options->commSize.j = commSize; options->gridSize.j = gridSize;} 46c4762a1bSJed Brown if (options->dim > 2) {options->patchSize.k = patchSize; options->commSize.k = commSize; options->gridSize.k = gridSize;} 47c4762a1bSJed Brown PetscFunctionReturn(0); 4860c22052SBarry Smith } 49c4762a1bSJed Brown 50c4762a1bSJed Brown int main(int argc, char **argv) 51c4762a1bSJed Brown { 52c4762a1bSJed Brown DM dm; 53c4762a1bSJed Brown AppCtx user; /* user-defined work context */ 54c4762a1bSJed Brown 55*9566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 56*9566063dSJacob Faibussowitsch PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user)); 57*9566063dSJacob Faibussowitsch PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm)); 58*9566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject) dm, "Patch Mesh")); 59*9566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm)); 60*9566063dSJacob Faibussowitsch PetscCall(DMSetUp(dm)); 61*9566063dSJacob Faibussowitsch PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD)); 62*9566063dSJacob Faibussowitsch PetscCall(DMPatchSolve(dm)); 63*9566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 64*9566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 65b122ec5aSJacob Faibussowitsch return 0; 66c4762a1bSJed Brown } 6760c22052SBarry Smith 6860c22052SBarry Smith /*TEST 6960c22052SBarry Smith 7060c22052SBarry Smith test: 7160c22052SBarry Smith 7260c22052SBarry Smith TEST*/ 73