! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! 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 files COPYING and Copyright.html. COPYING can be found at the root * ! of the source code distribution tree; Copyright.html can be found at the * ! root level of an installed copy of the electronic HDF5 document set and * ! is linked from the top-level documents page. It can also be found at * ! http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * ! access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! ! ! Purpose: 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. ! PROGRAM FFLUSH2EXAMPLE USE HDF5 ! This module contains all necessary modules IMPLICIT NONE CHARACTER(LEN=7), PARAMETER :: filename = "fflush1" CHARACTER(LEN=80) :: fix_filename ! !data space rank and dimensions ! INTEGER, PARAMETER :: RANK = 2 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 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, total_error = 0 ! !data buffers ! INTEGER, DIMENSION(NX,NY) :: data_out INTEGER(HSIZE_T), DIMENSION(7) :: 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" stop 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, jump to stop. ! IF (error == -1) THEN 001 STOP END IF ! !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. This is not truly fortran ! standard but likely supported by most fortran compilers. ! IF (total_error .ne. 0) CALL exit (total_error) END PROGRAM FFLUSH2EXAMPLE