From cd1b5623f0b092960542d38751b6f3453d18e7e7 Mon Sep 17 00:00:00 2001 From: Elena Pourmal Date: Wed, 2 Apr 2003 16:42:41 -0500 Subject: [svn-r6573] Purpose: Maintenance Description: New fortran APIs h5pset_fapl_multi and h5pget_fapl_multi have been added Solution: Platforms tested: burrwhite with PGI compilers, arabica and modi4 with --enable-parallel Misc. update: --- fortran/src/H5Pf.c | 212 ++++++++++++++++++++++++++++++++++ fortran/src/H5Pff.f90 | 272 ++++++++++++++++++++++++++++++++++++++++++++ fortran/src/H5_f.c | 20 +++- fortran/src/H5_ff.f90 | 19 +++- fortran/src/H5f90.h | 2 +- fortran/src/H5f90global.f90 | 34 +++++- fortran/src/H5f90proto.h | 16 +++ 7 files changed, 567 insertions(+), 8 deletions(-) diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c index f162963..57f2f7d 100644 --- a/fortran/src/H5Pf.c +++ b/fortran/src/H5Pf.c @@ -2906,3 +2906,215 @@ nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag ) *flag = (int_f)c_flag; return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5pset_family_offset_c + * Purpose: Call H5Pset_family_offset to set and offset for family driver + * Inputs: prp_id - property list identifier + * offset - offset in bytes + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Wednesday, 19 March 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset) +{ + int ret_value = 0; + hid_t c_prp_id; + hsize_t c_offset; + herr_t status; + + c_prp_id = (hid_t)*prp_id; + c_offset = (hsize_t)*offset; + status = H5Pset_family_offset(c_prp_id, c_offset); + if ( status < 0 ) ret_value = -1; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_fapl_multi_c + * Purpose: Call H5Pset_fapl_multi to set multi file dirver + * Inputs: prp_id - file_creation property list identifier + * mem_map - memory mapping array + * memb_fapl - property list for each memory usage type + * memb_name - array with members names + * len - array with the lenght of each name + * lenmax - lenght of the name a sdeclared in Fortran + * flag - flag allowing partila access when one of the files is missing + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Monday 24, March 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +/*nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, haddr_t_f *memb_addr, int_f *flag) */ +nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag) +{ + int ret_value = -1; + hid_t c_prp_id; + H5FD_mem_t c_memb_map[H5FD_MEM_NTYPES]; + hid_t c_memb_fapl[H5FD_MEM_NTYPES]; + const char *c_memb_name[H5FD_MEM_NTYPES]; + haddr_t c_memb_addr[H5FD_MEM_NTYPES]; + hbool_t relax; + herr_t status; + char *tmp, *tmp_p, *tmp_pp; + int i; + int c_lenmax; + c_lenmax = (int)*lenmax; + relax = (hbool_t)*flag; +/* + * Check that we got correct values from Fortran for memb_addr array + */ + for (i=0; i < H5FD_MEM_NTYPES; i++) { + if(memb_addr[i] >= 1.) return ret_value; + } +/* + * Take care of names array + */ + + tmp = (char *)HD5f2cstring(memb_name, c_lenmax*(H5FD_MEM_NTYPES)); + if (tmp ==NULL) return ret_value; + tmp_p = tmp; + for (i=0; i < H5FD_MEM_NTYPES; i++) { + c_memb_name[i] = (char *) malloc(len[i] + 1); + memcpy((char *)c_memb_name[i], tmp_p, len[i]); + tmp_pp = (char *)c_memb_name[i]; + tmp_pp[len[i]] = '\0'; + tmp_p = tmp_p + c_lenmax; +/* printf(" %d \n", len[i]); + printf("name %s \n", c_memb_name[i]); +*/ + } +/* + * Take care of othe arguments + */ + + c_prp_id = (hid_t)*prp_id; + for (i=0; i < H5FD_MEM_NTYPES; i++) { + c_memb_map[i] = (H5FD_mem_t)memb_map[i]; + /*printf("map %d \n", c_memb_map[i]); */ + c_memb_fapl[i] = (hid_t)memb_fapl[i]; + /*printf("fapl %d \n", c_memb_fapl[i]); */ + if(memb_addr[i] < 0) c_memb_addr[i] = HADDR_UNDEF; + else c_memb_addr[i] = (haddr_t)(((float)memb_addr[i])*(HADDR_MAX)); + /*printf("address %Ld \n", c_memb_addr[i]); */ + } +/* + * Call H5Pset_fapl_multi function + */ + + status = H5Pset_fapl_multi(c_prp_id, c_memb_map, c_memb_fapl, c_memb_name, c_memb_addr, relax); + if ( status < 0 ) goto DONE; + ret_value = 0; + +DONE: + free(tmp); + for (i=0; i < H5FD_MEM_NTYPES; i++) free((char *)c_memb_name[i]); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_fapl_multi_sc + * Purpose: Call H5Pset_fapl_multi to set multi file dirver + * Inputs: prp_id - file_creation property list identifier + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * March 31 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag) +{ + int ret_value = -1; + hid_t c_prp_id; + hbool_t relax; + herr_t status; + + relax = (hbool_t)*flag; + c_prp_id = (hid_t)*prp_id; +/* + * Call H5Pset_fapl_multi function + */ + + status = H5Pset_fapl_multi(c_prp_id, NULL, NULL, NULL, NULL, relax); + if ( status < 0 ) return ret_value; + ret_value = 0; + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5pget_fapl_multi_c + * Purpose: Call H5Pget_fapl_multi to set multi file dirver + * Inputs: prp_id - file_creation property list identifier + * lenmax - lenght of the name a sdeclared in Fortran + * Outputs: memb_map - memory mapping array + * memb_fapl - property list for each memory usage type + * memb_name - array with members names + * len - array with the lenght of each name + * flag - flag allowing partila access when one of the files is missing + * Returns: 0 on success, -1 on failure + * Programmer: Elena Pourmal + * Monday 24, March 2003 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pget_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag, int_f *maxlen_out) +{ + int ret_value = -1; + hid_t c_prp_id; + H5FD_mem_t c_memb_map[H5FD_MEM_NTYPES]; + hid_t c_memb_fapl[H5FD_MEM_NTYPES]; + char *c_memb_name[H5FD_MEM_NTYPES]; + haddr_t c_memb_addr[H5FD_MEM_NTYPES]; + hbool_t relax; + herr_t status; + char *tmp, *tmp_p; + int i; + int c_lenmax; + int length = 0; + c_lenmax = (int)*lenmax; + + c_prp_id = (hid_t)*prp_id; +/* + * Call H5Pget_fapl_multi function + */ + + status = H5Pget_fapl_multi(c_prp_id, c_memb_map, c_memb_fapl, c_memb_name, c_memb_addr, &relax); + if ( status < 0 ) return ret_value; + +/* + * Take care of names array + */ + tmp = (char *)malloc(c_lenmax*H5FD_MEM_NTYPES + 1); + tmp_p = tmp; + for (i=0; i < c_lenmax*H5FD_MEM_NTYPES; i++) tmp[i] = ' '; + tmp[c_lenmax*H5FD_MEM_NTYPES] = '\0'; + for (i=0; i < H5FD_MEM_NTYPES; i++) { + memcpy(tmp_p, c_memb_name[i], strlen(c_memb_name[i])); + len[i] = (int_f)strlen(c_memb_name[i]); + length = H5_MAX(length, strlen(c_memb_name[i])); + tmp_p = tmp_p + c_lenmax; + } +HD5packFstring(tmp, _fcdtocp(memb_name), c_lenmax*H5FD_MEM_NTYPES); + +/* + * Take care of other arguments + */ + + for (i=0; i < H5FD_MEM_NTYPES; i++) { + memb_map[i] = (int_f)c_memb_map[i]; + memb_fapl[i] = (hid_t_f)c_memb_fapl[i]; + if(c_memb_addr[i] == HADDR_UNDEF) memb_addr[i] = -1; + else memb_addr[i] = (real_f) ((float)c_memb_addr[i]/HADDR_MAX); + } + *flag = (int_f)relax; + *maxlen_out = (int_f)length; + ret_value = 0; + free(tmp); + for (i=0; i < H5FD_MEM_NTYPES; i++) free(c_memb_name[i]); + return ret_value; +} diff --git a/fortran/src/H5Pff.f90 b/fortran/src/H5Pff.f90 index 528c462..23d59f0 100644 --- a/fortran/src/H5Pff.f90 +++ b/fortran/src/H5Pff.f90 @@ -58,6 +58,12 @@ ! End comment if on T3E MODULE PROCEDURE h5pinsert_char END INTERFACE + + INTERFACE h5pset_fapl_multi_f + MODULE PROCEDURE h5pset_fapl_multi_l + MODULE PROCEDURE h5pset_fapl_multi_s + END INTERFACE + CONTAINS @@ -5893,4 +5899,270 @@ END SUBROUTINE h5pset_fletcher32_f +!---------------------------------------------------------------------- +! Name: h5pset_family_offset_f +! +! Purpose: Sets offset for family file driver. +! +! Inputs: +! prp_id - file creation property list identifier +! offset - file offset +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! 19 March 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pset_family_offset_f(prp_id, offset, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_family_offset_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier + INTEGER(HSIZE_T), INTENT(IN) :: offset ! Offset in bytes + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! INTEGER, EXTERNAL :: h5pset_family_offset_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_family_offset_c(prp_id, offset) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAMILY_OFFSET_C'::h5pset_family_offset_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id + INTEGER(HSIZE_T), INTENT(IN) :: offset + END FUNCTION h5pset_family_offset_c + END INTERFACE + hdferr = h5pset_family_offset_c(prp_id, offset) + + END SUBROUTINE h5pset_family_offset_f + +!---------------------------------------------------------------------- +! Name: h5pset_fapl_multi_l +! +! Purpose: Sets up use of the multi-file driver. +! +! Inputs: +! prp_id - file creation property list identifier +! mem_map - mapping array +! memb_fapl - property list for each memory usage type +! memb_name - names of member file +! relax - flag +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! 20 March 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pset_fapl_multi_l(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_fapl_multi_l +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map + INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl + CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name + !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr + REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr + LOGICAL, INTENT(IN) :: relax + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm + INTEGER :: maxlen + INTEGER :: flag + INTEGER :: i + +! INTEGER, EXTERNAL :: h5pset_fapl_multi_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, & + maxlen, memb_addr, flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_MULTI_C'::h5pset_fapl_multi_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map + INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl + CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name + REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr + !INTEGER(HADDR_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(IN) :: memb_addr + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm + INTEGER :: maxlen + INTEGER, INTENT(IN) :: flag + END FUNCTION h5pset_fapl_multi_c + END INTERFACE + maxlen = LEN(memb_name(1)) + do i=0, H5FD_MEM_NTYPES_F-1 + lenm(i) = LEN_TRIM(memb_name(i)) + enddo + flag = 0 + if (relax) flag = 1 + hdferr = h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag) + + END SUBROUTINE h5pset_fapl_multi_l +!---------------------------------------------------------------------- +! Name: h5pset_fapl_multi_s +! +! Purpose: Sets up use of the multi-file driver. +! +! Inputs: +! prp_id - file creation property list identifier +! relax - flag +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: Elena Pourmal +! 31 March 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pset_fapl_multi_s(prp_id, relax, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_fapl_multi_s +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier + LOGICAL, INTENT(IN) :: relax + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: flag + +! INTEGER, EXTERNAL :: h5pset_fapl_multi_sc +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_fapl_multi_sc(prp_id,flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_MULTI_SC'::h5pset_fapl_multi_sc + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier + INTEGER, INTENT(IN) :: flag + END FUNCTION h5pset_fapl_multi_sc + END INTERFACE + flag = 0 + if (relax) flag = 1 + hdferr = h5pset_fapl_multi_sc(prp_id, flag) + + END SUBROUTINE h5pset_fapl_multi_s +!---------------------------------------------------------------------- +! Name: h5pget_fapl_multi_f +! +! Purpose: Sets up use of the multi-file driver. +! +! Inputs: +! prp_id - file creation property list identifier +! Outputs: +! mem_map - mapping array +! memb_fapl - property list for each memory usage type +! memb_name - names of member file +! relax - flag +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! maxlen_out - maximum length for memb_name array element +! +! Programmer: Elena Pourmal +! 24 March 2003 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5pget_fapl_multi_f(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr, maxlen_out) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_fapl_multi_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_map + INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_fapl + CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_name + !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr + REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr + INTEGER, OPTIONAL, INTENT(OUT) :: maxlen_out + LOGICAL, INTENT(OUT) :: relax + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm + INTEGER :: maxlen + INTEGER :: c_maxlen_out + INTEGER :: flag + INTEGER :: i + +! INTEGER, EXTERNAL :: h5pget_fapl_multi_c +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, & + maxlen, memb_addr, flag, c_maxlen_out) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FAPL_MULTI_C'::h5pget_fapl_multi_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier + INTEGER, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_map + INTEGER(HID_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_fapl + CHARACTER(LEN=*), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_name + REAL, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_addr + INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm + INTEGER :: maxlen + INTEGER :: c_maxlen_out + INTEGER, INTENT(IN) :: flag + END FUNCTION h5pget_fapl_multi_c + END INTERFACE + maxlen = LEN(memb_name(0)) + do i=0, H5FD_MEM_NTYPES_F-1 + lenm(i) = LEN_TRIM(memb_name(i)) + enddo + hdferr = h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag, c_maxlen_out) + relax = .TRUE. + if(flag .eq. 0) relax = .FALSE. + if(present(maxlen_out)) maxlen_out = c_maxlen_out + END SUBROUTINE h5pget_fapl_multi_f END MODULE H5P diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index f24cb31..9d69b55 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -162,6 +162,7 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes, * Programmer: Elena Pourmal * Tuesday, August 3, 1999 * Modifications: Added Z flags. EIP, March 12, 2003 + * Added more FD flags and new H5LIB flags *---------------------------------------------------------------------------*/ int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags, @@ -247,6 +248,15 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags, */ h5fd_flags[0] = H5FD_MPIO_INDEPENDENT; h5fd_flags[1] = H5FD_MPIO_COLLECTIVE; + h5fd_flags[2] = H5FD_MEM_NOLIST; + h5fd_flags[3] = H5FD_MEM_DEFAULT; + h5fd_flags[4] = H5FD_MEM_SUPER; + h5fd_flags[5] = H5FD_MEM_BTREE; + h5fd_flags[6] = H5FD_MEM_DRAW; + h5fd_flags[7] = H5FD_MEM_GHEAP; + h5fd_flags[8] = H5FD_MEM_LHEAP; + h5fd_flags[9] = H5FD_MEM_OHDR; + h5fd_flags[10] = H5FD_MEM_NTYPES; /* * H5G flags @@ -369,10 +379,18 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags, h5z_flags[7] = H5Z_ENABLE_EDC; h5z_flags[8] = H5Z_NO_EDC; - ret_value = 0; return ret_value; } +/* +int_f +nh5init1_flags_c(haddr_t_f *h5lib_flags) +{ + int ret_value = -1; + ret_value = 0; + return ret_value; +} +*/ /*--------------------------------------------------------------------------- * Name: h5open_c * Purpose: Calls H5open call to initialize C HDF5 library diff --git a/fortran/src/H5_ff.f90 b/fortran/src/H5_ff.f90 index 2cf0a5a..53d4bec 100644 --- a/fortran/src/H5_ff.f90 +++ b/fortran/src/H5_ff.f90 @@ -37,6 +37,7 @@ INTEGER :: error_0, error_1, error_2 ! INTEGER, EXTERNAL :: h5init_types_c ! INTEGER, EXTERNAL :: h5init_flags_c +! INTEGER, EXTERNAL :: h5init1_flags_c ! INTEGER, EXTERNAL :: h5open_c ! @@ -71,7 +72,7 @@ i_H5R_flags, & i_H5S_flags, & i_H5T_flags, & - i_H5Z_flags ) + i_H5Z_flags) USE H5GLOBAL INTEGER i_H5F_flags(H5F_FLAGS_LEN) INTEGER i_H5G_flags(H5G_FLAGS_LEN) @@ -84,12 +85,20 @@ 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 !DEC$ ENDIF END FUNCTION h5init_flags_c END INTERFACE +! INTERFACE +! INTEGER FUNCTION h5init1_flags_c( i_H5LIB_flags ) +! USE H5GLOBAL +! INTEGER(HADDR_T) i_H5LIB_flags(H5LIB_FLAGS_LEN) +! !DEC$ IF DEFINED(HDF5F90_WINDOWS) +! !MS$ATTRIBUTES C,reference,alias:'_H5INIT1_FLAGS_C'::h5init1_flags_c +! !DEC$ ENDIF +! END FUNCTION h5init1_flags_c +! END INTERFACE error_0 = h5open_c() error_1 = h5init_types_c(predef_types, floating_types, integer_types) error_2 = h5init_flags_c(H5D_flags, & @@ -102,9 +111,9 @@ H5R_flags, & H5S_flags, & H5T_flags, & - H5Z_flags ) - error = error_0 + error_1 + error_2 - + H5Z_flags) +! error_3 = h5init1_flags_c(H5LIB_flags ) + error = error_0 + error_1 + error_2 END SUBROUTINE h5open_f !---------------------------------------------------------------------- diff --git a/fortran/src/H5f90.h b/fortran/src/H5f90.h index ab72b91..9eeb477 100644 --- a/fortran/src/H5f90.h +++ b/fortran/src/H5f90.h @@ -11,5 +11,5 @@ /* Constants used in H5Gf.c files */ #define OBJECT_NAMELEN_DEFAULT_F -1 - +#define H5_MAX(a,b) (((a)>(b)) ? (a) : (b)) #endif /* _H5f90_H */ diff --git a/fortran/src/H5f90global.f90 b/fortran/src/H5f90global.f90 index 76aa21a..0c8d5fc 100644 --- a/fortran/src/H5f90global.f90 +++ b/fortran/src/H5f90global.f90 @@ -266,15 +266,33 @@ ! ! H5FD flags declaration ! - INTEGER, PARAMETER :: H5FD_FLAGS_LEN = 2 + INTEGER, PARAMETER :: H5FD_FLAGS_LEN = 11 INTEGER H5FD_flags(H5FD_FLAGS_LEN) COMMON /H5FD_FLAGS/ H5FD_flags INTEGER :: H5FD_MPIO_INDEPENDENT_F INTEGER :: H5FD_MPIO_COLLECTIVE_F + INTEGER :: H5FD_MEM_NOLIST_F + INTEGER :: H5FD_MEM_DEFAULT_F + INTEGER :: H5FD_MEM_SUPER_F + INTEGER :: H5FD_MEM_BTREE_F + INTEGER :: H5FD_MEM_DRAW_F + INTEGER :: H5FD_MEM_GHEAP_F + INTEGER :: H5FD_MEM_LHEAP_F + INTEGER :: H5FD_MEM_OHDR_F + INTEGER :: H5FD_MEM_NTYPES_F EQUIVALENCE(H5FD_flags(1), H5FD_MPIO_INDEPENDENT_F) EQUIVALENCE(H5FD_flags(2), H5FD_MPIO_COLLECTIVE_F) + EQUIVALENCE(H5FD_flags(3), H5FD_MEM_NOLIST_F) + EQUIVALENCE(H5FD_flags(4), H5FD_MEM_DEFAULT_F) + EQUIVALENCE(H5FD_flags(5), H5FD_MEM_SUPER_F) + EQUIVALENCE(H5FD_flags(6), H5FD_MEM_BTREE_F) + EQUIVALENCE(H5FD_flags(7), H5FD_MEM_DRAW_F) + EQUIVALENCE(H5FD_flags(8), H5FD_MEM_GHEAP_F) + EQUIVALENCE(H5FD_flags(9), H5FD_MEM_LHEAP_F) + EQUIVALENCE(H5FD_flags(10), H5FD_MEM_OHDR_F) + EQUIVALENCE(H5FD_flags(11), H5FD_MEM_NTYPES_F) ! ! H5E flags declaration @@ -564,5 +582,19 @@ EQUIVALENCE(H5Z_flags(8), H5Z_ENABLE_EDC_F) EQUIVALENCE(H5Z_flags(9), H5Z_NO_EDC_F) + +! +! H5 Library flags declaration +! +! INTEGER, PARAMETER :: H5LIB_FLAGS_LEN = 1 +! INTEGER(HADDR_T) H5LIB_flags(H5LIB_FLAGS_LEN) +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$ ATTRIBUTES DLLEXPORT :: /H5LIB_FLAGS/ +!DEC$endif +! COMMON /H5LIB_FLAGS/ H5LIB_flags +! INTEGER(HADDR_T) :: HADDR_MAX_F +! +! EQUIVALENCE(H5LIB_flags(1), HADDR_MAX_F) + END MODULE H5GLOBAL diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h index 7e03274..095768f 100644 --- a/fortran/src/H5f90proto.h +++ b/fortran/src/H5f90proto.h @@ -767,6 +767,10 @@ H5_DLL int_f nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag ); # 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) +# definne nh5pset_family_offset_c FNAME(H5PSET_FAMILY_OFFSET_C) +# define nh5pget_fapl_multi_c FNAME(H5PGET_FAPL_MULTI_C) +# define nh5pset_fapl_multi_c FNAME(H5PSET_FAPL_MULTI_C) +# define nh5pset_fapl_multi_sc FNAME(H5PSET_FAPL_MULTI_SC) #else # define nh5pcreate_c FNAME(h5pcreate_c) @@ -866,6 +870,10 @@ H5_DLL int_f nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag ); # 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) +# define nh5pset_family_offset_c FNAME(h5pset_family_offset_c) +# define nh5pget_fapl_multi_c FNAME(h5pget_fapl_multi_c) +# define nh5pset_fapl_multi_c FNAME(h5pset_fapl_multi_c) +# define nh5pset_fapl_multi_sc FNAME(h5pset_fapl_multi_sc) #endif @@ -1050,6 +1058,10 @@ 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 ); +H5_DLL int_f nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset); +H5_DLL int_f nh5pget_fapl_multi_c ( hid_t_f *prp_id , int_f *mem_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag, int_f *maxlen_out); +H5_DLL int_f nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *mem_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag); +H5_DLL int_f nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag); /* * Functions frome H5Rf.c @@ -1147,6 +1159,7 @@ H5_DLL int_f nh5eset_auto_c(int_f* printflag); # define nh5init_types_c FNAME(H5INIT_TYPES_C) # define nh5close_types_c FNAME(H5CLOSE_TYPES_C) # define nh5init_flags_c FNAME(H5INIT_FLAGS_C) +# define nh5init1_flags_c FNAME(H5INIT1_FLAGS_C) # define nh5get_libversion_c FNAME(H5GET_LIBVERSION_C) # define nh5check_version_c FNAME(H5CHECK_VERSION_C) # define nh5garbage_collect_c FNAME(H5GARBAGE_COLLECT_C) @@ -1157,6 +1170,7 @@ H5_DLL int_f nh5eset_auto_c(int_f* printflag); # define nh5init_types_c FNAME(h5init_types_c) # define nh5close_types_c FNAME(h5close_types_c) # define nh5init_flags_c FNAME(h5init_flags_c) +# define nh5init1_flags_c FNAME(h5init1_flags_c) # define nh5get_libversion_c FNAME(h5get_libversion_c) # define nh5check_version_c FNAME(h5check_version_c) # define nh5garbage_collect_c FNAME(h5garbage_collect_c) @@ -1172,6 +1186,8 @@ H5_DLL int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_fla 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 *h5z_flags); +/*H5_DLL int_f nh5init1_flags_c(haddr_t_f *h5lib_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); -- cgit v0.12