xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision a69119a591a03a9d906b29c0a4e9802e4d7c9795)
1 static char help[] = "Make a 2D grid of patches and view them\n\n";
2 
3 /*
4 Serial Test
5 Parallel Test where all zooms are serials
6 Parallel Test where zooms are parallel
7 
8 Return DMPatch from Zoom
9 Override refine from DMPatch to split cells
10  */
11 #include <petscdmpatch.h>
12 
13 typedef struct {
14   PetscInt   debug;     /* The debugging level */
15   PetscInt   dim;       /* The spatial dimension */
16   MatStencil patchSize; /* Size of patches */
17   MatStencil gridSize;  /* Size of patch grid */
18   MatStencil commSize;  /* Size of patch comm */
19 } AppCtx;
20 
21 PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options) {
22   PetscInt patchSize, commSize, gridSize;
23 
24   PetscFunctionBegin;
25   options->debug = 0;
26   options->dim   = 2;
27   patchSize      = 0;
28   commSize       = 0;
29   gridSize       = 1;
30 
31   PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH");
32   PetscCall(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL, 0));
33   PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL, 1, 3));
34   PetscCall(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL, 0));
35   PetscCall(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL, 0));
36   PetscCall(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL, 1));
37   PetscOptionsEnd();
38 
39   options->patchSize.i = options->patchSize.j = options->patchSize.k = 1;
40   options->commSize.i = options->commSize.j = options->commSize.k = 1;
41   options->gridSize.i = options->gridSize.j = options->gridSize.k = 1;
42   if (options->dim > 0) {
43     options->patchSize.i = patchSize;
44     options->commSize.i  = commSize;
45     options->gridSize.i  = gridSize;
46   }
47   if (options->dim > 1) {
48     options->patchSize.j = patchSize;
49     options->commSize.j  = commSize;
50     options->gridSize.j  = gridSize;
51   }
52   if (options->dim > 2) {
53     options->patchSize.k = patchSize;
54     options->commSize.k  = commSize;
55     options->gridSize.k  = gridSize;
56   }
57   PetscFunctionReturn(0);
58 }
59 
60 int main(int argc, char **argv) {
61   DM     dm;
62   AppCtx user; /* user-defined work context */
63 
64   PetscFunctionBeginUser;
65   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
66   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
67   PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm));
68   PetscCall(PetscObjectSetName((PetscObject)dm, "Patch Mesh"));
69   PetscCall(DMSetFromOptions(dm));
70   PetscCall(DMSetUp(dm));
71   PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
72   PetscCall(DMPatchSolve(dm));
73   PetscCall(DMDestroy(&dm));
74   PetscCall(PetscFinalize());
75   return 0;
76 }
77 
78 /*TEST
79 
80    test:
81 
82 TEST*/
83