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 PetscErrorCode ierr; 1174a82d2eSLisandro Dalcin 1274a82d2eSLisandro Dalcin PetscFunctionBegin; 1374a82d2eSLisandro Dalcin ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"binary.dat",mode,viewer);CHKERRQ(ierr); 1474a82d2eSLisandro Dalcin ierr = PetscViewerBinarySkipInfo(*viewer);CHKERRQ(ierr); 1574a82d2eSLisandro Dalcin ierr = PetscViewerBinarySetSkipInfo(*viewer,PETSC_FALSE);CHKERRQ(ierr); 1674a82d2eSLisandro Dalcin ierr = PetscViewerBinarySetSkipHeader(*viewer,PETSC_FALSE);CHKERRQ(ierr); 1774a82d2eSLisandro Dalcin ierr = PetscViewerBinarySetSkipOptions(*viewer,PETSC_FALSE);CHKERRQ(ierr); 1874a82d2eSLisandro Dalcin ierr = PetscViewerSetUp(*viewer);CHKERRQ(ierr); 1974a82d2eSLisandro Dalcin ierr = PetscViewerFileGetName(*viewer,&name);CHKERRQ(ierr); 2074a82d2eSLisandro Dalcin ierr = PetscViewerFileGetMode(*viewer,&mode);CHKERRQ(ierr); 2174a82d2eSLisandro Dalcin ierr = PetscViewerBinaryGetSkipInfo(*viewer,&skipinfo);CHKERRQ(ierr); 2274a82d2eSLisandro Dalcin ierr = PetscViewerBinaryGetSkipHeader(*viewer,&skipheader);CHKERRQ(ierr); 2374a82d2eSLisandro Dalcin ierr = PetscViewerBinaryGetSkipOptions(*viewer,&skipoptions);CHKERRQ(ierr); 2474a82d2eSLisandro Dalcin PetscFunctionReturn(0); 2574a82d2eSLisandro Dalcin } 2674a82d2eSLisandro Dalcin 2774a82d2eSLisandro Dalcin static PetscErrorCode TestWrite(PetscViewer viewer) 2874a82d2eSLisandro Dalcin { 2974a82d2eSLisandro Dalcin PetscInt idata = 42; 3074a82d2eSLisandro Dalcin PetscReal rdata = 42; 3174a82d2eSLisandro Dalcin PetscInt s = PETSC_DETERMINE, t = PETSC_DETERMINE; 3274a82d2eSLisandro Dalcin PetscViewer subviewer; 3374a82d2eSLisandro Dalcin PetscErrorCode ierr; 3474a82d2eSLisandro Dalcin 3574a82d2eSLisandro Dalcin PetscFunctionBegin; 3674a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT);CHKERRQ(ierr); 3774a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr); 3874a82d2eSLisandro Dalcin 3974a82d2eSLisandro Dalcin ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 4074a82d2eSLisandro Dalcin if (subviewer) { 4174a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT);CHKERRQ(ierr); 4274a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr); 4374a82d2eSLisandro Dalcin } 4474a82d2eSLisandro Dalcin ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 4574a82d2eSLisandro Dalcin 4674a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWriteAll(viewer,&idata,1,s,t,PETSC_INT);CHKERRQ(ierr); 4774a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWriteAll(viewer,&rdata,1,s,t,PETSC_REAL);CHKERRQ(ierr); 4874a82d2eSLisandro Dalcin 4974a82d2eSLisandro Dalcin ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 5074a82d2eSLisandro Dalcin if (subviewer) { 5174a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT);CHKERRQ(ierr); 5274a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr); 5374a82d2eSLisandro Dalcin } 5474a82d2eSLisandro Dalcin ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 5574a82d2eSLisandro Dalcin 5674a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT);CHKERRQ(ierr); 5774a82d2eSLisandro Dalcin ierr = PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr); 5874a82d2eSLisandro Dalcin PetscFunctionReturn(0); 5974a82d2eSLisandro Dalcin } 6074a82d2eSLisandro Dalcin 6174a82d2eSLisandro Dalcin static PetscErrorCode TestRead(PetscViewer viewer) 6274a82d2eSLisandro Dalcin { 6374a82d2eSLisandro Dalcin PetscInt idata = 0; 6474a82d2eSLisandro Dalcin PetscReal rdata = 0; 6574a82d2eSLisandro Dalcin PetscInt s = PETSC_DETERMINE, t = PETSC_DETERMINE; 6674a82d2eSLisandro Dalcin PetscViewer subviewer; 6774a82d2eSLisandro Dalcin MPI_Comm comm = PetscObjectComm((PetscObject)viewer); 6874a82d2eSLisandro Dalcin PetscErrorCode ierr; 6974a82d2eSLisandro Dalcin 7074a82d2eSLisandro Dalcin PetscFunctionBegin; 7174a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr); 7274a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr); 73*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(idata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 74*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(rdata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 7574a82d2eSLisandro Dalcin 7674a82d2eSLisandro Dalcin ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 7774a82d2eSLisandro Dalcin if (subviewer) { 7874a82d2eSLisandro Dalcin MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer); 7974a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr); 8074a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr); 81*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(idata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 82*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(rdata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 8374a82d2eSLisandro Dalcin } 8474a82d2eSLisandro Dalcin ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 8574a82d2eSLisandro Dalcin 8674a82d2eSLisandro Dalcin ierr = PetscViewerBinaryReadAll(viewer,&idata,1,s,t,PETSC_INT);CHKERRQ(ierr); 8774a82d2eSLisandro Dalcin ierr = PetscViewerBinaryReadAll(viewer,&rdata,1,s,t,PETSC_REAL);CHKERRQ(ierr); 88*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(idata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 89*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(rdata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 9074a82d2eSLisandro Dalcin 9174a82d2eSLisandro Dalcin ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 9274a82d2eSLisandro Dalcin if (subviewer) { 9374a82d2eSLisandro Dalcin MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer); 9474a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr); 9574a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr); 96*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(idata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 97*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(rdata != 42,subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 9874a82d2eSLisandro Dalcin } 9974a82d2eSLisandro Dalcin ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr); 10074a82d2eSLisandro Dalcin 10174a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr); 10274a82d2eSLisandro Dalcin ierr = PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr); 103*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(idata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%" PetscInt_FMT,idata); 104*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(rdata != 42,comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata); 10574a82d2eSLisandro Dalcin PetscFunctionReturn(0); 10674a82d2eSLisandro Dalcin } 10774a82d2eSLisandro Dalcin 10874a82d2eSLisandro Dalcin static PetscErrorCode TestEOF(PetscViewer viewer) 10974a82d2eSLisandro Dalcin { 11074a82d2eSLisandro Dalcin char data; 11174a82d2eSLisandro Dalcin PetscInt count = PETSC_MAX_INT; 11274a82d2eSLisandro Dalcin MPI_Comm comm = PetscObjectComm((PetscObject)viewer); 11374a82d2eSLisandro Dalcin PetscErrorCode ierr; 11474a82d2eSLisandro Dalcin 11574a82d2eSLisandro Dalcin PetscFunctionBegin; 11674a82d2eSLisandro Dalcin ierr = PetscViewerRead(viewer,&data,1,&count,PETSC_CHAR);CHKERRQ(ierr); 117*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(count,comm,PETSC_ERR_FILE_UNEXPECTED,"Expected EOF"); 11874a82d2eSLisandro Dalcin PetscFunctionReturn(0); 11974a82d2eSLisandro Dalcin } 12074a82d2eSLisandro Dalcin 12174a82d2eSLisandro Dalcin static PetscErrorCode TestClose(PetscViewer *viewer) 12274a82d2eSLisandro Dalcin { 12374a82d2eSLisandro Dalcin PetscFileMode mode; 12474a82d2eSLisandro Dalcin PetscErrorCode ierr; 12574a82d2eSLisandro Dalcin 12674a82d2eSLisandro Dalcin PetscFunctionBegin; 12774a82d2eSLisandro Dalcin ierr = PetscViewerFileGetMode(*viewer,&mode);CHKERRQ(ierr); 12874a82d2eSLisandro Dalcin if (mode == FILE_MODE_READ) {ierr = TestEOF(*viewer);CHKERRQ(ierr);} 12974a82d2eSLisandro Dalcin ierr = PetscViewerDestroy(viewer);CHKERRQ(ierr); 13074a82d2eSLisandro Dalcin PetscFunctionReturn(0); 13174a82d2eSLisandro Dalcin } 13274a82d2eSLisandro Dalcin 13374a82d2eSLisandro Dalcin int main(int argc,char **args) 13474a82d2eSLisandro Dalcin { 13574a82d2eSLisandro Dalcin PetscViewer viewer; 13674a82d2eSLisandro Dalcin PetscErrorCode ierr; 13774a82d2eSLisandro Dalcin 13874a82d2eSLisandro Dalcin ierr = PetscInitialize(&argc,&args,NULL,help);if (ierr) return ierr; 13974a82d2eSLisandro Dalcin 14074a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); 14174a82d2eSLisandro Dalcin ierr = TestWrite(viewer);CHKERRQ(ierr); 14274a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 14374a82d2eSLisandro Dalcin 14474a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr); 14574a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 14674a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 14774a82d2eSLisandro Dalcin 14874a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_APPEND,&viewer);CHKERRQ(ierr); 14974a82d2eSLisandro Dalcin ierr = TestWrite(viewer);CHKERRQ(ierr); 15074a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 15174a82d2eSLisandro Dalcin 15274a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr); 15374a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 15474a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 15574a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 15674a82d2eSLisandro Dalcin 15774a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_APPEND,&viewer);CHKERRQ(ierr); 15874a82d2eSLisandro Dalcin ierr = TestWrite(viewer);CHKERRQ(ierr); 15974a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 16074a82d2eSLisandro Dalcin 16174a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr); 16274a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 16374a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 16474a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 16574a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 16674a82d2eSLisandro Dalcin 16774a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); 16874a82d2eSLisandro Dalcin ierr = TestWrite(viewer);CHKERRQ(ierr); 16974a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 17074a82d2eSLisandro Dalcin 17174a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr); 17274a82d2eSLisandro Dalcin ierr = TestRead(viewer);CHKERRQ(ierr); 17374a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 17474a82d2eSLisandro Dalcin 17574a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); 17674a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 17774a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr); 17874a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 17974a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_APPEND,&viewer);CHKERRQ(ierr); 18074a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 18174a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr); 18274a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 18374a82d2eSLisandro Dalcin 18474a82d2eSLisandro Dalcin { 18574a82d2eSLisandro Dalcin FILE *info; 18674a82d2eSLisandro Dalcin PetscMPIInt rank; 18774a82d2eSLisandro Dalcin 18874a82d2eSLisandro Dalcin ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); 18974a82d2eSLisandro Dalcin ierr = PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB);CHKERRQ(ierr); 19074a82d2eSLisandro Dalcin ierr = PetscViewerBinaryGetInfoPointer(viewer,&info);CHKERRQ(ierr); 191ffc4695bSBarry Smith ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank);CHKERRMPI(ierr); 192*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(rank == 0 && !info,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Missing info pointer"); 19374a82d2eSLisandro Dalcin ierr = TestClose(&viewer);CHKERRQ(ierr); 19474a82d2eSLisandro Dalcin } 19574a82d2eSLisandro Dalcin 19674a82d2eSLisandro Dalcin ierr = PetscFinalize(); 19774a82d2eSLisandro Dalcin return ierr; 19874a82d2eSLisandro Dalcin } 19974a82d2eSLisandro Dalcin 20074a82d2eSLisandro Dalcin /*TEST 20174a82d2eSLisandro Dalcin 20274a82d2eSLisandro Dalcin testset: 20374a82d2eSLisandro Dalcin nsize: {{1 2 3}separate_output} 20474a82d2eSLisandro Dalcin args: -viewer_view 20574a82d2eSLisandro Dalcin test: 20674a82d2eSLisandro Dalcin suffix: stdio 20774a82d2eSLisandro Dalcin args: -viewer_binary_mpiio 0 20874a82d2eSLisandro Dalcin test: 20974a82d2eSLisandro Dalcin requires: mpiio 21074a82d2eSLisandro Dalcin suffix: mpiio 21174a82d2eSLisandro Dalcin args: -viewer_binary_mpiio 1 21274a82d2eSLisandro Dalcin 21374a82d2eSLisandro Dalcin TEST*/ 214