MODULE g_iterate USE HDF5 USE ISO_C_BINDING IMPLICIT NONE CONTAINS !************************************************************ ! ! Operator function. Prints the name and type of the object ! being examined. ! ! ************************************************************ INTEGER FUNCTION op_func(loc_id, name, info, ngrps) bind(C) USE HDF5 USE ISO_C_BINDING IMPLICIT NONE INTEGER(HID_T), VALUE :: loc_id CHARACTER(LEN=1), DIMENSION(1:10) :: name ! must have LEN=1 for bind(C) strings TYPE(C_PTR) :: info INTEGER :: ngrps INTEGER :: status, i, len TYPE(H5O_info_t), TARGET :: infobuf TYPE(C_PTR) :: ptr CHARACTER(LEN=10) :: name_string ! ! Get type of the object and display its name and type. ! The name of the object is passed to this FUNCTION by ! the Library. ! DO i = 1, 10 name_string(i:i) = name(i)(1:1) ENDDO CALL H5Oget_info_by_name_f(loc_id, name_string, infobuf, status) ! Include the string up to the C NULL CHARACTER len = 0 DO IF(name_string(len+1:len+1).EQ.C_NULL_CHAR.OR.len.GE.10) EXIT len = len + 1 ENDDO IF(infobuf%type.EQ.H5O_TYPE_GROUP_F)THEN WRITE(*,*) "Group: ", name_string(1:len) ngrps = ngrps + 1 ENDIF op_func = 0 ! return successful END FUNCTION op_func END MODULE g_iterate PROGRAM main USE HDF5 USE ISO_C_BINDING USE g_iterate IMPLICIT NONE CHARACTER(LEN=16), PARAMETER :: filename = "h5ex_g_create.h5" INTEGER(HID_T) :: file, group, group1, lcpl ! Handles INTEGER :: hdferr TYPE(C_FUNPTR) :: funptr TYPE(C_PTR) :: ptr INTEGER :: status INTEGER(HSIZE_T) :: idx INTEGER, TARGET :: ngrps INTEGER :: ret_value ! ! 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) CALL H5Pcreate_f (H5P_LINK_CREATE_F, lcpl, hdferr) CALL H5Pset_create_inter_group_f(lcpl, 1, hdferr) CALL H5Gcreate_f(file, "/atlas/manifold1/region1", group, hdferr, lcpl_id=lcpl) CALL h5gclose_f(group,hdferr) CALL H5Gcreate_f(file, "/atlas/manifold1/region2", group, hdferr, lcpl_id=lcpl) CALL h5gclose_f(group,hdferr) CALL H5Gcreate_f(file, "/atlas/manifold2", group, hdferr, lcpl_id=lcpl) CALL h5gclose_f(group,hdferr) CALL h5gcreate_f(file, "/atlas/resolution", group, hdferr, lcpl_id=lcpl) CALL h5gclose_f(group,hdferr) call h5pclose_f(lcpl , hdferr) ngrps = 0 idx = 0 funptr = C_FUNLOC(op_func) ! call back function ptr = C_LOC(ngrps) call H5Gopen_f(file, "/atlas", group, hdferr) CALL H5Literate_f(group, H5_INDEX_NAME_F, H5_ITER_NATIVE_F, idx, funptr, ptr, ret_value, status) PRINT*,"Number of top-level groups=",ngrps CALL h5gclose_f(group,hdferr) CALL h5fclose_f(file , hdferr) END PROGRAM main