xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254)
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);
345f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0));
355f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3));
365f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0));
375f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0));
385f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL,1));
391e1ea65dSPierre 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 
55*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscInitialize(&argc, &argv, NULL, help));
565f80ce2aSJacob Faibussowitsch   CHKERRQ(ProcessOptions(PETSC_COMM_WORLD, &user));
575f80ce2aSJacob Faibussowitsch   CHKERRQ(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm));
585f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscObjectSetName((PetscObject) dm, "Patch Mesh"));
595f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(dm));
605f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(dm));
615f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
625f80ce2aSJacob Faibussowitsch   CHKERRQ(DMPatchSolve(dm));
635f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&dm));
64*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscFinalize());
65*b122ec5aSJacob Faibussowitsch   return 0;
66c4762a1bSJed Brown }
6760c22052SBarry Smith 
6860c22052SBarry Smith /*TEST
6960c22052SBarry Smith 
7060c22052SBarry Smith    test:
7160c22052SBarry Smith 
7260c22052SBarry Smith TEST*/
73