summaryrefslogtreecommitdiffstats
path: root/fortran/src
diff options
context:
space:
mode:
authorjhendersonHDF <jhenderson@hdfgroup.org>2023-12-07 18:13:21 (GMT)
committerGitHub <noreply@github.com>2023-12-07 18:13:21 (GMT)
commitfb84c696a476c39db2c35e7d86b818138e089358 (patch)
tree56c0fec578e2e0d2eaee455cf3ae133dca541989 /fortran/src
parentdc8b455ac00e899b53127de0d270230f4d4e40a1 (diff)
downloadhdf5-fb84c696a476c39db2c35e7d86b818138e089358.zip
hdf5-fb84c696a476c39db2c35e7d86b818138e089358.tar.gz
hdf5-fb84c696a476c39db2c35e7d86b818138e089358.tar.bz2
Sync 1.14 branch with develop (#3887)
* Preserve MPI-I/O file hints when fapl is closed (#3755) * Fix for issue #3025: Save the MPI info in the file struct so H5Fget_access_plist() can retrieve it from there. * Add compression tests for subfiling (#3769) * Fix typo in comment (#3775) * Fixed a file handle leak in the core VFD (#3779) When opening a file with the core VFD and a file image, if the file already exists, the file check would leak the POSIX file handle. Fixes GitHub issue #635 * Fix a format string warning in the C++ examples (#3776) * Cancel running GitHub workflows on push to same PR (#3772) * Cancel running GitHub workflows on push to same PR * Remove github.sha from workflow concurrency groups * Print some messages in parallel tests on MPI rank 0 only (#3785) Avoids overly verbose output from all processes emitting progress, etc. info. * Avoid attempted use of NULL pointer in parallel compression code (#3786) The parallel compression test code tests for the case where all MPI ranks have no selection in a dataset when writing to it. Add an early exit to the code to avoid attempting to use a NULL pointer due to there being no work to do. * Don't install h5tools_test_utils test program on system (#3793) * Add Doxygen to H5FDsplitter.h (#3794) * H5FD_CURR_SPLITTER_VFD_CONFIG_VERSION * H5FD_SPLITTER_PATH_MAX * H5FD_SPLITTER_MAGIC * H5FD_splitter_vfd_config_t * H5Pset_fapl_splitter() * H5Pget_fapl_splitter() * Update Doxygen initializers & identifiers in VFDs (#3795) * Add Doxygen for all H5FD_<VFD> initializers * Add Doxygen for all H5FD_<VFD>_VALUE values * Mark H5FD_<vfd>_init() calls private in Doxygen * Fix memory corruption in 'MPI I/O FAPL preserve' test (#3806) * Fix usage of h5_clean_files in t_pflush2.c (#3807) * Fix parallel driver check in h5_fixname_real (#3808) * Fix a couple usages of MPI_Info_get (#3809) * Remove H5system.c warning on Windows oneAPI. (#3812) * Add processing of NVHPC flags in linux-gnulibc1 file (#3804) * Disable testing as tests are failing the same as in CMake * Use the current toolchain for examples as default (#3810) * Fix misc. warnings from GCC when compiling with -fsanitize=undefined (#3787) * Set NVHPC maximum optimization level to -O1 for now (#3800) * Set NVHPC maximum optimization level to -O1 for now Compiling HDF5 with NVHPC 23.5 - 23.9 results in test failures in 4 different test files that need to be resolved. Since those tests pass with an optimization level of -O1 (and -O0) and it is currently unclear whether the test failures are due to issues in HDF5 or issues in the 'nvc' compiler, set the maximum optimization level for NVHPC to -O1 until the test failures are resolved. * Disable nvhpc Java testing in CMake and amend known issues * Re-enable testing of Autotools nvhpc * Update some doxygen links to local refs (#3814) * Rework MPI Info FAPL preserve PR to use VFD 'ctl' operations (#3782) * Removed the use of C wrappers from H5P APIs. (#3824) * fix seg fault on frontier/cray * fix seg fault on frontier/cray * fix seg fault on frontier/cray * removed the use of h5pclose_c * removed the use of h5pclose_c * Fortran Wrappers H5VLnative_addr_to_token_f and H5VLnative_token_to_address_f (#3801) * Added H5VLnative_addr_to_token_f and H5VLnative_token_to_address_f * Added H5VLnative_addr_to_token_f and H5VLnative_token_to_address_f tests * Create test for H5Pget_dxpl_mpio (#3825) * Create test and add to testphdf5 * Renamed h5fuse.sh to h5fuse (#3834) * provide an alternative to mapfile for older bash * Disable FP exceptions in H5T init code (#3837) The H5T floating-point datatype initialization code can raise exceptions when handling signaling NaNs. This change disables FE_INVALID exceptions during initialization. Also removes the -ieee=full change for NAG Fortran as that shouldn't be necessary anymore. Fixes #3831 * Add intel oneapi windows build to CI CMake (#3836) * Remove printf format warning on Windows oneAPI. (#3838) * Correct ENV variables (#3841) * Remove Autotools sed hack (#3848) configure.ac contains a sed line that cleans up incorrect library flags which was added to paper over some bugs in earlier versions of the Autotools. These issues are not a problem with the current versions of the Autootols. The sed line causes problems on MacOS, so it has been removed. Fixes #3843 * Make filter unregister callbacks safe for VOL connectors (#3629) * Make filter callbacks use top-level API functions When using VOL connectors, H5I_iterate may not provide valid object pointers to its callback. This change keeps existing functionality in H5Zunregister() without using potentially unsafe pointers. * Filter callbacks use internal API * Skip MPI work on non-native VOL * Add extra space in comments for consistency (#3852) * Add extra space in comments for consistency * uncomment tfloatsattrs test * Update Actions badges to link to relevant workflow (#3850) * Add CMake long double cross-compile defaults (#3683) HDF5 performs a couple of checks at build time to see if long double values can be converted correctly (IBM's Power architecture uses a special format for long doubles). These checks were performed using TRY_RUN, which is a problem when cross-compiling. These checks now use default values appropriate for most non-Power systems when cross-compiling. The cache values can be pre-set if necessary, which will preempt both the TRY_RUN and the default. Affected values: H5_LDOUBLE_TO_LONG_SPECIAL (default no) H5_LONG_TO_LDOUBLE_SPECIAL (default no) H5_LDOUBLE_TO_LLONG_ACCURATE (default yes) H5_LLONG_TO_LDOUBLE_CORRECT (default yes) H5_DISABLE_SOME_LDOUBLE_CONV (default no) Fixes GitHub #3585 * Updates for building and testing VOL connectors * Fix issue with HDF5_VOL_ALLOW_EXTERNAL CMake variable * Initialize parallel testing with MPI_THREAD_MULTIPLE when testing API * Add CMake variable to allow specifying a VOL connector's package name * Remove call to MPI_Init in serial API tests While previously necessary, it now interferes with VOL connectors that may need to be initialized with MPI_THREAD_MULTIPLE * Fixes for CI and presets (#3853) * Change dest for doxygen (#3856) * Implement selection vector I/O with collective chunk filling (#3826) * Changes for ECP-344: Implement selection vector I/O with collective chunk filling. Also fix a bug in H5FD__mpio_write_vector() to account for fixed size optimization when computing max address. * Fixes based on PR review comments: For H5Dchunk.c: fix H5MM_xfree() For H5FDmpio.c: 1) Revert the fix to H5FD__mpio_write_vector() 2) Apply the patch from Neil on the proper length of s_sizes reported by H5FD__mpio_vector_build_types() * Put back the logic of dividing up the work among all the mpi ranks similar to the original H5D__chunk_collective_fill() routine. * Add a test to verify the fix for the illegal reference problem in H5FD__mpio_write_vector(). * Do not publish compression headers or docs (#3865) * Fix typo: look -> loop (#3866) * Moved the README to markdown and expanded its overview of the files, file generation, and other Fortran wrapper development practices as mentioned in the HDF5 architectural document. I added a new figure and included the SVG file and the original xfig file it was generated from. (#3862) * Add HDF5_DISABLE_TESTS_REGEX option to skip tests (#3859) * Fix typo in error message for `MPI_Type_dup`. (#3867) * Complete the `if command line option` sentence. (#3868) * Fix h5dump segmentation fault when --vfd-value option is used (#3873) * Updated URL in funding.yml (#3882) Using new shortened URL, might look better. * Remove unused variable from unmerged changes * Update src/H5Tinit_float.c
Diffstat (limited to 'fortran/src')
-rw-r--r--fortran/src/FortBuildFlow.fig78
-rw-r--r--fortran/src/FortBuildFlow.svg169
-rw-r--r--fortran/src/H5Off.F902
-rw-r--r--fortran/src/H5Pf.c70
-rw-r--r--fortran/src/H5Pff.F9057
-rw-r--r--fortran/src/H5VLff.F9064
-rw-r--r--fortran/src/H5f90proto.h4
-rw-r--r--fortran/src/README133
-rw-r--r--fortran/src/README.md159
-rw-r--r--fortran/src/hdf5_fortrandll.def.in6
10 files changed, 506 insertions, 236 deletions
diff --git a/fortran/src/FortBuildFlow.fig b/fortran/src/FortBuildFlow.fig
new file mode 100644
index 0000000..fd2dee7
--- /dev/null
+++ b/fortran/src/FortBuildFlow.fig
@@ -0,0 +1,78 @@
+#FIG 3.2 Produced by xfig version 3.2.9
+#encoding: UTF-8
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+6 4650 3675 7725 4350
+2 4 0 1 0 7 52 -1 18 0.000 0 0 7 0 0 5
+ 7725 4350 4650 4350 4650 3735 7725 3735 7725 4350
+4 0 0 37 -1 2 16 0.0000 4 240 2528 4800 4125 H5fort_type_defines.h\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 4125 675 4650 675
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 4125 2775 4575 2775
+2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8175 525 9525 525
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 10800 3375 8325 3375 8325 2760 10800 2760 10800 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 10760 1200 11400 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 10820 2100 11460 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 10790 3075 11430 3075
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 4125 3375 1500 3375 1500 60 4125 60 4125 3375
+2 1 0 4 0 7 48 -1 -1 0.000 0 0 -1 0 0 2
+ 1500 1800 4050 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 5775 960 5775 1410
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 5670 3255 5670 3705
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 14220 1500 11460 1500 11460 870 14220 870 14220 1500
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 14250 2430 11445 2430 11445 1800 14250 1800 14250 2430
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 6975 960 4725 960 4725 360 6975 360 6975 960
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 6960 2025 4710 2025 4710 1425 6960 1425 6960 2025
+2 4 0 1 0 7 52 -1 19 0.000 0 0 7 0 0 5
+ 16875 5250 8100 5250 8100 45 16875 45 16875 5250
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 7725 3225 4650 3225 4650 2610 7725 2610 7725 3225
+2 4 0 1 0 7 63 -1 19 0.000 0 0 7 0 0 5
+ 8025 5250 1425 5250 1425 45 8025 45 8025 5250
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 10800 2400 8310 2400 8310 840 10800 840 10800 2400
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 14265 3375 11475 3375 11475 2775 14265 2775 14265 3375
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 16725 4125 11475 4125 11475 3525 16725 3525 16725 4125
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 16725 4950 11475 4950 11475 4275 16725 4275 16725 4950
+4 0 0 50 -1 2 24 0.0000 4 284 1249 8250 450 BUILD\001
+4 0 0 50 -1 2 24 0.0000 4 284 2421 1575 1725 CONFIGURE\001
+4 0 0 50 -1 2 16 0.0000 4 221 2083 8550 3150 H5_buildiface.F90\001
+4 0 0 50 -1 2 16 0.0000 4 235 1952 8640 1680 H5match_types.c\001
+4 0 0 50 -1 2 16 0.0000 4 239 2379 11550 2175 H5fortran_types.F90\001
+4 0 0 50 -1 2 16 0.0000 4 240 1507 11550 1275 H5f90i_gen.h\001
+4 0 0 50 -1 2 16 0.0000 4 238 1358 11550 3150 H5_gen.F90\001
+4 0 0 50 -1 2 16 0.0000 4 233 5100 11550 3900 H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]ff.F90\001
+4 0 0 50 -1 2 16 0.0000 4 233 4702 11550 4725 H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]f.c\001
+4 0 0 50 -1 2 16 0.0000 4 240 1944 4815 750 H5config_f.inc.in\001
+4 0 0 50 -1 2 16 0.0000 4 240 1656 4815 1815 H5config_f.inc\001
+4 0 0 50 -1 2 16 0.0000 4 240 2817 4740 3000 H5fort_type_defines.h.in\001
diff --git a/fortran/src/FortBuildFlow.svg b/fortran/src/FortBuildFlow.svg
new file mode 100644
index 0000000..b7ebc47
--- /dev/null
+++ b/fortran/src/FortBuildFlow.svg
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2.9 -->
+<!-- CreationDate: 2023-11-17 17:06:33 -->
+<!-- Magnification: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="929pt" height="314pt"
+ viewBox="1413 33 15474 5229">
+<g fill="none">
+<!-- Line -->
+<rect x="1425" y="45" width="6600" height="5205" rx="105" fill="#f2f2f2"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="8100" y="45" width="8775" height="5205" rx="105" fill="#f2f2f2"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4650" y="3735" width="3075" height="615" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<polyline points=" 8175,525 9525,525"
+ stroke="#000000" stroke-width="45px"/>
+<!-- Line -->
+<rect x="8325" y="2760" width="2475" height="615" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp0">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 11230,1170 11260,1200 11230,1230 11407,1207 11407,1193z"/>
+</clipPath>
+</defs>
+<polyline points=" 10760,1200 11400,1200" clip-path="url(#cp0)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 11400,1200 -->
+<polygon points=" 11230,1230 11380,1200 11230,1170 11260,1200 11230,1230"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp1">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 11290,2070 11320,2100 11290,2130 11467,2107 11467,2093z"/>
+</clipPath>
+</defs>
+<polyline points=" 10820,2100 11460,2100" clip-path="url(#cp1)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 11460,2100 -->
+<polygon points=" 11290,2130 11440,2100 11290,2070 11320,2100 11290,2130"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp2">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 11260,3045 11290,3075 11260,3105 11437,3082 11437,3068z"/>
+</clipPath>
+</defs>
+<polyline points=" 10790,3075 11430,3075" clip-path="url(#cp2)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 11430,3075 -->
+<polygon points=" 11260,3105 11410,3075 11260,3045 11290,3075 11260,3105"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<rect x="1500" y="60" width="2625" height="3315" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp3">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 5805,1240 5775,1270 5745,1240 5768,1417 5782,1417z"/>
+</clipPath>
+</defs>
+<polyline points=" 5775,960 5775,1410" clip-path="url(#cp3)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 5775,1410 -->
+<polygon points=" 5745,1240 5775,1390 5805,1240 5775,1270 5745,1240"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp4">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 5700,3535 5670,3565 5640,3535 5663,3712 5677,3712z"/>
+</clipPath>
+</defs>
+<polyline points=" 5670,3255 5670,3705" clip-path="url(#cp4)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 5670,3705 -->
+<polygon points=" 5640,3535 5670,3685 5700,3535 5670,3565 5640,3535"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<rect x="11460" y="870" width="2760" height="630" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11445" y="1800" width="2805" height="630" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4725" y="360" width="2250" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4710" y="1425" width="2250" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4650" y="2610" width="3075" height="615" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Text -->
+<text xml:space="preserve" x="4740" y="3000" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5fort_type_defines.h.in</text>
+<!-- Line -->
+<defs>
+<clipPath id="cp5">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 4480,645 4510,675 4480,705 4657,682 4657,668z"/>
+</clipPath>
+</defs>
+<polyline points=" 4125,675 4650,675" clip-path="url(#cp5)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 4650,675 -->
+<polygon points=" 4480,705 4630,675 4480,645 4510,675 4480,705"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp6">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 4405,2745 4435,2775 4405,2805 4582,2782 4582,2768z"/>
+</clipPath>
+</defs>
+<polyline points=" 4125,2775 4575,2775" clip-path="url(#cp6)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 4575,2775 -->
+<polygon points=" 4405,2805 4555,2775 4405,2745 4435,2775 4405,2805"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Text -->
+<text xml:space="preserve" x="4815" y="750" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5config_f.inc.in</text>
+<!-- Text -->
+<text xml:space="preserve" x="4815" y="1815" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5config_f.inc</text>
+<!-- Line -->
+<rect x="8310" y="840" width="2490" height="1560" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11475" y="2775" width="2790" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11475" y="3525" width="5250" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11475" y="4275" width="5250" height="675" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Text -->
+<text xml:space="preserve" x="8250" y="450" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="288" text-anchor="start">BUILD</text>
+<!-- Text -->
+<text xml:space="preserve" x="1575" y="1725" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="288" text-anchor="start">CONFIGURE</text>
+<!-- Text -->
+<text xml:space="preserve" x="8550" y="3150" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5_buildiface.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="8640" y="1680" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5match_types.c</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="2175" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5fortran_types.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="1275" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5f90i_gen.h</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="3150" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5_gen.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="3900" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]ff.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="4725" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]f.c</text>
+<!-- Line -->
+<polyline points=" 1500,1800 4050,1800"
+ stroke="#000000" stroke-width="45px"/>
+<!-- Text -->
+<text xml:space="preserve" x="4800" y="4125" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5fort_type_defines.h</text>
+</g>
+</svg>
diff --git a/fortran/src/H5Off.F90 b/fortran/src/H5Off.F90
index b705ba3..9c8b091 100644
--- a/fortran/src/H5Off.F90
+++ b/fortran/src/H5Off.F90
@@ -1263,7 +1263,7 @@ CONTAINS
INTERFACE
INTEGER FUNCTION h5oget_info_by_idx_c(loc_id, group_name, namelen, &
index_field, order, n, lapl_id_default, object_info, fields) BIND(C, NAME='h5oget_info_by_idx_c')
- IMPORT :: c_char, c_ptr, c_funptr
+ IMPORT :: c_char, c_ptr
IMPORT :: HID_T, SIZE_T, HSIZE_T
INTEGER(HID_T) , INTENT(IN) :: loc_id
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: group_name
diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c
index 3a97d7e..87e6bfb 100644
--- a/fortran/src/H5Pf.c
+++ b/fortran/src/H5Pf.c
@@ -69,30 +69,6 @@ done:
return ret_value;
}
-/****if* H5Pf/h5pclose_c
- * NAME
- * h5pclose_c
- * PURPOSE
- * Call H5Pclose to close property lis
- * INPUTS
- * prp_id - identifier of the property list to be closed
- * RETURNS
- * 0 on success, -1 on failure
- * SOURCE
- */
-
-int_f
-h5pclose_c(hid_t_f *prp_id)
-/******/
-{
- int_f ret_value = 0;
-
- if (H5Pclose((hid_t)*prp_id) < 0)
- ret_value = -1;
-
- return ret_value;
-}
-
/****if* H5Pf/h5pcopy_c
* NAME
* h5pcopy_c
@@ -2252,52 +2228,6 @@ h5pget_hyper_vector_size_c(hid_t_f *prp_id, size_t_f *size)
return ret_value;
}
-/****if* H5Pf/h5pcreate_class_c
- * NAME
- * h5pcreate_class_c
- * PURPOSE
- * Call H5Pcreate_class ito create a new property class
- * INPUTS
- * parent - property list class identifier
- * name - name of the new class
- * name_len - length of the "name" buffer
- * OUTPUTS
- * class - new class identifier
- * RETURNS
- * 0 on success, -1 on failure
- * SOURCE
- */
-int_f
-h5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls, H5P_cls_create_func_t create,
- void *create_data, H5P_cls_copy_func_t copy, void *copy_data, H5P_cls_close_func_t close,
- void *close_data)
-/******/
-{
- int ret_value = -1;
- hid_t c_class;
- char *c_name;
-
- c_name = (char *)HD5f2cstring(name, (size_t)*name_len);
- if (c_name == NULL)
- goto DONE;
-
- /*
- * Call H5Pcreate_class function.
- */
- c_class =
- H5Pcreate_class((hid_t)*parent, c_name, create, create_data, copy, copy_data, close, close_data);
-
- if (c_class < 0)
- goto DONE;
- *cls = (hid_t_f)c_class;
- ret_value = 0;
-
-DONE:
- if (c_name != NULL)
- free(c_name);
- return ret_value;
-}
-
/****if* H5Pf/h5pregister_c
* NAME
* h5pregister_c
diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90
index 5821889..afd17f3 100644
--- a/fortran/src/H5Pff.F90
+++ b/fortran/src/H5Pff.F90
@@ -400,15 +400,16 @@ CONTAINS
INTEGER(HID_T), INTENT(IN) :: prp_id
INTEGER, INTENT(OUT) :: hdferr
INTERFACE
- INTEGER FUNCTION h5pclose_c(prp_id) &
- BIND(C,NAME='h5pclose_c')
+ INTEGER(C_INT) FUNCTION H5Pclose(prp_id) &
+ BIND(C,NAME='H5Pclose')
+ IMPORT :: C_INT
IMPORT :: HID_T
IMPLICIT NONE
- INTEGER(HID_T), INTENT(IN) :: prp_id
- END FUNCTION h5pclose_c
+ INTEGER(HID_T), VALUE :: prp_id
+ END FUNCTION H5Pclose
END INTERFACE
- hdferr = h5pclose_c(prp_id)
+ hdferr = INT(H5Pclose(prp_id))
END SUBROUTINE h5pclose_f
!>
@@ -5005,31 +5006,32 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
INTEGER , INTENT(OUT) :: hdferr
TYPE(C_PTR) , OPTIONAL, INTENT(IN) :: create_data, copy_data, close_data
TYPE(C_FUNPTR) , OPTIONAL, INTENT(IN) :: create, copy, close
- INTEGER :: name_len
- TYPE(C_PTR) :: create_data_default, copy_data_default, close_data_default
+ TYPE(C_PTR) :: create_data_default, copy_data_default, close_data_default
TYPE(C_FUNPTR) :: create_default, copy_default, close_default
+
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+
INTERFACE
- INTEGER FUNCTION h5pcreate_class_c(parent, name, name_len, class, &
+ INTEGER(HID_T) FUNCTION H5Pcreate_class(parent, name, &
create, create_data, copy, copy_data, close, close_data) &
- BIND(C, NAME='h5pcreate_class_c')
- IMPORT :: c_char, c_ptr, c_funptr
+ BIND(C, NAME='H5Pcreate_class')
+ IMPORT :: C_CHAR, C_PTR, C_FUNPTR
IMPORT :: HID_T
- INTEGER(HID_T), INTENT(IN) :: parent
- CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
- INTEGER, INTENT(IN) :: name_len
- INTEGER(HID_T), INTENT(OUT) :: class
- TYPE(C_PTR), VALUE :: create_data, copy_data, close_data
- TYPE(C_FUNPTR), VALUE :: create, copy, close
- END FUNCTION h5pcreate_class_c
+ INTEGER(HID_T), VALUE :: parent
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ TYPE(C_PTR), VALUE :: create_data, copy_data, close_data
+ TYPE(C_FUNPTR), VALUE :: create, copy, close
+ END FUNCTION H5Pcreate_class
END INTERFACE
- name_len = LEN(name)
- create_default = c_null_funptr !fix:scot
- create_data_default = c_null_ptr
- copy_default = c_null_funptr !fix:scot
- copy_data_default = c_null_ptr
- close_default = c_null_funptr !fix:scot
- close_data_default = c_null_ptr
+ c_name = TRIM(name)//C_NULL_CHAR
+
+ create_default = C_NULL_FUNPTR
+ create_data_default = C_NULL_PTR
+ copy_default = C_NULL_FUNPTR
+ copy_data_default = C_NULL_PTR
+ close_default = C_NULL_FUNPTR
+ close_data_default = C_NULL_PTR
IF(PRESENT(create)) create_default = create
IF(PRESENT(create_data)) create_data_default = create_data
@@ -5038,11 +5040,14 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
IF(PRESENT(close)) close_default = close
IF(PRESENT(close_data)) close_data_default = close_data
- hdferr = h5pcreate_class_c(parent, name , name_len, class, &
+ class = H5Pcreate_class(parent, c_name, &
create_default, create_data_default, &
copy_default, copy_data_default, &
close_default, close_data_default)
+ hdferr = 0
+ IF(class.LT.0) hdferr = -1
+
END SUBROUTINE h5pcreate_class_f
!>
@@ -5337,7 +5342,7 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
!! \brief Retrieves local and global causes that broke collective I/O on the last parallel I/O call.
!!
!! \param plist_id Dataset transfer property list identifier
-!! \param local_no_collective_cause An enumerated set value indicating the causes that prevented collective I/O in the local process
+!! \param local_no_collective_cause An enumerated set value indicating the causes that prevented collective I/O in the local process
!! \param global_no_collective_cause An enumerated set value indicating the causes across all processes that prevented collective I/O
!! \param hdferr \fortran_error
!!
diff --git a/fortran/src/H5VLff.F90 b/fortran/src/H5VLff.F90
index 5a1fa9f..4467a59 100644
--- a/fortran/src/H5VLff.F90
+++ b/fortran/src/H5VLff.F90
@@ -401,4 +401,68 @@ CONTAINS
END SUBROUTINE H5VLunregister_connector_f
+!>
+!! \ingroup FH5VL
+!!
+!! \brief Retrieves the token representation from an address for a location identifier.
+!!
+!! \param loc_id Specifies a location identifier
+!! \param addr Address for object in the file
+!! \param token Token representing the object in the file
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref H5VLnative_addr_to_token()
+!!
+ SUBROUTINE h5vlnative_addr_to_token_f(loc_id, addr, token, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ INTEGER(HADDR_T) , INTENT(IN) :: addr
+ TYPE(H5O_TOKEN_T_F), INTENT(OUT) :: token
+ INTEGER , INTENT(OUT) :: hdferr
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5VLnative_addr_to_token(loc_id, addr, token) BIND(C, NAME='H5VLnative_addr_to_token')
+ IMPORT :: HID_T, C_INT, HADDR_T, H5O_TOKEN_T_F
+ INTEGER(HID_T) , VALUE :: loc_id
+ INTEGER(HADDR_T), VALUE :: addr
+ TYPE(H5O_TOKEN_T_F) :: token
+ END FUNCTION H5VLnative_addr_to_token
+ END INTERFACE
+
+ hdferr = INT(H5VLnative_addr_to_token(loc_id, addr, token))
+
+ END SUBROUTINE h5vlnative_addr_to_token_f
+
+!>
+!! \ingroup FH5VL
+!!
+!! \brief Retrieves the object address from a token representation for a location identifier.
+!!
+!! \param loc_id Specifies a location identifier
+!! \param token Token representing the object in the file
+!! \param addr Address for object in the file
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref H5VLnative_token_to_addr()
+!!
+ SUBROUTINE h5vlnative_token_to_addr_f(loc_id, token, addr, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ TYPE(H5O_TOKEN_T_F), INTENT(IN) :: token
+ INTEGER(HADDR_T) , INTENT(OUT) :: addr
+ INTEGER , INTENT(OUT) :: hdferr
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5VLnative_token_to_addr(loc_id, token, addr) BIND(C, NAME='H5VLnative_token_to_addr')
+ IMPORT :: HID_T, C_INT, HADDR_T, H5O_TOKEN_T_F
+ INTEGER(HID_T) , VALUE :: loc_id
+ TYPE(H5O_TOKEN_T_F), VALUE :: token
+ INTEGER(HADDR_T) :: addr
+ END FUNCTION H5VLnative_token_to_addr
+ END INTERFACE
+
+ hdferr = INT(H5VLnative_token_to_addr(loc_id, token, addr))
+
+ END SUBROUTINE h5vlnative_token_to_addr_f
+
END MODULE H5VL
diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h
index 28a4fa6..0fe1b20 100644
--- a/fortran/src/H5f90proto.h
+++ b/fortran/src/H5f90proto.h
@@ -368,7 +368,6 @@ H5_FCDLL int_f h5otoken_cmp_c(hid_t_f *loc_id, H5O_token_t *token1, H5O_token_t
* Functions from H5Pf.c
*/
H5_FCDLL int_f h5pcreate_c(hid_t_f *cls, hid_t_f *prp_id);
-H5_FCDLL int_f h5pclose_c(hid_t_f *prp_id);
H5_FCDLL int_f h5pcopy_c(hid_t_f *prp_id, hid_t_f *new_prp_id);
H5_FCDLL int_f h5pequal_c(hid_t_f *plist1_id, hid_t_f *plist2_id, int_f *c_flag);
H5_FCDLL int_f h5pget_class_c(hid_t_f *prp_id, hid_t_f *classtype);
@@ -451,9 +450,6 @@ H5_FCDLL int_f h5pset_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
H5_FCDLL int_f h5pget_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
H5_FCDLL int_f h5pset_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
H5_FCDLL int_f h5pget_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
-H5_FCDLL int_f h5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls,
- H5P_cls_create_func_t create, void *create_data, H5P_cls_copy_func_t copy,
- void *copy_data, H5P_cls_close_func_t close, void *close_data);
H5_FCDLL int_f h5pregister_c(hid_t_f *cls, _fcd name, int_f *name_len, size_t_f *size, void *value);
H5_FCDLL int_f h5pinsert_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
H5_FCDLL int_f h5pset_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
diff --git a/fortran/src/README b/fortran/src/README
deleted file mode 100644
index f73a59a..0000000
--- a/fortran/src/README
+++ /dev/null
@@ -1,133 +0,0 @@
-===================================
-README for the Fortran APIs to HDF5
-===================================
-
-This directory contains Fortran APIs for HDF5 Library functionality.
-A complete list of implemented Fortran subroutines can be found in the HDF5
-Reference Manual.
-
-About the source code organization
-==================================
-
-The Fortran APIs are organized in modules parallel to the HDF5 Interfaces.
-Each module is in a separate file with the name H5*ff.F90. Corresponding C
-stubs are in the H5*f.c files. For example, the Fortran File APIs are in
-the file H5Fff.F90 and the corresponding C stubs are in the file H5Ff.c.
-
-Each module contains Fortran definitions of the constants, interfaces to
-the subroutines if needed, and the subroutines themselves.
-
-Users must use constant names in their programs instead of the numerical
-values, as the numerical values are subject to change without notice.
-
-Quick overview of the Fortran APIs
-==============================================
-
-* An in-depth description of each Fortran API and its parameters can
- be found in the HDF5 Reference Manual.
-
-* The Fortran APIs come in the form of Fortran subroutines.
-
-* Each Fortran subroutine name is derived from the corresponding C function
- name by adding "_f" to the name. For example, the name of the C function
- to create an HDF5 file is H5Fcreate; the corresponding Fortran subroutine
- is h5fcreate_f.
-
-* The parameter list for each Fortran subroutine usually has two more parameters
- than the corresponding C function. These additional parameters typically hold
- the return value and an error code. The order of the Fortran subroutine
- parameters may differ from the order of the C function parameters.
-
- The Fortran subroutine parameters are usually listed in the following order:
- -- required input parameters,
- -- output parameters, including return value and error code, and
- optional input parameters.
-
- For example, the C function to create a dataset has the following
- prototype:
-
- hid_t H5Dcreate2(hid_it loc_id, char *name, hid_t type_id,
- hid_t space_id, hid_t link_creation_prp, hid_t dset_creation_prp,
- hid_t dset_access_prop);
-
- The corresponding Fortran subroutine has the following form:
-
- SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
- hdferr, dset_creation_prp, link_creation_prp, dset_access_prop)
-
- The first four parameters of the Fortran subroutine correspond to the
- C function parameters. The fifth parameter dset_id is an output
- parameter and contains a valid dataset identifier if the value of the
- sixth output parameter, hdferr, indicates successful completion.
- (Error code descriptions are provided with the subroutine descriptions
- in the Reference Manual.) The last three input parameters are optional
- and may be omitted, resulting in default values being used.
-
-* Parameters to the Fortran subroutines typically include
- predefined datatypes (see the build-time generated file
- H5fortran_types.F90 for a complete listing):
-
- INTEGER(HID_T) compares with hid_t type in HDF5 C APIs
- INTEGER(HSIZE_T) compares with hsize_t in HDF5 C APIs
- INTEGER(HSSIZE_T) compares with hssize_t in HDF5 C APIs
- INTEGER(SIZE_T) compares with the C size_t type
-
- These integer types usually correspond to 4 or 8 byte integers,
- depending on the Fortran compiler and corresponding HDF5
- C library definitions.
-
-* Each Fortran application must call the h5open_f subroutine to
- initialize the Fortran predefined datatypes before calling the HDF5 Fortran
- subroutines. The application should call the h5close_f subroutine
- after all calls to the HDF5 Fortran Library.
-
-* When a C application reads data stored from a Fortran program, the data
- will appear to be transposed due to the difference in the C - Fortran
- storage order. For example, if Fortran writes a 4x6 two-dimensional dataset
- to the file, a C program will read it as a 6x4 two-dimensional dataset into
- memory. The HDF5 C utilities h5dump and h5ls display transposed data, if
- data is written from a Fortran program.
-
-* Fortran indices are 1 based.
-
-============================
-FOR DEVELOPERS
-============================
-
-Procedure to add a new function
-----------------------------------
-
-(1) Edit the fortran/src/H5*ff.F90 file
-(2) Edit the fortran/src/H5*f.c file
-(3) Edit the fortran/src/H5f90proto.h file
-(4) Add the new function to fortran/src/hdf5_fortrandll.def.in
-
-Procedure for passing C variables to Fortran
----------------------------------------------
-
-(1) Find the C struct name you are interested in:
- (a) src/H5public.h if it is a generic type, i.e. H5_*
- or
- (b) src/H5*public.h if is a specific type, i.e. H5*_
-
-(2) Put that structure into an array that will be passed to fortran in:
- (a) fortran/src/H5_f.c (add to nh5init_flags_c subroutine)
- (b) edit fortran/src/H5f90proto.h and edit nh5init_flags_c interface call
-
-(3) Edit the function call in fortran/src/H5_ff.F90
- (a) edit the call: FUNCTION h5init_flags_c
- (b) edit h5init_flags_c call in h5open_f to match the number of arguments passing
-
-(4) add the size of the array and array to fortran/src/H5f90global.F90
- - must match the size found it H5_f.c
-
-NOTE: To just add a default C value argument, do steps (2a) and (4)
-
-
-Procedure for adding a new file to the repository
---------------------------------------------------
-
-Add the name of the file to the:
- (1) Makefile.am located in the same directory as the newfile
- (2) CMakeLists.txt located in the same directory as the newfile
-
diff --git a/fortran/src/README.md b/fortran/src/README.md
new file mode 100644
index 0000000..229e546
--- /dev/null
+++ b/fortran/src/README.md
@@ -0,0 +1,159 @@
+Information about the Fortran APIs
+===================================
+
+This directory contains Fortran APIs for HDF5 Library functionality.
+A complete list of implemented Fortran subroutines can be found in the HDF5
+Reference Manual.
+
+About the source code organization
+----------------------------------
+
+The Fortran APIs are organized in modules parallel to the HDF5 Interfaces.
+Each module is in a separate file with the name H5\*ff.F90. Corresponding C
+stubs are in the H5\*f.c files. For example, the Fortran File APIs are in
+the file H5Fff.F90, and the corresponding C stubs are in the file H5Ff.c.
+
+Each module contains Fortran definitions of the constants, interfaces to
+the subroutines if needed, and the subroutines themselves.
+
+It is crucial for users to use constant names in their programs instead
+of the numerical values, as the constant names have values which are
+subject to change without notice.
+
+Quick overview of the Fortran APIs
+----------------------------------
+
+* An in-depth description of each Fortran API and its parameters can
+ be found in the HDF5 Reference Manual. They tend to be summarized
+ from the C descriptions.
+
+* The Fortran APIs come in the form of Fortran subroutines.
+
+* Each Fortran subroutine name is derived from the corresponding C function
+ name by adding "_f" to the name. For example, the name of the C function
+ to create an HDF5 file is H5Fcreate; the corresponding Fortran subroutine
+ is h5fcreate_f.
+
+* The parameter list for each Fortran subroutine usually has two more parameters
+ than the corresponding C function. These additional parameters typically hold
+ the return value and an error code. The order of the Fortran subroutine
+ parameters may differ from the order of the C function parameters.
+
+ The Fortran subroutine parameters are usually listed in the following order:
+
+ * required input parameters,
+ * output parameters, including return value and error code, and
+ optional input parameters.
+
+ For example, the C function to create a dataset has the following
+ prototype:
+
+ hid_t H5Dcreate2(hid_it loc_id, char *name, hid_t type_id,
+ hid_t space_id, hid_t link_creation_prp, hid_t dset_creation_prp,
+ hid_t dset_access_prop);
+
+ The corresponding Fortran subroutine has the following form:
+
+ SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
+ hdferr, dset_creation_prp, link_creation_prp, dset_access_prop)
+
+ The first four parameters of the Fortran subroutine correspond to the
+ parameters of the C function. The fifth parameter, dset_id, is an output
+ parameter containing a valid dataset identifier, and the sixth
+ output parameter, hdferr, indicates successful completion.
+ The error code descriptions can be found in the subroutine descriptions
+ of the Reference Manual. The last three input parameters are optional
+ and can be omitted, in which case default values will be used.
+
+* Parameters to the Fortran subroutines typically include
+ predefined datatypes (see the build-time generated file
+ H5fortran_types.F90 for a complete listing):
+
+ INTEGER(HID_T) compares with hid_t type in HDF5 C APIs
+ INTEGER(HSIZE_T) compares with hsize_t in HDF5 C APIs
+ INTEGER(HSSIZE_T) compares with hssize_t in HDF5 C APIs
+ INTEGER(SIZE_T) compares with the C size_t type
+
+ These integer types usually correspond to 4- or 8-byte integers,
+ depending on the Fortran compiler and corresponding HDF5
+ C library definitions.
+
+* Before calling HDF5 Fortran subroutines, each Fortran application must initialize Fortran datatypes
+ by calling the h5open_f subroutine. After all calls to the HDF5 Fortran Library, the application
+ should call the h5close_f subroutine.
+
+* All public APIs for the Reference Manual have Doxygen descriptions and should use parameter aliases when possible.
+
+* When a C application reads data stored by a Fortran program, the data appears
+ to be transposed. This is because C and Fortran have different storage orders
+ (row-major and column-major, respectively). For instance, if a Fortran program
+ writes a 4x6 two-dimensional dataset to a file, a C program will read it into
+ memory as a 6x4 two-dimensional dataset. The HDF5 C utilities h5dump and h5ls
+ display transposed data if it was written from a Fortran program.
+
+* It is important to note that in Fortran, the indexing of arrays starts at 1.
+
+
+FOR DEVELOPERS
+==============
+
+* The build system generates APIs compatible with Fortran 90 to handle the backward compatibility
+ of the older F90 APIs. During the configuration process, the build system determines all
+ valid integer and real KINDs, as well as the maximum decimal precision for reals and floats
+ in both Fortran and C. To determine all the available kinds, the Fortran program
+ *PROGRAM FC_AVAIL_KINDS* is used, which is located in aclocal_fc.f90. The available KINDs
+ are stored in H5config_f.inc, a file processed during configuration time from
+ H5config_f.inc.in. Each program in m4/aclocal_fc.f90 is enclosed with a
+ "!---START-----+" line and a "!---END-------+" line, which are used as markers to
+ isolate each test program for the build systems.
+
+ The valid KINDs for integers and reals that are stored in H5config_f.inc are used in the H5_buildiface.F90 file located in the fortran/src directory. During the build process, H5_buildiface.F90 generates all the valid F90 KIND interfaces for the following APIs: h5awrite_f, h5aread_f, h5dwrite_f, h5dread_f, h5pset_fill_value_f, h5pget_fill_value_f, h5pset_f, h5pget_f, h5pregister_f, and h5pinsert_f. These APIs can handle up to and including rank seven arrays for all the found KINDs. Again, it's important to note that no new Fortran APIs should be added to H5_buildiface.F90 since new Fortran APIs should not use F90 specification but should instead use F2003. The source file generated by H5_buildiface.F90 is H5_gen.F90, which is the Fortran module H5_GEN, Figure 1. This module is included in the HDF5 module HDF5.F90.
+
+ <figure>
+ <!-- Xfig graphic -->
+ <img src="./FortBuildFlow.svg">
+ <figcaption>Figure 1: During the configure and build phases, Fortran files are generated and compiled. This overview explains the flow steps of the build process.</figcaption>
+ </figure>
+
+Procedure to add a new function
+--------------------------------
+
+> [!IMPORTANT]
+> The use of C stubs (H5\*f.c) is no longer recommended. The C APIs should now be called from Fortran wrappers. C wrappers description exists for maintenance purposes and to create and understand alternative development options.
+
+1. Edit the fortran/src/H5\*ff.F90 file
+2. Edit the fortran/src/H5\*f.c file
+3. Edit the fortran/src/H5f90proto.h file
+4. Add the new function to fortran/src/hdf5_fortrandll.def.in
+
+Procedure for passing C variables to Fortran
+---------------------------------------------
+
+(1) Find the C struct name you are interested in:
+
+ (a) src/H5public.h if it is a generic type, i.e. H5_*
+ or
+ (b) src/H5*public.h if is a specific type, i.e. H5*_
+
+(2) Put that structure into an array that will be passed to Fortran in:
+
+ (a) fortran/src/H5_f.c (add to the h5init_flags_c subroutine)
+ (b) edit fortran/src/H5f90proto.h and edit h5init_flags_c interface call
+
+(3) Edit the function call in fortran/src/H5_ff.F90
+
+ (a) edit the call: FUNCTION h5init_flags_c
+ (b) edit h5init_flags_c call in h5open_f to match the number of arguments being passed
+
+(4) Add the size of the array and array to fortran/src/H5f90global.F90, it must match the size found in H5_f.c
+
+> [!NOTE]
+> To add a default C value argument, do steps (2a) and (4).
+
+
+Procedure for adding a new file to the repository
+--------------------------------------------------
+
+Add the name of the file to the:
+ (1) Makefile.am located in the same directory as the new file.
+ (2) CMakeLists.txt located in the same directory as the new file.
diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in
index 8d8b2b0..55f4f2b 100644
--- a/fortran/src/hdf5_fortrandll.def.in
+++ b/fortran/src/hdf5_fortrandll.def.in
@@ -253,12 +253,13 @@ H5O_mp_H5OVISIT_BY_NAME_F
H5O_mp_H5OVISIT_F
H5O_mp_H5OTOKEN_CMP_F
; H5P
+H5P_mp_H5PCLOSE_F
H5P_mp_H5PCREATE_F
+H5P_mp_H5PCREATE_CLASS_F
H5P_mp_H5PSET_PRESERVE_F
H5P_mp_H5PGET_PRESERVE_F
H5P_mp_H5PGET_CLASS_F
H5P_mp_H5PCOPY_F
-H5P_mp_H5PCLOSE_F
H5P_mp_H5PSET_CHUNK_F
H5P_mp_H5PGET_CHUNK_F
H5P_mp_H5PSET_DEFLATE_F
@@ -331,7 +332,6 @@ H5P_mp_H5PCOPY_PROP_F
H5P_mp_H5PREMOVE_F
H5P_mp_H5PUNREGISTER_F
H5P_mp_H5PCLOSE_CLASS_F
-H5P_mp_H5PCREATE_CLASS_F
H5P_mp_H5PREGISTER_INTEGER
H5P_mp_H5PREGISTER_CHAR
H5P_mp_H5PINSERT_CHAR
@@ -555,6 +555,8 @@ H5VL_mp_H5VLGET_CONNECTOR_ID_BY_VALUE_F
H5VL_mp_H5VLGET_CONNECTOR_NAME_F
H5VL_mp_H5VLCLOSE_F
H5VL_mp_H5VLUNREGISTER_CONNECTOR_F
+H5VL_mp_H5VLNATIVE_ADDR_TO_TOKEN_F
+H5VL_mp_H5VLNATIVE_TOKEN_TO_ADDR_F
; H5Z
H5Z_mp_H5ZUNREGISTER_F
H5Z_mp_H5ZFILTER_AVAIL_F