diff options
Diffstat (limited to 'HDF5Examples/FORTRAN/H5G/h5ex_g_corder.F90')
-rw-r--r-- | HDF5Examples/FORTRAN/H5G/h5ex_g_corder.F90 | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/HDF5Examples/FORTRAN/H5G/h5ex_g_corder.F90 b/HDF5Examples/FORTRAN/H5G/h5ex_g_corder.F90 new file mode 100644 index 0000000..5418e34 --- /dev/null +++ b/HDF5Examples/FORTRAN/H5G/h5ex_g_corder.F90 @@ -0,0 +1,97 @@ +!************************************************************ +! +! This example shows how to track links in a group by +! creation order. The program creates a series of groups, +! then reads back their names: first in alphabetical order, +! then in creation order. +! +! This file is intended for use with HDF5 Library version 1.8 +! +!************************************************************ + +PROGRAM main + + USE HDF5 + IMPLICIT NONE + + CHARACTER(LEN=16), PARAMETER :: filename = "h5ex_g_corder.h5" + + INTEGER(HID_T) :: file, group, subgroup, gcpl ! handles + INTEGER :: hdferr + INTEGER :: storage_type ! Type of storage for links in group: + ! H5G_STORAGE_TYPE_COMPACT: Compact storage + ! H5G_STORAGE_TYPE_DENSE: Indexed storage + ! H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables + INTEGER :: nlinks ! Number of links in group + INTEGER :: max_corder ! Current maximum creation order value for group + INTEGER(SIZE_T) :: size ! Size of name + INTEGER(HSIZE_T) :: i ! Index + CHARACTER(LEN=80) :: name ! Output buffer + ! + ! Initialize FORTRAN interface. + ! + CALL h5open_f(hdferr) + ! + ! Create a new file using the default properties. + ! + CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, hdferr) + ! + ! Create group creation property list and enable link creation + ! order tracking. Attempting to track by creation order in a + ! group that does not have this property set will result in an + ! error. + ! + CALL h5pcreate_f(H5P_GROUP_CREATE_F, gcpl, hdferr) + CALL h5pset_link_creation_order_f( gcpl, IOR(H5P_CRT_ORDER_TRACKED_F,H5P_CRT_ORDER_INDEXED_F),hdferr) + ! + ! Create primary group using the property list. + ! + CALL h5gcreate_f(file, "index_group", group, hdferr, gcpl_id=gcpl) + ! + ! Create subgroups in the primary group. These will be tracked + ! by creation order. Note that these groups do not have to have + ! the creation order tracking property set. + ! + CALL h5gcreate_f(group, "H", subgroup, hdferr) + CALL h5gclose_f(subgroup,hdferr) + CALL h5gcreate_f(group, "D", subgroup, hdferr) + CALL h5gclose_f(subgroup,hdferr) + CALL h5gcreate_f(group, "F", subgroup, hdferr) + CALL h5gclose_f(subgroup,hdferr) + CALL h5gcreate_f(group, "5", subgroup, hdferr) + CALL h5gclose_f(subgroup,hdferr) + ! + ! Get group info. + ! + CALL H5Gget_info_f(group, storage_type, nlinks, max_corder, hdferr) + ! + ! Traverse links in the primary group using alphabetical indices + ! (H5_INDEX_NAME). + ! + WRITE(*,'("Traversing group using alphabetical indices:")') + DO i = 0, nlinks-1 + ! + ! Get name and size of name + ! + CALL H5Lget_name_by_idx_f(group, ".", H5_INDEX_NAME_F, H5_ITER_INC_F, i, name, hdferr, size) + WRITE(*,'("Index ",i2,": ",A)') INT(i), TRIM(name) + ENDDO + ! + !Traverse links in the primary group by creation order + ! (H5_INDEX_CRT_ORDER). + ! + WRITE(*,'(/,"Traversing group using creation order indices:")') + DO i = 0, nlinks-1 + ! + ! Get name and size of name + ! + CALL H5Lget_name_by_idx_f(group, ".", H5_INDEX_CRT_ORDER_F, H5_ITER_INC_F, i, name, hdferr, size) + WRITE(*,'("Index ",i2,": ",A)') INT(i), TRIM(name) + ENDDO + ! + ! Close and release resources. + ! + CALL h5pclose_f(gcpl, hdferr) + CALL h5gclose_f(group, hdferr) + CALL h5fclose_f(file, hdferr) +END PROGRAM main |