subroutine tbl_h5_append_dbl(me,datas)
class(growing_h5_tbl_t), intent(inout) :: me
real(dp),target, intent(in) :: datas(..)
integer :: err
integer(hid_t) :: mem_sp, dset_sp
integer(hsize_t) :: offset(8), mem_dim(8)
real(dp), pointer :: data_2d(:,:), data_3d(:,:,:)
real(dp) :: data_1d(1)
offset = 0
offset(1) = me%dims(1)
mem_dim = me%dims
mem_dim(1) = 1
me%dims(1) = 1 + me%dims(1)
call h5dset_extent_f(me%dset, me%dims, err) ! increase size of the dataset
call h5screate_simple_f (me%rank, mem_dim, mem_sp, err) ! create memory space
call h5dget_space_f(me%dset, dset_sp, err) ! get dataset space
call h5sselect_hyperslab_f(dset_sp, H5S_SELECT_SET_F, offset, mem_dim, err)
select rank(datas)
rank(0)
data_1d = [datas]
call H5dwrite_f(me%dset, H5T_NATIVE_DOUBLE, data_1d, mem_dim, &
err, mem_sp, dset_sp)
rank(1)
data_2d(1:1,1:size(datas)) => datas
call H5dwrite_f(me%dset, H5T_NATIVE_DOUBLE, data_2d, mem_dim, &
err, mem_sp, dset_sp)
rank(2)
data_3d(1:1,1:size(datas,1),1:size(datas,2)) => datas
call H5dwrite_f(me%dset, H5T_NATIVE_DOUBLE, data_3d, mem_dim, &
err, mem_sp, dset_sp)
rank default
error stop "growing array can be only rank from 0 to 2"
end select
call h5sclose_f(dset_sp, err)
call h5sclose_f(mem_sp, err)
err = H5Dflush(me%dset)
end subroutine tbl_h5_append_dbl