summaryrefslogtreecommitdiffstats
path: root/HDF5Examples/FORTRAN/H5G/h5ex_g_phase.F90
diff options
context:
space:
mode:
Diffstat (limited to 'HDF5Examples/FORTRAN/H5G/h5ex_g_phase.F90')
-rw-r--r--HDF5Examples/FORTRAN/H5G/h5ex_g_phase.F90113
1 files changed, 113 insertions, 0 deletions
diff --git a/HDF5Examples/FORTRAN/H5G/h5ex_g_phase.F90 b/HDF5Examples/FORTRAN/H5G/h5ex_g_phase.F90
new file mode 100644
index 0000000..d9cfd69
--- /dev/null
+++ b/HDF5Examples/FORTRAN/H5G/h5ex_g_phase.F90
@@ -0,0 +1,113 @@
+!************************************************************
+!
+! This example shows how to set the conditions for
+! conversion between compact and dense (indexed) groups.
+!
+! This file is intended for use with HDF5 Library version 1.8
+!
+!************************************************************
+PROGRAM main
+
+ USE HDF5
+ IMPLICIT NONE
+
+ CHARACTER(LEN=15), PARAMETER :: filename = "h5ex_g_phase.h5"
+ INTEGER, PARAMETER :: MAX_GROUPS = 7
+ INTEGER, PARAMETER :: MAX_COMPACT = 5
+ INTEGER, PARAMETER :: MIN_DENSE = 3
+
+ INTEGER(HID_T) :: file, group, subgroup, fapl, gcpl ! handles
+ INTEGER :: hdferr
+ INTEGER :: storage_type ! Type of storage for links in group:
+ ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage
+ ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage
+ ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables
+ INTEGER :: nlinks ! Number of links in group
+ INTEGER :: max_corder ! Current maximum creation order value for group
+ CHARACTER(LEN=2) :: name = "G0" ! Name of subgroup
+ INTEGER :: i
+ !
+ ! Initialize FORTRAN interface.
+ !
+ CALL h5open_f(hdferr)
+ !
+ ! Set file access property list to allow the latest file format.
+ ! This will allow the library to create new format groups.
+ !
+ CALL h5pcreate_f (H5P_FILE_ACCESS_F, fapl, hdferr)
+ CALL h5pset_libver_bounds_f (fapl, H5F_LIBVER_LATEST_F, H5F_LIBVER_LATEST_F, hdferr)
+ !
+ ! Create group access property list and set the phase change
+ ! conditions. In this example we lowered the conversion threshold
+ ! to simplify the output, though this may not be optimal.
+ !
+ CALL h5pcreate_f (H5P_GROUP_CREATE_F, gcpl, hdferr)
+ CALL h5pset_link_phase_change_f (gcpl, MAX_COMPACT, MIN_DENSE, hdferr)
+ !
+ ! Create a new file using the default properties.
+ !
+ CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, hdferr, access_prp=fapl )
+ !
+ ! Create primary group.
+ !
+ CALL h5gcreate_f(file, name, group, hdferr, gcpl_id=gcpl)
+ !
+ ! Add subgroups to "group" one at a time, print the storage type
+ ! for "group" after each subgroup is created.
+ !
+ DO i = 1, MAX_GROUPS
+ !
+ ! Define the subgroup name and create the subgroup.
+ !
+ WRITE(name,'(A,I1)') "G",i ! G1, G2, G3 etc.
+
+ CALL h5gcreate_f(group, name, subgroup, hdferr)
+ CALL h5gclose_f(subgroup, hdferr)
+ !
+ ! Obtain the group info and print the group storage type
+ !
+ CALL H5Gget_info_f(group, storage_type, nlinks, max_corder, hdferr)
+ WRITE(*,'(I1," Groups: Storage type is ")', ADVANCE='NO') nlinks
+ IF(storage_type.EQ. H5G_STORAGE_TYPE_COMPACT_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_COMPACT_F")') ! New compact format
+ ELSE IF(storage_type.EQ.H5G_STORAGE_TYPE_DENSE_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_DENSE_F")') ! New dense (indexed) format
+ ELSE IF(storage_type.EQ.H5G_STORAGE_TYPE_SYMBOL_TABLE_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_SYMBOL_TABLE")') ! Original format
+ ELSE IF(storage_type.EQ.H5G_STORAGE_TYPE_UNKNOWN_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_UNKNOWN_F")') ! Unknown format
+ END IF
+ ENDDO
+ WRITE(*,'()')
+ !
+ ! Delete subgroups one at a time, print the storage type for
+ !"group" after each subgroup is deleted.
+ !
+ DO i = MAX_GROUPS,1, -1
+ !
+ ! Define the subgroup name and delete the subgroup.
+ !
+ WRITE(name,'(A,I1)') "G",i ! G1, G2, G3 etc.
+ CALL h5ldelete_f(group, name, hdferr)
+ !
+ ! Obtain the group info and print the group storage type
+ !
+ CALL H5Gget_info_f(group, storage_type, nlinks, max_corder, hdferr)
+ WRITE(*,'(I1," Groups: Storage type is ")', ADVANCE='NO') nlinks
+ IF(storage_type.EQ. H5G_STORAGE_TYPE_COMPACT_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_COMPACT_F")') ! New compact format
+ ELSE IF(storage_type.EQ.H5G_STORAGE_TYPE_DENSE_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_DENSE_F")') ! New dense (indexed) format
+ ELSE IF(storage_type.EQ.H5G_STORAGE_TYPE_SYMBOL_TABLE_F)THEN
+ WRITE(*,'("H5G_STORAGE_TYPE_SYMBOL_TABLE")') ! Original format
+ END IF
+ ENDDO
+ !
+ ! Close and release resources.
+ !
+ CALL h5pclose_f(fapl, hdferr)
+ CALL h5pclose_f(gcpl, hdferr)
+ CALL h5gclose_f(group, hdferr)
+ CALL h5fclose_f(file, hdferr)
+
+END PROGRAM main