From 66cee727684ee3bca63d3ccd57bc4ae7a184bb31 Mon Sep 17 00:00:00 2001 From: Scot Breitenfeld Date: Mon, 5 Jun 2023 11:59:51 -0500 Subject: Print out the VOL connector being used in the ASYNC test (#3016) * Print out the VOL connector being used in the ASYNC test * Add h5pget_vol_cap_flags_f with test --- fortran/src/H5Pff.F90 | 74 ++++++++++++------ fortran/src/H5_f.c | 65 +++++++++++++++- fortran/src/H5_ff.F90 | 153 +++++++++++++++++++++++++++---------- fortran/src/H5f90global.F90 | 110 ++++++++++++++++++++++++++ fortran/src/H5f90proto.h | 3 +- fortran/src/hdf5_fortrandll.def.in | 1 + fortran/test/tf.F90 | 4 +- fortran/testpar/async.F90 | 73 +++++++++++------- release_docs/RELEASE.txt | 3 + 9 files changed, 389 insertions(+), 97 deletions(-) diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90 index 5ccc367..c6229f7 100644 --- a/fortran/src/H5Pff.F90 +++ b/fortran/src/H5Pff.F90 @@ -6047,15 +6047,15 @@ END SUBROUTINE h5pget_virtual_dsetname_f LOGICAL(C_BOOL) :: c_minimize INTERFACE - INTEGER FUNCTION h5pget_dset_no_attrs_hint_c(dcpl_id, minimize) BIND(C, NAME='H5Pget_dset_no_attrs_hint') - IMPORT :: HID_T, C_BOOL + INTEGER(C_INT) FUNCTION H5Pget_dset_no_attrs_hint_c(dcpl_id, minimize) BIND(C, NAME='H5Pget_dset_no_attrs_hint') + IMPORT :: C_INT, HID_T, C_BOOL IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: dcpl_id LOGICAL(C_BOOL), INTENT(OUT) :: minimize - END FUNCTION h5pget_dset_no_attrs_hint_c + END FUNCTION H5Pget_dset_no_attrs_hint_c END INTERFACE - hdferr = INT(h5pget_dset_no_attrs_hint_c(dcpl_id, c_minimize)) + hdferr = INT(H5Pget_dset_no_attrs_hint_c(dcpl_id, c_minimize)) ! Transfer value of C C_BOOL type to Fortran LOGICAL minimize = c_minimize @@ -6119,19 +6119,19 @@ END SUBROUTINE h5pget_virtual_dsetname_f TYPE(C_PTR) :: new_vol_info_default INTERFACE - INTEGER FUNCTION h5pset_vol(plist_id, new_vol_id, new_vol_info) BIND(C, NAME='H5Pset_vol') - IMPORT :: HID_T, C_PTR + INTEGER(C_INT) FUNCTION H5Pset_vol(plist_id, new_vol_id, new_vol_info) BIND(C, NAME='H5Pset_vol') + IMPORT :: C_INT, HID_T, C_PTR IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: plist_id INTEGER(HID_T), INTENT(IN), VALUE :: new_vol_id TYPE(C_PTR) , INTENT(IN), VALUE :: new_vol_info - END FUNCTION h5pset_vol + END FUNCTION H5Pset_vol END INTERFACE new_vol_info_default = C_NULL_PTR IF(PRESENT(new_vol_info)) new_vol_info_default=new_vol_info - hdferr = INT(h5pset_vol(plist_id, new_vol_id, new_vol_info_default)) + hdferr = INT(H5Pset_vol(plist_id, new_vol_id, new_vol_info_default)) END SUBROUTINE h5pset_vol_f @@ -6148,26 +6148,56 @@ END SUBROUTINE h5pget_virtual_dsetname_f !! SUBROUTINE h5pget_vol_id_f(plist_id, vol_id, hdferr) IMPLICIT NONE - INTEGER(HID_T) , INTENT(IN) :: plist_id - INTEGER(HID_T) , INTENT(OUT) :: vol_id - INTEGER , INTENT(OUT) :: hdferr + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER(HID_T), INTENT(OUT) :: vol_id + INTEGER , INTENT(OUT) :: hdferr INTERFACE - INTEGER FUNCTION h5pget_vol_id(plist_id, vol_id) BIND(C, NAME='H5Pget_vol_id') - IMPORT :: HID_T, C_PTR + INTEGER(C_INT) FUNCTION h5pget_vol_id(plist_id, vol_id) BIND(C, NAME='H5Pget_vol_id') + IMPORT :: C_INT, HID_T, C_PTR IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: plist_id INTEGER(HID_T), INTENT(OUT) :: vol_id END FUNCTION h5pget_vol_id END INTERFACE - hdferr = INT(h5pget_vol_id(plist_id, vol_id)) + hdferr = INT(H5Pget_vol_id(plist_id, vol_id)) END SUBROUTINE h5pget_vol_id_f !> !! \ingroup FH5P !! +!! \brief Query the capability flags for the VOL connector that will be used with this file access property list (FAPL). +! +!! \param plist_id File access property list identifier +!! \param cap_flags Flags that indicate the VOL connector capabilities +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Pget_vol_cap_flags() +!! + SUBROUTINE h5pget_vol_cap_flags_f(plist_id, cap_flags, hdferr) + IMPLICIT NONE + INTEGER(HID_T) , INTENT(IN) :: plist_id + INTEGER(C_INT64_T), INTENT(OUT) :: cap_flags + INTEGER , INTENT(OUT) :: hdferr + + INTERFACE + INTEGER(C_INT) FUNCTION H5Pget_vol_cap_flags(plist_id, cap_flags) BIND(C, NAME='H5Pget_vol_cap_flags') + IMPORT :: C_INT, HID_T, C_PTR, C_INT64_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN), VALUE :: plist_id + INTEGER(C_INT64_T), INTENT(OUT) :: cap_flags + END FUNCTION H5Pget_vol_cap_flags + END INTERFACE + + hdferr = INT(H5Pget_vol_cap_flags(plist_id, cap_flags)) + + END SUBROUTINE h5pget_vol_cap_flags_f + +!> +!! \ingroup FH5P +!! !! \brief Gets the file locking properties. File locking is mainly used to help enforce SWMR semantics. !! !! \param fapl_id Target fileTarget file access property list identifier. @@ -6187,17 +6217,17 @@ END SUBROUTINE h5pget_virtual_dsetname_f LOGICAL(C_BOOL) :: c_ignore_flag INTERFACE - INTEGER FUNCTION h5pget_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) & + INTEGER(C_INT) FUNCTION H5Pget_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) & BIND(C, NAME='H5Pget_file_locking') - IMPORT :: HID_T, C_BOOL + IMPORT :: C_INT, HID_T, C_BOOL IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: fapl_id LOGICAL(C_BOOL), INTENT(OUT) :: use_file_locking LOGICAL(C_BOOL), INTENT(OUT) :: ignore_disabled_locks - END FUNCTION h5pget_file_locking + END FUNCTION H5Pget_file_locking END INTERFACE - hdferr = INT(h5pget_file_locking(fapl_id, c_use_flag, c_ignore_flag)) + hdferr = INT(H5Pget_file_locking(fapl_id, c_use_flag, c_ignore_flag)) ! Transfer value of C C_BOOL type to Fortran LOGICAL use_file_locking = c_use_flag @@ -6227,21 +6257,21 @@ END SUBROUTINE h5pget_virtual_dsetname_f LOGICAL(C_BOOL) :: c_ignore_flag INTERFACE - INTEGER FUNCTION h5pset_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) & + INTEGER(C_INT) FUNCTION H5Pset_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) & BIND(C, NAME='H5Pset_file_locking') - IMPORT :: HID_T, C_BOOL + IMPORT :: C_INT, HID_T, C_BOOL IMPLICIT NONE INTEGER(HID_T), INTENT(IN), VALUE :: fapl_id LOGICAL(C_BOOL), INTENT(IN), VALUE :: use_file_locking LOGICAL(C_BOOL), INTENT(IN), VALUE :: ignore_disabled_locks - END FUNCTION h5pset_file_locking + END FUNCTION H5Pset_file_locking END INTERFACE ! Transfer value of Fortran LOGICAL to C C_BOOL type c_use_flag = use_file_locking c_ignore_flag = ignore_disabled_locks - hdferr = INT(h5pset_file_locking(fapl_id, c_use_flag, c_ignore_flag)) + hdferr = INT(H5Pset_file_locking(fapl_id, c_use_flag, c_ignore_flag)) END SUBROUTINE h5pset_file_locking_f diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index a9f2d96..396acf9 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -428,8 +428,9 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid H5ES_status_t *h5es_flags, hid_t_f *h5es_hid_flags, int_f *h5f_flags, int_f *h5fd_flags, hid_t_f *h5fd_hid_flags, int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags, hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags, - hid_t_f *h5s_hid_flags, hsize_t_f *h5s_hsize_flags, int_f *h5t_flags, int_f *h5z_flags, - int_f *h5_generic_flags, haddr_t_f *h5_haddr_generic_flags) + hid_t_f *h5s_hid_flags, hsize_t_f *h5s_hsize_flags, int_f *h5t_flags, int_f *h5vl_flags, + uint64_t *h5vl_int64_flags, int_f *h5z_flags, int_f *h5_generic_flags, + haddr_t_f *h5_haddr_generic_flags) /******/ { /* @@ -821,6 +822,66 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid h5t_flags[34] = (int_f)H5T_DIR_DESCEND; /* + * H5VL flags + */ + + /* + * Capability flags for VOL connectors + */ + + h5vl_flags[0] = (int_f)H5VL_VERSION; + h5vl_flags[1] = (int_f)H5_VOL_INVALID; + h5vl_flags[2] = (int_f)H5_VOL_NATIVE; + + h5vl_int64_flags[0] = H5VL_CAP_FLAG_NONE; + h5vl_int64_flags[1] = H5VL_CAP_FLAG_THREADSAFE; + h5vl_int64_flags[2] = H5VL_CAP_FLAG_ASYNC; + h5vl_int64_flags[3] = H5VL_CAP_FLAG_NATIVE_FILES; + h5vl_int64_flags[4] = H5VL_CAP_FLAG_ATTR_BASIC; + h5vl_int64_flags[5] = H5VL_CAP_FLAG_ATTR_MORE; + h5vl_int64_flags[6] = H5VL_CAP_FLAG_DATASET_BASIC; + h5vl_int64_flags[7] = H5VL_CAP_FLAG_DATASET_MORE; + h5vl_int64_flags[8] = H5VL_CAP_FLAG_FILE_BASIC; + h5vl_int64_flags[9] = H5VL_CAP_FLAG_FILE_MORE; + h5vl_int64_flags[10] = H5VL_CAP_FLAG_GROUP_BASIC; + h5vl_int64_flags[11] = H5VL_CAP_FLAG_GROUP_MORE; + h5vl_int64_flags[12] = H5VL_CAP_FLAG_LINK_BASIC; + h5vl_int64_flags[13] = H5VL_CAP_FLAG_LINK_MORE; + h5vl_int64_flags[14] = H5VL_CAP_FLAG_MAP_BASIC; + h5vl_int64_flags[15] = H5VL_CAP_FLAG_MAP_MORE; + h5vl_int64_flags[16] = H5VL_CAP_FLAG_OBJECT_BASIC; + h5vl_int64_flags[17] = H5VL_CAP_FLAG_OBJECT_MORE; + h5vl_int64_flags[18] = H5VL_CAP_FLAG_REF_BASIC; + h5vl_int64_flags[19] = H5VL_CAP_FLAG_REF_MORE; + h5vl_int64_flags[20] = H5VL_CAP_FLAG_OBJ_REF; + h5vl_int64_flags[21] = H5VL_CAP_FLAG_REG_REF; + h5vl_int64_flags[22] = H5VL_CAP_FLAG_ATTR_REF; + h5vl_int64_flags[23] = H5VL_CAP_FLAG_STORED_DATATYPES; + h5vl_int64_flags[24] = H5VL_CAP_FLAG_CREATION_ORDER; + h5vl_int64_flags[25] = H5VL_CAP_FLAG_ITERATE; + h5vl_int64_flags[26] = H5VL_CAP_FLAG_STORAGE_SIZE; + h5vl_int64_flags[27] = H5VL_CAP_FLAG_BY_IDX; + h5vl_int64_flags[28] = H5VL_CAP_FLAG_GET_PLIST; + h5vl_int64_flags[29] = H5VL_CAP_FLAG_FLUSH_REFRESH; + h5vl_int64_flags[30] = H5VL_CAP_FLAG_EXTERNAL_LINKS; + h5vl_int64_flags[31] = H5VL_CAP_FLAG_HARD_LINKS; + h5vl_int64_flags[32] = H5VL_CAP_FLAG_SOFT_LINKS; + h5vl_int64_flags[33] = H5VL_CAP_FLAG_UD_LINKS; + h5vl_int64_flags[34] = H5VL_CAP_FLAG_TRACK_TIMES; + h5vl_int64_flags[35] = H5VL_CAP_FLAG_MOUNT; + h5vl_int64_flags[36] = H5VL_CAP_FLAG_FILTERS; + h5vl_int64_flags[37] = H5VL_CAP_FLAG_FILL_VALUES; + + h5vl_int64_flags[38] = H5VL_OPT_QUERY_SUPPORTED; + h5vl_int64_flags[39] = H5VL_OPT_QUERY_READ_DATA; + h5vl_int64_flags[40] = H5VL_OPT_QUERY_WRITE_DATA; + h5vl_int64_flags[41] = H5VL_OPT_QUERY_QUERY_METADATA; + h5vl_int64_flags[42] = H5VL_OPT_QUERY_MODIFY_METADATA; + h5vl_int64_flags[43] = H5VL_OPT_QUERY_COLLECTIVE; + h5vl_int64_flags[44] = H5VL_OPT_QUERY_NO_ASYNC; + h5vl_int64_flags[45] = H5VL_OPT_QUERY_MULTI_OBJ; + + /* * H5Z flags */ h5z_flags[0] = (int_f)H5Z_FILTER_ERROR; diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90 index 651c96d..ecea23d 100644 --- a/fortran/src/H5_ff.F90 +++ b/fortran/src/H5_ff.F90 @@ -51,7 +51,7 @@ MODULE H5LIB - USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_INTPTR_T + USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_INTPTR_T, C_INT64_T USE H5GLOBAL IMPLICIT NONE @@ -149,6 +149,13 @@ MODULE H5LIB ! INTEGER, PARAMETER :: H5T_FLAGS_LEN = 35 INTEGER, DIMENSION(1:H5T_FLAGS_LEN) :: H5T_flags + ! + ! H5VL flags declaration + ! + INTEGER, PARAMETER :: H5VL_FLAGS_LEN = 3 + INTEGER, DIMENSION(1:H5VL_FLAGS_LEN) :: H5VL_flags + INTEGER, PARAMETER :: H5VL_INT64_FLAGS_LEN = 46 + INTEGER(C_INT64_T), DIMENSION(1:H5VL_INT64_FLAGS_LEN) :: H5VL_int64_flags ! ! H5Z flags declaration @@ -209,11 +216,13 @@ CONTAINS i_H5S_hid_flags, & i_H5S_hsize_flags, & i_H5T_flags, & + i_H5VL_flags, & + i_H5VL_int64_flags, & i_H5Z_flags, & i_H5generic_flags, & i_H5generic_haddr_flags) & BIND(C,NAME='h5init_flags_c') - IMPORT :: HID_T, SIZE_T, HSIZE_T, HADDR_T + IMPORT :: HID_T, SIZE_T, HSIZE_T, HADDR_T, C_INT64_T IMPORT :: H5D_FLAGS_LEN, H5D_SIZE_FLAGS_LEN, & H5E_FLAGS_LEN, H5E_HID_FLAGS_LEN, & H5ES_FLAGS_LEN, H5ES_HID_FLAGS_LEN, & @@ -221,31 +230,34 @@ CONTAINS H5FD_HID_FLAGS_LEN, H5I_FLAGS_LEN, H5L_FLAGS_LEN, & H5O_FLAGS_LEN, H5P_FLAGS_LEN, H5P_FLAGS_INT_LEN, & H5R_FLAGS_LEN, H5S_FLAGS_LEN, H5S_HID_FLAGS_LEN, H5S_HSIZE_FLAGS_LEN, & - H5T_FLAGS_LEN, H5Z_FLAGS_LEN, H5generic_FLAGS_LEN, H5generic_haddr_FLAGS_LEN + H5T_FLAGS_LEN, H5VL_FLAGS_LEN, H5VL_INT64_FLAGS_LEN, & + H5Z_FLAGS_LEN, H5generic_FLAGS_LEN, H5generic_haddr_FLAGS_LEN IMPLICIT NONE - INTEGER , DIMENSION(1:H5D_FLAGS_LEN) :: i_H5D_flags - INTEGER(SIZE_T) , DIMENSION(1:H5D_SIZE_FLAGS_LEN) :: i_H5D_size_flags - INTEGER , DIMENSION(1:H5E_FLAGS_LEN) :: i_H5E_flags - INTEGER(HID_T) , DIMENSION(1:H5E_HID_FLAGS_LEN) :: i_H5E_hid_flags - INTEGER , DIMENSION(1:H5ES_FLAGS_LEN) :: i_H5ES_flags - INTEGER(HID_T) , DIMENSION(1:H5ES_HID_FLAGS_LEN) :: i_H5ES_hid_flags - INTEGER , DIMENSION(1:H5F_FLAGS_LEN) :: i_H5F_flags - INTEGER , DIMENSION(1:H5G_FLAGS_LEN) :: i_H5G_flags - INTEGER , DIMENSION(1:H5FD_FLAGS_LEN) :: i_H5FD_flags - INTEGER(HID_T) , DIMENSION(1:H5FD_HID_FLAGS_LEN) :: i_H5FD_hid_flags - INTEGER , DIMENSION(1:H5I_FLAGS_LEN) :: i_H5I_flags - INTEGER , DIMENSION(1:H5L_FLAGS_LEN) :: i_H5L_flags - INTEGER , DIMENSION(1:H5O_FLAGS_LEN) :: i_H5O_flags - INTEGER(HID_T) , DIMENSION(1:H5P_FLAGS_LEN) :: i_H5P_flags - INTEGER , DIMENSION(1:H5P_FLAGS_INT_LEN) :: i_H5P_flags_int - INTEGER , DIMENSION(1:H5R_FLAGS_LEN) :: i_H5R_flags - INTEGER , DIMENSION(1:H5S_FLAGS_LEN) :: i_H5S_flags - INTEGER(HID_T) , DIMENSION(1:H5S_HID_FLAGS_LEN) :: i_H5S_hid_flags - INTEGER(HSIZE_T), DIMENSION(1:H5S_HSIZE_FLAGS_LEN) :: i_H5S_hsize_flags - INTEGER , DIMENSION(1:H5T_FLAGS_LEN) :: i_H5T_flags - INTEGER , DIMENSION(1:H5Z_FLAGS_LEN) :: i_H5Z_flags - INTEGER , DIMENSION(1:H5generic_FLAGS_LEN) :: i_H5generic_flags - INTEGER(HADDR_T), DIMENSION(1:H5generic_haddr_FLAGS_LEN) :: i_H5generic_haddr_flags + INTEGER , DIMENSION(1:H5D_FLAGS_LEN) :: i_H5D_flags + INTEGER(SIZE_T) , DIMENSION(1:H5D_SIZE_FLAGS_LEN) :: i_H5D_size_flags + INTEGER , DIMENSION(1:H5E_FLAGS_LEN) :: i_H5E_flags + INTEGER(HID_T) , DIMENSION(1:H5E_HID_FLAGS_LEN) :: i_H5E_hid_flags + INTEGER , DIMENSION(1:H5ES_FLAGS_LEN) :: i_H5ES_flags + INTEGER(HID_T) , DIMENSION(1:H5ES_HID_FLAGS_LEN) :: i_H5ES_hid_flags + INTEGER , DIMENSION(1:H5F_FLAGS_LEN) :: i_H5F_flags + INTEGER , DIMENSION(1:H5G_FLAGS_LEN) :: i_H5G_flags + INTEGER , DIMENSION(1:H5FD_FLAGS_LEN) :: i_H5FD_flags + INTEGER(HID_T) , DIMENSION(1:H5FD_HID_FLAGS_LEN) :: i_H5FD_hid_flags + INTEGER , DIMENSION(1:H5I_FLAGS_LEN) :: i_H5I_flags + INTEGER , DIMENSION(1:H5L_FLAGS_LEN) :: i_H5L_flags + INTEGER , DIMENSION(1:H5O_FLAGS_LEN) :: i_H5O_flags + INTEGER(HID_T) , DIMENSION(1:H5P_FLAGS_LEN) :: i_H5P_flags + INTEGER , DIMENSION(1:H5P_FLAGS_INT_LEN) :: i_H5P_flags_int + INTEGER , DIMENSION(1:H5R_FLAGS_LEN) :: i_H5R_flags + INTEGER , DIMENSION(1:H5S_FLAGS_LEN) :: i_H5S_flags + INTEGER(HID_T) , DIMENSION(1:H5S_HID_FLAGS_LEN) :: i_H5S_hid_flags + INTEGER(HSIZE_T) , DIMENSION(1:H5S_HSIZE_FLAGS_LEN) :: i_H5S_hsize_flags + INTEGER , DIMENSION(1:H5T_FLAGS_LEN) :: i_H5T_flags + INTEGER , DIMENSION(1:H5VL_FLAGS_LEN) :: i_H5VL_flags + INTEGER(C_INT64_T), DIMENSION(1:H5VL_INT64_FLAGS_LEN) :: i_H5VL_int64_flags + INTEGER , DIMENSION(1:H5Z_FLAGS_LEN) :: i_H5Z_flags + INTEGER , DIMENSION(1:H5generic_FLAGS_LEN) :: i_H5generic_flags + INTEGER(HADDR_T) , DIMENSION(1:H5generic_haddr_FLAGS_LEN) :: i_H5generic_haddr_flags END FUNCTION h5init_flags_c INTEGER FUNCTION h5init1_flags_c( i_H5LIB_flags ) & @@ -331,6 +343,8 @@ CONTAINS H5S_hid_flags, & H5S_hsize_flags, & H5T_flags, & + H5VL_flags, & + H5VL_int64_flags, & H5Z_flags, & H5generic_flags,& H5generic_haddr_flags) @@ -454,28 +468,28 @@ CONTAINS ! ! H5FD flags ! - H5FD_MPIO_INDEPENDENT_F = H5FD_flags(1) - H5FD_MPIO_COLLECTIVE_F = H5FD_flags(2) - H5FD_MEM_NOLIST_F = H5FD_flags(3) - H5FD_MEM_DEFAULT_F = H5FD_flags(4) - H5FD_MEM_SUPER_F = H5FD_flags(5) - H5FD_MEM_BTREE_F = H5FD_flags(6) - H5FD_MEM_DRAW_F = H5FD_flags(7) - H5FD_MEM_GHEAP_F = H5FD_flags(8) - H5FD_MEM_LHEAP_F = H5FD_flags(9) - H5FD_MEM_OHDR_F = H5FD_flags(10) - H5FD_MEM_NTYPES_F = H5FD_flags(11) + H5FD_MPIO_INDEPENDENT_F = H5FD_flags(1) + H5FD_MPIO_COLLECTIVE_F = H5FD_flags(2) + H5FD_MEM_NOLIST_F = H5FD_flags(3) + H5FD_MEM_DEFAULT_F = H5FD_flags(4) + H5FD_MEM_SUPER_F = H5FD_flags(5) + H5FD_MEM_BTREE_F = H5FD_flags(6) + H5FD_MEM_DRAW_F = H5FD_flags(7) + H5FD_MEM_GHEAP_F = H5FD_flags(8) + H5FD_MEM_LHEAP_F = H5FD_flags(9) + H5FD_MEM_OHDR_F = H5FD_flags(10) + H5FD_MEM_NTYPES_F = H5FD_flags(11) H5FD_SUBFILING_CURR_FAPL_VERSION_F = H5FD_flags(12) H5FD_SUBFILING_FAPL_MAGIC_F = H5FD_flags(13) H5FD_SUBFILING_DEFAULT_STRIPE_COUNT_F = H5FD_flags(14) H5FD_IOC_FAPL_MAGIC_F = H5FD_flags(15) H5FD_IOC_CURR_FAPL_VERSION_F = H5FD_flags(16) H5FD_IOC_DEFAULT_THREAD_POOL_SIZE_F = H5FD_flags(17) - SELECT_IOC_ONE_PER_NODE_F = H5FD_flags(18) - SELECT_IOC_EVERY_NTH_RANK_F = H5FD_flags(19) - SELECT_IOC_WITH_CONFIG_F = H5FD_flags(20) - SELECT_IOC_TOTAL_F = H5FD_flags(21) - IOC_SELECTION_OPTIONS_F = H5FD_flags(22) + SELECT_IOC_ONE_PER_NODE_F = H5FD_flags(18) + SELECT_IOC_EVERY_NTH_RANK_F = H5FD_flags(19) + SELECT_IOC_WITH_CONFIG_F = H5FD_flags(20) + SELECT_IOC_TOTAL_F = H5FD_flags(21) + IOC_SELECTION_OPTIONS_F = H5FD_flags(22) ! ! H5FD file driver flags @@ -649,6 +663,61 @@ CONTAINS H5T_DIR_ASCEND_F = H5T_flags(34) H5T_DIR_DESCEND_F = H5T_flags(35) ! + ! H5VL flags + ! + H5VL_VERSION_F = H5VL_flags(1) + H5_VOL_INVALID_F = H5VL_flags(2) + H5_VOL_NATIVE_F = H5VL_flags(3) + + H5VL_CAP_FLAG_NONE_F = H5VL_int64_flags(1) + H5VL_CAP_FLAG_THREADSAFE_F = H5VL_int64_flags(2) + H5VL_CAP_FLAG_ASYNC_F = H5VL_int64_flags(3) + H5VL_CAP_FLAG_NATIVE_FILES_F = H5VL_int64_flags(4) + H5VL_CAP_FLAG_ATTR_BASIC_F = H5VL_int64_flags(5) + H5VL_CAP_FLAG_ATTR_MORE_F = H5VL_int64_flags(6) + H5VL_CAP_FLAG_DATASET_BASIC_F = H5VL_int64_flags(7) + H5VL_CAP_FLAG_DATASET_MORE_F = H5VL_int64_flags(8) + H5VL_CAP_FLAG_FILE_BASIC_F = H5VL_int64_flags(9) + H5VL_CAP_FLAG_FILE_MORE_F = H5VL_int64_flags(10) + H5VL_CAP_FLAG_GROUP_BASIC_F = H5VL_int64_flags(11) + H5VL_CAP_FLAG_GROUP_MORE_F = H5VL_int64_flags(12) + H5VL_CAP_FLAG_LINK_BASIC_F = H5VL_int64_flags(13) + H5VL_CAP_FLAG_LINK_MORE_F = H5VL_int64_flags(14) + H5VL_CAP_FLAG_MAP_BASIC_F = H5VL_int64_flags(15) + H5VL_CAP_FLAG_MAP_MORE_F = H5VL_int64_flags(16) + H5VL_CAP_FLAG_OBJECT_BASIC_F = H5VL_int64_flags(17) + H5VL_CAP_FLAG_OBJECT_MORE_F = H5VL_int64_flags(18) + H5VL_CAP_FLAG_REF_BASIC_F = H5VL_int64_flags(19) + H5VL_CAP_FLAG_REF_MORE_F = H5VL_int64_flags(20) + H5VL_CAP_FLAG_OBJ_REF_F = H5VL_int64_flags(21) + H5VL_CAP_FLAG_REG_REF_F = H5VL_int64_flags(22) + H5VL_CAP_FLAG_ATTR_REF_F = H5VL_int64_flags(23) + H5VL_CAP_FLAG_STORED_DATATYPES_F = H5VL_int64_flags(24) + H5VL_CAP_FLAG_CREATION_ORDER_F = H5VL_int64_flags(25) + H5VL_CAP_FLAG_ITERATE_F = H5VL_int64_flags(26) + H5VL_CAP_FLAG_STORAGE_SIZE_F = H5VL_int64_flags(27) + H5VL_CAP_FLAG_BY_IDX_F = H5VL_int64_flags(28) + H5VL_CAP_FLAG_GET_PLIST_F = H5VL_int64_flags(29) + H5VL_CAP_FLAG_FLUSH_REFRESH_F = H5VL_int64_flags(30) + H5VL_CAP_FLAG_EXTERNAL_LINKS_F = H5VL_int64_flags(31) + H5VL_CAP_FLAG_HARD_LINKS_F = H5VL_int64_flags(32) + H5VL_CAP_FLAG_SOFT_LINKS_F = H5VL_int64_flags(33) + H5VL_CAP_FLAG_UD_LINKS_F = H5VL_int64_flags(34) + H5VL_CAP_FLAG_TRACK_TIMES_F = H5VL_int64_flags(35) + H5VL_CAP_FLAG_MOUNT_F = H5VL_int64_flags(36) + H5VL_CAP_FLAG_FILTERS_F = H5VL_int64_flags(37) + H5VL_CAP_FLAG_FILL_VALUES_F = H5VL_int64_flags(38) + + H5VL_OPT_QUERY_SUPPORTED_F = H5VL_int64_flags(39) + H5VL_OPT_QUERY_READ_DATA_F = H5VL_int64_flags(40) + H5VL_OPT_QUERY_WRITE_DATA_F = H5VL_int64_flags(41) + H5VL_OPT_QUERY_QUERY_METADATA_F = H5VL_int64_flags(42) + H5VL_OPT_QUERY_MODIFY_METADATA_F = H5VL_int64_flags(43) + H5VL_OPT_QUERY_COLLECTIVE_F = H5VL_int64_flags(44) + H5VL_OPT_QUERY_NO_ASYNC_F = H5VL_int64_flags(45) + H5VL_OPT_QUERY_MULTI_OBJ_F = H5VL_int64_flags(46) + + ! ! H5Z flags ! H5Z_FILTER_ERROR_F = H5Z_flags(1) diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90 index c37e22d..049bf26 100644 --- a/fortran/src/H5f90global.F90 +++ b/fortran/src/H5f90global.F90 @@ -819,6 +819,116 @@ MODULE H5GLOBAL INTEGER :: H5T_DIR_DESCEND_F !< H5T_DIR_DESCEND !> @} ! + ! H5VL flags declaration + ! + !DEC$if defined(BUILD_HDF5_DLL) + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_VERSION_F + !DEC$ATTRIBUTES DLLEXPORT :: H5_VOL_INVALID_F + !DEC$ATTRIBUTES DLLEXPORT :: H5_VOL_NATIVE_F + + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_NONE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_THREADSAFE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_ASYNC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_NATIVE_FILES_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_ATTR_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_ATTR_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_DATASET_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_DATASET_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_FILE_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_FILE_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_GROUP_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_GROUP_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_LINK_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_LINK_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_MAP_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_MAP_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_OBJECT_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_OBJECT_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_REF_BASIC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_REF_MORE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_OBJ_REF_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_REG_REF_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_ATTR_REF_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_STORED_DATATYPES_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_CREATION_ORDER_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_ITERATE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_STORAGE_SIZE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_BY_IDX_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_GET_PLIST_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_FLUSH_REFRESH_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_EXTERNAL_LINKS_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_HARD_LINKS_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_SOFT_LINKS_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_UD_LINKS_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_TRACK_TIMES_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_MOUNT_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_FILTERS_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_CAP_FLAG_FILL_VALUES_F + + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_SUPPORTED_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_READ_DATA_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_WRITE_DATA_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_QUERY_METADATA_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_MODIFY_METADATA_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_COLLECTIVE_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_NO_ASYNC_F + !DEC$ATTRIBUTES DLLEXPORT :: H5VL_OPT_QUERY_MULTI_OBJ_F + !DEC$endif +!> \addtogroup FH5VL +!> @{ + INTEGER :: H5VL_VERSION_F !< H5VL_VERSION + INTEGER :: H5_VOL_INVALID_F !< H5_VOL_INVALID + INTEGER :: H5_VOL_NATIVE_F !< H5_VOL_NATIVE + + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_NONE_F !< H5VL_CAP_FLAG_NONE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_THREADSAFE_F !< H5VL_CAP_FLAG_THREADSAFE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_ASYNC_F !< H5VL_CAP_FLAG_ASYNC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_NATIVE_FILES_F !< H5VL_CAP_FLAG_NATIVE_FILES + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_ATTR_BASIC_F !< H5VL_CAP_FLAG_ATTR_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_ATTR_MORE_F !< H5VL_CAP_FLAG_ATTR_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_DATASET_BASIC_F !< H5VL_CAP_FLAG_DATASET_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_DATASET_MORE_F !< H5VL_CAP_FLAG_DATASET_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_FILE_BASIC_F !< H5VL_CAP_FLAG_FILE_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_FILE_MORE_F !< H5VL_CAP_FLAG_FILE_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_GROUP_BASIC_F !< H5VL_CAP_FLAG_GROUP_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_GROUP_MORE_F !< H5VL_CAP_FLAG_GROUP_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_LINK_BASIC_F !< H5VL_CAP_FLAG_LINK_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_LINK_MORE_F !< H5VL_CAP_FLAG_LINK_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_MAP_BASIC_F !< H5VL_CAP_FLAG_MAP_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_MAP_MORE_F !< H5VL_CAP_FLAG_MAP_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_OBJECT_BASIC_F !< H5VL_CAP_FLAG_OBJECT_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_OBJECT_MORE_F !< H5VL_CAP_FLAG_OBJECT_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_REF_BASIC_F !< H5VL_CAP_FLAG_REF_BASIC + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_REF_MORE_F !< H5VL_CAP_FLAG_REF_MORE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_OBJ_REF_F !< H5VL_CAP_FLAG_OBJ_REF + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_REG_REF_F !< H5VL_CAP_FLAG_REG_REF + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_ATTR_REF_F !< H5VL_CAP_FLAG_ATTR_REF + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_STORED_DATATYPES_F !< H5VL_CAP_FLAG_STORED_DATATYPES + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_CREATION_ORDER_F !< H5VL_CAP_FLAG_CREATION_ORDER + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_ITERATE_F !< H5VL_CAP_FLAG_ITERATE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_STORAGE_SIZE_F !< H5VL_CAP_FLAG_STORAGE_SIZE + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_BY_IDX_F !< H5VL_CAP_FLAG_BY_IDX + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_GET_PLIST_F !< H5VL_CAP_FLAG_GET_PLIST + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_FLUSH_REFRESH_F !< H5VL_CAP_FLAG_FLUSH_REFRESH + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_EXTERNAL_LINKS_F !< H5VL_CAP_FLAG_EXTERNAL_LINKS + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_HARD_LINKS_F !< H5VL_CAP_FLAG_HARD_LINKS + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_SOFT_LINKS_F !< H5VL_CAP_FLAG_SOFT_LINKS + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_UD_LINKS_F !< H5VL_CAP_FLAG_UD_LINKS + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_TRACK_TIMES_F !< H5VL_CAP_FLAG_TRACK_TIMES + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_MOUNT_F !< H5VL_CAP_FLAG_MOUNT + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_FILTERS_F !< H5VL_CAP_FLAG_FILTERS + INTEGER(C_INT64_T) :: H5VL_CAP_FLAG_FILL_VALUES_F !< H5VL_CAP_FLAG_FILL_VALUES + + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_SUPPORTED_F !< H5VL_OPT_QUERY_SUPPORTED + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_READ_DATA_F !< H5VL_OPT_QUERY_READ_DATA + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_WRITE_DATA_F !< H5VL_OPT_QUERY_WRITE_DATA + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_QUERY_METADATA_F !< H5VL_OPT_QUERY_QUERY_METADATA + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_MODIFY_METADATA_F !< H5VL_OPT_QUERY_MODIFY_METADATA + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_COLLECTIVE_F !< H5VL_OPT_QUERY_COLLECTIVE + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_NO_ASYNC_F !< H5VL_OPT_QUERY_NO_ASYNC + INTEGER(C_INT64_T) :: H5VL_OPT_QUERY_MULTI_OBJ_F !< H5VL_OPT_QUERY_MULTI_OBJ +!> @} + ! ! H5Z flags declaration ! !DEC$if defined(BUILD_HDF5_DLL) diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h index 9085ae5..5b34dd6 100644 --- a/fortran/src/H5f90proto.h +++ b/fortran/src/H5f90proto.h @@ -580,7 +580,8 @@ H5_FCDLL int_f h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags, hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags, hid_t_f *h5s_hid_flags, hsize_t_f *h5s_hsize_flags, int_f *h5t_flags, - int_f *h5z_flags, int_f *h5_generic_flags, haddr_t_f *h5_haddr_generic_flags); + int_f *h5vl_flags, uint64_t *h5vl_int64_flags, int_f *h5z_flags, + int_f *h5_generic_flags, haddr_t_f *h5_haddr_generic_flags); H5_FCDLL int_f h5init1_flags_c(int_f *h5lib_flags); H5_FCDLL int_f h5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum); H5_FCDLL int_f h5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum); diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in index 80de79b..9e1bb2e 100644 --- a/fortran/src/hdf5_fortrandll.def.in +++ b/fortran/src/hdf5_fortrandll.def.in @@ -397,6 +397,7 @@ H5P_mp_H5PGET_VIRTUAL_DSETNAME_F H5P_mp_H5PGET_DSET_NO_ATTRS_HINT_F H5P_mp_H5PSET_DSET_NO_ATTRS_HINT_F H5P_mp_H5PSET_VOL_F +H5P_mp_H5PGET_VOL_CAP_FLAGS_F H5P_mp_H5PGET_VOL_ID_F H5P_mp_H5PSET_FILE_LOCKING_F H5P_mp_H5PGET_FILE_LOCKING_F diff --git a/fortran/test/tf.F90 b/fortran/test/tf.F90 index 61451af..501d243 100644 --- a/fortran/test/tf.F90 +++ b/fortran/test/tf.F90 @@ -96,8 +96,8 @@ CONTAINS ENDDO WRITE(*,'("| |")') - WRITE(*,'(A)') title_centered - + WRITE(*,'(A)') TRIM(title_centered) + WRITE(*,'("| |")', ADVANCE="NO") DO i = 1, width-5 WRITE(*,'(1X)', ADVANCE="NO") diff --git a/fortran/testpar/async.F90 b/fortran/testpar/async.F90 index 5d2ce38..2235ecf 100644 --- a/fortran/testpar/async.F90 +++ b/fortran/testpar/async.F90 @@ -1259,7 +1259,11 @@ PROGRAM async_test LOGICAL :: registered INTEGER :: sum INTEGER :: nerrors = 0 + INTEGER :: len, idx + CHARACTER(LEN=255) :: vol_connector_string, vol_connector_name + INTEGER(C_INT64_T) :: cap_flags + INTEGER(HID_T) :: plist_id LOGICAL :: cleanup INTEGER :: ret_total_error = 0 @@ -1301,47 +1305,60 @@ PROGRAM async_test ! CALL h5open_f(hdferror) - ! CHECK ASYNC VOLS AVAILABILITY ! - ! (1) Check if ASYNC VOL is available - CALL H5VLis_connector_registered_by_name_f("async", registered, hdferror) - CALL check("H5VLis_connector_registered_by_name_f", hdferror, total_error) - IF(.NOT.registered)THEN + IF(mpi_rank==0) WRITE(*,'(A)', ADVANCE="NO") "VOL CONNECTOR TESTED: " + + CALL get_environment_variable("HDF5_VOL_CONNECTOR", VALUE=vol_connector_string, LENGTH=len) + IF(len .EQ. 0)THEN + + ! No VOL connector set; using native VOL connector + async_enabled = .FALSE. + IF(mpi_rank==0) WRITE(*,'(A,/)') "NATIVE" + + ELSE + + idx = INDEX(vol_connector_string, " ") + vol_connector_name = vol_connector_string(1:idx-1) - ! (2) check if the DAOS VOL is available - CALL H5VLis_connector_registered_by_name_f("daos", registered, hdferror) + ! (1) Check if the VOL is available + CALL H5VLis_connector_registered_by_name_f(TRIM(vol_connector_name), registered, hdferror) CALL check("H5VLis_connector_registered_by_name_f", hdferror, total_error) IF(.NOT.registered)THEN - ! No async compatible VOL found + ! No VOL found registered async_enabled = .FALSE. + IF(mpi_rank==0) WRITE(*,'(A,/)') "NATIVE" ELSE - CALL H5Vlregister_connector_by_name_f("daos", vol_id, hdferror) - CALL check("H5Vlregister_connector_by_name_f", hdferror, total_error) + ! (2) Check if the VOL is async compatible + CALL h5pcreate_f(H5P_FILE_ACCESS_F, plist_id, hdferror) + CALL check("h5pcreate_f", hdferror, total_error) + CALL h5pget_vol_cap_flags_f(plist_id, cap_flags, hdferror) + CALL check("h5pget_vol_cap_flags_f", hdferror, total_error) + CALL h5pclose_f(plist_id, hdferror) + CALL check("h5pcreate_f", hdferror, total_error) + IF(H5VL_CAP_FLAG_ASYNC_F.EQ.1_C_INT64_T) async_enabled = .TRUE. + IF(async_enabled .EQV. .FALSE.)THEN + ! No async compatible VOL found + IF(mpi_rank==0) WRITE(*,'(A,/)') "NATIVE" + ELSE + IF(mpi_rank==0) WRITE(*,'(A,/)') TRIM(vol_connector_name) + CALL H5Vlregister_connector_by_name_f(TRIM(vol_connector_name), vol_id, hdferror) + CALL check("H5Vlregister_connector_by_name_f", hdferror, total_error) + ENDIF ENDIF - ELSE - CALL H5Vlregister_connector_by_name_f("async", vol_id, hdferror) - CALL check("H5Vlregister_connector_by_name_f", hdferror, total_error) - ENDIF - - IF ( (async_enabled .EQV. .TRUE.) .AND. (mpi_thread_mult .EQV. .FALSE.) ) THEN - total_error = -1 ! Skip test - IF(mpi_rank==0) CALL write_test_status(total_error, & - "No MPI_Init_thread support for MPI_THREAD_MULTIPLE", total_error) - CALL MPI_Barrier(MPI_COMM_WORLD, mpierror) - CALL MPI_Finalize(mpierror) - STOP + IF ( (async_enabled .EQV. .TRUE.) .AND. (mpi_thread_mult .EQV. .FALSE.) ) THEN + total_error = -1 ! Skip test + IF(mpi_rank==0) CALL write_test_status(total_error, & + "No MPI_Init_thread support for MPI_THREAD_MULTIPLE", total_error) + CALL MPI_Barrier(MPI_COMM_WORLD, mpierror) + CALL MPI_Finalize(mpierror) + STOP + ENDIF ENDIF -! IF(total_error.LT.0)THEN -! IF(mpi_rank==0) CALL write_test_status(total_error, & -! 'Testing async APIs', total_error) -! STOP -! ENDIF - ! H5ES API TESTING ret_total_error = 0 CALL H5ES_tests(cleanup, ret_total_error) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 4f27dc5..7153c4e 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -176,6 +176,9 @@ New Features Fortran Library: ---------------- + - Added h5pget_vol_cap_flags_f and related Fortran VOL + capability definitions. + - Fortran async APIs H5A, H5D, H5ES, H5G, H5F, H5L and H5O were added. - Added Fortran APIs: -- cgit v0.12