xref: /petsc/src/sys/classes/viewer/tests/ex6.c (revision 28b400f66ebc7ae0049166a2294dfcd3df27e64b)
174a82d2eSLisandro Dalcin static char help[] = "Tests binary viewers.\n\n";
274a82d2eSLisandro Dalcin 
374a82d2eSLisandro Dalcin #include <petscsys.h>
474a82d2eSLisandro Dalcin #include <petscviewer.h>
574a82d2eSLisandro Dalcin 
674a82d2eSLisandro Dalcin static PetscErrorCode TestOpen(PetscFileMode mode,PetscViewer *viewer)
774a82d2eSLisandro Dalcin {
874a82d2eSLisandro Dalcin   const char     *name;
974a82d2eSLisandro Dalcin   PetscBool      skipinfo,skipheader,skipoptions;
1074a82d2eSLisandro Dalcin 
1174a82d2eSLisandro Dalcin   PetscFunctionBegin;
125f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"binary.dat",mode,viewer));
135f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinarySkipInfo(*viewer));
145f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinarySetSkipInfo(*viewer,PETSC_FALSE));
155f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinarySetSkipHeader(*viewer,PETSC_FALSE));
165f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinarySetSkipOptions(*viewer,PETSC_FALSE));
175f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerSetUp(*viewer));
185f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerFileGetName(*viewer,&name));
195f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerFileGetMode(*viewer,&mode));
205f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryGetSkipInfo(*viewer,&skipinfo));
215f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryGetSkipHeader(*viewer,&skipheader));
225f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryGetSkipOptions(*viewer,&skipoptions));
2374a82d2eSLisandro Dalcin   PetscFunctionReturn(0);
2474a82d2eSLisandro Dalcin }
2574a82d2eSLisandro Dalcin 
2674a82d2eSLisandro Dalcin static PetscErrorCode TestWrite(PetscViewer viewer)
2774a82d2eSLisandro Dalcin {
2874a82d2eSLisandro Dalcin   PetscInt       idata = 42;
2974a82d2eSLisandro Dalcin   PetscReal      rdata = 42;
3074a82d2eSLisandro Dalcin   PetscInt       s = PETSC_DETERMINE, t = PETSC_DETERMINE;
3174a82d2eSLisandro Dalcin   PetscViewer    subviewer;
3274a82d2eSLisandro Dalcin 
3374a82d2eSLisandro Dalcin   PetscFunctionBegin;
345f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT));
355f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL));
3674a82d2eSLisandro Dalcin 
375f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
3874a82d2eSLisandro Dalcin   if (subviewer) {
395f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT));
405f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL));
4174a82d2eSLisandro Dalcin   }
425f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
4374a82d2eSLisandro Dalcin 
445f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryWriteAll(viewer,&idata,1,s,t,PETSC_INT));
455f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryWriteAll(viewer,&rdata,1,s,t,PETSC_REAL));
4674a82d2eSLisandro Dalcin 
475f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
4874a82d2eSLisandro Dalcin   if (subviewer) {
495f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT));
505f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL));
5174a82d2eSLisandro Dalcin   }
525f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
5374a82d2eSLisandro Dalcin 
545f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT));
555f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL));
5674a82d2eSLisandro Dalcin   PetscFunctionReturn(0);
5774a82d2eSLisandro Dalcin }
5874a82d2eSLisandro Dalcin 
5974a82d2eSLisandro Dalcin static PetscErrorCode TestRead(PetscViewer viewer)
6074a82d2eSLisandro Dalcin {
6174a82d2eSLisandro Dalcin   PetscInt       idata = 0;
6274a82d2eSLisandro Dalcin   PetscReal      rdata = 0;
6374a82d2eSLisandro Dalcin   PetscInt       s = PETSC_DETERMINE, t = PETSC_DETERMINE;
6474a82d2eSLisandro Dalcin   PetscViewer    subviewer;
6574a82d2eSLisandro Dalcin   MPI_Comm       comm = PetscObjectComm((PetscObject)viewer);
6674a82d2eSLisandro Dalcin 
6774a82d2eSLisandro Dalcin   PetscFunctionBegin;
685f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT));
695f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL));
702c71b3e2SJacob Faibussowitsch   PetscCheckFalse(idata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata);
712c71b3e2SJacob Faibussowitsch   PetscCheckFalse(rdata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
7274a82d2eSLisandro Dalcin 
735f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
7474a82d2eSLisandro Dalcin   if (subviewer) {
7574a82d2eSLisandro Dalcin     MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer);
765f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT));
775f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL));
782c71b3e2SJacob Faibussowitsch     PetscCheckFalse(idata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata);
792c71b3e2SJacob Faibussowitsch     PetscCheckFalse(rdata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
8074a82d2eSLisandro Dalcin   }
815f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
8274a82d2eSLisandro Dalcin 
835f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryReadAll(viewer,&idata,1,s,t,PETSC_INT));
845f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryReadAll(viewer,&rdata,1,s,t,PETSC_REAL));
852c71b3e2SJacob Faibussowitsch   PetscCheckFalse(idata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata);
862c71b3e2SJacob Faibussowitsch   PetscCheckFalse(rdata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
8774a82d2eSLisandro Dalcin 
885f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
8974a82d2eSLisandro Dalcin   if (subviewer) {
9074a82d2eSLisandro Dalcin     MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer);
915f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT));
925f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL));
932c71b3e2SJacob Faibussowitsch     PetscCheckFalse(idata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata);
942c71b3e2SJacob Faibussowitsch     PetscCheckFalse(rdata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
9574a82d2eSLisandro Dalcin   }
965f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer));
9774a82d2eSLisandro Dalcin 
985f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT));
995f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL));
1002c71b3e2SJacob Faibussowitsch   PetscCheckFalse(idata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata);
1012c71b3e2SJacob Faibussowitsch   PetscCheckFalse(rdata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
10274a82d2eSLisandro Dalcin   PetscFunctionReturn(0);
10374a82d2eSLisandro Dalcin }
10474a82d2eSLisandro Dalcin 
10574a82d2eSLisandro Dalcin static PetscErrorCode TestEOF(PetscViewer viewer)
10674a82d2eSLisandro Dalcin {
10774a82d2eSLisandro Dalcin   char           data;
10874a82d2eSLisandro Dalcin   PetscInt       count = PETSC_MAX_INT;
10974a82d2eSLisandro Dalcin   MPI_Comm       comm = PetscObjectComm((PetscObject)viewer);
11074a82d2eSLisandro Dalcin 
11174a82d2eSLisandro Dalcin   PetscFunctionBegin;
1125f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerRead(viewer,&data,1,&count,PETSC_CHAR));
113*28b400f6SJacob Faibussowitsch   PetscCheck(!count,comm,PETSC_ERR_FILE_UNEXPECTED,"Expected EOF");
11474a82d2eSLisandro Dalcin   PetscFunctionReturn(0);
11574a82d2eSLisandro Dalcin }
11674a82d2eSLisandro Dalcin 
11774a82d2eSLisandro Dalcin static PetscErrorCode TestClose(PetscViewer *viewer)
11874a82d2eSLisandro Dalcin {
11974a82d2eSLisandro Dalcin   PetscFileMode  mode;
12074a82d2eSLisandro Dalcin 
12174a82d2eSLisandro Dalcin   PetscFunctionBegin;
1225f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerFileGetMode(*viewer,&mode));
1235f80ce2aSJacob Faibussowitsch   if (mode == FILE_MODE_READ) CHKERRQ(TestEOF(*viewer));
1245f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerDestroy(viewer));
12574a82d2eSLisandro Dalcin   PetscFunctionReturn(0);
12674a82d2eSLisandro Dalcin }
12774a82d2eSLisandro Dalcin 
12874a82d2eSLisandro Dalcin int main(int argc,char **args)
12974a82d2eSLisandro Dalcin {
13074a82d2eSLisandro Dalcin   PetscViewer    viewer;
13174a82d2eSLisandro Dalcin   PetscErrorCode ierr;
13274a82d2eSLisandro Dalcin 
13374a82d2eSLisandro Dalcin   ierr = PetscInitialize(&argc,&args,NULL,help);if (ierr) return ierr;
13474a82d2eSLisandro Dalcin 
1355f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer));
1365f80ce2aSJacob Faibussowitsch   CHKERRQ(TestWrite(viewer));
1375f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
13874a82d2eSLisandro Dalcin 
1395f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_READ,&viewer));
1405f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1415f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
14274a82d2eSLisandro Dalcin 
1435f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_APPEND,&viewer));
1445f80ce2aSJacob Faibussowitsch   CHKERRQ(TestWrite(viewer));
1455f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
14674a82d2eSLisandro Dalcin 
1475f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_READ,&viewer));
1485f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1495f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1505f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
15174a82d2eSLisandro Dalcin 
1525f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_APPEND,&viewer));
1535f80ce2aSJacob Faibussowitsch   CHKERRQ(TestWrite(viewer));
1545f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
15574a82d2eSLisandro Dalcin 
1565f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_READ,&viewer));
1575f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1585f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1595f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1605f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
16174a82d2eSLisandro Dalcin 
1625f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer));
1635f80ce2aSJacob Faibussowitsch   CHKERRQ(TestWrite(viewer));
1645f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
16574a82d2eSLisandro Dalcin 
1665f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_READ,&viewer));
1675f80ce2aSJacob Faibussowitsch   CHKERRQ(TestRead(viewer));
1685f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
16974a82d2eSLisandro Dalcin 
1705f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer));
1715f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
1725f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_READ,&viewer));
1735f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
1745f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_APPEND,&viewer));
1755f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
1765f80ce2aSJacob Faibussowitsch   CHKERRQ(TestOpen(FILE_MODE_READ,&viewer));
1775f80ce2aSJacob Faibussowitsch   CHKERRQ(TestClose(&viewer));
17874a82d2eSLisandro Dalcin 
17974a82d2eSLisandro Dalcin   {
18074a82d2eSLisandro Dalcin     FILE        *info;
18174a82d2eSLisandro Dalcin     PetscMPIInt rank;
18274a82d2eSLisandro Dalcin 
1835f80ce2aSJacob Faibussowitsch     CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer));
1845f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB));
1855f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscViewerBinaryGetInfoPointer(viewer,&info));
1865f80ce2aSJacob Faibussowitsch     CHKERRMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank));
1872c71b3e2SJacob Faibussowitsch     PetscCheckFalse(rank == 0 && !info,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Missing info pointer");
1885f80ce2aSJacob Faibussowitsch     CHKERRQ(TestClose(&viewer));
18974a82d2eSLisandro Dalcin   }
19074a82d2eSLisandro Dalcin 
19174a82d2eSLisandro Dalcin   ierr = PetscFinalize();
19274a82d2eSLisandro Dalcin   return ierr;
19374a82d2eSLisandro Dalcin }
19474a82d2eSLisandro Dalcin 
19574a82d2eSLisandro Dalcin /*TEST
19674a82d2eSLisandro Dalcin 
19774a82d2eSLisandro Dalcin    testset:
19874a82d2eSLisandro Dalcin      nsize: {{1 2 3}separate_output}
19974a82d2eSLisandro Dalcin      args: -viewer_view
20074a82d2eSLisandro Dalcin      test:
20174a82d2eSLisandro Dalcin        suffix: stdio
20274a82d2eSLisandro Dalcin        args: -viewer_binary_mpiio 0
20374a82d2eSLisandro Dalcin      test:
20474a82d2eSLisandro Dalcin        requires: mpiio
20574a82d2eSLisandro Dalcin        suffix: mpiio
20674a82d2eSLisandro Dalcin        args: -viewer_binary_mpiio 1
20774a82d2eSLisandro Dalcin 
20874a82d2eSLisandro Dalcin TEST*/
209