xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision 31d78bcd2b98084dc1368b20eb1129c8b9fb39fe)
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