diff options
Diffstat (limited to 'fortran/src/H5Rff.f90')
-rw-r--r-- | fortran/src/H5Rff.f90 | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/fortran/src/H5Rff.f90 b/fortran/src/H5Rff.f90 new file mode 100644 index 0000000..3fd9142 --- /dev/null +++ b/fortran/src/H5Rff.f90 @@ -0,0 +1,138 @@ +! +! This file contains Fortran90 interfaces for H5R functions. +! + MODULE H5R + USE H5FORTRAN_TYPES + USE H5FORTRAN_FLAGS + + TYPE hobj_ref_t_f + !INTEGER(KIND=4) ref(2) could cause trouble on Crays + CHARACTER ref(8) + END TYPE + + TYPE hdset_reg_ref_t_f + !INTEGER(KIND=4) reg_ref(3) could cause troubles on Crays + CHARACTER ref(12) + END TYPE + + INTERFACE h5rcreate_f + + MODULE PROCEDURE h5rcreate_object_f + MODULE PROCEDURE h5rcreate_region_f + + END INTERFACE + + INTERFACE h5rdereference_f + + MODULE PROCEDURE h5rdereference_object_f + MODULE PROCEDURE h5rdereference_region_f + + END INTERFACE + + INTERFACE h5rget_region_f + + MODULE PROCEDURE h5rget_region_region_f + + END INTERFACE + + INTERFACE h5rget_object_type_f + + MODULE PROCEDURE h5rget_object_type_obj_f + + END INTERFACE + + + CONTAINS + + + SUBROUTINE h5rcreate_object_f(loc_id, name, ref, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Location identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the object at location specified + ! by loc_id identifier + TYPE(hobj_ref_t_f), INTENT(OUT) :: ref ! Object reference + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER :: namelen ! Name length + INTEGER, EXTERNAL :: h5rcreate_object_c + namelen = LEN(name) + hdferr = h5rcreate_object_c(ref, loc_id, name, namelen ) + + END SUBROUTINE h5rcreate_object_f + + SUBROUTINE h5rcreate_region_f(loc_id, name, space_id, ref, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Location identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the dataset at location specified + ! by loc_id identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Dataset's dataspace identifier + TYPE(hdset_reg_ref_t_f), INTENT(OUT) :: ref ! Dataset region reference + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER :: namelen ! Name length + INTEGER, EXTERNAL :: h5rcreate_region_c + namelen = LEN(name) + hdferr = h5rcreate_region_c(ref, loc_id, name, namelen, space_id ) + + END SUBROUTINE h5rcreate_region_f + + SUBROUTINE h5rdereference_object_f(dset_id, ref, obj_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier + TYPE(hobj_ref_t_f), INTENT(IN) :: ref ! Object reference + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER :: ref_type ! Reference type + INTEGER, EXTERNAL :: h5rdereference_object_c + ref_type = H5R_OBJECT_F + hdferr = h5rdereference_object_c(dset_id, ref, obj_id ) + + END SUBROUTINE h5rdereference_object_f + + SUBROUTINE h5rdereference_region_f(dset_id, ref, obj_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier + TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref ! Object reference + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER :: ref_type ! Reference type + INTEGER, EXTERNAL :: h5rdereference_region_c + ref_type = H5R_DATASET_REGION_F + hdferr = h5rdereference_region_c(dset_id, ref, obj_id ) + + END SUBROUTINE h5rdereference_region_f + + + SUBROUTINE h5rget_region_region_f(dset_id, ref, space_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier + TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref ! Dataset region reference + INTEGER(HID_T), INTENT(OUT) :: space_id ! Space identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER, EXTERNAL :: h5rget_region_region_c + hdferr = h5rget_region_region_c(dset_id, ref, space_id ) + + END SUBROUTINE h5rget_region_region_f + + SUBROUTINE h5rget_object_type_obj_f(dset_id, ref, obj_type, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier + TYPE(hobj_ref_t_f), INTENT(IN) :: ref ! Object reference + INTEGER, INTENT(OUT) :: obj_type ! Object type + ! H5G_UNKNOWN_F (-1) + ! H5G_LINK_F 0 + ! H5G_GROUP_F 1 + ! H5G_DATASET_F 2 + ! H5G_TYPE_F 3 + + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER, EXTERNAL :: h5rget_object_type_obj_c + hdferr = h5rget_object_type_obj_c(dset_id, ref, obj_type ) + + END SUBROUTINE h5rget_object_type_obj_f + + END MODULE H5R |