hdf5/fortran/test/fflush2.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

176 lines
4.0 KiB
Fortran

!****h* root/fortran/test/fflush2.f90
!
! NAME
! fflush2.f90
!
! FUNCTION
! This is the second half of a two-part test that makes sure
! that a file can be read after an application crashes as long
! as the file was flushed first. This half tries to read the
! file created by the first half.
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! 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. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
!*****
PROGRAM FFLUSH2EXAMPLE
USE HDF5 ! This module contains all necessary modules
USE TH5_MISC
IMPLICIT NONE
CHARACTER(LEN=7), PARAMETER :: filename = "fflush1"
CHARACTER(LEN=80) :: fix_filename
!
!data space rank and dimensions
!
INTEGER, PARAMETER :: NX = 4
INTEGER, PARAMETER :: NY = 5
!
! File identifiers
!
INTEGER(HID_T) :: file_id
!
! Group identifier
!
INTEGER(HID_T) :: gid
!
! dataset identifier
!
INTEGER(HID_T) :: dset_id
!
! data type identifier
!
INTEGER(HID_T) :: dtype_id
!
!flag to check operation success
!
INTEGER :: error
!
!general purpose integer
!
INTEGER :: i, j, total_error = 0
!
!data buffers
!
INTEGER, DIMENSION(NX,NY) :: data_out
INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
data_dims(1) = NX
data_dims(2) = NY
!
!Initialize FORTRAN predifined datatypes
!
CALL h5open_f(error)
CALL check("h5open_f",error,total_error)
!
!Open the file.
!
CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
IF (error .NE. 0) THEN
WRITE(*,*) "Cannot modify filename"
CALL h5_exit_f (1)
ENDIF
CALL h5fopen_f(fix_filename, H5F_ACC_RDONLY_F, file_id, error)
CALL check("h5fopen_f",error,total_error)
!
!Open the dataset
!
CALL h5dopen_f(file_id, "/D", dset_id, error)
CALL check("h5dopen_f",error,total_error)
!
!Get dataset's data type.
!
CALL h5dget_type_f(dset_id, dtype_id, error)
CALL check("h5dget_type_f",error,total_error)
!
!Read the dataset.
!
CALL h5dread_f(dset_id, dtype_id, data_out, data_dims, error)
CALL check("h5dread_f",error,total_error)
!
!Print the dataset.
!
DO i = 1, NX
WRITE(*,*) (data_out(i,j), j = 1, NY)
END DO
!
!result of the print statement
!
! 0, 1, 2, 3, 4
! 1, 2, 3, 4, 5
! 2, 3, 4, 5, 6
! 3, 4, 5, 6, 7
!
!Open the group.
!
CALL h5gopen_f(file_id, "G", gid, error)
CALL check("h5gopen_f",error,total_error)
!
!In case error happens, exit.
!
IF (error == -1) CALL h5_exit_f (1)
!
!Close the datatype
!
CALL h5tclose_f(dtype_id, error)
CALL check("h5tclose_f",error,total_error)
!
!Close the dataset.
!
CALL h5dclose_f(dset_id, error)
CALL check("h5dclose_f",error,total_error)
!
!Close the group.
!
CALL h5gclose_f(gid, error)
CALL check("h5gclose_f",error,total_error)
!
!Close the file.
!
CALL h5fclose_f(file_id, error)
CALL check("h5fclose_f",error,total_error)
!
!Close FORTRAN predifined datatypes
!
CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
CALL h5close_f(error)
CALL check("h5close_types_f",error,total_error)
! if errors detected, exit with non-zero code.
IF (total_error .ne. 0) CALL h5_exit_f (1)
END PROGRAM FFLUSH2EXAMPLE