hdf5/fortran/examples/mountexample.f90
Larry Knox 89fbe00dec Merge pull request #426 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:hdf5_1_10 to hdf5_1_10
* commit '54957d37f5aa73912763dbb6e308555e863c43f4':
  Commit copyright header change for src/H5PLpkg.c which was added after running script to make changes.
  Add new files in release_docs to MANIFEST. Cimmit changes to Makefile.in(s) and H5PL.c that resulted from running autogen.sh.
  Merge pull request #407 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:hdf5_1_10_1 to hdf5_1_10_1
  Change copyright headers to replace url referring to file to be removed and replace it with new url for COPYING file.
2017-04-25 16:05:36 -05:00

204 lines
4.9 KiB
Fortran

! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! Copyright by The HDF Group. *
! Copyright by the Board of Trustees of the University of Illinois. *
! All rights reserved. *
! *
! This file is part of HDF5. The full HDF5 copyright notice, including *
! terms governing use, modification, and redistribution, is contained in *
! the COPYING file, which can be found at the root of the source code *
! distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
! If you do not have access to either file, you may request a copy from *
! help@hdfgroup.org. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
!
!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
INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
!
! 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
!
data_dims(1) = NX
data_dims(2) = NY
CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, data_dims, 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, data_dims, 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