Actual source code: ex1.c
2: static char help[] = "Tests various DM routines.\n\n";
4: #include <petscdm.h>
5: #include <petscdmda.h>
7: int main(int argc, char **argv)
8: {
9: PetscMPIInt rank;
10: PetscInt M = 10, N = 8, m = PETSC_DECIDE, n = PETSC_DECIDE;
11: DM da;
12: PetscViewer viewer;
13: Vec local, global;
14: PetscScalar value;
17: PetscInitialize(&argc, &argv, (char *)0, help);
18: PetscViewerDrawOpen(PETSC_COMM_WORLD, 0, "", 300, 0, 300, 300, &viewer);
20: /* Read options */
21: PetscOptionsGetInt(NULL, NULL, "-M", &M, NULL);
22: PetscOptionsGetInt(NULL, NULL, "-N", &N, NULL);
23: PetscOptionsGetInt(NULL, NULL, "-m", &m, NULL);
24: PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL);
26: /* Create distributed array and get vectors */
27: DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_BOX, M, N, m, n, 1, 1, NULL, NULL, &da);
28: DMSetFromOptions(da);
29: DMSetUp(da);
30: DMCreateGlobalVector(da, &global);
31: DMCreateLocalVector(da, &local);
33: value = -3.0;
34: VecSet(global, value);
35: DMGlobalToLocalBegin(da, global, INSERT_VALUES, local);
36: DMGlobalToLocalEnd(da, global, INSERT_VALUES, local);
38: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
39: value = rank + 1;
40: VecScale(local, value);
41: DMLocalToGlobalBegin(da, local, ADD_VALUES, global);
42: DMLocalToGlobalEnd(da, local, ADD_VALUES, global);
44: VecView(global, PETSC_VIEWER_STDOUT_WORLD);
45: DMView(da, viewer);
47: /* Free memory */
48: PetscViewerDestroy(&viewer);
49: VecDestroy(&local);
50: VecDestroy(&global);
51: DMDestroy(&da);
52: PetscFinalize();
53: return 0;
54: }
56: /*TEST
58: test:
59: nsize: 2
60: args: -nox
61: filter: grep -v -i Object
63: test:
64: suffix: cuda1
65: requires: cuda
66: args: -dm_vec_type cuda -nox
67: filter: grep -v -i Object
69: test:
70: suffix: cuda2
71: nsize: 2
72: requires: cuda
73: args: -dm_vec_type cuda -nox
74: filter: grep -v -i Object
76: TEST*/