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; 129566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"binary.dat",mode,viewer)); 139566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySkipInfo(*viewer)); 149566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySetSkipInfo(*viewer,PETSC_FALSE)); 159566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySetSkipHeader(*viewer,PETSC_FALSE)); 169566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySetSkipOptions(*viewer,PETSC_FALSE)); 179566063dSJacob Faibussowitsch PetscCall(PetscViewerSetUp(*viewer)); 189566063dSJacob Faibussowitsch PetscCall(PetscViewerFileGetName(*viewer,&name)); 199566063dSJacob Faibussowitsch PetscCall(PetscViewerFileGetMode(*viewer,&mode)); 209566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryGetSkipInfo(*viewer,&skipinfo)); 219566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryGetSkipHeader(*viewer,&skipheader)); 229566063dSJacob Faibussowitsch PetscCall(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; 349566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT)); 359566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL)); 3674a82d2eSLisandro Dalcin 379566063dSJacob Faibussowitsch PetscCall(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 3874a82d2eSLisandro Dalcin if (subviewer) { 399566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT)); 409566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL)); 4174a82d2eSLisandro Dalcin } 429566063dSJacob Faibussowitsch PetscCall(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 4374a82d2eSLisandro Dalcin 449566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWriteAll(viewer,&idata,1,s,t,PETSC_INT)); 459566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWriteAll(viewer,&rdata,1,s,t,PETSC_REAL)); 4674a82d2eSLisandro Dalcin 479566063dSJacob Faibussowitsch PetscCall(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 4874a82d2eSLisandro Dalcin if (subviewer) { 499566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT)); 509566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL)); 5174a82d2eSLisandro Dalcin } 529566063dSJacob Faibussowitsch PetscCall(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 5374a82d2eSLisandro Dalcin 549566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT)); 559566063dSJacob Faibussowitsch PetscCall(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; 689566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT)); 699566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL)); 7008401ef6SPierre Jolivet PetscCheck(idata == 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 7108401ef6SPierre Jolivet PetscCheck(rdata == 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 7274a82d2eSLisandro Dalcin 739566063dSJacob Faibussowitsch PetscCall(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 7474a82d2eSLisandro Dalcin if (subviewer) { 7574a82d2eSLisandro Dalcin MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer); 769566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT)); 779566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL)); 7808401ef6SPierre Jolivet PetscCheck(idata == 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 7908401ef6SPierre Jolivet PetscCheck(rdata == 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 8074a82d2eSLisandro Dalcin } 819566063dSJacob Faibussowitsch PetscCall(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 8274a82d2eSLisandro Dalcin 839566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryReadAll(viewer,&idata,1,s,t,PETSC_INT)); 849566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryReadAll(viewer,&rdata,1,s,t,PETSC_REAL)); 8508401ef6SPierre Jolivet PetscCheck(idata == 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 8608401ef6SPierre Jolivet PetscCheck(rdata == 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 8774a82d2eSLisandro Dalcin 889566063dSJacob Faibussowitsch PetscCall(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 8974a82d2eSLisandro Dalcin if (subviewer) { 9074a82d2eSLisandro Dalcin MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer); 919566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT)); 929566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL)); 9308401ef6SPierre Jolivet PetscCheck(idata == 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 9408401ef6SPierre Jolivet PetscCheck(rdata == 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 9574a82d2eSLisandro Dalcin } 969566063dSJacob Faibussowitsch PetscCall(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 9774a82d2eSLisandro Dalcin 989566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT)); 999566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL)); 10008401ef6SPierre Jolivet PetscCheck(idata == 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 10108401ef6SPierre Jolivet PetscCheck(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; 1129566063dSJacob Faibussowitsch PetscCall(PetscViewerRead(viewer,&data,1,&count,PETSC_CHAR)); 11328b400f6SJacob 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; 1229566063dSJacob Faibussowitsch PetscCall(PetscViewerFileGetMode(*viewer,&mode)); 1239566063dSJacob Faibussowitsch if (mode == FILE_MODE_READ) PetscCall(TestEOF(*viewer)); 1249566063dSJacob Faibussowitsch PetscCall(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 132*327415f7SBarry Smith PetscFunctionBeginUser; 1339566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&args,NULL,help)); 13474a82d2eSLisandro Dalcin 1359566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_WRITE,&viewer)); 1369566063dSJacob Faibussowitsch PetscCall(TestWrite(viewer)); 1379566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 13874a82d2eSLisandro Dalcin 1399566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_READ,&viewer)); 1409566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1419566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 14274a82d2eSLisandro Dalcin 1439566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_APPEND,&viewer)); 1449566063dSJacob Faibussowitsch PetscCall(TestWrite(viewer)); 1459566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 14674a82d2eSLisandro Dalcin 1479566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_READ,&viewer)); 1489566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1499566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1509566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 15174a82d2eSLisandro Dalcin 1529566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_APPEND,&viewer)); 1539566063dSJacob Faibussowitsch PetscCall(TestWrite(viewer)); 1549566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 15574a82d2eSLisandro Dalcin 1569566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_READ,&viewer)); 1579566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1589566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1599566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1609566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 16174a82d2eSLisandro Dalcin 1629566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_WRITE,&viewer)); 1639566063dSJacob Faibussowitsch PetscCall(TestWrite(viewer)); 1649566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 16574a82d2eSLisandro Dalcin 1669566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_READ,&viewer)); 1679566063dSJacob Faibussowitsch PetscCall(TestRead(viewer)); 1689566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 16974a82d2eSLisandro Dalcin 1709566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_WRITE,&viewer)); 1719566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 1729566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_READ,&viewer)); 1739566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 1749566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_APPEND,&viewer)); 1759566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 1769566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_READ,&viewer)); 1779566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 17874a82d2eSLisandro Dalcin 17974a82d2eSLisandro Dalcin { 18074a82d2eSLisandro Dalcin FILE *info; 18174a82d2eSLisandro Dalcin PetscMPIInt rank; 18274a82d2eSLisandro Dalcin 1839566063dSJacob Faibussowitsch PetscCall(TestOpen(FILE_MODE_WRITE,&viewer)); 1849566063dSJacob Faibussowitsch PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB)); 1859566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryGetInfoPointer(viewer,&info)); 1869566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank)); 187cc73adaaSBarry Smith PetscCheck(rank != 0 || info,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Missing info pointer"); 1889566063dSJacob Faibussowitsch PetscCall(TestClose(&viewer)); 18974a82d2eSLisandro Dalcin } 19074a82d2eSLisandro Dalcin 1919566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 192b122ec5aSJacob Faibussowitsch return 0; 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