diff options
author | Scot Breitenfeld <brtnfld@hdfgroup.org> | 2023-05-01 22:21:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-01 22:21:47 (GMT) |
commit | a0340338e53d4b34127a7e5356b28b1640f9414c (patch) | |
tree | 510fe676640fe3892feb681aca253984fd8df512 /fortran/src | |
parent | 9ea976b9b617b0082f5e65f31942c8fbf1a120e1 (diff) | |
download | hdf5-a0340338e53d4b34127a7e5356b28b1640f9414c.zip hdf5-a0340338e53d4b34127a7e5356b28b1640f9414c.tar.gz hdf5-a0340338e53d4b34127a7e5356b28b1640f9414c.tar.bz2 |
Add Fortran Selection IO APIs (#2864)
new selection IO fortran APIs with tests
Diffstat (limited to 'fortran/src')
-rw-r--r-- | fortran/src/H5Pff.F90 | 134 | ||||
-rw-r--r-- | fortran/src/H5_f.c | 3 | ||||
-rw-r--r-- | fortran/src/H5_ff.F90 | 63 | ||||
-rw-r--r-- | fortran/src/H5f90global.F90 | 6 | ||||
-rw-r--r-- | fortran/src/hdf5_fortrandll.def.in | 4 |
5 files changed, 180 insertions, 30 deletions
diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90 index 75cd323..49917dd 100644 --- a/fortran/src/H5Pff.F90 +++ b/fortran/src/H5Pff.F90 @@ -609,6 +609,140 @@ CONTAINS !> !! \ingroup FH5P !! +!! \brief Sets the selection I/O mode +!! +!! \param plist_id \fortran_plist_id +!! \param selection_io_mode The selection I/O mode +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Pset_selection_io() +!! + SUBROUTINE h5pset_selection_io_f(plist_id, selection_io_mode, hdferr) + + IMPLICIT NONE + + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER, INTENT(IN) :: selection_io_mode + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER(C_INT) FUNCTION H5Pset_selection_io(plist_id, selection_io_mode) BIND(C, NAME='H5Pset_selection_io') + IMPORT :: HID_T, C_INT + IMPLICIT NONE + INTEGER(HID_T), VALUE :: plist_id + INTEGER(C_INT), VALUE :: selection_io_mode + END FUNCTION H5Pset_selection_io + END INTERFACE + + hdferr = INT(H5Pset_selection_io(plist_id, INT(selection_io_mode, C_INT))) + + END SUBROUTINE h5pset_selection_io_f + +!> +!! \ingroup FH5P +!! +!! \brief Retrieves the selection I/O mode +!! +!! \param plist_id \fortran_plist_id +!! \param selection_io_mode The selection I/O mode +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Pget_selection_io() +!! + SUBROUTINE h5pget_selection_io_f(plist_id, selection_io_mode, hdferr) + + IMPLICIT NONE + + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER, INTENT(OUT) :: selection_io_mode + INTEGER, INTENT(OUT) :: hdferr + + INTEGER(C_INT) :: c_selection_io_mode + + INTERFACE + INTEGER(C_INT) FUNCTION H5Pget_selection_io(plist_id, selection_io_mode) BIND(C, NAME='H5Pget_selection_io') + IMPORT :: HID_T, C_INT + IMPLICIT NONE + INTEGER(HID_T), VALUE :: plist_id + INTEGER(C_INT) :: selection_io_mode + END FUNCTION H5Pget_selection_io + END INTERFACE + + hdferr = INT(H5Pget_selection_io(plist_id, c_selection_io_mode)) + selection_io_mode = INT(c_selection_io_mode) + + END SUBROUTINE h5pget_selection_io_f + +!> +!! \ingroup FH5P +!! +!! \brief Allows the library to modify the contents of the write buffer +!! +!! \param plist_id \fortran_plist_id +!! \param modify_write_buf Whether the library can modify the contents of the write buffer +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Pset_modify_write_buf() +!! + SUBROUTINE h5pset_modify_write_buf_f(plist_id, modify_write_buf, hdferr) + + IMPLICIT NONE + + INTEGER(HID_T), INTENT(IN) :: plist_id + LOGICAL, INTENT(IN) :: modify_write_buf + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER(C_INT) FUNCTION H5Pset_modify_write_buf(plist_id, modify_write_buf) BIND(C, NAME='H5Pset_modify_write_buf') + IMPORT :: HID_T, C_INT, C_BOOL + IMPLICIT NONE + INTEGER(HID_T), VALUE :: plist_id + LOGICAL(C_BOOL), VALUE :: modify_write_buf + END FUNCTION H5Pset_modify_write_buf + END INTERFACE + + hdferr = INT(H5Pset_modify_write_buf(plist_id, LOGICAL(modify_write_buf, C_BOOL))) + + END SUBROUTINE h5pset_modify_write_buf_f + +!> +!! \ingroup FH5P +!! +!! \brief Retrieves the "modify write buffer" property +!! +!! \param plist_id \fortran_plist_id +!! \param modify_write_buf Whether the library can modify the contents of the write buffer +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Pget_modify_write_buf() +!! + SUBROUTINE h5pget_modify_write_buf_f(plist_id, modify_write_buf, hdferr) + + IMPLICIT NONE + + INTEGER(HID_T), INTENT(IN) :: plist_id + LOGICAL, INTENT(OUT) :: modify_write_buf + INTEGER, INTENT(OUT) :: hdferr + + LOGICAL(C_BOOL) :: c_modify_write_buf + + INTERFACE + INTEGER(C_INT) FUNCTION H5Pget_modify_write_buf(plist_id, modify_write_buf) BIND(C, NAME='H5Pget_modify_write_buf') + IMPORT :: HID_T, C_INT, C_BOOL + IMPLICIT NONE + INTEGER(HID_T), VALUE :: plist_id + LOGICAL(C_BOOL) :: modify_write_buf + END FUNCTION H5Pget_modify_write_buf + END INTERFACE + + hdferr = INT(H5Pget_modify_write_buf(plist_id, c_modify_write_buf)) + modify_write_buf = LOGICAL(c_modify_write_buf) + + END SUBROUTINE h5pget_modify_write_buf_f + +!> +!! \ingroup FH5P +!! !! \brief Sets the byte size of the offsets and lengths used to address objects in an HDF5 file. !! !! \param prp_id File creation property list identifier. diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index 3e1b65d..a9f2d96 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -467,6 +467,9 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid h5d_flags[26] = (int_f)H5D_VDS_FIRST_MISSING; h5d_flags[27] = (int_f)H5D_VDS_LAST_AVAILABLE; h5d_flags[28] = (int_f)H5D_VIRTUAL; + h5d_flags[29] = (int_f)H5D_SELECTION_IO_MODE_DEFAULT; + h5d_flags[30] = (int_f)H5D_SELECTION_IO_MODE_OFF; + h5d_flags[31] = (int_f)H5D_SELECTION_IO_MODE_ON; /* * H5E flags diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90 index f952cac..651c96d 100644 --- a/fortran/src/H5_ff.F90 +++ b/fortran/src/H5_ff.F90 @@ -77,7 +77,7 @@ MODULE H5LIB ! ! H5D flags declaration ! - INTEGER, PARAMETER :: H5D_FLAGS_LEN = 29 + INTEGER, PARAMETER :: H5D_FLAGS_LEN = 32 INTEGER, DIMENSION(1:H5D_FLAGS_LEN) :: H5D_flags INTEGER, PARAMETER :: H5D_SIZE_FLAGS_LEN = 2 INTEGER(SIZE_T), DIMENSION(1:H5D_SIZE_FLAGS_LEN) :: H5D_size_flags @@ -394,35 +394,38 @@ CONTAINS ! ! H5D flags ! - H5D_COMPACT_F = H5D_flags(1) - H5D_CONTIGUOUS_F = H5D_flags(2) - H5D_CHUNKED_F = H5D_flags(3) - H5D_ALLOC_TIME_ERROR_F = H5D_flags(4) - H5D_ALLOC_TIME_DEFAULT_F = H5D_flags(5) - H5D_ALLOC_TIME_EARLY_F = H5D_flags(6) - H5D_ALLOC_TIME_LATE_F = H5D_flags(7) - H5D_ALLOC_TIME_INCR_F = H5D_flags(8) - H5D_SPACE_STS_ERROR_F = H5D_flags(9) - H5D_SPACE_STS_NOT_ALLOCATED_F = H5D_flags(10) - H5D_SPACE_STS_PART_ALLOCATED_F = H5D_flags(11) - H5D_SPACE_STS_ALLOCATED_F = H5D_flags(12) - H5D_FILL_TIME_ERROR_F = H5D_flags(13) - H5D_FILL_TIME_ALLOC_F = H5D_flags(14) - H5D_FILL_TIME_NEVER_F = H5D_flags(15) - H5D_FILL_VALUE_ERROR_F = H5D_flags(16) - H5D_FILL_VALUE_UNDEFINED_F = H5D_flags(17) - H5D_FILL_VALUE_DEFAULT_F = H5D_flags(18) - H5D_FILL_VALUE_USER_DEFINED_F = H5D_flags(19) - H5D_CHUNK_CACHE_W0_DFLT_F = H5D_flags(20) - H5D_MPIO_NO_COLLECTIVE_F = H5D_flags(21) - H5D_MPIO_CHUNK_INDEPENDENT_F = H5D_flags(22) - H5D_MPIO_CHUNK_COLLECTIVE_F = H5D_flags(23) - H5D_MPIO_CHUNK_MIXED_F = H5D_flags(24) - H5D_MPIO_CONTIG_COLLECTIVE_F = H5D_flags(25) - H5D_VDS_ERROR_F = H5D_flags(26) - H5D_VDS_FIRST_MISSING_F = H5D_flags(27) - H5D_VDS_LAST_AVAILABLE_F = H5D_flags(28) - H5D_VIRTUAL_F = H5D_flags(29) + H5D_COMPACT_F = H5D_flags(1) + H5D_CONTIGUOUS_F = H5D_flags(2) + H5D_CHUNKED_F = H5D_flags(3) + H5D_ALLOC_TIME_ERROR_F = H5D_flags(4) + H5D_ALLOC_TIME_DEFAULT_F = H5D_flags(5) + H5D_ALLOC_TIME_EARLY_F = H5D_flags(6) + H5D_ALLOC_TIME_LATE_F = H5D_flags(7) + H5D_ALLOC_TIME_INCR_F = H5D_flags(8) + H5D_SPACE_STS_ERROR_F = H5D_flags(9) + H5D_SPACE_STS_NOT_ALLOCATED_F = H5D_flags(10) + H5D_SPACE_STS_PART_ALLOCATED_F = H5D_flags(11) + H5D_SPACE_STS_ALLOCATED_F = H5D_flags(12) + H5D_FILL_TIME_ERROR_F = H5D_flags(13) + H5D_FILL_TIME_ALLOC_F = H5D_flags(14) + H5D_FILL_TIME_NEVER_F = H5D_flags(15) + H5D_FILL_VALUE_ERROR_F = H5D_flags(16) + H5D_FILL_VALUE_UNDEFINED_F = H5D_flags(17) + H5D_FILL_VALUE_DEFAULT_F = H5D_flags(18) + H5D_FILL_VALUE_USER_DEFINED_F = H5D_flags(19) + H5D_CHUNK_CACHE_W0_DFLT_F = H5D_flags(20) + H5D_MPIO_NO_COLLECTIVE_F = H5D_flags(21) + H5D_MPIO_CHUNK_INDEPENDENT_F = H5D_flags(22) + H5D_MPIO_CHUNK_COLLECTIVE_F = H5D_flags(23) + H5D_MPIO_CHUNK_MIXED_F = H5D_flags(24) + H5D_MPIO_CONTIG_COLLECTIVE_F = H5D_flags(25) + H5D_VDS_ERROR_F = H5D_flags(26) + H5D_VDS_FIRST_MISSING_F = H5D_flags(27) + H5D_VDS_LAST_AVAILABLE_F = H5D_flags(28) + H5D_VIRTUAL_F = H5D_flags(29) + H5D_SELECTION_IO_MODE_DEFAULT_F = H5D_flags(30) + H5D_SELECTION_IO_MODE_OFF_F = H5D_flags(31) + H5D_SELECTION_IO_MODE_ON_F = H5D_flags(32) H5D_CHUNK_CACHE_NSLOTS_DFLT_F = H5D_size_flags(1) H5D_CHUNK_CACHE_NBYTES_DFLT_F = H5D_size_flags(2) diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90 index 984cae9..c37e22d 100644 --- a/fortran/src/H5f90global.F90 +++ b/fortran/src/H5f90global.F90 @@ -330,6 +330,9 @@ MODULE H5GLOBAL !DEC$ATTRIBUTES DLLEXPORT :: H5D_VDS_FIRST_MISSING_F !DEC$ATTRIBUTES DLLEXPORT :: H5D_VDS_LAST_AVAILABLE_F !DEC$ATTRIBUTES DLLEXPORT :: H5D_VIRTUAL_F + !DEC$ATTRIBUTES DLLEXPORT :: H5D_SELECTION_IO_MODE_DEFAULT_F + !DEC$ATTRIBUTES DLLEXPORT :: H5D_SELECTION_IO_MODE_OFF_F + !DEC$ATTRIBUTES DLLEXPORT :: H5D_SELECTION_IO_MODE_ON_F !DEC$endif !> \addtogroup FH5D !> @{ @@ -375,6 +378,9 @@ MODULE H5GLOBAL INTEGER :: H5D_VDS_FIRST_MISSING_F !< H5D_VDS_FIRST_MISSING INTEGER :: H5D_VDS_LAST_AVAILABLE_F !< H5D_VDS_LAST_AVAILABLE INTEGER :: H5D_VIRTUAL_F !< H5D_VIRTUAL + INTEGER :: H5D_SELECTION_IO_MODE_DEFAULT_F !< H5D_SELECTION_IO_MODE_DEFAULT_F + INTEGER :: H5D_SELECTION_IO_MODE_OFF_F !< H5D_SELECTION_IO_MODE_OFF_F + INTEGER :: H5D_SELECTION_IO_MODE_ON_F !< H5D_SELECTION_IO_MODE_ON_F ! ! H5E flags declaration ! diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in index e55be46..4719633 100644 --- a/fortran/src/hdf5_fortrandll.def.in +++ b/fortran/src/hdf5_fortrandll.def.in @@ -391,6 +391,10 @@ H5P_mp_H5PSET_VOL_F H5P_mp_H5PGET_VOL_ID_F H5P_mp_H5PSET_FILE_LOCKING_F H5P_mp_H5PGET_FILE_LOCKING_F +H5P_mp_H5PSET_SELECTION_IO_F +H5P_mp_H5PGET_SELECTION_IO_F +H5P_mp_H5PSET_MODIFY_WRITE_BUF_F +H5P_mp_H5PGET_MODIFY_WRITE_BUF_F ; Parallel @H5_NOPAREXP@H5P_mp_H5PSET_FAPL_MPIO_F @H5_NOPAREXP@H5P_mp_H5PGET_FAPL_MPIO_F |