xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision 5f80ce2ab25dff0f4601e710601cbbcecf323266)
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);
34*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL,0));
35*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL,1,3));
36*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL,0));
37*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL,0));
38*5f80ce2aSJacob 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   PetscErrorCode ierr;
55c4762a1bSJed Brown 
56c4762a1bSJed Brown   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
57*5f80ce2aSJacob Faibussowitsch   CHKERRQ(ProcessOptions(PETSC_COMM_WORLD, &user));
58*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm));
59*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscObjectSetName((PetscObject) dm, "Patch Mesh"));
60*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(dm));
61*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(dm));
62*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
63*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMPatchSolve(dm));
64*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&dm));
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