diff options
Diffstat (limited to 'hl/fortran/src/H5DSff.F90')
-rw-r--r-- | hl/fortran/src/H5DSff.F90 | 518 |
1 files changed, 518 insertions, 0 deletions
diff --git a/hl/fortran/src/H5DSff.F90 b/hl/fortran/src/H5DSff.F90 new file mode 100644 index 0000000..00cf4d8 --- /dev/null +++ b/hl/fortran/src/H5DSff.F90 @@ -0,0 +1,518 @@ +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! Copyright by The HDF Group. * +! Copyright by the Board of Trustees of the University of Illinois. * +! 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 files COPYING and Copyright.html. COPYING can be found at the root * +! of the source code distribution tree; Copyright.html can be found at the * +! root level of an installed copy of the electronic HDF5 document set and * +! is linked from the top-level documents page. It can also be found at * +! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * +! access to either file, you may request a copy from help@hdfgroup.org. * +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! +! +! This file contains FORTRAN90 interfaces for H5DS functions +! + +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 + +!------------------------------------------------------------------------- +! Function: H5DSset_scale_f +! +! Purpose: Convert dataset dsid to a dimension scale, with optional name, dimname. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 17, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSset_scale_f( dsid, errcode, dimname) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsset_scale_f +!DEC$endif +! + + INTEGER(hid_t), INTENT(in) :: dsid ! The dataset to be made a Dimension Scale + CHARACTER(LEN=*), INTENT(in), OPTIONAL :: dimname ! The dimension name + INTEGER :: errcode ! Error code + + 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 ! The dataset to be made a Dimension Scale + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dimname ! The dimension name + 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 + +!------------------------------------------------------------------------- +! Function: H5DSattach_scale_f +! +! Purpose: Attach dimension scale dsid to dimension idx of dataset did. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 17, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSattach_scale_f( did, dsid, idx, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsattach_scale_f +!DEC$endif +! + INTEGER(hid_t), INTENT(in) :: did ! the dataset + INTEGER(hid_t), INTENT(in) :: dsid ! the scale to be attached + INTEGER , INTENT(in) :: idx ! the dimension of did that dsid is associated with. + INTEGER :: errcode ! error code + 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 ! the dataset + INTEGER(hid_t), INTENT(in) :: dsid ! the scale to be attached + INTEGER , INTENT(in) :: idx ! the dimension of did that dsid is associated with. + 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 + +!------------------------------------------------------------------------- +! Function: H5DSdetach_scale_f +! +! Purpose: Detach dimension scale dsid from the dimension idx of Dataset did. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 17, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSdetach_scale_f( did, dsid, idx, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsdetach_scale_f +!DEC$endif +! + INTEGER(hid_t), INTENT(in) :: did ! the dataset + INTEGER(hid_t), INTENT(in) :: dsid ! the scale to be detached + INTEGER , INTENT(in) :: idx ! the dimension of did to detach + INTEGER :: errcode ! error code + 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 ! the dataset + INTEGER(hid_t), INTENT(in) :: dsid ! the scale to be detached + INTEGER , INTENT(in) :: idx ! the dimension of did to detach + 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 + + +!------------------------------------------------------------------------- +! Function: H5DSis_attached_f +! +! Purpose: Report if dimension scale dsid is currently attached to dimension idx of dataset did. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 17, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSis_attached_f( did, dsid, idx, is_attached, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsis_attached_f +!DEC$endif +! + INTEGER(hid_t), INTENT(in) :: did ! the dataset + INTEGER(hid_t), INTENT(in) :: dsid ! the scale to be attached + INTEGER , INTENT(in) :: idx ! the dimension of did that dsid is associated with + LOGICAL , INTENT(out) :: is_attached ! logical: dimension scale dsid is currently attached to + ! dimension idx of dataset did + INTEGER :: errcode ! error code + 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 ! the dataset + INTEGER(hid_t), INTENT(in) :: dsid ! the scale to be detached + INTEGER , INTENT(in) :: idx ! the dimension of did to detach + INTEGER , INTENT(out) :: c_is_attached ! dimension scale dsid is currently attached to + 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: Impliment in F2003 +! + +!------------------------------------------------------------------------- +! Function: H5DSis_scale_f +! +! Purpose: Determines whether dset is a Dimension Scale. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 18, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSis_scale_f( did, is_scale, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsis_scale_f +!DEC$endif +! + INTEGER(hid_t), INTENT(in) :: did ! the data set to query + LOGICAL , INTENT(out) :: is_scale ! logical: + ! .TRUE. if did is a Dimension Scale + INTEGER :: errcode ! error code + 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 + +!------------------------------------------------------------------------- +! Function: H5DSset_label_f +! +! Purpose: Set label for the dimension idx of did to the value label +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 18, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSset_label_f( did, idx, label, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsset_label_f +!DEC$endif +! + + INTEGER(hid_t), INTENT(in) :: did ! The dataset + INTEGER , INTENT(in) :: idx ! The dimension + CHARACTER(LEN=*), INTENT(in) :: label ! The 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 ! The dataset + INTEGER , INTENT(in) :: idx ! The dimension + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: label ! The label + INTEGER(SIZE_T), INTENT(in) :: label_len ! Length of label + 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 + +!------------------------------------------------------------------------- +! Function: H5DSget_label_f +! +! Purpose: Read the label for dimension idx of did into buffer label. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 18, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSget_label_f( did, idx, label, size, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsget_label_f +!DEC$endif +! + + INTEGER(hid_t), INTENT(in) :: did ! The dataget + INTEGER , INTENT(in) :: idx ! The dimension + CHARACTER(LEN=*), INTENT(in) :: label ! The label + INTEGER(size_t) , INTENT(inout) :: size ! The length of the label buffer + INTEGER :: errcode ! Error code + 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 ! The dataget + INTEGER , INTENT(in) :: idx ! The dimension + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: label ! The label + INTEGER(SIZE_T), INTENT(inout) :: size ! Length of label + 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 + + +!------------------------------------------------------------------------- +! Function: H5DSget_scale_name_f +! +! Purpose: Read the name of scale did into buffer name. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 18, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSget_scale_name_f(did, name, size, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsget_scale_name_f +!DEC$endif +! + + INTEGER(hid_t), INTENT(in) :: did ! The dataget + CHARACTER(LEN=*), INTENT(out) :: name ! The name + INTEGER(size_t) , INTENT(inout) :: size ! The length of the name buffer + INTEGER :: errcode ! Error code + + 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 ! The dataget + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(out) :: name ! The name + INTEGER(SIZE_T), INTENT(inout) :: size ! Length of name + END FUNCTION H5DSget_scale_name_c + END INTERFACE + + errcode = H5DSget_scale_name_c(did, name, size) + + END SUBROUTINE H5DSget_scale_name_f + +!------------------------------------------------------------------------- +! Function: H5DSget_num_scales_f +! +! Purpose: Determines how many Dimension Scales are attached to dimension idx of did +! +! Return: Success: 0, Failure: -1 +! +! Programmer: M. Scot Breitenfeld +! +! Date: April 18, 2011 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE H5DSget_num_scales_f( did, idx, num_scales, errcode) + + IMPLICIT NONE + +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_HL_DLL) +!DEC$attributes dllexport :: h5dsget_num_scales_f +!DEC$endif +! + INTEGER(hid_t), INTENT(in) :: did ! the dataset + INTEGER , INTENT(in) :: idx ! the dimension of did to query + INTEGER , INTENT(out) :: num_scales ! the number of Dimension Scales associated with did + INTEGER :: errcode ! error code + 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 ! the dataset + INTEGER , INTENT(in) :: idx ! the dimension of did to query + INTEGER , INTENT(out) :: num_scales ! the number of Dimension Scales associated with did + 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 + + + + + + |