Actual source code: ex19.c
1: static char help[] = "Parallel HDF5 Vec Viewing.\n\n";
3: /*T
4: Concepts: vectors^viewing
5: Concepts: viewers^hdf5
6: Processors: n
7: T*/
9: #include <petscvec.h>
10: #include <petscviewerhdf5.h>
12: int main(int argc,char **argv)
13: {
14: Vec x1, x2, y1, y2, y3, y4;
15: PetscViewer viewer;
16: PetscMPIInt rank;
17: PetscInt i, nlocal, n = 6;
18: PetscScalar *array;
19: PetscBool equal;
23: PetscInitialize(&argc, &argv, (char*) 0, help);if (ierr) return ierr;
24: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
25: PetscOptionsGetInt(NULL,NULL, "-n", &n, NULL);
27: VecCreate(PETSC_COMM_WORLD, &x1);
28: PetscObjectSetName((PetscObject) x1, "TestVec");
29: VecSetSizes(x1, PETSC_DECIDE, n);
30: VecSetFromOptions(x1);
32: /* initialize x1 */
33: VecGetLocalSize(x1, &nlocal);
34: VecGetArray(x1, &array);
35: for (i = 0; i < nlocal; i++) array[i] = rank + 1;
36: VecRestoreArray(x1, &array);
38: VecCreate(PETSC_COMM_WORLD, &x2);
39: PetscObjectSetName((PetscObject) x2, "TestVec2");
40: VecSetSizes(x2, PETSC_DECIDE, n);
41: VecSetBlockSize(x2, 2);
42: VecSetFromOptions(x2);
44: /* initialize x2 */
45: VecGetLocalSize(x2, &nlocal);
46: VecGetArray(x2, &array);
47: for (i = 0; i < nlocal; i++) array[i] = rank + 1;
48: VecRestoreArray(x2, &array);
50: PetscViewerHDF5Open(PETSC_COMM_WORLD, "ex19.h5", FILE_MODE_WRITE, &viewer);
51: VecView(x1, viewer);
52: PetscViewerHDF5PushGroup(viewer, "/testBlockSize");
53: VecView(x2, viewer);
54: PetscViewerHDF5PushGroup(viewer, "/testTimestep");
55: PetscViewerHDF5SetTimestep(viewer, 0);
56: VecView(x2, viewer);
57: PetscViewerHDF5SetTimestep(viewer, 1);
58: VecView(x2, viewer);
59: PetscViewerHDF5PopGroup(viewer);
60: PetscViewerHDF5PopGroup(viewer);
61: PetscViewerDestroy(&viewer);
63: VecCreate(PETSC_COMM_WORLD, &y1);
64: PetscObjectSetName((PetscObject) y1, "TestVec");
65: VecSetSizes(y1, PETSC_DECIDE, n);
66: VecSetFromOptions(y1);
68: VecCreate(PETSC_COMM_WORLD,&y2);
69: VecSetBlockSize(y2, 2);
70: PetscObjectSetName((PetscObject) y2, "TestVec2");
72: VecCreate(PETSC_COMM_WORLD,&y3);
73: VecSetBlockSize(y3, 2);
74: PetscObjectSetName((PetscObject) y3, "TestVec2");
76: VecCreate(PETSC_COMM_WORLD,&y4);
77: VecSetBlockSize(y4, 2);
78: PetscObjectSetName((PetscObject) y4, "TestVec2");
80: PetscViewerHDF5Open(PETSC_COMM_WORLD, "ex19.h5", FILE_MODE_READ, &viewer);
81: VecLoad(y1, viewer);
83: PetscViewerHDF5PushGroup(viewer, "/testBlockSize");
84: VecLoad(y2, viewer);
85: PetscViewerHDF5PushGroup(viewer, "/testTimestep");
86: PetscViewerHDF5SetTimestep(viewer, 0);
87: VecLoad(y3, viewer);
88: PetscViewerHDF5SetTimestep(viewer, 1);
89: VecLoad(y4, viewer);
90: PetscViewerHDF5PopGroup(viewer);
91: PetscViewerHDF5PopGroup(viewer);
92: PetscViewerDestroy(&viewer);
94: VecEqual(x1, y1, &equal);
95: if (!equal) {
96: VecView(x1, PETSC_VIEWER_STDOUT_WORLD);
97: VecView(y1, PETSC_VIEWER_STDOUT_WORLD);
98: SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB, "Error in HDF5 viewer");
99: }
100: VecEqual(x2, y2, &equal);
101: if (!equal) {
102: VecView(x2, PETSC_VIEWER_STDOUT_WORLD);
103: VecView(y2, PETSC_VIEWER_STDOUT_WORLD);
104: SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB, "Error in HDF5 viewer");
105: }
107: VecDestroy(&x1);
108: VecDestroy(&x2);
109: VecDestroy(&y1);
110: VecDestroy(&y2);
111: VecDestroy(&y3);
112: VecDestroy(&y4);
113: PetscFinalize();
114: return ierr;
115: }
117: /*TEST
119: build:
120: requires: hdf5
122: test:
123: nsize: 1
125: test:
126: nsize: 2
127: suffix: 2
129: test:
130: nsize: 3
131: suffix: 3
133: test:
134: nsize: 4
135: suffix: 4
137: TEST*/