Actual source code: ex2.c
2: static char help[] = "Tests various 1-dimensional DMDA routines.\n\n";
4: #include <petscdm.h>
5: #include <petscdmda.h>
6: #include <petscdraw.h>
8: int main(int argc, char **argv)
9: {
10: PetscMPIInt rank;
11: PetscInt M = 13, s = 1, dof = 1;
12: DMBoundaryType bx = DM_BOUNDARY_PERIODIC;
13: DM da;
14: PetscViewer viewer;
15: Vec local, global;
16: PetscScalar value;
17: PetscDraw draw;
18: PetscBool flg = PETSC_FALSE;
19: ISLocalToGlobalMapping is;
22: PetscInitialize(&argc, &argv, (char *)0, help);
23: PetscViewerDrawOpen(PETSC_COMM_WORLD, 0, "", 280, 480, 600, 200, &viewer);
24: PetscViewerDrawGetDraw(viewer, 0, &draw);
25: PetscDrawSetDoubleBuffer(draw);
27: /* Readoptions */
28: PetscOptionsGetInt(NULL, NULL, "-M", &M, NULL);
29: PetscOptionsGetEnum(NULL, NULL, "-wrap", DMBoundaryTypes, (PetscEnum *)&bx, NULL);
30: PetscOptionsGetInt(NULL, NULL, "-dof", &dof, NULL);
31: PetscOptionsGetInt(NULL, NULL, "-s", &s, NULL);
33: /* Create distributed array and get vectors */
34: DMDACreate1d(PETSC_COMM_WORLD, bx, M, dof, s, NULL, &da);
35: DMSetFromOptions(da);
36: DMSetUp(da);
37: DMView(da, viewer);
38: DMCreateGlobalVector(da, &global);
39: DMCreateLocalVector(da, &local);
41: value = 1;
42: VecSet(global, value);
44: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
45: value = rank + 1;
46: VecScale(global, value);
48: VecView(global, viewer);
49: PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "\nGlobal Vector:\n");
50: VecView(global, PETSC_VIEWER_STDOUT_WORLD);
51: PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "\n");
53: /* Send ghost points to local vectors */
54: DMGlobalToLocalBegin(da, global, INSERT_VALUES, local);
55: DMGlobalToLocalEnd(da, global, INSERT_VALUES, local);
57: PetscOptionsGetBool(NULL, NULL, "-local_print", &flg, NULL);
58: if (flg) {
59: PetscViewer sviewer;
61: PetscViewerASCIIPushSynchronized(PETSC_VIEWER_STDOUT_WORLD);
62: PetscViewerASCIISynchronizedPrintf(PETSC_VIEWER_STDOUT_WORLD, "\nLocal Vector: processor %d\n", rank);
63: PetscViewerGetSubViewer(PETSC_VIEWER_STDOUT_WORLD, PETSC_COMM_SELF, &sviewer);
64: VecView(local, sviewer);
65: PetscViewerRestoreSubViewer(PETSC_VIEWER_STDOUT_WORLD, PETSC_COMM_SELF, &sviewer);
66: PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD);
67: PetscViewerASCIIPopSynchronized(PETSC_VIEWER_STDOUT_WORLD);
68: }
69: PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD, "\nLocal to global mapping\n");
70: DMGetLocalToGlobalMapping(da, &is);
71: ISLocalToGlobalMappingView(is, PETSC_VIEWER_STDOUT_WORLD);
73: /* Free memory */
74: PetscViewerDestroy(&viewer);
75: VecDestroy(&global);
76: VecDestroy(&local);
77: DMDestroy(&da);
78: PetscFinalize();
79: return 0;
80: }
82: /*TEST
84: test:
85: nsize: 2
86: args: -nox
87: filter: grep -v " MPI process"
88: output_file: output/ex2_1.out
89: requires: x
91: test:
92: suffix: 2
93: nsize: 3
94: args: -wrap none -local_print -nox
95: filter: grep -v "Vec Object: Vec"
96: requires: x
98: test:
99: suffix: 3
100: nsize: 3
101: args: -wrap ghosted -local_print -nox
102: filter: grep -v "Vec Object: Vec"
103: requires: x
105: TEST*/