summaryrefslogtreecommitdiffstats
path: root/hl/fortran/src/H5DSff.F90
diff options
context:
space:
mode:
Diffstat (limited to 'hl/fortran/src/H5DSff.F90')
-rw-r--r--hl/fortran/src/H5DSff.F90425
1 files changed, 425 insertions, 0 deletions
diff --git a/hl/fortran/src/H5DSff.F90 b/hl/fortran/src/H5DSff.F90
new file mode 100644
index 0000000..8e238c5
--- /dev/null
+++ b/hl/fortran/src/H5DSff.F90
@@ -0,0 +1,425 @@
+!> @defgroup FH5DS Fortran High Level Dimension Scales (H5DS) Interface
+!!
+!! @see H5DS, C-HL API
+!!
+!! @see @ref H5DS_UG, User Guide
+!!
+
+!> @ingroup FH5DS
+!!
+!! @brief This module contains Fortran interfaces for H5DS
+!
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by The HDF Group. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the COPYING file, which can be found at the root of the source code *
+! distribution tree, or in https://www.hdfgroup.org/licenses. *
+! If you do not have access to either file, you may request a copy from *
+! help@hdfgroup.org. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! _____ __ __ _____ ____ _____ _______ _ _ _______
+! |_ _| \/ | __ \ / __ \| __ \__ __|/\ | \ | |__ __|
+! **** | | | \ / | |__) | | | | |__) | | | / \ | \| | | | ****
+! **** | | | |\/| | ___/| | | | _ / | | / /\ \ | . ` | | | ****
+! **** _| |_| | | | | | |__| | | \ \ | |/ ____ \| |\ | | | ****
+! |_____|_| |_|_| \____/|_| \_\ |_/_/ \_\_| \_| |_|
+!
+! If you add a new function here then you MUST add the function name to the
+! Windows dll file 'hdf5_hl_fortrandll.def.in' in the hl/fortran/src directory.
+! This is needed for Windows based operating systems.
+!
+
+MODULE H5DS
+
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_CHAR, C_FLOAT, C_DOUBLE, C_LOC, C_CHAR
+ USE h5fortran_types
+ USE hdf5
+
+CONTAINS
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Convert dataset \p dsid to a dimension scale, with optional name, \p dimname.
+!!
+!! \param dsid The dataset to be made a Dimemsion Scale.
+!! \param errcode \fortran_error
+!! \param dimname The dimension name
+!!
+!! See C API: @ref H5DSset_scale()
+!!
+ SUBROUTINE H5DSset_scale_f( dsid, errcode, dimname)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: dsid
+ CHARACTER(LEN=*), INTENT(in), OPTIONAL :: dimname
+ INTEGER :: errcode
+
+ INTEGER(SIZE_T) :: dimname_len ! length of dimname (if present)
+
+ INTERFACE
+ INTEGER FUNCTION H5DSset_scale_c(dsid, dimname, dimname_len) &
+ BIND(C,NAME='h5dsset_scale_c')
+ IMPORT :: C_CHAR
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: dsid
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dimname
+ INTEGER(SIZE_T), INTENT(in) :: dimname_len
+ END FUNCTION H5DSset_scale_c
+ END INTERFACE
+
+ IF(PRESENT(dimname))THEN
+ dimname_len = LEN(dimname)
+ errcode = H5DSset_scale_c(dsid, dimname, dimname_len )
+ ELSE
+ errcode = H5DSset_scale_c(dsid, " ", INT(0,SIZE_T) )
+ ENDIF
+
+ END SUBROUTINE H5DSset_scale_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Attach dimension scale dsid to dimension \p idx of dataset \p did.
+!!
+!! \param did The dataset.
+!! \param dsid The scale to be attached.
+!! \param idx The dimension of \p did that \p dsid is associated with.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSattach_scale()
+!!
+ SUBROUTINE H5DSattach_scale_f( did, dsid, idx, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER(hid_t), INTENT(in) :: dsid
+ INTEGER , INTENT(in) :: idx
+ INTEGER :: errcode
+ INTEGER :: c_idx
+
+ INTERFACE
+ INTEGER FUNCTION H5DSattach_scale_c(did, dsid, idx) &
+ BIND(C,NAME='h5dsattach_scale_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER(hid_t), INTENT(in) :: dsid
+ INTEGER , INTENT(in) :: idx
+ END FUNCTION H5DSattach_scale_c
+ END INTERFACE
+
+ c_idx = idx -1 ! account for C-dimensions starting at 0
+
+ errcode = H5DSattach_scale_c( did, dsid, c_idx)
+
+ END SUBROUTINE H5DSattach_scale_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Detach dimension scale dsid from the dimension idx of dataset \p did.
+!!
+!! \param did The dataset.
+!! \param dsid The scale to be detached.
+!! \param idx The dimension of \p did to detach.
+!! \param errcode \fortran_error
+!!
+
+!! See C API: @ref H5DSdetach_scale()
+!!
+ SUBROUTINE H5DSdetach_scale_f( did, dsid, idx, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER(hid_t), INTENT(in) :: dsid
+ INTEGER , INTENT(in) :: idx
+ INTEGER :: errcode
+ INTEGER :: c_idx
+
+ INTERFACE
+ INTEGER FUNCTION H5DSdetach_scale_c(did, dsid, idx) &
+ BIND(C,NAME='h5dsdetach_scale_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER(hid_t), INTENT(in) :: dsid
+ INTEGER , INTENT(in) :: idx
+ END FUNCTION H5DSdetach_scale_c
+ END INTERFACE
+
+ c_idx = idx - 1 ! account for C-dimensions starting at 0
+
+ errcode = H5DSdetach_scale_c( did, dsid, c_idx)
+
+ END SUBROUTINE H5DSdetach_scale_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Report if dimension scale dsid is currently attached to dimension idx of dataset did.
+!!
+!! \param did The dataset.
+!! \param dsid The scale to be attached.
+!! \param idx The dimension of \p did that \p dsid is associated with.
+!! \param is_attached If dimension scale \p dsid is currently attached to dimension \p idx of dataset \p did.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSis_attached()
+!!
+ SUBROUTINE H5DSis_attached_f( did, dsid, idx, is_attached, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER(hid_t), INTENT(in) :: dsid
+ INTEGER , INTENT(in) :: idx
+ LOGICAL , INTENT(out) :: is_attached
+ INTEGER :: errcode
+ INTEGER :: c_is_attached
+ INTEGER :: c_idx
+
+ INTERFACE
+ INTEGER FUNCTION H5DSis_attached_c(did, dsid, idx, c_is_attached) &
+ BIND(C,NAME='h5dsis_attached_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER(hid_t), INTENT(in) :: dsid
+ INTEGER , INTENT(in) :: idx
+ INTEGER , INTENT(out) :: c_is_attached
+ END FUNCTION H5DSis_attached_c
+ END INTERFACE
+
+ c_idx = idx - 1 ! account for C-dimensions starting at 0
+
+ errcode = H5DSis_attached_c(did, dsid, c_idx, c_is_attached)
+
+ is_attached = .FALSE. ! default
+ IF(c_is_attached.GT.0)THEN
+ is_attached = .TRUE.
+ ELSE IF(errcode.LT.0)THEN
+ errcode = -1
+ ENDIF
+
+ END SUBROUTINE H5DSis_attached_f
+
+!
+! H5DSiterate_scales: Implement in F2003
+!
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Determines whether \p did is a Dimension Scale.
+!!
+!! \param did The data set to query.
+!! \param is_scale If is a Dimension Scale.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSis_scale()
+!!
+ SUBROUTINE H5DSis_scale_f( did, is_scale, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ LOGICAL , INTENT(out) :: is_scale
+ INTEGER , INTENT(out) :: errcode
+ INTEGER :: c_is_scale
+
+ INTERFACE
+ INTEGER FUNCTION H5DSis_scale_c(did,c_is_scale) &
+ BIND(C,NAME='h5dsis_scale_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER, INTENT(out) :: c_is_scale
+ END FUNCTION H5DSis_scale_c
+ END INTERFACE
+
+ errcode = H5DSis_scale_c(did, c_is_scale)
+
+ is_scale = .FALSE. ! default
+ IF(c_is_scale.GT.0)THEN
+ is_scale = .TRUE.
+ ELSE IF(errcode.LT.0)THEN
+ errcode = -1
+ ENDIF
+
+ END SUBROUTINE H5DSis_scale_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Set label for the dimension \p idx of \p did to the value \p label.
+!!
+!! \param did The data set.
+!! \param idx The dimension.
+!! \param label The label.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSset_label()
+!!
+ SUBROUTINE H5DSset_label_f( did, idx, label, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER , INTENT(in) :: idx
+ CHARACTER(LEN=*), INTENT(in) :: label
+ INTEGER :: errcode ! Error code
+
+ INTEGER(SIZE_T) :: label_len ! Length of label
+ INTEGER :: c_idx
+
+ INTERFACE
+ INTEGER FUNCTION H5DSset_label_c(did, idx, label, label_len) &
+ BIND(C,NAME='h5dsset_label_c')
+ IMPORT :: C_CHAR
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER , INTENT(in) :: idx
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: label
+ INTEGER(SIZE_T), INTENT(in) :: label_len
+ END FUNCTION H5DSset_label_c
+ END INTERFACE
+
+ c_idx = idx - 1
+
+ label_len = LEN(label)
+ errcode = H5DSset_label_c(did, c_idx, label, label_len)
+
+ END SUBROUTINE H5DSset_label_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Read the \p label for dimension \p idx of \p did into buffer \p label.
+!!
+!! \param did The dataset.
+!! \param idx The dimension.
+!! \param label The label.
+!! \param size The length of the \p label buffer.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSget_label()
+!!
+ SUBROUTINE H5DSget_label_f( did, idx, label, size, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER , INTENT(in) :: idx
+ CHARACTER(LEN=*), INTENT(INOUT) :: label
+ INTEGER(size_t) , INTENT(INOUT) :: size
+ INTEGER :: errcode
+ INTEGER :: c_idx
+
+ INTERFACE
+ INTEGER FUNCTION H5DSget_label_c(did, idx, label, size) &
+ BIND(C,NAME='h5dsget_label_c')
+ IMPORT :: C_CHAR
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER , INTENT(in) :: idx
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(INOUT) :: label
+ INTEGER(SIZE_T), INTENT(inout) :: size
+ END FUNCTION H5DSget_label_c
+ END INTERFACE
+
+ c_idx = idx - 1
+
+ errcode = H5DSget_label_c(did, c_idx, label, size)
+
+ END SUBROUTINE H5DSget_label_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Read the name of scale \p did into buffer name.
+!!
+!! \param did Dimension scale identifier.
+!! \param name Buffer to contain the returned name.
+!! \param size Size in bytes, of the name buffer.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSget_scale_name()
+!!
+ SUBROUTINE H5DSget_scale_name_f(did, name, size, errcode)
+
+ IMPLICIT NONE
+
+ INTEGER(hid_t), INTENT(in) :: did
+ CHARACTER(LEN=*), INTENT(INOUT) :: name
+ INTEGER(size_t) , INTENT(INOUT) :: size
+ INTEGER :: errcode
+
+ INTERFACE
+ INTEGER FUNCTION H5DSget_scale_name_c(did, name, size) &
+ bind(c,name='h5dsget_scale_name_c')
+ IMPORT :: C_CHAR
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(INOUT) :: name
+ INTEGER(SIZE_T), INTENT(inout) :: size
+ END FUNCTION H5DSget_scale_name_c
+ END INTERFACE
+
+ errcode = H5DSget_scale_name_c(did, name, size)
+
+ END SUBROUTINE H5DSget_scale_name_f
+
+!>
+!! \ingroup FH5DS
+!!
+!! \brief Determines how many Dimension Scales are attached to dimension idx of \p did.
+!!
+!! \param did The dataset to query.
+!! \param idx The dimension of \p did to query.
+!! \param num_scales Number of Dimension Scales associated with \p did.
+!! \param errcode \fortran_error
+!!
+!! See C API: @ref H5DSget_num_scales()
+!!
+ SUBROUTINE H5DSget_num_scales_f( did, idx, num_scales, errcode)
+
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER , INTENT(in) :: idx
+ INTEGER , INTENT(INOUT) :: num_scales
+ INTEGER :: errcode
+ INTEGER :: c_idx
+
+ INTERFACE
+ INTEGER FUNCTION H5DSget_num_scales_c(did, idx, num_scales) &
+ BIND(C,NAME='h5dsget_num_scales_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: did
+ INTEGER , INTENT(in) :: idx
+ INTEGER , INTENT(INOUT) :: num_scales
+ END FUNCTION H5DSget_num_scales_c
+ END INTERFACE
+
+ c_idx = idx - 1
+ errcode = H5DSget_num_scales_c(did, c_idx, num_scales)
+
+ END SUBROUTINE H5DSget_num_scales_f
+
+END MODULE h5ds
+
+
+
+
+
+