xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision 1e1ea65d8de51fde77ce8a787efbef25e407badc)
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   PetscErrorCode ierr;
25c4762a1bSJed Brown 
26c4762a1bSJed Brown   PetscFunctionBegin;
27c4762a1bSJed Brown   options->debug = 0;
28c4762a1bSJed Brown   options->dim   = 2;
29c4762a1bSJed Brown   patchSize      = 0;
30c4762a1bSJed Brown   commSize       = 0;
3160c22052SBarry Smith   gridSize       = 1;
32c4762a1bSJed Brown 
33c4762a1bSJed Brown   ierr = PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH");CHKERRQ(ierr);
34c4762a1bSJed Brown   ierr = PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0);CHKERRQ(ierr);
35c4762a1bSJed Brown   ierr = PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3);CHKERRQ(ierr);
36c4762a1bSJed Brown   ierr = PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0);CHKERRQ(ierr);
37c4762a1bSJed Brown   ierr = PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0);CHKERRQ(ierr);
38c4762a1bSJed Brown   ierr = PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL,1);CHKERRQ(ierr);
39*1e1ea65dSPierre Jolivet   ierr = PetscOptionsEnd();CHKERRQ(ierr);
40c4762a1bSJed Brown 
41c4762a1bSJed Brown   options->patchSize.i = options->patchSize.j = options->patchSize.k = 1;
42c4762a1bSJed Brown   options->commSize.i  = options->commSize.j  = options->commSize.k = 1;
43c4762a1bSJed Brown   options->gridSize.i  = options->gridSize.j  = options->gridSize.k = 1;
44c4762a1bSJed Brown   if (options->dim > 0) {options->patchSize.i = patchSize; options->commSize.i = commSize; options->gridSize.i = gridSize;}
45c4762a1bSJed Brown   if (options->dim > 1) {options->patchSize.j = patchSize; options->commSize.j = commSize; options->gridSize.j = gridSize;}
46c4762a1bSJed Brown   if (options->dim > 2) {options->patchSize.k = patchSize; options->commSize.k = commSize; options->gridSize.k = gridSize;}
47c4762a1bSJed Brown   PetscFunctionReturn(0);
4860c22052SBarry Smith }
49c4762a1bSJed Brown 
50c4762a1bSJed Brown int main(int argc, char **argv)
51c4762a1bSJed Brown {
52c4762a1bSJed Brown   DM             dm;
53c4762a1bSJed Brown   AppCtx         user;                 /* user-defined work context */
54c4762a1bSJed Brown   PetscErrorCode ierr;
55c4762a1bSJed Brown 
56c4762a1bSJed Brown   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
57c4762a1bSJed Brown   ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);
58c4762a1bSJed Brown   ierr = DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm);CHKERRQ(ierr);
59c4762a1bSJed Brown   ierr = PetscObjectSetName((PetscObject) dm, "Patch Mesh");CHKERRQ(ierr);
60c4762a1bSJed Brown   ierr = DMSetFromOptions(dm);CHKERRQ(ierr);
61c4762a1bSJed Brown   ierr = DMSetUp(dm);CHKERRQ(ierr);
62c4762a1bSJed Brown   ierr = DMView(dm, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
63c4762a1bSJed Brown   ierr = DMPatchSolve(dm);CHKERRQ(ierr);
64c4762a1bSJed Brown   ierr = DMDestroy(&dm);CHKERRQ(ierr);
65c4762a1bSJed Brown   ierr = PetscFinalize();
66c4762a1bSJed Brown   return ierr;
67c4762a1bSJed Brown }
6860c22052SBarry Smith 
6960c22052SBarry Smith /*TEST
7060c22052SBarry Smith 
7160c22052SBarry Smith    test:
7260c22052SBarry Smith 
7360c22052SBarry Smith TEST*/
74