Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi Dataset #2120

Merged
merged 175 commits into from
Oct 19, 2022
Merged
Show file tree
Hide file tree
Changes from 162 commits
Commits
Show all changes
175 commits
Select commit Hold shift + click to select a range
e18f0cf
Fix bug with cross platform compatibility of references within vlens.
fortnern Sep 30, 2021
d958fa5
Merge branch 'hdf5_canon-develop' into develop
fortnern Oct 18, 2021
e754c2a
Merge branch 'HDFGroup:develop' into develop
fortnern Nov 1, 2021
f6eb89f
Merge from multi_rd_wd_coll_io to a more recent branch from develop.
fortnern Apr 21, 2022
6f2d93d
Committing clang-format changes
github-actions[bot] Apr 21, 2022
9a9e2c0
Committing clang-format changes
github-actions[bot] Apr 25, 2022
57b0119
Fix many bugs in multi dataset branch. Mostly works, some issues in
fortnern Apr 26, 2022
fd071e2
Committing clang-format changes
github-actions[bot] Apr 26, 2022
d8edb5e
Merge pull request #1694 from fortnern/mds_merge
fortnern Apr 26, 2022
ce873af
Disable test in swmr.c that was failing due to bug in HDF5 unrelated to
fortnern Apr 26, 2022
a5b3cd8
Committing clang-format changes
github-actions[bot] Apr 26, 2022
7e80c7a
Fixed fortran multi-dataset tests
brtnfld Oct 30, 2017
d52fad1
Fixed xlf errors
brtnfld Oct 31, 2017
9d3f386
Added benchmark code for multi-datasets
brtnfld Nov 2, 2017
c416a94
loops over datasets
brtnfld Nov 2, 2017
9054556
added missing error arg.
brtnfld Nov 2, 2017
2f0078b
Added gnuplot formatting
brtnfld Nov 3, 2017
fa3e780
Jonathan Kim original MD benchmarking code
brtnfld Nov 9, 2017
7d03d03
updated MD benchmarking code
brtnfld Nov 10, 2017
670723c
code clean-up
brtnfld Nov 10, 2017
80f4167
Only make files in feature test mode
brtnfld Nov 20, 2017
2c3e7c0
misc clean-up
brtnfld Nov 20, 2017
63a4448
removed TEST_MDSET_NO_LAST_DSET_2ND_PROC option
brtnfld Nov 20, 2017
8b3ac0b
Committing clang-format changes
github-actions[bot] May 2, 2022
41dffc5
Change multi dataset API to use arrays of individual parameters instead
fortnern May 2, 2022
d0eb62d
Merge branch 'mds_merge' of github.com:fortnern/hdf5 into mds_merge
fortnern May 2, 2022
b39a123
Committing clang-format changes
github-actions[bot] May 2, 2022
8298fa6
Merge pull request #1710 from fortnern/mds_merge
fortnern May 2, 2022
249bcf4
Update to new multi dataset Fortran API and tests. (#1724)
brtnfld May 4, 2022
1671635
Fixed issue with dxpl_id, changed to variable size dim. (#1770)
brtnfld May 12, 2022
4d2e5a1
Remove "is_coll_broken" field from H5D_io_info_t struct
fortnern May 13, 2022
abc7cb7
Committing clang-format changes
github-actions[bot] May 13, 2022
83068e5
Minor cleanup in multi dataset code.
fortnern May 17, 2022
9090123
Merge branch 'mds_merge' of github.com:fortnern/hdf5 into mds_merge
fortnern May 17, 2022
fb17cb6
Committing clang-format changes
github-actions[bot] May 17, 2022
7bdcbba
Clean up in multi dataset code.
fortnern May 18, 2022
40a8f11
Merge branch 'mds_merge' of github.com:fortnern/hdf5 into mds_merge
fortnern May 18, 2022
9f04cd8
Committing clang-format changes
github-actions[bot] May 18, 2022
41311a8
Merge pull request #1780 from fortnern/mds_merge
fortnern May 18, 2022
633ea5e
Merge branch 'develop' of github.com:fortnern/hdf5 into develop
fortnern May 18, 2022
57ce559
Merge branch 'develop' into mds_merge
fortnern May 23, 2022
ca8a3ed
Merge branch 'HDFGroup:develop' into mds_merge
fortnern May 24, 2022
db8d267
Committing clang-format changes
github-actions[bot] May 24, 2022
467f63c
Merge branch 'hdf5_canon_feature/multi_dataset' into mds_merge
fortnern May 24, 2022
a61a19d
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern May 24, 2022
f5af344
Fix speeling
fortnern May 24, 2022
14abb33
Merge pull request #1789 from fortnern/mds_merge
fortnern May 24, 2022
651ef32
Fix bug in parallel compression. Switch base_maddr in io_info to be a
fortnern Jun 1, 2022
4ce03c9
Committing clang-format changes
github-actions[bot] Jun 1, 2022
d746664
Merge pull request #1799 from fortnern/mds_merge
fortnern Jun 1, 2022
3decd32
Implement selection I/O support with multi dataset. Will be broken in
fortnern Jun 7, 2022
de0d582
Committing clang-format changes
github-actions[bot] Jun 7, 2022
aa1c5b7
Merge pull request #1804 from fortnern/mds_merge
fortnern Jun 7, 2022
84b2bc2
Spelling
fortnern Jun 7, 2022
06d023b
Merge pull request #1805 from fortnern/mds_merge
fortnern Jun 7, 2022
47d3496
Merge branch 'develop' of https://github.com/fortnern/hdf5 into develop
fortnern Jun 10, 2022
a1b752f
Merge branch 'develop' into mds_merge
fortnern Jun 10, 2022
1bcfc85
Merge develop up to commit '213eac2588369f75a11df6bb1788dde33c4b82e2'…
fortnern Aug 1, 2022
f1ed4ab
Merge commit 'ae414872f50187e64cbd6cc8f076c22cf5df2d53' into mds_merge
fortnern Aug 2, 2022
5e8ddb7
Merge branch 'develop' into mds_merge
fortnern Aug 2, 2022
a466794
Merge pull request #1962 from fortnern/mds_merge
fortnern Aug 2, 2022
21e08fe
Fix bug in multi dataset that could cause errors when only some of the
fortnern Aug 3, 2022
24efe8c
Committing clang-format changes
github-actions[bot] Aug 3, 2022
2648315
Merge pull request #1966 from fortnern/mds_merge
fortnern Aug 3, 2022
d3717bb
Integrate multi dataset APIs with VOL layer. Add async versions of
fortnern Aug 9, 2022
69364bc
Committing clang-format changes
github-actions[bot] Aug 9, 2022
8bbef50
Spelling fixes
fortnern Aug 9, 2022
a4bad75
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Aug 9, 2022
bb9b8a1
Merge pull request #1982 from fortnern/mds_merge
fortnern Aug 9, 2022
0eac9a8
Fix bug in non-parallel HDF5 compilation.
fortnern Aug 10, 2022
0e473a6
Committing clang-format changes
github-actions[bot] Aug 10, 2022
faec43a
Merge pull request #1993 from fortnern/mds_merge
fortnern Aug 10, 2022
9b00c6a
Fix potential memory/free list error. Minor performance fix. Other minor
fortnern Aug 11, 2022
22ae845
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Aug 11, 2022
7a5dc10
Committing clang-format changes
github-actions[bot] Aug 11, 2022
b51df41
Merge pull request #1999 from fortnern/mds_merge
fortnern Aug 11, 2022
0c7cb42
Fix memory leak with memory dataspace for I/O.
fortnern Aug 12, 2022
aae385c
Committing clang-format changes
github-actions[bot] Aug 12, 2022
f30da32
Merge pull request #2007 from fortnern/mds_merge
fortnern Aug 12, 2022
b76080c
Merge branch 'develop' into mds_merge
fortnern Aug 18, 2022
a3812f6
Merge pull request #2035 from fortnern/mds_merge
fortnern Aug 18, 2022
4ad17e8
Fix stack variables too large. Rename H5D_dset_info_t to
fortnern Aug 22, 2022
a744311
Committing clang-format changes
github-actions[bot] Aug 22, 2022
9487c13
Merge pull request #2054 from fortnern/mds_merge
fortnern Aug 22, 2022
b897367
Remove mem_space_alloc field from H5D_dset_io_info_t. Each function is
fortnern Aug 25, 2022
668a942
Committing clang-format changes
github-actions[bot] Aug 25, 2022
b98e595
Merge pull request #2070 from fortnern/mds_merge
fortnern Aug 25, 2022
f6922c4
fixed _multi Fortran declaration
brtnfld Sep 19, 2022
05c65a1
Refactor various things in (mostly) the serial I/O code path to make
fortnern Sep 19, 2022
89451a2
Committing clang-format changes
github-actions[bot] Sep 19, 2022
1093429
Merge pull request #2111 from fortnern/mds_merge
fortnern Sep 19, 2022
ada82e9
Merge pull request #10 from HDFGroup/feature/multi_dataset
fortnern Sep 19, 2022
fc3b27d
Merge branch 'develop' into mds_merge
fortnern Sep 20, 2022
e818d00
Merge pull request #2112 from fortnern/mds_merge
fortnern Sep 20, 2022
0d12725
updated to array based, doxygen, and examples
brtnfld Sep 21, 2022
78e996a
Reinstate H5D_chunk_map_t, stored (via pointer) inside
fortnern Sep 21, 2022
40868a1
Change from calloc to malloc for H5D_dset_io_info_t and H5D_chunk_map_t.
fortnern Sep 21, 2022
bfa021c
Committing clang-format changes
github-actions[bot] Sep 21, 2022
07b0929
Merge pull request #2113 from fortnern/mds_merge
fortnern Sep 21, 2022
2a2441b
format cleanup
brtnfld Sep 22, 2022
c0ac5fb
format cleanup
brtnfld Sep 22, 2022
0e7a27b
added coll and ind
brtnfld Sep 22, 2022
fd0f659
Modify all parallel I/O paths to take dset_info instead of assuming
fortnern Sep 22, 2022
f330c8f
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Sep 22, 2022
cc4c7b6
Committing clang-format changes
github-actions[bot] Sep 22, 2022
c28551b
Merge pull request #2116 from fortnern/mds_merge
fortnern Sep 22, 2022
a03a76a
Merge pull request #11 from HDFGroup/feature/multi_dataset
fortnern Sep 22, 2022
9fa1a70
fixed output
brtnfld Sep 22, 2022
c7c1b50
Rework parallel I/O code to work properly with multi dataset in more
fortnern Sep 23, 2022
8e9aa30
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Sep 23, 2022
0cc2159
Committing clang-format changes
github-actions[bot] Sep 23, 2022
d016371
Prevent H5D__multi_chunk_collective_io() from messing up collective opt
fortnern Sep 23, 2022
df005ab
Fix spelling
fortnern Sep 23, 2022
5a5df91
Committing clang-format changes
github-actions[bot] Sep 23, 2022
add0605
Replace N log N algorithm for finding chunk in
fortnern Sep 23, 2022
463dee1
Committing clang-format changes
github-actions[bot] Sep 23, 2022
df88666
Merge pull request #2118 from fortnern/mds_merge
fortnern Sep 23, 2022
c61aa3a
Replace sel_pieces skiplist in io_info with flat array of pointers, use
fortnern Sep 24, 2022
67f646d
Committing clang-format changes
github-actions[bot] Sep 24, 2022
03a76d0
Add new test case to mdset.c
fortnern Sep 24, 2022
bea6ecd
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Sep 24, 2022
4257ce5
Committing clang-format changes
github-actions[bot] Sep 24, 2022
00d4581
Merge pull request #2119 from fortnern/mds_merge
fortnern Sep 24, 2022
885f0fe
Fix spelling
fortnern Sep 24, 2022
a7e3f76
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Sep 24, 2022
a9c14e5
Very minor fix in H5VL__native_dataset_read()
fortnern Sep 24, 2022
5d47a01
Merge pull request #2121 from fortnern/mds_merge
fortnern Sep 25, 2022
1726e91
Fix bug that could affect filtered parallel multi-dataset I/O.
fortnern Sep 26, 2022
f742533
Merge pull request #2125 from fortnern/mds_merge
fortnern Sep 26, 2022
8b75dad
Merge pull request #12 from HDFGroup/feature/multi_dataset
fortnern Sep 26, 2022
52b8e24
Add RM entries for H5Dread_multi(), H5Dread_multi_async(),
fortnern Sep 26, 2022
e81367e
Unskip test in swmr.c
fortnern Sep 26, 2022
5a62f70
Committing clang-format changes
github-actions[bot] Sep 26, 2022
f6efe07
Eliminate H5D__pre_read and H5D__pre_write
fortnern Sep 27, 2022
7e8eae9
Merge branch 'mds_merge' of https://github.com/fortnern/hdf5 into mds…
fortnern Sep 27, 2022
17251a2
Remove examples/ph5mdsettest.c. Will fix and re-add as a test.
fortnern Sep 27, 2022
584343b
Merge pull request #2127 from fortnern/mds_merge
fortnern Sep 27, 2022
83e018d
Merge branch 'develop' into mds_merge
fortnern Sep 27, 2022
1a11797
Merge pull request #2128 from fortnern/mds_merge
fortnern Sep 27, 2022
f4d386b
Enable hyperslab combinations in mdset test
fortnern Sep 27, 2022
2f23872
Committing clang-format changes
github-actions[bot] Sep 27, 2022
263aedc
Merge pull request #2130 from fortnern/mds_merge
fortnern Sep 27, 2022
e3207ac
Clarify H5Dread/write_multi documentation.
fortnern Sep 28, 2022
0000a85
Merge pull request #2133 from fortnern/mds_merge
fortnern Sep 28, 2022
780ea42
Fix bugs in multi-dataset I/O. Expand serial multi dataset test.
fortnern Oct 3, 2022
fad8340
Committing clang-format changes
github-actions[bot] Oct 3, 2022
1e0cf77
Spelling
fortnern Oct 3, 2022
5f5ed43
Merge pull request #2139 from fortnern/mds_merge
fortnern Oct 3, 2022
4434735
Remove obsolete entry in bin/trace
fortnern Oct 3, 2022
3c196ed
Merge pull request #2140 from fortnern/mds_merge
fortnern Oct 3, 2022
451269d
Rework type conversion buffer allocation. Only one buffer is shared
fortnern Oct 5, 2022
ed7b3da
Committing clang-format changes
github-actions[bot] Oct 5, 2022
7e055d4
Merge pull request #2144 from fortnern/mds_merge
fortnern Oct 5, 2022
15eedaf
Fix bug in error handling in H5D__read/write
fortnern Oct 5, 2022
e4e9444
Merge pull request #2145 from fortnern/mds_merge
fortnern Oct 5, 2022
5c93fe8
added multi-dataset fortran check with optional dataset creation id (…
brtnfld Oct 7, 2022
32ecf01
removed dup. dll entry
brtnfld Oct 13, 2022
4bd2aae
Merge pull request #13 from HDFGroup/feature/multi_dataset
fortnern Oct 13, 2022
9f4a1e5
Address comments from code review.
fortnern Oct 13, 2022
5552fba
Merge pull request #2159 from fortnern/mds_merge
fortnern Oct 13, 2022
74e4441
Remove spurious changes in H5Fmpi.c
fortnern Oct 13, 2022
a45c77c
Merge pull request #2160 from fortnern/mds_merge
fortnern Oct 13, 2022
c7d33e6
Merge branch 'develop' into feature/multi_dataset
derobins Oct 14, 2022
7fcc27e
Fix issue with reading unallocated datasets in multi-dataset mode.
fortnern Oct 17, 2022
dbab411
Committing clang-format changes
github-actions[bot] Oct 17, 2022
2cec94a
Merge pull request #2168 from fortnern/mds_merge
fortnern Oct 17, 2022
37cdba4
Delay chunk index lookup from io_init to mdio_init so it doesn't add
fortnern Oct 18, 2022
a4b5cc0
Committing clang-format changes
github-actions[bot] Oct 18, 2022
eddff72
Merge pull request #2170 from fortnern/mds_merge
fortnern Oct 18, 2022
3181632
Merge pull request #14 from HDFGroup/feature/multi_dataset
fortnern Oct 18, 2022
76d6b3f
Merge branch 'develop' into mds_merge
fortnern Oct 18, 2022
c511fa5
Merge pull request #2172 from fortnern/mds_merge
fortnern Oct 18, 2022
17a41f1
Fix inappropriate use of piece_count
fortnern Oct 18, 2022
f0bc2c2
Merge pull request #2174 from fortnern/mds_merge
fortnern Oct 18, 2022
1566e48
updated copyright on new file, removed benchmark from testing dir.
brtnfld Oct 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 103 additions & 1 deletion fortran/src/H5Dff.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1096,7 +1096,7 @@ END SUBROUTINE H5Dvlen_reclaim_f
!>
!! \ingroup FH5D
!!
!! \brief Writes raw data from a dataset into a buffer.
!! \brief Writes raw data from a buffer to a dataset.
!!
!! \note \fortran_approved
!!
Expand Down Expand Up @@ -1708,6 +1708,108 @@ SUBROUTINE h5dfill_char(fill_value, space_id, buf, hdferr)
f_ptr_buf, mem_type_id)

END SUBROUTINE h5dfill_char
!>
!! \ingroup FH5D
!!
!! \brief Reads data from a file to memory buffers for multiple datasets.
!!
!! \param count Number of datasets to write to.
!! \param dset_id Identifier of the dataset to write to.
!! \param mem_type_id Identifier of the memory datatype.
!! \param mem_space_id Identifier of the memory dataspace.
!! \param file_space_id Identifier of the dataset's dataspace in the file.
!! \param buf Buffer with data to be written to the file.
!! \param hdferr \fortran_error
!! \param xfer_prp Identifier of a transfer property list for this I/O operation.
!!
SUBROUTINE H5Dread_multi_f(count, dset_id, mem_type_id, mem_space_id, file_space_id, buf, hdferr, xfer_prp)
IMPLICIT NONE

INTEGER(SIZE_T), INTENT(IN) :: count
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: dset_id
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: mem_type_id
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: mem_space_id
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: file_space_id
TYPE(C_PTR), DIMENSION(*) :: buf
INTEGER, INTENT(OUT) :: hdferr
INTEGER(HID_T), INTENT(IN), OPTIONAL :: xfer_prp

INTEGER(HID_T) :: xfer_prp_default

INTERFACE
INTEGER FUNCTION H5Dread_multi(count, dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp, buf) &
BIND(C, NAME='H5Dread_multi')
IMPORT :: SIZE_T
IMPORT :: HID_T
IMPORT :: C_PTR
IMPLICIT NONE
INTEGER(SIZE_T), VALUE :: count
INTEGER(HID_T), DIMENSION(*) :: dset_id
INTEGER(HID_T), DIMENSION(*) :: mem_type_id
INTEGER(HID_T), DIMENSION(*) :: mem_space_id
INTEGER(HID_T), DIMENSION(*) :: file_space_id
INTEGER(HID_T), VALUE :: xfer_prp
TYPE(C_PTR), DIMENSION(*) :: buf
END FUNCTION H5Dread_multi
END INTERFACE

xfer_prp_default = H5P_DEFAULT_F
IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp

hdferr = H5Dread_multi(count, dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp_default, buf)

END SUBROUTINE H5Dread_multi_f
!>
!! \ingroup FH5D
!!
!! \brief Writes data in memory to a file for multiple datasets.
!!
!! \param count Number of datasets to write to.
!! \param dset_id Identifier of the dataset to write to.
!! \param mem_type_id Identifier of the memory datatype.
!! \param mem_space_id Identifier of the memory dataspace.
!! \param file_space_id Identifier of the dataset's dataspace in the file.
!! \param buf Buffer with data to be written to the file.
!! \param hdferr \fortran_error
!! \param xfer_prp Identifier of a transfer property list for this I/O operation.
!!
SUBROUTINE H5Dwrite_multi_f(count, dset_id, mem_type_id, mem_space_id, file_space_id, buf, hdferr, xfer_prp)
IMPLICIT NONE

INTEGER(SIZE_T), INTENT(IN) :: count
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: dset_id
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: mem_type_id
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: mem_space_id
INTEGER(HID_T), INTENT(IN), DIMENSION(*) :: file_space_id
TYPE(C_PTR), DIMENSION(*) :: buf
INTEGER, INTENT(OUT) :: hdferr
INTEGER(HID_T), INTENT(IN), OPTIONAL :: xfer_prp

INTEGER(HID_T) :: xfer_prp_default

INTERFACE
INTEGER FUNCTION H5Dwrite_multi(count, dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp, buf) &
BIND(C, NAME='H5Dwrite_multi')
IMPORT :: SIZE_T
IMPORT :: HID_T
IMPORT :: C_PTR
IMPLICIT NONE
INTEGER(SIZE_T), VALUE :: count
INTEGER(HID_T), DIMENSION(*) :: dset_id
INTEGER(HID_T), DIMENSION(*) :: mem_type_id
INTEGER(HID_T), DIMENSION(*) :: mem_space_id
INTEGER(HID_T), DIMENSION(*) :: file_space_id
INTEGER(HID_T), VALUE :: xfer_prp
TYPE(C_PTR), DIMENSION(*) :: buf
END FUNCTION H5Dwrite_multi
END INTERFACE

xfer_prp_default = H5P_DEFAULT_F
IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp

hdferr = H5Dwrite_multi(count, dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp_default, buf)

END SUBROUTINE H5Dwrite_multi_f

#endif

Expand Down
2 changes: 2 additions & 0 deletions fortran/src/hdf5_fortrandll.def.in
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ H5D_mp_H5DGET_ACCESS_PLIST_F
H5D_mp_H5DWRITE_PTR
H5D_mp_H5DREAD_PTR
H5D_mp_H5DVLEN_RECLAIM_F
H5D_mp_H5DREAD_MULTI_F
H5D_mp_H5DWRITE_MULTI_F
; H5E
H5E_mp_H5ECLEAR_F
H5E_mp_H5EPRINT_F
Expand Down
4 changes: 4 additions & 0 deletions fortran/test/fortranlib_test_F03.F90
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,10 @@ PROGRAM fortranlibtest_F03
CALL test_h5p_file_image(ret_total_error)
CALL write_test_status(ret_total_error, ' Testing h5pset/get file image', total_error)

ret_total_error = 0
CALL multiple_dset_rw(ret_total_error)
CALL write_test_status(ret_total_error, ' Testing multi-dataset reads and writes', total_error)

! write(*,*)
! write(*,*) '========================================='
! write(*,*) 'Testing OBJECT interface '
Expand Down
254 changes: 254 additions & 0 deletions fortran/test/tH5T_F03.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3407,4 +3407,258 @@ SUBROUTINE t_enum_conv(total_error)

END SUBROUTINE t_enum_conv

! Tests the reading and writing of multiple datasets using H5Dread_multi and
! H5Dwrite_multi

SUBROUTINE multiple_dset_rw(total_error)

!-------------------------------------------------------------------------
! Subroutine: multiple_dset_rw
!
! Purpose: Tests the reading and writing of multiple datasets
! using H5Dread_multi and H5Dwrite_multi
!
! Return: Success: 0
! Failure: number of errors
!
! Programmer: M. Scot Breitenfeld
! April 2, 2014
!
!-------------------------------------------------------------------------
!
USE iso_c_binding
USE hdf5
IMPLICIT NONE

INTEGER, INTENT(INOUT) :: total_error ! number of errors
INTEGER :: error ! HDF hdferror flag

INTEGER(SIZE_T), PARAMETER :: ndset = 5 ! Number of data sets
INTEGER(HID_T), DIMENSION(:), ALLOCATABLE :: dset_id
INTEGER(HID_T), DIMENSION(:), ALLOCATABLE :: mem_type_id
INTEGER(HID_T), DIMENSION(:), ALLOCATABLE :: mem_space_id
INTEGER(HID_T), DIMENSION(:), ALLOCATABLE :: file_space_id

INTEGER, PARAMETER :: idim=10, idim2=5, idim3=3 ! size of integer array
INTEGER, PARAMETER :: rdim=5 ! size of real array
INTEGER, PARAMETER :: cdim=3 ! size of character array
INTEGER, PARAMETER :: sdim=2 ! length of character string
INTEGER, PARAMETER :: ddim=2 ! size of derived type array
INTEGER :: i,j,k

TYPE(C_PTR), ALLOCATABLE, DIMENSION(:) :: buf_md ! array to hold the multi-datasets

INTEGER, DIMENSION(1:idim), TARGET :: wbuf_int ! integer write buffer
INTEGER, DIMENSION(1:idim,idim2,idim3), TARGET :: wbuf_intmd
REAL, DIMENSION(1:rdim), TARGET :: wbuf_real ! real write buffer
CHARACTER(LEN=sdim), DIMENSION(1:cdim), TARGET :: wbuf_chr ! character write buffer
INTEGER, DIMENSION(1:idim), TARGET :: rbuf_int ! integer read buffer
INTEGER, DIMENSION(1:idim,idim2,idim3), TARGET :: rbuf_intmd ! integer read buffer
REAL, DIMENSION(1:rdim), TARGET :: rbuf_real ! real read buffer
CHARACTER(LEN=sdim), DIMENSION(1:cdim), TARGET :: rbuf_chr ! character read buffer

TYPE derived
REAL :: r
INTEGER :: i
CHARACTER(LEN=sdim) :: c
END TYPE derived

TYPE(derived), DIMENSION(1:ddim), TARGET :: wbuf_derived ! derived type write buffer
TYPE(derived), DIMENSION(1:ddim), TARGET :: rbuf_derived ! derived type read buffer
INTEGER(HSIZE_T), DIMENSION(1:1) :: dims ! dimension of the spaces
INTEGER(HSIZE_T), DIMENSION(1:3) :: dimsmd ! dimension of the spaces
INTEGER(HID_T) :: file_id, strtype ! handles
INTEGER(SIZE_T) :: obj_count

ALLOCATE(buf_md(1:ndset),stat=error)
IF (error .NE. 0) THEN
WRITE(*,*) 'allocate error'
total_error = total_error + 1
RETURN
ENDIF
ALLOCATE(dset_id(1:ndset),stat=error)
IF (error .NE. 0) THEN
WRITE(*,*) 'allocate error'
total_error = total_error + 1
RETURN
ENDIF
ALLOCATE(mem_type_id(1:ndset),stat=error)
IF (error .NE. 0) THEN
WRITE(*,*) 'allocate error'
total_error = total_error + 1
RETURN
ENDIF
ALLOCATE(mem_space_id(1:ndset),stat=error)
IF (error .NE. 0) THEN
WRITE(*,*) 'allocate error'
total_error = total_error + 1
RETURN
ENDIF
ALLOCATE(file_space_id(1:ndset),stat=error)
IF (error .NE. 0) THEN
WRITE(*,*) 'allocate error'
total_error = total_error + 1
RETURN
ENDIF

CALL h5fcreate_f("multidset_rw.h5", H5F_ACC_TRUNC_F, file_id, error)
CALL check("h5fcreate_f", error, total_error)
!
! Create real dataset
!
wbuf_real(1:rdim) = (/(i,i=1,rdim)/)
dims(1) = rdim
buf_md(1) = C_LOC(wbuf_real(1))
mem_type_id(1) = H5T_NATIVE_REAL
CALL h5screate_simple_f(1, dims, file_space_id(1), error)
CALL check("h5screate_simple_f", error, total_error)
CALL h5dcreate_f(file_id, "ds real", mem_type_id(1), file_space_id(1), dset_id(1), error)
CALL check("h5dcreate_f", error, total_error)
mem_space_id(1) = file_space_id(1)

! Create integer dataset (1D)
wbuf_int(1:idim) = (/(i,i=1,idim)/)
dims(1) = idim
buf_md(2) = C_LOC(wbuf_int(1))
mem_type_id(2) = H5T_NATIVE_INTEGER
CALL h5screate_simple_f(1, dims, file_space_id(2), error)
CALL check("h5screate_simple_f", error, total_error)
CALL h5dcreate_f(file_id, "ds int", mem_type_id(2), file_space_id(2), dset_id(2), error)
CALL check("h5dcreate_f", error, total_error)
mem_space_id(2) = file_space_id(2)

! Create character dataset
wbuf_chr(1:cdim) = (/'ab','cd','ef'/)
dims(1) = cdim
buf_md(3) = C_LOC(wbuf_chr(1)(1:1))
CALL H5Tcopy_f(H5T_FORTRAN_S1, mem_type_id(3), error)
CALL check("H5Tcopy_f", error, total_error)
CALL H5Tset_size_f(mem_type_id(3), INT(sdim,SIZE_T), error)
CALL check("H5Tset_size_f", error, total_error)
CALL h5screate_simple_f(1, dims, file_space_id(3), error)
CALL check("h5screate_simple_f", error, total_error)
CALL h5dcreate_f(file_id, "ds chr", mem_type_id(3), file_space_id(3), dset_id(3), error)
CALL check("h5dcreate_f", error, total_error)
mem_space_id(3) = file_space_id(3)

! Create derived type dataset
wbuf_derived(1:ddim)%r = (/10.,20./)
wbuf_derived(1:ddim)%i = (/30,40/)
wbuf_derived(1:ddim)%c = (/'wx','yz'/)
buf_md(4) = C_LOC(wbuf_derived(1)%r)
CALL h5tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(wbuf_derived(1)), C_LOC(wbuf_derived(2))), mem_type_id(4), error)
CALL check("h5tcreate_f", error, total_error)
CALL h5tinsert_f(mem_type_id(4), "real", &
H5OFFSETOF(C_LOC(wbuf_derived(1)),C_LOC(wbuf_derived(1)%r)), H5T_NATIVE_REAL, error)
CALL check("h5tinsert_f", error, total_error)
CALL h5tinsert_f(mem_type_id(4), "int", &
H5OFFSETOF(C_LOC(wbuf_derived(1)),C_LOC(wbuf_derived(1)%i)), H5T_NATIVE_INTEGER, error)
CALL check("h5tinsert_f", error, total_error)
CALL h5tcopy_f(H5T_NATIVE_CHARACTER, strtype, error)
CALL check("h5tcopy_f", error, total_error)
CALL h5tset_size_f(strtype, INT(sdim,size_t), error)
CALL check("h5tset_size_f", error, total_error)
CALL h5tinsert_f(mem_type_id(4), "chr", &
H5OFFSETOF(C_LOC(wbuf_derived(1)),C_LOC(wbuf_derived(1)%c(1:1))), strtype, error)
CALL check("h5tinsert_f", error, total_error)

