tbl_h5_append_dbl Subroutine

private subroutine tbl_h5_append_dbl(me, datas)

Arguments

Type IntentOptional Attributes Name
class(growing_h5_tbl_t), intent(inout) :: me
real(kind=dp), intent(in), target :: datas(..)

Calls

proc~~tbl_h5_append_dbl~~CallsGraph proc~tbl_h5_append_dbl tbl_h5_append_dbl h5dget_space_f h5dget_space_f proc~tbl_h5_append_dbl->h5dget_space_f h5dset_extent_f h5dset_extent_f proc~tbl_h5_append_dbl->h5dset_extent_f h5dwrite_f h5dwrite_f proc~tbl_h5_append_dbl->h5dwrite_f h5sclose_f h5sclose_f proc~tbl_h5_append_dbl->h5sclose_f h5screate_simple_f h5screate_simple_f proc~tbl_h5_append_dbl->h5screate_simple_f h5sselect_hyperslab_f h5sselect_hyperslab_f proc~tbl_h5_append_dbl->h5sselect_hyperslab_f interface~h5dflush H5Dflush proc~tbl_h5_append_dbl->interface~h5dflush

Called by

proc~~tbl_h5_append_dbl~~CalledByGraph proc~tbl_h5_append_dbl tbl_h5_append_dbl proc~hdf5_write hdf5_t%hdf5_write proc~hdf5_write->proc~tbl_h5_append_dbl

Source Code

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