xref: /petsc/src/dm/impls/patch/tests/ex1.c (revision d5b43468fb8780a8feea140ccd6fa3e6a50411cc) !
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 {
23   PetscInt patchSize, commSize, gridSize;
24 
25   PetscFunctionBegin;
26   options->debug = 0;
27   options->dim   = 2;
28   patchSize      = 0;
29   commSize       = 0;
30   gridSize       = 1;
31 
32   PetscOptionsBegin(comm, "", "Patch Test Options", "DMPATCH");
33   PetscCall(PetscOptionsBoundedInt("-debug", "The debugging level", "ex1.c", options->debug, &options->debug, NULL, 0));
34   PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", options->dim, &options->dim, NULL, 1, 3));
35   PetscCall(PetscOptionsBoundedInt("-patch_size", "The patch size in each dimension", "ex1.c", patchSize, &patchSize, NULL, 0));
36   PetscCall(PetscOptionsBoundedInt("-comm_size", "The comm size in each dimension", "ex1.c", commSize, &commSize, NULL, 0));
37   PetscCall(PetscOptionsBoundedInt("-grid_size", "The grid size in each dimension", "ex1.c", gridSize, &gridSize, NULL, 1));
38   PetscOptionsEnd();
39 
40   options->patchSize.i = options->patchSize.j = options->patchSize.k = 1;
41   options->commSize.i = options->commSize.j = options->commSize.k = 1;
42   options->gridSize.i = options->gridSize.j = options->gridSize.k = 1;
43   if (options->dim > 0) {
44     options->patchSize.i = patchSize;
45     options->commSize.i  = commSize;
46     options->gridSize.i  = gridSize;
47   }
48   if (options->dim > 1) {
49     options->patchSize.j = patchSize;
50     options->commSize.j  = commSize;
51     options->gridSize.j  = gridSize;
52   }
53   if (options->dim > 2) {
54     options->patchSize.k = patchSize;
55     options->commSize.k  = commSize;
56     options->gridSize.k  = gridSize;
57   }
58   PetscFunctionReturn(0);
59 }
60 
61 int main(int argc, char **argv)
62 {
63   DM     dm;
64   AppCtx user; /* user-defined work context */
65 
66   PetscFunctionBeginUser;
67   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
68   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
69   PetscCall(DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm));
70   PetscCall(PetscObjectSetName((PetscObject)dm, "Patch Mesh"));
71   PetscCall(DMSetFromOptions(dm));
72   PetscCall(DMSetUp(dm));
73   PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
74   PetscCall(DMPatchSolve(dm));
75   PetscCall(DMDestroy(&dm));
76   PetscCall(PetscFinalize());
77   return 0;
78 }
79 
80 /*TEST
81 
82    test:
83 
84 TEST*/
85