From 65f5514a4ff647cff51c37e3af30d5e138733d06 Mon Sep 17 00:00:00 2001 From: Elena Pourmal Date: Wed, 19 Mar 2003 11:13:35 -0500 Subject: [svn-r6494] Purpose: Catching up with the C library Description: Added the follwoing new fortran functions h5iget_name_f h5tis_variavle_str_f h5zunregister_f h5zfilter_avail_f h5pset_shuffle_f h5pset_fletcher32 h5pset_edc_check_f h5pget_edc_check_f h5dfill_f Solution: Platforms tested: arabica(C and F90), burrwhite (pgcc and pgf90), modi4 (F90 and parallel) Misc. update: --- fortran/src/H5Df.c | 94 ++++++++++++ fortran/src/H5Dff.f90 | 315 ++++++++++++++++++++++++++++++++++++++ fortran/src/H5If.c | 45 ++++++ fortran/src/H5Iff.f90 | 59 +++++++ fortran/src/H5Pf.c | 99 ++++++++++++ fortran/src/H5Pff.f90 | 221 +++++++++++++++++++++++++- fortran/src/H5Tf.c | 26 ++++ fortran/src/H5Tff.f90 | 61 ++++++++ fortran/src/H5Zf.c | 53 +++++++ fortran/src/H5Zff.f90 | 124 +++++++++++++++ fortran/src/H5_f.c | 19 ++- fortran/src/H5_ff.f90 | 7 +- fortran/src/H5config_fortran.h.in | 9 ++ fortran/src/H5f90global.f90 | 30 ++++ fortran/src/H5f90proto.h | 139 +++++++++++------ fortran/src/HDF5.f90 | 1 + fortran/src/HDF5mpio.f90 | 1 + fortran/src/Makefile.in | 7 +- 18 files changed, 1252 insertions(+), 58 deletions(-) create mode 100644 fortran/src/H5Zf.c create mode 100644 fortran/src/H5Zff.f90 diff --git a/fortran/src/H5Df.c b/fortran/src/H5Df.c index 3d5c78a..4ee4a75 100644 --- a/fortran/src/H5Df.c +++ b/fortran/src/H5Df.c @@ -1507,3 +1507,97 @@ DONE: return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5dfillc_c + * Purpose: Call h5fill_c to fill memory buffer with a fill value + * Inputs: fill_value - fill value + * fill_type_id - fill value datatype identifier + * space_id - memory space selection identifier + * buf - memory buffer to fill + * mem_type_id - memory buffer dtatype identifier + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5dfillc_c (_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf, hid_t_f *mem_type_id) +{ + int ret_value = -1; + + /* + * Call h5dfill_c function. + */ + ret_value = nh5dfill_c(_fcdtocp(fill_value), fill_type_id, space_id, _fcdtocp(buf), mem_type_id); + + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5dfill_c + * Purpose: Call H5Dfill to fill memory buffer with a fill value + * Inputs: fill_value - fill value + * fill_type_id - fill value datatype identifier + * space_id - memory space selection identifier + * buf - memory buffer to fill + * mem_type_id - memory buffer dtatype identifier + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5dfill_c (void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id) + +{ + int ret_value = -1; + herr_t ret; + hid_t c_fill_type_id; + hid_t c_mem_type_id; + hid_t c_space_id; + + c_fill_type_id = (hid_t)*fill_type_id; + c_mem_type_id = (hid_t)*mem_type_id; + c_space_id = (hid_t)*space_id; + + /* + * Call H5Dfill function. + */ + ret = H5Dfill(fill_value, c_fill_type_id, buf, c_mem_type_id, c_space_id); + + if (ret < 0) return ret_value; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5dget_space_status_c + * Purpose: Call H5Dget_space_status to request dataspace allocation status + * Inputs: dset_id - dataset identifier + * Outputs: flag - status flag + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag) + +{ + int ret_value = -1; + herr_t ret; + hid_t c_dset_id; + H5D_space_status_t c_flag; + + c_dset_id = (hid_t)*dset_id; + + /* + * Call H5Dget_space_status + */ + ret = H5Dget_space_status(c_dset_id, &c_flag); + + if (ret < 0) return ret_value; + *flag = (int_f)c_flag; + ret_value = 0; + return ret_value; +} + diff --git a/fortran/src/H5Dff.f90 b/fortran/src/H5Dff.f90 index beebf5c..9aa201a 100644 --- a/fortran/src/H5Dff.f90 +++ b/fortran/src/H5Dff.f90 @@ -200,6 +200,14 @@ MODULE PROCEDURE h5dread_vl_string END INTERFACE + INTERFACE h5dfill_f + MODULE PROCEDURE h5dfill_integer + MODULE PROCEDURE h5dfill_real + MODULE PROCEDURE h5dfill_double + MODULE PROCEDURE h5dfill_char + END INTERFACE + + CONTAINS !---------------------------------------------------------------------- @@ -9772,4 +9780,311 @@ buf, dims, str_len) RETURN END SUBROUTINE h5dread_vl_string + +!---------------------------------------------------------------------- +! Name: h5dfill_integer +! +! Purpose: Fills dataspace elements with a fill value in a memory buffer. +! Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes +! of the fillvalues and buffers are supported. Buffer and fillvalue +! are assumed to have the same datatype. +! Only one-dimesional buffers are supported. +! +! Inputs: +! fill_value - fill value +! space_id - memory space selection identifier +! buf - data buffer iin memory ro apply selection to +! - of k-th dimension of the buf array +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +!---------------------------------------------------------------------- + + SUBROUTINE h5dfill_integer(fill_value, space_id, buf, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5dfill_integer +!DEC$endif + + IMPLICIT NONE + INTEGER, INTENT(IN) :: fill_value ! Fill value + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + +! INTEGER, EXTERNAL :: h5dfill_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5dfill_c(fill_value, fill_type_id, space_id, & + buf, mem_type_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5DFILL_C'::h5dfill_c + !DEC$ ENDIF + INTEGER, INTENT(IN) :: fill_value ! Fill value + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + END FUNCTION h5dfill_c + END INTERFACE + fill_type_id = H5T_NATIVE_INTEGER + mem_type_id = H5T_NATIVE_INTEGER + + hdferr = h5dfill_c(fill_value, fill_type_id, space_id, & + buf, mem_type_id) + + END SUBROUTINE h5dfill_integer + +!---------------------------------------------------------------------- +! Name: h5dfill_real +! +! Purpose: Fills dataspace elements with a fill value in a memory buffer. +! Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes +! of the fillvalues and buffers are supported. Buffer and fillvalue +! are assumed to have the same datatype. +! Only one-dimesional buffers are supported. +! +! Inputs: +! fill_value - fill value +! space_id - memory space selection identifier +! buf - data buffer iin memory ro apply selection to +! - of k-th dimension of the buf array +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +!---------------------------------------------------------------------- + + SUBROUTINE h5dfill_real(fill_valuer, space_id, buf, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5dfill_real +!DEC$endif + + IMPLICIT NONE + REAL, INTENT(IN) :: fill_valuer ! Fill value + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + +! INTEGER, EXTERNAL :: h5dfill_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5dfill_c(fill_valuer, fill_type_id, space_id, & + buf, mem_type_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5DFILL_C'::h5dfill_c + !DEC$ ENDIF + REAL, INTENT(IN) :: fill_valuer ! Fill value + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + END FUNCTION h5dfill_c + END INTERFACE + fill_type_id = H5T_NATIVE_REAL + mem_type_id = H5T_NATIVE_REAL + + hdferr = h5dfill_c(fill_valuer, fill_type_id, space_id, & + buf, mem_type_id) + END SUBROUTINE h5dfill_real + +!---------------------------------------------------------------------- +! Name: h5dfill_double +! +! Purpose: Fills dataspace elements with a fill value in a memory buffer. +! Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes +! of the fillvalues and buffers are supported. Buffer and fillvalue +! are assumed to have the same datatype. +! Only one-dimesional buffers are supported. +! +! Inputs: +! fill_value - fill value +! space_id - memory space selection identifier +! buf - data buffer iin memory ro apply selection to +! - of k-th dimension of the buf array +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +!---------------------------------------------------------------------- + + SUBROUTINE h5dfill_double(fill_value, space_id, buf, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5dfill_double +!DEC$endif + + IMPLICIT NONE + DOUBLE PRECISION, INTENT(IN) :: fill_value ! Fill value + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + +! INTEGER, EXTERNAL :: h5dfill_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5dfill_c(fill_value, fill_type_id, space_id, & + buf, mem_type_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5DFILL_C'::h5dfill_c + !DEC$ ENDIF + DOUBLE PRECISION, INTENT(IN) :: fill_value ! Fill value + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + END FUNCTION h5dfill_c + END INTERFACE + fill_type_id = H5T_NATIVE_DOUBLE + mem_type_id = H5T_NATIVE_DOUBLE + + hdferr = h5dfill_c(fill_value, fill_type_id, space_id, & + buf, mem_type_id) + + + END SUBROUTINE h5dfill_double + +!---------------------------------------------------------------------- +! Name: h5dfill_char +! +! Purpose: Fills dataspace elements with a fill value in a memory buffer. +! Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes +! of the fillvalues and buffers are supported. Buffer and fillvalue +! are assumed to have the same datatype. +! Only one-dimesional buffers are supported. +! +! Inputs: +! fill_value - fill value +! space_id - memory space selection identifier +! buf - data buffer iin memory ro apply selection to +! - of k-th dimension of the buf array +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +!---------------------------------------------------------------------- + + SUBROUTINE h5dfill_char(fill_value, space_id, buf, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5dfill_integer +!DEC$endif + + IMPLICIT NONE + CHARACTER, INTENT(IN) :: fill_value ! Fill value + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + +! INTEGER, EXTERNAL :: h5dfillc_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5dfillc_c(fill_value, fill_type_id, space_id, & + buf, mem_type_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5DFILLC_C'::h5dfillc_c + !DEC$ ENDIF + CHARACTER, INTENT(IN) :: fill_value ! Fill value + INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier + CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in + INTEGER(HID_T) :: mem_type_id ! Buffer dadtype identifier + END FUNCTION h5dfillc_c + END INTERFACE + fill_type_id = H5T_NATIVE_CHARACTER + mem_type_id = H5T_NATIVE_CHARACTER + + hdferr = h5dfillc_c(fill_value, fill_type_id, space_id, & + buf, mem_type_id) + + END SUBROUTINE h5dfill_char + +!---------------------------------------------------------------------- +! Name: h5dget_space_status_f +! +! Purpose: Returns the status of data space allocation. +! +! Inputs: +! dset_id - dataset identifier +! Outputs: +! flag - status; may have one of the following values: +! H5D_SPACE_STS_ERROR_F +! H5D_SPACE_STS_NOT_ALLOCATED_F +! H5D_SPACE_STS_PART_ALLOCATED_F +! H5D_SPACE_STS_ALLOCATED_F +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +!---------------------------------------------------------------------- + + SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5dget_space_status_f +!DEC$endif + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataspace identifier + INTEGER, INTENT(IN) :: flag ! Memory buffer to fill in + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5dget_space_status_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5dget_space_status_c(dset_id, flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5DGET_SPACE_STATUS_C'::h5dget_space_status_c + !DEC$ ENDIF + INTEGER(HID_T) :: dset_id + INTEGER :: flag + END FUNCTION h5dget_space_status_c + END INTERFACE + + hdferr = h5dget_space_status_c(dset_id, flag) + END SUBROUTINE h5dget_space_status_f + END MODULE H5D diff --git a/fortran/src/H5If.c b/fortran/src/H5If.c index f17dc01..574827d 100644 --- a/fortran/src/H5If.c +++ b/fortran/src/H5If.c @@ -27,3 +27,48 @@ nh5iget_type_c (hid_t_f *obj_id, int_f *type) ret_value = 0; return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5iget_name_c + * Purpose: Call H5Iget_name to get object's name + * Inputs: obj_id - object identifier + * buf_size - size of the buffer + * Outputs: buf - buffer to hold the name + * Returns: length of the name on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size) +{ + int ret_value = -1; + hid_t c_obj_id; + ssize_t c_size; + size_t c_buf_size; + char *c_buf =NULL; + + /* + * Allocate buffer to hold name of an attribute + */ + c_buf_size = (size_t)*buf_size; + c_buf = (char *)HDmalloc((int)c_buf_size +1); + if (c_buf == NULL) return ret_value; + + /* + * Call H5IAget_name function + */ + c_obj_id = (hid_t)*obj_id; + c_size = H5Iget_name(c_obj_id, c_buf, c_buf_size); + if (c_size < 0) goto DONE; + + /* + * Convert C name to FORTRAN and place it in the given buffer + */ + HD5packFstring(c_buf, _fcdtocp(buf), (int)c_buf_size); + *name_size = (size_t_f)c_size; + ret_value = 0; + +DONE: + HDfree(c_buf); + return ret_value; +} diff --git a/fortran/src/H5Iff.f90 b/fortran/src/H5Iff.f90 index f0ac299..690d9fd 100644 --- a/fortran/src/H5Iff.f90 +++ b/fortran/src/H5Iff.f90 @@ -72,6 +72,65 @@ END INTERFACE hdferr = h5iget_type_c(obj_id, type) END SUBROUTINE h5iget_type_f +!---------------------------------------------------------------------- +! Name: h5iget_name_f +! +! Purpose: Gets a name of an object specified by its idetifier. +! +! Inputs: +! obj_id - attribute identifier +! buf_size - size of a buffer to read name in +! Outputs: +! buf - buffer to read name in, name will be truncated if +! buffer is not big enough +! name_size - name size +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +! Modifications: +! +!---------------------------------------------------------------------- + + + SUBROUTINE h5iget_name_f(obj_id, buf, buf_size, name_size, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5iget_name_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + INTEGER(SIZE_T), INTENT(IN) :: buf_size ! Buffer size + CHARACTER(LEN=*), INTENT(OUT) :: buf ! Buffer to hold object name + INTEGER(SIZE_T), INTENT(OUT) :: name_size ! Actual name size + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 if successful, + ! -1 if fail +! INTEGER, EXTERNAL :: h5iget_name_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5iget_name_c(obj_id, buf, buf_size, name_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5IGET_NAME_C'::h5iget_name_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: buf + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(OUT) :: buf + INTEGER(SIZE_T), INTENT(IN) :: buf_size + INTEGER(SIZE_T), INTENT(OUT) :: name_size + END FUNCTION h5iget_name_c + END INTERFACE + + hdferr = h5iget_name_c(obj_id, buf, buf_size, name_size) + END SUBROUTINE h5iget_name_f + END MODULE H5I diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c index 27de148..f162963 100644 --- a/fortran/src/H5Pf.c +++ b/fortran/src/H5Pf.c @@ -2807,3 +2807,102 @@ DONE: if(c_name != NULL) HDfree(c_name); return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5pset_shuffle_c + * Purpose: Call H5Pset_shuffle + * Inputs: prp_id - property list identifier + * type_size - size of the datatype in bytes + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_shuffle_c ( hid_t_f *prp_id , int_f *type_size) +{ + int ret_value = 0; + hid_t c_prp_id; + int c_type_size; + herr_t status; + + c_prp_id = (hid_t)*prp_id; + c_type_size = (int)*type_size ; + status = H5Pset_shuffle(c_prp_id, c_type_size); + if ( status < 0 ) ret_value = -1; + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5pset_fletcher32_c + * Purpose: Call H5Pset_fletcher32 to enable EDC + * Inputs: prp_id - dataset creation property list identifier + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Thursday, March 13, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_fletcher32_c ( hid_t_f *prp_id ) +{ + int ret_value = 0; + hid_t c_prp_id; + herr_t status; + + c_prp_id = (hid_t)*prp_id; + status = H5Pset_fletcher32(c_prp_id); + if ( status < 0 ) ret_value = -1; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_edc_check_c + * Purpose: Call H5Pset_edc_check to enable EDC + * Inputs: prp_id - dataset transfer property list identifier + * flag - EDC flag + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Thursday, March 13, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag ) +{ + int ret_value = 0; + hid_t c_prp_id; + H5Z_EDC_t c_flag; + herr_t status; + + c_prp_id = (hid_t)*prp_id; + c_flag = (H5Z_EDC_t)*flag; + status = H5Pset_edc_check(c_prp_id, c_flag); + if ( status < 0 ) ret_value = -1; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_edc_check_c + * Purpose: Call H5Pget_edc_check to query EDC + * Inputs: prp_id - dataset transfer property list identifier + * Outouts: flag - EDC flag + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Thursday, March 13, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag ) +{ + int ret_value = 0; + hid_t c_prp_id; + H5Z_EDC_t c_flag; + herr_t status; + + c_prp_id = (hid_t)*prp_id; + c_flag = H5Pget_edc_check(c_prp_id); + if ( status < 0 ) ret_value = -1; + *flag = (int_f)c_flag; + return ret_value; +} diff --git a/fortran/src/H5Pff.f90 b/fortran/src/H5Pff.f90 index f97bd2b..528c462 100644 --- a/fortran/src/H5Pff.f90 +++ b/fortran/src/H5Pff.f90 @@ -2552,11 +2552,9 @@ ! NONE ! ! Programmer: Elena Pourmal -! August 12, 1999 +! February, 2003 ! -! Modifications: Explicit Fortran interfaces were added for -! called C functions (it is needed for Windows -! port). March 14, 2001 +! Modifications: ! ! Comment: !---------------------------------------------------------------------- @@ -5680,4 +5678,219 @@ hdferr = h5pinsertc_c(plist, name , name_len, size, value, value_len) END SUBROUTINE h5pinsert_char +!---------------------------------------------------------------------- +! Name: h5pset_shuffle_f +! +! Purpose: Sets shuffling filter +! +! Inputs: +! prp_id - dataset creation property list identifier +! type_size - size of the datatype +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pset_shuffle_f(prp_id, type_size, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_shuffle_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier + INTEGER, INTENT(IN) :: type_size ! iSize in bytes of the datatype + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5pset_shuffle_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_shuffle_c(prp_id, type_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SHUFFLE_C'::h5pset_shuffle_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id + INTEGER, INTENT(IN) :: type_size + END FUNCTION h5pset_shuffle_c + END INTERFACE + hdferr = h5pset_shuffle_c(prp_id, type_size) + + END SUBROUTINE h5pset_shuffle_f + +!---------------------------------------------------------------------- +! Name: h5pset_edc_check_f +! +! Purpose: Enables/disables error detecting +! +! Inputs: +! prp_id - dataset creation property list identifier +! flag - EDC flag; possible values: +! H5Z_DISABLE_EDC_F +! H5Z_ENABLE_EDC_F +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 13, 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pset_edc_check_f(prp_id, flag, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_edc_check_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier + INTEGER, INTENT(IN) :: flag ! Checksum filter flag + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5pset_edc_check_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_edc_check_c(prp_id, flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PSET_EDC_CHECK_C'::h5pset_edc_check_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id + INTEGER, INTENT(IN) :: flag + END FUNCTION h5pset_edc_check_c + END INTERFACE + hdferr = h5pset_edc_check_c(prp_id, flag) + + END SUBROUTINE h5pset_edc_check_f + +!---------------------------------------------------------------------- +! Name: h5pget_edc_check_f +! +! Purpose: Queries error detecting +! +! Inputs: +! prp_id - dataset creation property list identifier +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 13, 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pget_edc_check_f(prp_id, flag, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_edc_check_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset transfer property list identifier + INTEGER, INTENT(OUT) :: flag ! Checksum filter flag + ! May have one of the following values: + ! H5Z_ERROR_EDC_F + ! H5Z_DISABLE_EDC_F + ! H5Z_ENABLE_EDC_F + ! H5Z_NO_EDC_F + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5pget_edc_check_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_edc_check_c(prp_id, flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PGET_EDC_CHECK_C'::h5pget_edc_check_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id + INTEGER, INTENT(OUT) :: flag + END FUNCTION h5pget_edc_check_c + END INTERFACE + hdferr = h5pget_edc_check_c(prp_id, flag) + + END SUBROUTINE h5pget_edc_check_f +!---------------------------------------------------------------------- +! Name: h5pset_fletcher32_f +! +! Purpose: Sets Fletcher32 checksum of EDC for a dataset creation +! property list. +! +! Inputs: +! prp_id - dataset creation property list identifier +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 13, 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pset_fletcher32_f(prp_id, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_fletcher32_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5pset_fletcher32_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_fletcher32_c(prp_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FLETCHER32_C'::h5pset_fletcher32_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id + END FUNCTION h5pset_fletcher32_c + END INTERFACE + hdferr = h5pset_fletcher32_c(prp_id) + + END SUBROUTINE h5pset_fletcher32_f + END MODULE H5P diff --git a/fortran/src/H5Tf.c b/fortran/src/H5Tf.c index 19d07b1..341f230d 100644 --- a/fortran/src/H5Tf.c +++ b/fortran/src/H5Tf.c @@ -1596,3 +1596,29 @@ nh5tvlen_create_c(hid_t_f* type_id, hid_t_f *vltype_id) ret_value = 0; return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5tis_variable_str_c + * Purpose: Call H5Tis_variable_str to detrmine if the datatype + * is a variable string. + * Inputs: type_id - identifier of the dataspace + * Outputs: flag - 0 if not VL str, 1 if is not + * and negative on failure. + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12 , 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag ) +{ + int ret_value = 0; + hid_t c_type_id; + htri_t status; + + c_type_id = (hid_t)*type_id; + status = H5Tis_variable_str(c_type_id); + *flag = (int_f)status; + if ( status < 0 ) ret_value = -1; + return ret_value; +} diff --git a/fortran/src/H5Tff.f90 b/fortran/src/H5Tff.f90 index e215318..33f2181 100644 --- a/fortran/src/H5Tff.f90 +++ b/fortran/src/H5Tff.f90 @@ -3104,4 +3104,65 @@ hdferr = h5tvlen_create_c(type_id, vltype_id) END SUBROUTINE h5tvlen_create_f +!---------------------------------------------------------------------- +! Name: h5tis_variable_str_f +! +! Purpose: Determines whether a dattype is a variable string. +! +! Inputs: +! type_id - - datartpe identifier +! Outputs: +! status - flag to indicate if datatype +! is a variable string +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5tis_variable_str_f(type_id, status, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tis_variable_str_f +!DEC$endif +! + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier + LOGICAL, INTENT(OUT) :: status ! Flag, idicates if datatype + ! is a variable string or not ( TRUE or + ! FALSE) + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: flag ! "TRUE/FALSE/ERROR from C" + +! INTEGER, EXTERNAL :: h5tis_variable_str_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5tis_variable_str_c(type_id, flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5TIS_VARIABLE_STR_C'::h5tis_variable_str_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER :: flag + END FUNCTION h5tis_variable_str_c + END INTERFACE + + hdferr = h5tis_variable_str_c(type_id, flag) + status = .TRUE. + if (flag .EQ. 0) status = .FALSE. + + END SUBROUTINE h5tis_variable_str_f + +!---------------------------------------------------------------------- END MODULE H5T diff --git a/fortran/src/H5Zf.c b/fortran/src/H5Zf.c new file mode 100644 index 0000000..3f6a2a6 --- /dev/null +++ b/fortran/src/H5Zf.c @@ -0,0 +1,53 @@ +#include "H5f90.h" + +/*---------------------------------------------------------------------------- + * Name: h5zunregister_c + * Purpose: Call H5Zunregister to unregister filter + * Inputs: filter identifier + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5zunregister_c (int_f *filter) +{ + int ret_value = -1; + herr_t status; + H5Z_filter_t c_filter; + + /* + * Call H5Zunregister function. + */ + c_filter = (H5Z_filter_t)*filter; + printf(" filter # %d \n", (int)c_filter); + status = H5Zunregister(c_filter); + printf("From C zunregister %d \n", status); + if (status < 0) return ret_value; + ret_value = 0; + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5zfiletr_avail_c + * Purpose: Call H5Zfilter_avail to find if filter is available + * Inputs: filter - filter identifier + * Outputs: flag - status flag + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, March 12, 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5zfilter_avail_c ( int_f *filter , int_f *flag ) +{ + int ret_value = 0; + H5Z_filter_t c_filter; + htri_t status; + + c_filter = (H5Z_filter_t)*filter; + status = H5Zfilter_avail(c_filter); + *flag = (int_f)status; + if ( status < 0 ) ret_value = -1; + return ret_value; +} diff --git a/fortran/src/H5Zff.f90 b/fortran/src/H5Zff.f90 new file mode 100644 index 0000000..2f33b80 --- /dev/null +++ b/fortran/src/H5Zff.f90 @@ -0,0 +1,124 @@ +! +! This file contains FORTRAN90 interfaces for H5I functions +! + MODULE H5Z + + USE H5GLOBAL + + CONTAINS + +!---------------------------------------------------------------------- +! Name: h5zunregister_f +! +! Purpose: Unregisters specified filetr +! +! Inputs: filter - filter; may have one of the following values: +! H5Z_FILTER_DEFLATE_F +! H5Z_FILTER_SHUFFLE_F +! H5Z_FILTER_FLETCHER32_F +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5zunregister_f(filter, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5zunregister_f +!DEC$endif +! + IMPLICIT NONE + INTEGER, INTENT(IN) :: filter + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5zunregister_c +! Interface is needed for MS FORTRAN +! + INTERFACE + INTEGER FUNCTION h5zunregister_c (filter) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5ZUNREGISTER_C':: h5zunregister_c + !DEC$ ENDIF + INTEGER, INTENT(IN) :: filter + END FUNCTION h5zunregister_c + END INTERFACE + hdferr = h5zunregister_c (filter) + END SUBROUTINE h5zunregister_f +!---------------------------------------------------------------------- +! Name: h5zfilter_avail_f +! +! Purpose: Queries if filter is available +! +! Inputs: +! filter - filter +! Outputs: +! status - status; .TRUE. if filter is available, +! .FALSE. otherwise +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! March 12, 2003 +! +! Modifications: +! +!---------------------------------------------------------------------- + SUBROUTINE h5zfilter_avail_f(filter, status, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5zfilter_avail_f +!DEC$endif +! + + IMPLICIT NONE + INTEGER, INTENT(IN) :: filter ! Filter; may be one of the following: + ! H5Z_FILTER_DEFLATE_F + ! H5Z_FILTER_SHUFFLE_F + ! H5Z_FILTER_FLETCHER32_F + LOGICAL, INTENT(OUT) :: status ! Flag, idicates if filter + ! is availble not ( TRUE or + ! FALSE) + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: flag ! "TRUE/FALSE/ERROR from C" + +! INTEGER, EXTERNAL :: h5zfilter_avail_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5zfilter_avail_c(filter, flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5ZFILTER_AVAIL_C'::h5zfilter_avail_c + !DEC$ ENDIF + INTEGER, INTENT(IN) :: filter + INTEGER :: flag + END FUNCTION h5zfilter_avail_c + END INTERFACE + + hdferr = h5zfilter_avail_c(filter, flag) + status = .TRUE. + if (flag .EQ. 0) status = .FALSE. + + END SUBROUTINE h5zfilter_avail_f + + END MODULE H5Z + + + + + diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index 3f86dc9..f24cb31 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -156,17 +156,18 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes, * h5r_flags - H5R interface flags * h5s_flags - H5S interface flags * h5t_flags - H5T interface flags + * h5z_flags - H5Z interface flags * Outputs: None * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal * Tuesday, August 3, 1999 - * Modifications: + * Modifications: Added Z flags. EIP, March 12, 2003 *---------------------------------------------------------------------------*/ int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags, int_f *h5fd_flags, int_f *h5g_flags, int_f *h5i_flags, int_f *h5p_flags, int_f *h5r_flags, int_f *h5s_flags, - int_f *h5t_flags) + int_f *h5t_flags, int_f *h5z_flags) { int ret_value = -1; /* @@ -354,6 +355,20 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags, h5t_flags[27] = H5T_STR_ERROR; h5t_flags[28] = H5T_VLEN; h5t_flags[29] = H5T_ARRAY; +/* + * H5Z flags + */ + + h5z_flags[0] = H5Z_FILTER_ERROR; + h5z_flags[1] = H5Z_FILTER_NONE; + h5z_flags[2] = H5Z_FILTER_DEFLATE; + h5z_flags[3] = H5Z_FILTER_SHUFFLE; + h5z_flags[4] = H5Z_FILTER_FLETCHER32; + h5z_flags[5] = H5Z_ERROR_EDC; + h5z_flags[6] = H5Z_DISABLE_EDC; + h5z_flags[7] = H5Z_ENABLE_EDC; + h5z_flags[8] = H5Z_NO_EDC; + ret_value = 0; return ret_value; diff --git a/fortran/src/H5_ff.f90 b/fortran/src/H5_ff.f90 index e29c0e4..2cf0a5a 100644 --- a/fortran/src/H5_ff.f90 +++ b/fortran/src/H5_ff.f90 @@ -70,7 +70,8 @@ i_H5P_flags, & i_H5R_flags, & i_H5S_flags, & - i_H5T_flags ) + i_H5T_flags, & + i_H5Z_flags ) USE H5GLOBAL INTEGER i_H5F_flags(H5F_FLAGS_LEN) INTEGER i_H5G_flags(H5G_FLAGS_LEN) @@ -82,6 +83,7 @@ INTEGER i_H5R_flags(H5R_FLAGS_LEN) INTEGER i_H5S_flags(H5S_FLAGS_LEN) INTEGER i_H5T_flags(H5T_FLAGS_LEN) + INTEGER i_H5Z_flags(H5Z_FLAGS_LEN) !DEC$ IF DEFINED(HDF5F90_WINDOWS) !MS$ATTRIBUTES C,reference,alias:'_H5INIT_FLAGS_C'::h5init_flags_c @@ -99,7 +101,8 @@ H5P_flags, & H5R_flags, & H5S_flags, & - H5T_flags ) + H5T_flags, & + H5Z_flags ) error = error_0 + error_1 + error_2 END SUBROUTINE h5open_f diff --git a/fortran/src/H5config_fortran.h.in b/fortran/src/H5config_fortran.h.in index 0e94c9f..439dfa0 100644 --- a/fortran/src/H5config_fortran.h.in +++ b/fortran/src/H5config_fortran.h.in @@ -3,6 +3,15 @@ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H +/* Define if support for deflate filter is enabled */ +#undef HAVE_FILTER_DEFLATE + +/* Define if support for Fletcher32 checksum is enabled */ +#undef HAVE_FILTER_FLETCHER32 + +/* Define if support for shuffle filter is enabled */ +#undef HAVE_FILTER_SHUFFLE + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H diff --git a/fortran/src/H5f90global.f90 b/fortran/src/H5f90global.f90 index 7a4a296..76aa21a 100644 --- a/fortran/src/H5f90global.f90 +++ b/fortran/src/H5f90global.f90 @@ -534,5 +534,35 @@ EQUIVALENCE(H5T_flags(29), H5T_VLEN_F) EQUIVALENCE(H5T_flags(30), H5T_ARRAY_F) +! +! H5Z flags declaration +! + INTEGER, PARAMETER :: H5Z_FLAGS_LEN = 9 + INTEGER H5Z_flags(H5Z_FLAGS_LEN) +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$ ATTRIBUTES DLLEXPORT :: /H5Z_FLAGS/ +!DEC$endif + COMMON /H5Z_FLAGS/ H5Z_flags + + INTEGER :: H5Z_FILTER_ERROR_F + INTEGER :: H5Z_FILTER_NONE_F + INTEGER :: H5Z_FILTER_DEFLATE_F + INTEGER :: H5Z_FILTER_SHUFFLE_F + INTEGER :: H5Z_FILTER_FLETCHER32_F + INTEGER :: H5Z_ERROR_EDC_F + INTEGER :: H5Z_DISABLE_EDC_F + INTEGER :: H5Z_ENABLE_EDC_F + INTEGER :: H5Z_NO_EDC_F + + EQUIVALENCE(H5Z_flags(1), H5Z_FILTER_ERROR_F) + EQUIVALENCE(H5Z_flags(2), H5Z_FILTER_NONE_F) + EQUIVALENCE(H5Z_flags(3), H5Z_FILTER_DEFLATE_F) + EQUIVALENCE(H5Z_flags(4), H5Z_FILTER_SHUFFLE_F) + EQUIVALENCE(H5Z_flags(5), H5Z_FILTER_FLETCHER32_F) + EQUIVALENCE(H5Z_flags(6), H5Z_ERROR_EDC_F) + EQUIVALENCE(H5Z_flags(7), H5Z_DISABLE_EDC_F) + EQUIVALENCE(H5Z_flags(8), H5Z_ENABLE_EDC_F) + EQUIVALENCE(H5Z_flags(9), H5Z_NO_EDC_F) + END MODULE H5GLOBAL diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h index 72c30d3..7e03274 100644 --- a/fortran/src/H5f90proto.h +++ b/fortran/src/H5f90proto.h @@ -196,53 +196,59 @@ H5_DLL int_f nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *ne #ifndef H5Df90_FNAMES # define H5Df90_FNAMES #ifdef DF_CAPFNAMES -# define nh5dcreate_c FNAME(H5DCREATE_C) -# define nh5dclose_c FNAME(H5DCLOSE_C) -# define nh5dopen_c FNAME(H5DOPEN_C) -# define nh5dwrite_c FNAME(H5DWRITE_C) -# define nh5dwrite_ref_obj_c FNAME(H5DWRITE_REF_OBJ_C) -# define nh5dwrite_ref_reg_c FNAME(H5DWRITE_REF_REG_C) -# define nh5dwritec_c FNAME(H5DWRITEC_C) -# define nh5dread_c FNAME(H5DREAD_C) -# define nh5dread_ref_reg_c FNAME(H5DREAD_REF_REG_C) -# define nh5dread_ref_obj_c FNAME(H5DREAD_REF_OBJ_C) -# define nh5dreadc_c FNAME(H5DREADC_C) -# define nh5dget_space_c FNAME(H5DGET_SPACE_C) -# define nh5dget_type_c FNAME(H5DGET_TYPE_C) -# define nh5dget_create_plist_c FNAME(H5DGET_CREATE_PLIST_C) -# define nh5dextend_c FNAME(H5DEXTEND_C) -# define nh5dget_storage_size_c FNAME(H5DGET_STORAGE_SIZE_C) -# define nh5dvlen_get_max_len_c FNAME(H5DVLEN_GET_MAX_LEN_C) -# define nh5dwrite_vl_integer_c FNAME(H5DWRITE_VL_INTEGER_C) -# define nh5dread_vl_integer_c FNAME(H5DREAD_VL_INTEGER_C) -# define nh5dwrite_vl_real_c FNAME(H5DWRITE_VL_REAL_C) -# define nh5dread_vl_real_c FNAME(H5DREAD_VL_REAL_C) -# define nh5dwrite_vl_string_c FNAME(H5DWRITE_VL_STRING_C) -# define nh5dread_vl_string_c FNAME(H5DREAD_VL_STRING_C) +# define nh5dcreate_c FNAME(H5DCREATE_C) +# define nh5dclose_c FNAME(H5DCLOSE_C) +# define nh5dopen_c FNAME(H5DOPEN_C) +# define nh5dwrite_c FNAME(H5DWRITE_C) +# define nh5dwrite_ref_obj_c FNAME(H5DWRITE_REF_OBJ_C) +# define nh5dwrite_ref_reg_c FNAME(H5DWRITE_REF_REG_C) +# define nh5dwritec_c FNAME(H5DWRITEC_C) +# define nh5dread_c FNAME(H5DREAD_C) +# define nh5dread_ref_reg_c FNAME(H5DREAD_REF_REG_C) +# define nh5dread_ref_obj_c FNAME(H5DREAD_REF_OBJ_C) +# define nh5dreadc_c FNAME(H5DREADC_C) +# define nh5dget_space_c FNAME(H5DGET_SPACE_C) +# define nh5dget_type_c FNAME(H5DGET_TYPE_C) +# define nh5dget_create_plist_c FNAME(H5DGET_CREATE_PLIST_C) +# define nh5dextend_c FNAME(H5DEXTEND_C) +# define nh5dget_storage_size_c FNAME(H5DGET_STORAGE_SIZE_C) +# define nh5dvlen_get_max_len_c FNAME(H5DVLEN_GET_MAX_LEN_C) +# define nh5dwrite_vl_integer_c FNAME(H5DWRITE_VL_INTEGER_C) +# define nh5dread_vl_integer_c FNAME(H5DREAD_VL_INTEGER_C) +# define nh5dwrite_vl_real_c FNAME(H5DWRITE_VL_REAL_C) +# define nh5dread_vl_real_c FNAME(H5DREAD_VL_REAL_C) +# define nh5dwrite_vl_string_c FNAME(H5DWRITE_VL_STRING_C) +# define nh5dread_vl_string_c FNAME(H5DREAD_VL_STRING_C) +# define nh5dfillc_c FNAME(H5DFILLC_C) +# define nh5dfill_c FNAME(H5DFILL_C) +# define nh5dget_space_status_c FNAME(H5DGET_SPACE_STATUS_C) #else /* !DF_CAPFNAMES */ -# define nh5dcreate_c FNAME(h5dcreate_c) -# define nh5dclose_c FNAME(h5dclose_c) -# define nh5dopen_c FNAME(h5dopen_c) -# define nh5dwrite_c FNAME(h5dwrite_c) -# define nh5dwritec_c FNAME(h5dwritec_c) -# define nh5dwrite_ref_obj_c FNAME(h5dwrite_ref_obj_c) -# define nh5dwrite_ref_reg_c FNAME(h5dwrite_ref_reg_c) -# define nh5dread_c FNAME(h5dread_c) -# define nh5dread_ref_reg_c FNAME(h5dread_ref_reg_c) -# define nh5dread_ref_obj_c FNAME(h5dread_ref_obj_c) -# define nh5dreadc_c FNAME(h5dreadc_c) -# define nh5dget_space_c FNAME(h5dget_space_c) -# define nh5dget_type_c FNAME(h5dget_type_c) -# define nh5dget_create_plist_c FNAME(h5dget_create_plist_c) -# define nh5dextend_c FNAME(h5dextend_c) -# define nh5dget_storage_size_c FNAME(h5dget_storage_size_c) -# define nh5dvlen_get_max_len_c FNAME(h5dvlen_get_max_len_c) -# define nh5dwrite_vl_integer_c FNAME(h5dwrite_vl_integer_c) +# define nh5dcreate_c FNAME(h5dcreate_c) +# define nh5dclose_c FNAME(h5dclose_c) +# define nh5dopen_c FNAME(h5dopen_c) +# define nh5dwrite_c FNAME(h5dwrite_c) +# define nh5dwritec_c FNAME(h5dwritec_c) +# define nh5dwrite_ref_obj_c FNAME(h5dwrite_ref_obj_c) +# define nh5dwrite_ref_reg_c FNAME(h5dwrite_ref_reg_c) +# define nh5dread_c FNAME(h5dread_c) +# define nh5dread_ref_reg_c FNAME(h5dread_ref_reg_c) +# define nh5dread_ref_obj_c FNAME(h5dread_ref_obj_c) +# define nh5dreadc_c FNAME(h5dreadc_c) +# define nh5dget_space_c FNAME(h5dget_space_c) +# define nh5dget_type_c FNAME(h5dget_type_c) +# define nh5dget_create_plist_c FNAME(h5dget_create_plist_c) +# define nh5dextend_c FNAME(h5dextend_c) +# define nh5dget_storage_size_c FNAME(h5dget_storage_size_c) +# define nh5dvlen_get_max_len_c FNAME(h5dvlen_get_max_len_c) +# define nh5dwrite_vl_integer_c FNAME(h5dwrite_vl_integer_c) # define nh5dread_vl_integer_c FNAME(h5dread_vl_integer_c) -# define nh5dwrite_vl_real_c FNAME(h5dwrite_vl_real_c) -# define nh5dread_vl_real_c FNAME(h5dread_vl_real_c) +# define nh5dwrite_vl_real_c FNAME(h5dwrite_vl_real_c) +# define nh5dread_vl_real_c FNAME(h5dread_vl_real_c) # define nh5dwrite_vl_string_c FNAME(h5dwrite_vl_string_c) -# define nh5dread_vl_string_c FNAME(h5dread_vl_string_c) +# define nh5dread_vl_string_c FNAME(h5dread_vl_string_c) +# define nh5dfillc_c FNAME(h5dfillc_c) +# define nh5dfill_c FNAME(h5dfill_c) +# define nh5dget_space_status_c FNAME(h5dget_space_status_c) #endif /* DF_CAPFNAMES */ #endif @@ -307,6 +313,11 @@ H5_DLL int_f nh5dextend_c ( hid_t_f *dset_id , hsize_t_f *dims); H5_DLL int_f nh5dvlen_get_max_len_c(hid_t_f *dataset_id, hid_t_f *type_id, hid_t_f *space_id, size_t_f *len); H5_DLL int_f nh5dget_storage_size_c(hid_t_f *dataset_id, hsize_t_f *size); +H5_DLL int_f nh5dfillc_c(_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf, hid_t_f *mem_type_id); +H5_DLL int_f nh5dfill_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id); + +H5_DLL int_f nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag); + /* * Functions from H5Gf.c */ @@ -507,6 +518,7 @@ H5_DLL int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *size, _fcd buf); # define nh5tget_array_dims_c FNAME(H5TGET_ARRAY_DIMS_C) # define nh5tget_super_c FNAME(H5TGET_SUPER_C) # define nh5tvlen_create_c FNAME(H5TVLEN_CREATE_C) +# define nh5tis_variable_str_c FNAME(H5TIS_VARIABLE_STR_C) #else # define nh5topen_c FNAME(h5topen_c) @@ -563,6 +575,7 @@ H5_DLL int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *size, _fcd buf); # define nh5tget_array_dims_c FNAME(h5tget_array_dims_c) # define nh5tget_super_c FNAME(h5tget_super_c) # define nh5tvlen_create_c FNAME(h5tvlen_create_c) +# define nh5tis_variable_str_c FNAME(h5tis_variable_str_c) #endif #endif @@ -648,7 +661,7 @@ H5_DLL int_f nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id); H5_DLL int_f nh5tvlen_create_c ( hid_t_f *type_id , hid_t_f *vltype_id); - +H5_DLL int_f nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag ); /* * Functions from H5Pf.c @@ -750,6 +763,10 @@ nh5tvlen_create_c ( hid_t_f *type_id , hid_t_f *vltype_id); # define nh5punregister_c FNAME(H5PUNREGISTER_C) # define nh5pclose_class_c FNAME(H5PCLOSE_CLASS_C) # define nh5pget_class_name_c FNAME(H5PGET_CLASS_NAME_C) +# define nh5pset_shuffle_c FNAME(H5PSET_SHUFFLE_C) +# define nh5pset_fletcher32_c FNAME(H5PSET_FLETCHER32_C) +# define nh5pset_edc_check_c FNAME(H5PSET_EDC_CHECK_C) +# define nh5pget_edc_check_c FNAME(H5PGET_EDC_CHECK_C) #else # define nh5pcreate_c FNAME(h5pcreate_c) @@ -845,6 +862,10 @@ nh5tvlen_create_c ( hid_t_f *type_id , hid_t_f *vltype_id); # define nh5punregister_c FNAME(h5punregister_c) # define nh5pclose_class_c FNAME(h5pclose_class_c) # define nh5pget_class_name_c FNAME(h5pget_class_name_c) +# define nh5pset_shuffle_c FNAME(h5pset_shuffle_c) +# define nh5pset_fletcher32_c FNAME(h5pset_fletcher32_c) +# define nh5pset_edc_check_c FNAME(h5pset_edc_check_c) +# define nh5pget_edc_check_c FNAME(h5pget_edc_check_c) #endif @@ -1025,7 +1046,10 @@ H5_DLL int_f nh5premove_c(hid_t_f *plid, _fcd name, int_f *name_len); H5_DLL int_f nh5punregister_c(hid_t_f *class, _fcd name, int_f *name_len); H5_DLL int_f nh5pclose_class_c(hid_t_f * class); H5_DLL int_f nh5pget_class_name_c(hid_t_f *prp_id, _fcd name, int_f *name_len); - +H5_DLL int_f nh5pset_shuffle_c ( hid_t_f *prp_id , int_f *type_size); +H5_DLL int_f nh5pset_fletcher32_c ( hid_t_f *prp_id ); +H5_DLL int_f nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag ); +H5_DLL int_f nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag ); /* * Functions frome H5Rf.c @@ -1075,12 +1099,15 @@ nh5rget_object_type_obj_c (hid_t_f *dset_id, int_f *ref, int_f *obj_type); # define H5If90_FNAMES #ifdef DF_CAPFNAMES # define nh5iget_type_c FNAME(H5IGET_TYPE_C) +# define nh5iget_name_c FNAME(H5IGET_NAME_C) #else # define nh5iget_type_c FNAME(h5iget_type_c) +# define nh5iget_name_c FNAME(h5iget_name_c) #endif #endif H5_DLL int_f nh5iget_type_c(hid_t_f *obj_id, int_f *type); +H5_DLL int_f nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size); #ifndef H5Ef90_FNAMES @@ -1144,7 +1171,7 @@ H5_DLL int_f nh5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f * floatin H5_DLL int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags, int_f *h5fd_flags, int_f *h5g_flags, int_f *h5i_flags, int_f *h5p_flags, int_f *h5r_flags, int_f *h5s_flags, - int_f *h5t_flags); + int_f *h5t_flags, int_f *h5z_flags); H5_DLL int_f nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum); H5_DLL int_f nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum); @@ -1153,4 +1180,22 @@ H5_DLL int_f nh5garbage_collect_c(void); H5_DLL int_f nh5dont_atexit_c(void); +/* + * Functions from H5Zf.c + */ +#ifndef H5Zf90_FNAMES +# define H5Zf90_FNAMES +#ifdef DF_CAPFNAMES +# define nh5zunregister_c FNAME(H5ZUNREGISTER_C) +# define nh5zfilter_avail_c FNAME(H5ZFILTER_AVAIL_C) +#else +# define nh5zunregister_c FNAME(h5zunregister_c) +# define nh5zfilter_avail_c FNAME(h5zfilter_avail_c) +#endif +#endif +H5_DLL int_f nh5zunregister_c (int_f *filter); +H5_DLL int_f nh5zfilter_avail_c ( int_f *filter , int_f *flag ); + + + #endif /* _H5f90proto_H */ diff --git a/fortran/src/HDF5.f90 b/fortran/src/HDF5.f90 index 3a7486f..484b306 100644 --- a/fortran/src/HDF5.f90 +++ b/fortran/src/HDF5.f90 @@ -11,5 +11,6 @@ USE H5T USE H5P USE H5R + USE H5Z USE H5LIB END MODULE HDF5 diff --git a/fortran/src/HDF5mpio.f90 b/fortran/src/HDF5mpio.f90 index cca941b..0019a37 100644 --- a/fortran/src/HDF5mpio.f90 +++ b/fortran/src/HDF5mpio.f90 @@ -12,5 +12,6 @@ USE H5P USE H5FDMPIO USE H5R + USE H5Z USE H5LIB END MODULE HDF5 diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in index 40804bc..99b9c8c 100644 --- a/fortran/src/Makefile.in +++ b/fortran/src/Makefile.in @@ -31,12 +31,12 @@ FPAR_MOD=${ADD_PARALLEL_FILES:yes=HDF5mpio.f90} CPARALLEL=${ADD_PARALLEL_FILES:yes=H5FDmpiof.c} CLIB_SRC=H5f90kit.c H5_f.c H5Git.c H5Rf.c H5Ff.c H5Sf.c H5Df.c H5Gf.c \ - H5Af.c H5Tf.c H5Pf.c H5If.c H5Ef.c ${CPARALLEL:no=} + H5Af.c H5Tf.c H5Pf.c H5If.c H5Ef.c H5Zf.c ${CPARALLEL:no=} FPARALLEL=${ADD_PARALLEL_FILES:yes=H5FDmpioff.f90} FLIB_SRC=H5fortran_types.f90 H5fortran_flags.f90 H5f90global.f90 H5_ff.f90 \ H5Rff.f90 H5Fff.f90 H5Sff.f90 H5Dff.f90 H5Gff.f90 H5Aff.f90 H5Tff.f90 \ - H5Pff.f90 H5Iff.f90 H5Eff.f90 ${FPARALLEL:no=} ${FPAR_MOD:no=HDF5.f90} + H5Pff.f90 H5Iff.f90 H5Eff.f90 H5Zff.f90 ${FPARALLEL:no=} ${FPAR_MOD:no=HDF5.f90} LIB_SRC=$(CLIB_SRC) $(FLIB_SRC) LIB_OBJ=$(CLIB_SRC:.c=.lo) $(FLIB_SRC:.f90=.lo) @@ -58,6 +58,7 @@ H5Pff.lo: $(srcdir)/H5Pff.f90 H5f90global.lo H5Rff.lo: $(srcdir)/H5Rff.f90 H5f90global.lo H5Sff.lo: $(srcdir)/H5Sff.f90 H5f90global.lo H5Tff.lo: $(srcdir)/H5Tff.f90 H5f90global.lo +H5Zff.lo: $(srcdir)/H5Zff.f90 H5f90global.lo H5_ff.lo: $(srcdir)/H5_ff.f90 H5f90global.lo HDF5.lo: $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo \ H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \ @@ -65,7 +66,7 @@ HDF5.lo: $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo \ H5FDmpioff.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo HDF5mpio.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo \ H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \ - H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5FDmpioff.lo + H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5FDmpioff.lo ARFLAGS=rc -- cgit v0.12