Actual source code: ex6.c
1: static char help[] = "Tests binary viewers.\n\n";
3: #include <petscsys.h>
4: #include <petscviewer.h>
6: static PetscErrorCode TestOpen(PetscFileMode mode, PetscViewer *viewer)
7: {
8: const char *name;
9: PetscBool skipinfo, skipheader, skipoptions;
11: PetscViewerBinaryOpen(PETSC_COMM_WORLD, "binary.dat", mode, viewer);
12: PetscViewerBinarySkipInfo(*viewer);
13: PetscViewerBinarySetSkipInfo(*viewer, PETSC_FALSE);
14: PetscViewerBinarySetSkipHeader(*viewer, PETSC_FALSE);
15: PetscViewerBinarySetSkipOptions(*viewer, PETSC_FALSE);
16: PetscViewerSetUp(*viewer);
17: PetscViewerFileGetName(*viewer, &name);
18: PetscViewerFileGetMode(*viewer, &mode);
19: PetscViewerBinaryGetSkipInfo(*viewer, &skipinfo);
20: PetscViewerBinaryGetSkipHeader(*viewer, &skipheader);
21: PetscViewerBinaryGetSkipOptions(*viewer, &skipoptions);
22: return 0;
23: }
25: static PetscErrorCode TestWrite(PetscViewer viewer)
26: {
27: PetscInt idata = 42;
28: PetscReal rdata = 42;
29: PetscInt s = PETSC_DETERMINE, t = PETSC_DETERMINE;
30: PetscViewer subviewer;
32: PetscViewerBinaryWrite(viewer, &idata, 1, PETSC_INT);
33: PetscViewerBinaryWrite(viewer, &rdata, 1, PETSC_REAL);
35: PetscViewerGetSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
36: if (subviewer) {
37: PetscViewerBinaryWrite(subviewer, &idata, 1, PETSC_INT);
38: PetscViewerBinaryWrite(subviewer, &rdata, 1, PETSC_REAL);
39: }
40: PetscViewerRestoreSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
42: PetscViewerBinaryWriteAll(viewer, &idata, 1, s, t, PETSC_INT);
43: PetscViewerBinaryWriteAll(viewer, &rdata, 1, s, t, PETSC_REAL);
45: PetscViewerGetSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
46: if (subviewer) {
47: PetscViewerBinaryWrite(subviewer, &idata, 1, PETSC_INT);
48: PetscViewerBinaryWrite(subviewer, &rdata, 1, PETSC_REAL);
49: }
50: PetscViewerRestoreSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
52: PetscViewerBinaryWrite(viewer, &idata, 1, PETSC_INT);
53: PetscViewerBinaryWrite(viewer, &rdata, 1, PETSC_REAL);
54: return 0;
55: }
57: static PetscErrorCode TestRead(PetscViewer viewer)
58: {
59: PetscInt idata = 0;
60: PetscReal rdata = 0;
61: PetscInt s = PETSC_DETERMINE, t = PETSC_DETERMINE;
62: PetscViewer subviewer;
63: MPI_Comm comm = PetscObjectComm((PetscObject)viewer);
65: PetscViewerBinaryRead(viewer, &idata, 1, NULL, PETSC_INT);
66: PetscViewerBinaryRead(viewer, &rdata, 1, NULL, PETSC_REAL);
70: PetscViewerGetSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
71: if (subviewer) {
72: MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer);
73: PetscViewerBinaryRead(subviewer, &idata, 1, NULL, PETSC_INT);
74: PetscViewerBinaryRead(subviewer, &rdata, 1, NULL, PETSC_REAL);
77: }
78: PetscViewerRestoreSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
80: PetscViewerBinaryReadAll(viewer, &idata, 1, s, t, PETSC_INT);
81: PetscViewerBinaryReadAll(viewer, &rdata, 1, s, t, PETSC_REAL);
85: PetscViewerGetSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
86: if (subviewer) {
87: MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer);
88: PetscViewerBinaryRead(subviewer, &idata, 1, NULL, PETSC_INT);
89: PetscViewerBinaryRead(subviewer, &rdata, 1, NULL, PETSC_REAL);
92: }
93: PetscViewerRestoreSubViewer(viewer, PETSC_COMM_SELF, &subviewer);
95: PetscViewerBinaryRead(viewer, &idata, 1, NULL, PETSC_INT);
96: PetscViewerBinaryRead(viewer, &rdata, 1, NULL, PETSC_REAL);
99: return 0;
100: }
102: static PetscErrorCode TestEOF(PetscViewer viewer)
103: {
104: char data;
105: PetscInt count = PETSC_MAX_INT;
106: MPI_Comm comm = PetscObjectComm((PetscObject)viewer);
108: PetscViewerRead(viewer, &data, 1, &count, PETSC_CHAR);
110: return 0;
111: }
113: static PetscErrorCode TestClose(PetscViewer *viewer)
114: {
115: PetscFileMode mode;
117: PetscViewerFileGetMode(*viewer, &mode);
118: if (mode == FILE_MODE_READ) TestEOF(*viewer);
119: PetscViewerDestroy(viewer);
120: return 0;
121: }
123: int main(int argc, char **args)
124: {
125: PetscViewer viewer;
128: PetscInitialize(&argc, &args, NULL, help);
130: TestOpen(FILE_MODE_WRITE, &viewer);
131: TestWrite(viewer);
132: TestClose(&viewer);
134: TestOpen(FILE_MODE_READ, &viewer);
135: TestRead(viewer);
136: TestClose(&viewer);
138: TestOpen(FILE_MODE_APPEND, &viewer);
139: TestWrite(viewer);
140: TestClose(&viewer);
142: TestOpen(FILE_MODE_READ, &viewer);
143: TestRead(viewer);
144: TestRead(viewer);
145: TestClose(&viewer);
147: TestOpen(FILE_MODE_APPEND, &viewer);
148: TestWrite(viewer);
149: TestClose(&viewer);
151: TestOpen(FILE_MODE_READ, &viewer);
152: TestRead(viewer);
153: TestRead(viewer);
154: TestRead(viewer);
155: TestClose(&viewer);
157: TestOpen(FILE_MODE_WRITE, &viewer);
158: TestWrite(viewer);
159: TestClose(&viewer);
161: TestOpen(FILE_MODE_READ, &viewer);
162: TestRead(viewer);
163: TestClose(&viewer);
165: TestOpen(FILE_MODE_WRITE, &viewer);
166: TestClose(&viewer);
167: TestOpen(FILE_MODE_READ, &viewer);
168: TestClose(&viewer);
169: TestOpen(FILE_MODE_APPEND, &viewer);
170: TestClose(&viewer);
171: TestOpen(FILE_MODE_READ, &viewer);
172: TestClose(&viewer);
174: {
175: FILE *info;
176: PetscMPIInt rank;
178: TestOpen(FILE_MODE_WRITE, &viewer);
179: PetscViewerPushFormat(viewer, PETSC_VIEWER_BINARY_MATLAB);
180: PetscViewerBinaryGetInfoPointer(viewer, &info);
181: MPI_Comm_rank(PetscObjectComm((PetscObject)viewer), &rank);
183: TestClose(&viewer);
184: }
186: PetscFinalize();
187: return 0;
188: }
190: /*TEST
192: testset:
193: nsize: {{1 2 3}separate_output}
194: args: -viewer_view
195: test:
196: suffix: stdio
197: args: -viewer_binary_mpiio 0
198: test:
199: requires: mpiio
200: suffix: mpiio
201: args: -viewer_binary_mpiio 1
203: TEST*/