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
ProcessOptions(MPI_Comm comm,AppCtx * options)21d71ae5a4SJacob Faibussowitsch PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
22d71ae5a4SJacob Faibussowitsch {
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;
439371c9d4SSatish Balay if (options->dim > 0) {
449371c9d4SSatish Balay options->patchSize.i = patchSize;
459371c9d4SSatish Balay options->commSize.i = commSize;
469371c9d4SSatish Balay options->gridSize.i = gridSize;
479371c9d4SSatish Balay }
489371c9d4SSatish Balay if (options->dim > 1) {
499371c9d4SSatish Balay options->patchSize.j = patchSize;
509371c9d4SSatish Balay options->commSize.j = commSize;
519371c9d4SSatish Balay options->gridSize.j = gridSize;
529371c9d4SSatish Balay }
539371c9d4SSatish Balay if (options->dim > 2) {
549371c9d4SSatish Balay options->patchSize.k = patchSize;
559371c9d4SSatish Balay options->commSize.k = commSize;
569371c9d4SSatish Balay options->gridSize.k = gridSize;
579371c9d4SSatish Balay }
58*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
5960c22052SBarry Smith }
60c4762a1bSJed Brown
main(int argc,char ** argv)61d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
62d71ae5a4SJacob Faibussowitsch {
63c4762a1bSJed Brown DM dm;
64c4762a1bSJed Brown AppCtx user; /* user-defined work context */
65c4762a1bSJed Brown
66327415f7SBarry Smith PetscFunctionBeginUser;
679566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help));
689566063dSJacob Faibussowitsch PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
699566063dSJacob Faibussowitsch PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm));
709566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm, "Patch Mesh"));
719566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm));
729566063dSJacob Faibussowitsch PetscCall(DMSetUp(dm));
739566063dSJacob Faibussowitsch PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
749566063dSJacob Faibussowitsch PetscCall(DMPatchSolve(dm));
759566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm));
769566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
77b122ec5aSJacob Faibussowitsch return 0;
78c4762a1bSJed Brown }
7960c22052SBarry Smith
8060c22052SBarry Smith /*TEST
8160c22052SBarry Smith
8260c22052SBarry Smith test:
8360c22052SBarry Smith
8460c22052SBarry Smith TEST*/
85