diff options
Diffstat (limited to 'doc/html/Tutor/examples/mountexample.f90')
-rw-r--r-- | doc/html/Tutor/examples/mountexample.f90 | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/doc/html/Tutor/examples/mountexample.f90 b/doc/html/Tutor/examples/mountexample.f90 new file mode 100644 index 0000000..f4341b2 --- /dev/null +++ b/doc/html/Tutor/examples/mountexample.f90 @@ -0,0 +1,187 @@ +! +!In the following example we create one file with a group in it, +!and another file with a dataset. Mounting is used to +!access the dataset from the second file as a member of a group +!in the first file. +! + + PROGRAM MOUNTEXAMPLE + + USE HDF5 ! This module contains all necessary modules + + IMPLICIT NONE + + ! + ! Filenames are "mount1.h5" and "mount2.h5" + ! + CHARACTER(LEN=9), PARAMETER :: filename1 = "mount1.h5" + CHARACTER(LEN=9), PARAMETER :: filename2 = "mount2.h5" + + ! + !data space rank and dimensions + ! + INTEGER, PARAMETER :: RANK = 2 + INTEGER, PARAMETER :: NX = 4 + INTEGER, PARAMETER :: NY = 5 + + ! + ! File identifiers + ! + INTEGER(HID_T) :: file1_id, file2_id + + ! + ! Group identifier + ! + INTEGER(HID_T) :: gid + + ! + ! Dataset identifier + ! + INTEGER(HID_T) :: dset_id + + ! + ! Data space identifier + ! + INTEGER(HID_T) :: dataspace + + ! + ! Data type identifier + ! + INTEGER(HID_T) :: dtype_id + + ! + ! The dimensions for the dataset. + ! + INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/) + + ! + ! Flag to check operation success + ! + INTEGER :: error + + ! + ! General purpose integer + ! + INTEGER :: i, j + + ! + ! Data buffers + ! + INTEGER, DIMENSION(NX,NY) :: data_in, data_out + + ! + ! Initialize FORTRAN interface. + ! + CALL h5open_f(error) + + ! + ! Initialize data_in buffer + ! + do i = 1, NX + do j = 1, NY + data_in(i,j) = (i-1) + (j-1) + end do + end do + + ! + ! Create first file "mount1.h5" using default properties. + ! + CALL h5fcreate_f(filename1, H5F_ACC_TRUNC_F, file1_id, error) + + ! + ! Create group "/G" inside file "mount1.h5". + ! + CALL h5gcreate_f(file1_id, "/G", gid, error) + + ! + ! Close file and group identifiers. + ! + CALL h5gclose_f(gid, error) + CALL h5fclose_f(file1_id, error) + + ! + ! Create second file "mount2.h5" using default properties. + ! + CALL h5fcreate_f(filename2, H5F_ACC_TRUNC_F, file2_id, error) + + ! + ! Create data space for the dataset. + ! + CALL h5screate_simple_f(RANK, dims, dataspace, error) + + ! + ! Create dataset "/D" inside file "mount2.h5". + ! + CALL h5dcreate_f(file2_id, "/D", H5T_NATIVE_INTEGER, dataspace, & + dset_id, error) + + ! + ! Write data_in to the dataset + ! + CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, error) + + ! + ! Close file, dataset and dataspace identifiers. + ! + CALL h5sclose_f(dataspace, error) + CALL h5dclose_f(dset_id, error) + CALL h5fclose_f(file2_id, error) + + ! + ! Reopen both files. + ! + CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error) + CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error) + + ! + ! Mount the second file under the first file's "/G" group. + ! + CALL h5fmount_f (file1_id, "/G", file2_id, error) + + + ! + ! Access dataset D in the first file under /G/D name. + ! + CALL h5dopen_f(file1_id, "/G/D", dset_id, error) + + ! + ! Get dataset's data type. + ! + CALL h5dget_type_f(dset_id, dtype_id, error) + + ! + ! Read the dataset. + ! + CALL h5dread_f(dset_id, dtype_id, data_out, error) + + ! + ! Print out the data. + ! + do i = 1, NX + print *, (data_out(i,j), j = 1, NY) + end do + + + ! + !Close dset_id and dtype_id. + ! + CALL h5dclose_f(dset_id, error) + CALL h5tclose_f(dtype_id, error) + + ! + ! Unmount the second file. + ! + CALL h5funmount_f(file1_id, "/G", error); + + ! + ! Close both files. + ! + CALL h5fclose_f(file1_id, error) + CALL h5fclose_f(file2_id, error) + ! + ! Close FORTRAN interface. + ! + CALL h5close_f(error) + + END PROGRAM MOUNTEXAMPLE + |