Hello,
I am new in hdf5, and I recently encountered a problem. I am using
fortran 90 and a fortran 90 hdf5 wrapper (
https://github.com/galtay/sphray/tree/master/hdf5_wrapper) to read and
write from many hdf5 files. The process of reading, modifying data and
writing is done inside a do loop.
I found that the code runs fine until a certain point when It shows the
error message:
***Abort HDF5 : Unable to open HDF5 file in open_file()!
file name : /mnt/su3ctm/ggranda/cp_test2/rep_-1_-1_-2/ivol31/galaxies.hdf5
I have checked out and the file exist, so that is not the problem. I think
is something connected with hdf5.
The code is the following:
subroutine replications_translation(n_a,nsub,lbox,directory)
! subroutine to do the translations along all the the replications
! it makes use of the
! n_a: number of replications per axis
! nsub: number of subvolumes
! lbox: box size
! x: x coordinate
! y: y coordinate
! z: z coordinate
! directory: folder that contains the replications
! redshift: character that specifies the redshift (e.g. iz200)
integer, intent(in) :: n_a,nsub
real, dimension(:),allocatable :: x,y,z,dc,decl,ra
real, intent(in) :: lbox
character(*), intent(in) :: directory
!character(5), intent(in) ::redshift
character(2) :: temp_i,temp_j,temp_k,temp_subv
integer :: i,j,k,l,ifile,dims(1),rank,count_l
count_l=0
do i=-n_a,n_a
write(temp_i,"(I2)") i
do j=-n_a,n_a
write(temp_j,"(I2)") j
do k=-n_a,n_a
write(temp_k,"(I2)") k
do l=30,nsub-1
write(temp_subv,"(I2)") l
call
hdf5_open_file(ifile,directory//'rep_'//trim(adjustl(temp_i))//'_'//trim(adjustl(temp_j))//'_'//trim(adjustl(temp_k))//'/ivol'//trim(adjustl(temp_subv))//'/galaxies.hdf5',readonly=.false.)
call
hdf5_get_dimensions(ifile,'Output001/mhalo',rank,dims)
allocate(x(dims(1)),y(dims(1)),z(dims(1)),dc(dims(1)),ra(dims(1)),decl(dims(1)))
call hdf5_read_data(ifile,'Output001/xgal',x)
call hdf5_read_data(ifile,'Output001/ygal',y)
call hdf5_read_data(ifile,'Output001/zgal',z)
x =x+i*lbox
y =y+j*lbox
z =z+k*lbox
dc =sqrt(x**2.0+y**2.0+z**2.0)
decl=asin(z/dc)
ra =atan2(y,x)
call
hdf5_write_data(ifile,'Output001/xgal_t',x,overwrite=.true.)
call
hdf5_write_attribute(ifile,'Output001/xgal_t/Comment','X(lightcone)
coordinate of this galaxy [Mpc/h]')
call
hdf5_write_data(ifile,'Output001/ygal_t',y,overwrite=.true.)
call
hdf5_write_attribute(ifile,'Output001/ygal_t/Comment','Y(lightcone)
coordinate of this galaxy [Mpc/h]')
call
hdf5_write_data(ifile,'Output001/zgal_t',z,overwrite=.true.)
call
hdf5_write_attribute(ifile,'Output001/zgal_t/Comment','Z(lightcone)
coordinate of this galaxy [Mpc/h]')
call
hdf5_write_data(ifile,'Output001/dc',dc,overwrite=.true.)
call
hdf5_write_attribute(ifile,'Output001/dc/Comment','Comoving distance
[Mpc/h]')
!print *, "check hdf5"
call
hdf5_write_data(ifile,'Output001/ra',ra,overwrite=.true.)
call
hdf5_write_attribute(ifile,'Output001/ra/Comment',"Right ascention")
call
hdf5_write_data(ifile,'Output001/decl',decl,overwrite=.true.)
call
hdf5_write_attribute(ifile,'Output001/decl/Comment',"Declination")
call hdf5_close_file(ifile)
print *, "Done with
"//directory//'rep_'//trim(adjustl(temp_i))//'_'//trim(adjustl(temp_j))//'_'//trim(adjustl(temp_k))//'/ivol'//trim(adjustl(temp_subv))//'/galaxies.hdf5'
deallocate(x,y,z,dc,ra,decl)
count_l=count_l+1
print *, "number =",count_l
enddo
enddo
enddo
enddo
Could you please help me with that? The number of files that I need to
open, read, write is tremendous. So, I dont know if that is a limitation
for hdf5 or if my code is written with not good practices and that is
causing the crash.
Thanks in advance,
--
Guido
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5