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