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