dims(1) = ddim
CALL h5screate_simple_f(1, dims, file_space_id(4), error)
CALL check("h5screate_simple_f", error, total_error)
CALL h5dcreate_f(file_id, "ds derived", mem_type_id(4), file_space_id(4), dset_id(4), error)
CALL check("h5dcreate_f", error, total_error)
mem_space_id(4) = file_space_id(4)


! Create integer dataset (3D)

DO i = 1, idim
DO j = 1, idim2
DO k = 1, idim3
wbuf_intmd(i,j,k) = i*j
ENDDO
ENDDO
ENDDO

dimsmd(1:3) = (/idim,idim2,idim3/)
buf_md(5) = C_LOC(wbuf_intmd(1,1,1))
mem_type_id(5) = H5T_NATIVE_INTEGER
CALL h5screate_simple_f(3, dimsmd, file_space_id(5), error)
CALL check("h5screate_simple_f", error, total_error)
CALL h5dcreate_f(file_id, "ds int 3d", mem_type_id(5), file_space_id(5), dset_id(5), error)
CALL check("h5dcreate_f", error, total_error)
mem_space_id(5) = file_space_id(5)

! write all the datasets
CALL h5dwrite_multi_f(ndset, dset_id, mem_type_id, mem_space_id, file_space_id, buf_md, error)
CALL check("h5dwrite_multi_f", error, total_error)

