summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElena Pourmal <epourmal@hdfgroup.org>2005-04-10 22:15:51 (GMT)
committerElena Pourmal <epourmal@hdfgroup.org>2005-04-10 22:15:51 (GMT)
commit408471420f13327597fb9c87149bc1bc709f8740 (patch)
tree9b9057577559d7cee59b25deac34c9af32a3dd9c
parent13ca97618db62034fa78b8d87f7160cb2a1f4bfc (diff)
downloadhdf5-408471420f13327597fb9c87149bc1bc709f8740.zip
hdf5-408471420f13327597fb9c87149bc1bc709f8740.tar.gz
hdf5-408471420f13327597fb9c87149bc1bc709f8740.tar.bz2
[svn-r10585] Purpose: Bug fix
Description: h5pget_driver_f function returned information that could not be interpreted by fortran application Solution: Defined Fortran global variables that correspond to the C H5FD_<driver_name> variables at the Fortran library initialization time. Platforms tested: heping with PGI compilers, sol 64-bit and copper parallel Misc. update:
-rw-r--r--fortran/src/H5_f.c18
-rw-r--r--fortran/src/H5_ff.f903
-rw-r--r--fortran/src/H5f90global.f9029
-rw-r--r--fortran/src/H5f90proto.h3
-rw-r--r--fortran/test/tH5P.f907
-rw-r--r--fortran/testpar/thyperslab_wr.f906
-rw-r--r--release_docs/RELEASE.txt5
7 files changed, 68 insertions, 3 deletions
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index 04e8df6..6ba85fc 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -167,6 +167,7 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes,
* Inputs: h5d_flags - H5D inteface flags
* h5f_flags - H5F interface flags
* h5fd_flags - H5FD interface flags
+ * h5fd_hid_flags- H5FD interface flags of type hid_t
* h5g_flags - H5G interface flags
* h5i_flags - H5I interface flags
* h5p_flags - H5P interface flags
@@ -180,10 +181,13 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes,
* Tuesday, August 3, 1999
* Modifications: Added Z flags. EIP, March 12, 2003
* Added more FD flags and new H5LIB flags
+ * Added more FD flags for HDF5 file driver
+ * EIP, April 9, 2005
*---------------------------------------------------------------------------*/
int_f
nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
- int_f *h5fd_flags, int_f *h5g_flags, int_f *h5i_flags,
+ int_f *h5fd_flags, hid_t *h5fd_hid_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 *h5z_flags)
{
@@ -247,6 +251,18 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
h5fd_flags[10] = H5FD_MEM_NTYPES;
/*
+ * H5FD flags of type hid_t
+ */
+ h5fd_hid_flags[0] = H5FD_CORE;
+ h5fd_hid_flags[1] = H5FD_FAMILY;
+ h5fd_hid_flags[2] = H5FD_LOG;
+ h5fd_hid_flags[3] = H5FD_MPIO;
+ h5fd_hid_flags[4] = H5FD_MULTI;
+ h5fd_hid_flags[5] = H5FD_SEC2;
+ h5fd_hid_flags[6] = H5FD_STDIO;
+ h5fd_hid_flags[7] = H5FD_STREAM;
+
+/*
* H5G flags
*/
diff --git a/fortran/src/H5_ff.f90 b/fortran/src/H5_ff.f90
index f1f7884..1e8d215 100644
--- a/fortran/src/H5_ff.f90
+++ b/fortran/src/H5_ff.f90
@@ -78,6 +78,7 @@
INTEGER FUNCTION h5init_flags_c(i_H5D_flags, &
i_H5F_flags, &
i_H5FD_flags, &
+ i_H5FD_hid_flags, &
i_H5G_flags, &
i_H5I_flags, &
i_H5P_flags, &
@@ -90,6 +91,7 @@
INTEGER i_H5G_flags(H5G_FLAGS_LEN)
INTEGER i_H5D_flags(H5D_FLAGS_LEN)
INTEGER i_H5FD_flags(H5FD_FLAGS_LEN)
+ INTEGER i_H5FD_hid_flags(H5FD_HID_FLAGS_LEN)
INTEGER i_H5I_flags(H5I_FLAGS_LEN)
INTEGER i_H5P_flags(H5P_FLAGS_LEN)
INTEGER i_H5R_flags(H5R_FLAGS_LEN)
@@ -115,6 +117,7 @@
error_2 = h5init_flags_c(H5D_flags, &
H5F_flags, &
H5FD_flags, &
+ H5FD_hid_flags, &
H5G_flags, &
H5I_flags, &
H5P_flags, &
diff --git a/fortran/src/H5f90global.f90 b/fortran/src/H5f90global.f90
index 46591b2..c1b8817 100644
--- a/fortran/src/H5f90global.f90
+++ b/fortran/src/H5f90global.f90
@@ -309,6 +309,35 @@
EQUIVALENCE(H5FD_flags(9), H5FD_MEM_LHEAP_F)
EQUIVALENCE(H5FD_flags(10), H5FD_MEM_OHDR_F)
EQUIVALENCE(H5FD_flags(11), H5FD_MEM_NTYPES_F)
+!
+! H5FD file drivers flags declaration
+!
+ INTEGER, PARAMETER :: H5FD_HID_FLAGS_LEN = 8
+ INTEGER H5FD_hid_flags(H5FD_HID_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5FD_HID_FLAGS/
+!DEC$endif
+ COMMON /H5FD_HID_FLAGS/ H5FD_hid_flags
+
+ INTEGER(HID_T) :: H5FD_CORE_F
+ INTEGER(HID_T) :: H5FD_FAMILY_F
+ INTEGER(HID_T) :: H5FD_LOG_F
+ INTEGER(HID_T) :: H5FD_MPIO_F
+ INTEGER(HID_T) :: H5FD_MULTI_F
+ INTEGER(HID_T) :: H5FD_SEC2_F
+ INTEGER(HID_T) :: H5FD_STDIO_F
+ INTEGER(HID_T) :: H5FD_STREAM_F
+
+ EQUIVALENCE(H5FD_hid_flags(1), H5FD_CORE_F)
+ EQUIVALENCE(H5FD_hid_flags(2), H5FD_FAMILY_F)
+ EQUIVALENCE(H5FD_hid_flags(3), H5FD_LOG_F)
+ EQUIVALENCE(H5FD_hid_flags(4), H5FD_MPIO_F)
+ EQUIVALENCE(H5FD_hid_flags(5), H5FD_MULTI_F)
+ EQUIVALENCE(H5FD_hid_flags(6), H5FD_SEC2_F)
+ EQUIVALENCE(H5FD_hid_flags(7), H5FD_STDIO_F)
+ EQUIVALENCE(H5FD_hid_flags(8), H5FD_STREAM_F)
+
+
!
! H5I flags declaration
diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h
index ff7678b..027cf1a 100644
--- a/fortran/src/H5f90proto.h
+++ b/fortran/src/H5f90proto.h
@@ -651,7 +651,8 @@ H5_FCDLL int_f nh5close_c(void);
H5_FCDLL int_f nh5init_types_c(hid_t_f *types, hid_t_f * floatingtypes, hid_t_f * integertypes);
H5_FCDLL int_f nh5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f * floatingtypes, int_f * floatinglen, hid_t_f * integertypes, int_f * integerlen);
H5_FCDLL int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
- int_f *h5fd_flags, int_f *h5g_flags, int_f *h5i_flags,
+ int_f *h5fd_flags, hid_t_f *h5fd_hid_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 *h5z_flags);
H5_FCDLL int_f nh5init1_flags_c(int_f *h5lib_flags);
diff --git a/fortran/test/tH5P.f90 b/fortran/test/tH5P.f90
index 8972af8..19a657f 100644
--- a/fortran/test/tH5P.f90
+++ b/fortran/test/tH5P.f90
@@ -162,7 +162,7 @@
INTEGER, DIMENSION(4,6) :: dset_data, data_out ! Data buffers
INTEGER :: error ! Error flag
-
+ INTEGER(HID_T) :: driver
INTEGER :: i, j !general purpose integers
INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
INTEGER :: mdc_nelmts
@@ -217,6 +217,11 @@
CALL h5pget_fapl_multi_f(fapl, memb_map_out, memb_fapl_out, memb_name_out, &
memb_addr_out, relax_out, error)
CALL check("h5pget_fapl_multi_f", error, total_error)
+ CALL h5pget_driver_f(fapl, driver, error)
+ CALL check("h5pget_driver_f",error, total_error)
+ if(driver .ne. H5FD_MULTI_F) then
+ write(*,*) "Wrong value for driver"
+ endif
!
! Let's check h5pget(set)cache_f APIs here for now
!
diff --git a/fortran/testpar/thyperslab_wr.f90 b/fortran/testpar/thyperslab_wr.f90
index 8db32e9..a9f6f06 100644
--- a/fortran/testpar/thyperslab_wr.f90
+++ b/fortran/testpar/thyperslab_wr.f90
@@ -41,6 +41,7 @@
INTEGER :: rank = 2 ! Dataset rank
INTEGER :: i, j
INTEGER(HSIZE_T), DIMENSION(2) :: dims
+ INTEGER(HID_T) :: driver
INTEGER :: error ! Error flag
!
@@ -60,6 +61,11 @@
CALL check("h5pcreate_f", error, total_error)
CALL h5pset_fapl_mpio_f(plac_id, comm, info, error)
CALL check("h5pset_fapl_mpio_f", error, total_error)
+ CALL h5pget_driver_f(plac_id, driver, error)
+ CALL check("h5pget_driver_f", error, total_error)
+ if( driver .ne. H5FD_MPIO_F) then
+ write(*,*) "Wrong driver information returned"
+ endif
CALL h5_fixname_f(filename, fix_filename, plac_id, error)
!
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 9f62602..6f94f4d 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -471,6 +471,11 @@ Bug Fixes since HDF5-1.6.0 release
Documentation
-------------
+ F90 APIs
+ --------
+ - h5pget_driver_f was returning information that could not be
+ interpreted by fortran application program; fixed. EIP - 2005/04/10
+
Platforms Tested
================