Actual source code: ex14.c
1: static char help[] = "Test DMClone_Stag()\n\n";
3: #include <petscdm.h>
4: #include <petscdmstag.h>
6: int main(int argc, char **argv)
7: {
8: DM dm, dm2;
9: PetscInt dim;
10: PetscBool flg, setSizes;
12: /* Create a DMStag object */
14: PetscInitialize(&argc, &argv, (char *)0, help);
15: PetscOptionsGetInt(NULL, NULL, "-dim", &dim, &flg);
17: setSizes = PETSC_FALSE;
18: PetscOptionsGetBool(NULL, NULL, "-setsizes", &setSizes, NULL);
19: if (setSizes) {
20: PetscMPIInt size;
21: PetscInt lx[4] = {2, 3}, ranksx = 2, mx = 5;
22: PetscInt ly[3] = {3, 8, 2}, ranksy = 3, my = 13;
23: PetscInt lz[2] = {2, 4}, ranksz = 2, mz = 6;
25: MPI_Comm_size(PETSC_COMM_WORLD, &size);
26: switch (dim) {
27: case 1:
29: DMStagCreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, mx, 1, 1, DMSTAG_STENCIL_BOX, 1, lx, &dm);
30: break;
31: case 2:
33: DMStagCreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, mx, my, ranksx, ranksy, 1, 1, 1, DMSTAG_STENCIL_BOX, 1, lx, ly, &dm);
34: break;
35: case 3:
37: DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, mx, my, mz, ranksx, ranksy, ranksz, 1, 1, 1, 1, DMSTAG_STENCIL_BOX, 1, lx, ly, lz, &dm);
38: break;
39: default:
40: SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_SUP, "No support for dimension %" PetscInt_FMT, dim);
41: }
42: } else {
43: if (dim == 1) {
44: DMStagCreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, 2, 2, 3, DMSTAG_STENCIL_BOX, 1, NULL, &dm);
45: } else if (dim == 2) {
46: DMStagCreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 2, 2, PETSC_DECIDE, PETSC_DECIDE, 2, 3, 4, DMSTAG_STENCIL_BOX, 1, NULL, NULL, &dm);
47: } else if (dim == 3) {
48: DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 2, 2, 2, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 2, 3, 4, 5, DMSTAG_STENCIL_BOX, 1, NULL, NULL, NULL, &dm);
49: } else {
50: PetscPrintf(PETSC_COMM_WORLD, "Supply -dim option with value 1, 2, or 3\n");
51: return 1;
52: }
53: }
54: DMSetFromOptions(dm);
55: DMSetUp(dm);
56: DMView(dm, PETSC_VIEWER_STDOUT_WORLD);
58: /* Create a cloned DMStag object */
59: DMClone(dm, &dm2);
60: DMView(dm2, PETSC_VIEWER_STDOUT_WORLD);
62: DMDestroy(&dm);
63: DMDestroy(&dm2);
64: PetscFinalize();
65: return 0;
66: }
68: /*TEST
70: test:
71: suffix: 1
72: nsize: 1
73: args: -dim 1
75: test:
76: suffix: 2
77: nsize: 4
78: args: -dim 2
80: test:
81: suffix: 3
82: nsize: 6
83: args: -dim 3 -stag_grid_x 3 -stag_grid_y 2 -stag_grid_z 1
85: test:
86: suffix: 4
87: nsize: 2
88: args: -dim 1 -setsizes
90: test:
91: suffix: 5
92: nsize: 6
93: args: -dim 2 -setsizes
95: test:
96: suffix: 6
97: nsize: 12
98: args: -dim 3 -setsizes
100: TEST*/