Actual source code: ex6.c
1: static char help[] = "Spot test DMStag->DMDA routines in 3d\n\n";
2: #include <petscdm.h>
3: #include <petscdmstag.h>
5: int main(int argc, char **argv)
6: {
7: DM dm;
8: Vec vec;
10: PetscFunctionBeginUser;
11: PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
12: PetscCall(DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 4, 4, 4, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 3, 3, 3, 3, DMSTAG_STENCIL_STAR, 1, NULL, NULL, NULL, &dm));
13: PetscCall(DMSetFromOptions(dm));
14: PetscCall(DMSetUp(dm));
15: PetscCall(DMStagSetUniformCoordinatesProduct(dm, 0.0, 10.0, 0.0, 10.0, 0.0, 10.0));
17: PetscCall(DMCreateGlobalVector(dm, &vec));
18: PetscCall(VecSet(vec, 1.234));
20: /* All element values */
21: {
22: DM da;
23: Vec vecda;
24: PetscCall(DMStagVecSplitToDMDA(dm, vec, DMSTAG_ELEMENT, -3, &da, &vecda));
25: PetscCall(DMDestroy(&da));
26: PetscCall(VecDestroy(&vecda));
27: }
29: /* Pad element values */
30: {
31: DM da;
32: Vec vecda;
33: PetscCall(DMStagVecSplitToDMDA(dm, vec, DMSTAG_ELEMENT, -5, &da, &vecda));
34: PetscCall(DMDestroy(&da));
35: PetscCall(VecDestroy(&vecda));
36: }
38: /* 2 element values */
39: {
40: DM da;
41: Vec vecda;
42: PetscCall(DMStagVecSplitToDMDA(dm, vec, DMSTAG_ELEMENT, -2, &da, &vecda));
43: PetscCall(DMDestroy(&da));
44: PetscCall(VecDestroy(&vecda));
45: }
47: /* One corner value */
48: {
49: DM da;
50: Vec vecda;
51: PetscCall(DMStagVecSplitToDMDA(dm, vec, DMSTAG_FRONT_DOWN_LEFT, 2, &da, &vecda));
52: PetscCall(DMDestroy(&da));
53: PetscCall(VecDestroy(&vecda));
54: }
56: /* One edge value */
57: {
58: DM da;
59: Vec vecda;
60: PetscCall(DMStagVecSplitToDMDA(dm, vec, DMSTAG_BACK_RIGHT, 1, &da, &vecda));
61: PetscCall(DMDestroy(&da));
62: PetscCall(VecDestroy(&vecda));
63: }
65: /* One face value */
66: {
67: DM da;
68: Vec vecda;
69: PetscCall(DMStagVecSplitToDMDA(dm, vec, DMSTAG_DOWN, 0, &da, &vecda));
70: PetscCall(DMDestroy(&da));
71: PetscCall(VecDestroy(&vecda));
72: }
74: PetscCall(VecDestroy(&vec));
75: PetscCall(DMDestroy(&dm));
76: PetscCall(PetscFinalize());
77: return 0;
78: }
80: /*TEST
82: test:
83: suffix: 1
84: nsize: 12
85: args: -stag_ranks_x 2 -stag_ranks_y 3 -stag_ranks_z 2
87: TEST*/