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); 345f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0)); 355f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3)); 365f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0)); 375f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0)); 385f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL,1)); 391e1ea65dSPierre 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 55*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc, &argv, NULL, help)); 565f80ce2aSJacob Faibussowitsch CHKERRQ(ProcessOptions(PETSC_COMM_WORLD, &user)); 575f80ce2aSJacob Faibussowitsch CHKERRQ(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm)); 585f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject) dm, "Patch Mesh")); 595f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dm)); 605f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(dm)); 615f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(dm, PETSC_VIEWER_STDOUT_WORLD)); 625f80ce2aSJacob Faibussowitsch CHKERRQ(DMPatchSolve(dm)); 635f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 64*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 65*b122ec5aSJacob Faibussowitsch return 0; 66c4762a1bSJed Brown } 6760c22052SBarry Smith 6860c22052SBarry Smith /*TEST 6960c22052SBarry Smith 7060c22052SBarry Smith test: 7160c22052SBarry Smith 7260c22052SBarry Smith TEST*/ 73