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; 12*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"binary.dat",mode,viewer)); 13*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinarySkipInfo(*viewer)); 14*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinarySetSkipInfo(*viewer,PETSC_FALSE)); 15*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinarySetSkipHeader(*viewer,PETSC_FALSE)); 16*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinarySetSkipOptions(*viewer,PETSC_FALSE)); 17*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerSetUp(*viewer)); 18*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileGetName(*viewer,&name)); 19*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileGetMode(*viewer,&mode)); 20*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryGetSkipInfo(*viewer,&skipinfo)); 21*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryGetSkipHeader(*viewer,&skipheader)); 22*5f80ce2aSJacob 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; 34*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT)); 35*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL)); 3674a82d2eSLisandro Dalcin 37*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 3874a82d2eSLisandro Dalcin if (subviewer) { 39*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT)); 40*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL)); 4174a82d2eSLisandro Dalcin } 42*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 4374a82d2eSLisandro Dalcin 44*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWriteAll(viewer,&idata,1,s,t,PETSC_INT)); 45*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWriteAll(viewer,&rdata,1,s,t,PETSC_REAL)); 4674a82d2eSLisandro Dalcin 47*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 4874a82d2eSLisandro Dalcin if (subviewer) { 49*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT)); 50*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL)); 5174a82d2eSLisandro Dalcin } 52*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 5374a82d2eSLisandro Dalcin 54*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT)); 55*5f80ce2aSJacob 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; 68*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT)); 69*5f80ce2aSJacob 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 73*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 7474a82d2eSLisandro Dalcin if (subviewer) { 7574a82d2eSLisandro Dalcin MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer); 76*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT)); 77*5f80ce2aSJacob 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 } 81*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 8274a82d2eSLisandro Dalcin 83*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryReadAll(viewer,&idata,1,s,t,PETSC_INT)); 84*5f80ce2aSJacob 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 88*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 8974a82d2eSLisandro Dalcin if (subviewer) { 9074a82d2eSLisandro Dalcin MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer); 91*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT)); 92*5f80ce2aSJacob 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 } 96*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer)); 9774a82d2eSLisandro Dalcin 98*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT)); 99*5f80ce2aSJacob 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; 112*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRead(viewer,&data,1,&count,PETSC_CHAR)); 1132c71b3e2SJacob Faibussowitsch PetscCheckFalse(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; 122*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerFileGetMode(*viewer,&mode)); 123*5f80ce2aSJacob Faibussowitsch if (mode == FILE_MODE_READ) CHKERRQ(TestEOF(*viewer)); 124*5f80ce2aSJacob 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 135*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer)); 136*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestWrite(viewer)); 137*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 13874a82d2eSLisandro Dalcin 139*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_READ,&viewer)); 140*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 141*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 14274a82d2eSLisandro Dalcin 143*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_APPEND,&viewer)); 144*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestWrite(viewer)); 145*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 14674a82d2eSLisandro Dalcin 147*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_READ,&viewer)); 148*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 149*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 150*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 15174a82d2eSLisandro Dalcin 152*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_APPEND,&viewer)); 153*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestWrite(viewer)); 154*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 15574a82d2eSLisandro Dalcin 156*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_READ,&viewer)); 157*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 158*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 159*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 160*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 16174a82d2eSLisandro Dalcin 162*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer)); 163*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestWrite(viewer)); 164*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 16574a82d2eSLisandro Dalcin 166*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_READ,&viewer)); 167*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestRead(viewer)); 168*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 16974a82d2eSLisandro Dalcin 170*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer)); 171*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 172*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_READ,&viewer)); 173*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 174*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_APPEND,&viewer)); 175*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 176*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_READ,&viewer)); 177*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestClose(&viewer)); 17874a82d2eSLisandro Dalcin 17974a82d2eSLisandro Dalcin { 18074a82d2eSLisandro Dalcin FILE *info; 18174a82d2eSLisandro Dalcin PetscMPIInt rank; 18274a82d2eSLisandro Dalcin 183*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestOpen(FILE_MODE_WRITE,&viewer)); 184*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB)); 185*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryGetInfoPointer(viewer,&info)); 186*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank)); 1872c71b3e2SJacob Faibussowitsch PetscCheckFalse(rank == 0 && !info,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Missing info pointer"); 188*5f80ce2aSJacob 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