xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
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 
21*9371c9d4SSatish Balay PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options) {
22c4762a1bSJed Brown   PetscInt patchSize, commSize, gridSize;
23c4762a1bSJed Brown 
24c4762a1bSJed Brown   PetscFunctionBegin;
25c4762a1bSJed Brown   options->debug = 0;
26c4762a1bSJed Brown   options->dim   = 2;
27c4762a1bSJed Brown   patchSize      = 0;
28c4762a1bSJed Brown   commSize       = 0;
2960c22052SBarry Smith   gridSize       = 1;
30c4762a1bSJed Brown 
31d0609cedSBarry Smith   PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH");
329566063dSJacob Faibussowitsch   PetscCall(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL, 0));
339566063dSJacob Faibussowitsch   PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL, 1, 3));
349566063dSJacob Faibussowitsch   PetscCall(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL, 0));
359566063dSJacob Faibussowitsch   PetscCall(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL, 0));
369566063dSJacob Faibussowitsch   PetscCall(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL, 1));
37d0609cedSBarry Smith   PetscOptionsEnd();
38c4762a1bSJed Brown 
39c4762a1bSJed Brown   options->patchSize.i = options->patchSize.j = options->patchSize.k = 1;
40c4762a1bSJed Brown   options->commSize.i = options->commSize.j = options->commSize.k = 1;
41c4762a1bSJed Brown   options->gridSize.i = options->gridSize.j = options->gridSize.k = 1;
42*9371c9d4SSatish Balay   if (options->dim > 0) {
43*9371c9d4SSatish Balay     options->patchSize.i = patchSize;
44*9371c9d4SSatish Balay     options->commSize.i  = commSize;
45*9371c9d4SSatish Balay     options->gridSize.i  = gridSize;
46*9371c9d4SSatish Balay   }
47*9371c9d4SSatish Balay   if (options->dim > 1) {
48*9371c9d4SSatish Balay     options->patchSize.j = patchSize;
49*9371c9d4SSatish Balay     options->commSize.j  = commSize;
50*9371c9d4SSatish Balay     options->gridSize.j  = gridSize;
51*9371c9d4SSatish Balay   }
52*9371c9d4SSatish Balay   if (options->dim > 2) {
53*9371c9d4SSatish Balay     options->patchSize.k = patchSize;
54*9371c9d4SSatish Balay     options->commSize.k  = commSize;
55*9371c9d4SSatish Balay     options->gridSize.k  = gridSize;
56*9371c9d4SSatish Balay   }
57c4762a1bSJed Brown   PetscFunctionReturn(0);
5860c22052SBarry Smith }
59c4762a1bSJed Brown 
60*9371c9d4SSatish Balay int main(int argc, char **argv) {
61c4762a1bSJed Brown   DM     dm;
62c4762a1bSJed Brown   AppCtx user; /* user-defined work context */
63c4762a1bSJed Brown 
64327415f7SBarry Smith   PetscFunctionBeginUser;
659566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
669566063dSJacob Faibussowitsch   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
679566063dSJacob Faibussowitsch   PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm));
689566063dSJacob Faibussowitsch   PetscCall(PetscObjectSetName((PetscObject)dm, "Patch Mesh"));
699566063dSJacob Faibussowitsch   PetscCall(DMSetFromOptions(dm));
709566063dSJacob Faibussowitsch   PetscCall(DMSetUp(dm));
719566063dSJacob Faibussowitsch   PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
729566063dSJacob Faibussowitsch   PetscCall(DMPatchSolve(dm));
739566063dSJacob Faibussowitsch   PetscCall(DMDestroy(&dm));
749566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
75b122ec5aSJacob Faibussowitsch   return 0;
76c4762a1bSJed Brown }
7760c22052SBarry Smith 
7860c22052SBarry Smith /*TEST
7960c22052SBarry Smith 
8060c22052SBarry Smith    test:
8160c22052SBarry Smith 
8260c22052SBarry Smith TEST*/
83