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 33c4762a1bSJed Brown ierr = PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH");CHKERRQ(ierr); 34c4762a1bSJed Brown ierr = PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0);CHKERRQ(ierr); 35c4762a1bSJed Brown ierr = PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3);CHKERRQ(ierr); 36c4762a1bSJed Brown ierr = PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0);CHKERRQ(ierr); 37c4762a1bSJed Brown ierr = PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0);CHKERRQ(ierr); 38c4762a1bSJed Brown ierr = PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL,1);CHKERRQ(ierr); 39*1e1ea65dSPierre Jolivet ierr = PetscOptionsEnd();CHKERRQ(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 PetscErrorCode ierr; 55c4762a1bSJed Brown 56c4762a1bSJed Brown ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 57c4762a1bSJed Brown ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr); 58c4762a1bSJed Brown ierr = DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm);CHKERRQ(ierr); 59c4762a1bSJed Brown ierr = PetscObjectSetName((PetscObject) dm, "Patch Mesh");CHKERRQ(ierr); 60c4762a1bSJed Brown ierr = DMSetFromOptions(dm);CHKERRQ(ierr); 61c4762a1bSJed Brown ierr = DMSetUp(dm);CHKERRQ(ierr); 62c4762a1bSJed Brown ierr = DMView(dm, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 63c4762a1bSJed Brown ierr = DMPatchSolve(dm);CHKERRQ(ierr); 64c4762a1bSJed Brown ierr = DMDestroy(&dm);CHKERRQ(ierr); 65c4762a1bSJed Brown ierr = PetscFinalize(); 66c4762a1bSJed Brown return ierr; 67c4762a1bSJed Brown } 6860c22052SBarry Smith 6960c22052SBarry Smith /*TEST 7060c22052SBarry Smith 7160c22052SBarry Smith test: 7260c22052SBarry Smith 7360c22052SBarry Smith TEST*/ 74