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*/