From 25ca447c5a3f1a111358bffa3ba0a43ec1b7bf74 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Wed, 13 Feb 2008 15:08:36 +0000 Subject: [PATCH] added --- .gitattributes | 1 + test/h5u/H5testFpar.f90 | 171 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 test/h5u/H5testFpar.f90 diff --git a/.gitattributes b/.gitattributes index 7d4ee11..10efffc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -80,6 +80,7 @@ test/h5u/H5ParallelTest.cc -text test/h5u/H5PartTest.cc -text test/h5u/H5test.cc -text test/h5u/H5testF.f -text +test/h5u/H5testFpar.f90 -text tools/H5PartMerge/AUTHORS -text tools/H5PartMerge/COPYING -text tools/H5PartMerge/ChangeLog -text diff --git a/test/h5u/H5testFpar.f90 b/test/h5u/H5testFpar.f90 new file mode 100644 index 0000000..23881b1 --- /dev/null +++ b/test/h5u/H5testFpar.f90 @@ -0,0 +1,171 @@ +! ============== +! +! Sample Fortran program that uses HDF5 bindings +! +! ============== + + program H5testFpar + implicit none + include 'mpif.h' + include 'H5PartF90.inc' + INTEGER*8 file + INTEGER*8 nstep + INTEGER*8 ndata + INTEGER*8 npoints,pointoffset + INTEGER*8 I,J,K,step + REAL*8,ALLOCATABLE:: X(:),Y(:),Z(:),PX(:),PY(:),PZ(:) + INTEGER*8,ALLOCATABLE:: ID(:) + REAL*8 REALTIME(1) + INTEGER myproc,nprocs + INTEGER ierr + INTEGER*8 rc + INTEGER:: comm + + INTEGER*8:: offset + INTEGER*8, allocatable, dimension(:,:) :: Localnum1 + INTEGER*8, allocatable, dimension(:,:,:) :: Localnum + INTEGER nprocrow, nproccol + + call MPI_Init(ierr) + comm = MPI_COMM_WORLD + call MPI_Comm_rank(comm,myproc,ierr) + call MPI_Comm_size(comm,nprocs,ierr) + + file = h5pt_openw_par("testfilef.h5",comm) + print *,"Opened file testfilef.h5 for writing" + npoints = 1024 + nstep = 10 + ALLOCATE(X(npoints),Y(npoints),Z(npoints)) + ALLOCATE(PX(npoints),PY(npoints),PZ(npoints)) + ALLOCATE(ID(npoints)) + print *," Npoints=",npoints," nsteps=",nstep + print *," writing X,Y,Z,PX,PY,PZ,ID" + print *," ... initialize the data arrays" + do I=1,npoints + X(INT(I))=0.0 + Y(I)=1.0+REAL(I) + Z(I)=100.0+REAL(I)*2.0 + ID(I)=I + enddo + print *,"Tell h5pt how many particles are stored in the file" +! set the number of points + rc = h5pt_setnpoints(file,npoints) + print *,"write an attribute string" +! write an annotation to the file + rc=h5pt_writefileattrib_string(file,"Annotation","Testing 1 2 3") + print *,"and now write the steps" + + do step=1,nstep +! Set the step number + print *,"Write Step ",step + rc = h5pt_setstep(file,step) + ! Now start writing the data arrays for this step + rc = h5pt_writedata_r8(file,"x",X) + rc = h5pt_writedata_r8(file,"y",Y) + rc = h5pt_writedata_r8(file,"z",Z) + rc = h5pt_writedata_r8(file,"px",PX) + rc = h5pt_writedata_r8(file,"py",PY) + rc = h5pt_writedata_r8(file,"pz",PZ) + rc = h5pt_writedata_i8(file,"id",ID) + do J=1,npoints + ID(J)=ID(J)+10 + enddo + ! And write a simple floatingpoint attribute associated with this timestep + REALTIME(1) = REAL(I)*0.1 + rc = h5pt_writestepattrib_r8(file,"RealTime",REALTIME,1_8) + print*,'Write REALTIME ',REALTIME + ! + ! Test file arrtibutes + ! + nprocrow=2 + nproccol=2 + print*,'Write localnum ',Localnum + allocate(Localnum1(1,nprocrow*nproccol)) + allocate(Localnum(2,0:nprocrow-1,0:nproccol-1)) + ! + ! init testdata + ! + do k = 0, 1 + do i = 0,(nprocrow-1) + do j = 0,(nproccol-1) + Localnum(k,i,j) = k+i+j + enddo + enddo + enddo + ! + offset=0 + do i = 0, (nprocrow-1) + do j = 0,(nproccol-1) + Localnum1(offset) = Localnum(1,i,j) + offset = offset + 1 + enddo + enddo + rc = h5pt_writestepattrib_i8(file,"Localnum1",Localnum1(:),offset) + print*,'rc (Localnum1)= ',rc + + enddo + + print *,"Done writing, now close the file" + rc = h5pt_close(file) + + ! **************** Clean out some variables *************** + nstep=0 +! npoints=0 + do I=1,npoints + X(I)=-1.0 + Y(I)=-1.0 + Z(I)=-1.0 + ID(I)=0 + enddo + + do k = 0, 1 + do i = 0,(nprocrow-1) + do j = 0,(nproccol-1) + Localnum(k,i,j) = 0 + enddo + enddo + enddo + + REALTIME(1) = 0.0 + + ! *****************Now Reopen for Reading ****************** + + print *,"Open file for reading" + file = h5pt_openr_par("testfilef.h5",comm) + print *," Opened testfilef.h5" + nstep = h5pt_getnsteps(file) + print *," Nsteps = ",nstep + rc = h5pt_setstep(file,1_8) + print *,"now get the number of datasets" + ndata = h5pt_getndatasets(file) + print *," Ndata=",ndata + npoints = h5pt_getnpoints(file) + print *," Total NP=",npoints + npoints = npoints/nprocs + pointoffset = npoints*myproc; + rc = h5pt_setview(file,pointoffset,pointoffset+npoints) + print *," Pointoffset=",pointoffset," Local NP=",npoints +! Now we need to set our view to read correct points + + + do step=1,nstep + print *,"Read step ",step +! set the current step + rc = h5pt_setstep(file,step) + rc = h5pt_readdata_i8(file,"id",ID) + rc = h5pt_readstepattrib_r8(file,"RealTime",REALTIME) + print*,'Read REALTIME ',REALTIME + rc = h5pt_readstepattrib_i8(file,"Localnum1",Localnum1) + print*,'Read Localnum ',Localnum1 +! read the Z data from the current step +! rc = h5prt_readdata(file,step,X,Y,Z,PX,PY,PZ,ID) +! do J=1,10 +! print *," ID(",J,")==",ID(J) +! enddo + enddo + + rc = h5pt_close(file) + print *,"done" + call MPI_Finalize(ierr) + + end