1080 lines
32 KiB
Fortran
1080 lines
32 KiB
Fortran
!****h* ROBODoc/H5F
|
|
!
|
|
! NAME
|
|
! MODULE H5F
|
|
!
|
|
! FILE
|
|
! H5Fff.F90
|
|
!
|
|
! PURPOSE
|
|
! This file contains Fortran interfaces for H5F functions.
|
|
!
|
|
! COPYRIGHT
|
|
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
! 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 COPYING file, which can be found at the root of the source code *
|
|
! distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
|
|
! If you do not have access to either file, you may request a copy from *
|
|
! help@hdfgroup.org. *
|
|
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
!
|
|
! NOTES
|
|
! _____ __ __ _____ ____ _____ _______ _ _ _______
|
|
! |_ _| \/ | __ \ / __ \| __ \__ __|/\ | \ | |__ __|
|
|
! **** | | | \ / | |__) | | | | |__) | | | / \ | \| | | | ****
|
|
! **** | | | |\/| | ___/| | | | _ / | | / /\ \ | . ` | | | ****
|
|
! **** _| |_| | | | | | |__| | | \ \ | |/ ____ \| |\ | | | ****
|
|
! |_____|_| |_|_| \____/|_| \_\ |_/_/ \_\_| \_| |_|
|
|
!
|
|
! If you add a new H5F function you must add the function name to the
|
|
! Windows dll file 'hdf5_fortrandll.def.in' in the fortran/src directory.
|
|
! This is needed for Windows based operating systems.
|
|
!
|
|
!*****
|
|
|
|
MODULE H5F
|
|
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_CHAR, C_NULL_PTR
|
|
USE H5GLOBAL
|
|
IMPLICIT NONE
|
|
|
|
! Number of objects opened in H5open_f
|
|
INTEGER(SIZE_T) :: H5OPEN_NUM_OBJ
|
|
|
|
INTERFACE
|
|
INTEGER(C_INT) FUNCTION h5fis_accessible(name, &
|
|
access_prp_default) BIND(C,NAME='H5Fis_accessible')
|
|
IMPORT :: C_CHAR
|
|
IMPORT :: HID_T
|
|
IMPORT :: C_INT
|
|
IMPLICIT NONE
|
|
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
|
|
INTEGER(HID_T), INTENT(IN), VALUE :: access_prp_default
|
|
END FUNCTION h5fis_accessible
|
|
END INTERFACE
|
|
|
|
CONTAINS
|
|
!****s* H5F/h5fcreate_f
|
|
!
|
|
! NAME
|
|
! h5fcreate_f
|
|
!
|
|
! PURPOSE
|
|
! Creates HDF5 files.
|
|
!
|
|
! INPUTS
|
|
! name - name of the file to create
|
|
! access_flags - File access flags. Allowable values are:
|
|
! H5F_ACC_TRUNC_F
|
|
! H5F_ACC_EXCL_F
|
|
! OUTPUTS
|
|
! file_id - file identifier
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! OPTIONAL PARAMETERS
|
|
! creation_prp - file creation property list identifier
|
|
! access_prp - file access property list identifier
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
|
|
creation_prp, access_prp)
|
|
IMPLICIT NONE
|
|
CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the file
|
|
INTEGER, INTENT(IN) :: access_flags ! File access flags
|
|
INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp
|
|
! File creation propertly
|
|
! list identifier
|
|
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
|
|
! File access property list
|
|
! identifier
|
|
!*****
|
|
INTEGER(HID_T) :: creation_prp_default
|
|
INTEGER(HID_T) :: access_prp_default
|
|
INTEGER :: namelen ! Length of the name character string
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fcreate_c(name, namelen, access_flags, &
|
|
creation_prp_default, access_prp_default, file_id) BIND(C,NAME='h5fcreate_c')
|
|
IMPORT :: C_CHAR
|
|
IMPORT :: HID_T
|
|
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
|
|
INTEGER, INTENT(IN) :: access_flags
|
|
INTEGER(HID_T), INTENT(OUT) :: file_id
|
|
INTEGER(HID_T), INTENT(IN) :: creation_prp_default
|
|
INTEGER(HID_T), INTENT(IN) :: access_prp_default
|
|
INTEGER :: namelen
|
|
END FUNCTION h5fcreate_c
|
|
END INTERFACE
|
|
|
|
creation_prp_default = H5P_DEFAULT_F
|
|
access_prp_default = H5P_DEFAULT_F
|
|
|
|
IF (PRESENT(creation_prp)) creation_prp_default = creation_prp
|
|
IF (PRESENT(access_prp)) access_prp_default = access_prp
|
|
namelen = LEN_TRIM(name)
|
|
hdferr = h5fcreate_c(name, namelen, access_flags, &
|
|
creation_prp_default, access_prp_default, file_id)
|
|
|
|
END SUBROUTINE h5fcreate_f
|
|
!****s* H5F/h5fflush_f
|
|
!
|
|
! NAME
|
|
! h5fflush_f
|
|
!
|
|
! PURPOSE
|
|
! Flushes all buffers associated WITH a file to disk
|
|
!
|
|
! INPUTS
|
|
! object_id - identifier of object used to identify the file.
|
|
! scope - specifies the scope of the flushing action.
|
|
! Possible values are:
|
|
! H5F_SCOPE_GLOBAL_F
|
|
! H5F_SCOPE_LOCAL_F
|
|
! OUTPUTS
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! OPTIONAL PARAMETERS
|
|
! creation_prp - file creation property list identifier
|
|
! access_prp - file access property list identifier
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fflush_f(object_id, scope, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: object_id !identifier for any object
|
|
!associate with a file,
|
|
!including the file itself,
|
|
!a dataset, a group, an
|
|
!attribute, or a named
|
|
!data type
|
|
|
|
INTEGER, INTENT(IN) :: scope !scope of the flushing
|
|
!action, possible values
|
|
!are: H5F_SCOPE_GLOBAL_F
|
|
! which flushes the entire
|
|
!virtual file,
|
|
!and H5F_SCOPE_LOCAL_F
|
|
!which flushes only the
|
|
!specified file.
|
|
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fflush_c(object_id, scope) BIND(C,NAME='h5fflush_c')
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: object_id
|
|
INTEGER, INTENT(IN) :: scope
|
|
END FUNCTION h5fflush_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fflush_c(object_id, scope)
|
|
|
|
END SUBROUTINE h5fflush_f
|
|
!****s* H5F/h5fmount_f
|
|
!
|
|
! NAME
|
|
! h5fmount_f
|
|
!
|
|
! PURPOSE
|
|
! Mounts a file.
|
|
!
|
|
! INPUTS
|
|
! loc_id - the identifier for of file or group in
|
|
! which name is defined
|
|
! name - the name of the group onto which the file
|
|
! specified by child_id is to be mounted.
|
|
! child_id - the identifier of the file to be mounted.
|
|
! OUTPUTS
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! OPTIONAL PARAMETERS
|
|
! access_prp - the identifier of the property list to be used
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fmount_f(loc_id, name, child_id, hdferr, access_prp)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifier for file or group
|
|
! in which dsetname is defined
|
|
CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the group
|
|
INTEGER(HID_T), INTENT(IN) :: child_id ! File identifier for the
|
|
! file to be mounted
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
|
|
! File access property list
|
|
! identifier
|
|
!*****
|
|
INTEGER(HID_T) :: access_prp_default
|
|
INTEGER :: namelen ! Length of the name character string
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fmount_c(loc_id, name, namelen, &
|
|
child_id, access_prp_default) BIND(C,NAME='h5fmount_c')
|
|
IMPORT :: C_CHAR
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: loc_id
|
|
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
|
|
INTEGER(HID_T), INTENT(IN) :: child_id
|
|
INTEGER(HID_T), INTENT(IN) :: access_prp_default
|
|
INTEGER :: namelen
|
|
END FUNCTION h5fmount_c
|
|
END INTERFACE
|
|
|
|
access_prp_default = H5P_DEFAULT_F
|
|
IF (PRESENT(access_prp)) access_prp_default = access_prp
|
|
namelen = LEN_TRIM(name)
|
|
hdferr = h5fmount_c(loc_id, name, namelen, child_id, access_prp_default)
|
|
|
|
END SUBROUTINE h5fmount_f
|
|
|
|
!****s* H5F/h5funmount_f
|
|
!
|
|
! NAME
|
|
! h5funmount_f
|
|
!
|
|
! PURPOSE
|
|
! Unmounts a file.
|
|
!
|
|
! INPUTS
|
|
! loc_id - the identifier for of file or group in
|
|
! which name is defined
|
|
! name - the name of the mount point
|
|
! OUTPUTS
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5funmount_f(loc_id, name, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifier for file or group
|
|
! at which the specified file
|
|
! is to be unmounted
|
|
CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the mount point
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTEGER :: namelen ! Length of the name character string
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5funmount_c(loc_id, name, namelen) BIND(C,NAME='h5funmount_c')
|
|
IMPORT :: C_CHAR
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: loc_id
|
|
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
|
|
INTEGER :: namelen
|
|
END FUNCTION h5funmount_c
|
|
END INTERFACE
|
|
|
|
namelen = LEN_TRIM(name)
|
|
hdferr = h5funmount_c(loc_id, name, namelen)
|
|
|
|
END SUBROUTINE h5funmount_f
|
|
!****s* H5F/h5fopen_f
|
|
!
|
|
! NAME
|
|
! h5fopen_f
|
|
!
|
|
! PURPOSE
|
|
! Opens HDF5 file.
|
|
!
|
|
! INPUTS
|
|
! name - name of the file to acecss
|
|
! access_flags - File access flags. Allowable values are:
|
|
! H5F_ACC_RDWR_F
|
|
! H5F_ACC_RDONLY_F
|
|
! OUTPUTS
|
|
! file_id - file identifier
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! OPTIONAL PARAMETERS
|
|
! access_prp - file access property list identifier
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, access_prp)
|
|
IMPLICIT NONE
|
|
CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the file
|
|
INTEGER, INTENT(IN) :: access_flags ! File access flags
|
|
INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
|
|
! File access property list
|
|
! identifier
|
|
!*****
|
|
INTEGER(HID_T) :: access_prp_default
|
|
INTEGER :: namelen ! Length of the name character string
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fopen_c(name, namelen, access_flags, &
|
|
access_prp_default, file_id) BIND(C,NAME='h5fopen_c')
|
|
IMPORT :: C_CHAR
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
|
|
INTEGER :: namelen
|
|
INTEGER, INTENT(IN) :: access_flags
|
|
INTEGER(HID_T), INTENT(IN) :: access_prp_default
|
|
INTEGER(HID_T), INTENT(OUT) :: file_id
|
|
END FUNCTION h5fopen_c
|
|
END INTERFACE
|
|
|
|
access_prp_default = H5P_DEFAULT_F
|
|
IF (PRESENT(access_prp)) access_prp_default = access_prp
|
|
namelen = LEN_TRIM(name)
|
|
hdferr = h5fopen_c(name, namelen, access_flags, &
|
|
access_prp_default, file_id)
|
|
END SUBROUTINE h5fopen_f
|
|
!****s* H5F/h5freopen_f
|
|
!
|
|
! NAME
|
|
! h5freopen_f
|
|
!
|
|
! PURPOSE
|
|
! Reopens HDF5 file.
|
|
!
|
|
! INPUTS
|
|
! file_id - identifier of a file for which an
|
|
! additional identifier is required
|
|
! OUTPUTS
|
|
! ret_file_id - new file identifier
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5freopen_f(file_id, ret_file_id, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
|
|
INTEGER(HID_T), INTENT(OUT) :: ret_file_id ! New File identifier
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5freopen_c(file_id, ret_file_id) BIND(C,NAME='h5freopen_c')
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER(HID_T), INTENT(OUT) :: ret_file_id
|
|
END FUNCTION h5freopen_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5freopen_c(file_id, ret_file_id)
|
|
|
|
END SUBROUTINE h5freopen_f
|
|
!****s* H5F/h5fget_create_plist_f
|
|
!
|
|
! NAME
|
|
! h5fget_create_plist_f
|
|
!
|
|
! PURPOSE
|
|
! Returns a file creation property list identifier.
|
|
!
|
|
! INPUTS
|
|
! file_id - identifier of a file to creation property list of
|
|
! OUTPUTS
|
|
! prop_id - creation property list identifier
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_create_plist_f(file_id, prop_id, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
|
|
INTEGER(HID_T), INTENT(OUT) :: prop_id ! File creation property
|
|
! list identifier
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_create_plist_c(file_id, prop_id) BIND(C,NAME='h5fget_create_plist_c')
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER(HID_T), INTENT(OUT) :: prop_id
|
|
END FUNCTION h5fget_create_plist_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fget_create_plist_c(file_id, prop_id)
|
|
|
|
END SUBROUTINE h5fget_create_plist_f
|
|
!****s* H5F/h5fget_access_plist_f
|
|
!
|
|
! NAME
|
|
! h5fget_access_plist_f
|
|
!
|
|
! PURPOSE
|
|
! Returns a file access property list identifier.
|
|
!
|
|
! INPUTS
|
|
! file_id - identifier of a file to creation property list of
|
|
! OUTPUTS
|
|
! access_id - access property list identifier
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_access_plist_f(file_id, access_id, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
|
|
INTEGER(HID_T), INTENT(OUT) :: access_id ! File access property
|
|
! list identifier
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_access_plist_c(file_id, access_id) BIND(C,NAME='h5fget_access_plist_c')
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER(HID_T), INTENT(OUT) :: access_id
|
|
END FUNCTION h5fget_access_plist_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fget_access_plist_c(file_id, access_id)
|
|
|
|
END SUBROUTINE h5fget_access_plist_f
|
|
|
|
!****s* H5F/h5fis_accessible_f
|
|
!
|
|
! NAME
|
|
! h5fis_accessible_f
|
|
!
|
|
! PURPOSE
|
|
! Determines whether a file can be accessed as HDF5.
|
|
!
|
|
! INPUTS
|
|
! name - name of the file to check
|
|
! OUTPUTS
|
|
! status - indicates if file is and HDF5 file
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! OPTIONAL PARAMETERS
|
|
! access_prp - file access property list identifier
|
|
! AUTHOR
|
|
! Dana Robinson
|
|
! September 2018
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fis_accessible_f(name, status, hdferr, access_prp)
|
|
IMPLICIT NONE
|
|
CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the file
|
|
LOGICAL, INTENT(OUT) :: status ! Indicates if file
|
|
! is an HDF5 file
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
|
|
! File access property list
|
|
! identifier
|
|
!*****
|
|
INTEGER(HID_T) :: access_prp_default
|
|
CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
|
|
INTEGER(C_INT) :: flag ! "TRUE/FALSE/ERROR" flag from C routine
|
|
|
|
access_prp_default = H5P_DEFAULT_F
|
|
IF (PRESENT(access_prp)) access_prp_default = access_prp
|
|
|
|
c_name = TRIM(name)//C_NULL_CHAR
|
|
|
|
flag = H5Fis_accessible(c_name, access_prp_default)
|
|
|
|
hdferr = 0
|
|
IF(flag.LT.0) hdferr = -1
|
|
|
|
status = .TRUE.
|
|
IF (flag .EQ. 0) status = .FALSE.
|
|
|
|
END SUBROUTINE h5fis_accessible_f
|
|
|
|
! XXX (VOL_MERGE): This function should probably be marked as
|
|
! deprecated since H5Fis_hdf5() is deprecated.
|
|
|
|
!****s* H5F/h5fis_hdf5_f
|
|
!
|
|
! NAME
|
|
! h5fis_hdf5_f
|
|
!
|
|
! PURPOSE
|
|
! Determines whether a file is in the HDF5 format.
|
|
!
|
|
! INPUTS
|
|
! name - name of the file to check
|
|
! OUTPUTS
|
|
! status - indicates if file is and HDF5 file
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! NOTES
|
|
! The underlying HDF5 C API call (H5Fis_hdf5) has been deprecated
|
|
! in favor of the VOL-capable H5Fis_accessible(). New code should
|
|
! use h5fis_accessible_f() instead of this function in case this
|
|
! function is deprecated in the future.
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fis_hdf5_f(name, status, hdferr)
|
|
IMPLICIT NONE
|
|
CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the file
|
|
LOGICAL, INTENT(OUT) :: status ! Indicates if file
|
|
! is an HDF5 file
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
|
|
INTEGER(C_INT) :: flag ! "TRUE/FALSE/ERROR" flag from C routine
|
|
! to define status value.
|
|
|
|
c_name = TRIM(name)//C_NULL_CHAR
|
|
|
|
flag = H5Fis_accessible(c_name, H5P_DEFAULT_F)
|
|
|
|
hdferr = 0
|
|
IF(flag.LT.0) hdferr = -1
|
|
|
|
status = .TRUE.
|
|
IF (flag .EQ. 0) status = .FALSE.
|
|
|
|
END SUBROUTINE h5fis_hdf5_f
|
|
|
|
!****s* H5F/h5fclose_f
|
|
!
|
|
! NAME
|
|
! h5fclose_f
|
|
!
|
|
! PURPOSE
|
|
! Closes HDF5 file.
|
|
!
|
|
! INPUTS
|
|
! file_id - file identifier
|
|
! OUTPUTS
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! August 12, 1999
|
|
!
|
|
! HISTORY
|
|
! Explicit Fortran interfaces were added for
|
|
! called C functions (it is needed for Windows
|
|
! port). February 28, 2001
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fclose_f(file_id, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fclose_c(file_id) BIND(C,NAME='h5fclose_c')
|
|
IMPORT :: HID_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
END FUNCTION h5fclose_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fclose_c(file_id)
|
|
|
|
END SUBROUTINE h5fclose_f
|
|
|
|
!****s* H5F/h5fget_obj_count_f
|
|
!
|
|
! NAME
|
|
! h5fget_obj_count_f
|
|
!
|
|
! PURPOSE
|
|
! Gets number of the objects open within a file
|
|
!
|
|
! INPUTS
|
|
! file_id - file identifier
|
|
! obj_type - type of the object; possible values are:
|
|
! H5F_OBJ_FILE_F
|
|
! H5F_OBJ_DATASET_F
|
|
! H5F_OBJ_GROUP_F
|
|
! H5F_OBJ_DATATYPE_F
|
|
! H5F_OBJ_ALL_F
|
|
! OUTPUTS
|
|
! obj_count - number of open objects
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! September 30, 2002
|
|
!
|
|
! HISTORY
|
|
! Changed the type of obj_count to INTEGER(SIZE_T)
|
|
! September 25, 2008 EIP
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_obj_count_f(file_id, obj_type, obj_count, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER, INTENT(IN) :: obj_type
|
|
INTEGER(SIZE_T), INTENT(OUT) :: obj_count
|
|
INTEGER, INTENT(OUT) :: hdferr
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_obj_count_c(file_id, obj_type, obj_count) BIND(C,NAME='h5fget_obj_count_c')
|
|
IMPORT :: HID_T, SIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER, INTENT(IN) :: obj_type
|
|
INTEGER(SIZE_T), INTENT(OUT) :: obj_count
|
|
END FUNCTION h5fget_obj_count_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fget_obj_count_c(file_id, obj_type, obj_count)
|
|
|
|
! Don't include objects created by H5open in the H5F_OBJ_ALL_F count
|
|
IF(file_id.EQ.INT(H5F_OBJ_ALL_F,HID_T))THEN
|
|
obj_count = obj_count - H5OPEN_NUM_OBJ
|
|
ENDIF
|
|
|
|
END SUBROUTINE h5fget_obj_count_f
|
|
|
|
!****s* H5F/h5fget_obj_ids_f
|
|
!
|
|
! NAME
|
|
! h5fget_obj_ids_f
|
|
!
|
|
! PURPOSE
|
|
! Get list of open objects identifiers within a file
|
|
!
|
|
! INPUTS
|
|
! file_id - file identifier
|
|
! obj_type - type of the object; possible values are:
|
|
! H5F_OBJ_FILE_F
|
|
! H5F_OBJ_DATASET_F
|
|
! H5F_OBJ_GROUP_F
|
|
! H5F_OBJ_DATATYPE_F
|
|
! H5F_OBJ_ALL_F
|
|
! OUTPUTS
|
|
! obj_ids - array of open object identifiers
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! OPTIONAL PARAMETERS
|
|
! num_objs - number of open objects
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! September 30, 2002
|
|
!
|
|
! HISTORY
|
|
! Added optional parameter num_objs for number of open objects
|
|
! of the specified type and changed type of max_obj to
|
|
! INTEGER(SIZE_T)
|
|
! September 25, 2008 EIP
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_obj_ids_f(file_id, obj_type, max_objs, obj_ids, hdferr, num_objs)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
|
|
INTEGER, INTENT(IN) :: obj_type ! Object type
|
|
INTEGER(SIZE_T), INTENT(IN) :: max_objs ! Maximum # of objects to retrieve
|
|
INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
|
|
! Array of open objects iidentifiers
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: num_objs ! number of open objects
|
|
!*****
|
|
INTEGER(SIZE_T) :: c_num_objs ! Number of open objects of the specified type
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids, c_num_objs) &
|
|
BIND(C,NAME='h5fget_obj_ids_c')
|
|
IMPORT :: HID_T, SIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER, INTENT(IN) :: obj_type
|
|
INTEGER(SIZE_T), INTENT(IN) :: max_objs
|
|
INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
|
|
INTEGER(SIZE_T), INTENT(OUT) :: c_num_objs
|
|
END FUNCTION h5fget_obj_ids_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids, c_num_objs)
|
|
IF (PRESENT(num_objs)) num_objs= c_num_objs
|
|
|
|
END SUBROUTINE h5fget_obj_ids_f
|
|
!****s* H5F/h5fget_freespace_f
|
|
!
|
|
! NAME
|
|
! h5fget_freespace_f
|
|
!
|
|
! PURPOSE
|
|
! Get amount of free space within a file
|
|
!
|
|
! INPUTS
|
|
! file_id - file identifier
|
|
! OUTPUTS
|
|
! free_space - amount of free space in file
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! AUTHOR
|
|
! Quincey Koziol
|
|
! October 7, 2003
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
|
|
INTEGER(HSSIZE_T), INTENT(OUT) :: free_space
|
|
! amount of free space in file
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_freespace_c(file_id, free_space) &
|
|
BIND(C,NAME='h5fget_freespace_c')
|
|
IMPORT :: HID_T, HSSIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER(HSSIZE_T), INTENT(OUT) :: free_space
|
|
END FUNCTION h5fget_freespace_c
|
|
END INTERFACE
|
|
|
|
hdferr = h5fget_freespace_c(file_id, free_space)
|
|
|
|
END SUBROUTINE h5fget_freespace_f
|
|
!****s* H5F/h5fget_name_f
|
|
!
|
|
! NAME
|
|
! h5fget_name_f
|
|
!
|
|
! PURPOSE
|
|
! Gets the name of the file from the object identifier
|
|
!
|
|
! INPUTS
|
|
! obj_id - object identifier
|
|
! OUTPUTS
|
|
! buf - buffer to store the read name
|
|
! size - actual size of the name
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! July 6, 2004
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier
|
|
CHARACTER(LEN=*), INTENT(INOUT) :: buf
|
|
! Buffer to hold file name
|
|
INTEGER(SIZE_T), INTENT(OUT) :: size ! Size of the file name
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code: 0 on success,
|
|
! -1 if fail
|
|
!*****
|
|
INTEGER(SIZE_T) :: buflen
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_name_c(obj_id, size, buf, buflen) &
|
|
BIND(C,NAME='h5fget_name_c')
|
|
IMPORT :: C_CHAR
|
|
IMPORT :: HID_T, SIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: obj_id
|
|
INTEGER(SIZE_T), INTENT(OUT) :: size
|
|
INTEGER(SIZE_T) :: buflen
|
|
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: buf
|
|
END FUNCTION h5fget_name_c
|
|
END INTERFACE
|
|
buflen = LEN_TRIM(buf)
|
|
hdferr = h5fget_name_c(obj_id, size, buf, buflen)
|
|
END SUBROUTINE h5fget_name_f
|
|
!****s* H5F/h5fget_filesize_f
|
|
!
|
|
! NAME
|
|
! h5fget_filesize_f
|
|
!
|
|
! PURPOSE
|
|
! Retrieves the file size of the HDF5 file.
|
|
!
|
|
! INPUTS
|
|
! file_id - file identifier
|
|
! OUTPUTS
|
|
! size - file size
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! AUTHOR
|
|
! Elena Pourmal
|
|
! July 7, 2004
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_filesize_f(file_id, size, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! file identifier
|
|
INTEGER(HSIZE_T), INTENT(OUT) :: size ! Size of the file
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code: 0 on success,
|
|
! -1 if fail
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_filesize_c(file_id, size) &
|
|
BIND(C,NAME='h5fget_filesize_c')
|
|
IMPORT :: HID_T, HSIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER(HSIZE_T), INTENT(OUT) :: size
|
|
END FUNCTION h5fget_filesize_c
|
|
END INTERFACE
|
|
hdferr = h5fget_filesize_c(file_id, size)
|
|
END SUBROUTINE h5fget_filesize_f
|
|
|
|
!****s* H5F/h5fget_fileno_f
|
|
!
|
|
! NAME
|
|
! h5fget_fileno_f
|
|
!
|
|
! PURPOSE
|
|
! Retrieves the file number of the HDF5 file.
|
|
!
|
|
! INPUTS
|
|
! file_id - file identifier
|
|
! OUTPUTS
|
|
! fileno - file number
|
|
! hdferr - Returns 0 if successful and -1 if fails
|
|
!
|
|
! AUTHOR
|
|
! Quincey Koziol
|
|
! April 13, 2019
|
|
!
|
|
! SOURCE
|
|
SUBROUTINE h5fget_fileno_f(file_id, fileno, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id ! file identifier
|
|
INTEGER, INTENT(OUT) :: fileno ! File number
|
|
INTEGER, INTENT(OUT) :: hdferr ! Error code: 0 on success,
|
|
! -1 if fail
|
|
!*****
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_fileno_c(file_id, fileno) &
|
|
BIND(C,NAME='h5fget_fileno_c')
|
|
IMPORT :: HID_T, HSIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN) :: file_id
|
|
INTEGER, INTENT(OUT) :: fileno
|
|
END FUNCTION h5fget_fileno_c
|
|
END INTERFACE
|
|
hdferr = h5fget_fileno_c(file_id, fileno)
|
|
END SUBROUTINE h5fget_fileno_f
|
|
|
|
!****s* H5F (F03)/h5fget_file_image_f_F03
|
|
!
|
|
! NAME
|
|
! h5fget_file_image_f
|
|
!
|
|
! PURPOSE
|
|
! Retrieves a copy of the image of an existing, open file.
|
|
!
|
|
! INPUTS
|
|
! file_id - Target file identifier.
|
|
! buf_ptr - Pointer to the buffer into which the image of the HDF5 file is to be copied.
|
|
! buf_len - Size of the supplied buffer.
|
|
!
|
|
! OUTPUTS
|
|
! hdferr - error code:
|
|
! 0 on success and -1 on failure
|
|
! OPTIONAL PARAMETERS
|
|
! buf_size - Returns the size in bytes of the buffer required to store the file image,
|
|
! no data will be copied.
|
|
!
|
|
! AUTHOR
|
|
! M. Scot Breitenfeld
|
|
! November 26, 2012
|
|
!
|
|
! Fortran2003 Interface:
|
|
SUBROUTINE h5fget_file_image_f(file_id, buf_ptr, buf_len, hdferr, buf_size)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T) , INTENT(IN) :: file_id
|
|
TYPE(C_PTR) , INTENT(INOUT) :: buf_ptr
|
|
INTEGER(SIZE_T), INTENT(IN) :: buf_len
|
|
INTEGER , INTENT(OUT) :: hdferr
|
|
INTEGER(SIZE_T), INTENT(OUT) , OPTIONAL :: buf_size
|
|
!*****
|
|
|
|
INTEGER(SIZE_T) :: buf_size_default
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_file_image_c(file_id, buf_ptr, buf_len, buf_size) BIND(C, NAME='h5fget_file_image_c')
|
|
IMPORT :: C_PTR
|
|
IMPORT :: HID_T, SIZE_T
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T) , INTENT(IN) :: file_id
|
|
TYPE(C_PTR) , VALUE :: buf_ptr
|
|
INTEGER(SIZE_T), INTENT(IN) :: buf_len
|
|
INTEGER(SIZE_T), INTENT(OUT) :: buf_size
|
|
END FUNCTION h5fget_file_image_c
|
|
END INTERFACE
|
|
|
|
IF(PRESENT(buf_size))THEN
|
|
buf_ptr = C_NULL_PTR
|
|
ENDIF
|
|
|
|
hdferr = h5fget_file_image_c(file_id, buf_ptr, buf_len, buf_size_default)
|
|
|
|
IF(PRESENT(buf_size))THEN
|
|
buf_size = buf_size_default
|
|
ENDIF
|
|
|
|
END SUBROUTINE h5fget_file_image_f
|
|
|
|
!****s* H5F (F03)/h5fget_dset_no_attrs_hint_f_F03
|
|
!
|
|
! NAME
|
|
! h5fget_dset_no_attrs_hint_f
|
|
!
|
|
! PURPOSE
|
|
! Gets the value of the "minimize dataset headers" value which creates
|
|
! smaller dataset object headers when its set and no attributes are present.
|
|
!
|
|
! INPUTS
|
|
! file_id - Target file identifier.
|
|
!
|
|
! OUTPUTS
|
|
! minimize - Value of the setting.
|
|
! hdferr - error code:
|
|
! 0 on success and -1 on failure
|
|
!
|
|
! AUTHOR
|
|
! Dana Robinson
|
|
! January 2019
|
|
!
|
|
! Fortran2003 Interface:
|
|
SUBROUTINE h5fget_dset_no_attrs_hint_f(file_id, minimize, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T) , INTENT(IN) :: file_id
|
|
LOGICAL , INTENT(OUT) :: minimize
|
|
INTEGER , INTENT(OUT) :: hdferr
|
|
!*****
|
|
LOGICAL(C_BOOL) :: c_minimize
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fget_dset_no_attrs_hint_c(file_id, minimize) BIND(C, NAME='H5Fget_dset_no_attrs_hint')
|
|
IMPORT :: HID_T, C_BOOL
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN), VALUE :: file_id
|
|
LOGICAL(C_BOOL), INTENT(OUT) :: minimize
|
|
END FUNCTION h5fget_dset_no_attrs_hint_c
|
|
END INTERFACE
|
|
|
|
hdferr = INT(h5fget_dset_no_attrs_hint_c(file_id, c_minimize))
|
|
|
|
! Transfer value of C C_BOOL type to Fortran LOGICAL
|
|
minimize = c_minimize
|
|
|
|
END SUBROUTINE h5fget_dset_no_attrs_hint_f
|
|
|
|
!****s* H5F (F03)/h5fset_dset_no_attrs_hint_f_F03
|
|
!
|
|
! NAME
|
|
! h5fset_dset_no_attrs_hint_f
|
|
!
|
|
! PURPOSE
|
|
! Sets the value of the "minimize dataset headers" value which creates
|
|
! smaller dataset object headers when its set and no attributes are present.
|
|
!
|
|
! INPUTS
|
|
! file_id - Target file identifier.
|
|
! minimize - Value of the setting.
|
|
!
|
|
! OUTPUTS
|
|
! hdferr - error code:
|
|
! 0 on success and -1 on failure
|
|
!
|
|
! AUTHOR
|
|
! Dana Robinson
|
|
! January 2019
|
|
!
|
|
! Fortran2003 Interface:
|
|
SUBROUTINE h5fset_dset_no_attrs_hint_f(file_id, minimize, hdferr)
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T) , INTENT(IN) :: file_id
|
|
LOGICAL , INTENT(IN) :: minimize
|
|
INTEGER , INTENT(OUT) :: hdferr
|
|
!*****
|
|
LOGICAL(C_BOOL) :: c_minimize
|
|
|
|
INTERFACE
|
|
INTEGER FUNCTION h5fset_dset_no_attrs_hint_c(file_id, minimize) BIND(C, NAME='H5Fset_dset_no_attrs_hint')
|
|
IMPORT :: HID_T, C_BOOL
|
|
IMPLICIT NONE
|
|
INTEGER(HID_T), INTENT(IN), VALUE :: file_id
|
|
LOGICAL(C_BOOL), INTENT(IN), VALUE :: minimize
|
|
END FUNCTION h5fset_dset_no_attrs_hint_c
|
|
END INTERFACE
|
|
|
|
! Transfer value of Fortran LOGICAL to C C_BOOL type
|
|
c_minimize = minimize
|
|
|
|
hdferr = INT(h5fset_dset_no_attrs_hint_c(file_id, c_minimize))
|
|
|
|
END SUBROUTINE h5fset_dset_no_attrs_hint_f
|
|
|
|
END MODULE H5F
|
|
|