summaryrefslogtreecommitdiffstats
path: root/fortran/src
diff options
context:
space:
mode:
authorScot Breitenfeld <brtnfld@hdfgroup.org>2022-10-06 16:08:56 (GMT)
committerGitHub <noreply@github.com>2022-10-06 16:08:56 (GMT)
commite80079fd21ffe6978ac69e7632e069cc44874675 (patch)
treeb1f75384a0df8385cb8ad5e13b233554c20bdfa1 /fortran/src
parenta322eb6147f243e1d45934ddfc1cfa6f69a0ddec (diff)
downloadhdf5-e80079fd21ffe6978ac69e7632e069cc44874675.zip
hdf5-e80079fd21ffe6978ac69e7632e069cc44874675.tar.gz
hdf5-e80079fd21ffe6978ac69e7632e069cc44874675.tar.bz2
Subfiling Fortran wrapper work. (#2143)
* added C ref. for Fortran constants * added C ref. for Fortran constants * move constant paramters to H5* module listing * added back comment * Fortran subfiling and ioc FD with tests. H5Pset/get_mpi_params wrappers with tests, misc.. parallel test clean-up. * misc. fixes * fixed CMake testpar issues, formatted, misc. updates * updated tests
Diffstat (limited to 'fortran/src')
-rw-r--r--fortran/src/H5Pf.c81
-rw-r--r--fortran/src/H5Pff.F90243
-rw-r--r--fortran/src/H5_f.c31
-rw-r--r--fortran/src/H5_ff.F9032
-rw-r--r--fortran/src/H5config_f.inc.cmake8
-rw-r--r--fortran/src/H5config_f.inc.in3
-rw-r--r--fortran/src/H5f90global.F9019
-rw-r--r--fortran/src/H5f90proto.h2
-rw-r--r--fortran/src/hdf5_fortrandll.def.in6
9 files changed, 414 insertions, 11 deletions
diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c
index 876457f..58f8f24 100644
--- a/fortran/src/H5Pf.c
+++ b/fortran/src/H5Pf.c
@@ -5473,6 +5473,87 @@ h5pget_fapl_mpio_c(hid_t_f *prp_id, int_f *comm, int_f *info)
ret_value = 0;
return ret_value;
}
+
+/****if* H5Pf/h5pset_mpi_params_c
+ * NAME
+ * h5pset_mpi_params_c
+ * PURPOSE
+ * Set the MPI communicator and info.
+ * INPUTS
+ * prp_id - property list identifier
+ * comm - MPI communicator
+ * info - MPI info object
+ * RETURNS
+ * 0 on success, -1 on failure
+ * AUTHOR
+ * M.S. Breitenfeld
+ * October 2022
+ *
+ * SOURCE
+ */
+int_f
+h5pset_mpi_params_c(hid_t_f *prp_id, int_f *comm, int_f *info)
+/******/
+{
+ int ret_value = -1;
+ hid_t c_prp_id;
+ herr_t ret;
+ MPI_Comm c_comm;
+ MPI_Info c_info;
+ c_comm = MPI_Comm_f2c(*comm);
+ c_info = MPI_Info_f2c(*info);
+
+ /*
+ * Call H5Pset_mpi_params.
+ */
+ c_prp_id = *prp_id;
+ ret = H5Pset_mpi_params(c_prp_id, c_comm, c_info);
+ if (ret < 0)
+ return ret_value;
+ ret_value = 0;
+ return ret_value;
+}
+
+/****if* H5Pf/h5pget_mpi_params_c
+ * NAME
+ * h5pget_mpi_params_c
+ * PURPOSE
+ * Get the MPI communicator and info.
+ * INPUTS
+ * prp_id - property list identifier
+ * comm - MPI communicator
+ * info - MPI info object
+ * RETURNS
+ * 0 on success, -1 on failure
+ * AUTHOR
+ * M.S. Breitenfeld
+ * October 2022
+ *
+ * SOURCE
+ */
+int_f
+h5pget_mpi_params_c(hid_t_f *prp_id, int_f *comm, int_f *info)
+/******/
+{
+ int ret_value = -1;
+ hid_t c_prp_id;
+ herr_t ret;
+ MPI_Comm c_comm;
+ MPI_Info c_info;
+
+ /*
+ * Call H5Pget_mpi_params function.
+ */
+ c_prp_id = *prp_id;
+ ret = H5Pget_mpi_params(c_prp_id, &c_comm, &c_info);
+ if (ret < 0)
+ return ret_value;
+ *comm = (int_f)MPI_Comm_c2f(c_comm);
+ *info = (int_f)MPI_Info_c2f(c_info);
+ ret_value = 0;
+ return ret_value;
+}
+
/****if* H5Pf/h5pset_dxpl_mpio_c
* NAME
* h5pset_dxpl_mpio_c
diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90
index 40c0a92..4de2a9d 100644
--- a/fortran/src/H5Pff.F90
+++ b/fortran/src/H5Pff.F90
@@ -182,6 +182,37 @@ MODULE H5P
#endif
+#ifdef H5_HAVE_PARALLEL
+#ifdef H5_HAVE_SUBFILING_VFD
+!> \addtogroup FH5P
+!> @{
+
+ !> @brief H5FD_subfiling_params_t derived type used in the subfiling VFD.
+ TYPE, BIND(C) :: H5FD_subfiling_params_t
+ INTEGER(ENUM_T) :: ioc_selection !< Method to select I/O concentrators
+ INTEGER(C_INT64_T) :: stripe_size !< Size (in bytes) of data stripes in subfiles
+ INTEGER(C_INT32_T) :: stripe_count !< Target number of subfiles to use
+ END TYPE H5FD_subfiling_params_t
+
+ !> @brief H5FD_subfiling_config_t derived type used in the subfiling VFD.
+ TYPE, BIND(C) :: H5FD_subfiling_config_t
+ INTEGER(C_INT32_T) :: magic !< Set to H5FD_SUBFILING_FAPL_MAGIC_F
+ INTEGER(C_INT32_T) :: version !< Set to H5FD_CURR_SUBFILING_FAPL_VERSION_F
+ INTEGER(HID_T) :: ioc_fapl_id !< The FAPL setup with the stacked VFD to use for I/O concentrators
+ LOGICAL(C_BOOL) :: require_ioc !< Whether to use the IOC VFD (currently must always be TRUE)
+ TYPE(H5FD_subfiling_params_t) :: shared_cfg !< Subfiling/IOC parameters (stripe size, stripe count, etc.)
+ END TYPE H5FD_subfiling_config_t
+
+ !> @brief H5FD_ioc_config_t derived type used in the IOC VFD (SUBFILING).
+ TYPE, BIND(C) :: H5FD_ioc_config_t
+ INTEGER(C_INT32_T) :: magic !< Must be set to H5FD_IOC_FAPL_MAGIC_F
+ INTEGER(C_INT32_T) :: version !< Must be set to H5FD_IOC_CURR_FAPL_VERSION_F
+ INTEGER(C_INT32_T) :: thread_pool_size !< Number of I/O concentrator worker threads to use
+ END TYPE H5FD_ioc_config_t
+!> @}
+#endif
+#endif
+
CONTAINS
!>
@@ -5042,6 +5073,218 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
END SUBROUTINE h5pget_fapl_mpio_f
+#ifdef H5_HAVE_SUBFILING_VFD
+!>
+!! \ingroup FH5P
+!!
+!! \brief Modifies the specified File Access Property List to use the #H5FD_SUBFILING driver.
+!!
+!! \param prp_id File access property list identifier.
+!! \param hdferr \fortran_error
+!! \param vfd_config #H5FD_SUBFILING driver configuration derived type.
+!!
+!! See C API: @ref herr_t H5Pset_fapl_subfiling(hid_t fapl_id, const H5FD_subfiling_config_t *vfd_config);
+!!
+ SUBROUTINE h5pset_fapl_subfiling_f(prp_id, hdferr, vfd_config)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: prp_id
+ INTEGER, INTENT(OUT) :: hdferr
+ TYPE(H5FD_subfiling_config_t), OPTIONAL, TARGET :: vfd_config
+ TYPE(C_PTR) :: f_ptr
+
+ INTERFACE
+ INTEGER FUNCTION H5Pset_fapl_subfiling(prp_id, vfd_config) &
+ BIND(C,NAME='H5Pset_fapl_subfiling')
+ IMPORT :: HID_T, C_PTR
+ IMPLICIT NONE
+ INTEGER(HID_T), VALUE :: prp_id
+ TYPE(C_PTR) , VALUE :: vfd_config
+ END FUNCTION h5pset_fapl_subfiling
+ END INTERFACE
+
+ IF(PRESENT(vfd_config))THEN
+ f_ptr = C_LOC(vfd_config)
+ ELSE
+ f_ptr = C_NULL_PTR
+ ENDIF
+
+ hdferr = h5pset_fapl_subfiling(prp_id, f_ptr)
+
+ END SUBROUTINE h5pset_fapl_subfiling_f
+
+!>
+!! \ingroup FH5P
+!!
+!! \brief Queries a File Access Property List for #H5FD_SUBFILING file driver properties.
+!!
+!! \param prp_id File access property list identifier.
+!! \param vfd_config #H5FD_SUBFILING driver configuration derived type.
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref herr_t H5Pget_fapl_subfiling(hid_t fapl_id, H5FD_subfiling_config_t *config_out);
+!!
+ SUBROUTINE h5pget_fapl_subfiling_f(prp_id, vfd_config, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: prp_id
+ TYPE(H5FD_subfiling_config_t), TARGET :: vfd_config
+ INTEGER, INTENT(OUT) :: hdferr
+ TYPE(C_PTR) :: f_ptr
+
+ INTERFACE
+ INTEGER FUNCTION H5Pget_fapl_subfiling(prp_id, vfd_config) &
+ BIND(C,NAME='H5Pget_fapl_subfiling')
+ IMPORT :: HID_T, C_PTR
+ IMPLICIT NONE
+ INTEGER(HID_T), VALUE :: prp_id
+ TYPE(C_PTR) , VALUE :: vfd_config
+ END FUNCTION H5Pget_fapl_subfiling
+ END INTERFACE
+
+ f_ptr = C_LOC(vfd_config)
+ hdferr = h5pget_fapl_subfiling(prp_id, f_ptr)
+
+ END SUBROUTINE h5pget_fapl_subfiling_f
+
+!>
+!! \ingroup FH5P
+!!
+!! \brief Modifies the specified File Access Property List to use the #H5FD_IOC driver.
+!!
+!! \param prp_id File access property list identifier.
+!! \param hdferr \fortran_error
+!! \param vfd_config #H5FD_IOC driver configuration derived type.
+!!
+!! See C API: @ref herr_t H5Pset_fapl_ioc(hid_t fapl_id, const H5FD_ioc_config_t *vfd_config);
+!!
+ SUBROUTINE h5pset_fapl_ioc_f(prp_id, hdferr, vfd_config)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: prp_id
+ TYPE(H5FD_ioc_config_t), OPTIONAL, TARGET :: vfd_config
+ INTEGER, INTENT(OUT) :: hdferr
+ TYPE(C_PTR) :: f_ptr
+
+ INTERFACE
+ INTEGER FUNCTION H5Pset_fapl_ioc(prp_id, vfd_config) &
+ BIND(C,NAME='H5Pset_fapl_ioc')
+ IMPORT :: HID_T, C_PTR
+ IMPLICIT NONE
+ INTEGER(HID_T), VALUE :: prp_id
+ TYPE(C_PTR) , VALUE :: vfd_config
+ END FUNCTION h5pset_fapl_ioc
+ END INTERFACE
+
+ IF(PRESENT(vfd_config))THEN
+ f_ptr = C_LOC(vfd_config)
+ ELSE
+ f_ptr = C_NULL_PTR
+ ENDIF
+
+ hdferr = h5pset_fapl_ioc(prp_id, f_ptr)
+
+ END SUBROUTINE h5pset_fapl_ioc_f
+
+!>
+!! \ingroup FH5P
+!!
+!! \brief Queries a File Access Property List for #H5FD_IOC file driver properties.
+!!
+!! \param prp_id File access property list identifier.
+!! \param vfd_config #H5FD_IOC driver configuration derived type.
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref herr_t H5Pget_fapl_ioc(hid_t fapl_id, H5FD_ioc_config_t *config_out);
+!!
+ SUBROUTINE h5pget_fapl_ioc_f(prp_id, vfd_config, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: prp_id
+ TYPE(H5FD_ioc_config_t), TARGET :: vfd_config
+ INTEGER, INTENT(OUT) :: hdferr
+ TYPE(C_PTR) :: f_ptr
+
+ INTERFACE
+ INTEGER FUNCTION H5Pget_fapl_ioc(prp_id, vfd_config) &
+ BIND(C,NAME='H5Pget_fapl_ioc')
+ IMPORT :: HID_T, C_PTR
+ IMPLICIT NONE
+ INTEGER(HID_T), VALUE :: prp_id
+ TYPE(C_PTR) , VALUE :: vfd_config
+ END FUNCTION H5Pget_fapl_ioc
+ END INTERFACE
+
+ f_ptr = C_LOC(vfd_config)
+ hdferr = h5pget_fapl_ioc(prp_id, f_ptr)
+
+ END SUBROUTINE h5pget_fapl_ioc_f
+#endif
+
+!>
+!! \ingroup FH5P
+!!
+!! \brief Set the MPI communicator and info.
+!!
+!! \param prp_id File access property list identifier.
+!! \param comm The MPI communicator.
+!! \param info The MPI info object.
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref herr_t H5Pset_mpi_params(hid_t plist_id, MPI_Comm comm, MPI_Info info);
+!!
+ SUBROUTINE H5Pset_mpi_params_f(prp_id, comm, info, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: prp_id
+ INTEGER , INTENT(IN) :: comm
+ INTEGER , INTENT(IN) :: info
+ INTEGER , INTENT(OUT) :: hdferr
+
+ INTERFACE
+ INTEGER FUNCTION h5pset_mpi_params_c(prp_id, comm, info) &
+ BIND(C,NAME='h5pset_mpi_params_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(HID_T) :: prp_id
+ INTEGER :: comm
+ INTEGER :: info
+ END FUNCTION H5pset_mpi_params_c
+ END INTERFACE
+
+ hdferr = H5Pset_mpi_params_c(prp_id, comm, info)
+
+ END SUBROUTINE H5Pset_mpi_params_f
+
+!>
+!! \ingroup FH5P
+!!
+!! \brief Get the MPI communicator and info.
+!!
+!! \param prp_id File access property list identifier.
+!! \param comm The MPI communicator.
+!! \param info The MPI info object.
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref herr_t H5Pget_mpi_params(hid_t fapl_id, MPI_Comm *comm, MPI_Info *info);
+!!
+ SUBROUTINE H5Pget_mpi_params_f(prp_id, comm, info, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: prp_id
+ INTEGER , INTENT(OUT) :: comm
+ INTEGER , INTENT(OUT) :: info
+ INTEGER , INTENT(OUT) :: hdferr
+
+ INTERFACE
+ INTEGER FUNCTION h5pget_mpi_params_c(prp_id, comm, info) &
+ BIND(C,NAME='h5pget_mpi_params_c')
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ INTEGER(HID_T) :: prp_id
+ INTEGER :: comm
+ INTEGER :: info
+ END FUNCTION H5pget_mpi_params_c
+ END INTERFACE
+
+ hdferr = H5Pget_mpi_params_c(prp_id, comm, info)
+
+ END SUBROUTINE H5Pget_mpi_params_f
+
!>
!! \ingroup FH5P
!!
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index 468debe..385241d 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -525,6 +525,31 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid
h5fd_flags[8] = (int_f)H5FD_MEM_LHEAP;
h5fd_flags[9] = (int_f)H5FD_MEM_OHDR;
h5fd_flags[10] = (int_f)H5FD_MEM_NTYPES;
+#ifdef H5_HAVE_SUBFILING_VFD
+ h5fd_flags[11] = (int_f)H5FD_SUBFILING_CURR_FAPL_VERSION;
+ h5fd_flags[12] = (int_f)H5FD_SUBFILING_FAPL_MAGIC;
+ h5fd_flags[13] = (int_f)H5FD_SUBFILING_DEFAULT_STRIPE_COUNT;
+ h5fd_flags[14] = (int_f)H5FD_IOC_FAPL_MAGIC;
+ h5fd_flags[15] = (int_f)H5FD_IOC_CURR_FAPL_VERSION;
+ h5fd_flags[16] = (int_f)H5FD_IOC_DEFAULT_THREAD_POOL_SIZE;
+ h5fd_flags[17] = (int_f)SELECT_IOC_ONE_PER_NODE;
+ h5fd_flags[18] = (int_f)SELECT_IOC_EVERY_NTH_RANK;
+ h5fd_flags[19] = (int_f)SELECT_IOC_WITH_CONFIG;
+ h5fd_flags[20] = (int_f)SELECT_IOC_TOTAL;
+ h5fd_flags[21] = (int_f)ioc_selection_options;
+#else
+ h5fd_flags[11] = 0;
+ h5fd_flags[12] = 0;
+ h5fd_flags[13] = 0;
+ h5fd_flags[14] = 0;
+ h5fd_flags[15] = 0;
+ h5fd_flags[16] = 0;
+ h5fd_flags[17] = 0;
+ h5fd_flags[18] = 0;
+ h5fd_flags[19] = 0;
+ h5fd_flags[20] = 0;
+ h5fd_flags[21] = 0;
+#endif
/*
* H5FD flags of type hid_t
@@ -536,6 +561,12 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid
h5fd_hid_flags[4] = (hid_t_f)H5FD_MULTI;
h5fd_hid_flags[5] = (hid_t_f)H5FD_SEC2;
h5fd_hid_flags[6] = (hid_t_f)H5FD_STDIO;
+ h5fd_hid_flags[7] = (hid_t_f)H5FD_SUBFILING;
+#ifdef H5_HAVE_SUBFILING_VFD
+ h5fd_hid_flags[8] = (hid_t_f)H5FD_SUBFILING_DEFAULT_STRIPE_SIZE;
+#else
+ h5fd_hid_flags[8] = 0;
+#endif
/*
* H5G flags
diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90
index 1dc90c2..8c7acfe 100644
--- a/fortran/src/H5_ff.F90
+++ b/fortran/src/H5_ff.F90
@@ -92,12 +92,12 @@ MODULE H5LIB
!
! H5FD flags declaration
!
- INTEGER, PARAMETER :: H5FD_FLAGS_LEN = 11
+ INTEGER, PARAMETER :: H5FD_FLAGS_LEN = 22
INTEGER, DIMENSION(1:H5FD_FLAGS_LEN) :: H5FD_flags
!
! H5FD file drivers flags declaration
!
- INTEGER, PARAMETER :: H5FD_HID_FLAGS_LEN = 7
+ INTEGER, PARAMETER :: H5FD_HID_FLAGS_LEN = 9
INTEGER(HID_T), DIMENSION(1:H5FD_HID_FLAGS_LEN) :: H5FD_hid_flags
!
! H5I flags declaration
@@ -436,16 +436,30 @@ CONTAINS
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)
+
!
! H5FD file driver flags
!
- H5FD_CORE_F = H5FD_hid_flags(1)
- H5FD_FAMILY_F = H5FD_hid_flags(2)
- H5FD_LOG_F = H5FD_hid_flags(3)
- H5FD_MPIO_F = H5FD_hid_flags(4)
- H5FD_MULTI_F = H5FD_hid_flags(5)
- H5FD_SEC2_F = H5FD_hid_flags(6)
- H5FD_STDIO_F = H5FD_hid_flags(7)
+ H5FD_CORE_F = H5FD_hid_flags(1)
+ H5FD_FAMILY_F = H5FD_hid_flags(2)
+ H5FD_LOG_F = H5FD_hid_flags(3)
+ H5FD_MPIO_F = H5FD_hid_flags(4)
+ H5FD_MULTI_F = H5FD_hid_flags(5)
+ H5FD_SEC2_F = H5FD_hid_flags(6)
+ H5FD_STDIO_F = H5FD_hid_flags(7)
+ H5FD_SUBFILING_F = H5FD_hid_flags(8)
+ H5FD_SUBFILING_DEFAULT_STRIPE_SIZE_F = H5FD_hid_flags(9)
!
! H5I flags declaration
!
diff --git a/fortran/src/H5config_f.inc.cmake b/fortran/src/H5config_f.inc.cmake
index 565d6eb..46dfb69 100644
--- a/fortran/src/H5config_f.inc.cmake
+++ b/fortran/src/H5config_f.inc.cmake
@@ -11,12 +11,18 @@
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! fortran/src/H5config_f.inc. Generated from fortran/src/H5config_f.inc.in by configure
-! Define if we have parallel support
+! Define if there is parallel support
#cmakedefine01 H5_HAVE_PARALLEL
#if H5_HAVE_PARALLEL == 0
#undef H5_HAVE_PARALLEL
#endif
+! Define if there is subfiling support
+#cmakedefine01 H5_HAVE_SUBFILING_VFD
+#if H5_HAVE_SUBFILING_VFD == 0
+#undef H5_HAVE_SUBFILING_VFD
+#endif
+
! Define if the intrinsic function STORAGE_SIZE exists
#define H5_FORTRAN_HAVE_STORAGE_SIZE @H5_FORTRAN_HAVE_STORAGE_SIZE@
diff --git a/fortran/src/H5config_f.inc.in b/fortran/src/H5config_f.inc.in
index 685b4d2..0ce33ec 100644
--- a/fortran/src/H5config_f.inc.in
+++ b/fortran/src/H5config_f.inc.in
@@ -17,6 +17,9 @@
! Define if we have parallel support
#undef HAVE_PARALLEL
+! Define if we have subfiling support
+#undef HAVE_SUBFILING_VFD
+
! Define if the intrinsic function STORAGE_SIZE exists
#undef FORTRAN_HAVE_STORAGE_SIZE
diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90
index 12e40bf..6ad3366 100644
--- a/fortran/src/H5f90global.F90
+++ b/fortran/src/H5f90global.F90
@@ -425,7 +425,8 @@ MODULE H5GLOBAL
!DEC$ATTRIBUTES DLLEXPORT :: H5FD_SEC2_F
!DEC$ATTRIBUTES DLLEXPORT :: H5FD_STDIO_F
!DEC$endif
-
+!> \addtogroup FH5P
+!> @{
INTEGER :: H5FD_MPIO_INDEPENDENT_F !< H5FD_MPIO_INDEPENDENT
INTEGER :: H5FD_MPIO_COLLECTIVE_F !< H5FD_MPIO_COLLECTIVE
INTEGER :: H5FD_MEM_NOLIST_F !< H5FD_MEM_NOLIST
@@ -437,6 +438,18 @@ MODULE H5GLOBAL
INTEGER :: H5FD_MEM_LHEAP_F !< H5FD_MEM_LHEAP
INTEGER :: H5FD_MEM_OHDR_F !< H5FD_MEM_OHDR
INTEGER :: H5FD_MEM_NTYPES_F !< H5FD_MEM_NTYPES
+ INTEGER :: H5FD_SUBFILING_CURR_FAPL_VERSION_F !< H5FD_SUBFILING_CURR_FAPL_VERSION
+ INTEGER :: H5FD_SUBFILING_FAPL_MAGIC_F !< H5FD_SUBFILING_FAPL_MAGIC
+ INTEGER :: H5FD_SUBFILING_DEFAULT_STRIPE_COUNT_F !< H5FD_SUBFILING_DEFAULT_STRIPE_COUNT
+ INTEGER :: H5FD_IOC_CURR_FAPL_VERSION_F !< H5FD_IOC_CURR_FAPL_VERSION
+ INTEGER :: H5FD_IOC_FAPL_MAGIC_F !< H5FD_IOC_FAPL_MAGIC
+ INTEGER :: H5FD_IOC_DEFAULT_THREAD_POOL_SIZE_F !< H5FD_IOC_DEFAULT_THREAD_POOL_SIZE
+ INTEGER :: SELECT_IOC_ONE_PER_NODE_F !< Default, SELECT_IOC_ONE_PER_NODE
+ INTEGER :: SELECT_IOC_EVERY_NTH_RANK_F !< Starting at rank 0, select-next += N, SELECT_IOC_EVERY_NTH_RANK
+ INTEGER :: SELECT_IOC_WITH_CONFIG_F !< NOT IMPLEMENTED: Read-from-file, SELECT_IOC_WITH_CONFIG
+ INTEGER :: SELECT_IOC_TOTAL_F !< Starting at rank 0, mpi_size / total, SELECT_IOC_TOTAL
+ INTEGER :: IOC_SELECTION_OPTIONS_F !< Sentinel value, IOC_SELECTION_OPTIONS
+
INTEGER(HID_T) :: H5FD_CORE_F !< H5FD_CORE
INTEGER(HID_T) :: H5FD_FAMILY_F !< H5FD_FAMILY
INTEGER(HID_T) :: H5FD_LOG_F !< H5FD_LOG
@@ -444,6 +457,10 @@ MODULE H5GLOBAL
INTEGER(HID_T) :: H5FD_MULTI_F !< H5FD_MULTI
INTEGER(HID_T) :: H5FD_SEC2_F !< H5FD_SEC2
INTEGER(HID_T) :: H5FD_STDIO_F !< H5FD_STDIO
+ INTEGER(HID_T) :: H5FD_SUBFILING_F !< H5FD_SUBFILING
+ INTEGER(HID_T) :: H5FD_SUBFILING_DEFAULT_STRIPE_SIZE_F !< H5FD_SUBFILING_DEFAULT_STRIPE_SIZE
+
+!> @}
!
! H5I flags declaration
!
diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h
index 0b348b7..3cfba71 100644
--- a/fortran/src/H5f90proto.h
+++ b/fortran/src/H5f90proto.h
@@ -534,6 +534,8 @@ H5_FCDLL int_f h5pget_chunk_cache_c(hid_t_f *dapl_id, size_t_f *rdcc_nslots, siz
H5_FCDLL int_f h5pget_mpio_actual_io_mode_c(hid_t_f *dxpl_id, int_f *actual_io_mode);
H5_FCDLL int_f h5pget_fapl_mpio_c(hid_t_f *prp_id, int_f *comm, int_f *info);
H5_FCDLL int_f h5pset_fapl_mpio_c(hid_t_f *prp_id, int_f *comm, int_f *info);
+H5_FCDLL int_f h5pget_mpi_params_c(hid_t_f *prp_id, int_f *comm, int_f *info);
+H5_FCDLL int_f h5pset_mpi_params_c(hid_t_f *prp_id, int_f *comm, int_f *info);
H5_FCDLL int_f h5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f *data_xfer_mode);
H5_FCDLL int_f h5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f *data_xfer_mode);
#endif
diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in
index 4207239..f61f74b 100644
--- a/fortran/src/hdf5_fortrandll.def.in
+++ b/fortran/src/hdf5_fortrandll.def.in
@@ -344,6 +344,12 @@ H5P_mp_H5PGET_FILE_LOCKING_F
; Parallel
@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_MPIO_F
@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_MPIO_F
+@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_SUBFILING_F
+@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_SUBFILING_F
+@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_IOC_F
+@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_IOC_F
+@H5_NOPAREXP@H5P_mp_H5PSET_MPI_PARAMS_F
+@H5_NOPAREXP@H5P_mp_H5PGET_MPI_PARAMS_F
@H5_NOPAREXP@H5P_mp_H5PSET_DXPL_MPIO_F
@H5_NOPAREXP@H5P_mp_H5PGET_DXPL_MPIO_F
@H5_NOPAREXP@H5P_mp_H5PGET_MPIO_ACTUAL_IO_MODE_F