6c1ce219d1
- renamed, was "H5testFpar.f"
124 lines
3.7 KiB
Fortran
124 lines
3.7 KiB
Fortran
! ==============
|
|
!
|
|
! 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 step
|
|
INTEGER*8 I
|
|
INTEGER*8 J
|
|
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
|
|
|
|
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 I=1,nstep
|
|
! Set the step number
|
|
print *,"Write Step ",I
|
|
rc = h5pt_setstep(file,I)
|
|
! 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)
|
|
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
|
|
|
|
! *****************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)
|
|
! 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()
|
|
|
|
end
|