! point to read buffers

buf_md(1) = C_LOC(rbuf_real(1))
buf_md(2) = C_LOC(rbuf_int(1))
buf_md(3) = C_LOC(rbuf_chr(1)(1:1))
buf_md(4) = C_LOC(rbuf_derived(1)%r)
buf_md(5) = C_LOC(rbuf_intmd(1,1,1))

! read all the datasets
CALL h5dread_multi_f(ndset, dset_id, mem_type_id, mem_space_id, file_space_id, buf_md, error)
CALL check("h5dread_multi_f", error, total_error)

! check the written and read in values
DO i = 1, rdim
IF(rbuf_real(i).NE.wbuf_real(i))THEN
total_error = total_error + 1
END IF
END DO
DO i = 1, idim
IF(rbuf_int(i).NE.wbuf_int(i))THEN
total_error = total_error + 1
END IF
END DO
DO i = 1, cdim
IF(rbuf_chr(i).NE.wbuf_chr(i))THEN
total_error = total_error + 1
END IF
END DO
DO i = 1, ddim
IF(rbuf_derived(i)%r.NE.wbuf_derived(i)%r)THEN
total_error = total_error + 1
END IF
IF(rbuf_derived(i)%i.NE.wbuf_derived(i)%i)THEN
total_error = total_error + 1
END IF
IF(rbuf_derived(i)%c.NE.wbuf_derived(i)%c)THEN
total_error = total_error + 1
END IF
END DO
DO i = 1, idim
DO j = 1, idim2
DO k = 1, idim3
IF(rbuf_intmd(i,j,k).NE.wbuf_intmd(i,j,k))THEN
total_error = total_error + 1
END IF
END DO
ENDDO
ENDDO

DO i = 1, ndset
CALL H5Dclose_f(dset_id(i), error)
CALL check("H5Dclose_f", error, total_error)
CALL H5Sclose_f(file_space_id(i), error)
CALL check("H5Sclose_f", error, total_error)
ENDDO
CALL H5Tclose_f(mem_type_id(4), error)
CALL check("H5Tclose_f", error, total_error)

CALL h5fget_obj_count_f(file_id, H5F_OBJ_ALL_F, obj_count, error)
IF(obj_count.NE.1)THEN
total_error = total_error + 1
END IF

CALL H5Fclose_f(file_id, error)

END SUBROUTINE multiple_dset_rw


END MODULE TH5T_F03
Loading