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 25c4762a1bSJed Brown PetscFunctionBegin; 26c4762a1bSJed Brown options->debug = 0; 27c4762a1bSJed Brown options->dim = 2; 28c4762a1bSJed Brown patchSize = 0; 29c4762a1bSJed Brown commSize = 0; 3060c22052SBarry Smith gridSize = 1; 31c4762a1bSJed Brown 32d0609cedSBarry Smith PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH"); 339566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0)); 349566063dSJacob Faibussowitsch PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3)); 359566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0)); 369566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0)); 379566063dSJacob Faibussowitsch PetscCall(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL,1)); 38d0609cedSBarry Smith PetscOptionsEnd(); 39c4762a1bSJed Brown 40c4762a1bSJed Brown options->patchSize.i = options->patchSize.j = options->patchSize.k = 1; 41c4762a1bSJed Brown options->commSize.i = options->commSize.j = options->commSize.k = 1; 42c4762a1bSJed Brown options->gridSize.i = options->gridSize.j = options->gridSize.k = 1; 43c4762a1bSJed Brown if (options->dim > 0) {options->patchSize.i = patchSize; options->commSize.i = commSize; options->gridSize.i = gridSize;} 44c4762a1bSJed Brown if (options->dim > 1) {options->patchSize.j = patchSize; options->commSize.j = commSize; options->gridSize.j = gridSize;} 45c4762a1bSJed Brown if (options->dim > 2) {options->patchSize.k = patchSize; options->commSize.k = commSize; options->gridSize.k = gridSize;} 46c4762a1bSJed Brown PetscFunctionReturn(0); 4760c22052SBarry Smith } 48c4762a1bSJed Brown 49c4762a1bSJed Brown int main(int argc, char **argv) 50c4762a1bSJed Brown { 51c4762a1bSJed Brown DM dm; 52c4762a1bSJed Brown AppCtx user; /* user-defined work context */ 53c4762a1bSJed Brown 54*327415f7SBarry Smith PetscFunctionBeginUser; 559566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 569566063dSJacob Faibussowitsch PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user)); 579566063dSJacob Faibussowitsch PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm)); 589566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject) dm, "Patch Mesh")); 599566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm)); 609566063dSJacob Faibussowitsch PetscCall(DMSetUp(dm)); 619566063dSJacob Faibussowitsch PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD)); 629566063dSJacob Faibussowitsch PetscCall(DMPatchSolve(dm)); 639566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 649566063dSJacob 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