625 lines
17 KiB
Fortran
625 lines
17 KiB
Fortran
Program H5BlockParTestScalarFieldF
|
|
IMPLICIT NONE
|
|
#ifdef PARALLEL_IO
|
|
INCLUDE 'mpif.h'
|
|
#endif
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER :: nargs = 0
|
|
INTEGER :: myproc = 0
|
|
INTEGER :: nprocs = 1
|
|
INTEGER :: comm = 0
|
|
INTEGER :: mpi_err
|
|
INTEGER*8 :: h5_err
|
|
INTEGER :: i
|
|
CHARACTER(LEN=32) :: arg_str
|
|
INTEGER :: opt_read = 0
|
|
INTEGER :: opt_write = 0
|
|
INTEGER :: opt_with_ghosts = 0
|
|
CHARACTER(LEN=128) :: fname
|
|
INTEGER*8 :: layout (6)
|
|
INTEGER*8 :: layout1 (6,1)
|
|
INTEGER*8 :: layout8 (6,8)
|
|
INTEGER*8 :: layout8g (6,8)
|
|
INTEGER*8 :: layout16 (6,16)
|
|
INTEGER*8 :: layout16g(6,16)
|
|
INTEGER*8 :: layout32 (6,32)
|
|
INTEGER*8 :: layout32g(6,32)
|
|
|
|
DATA layout1 / 1,64, 1,64, 1,512 /
|
|
|
|
DATA layout8 / 1,64, 1,64, 1, 64, &
|
|
1,64, 1,64, 65,128, &
|
|
1,64, 1,64, 129,192, &
|
|
1,64, 1,64, 193,256, &
|
|
1,64, 1,64, 257,320, &
|
|
1,64, 1,64, 321,384, &
|
|
1,64, 1,64, 385,448, &
|
|
1,64, 1,64, 449,512 /
|
|
|
|
DATA layout8g / 1,64, 1,64, 1, 65, &
|
|
1,64, 1,64, 64,129, &
|
|
1,64, 1,64, 128,193, &
|
|
1,64, 1,64, 192,257, &
|
|
1,64, 1,64, 256,321, &
|
|
1,64, 1,64, 320,385, &
|
|
1,64, 1,64, 384,449, &
|
|
1,64, 1,64, 448,512 /
|
|
|
|
DATA layout16 / 1,64, 1,32, 1, 64, &
|
|
1,64, 33,64, 1, 64, &
|
|
1,64, 1,32, 65,128, &
|
|
1,64, 33,64, 65,128, &
|
|
1,64, 1,32, 129,192, &
|
|
1,64, 33,64, 129,192, &
|
|
1,64, 1,32, 193,256, &
|
|
1,64, 33,64, 193,256, &
|
|
1,64, 1,32, 257,320, &
|
|
1,64, 33,64, 257,320, &
|
|
1,64, 1,32, 321,384, &
|
|
1,64, 33,64, 321,384, &
|
|
1,64, 1,32, 385,448, &
|
|
1,64, 33,64, 385,448, &
|
|
1,64, 1,32, 449,512, &
|
|
1,64, 33,64, 449,512 /
|
|
|
|
DATA layout16g/ 1,64, 1,33, 1, 65, &
|
|
1,64, 32,64, 1, 65, &
|
|
1,64, 1,33, 64,129, &
|
|
1,64, 32,64, 64,129, &
|
|
1,64, 1,33, 128,193, &
|
|
1,64, 32,64, 128,193, &
|
|
1,64, 1,33, 192,257, &
|
|
1,64, 32,64, 192,257, &
|
|
1,64, 1,33, 256,321, &
|
|
1,64, 32,64, 256,321, &
|
|
1,64, 1,33, 320,385, &
|
|
1,64, 32,64, 320,385, &
|
|
1,64, 1,33, 384,449, &
|
|
1,64, 32,64, 384,449, &
|
|
1,64, 1,33, 448,512, &
|
|
1,64, 32,64, 448,512 /
|
|
|
|
DATA layout32 / 1,32, 1,32, 1, 64, &
|
|
1,32, 33,64, 1, 64, &
|
|
33,64, 1,32, 1, 64, &
|
|
33,64, 33,64, 1, 64, &
|
|
1,32, 1,32, 65,128, &
|
|
1,32, 33,64, 65,128, &
|
|
33,64, 1,32, 65,128, &
|
|
33,64, 33,64, 65,128, &
|
|
1,32, 1,32, 129,192, &
|
|
1,32, 33,64, 129,192, &
|
|
33,64, 1,32, 129,192, &
|
|
33,64, 33,64, 129,192, &
|
|
1,32, 1,32, 193,256, &
|
|
1,32, 33,64, 193,256, &
|
|
33,64, 1,32, 193,256, &
|
|
33,64, 33,64, 193,256, &
|
|
1,32, 1,32, 257,320, &
|
|
1,32, 33,64, 257,320, &
|
|
33,64, 1,32, 257,320, &
|
|
33,64, 33,64, 257,320, &
|
|
1,32, 1,32, 321,384, &
|
|
1,32, 33,64, 321,384, &
|
|
33,64, 1,32, 321,384, &
|
|
33,64, 33,64, 321,384, &
|
|
1,32, 1,32, 385,448, &
|
|
1,32, 33,64, 385,448, &
|
|
33,64, 1,32, 385,448, &
|
|
33,64, 33,64, 385,448, &
|
|
1,32, 1,32, 449,512, &
|
|
1,32, 33,64, 449,512, &
|
|
33,64, 1,32, 449,512, &
|
|
33,64, 33,64, 449,512 /
|
|
|
|
DATA layout32G/ 1,33, 1,33, 1, 65, &
|
|
1,33, 32,64, 1, 65, &
|
|
32,64, 1,33, 1, 65, &
|
|
32,64, 32,64, 1, 65, &
|
|
1,33, 1,33, 64,129, &
|
|
1,33, 32,64, 64,129, &
|
|
32,64, 1,33, 64,129, &
|
|
32,64, 32,64, 64,129, &
|
|
1,33, 1,33, 128,193, &
|
|
1,33, 32,64, 128,193, &
|
|
32,64, 1,33, 128,193, &
|
|
32,64, 32,64, 128,193, &
|
|
1,33, 1,33, 192,257, &
|
|
1,33, 32,64, 192,257, &
|
|
32,64, 1,33, 192,257, &
|
|
32,64, 32,64, 192,257, &
|
|
1,33, 1,33, 256,321, &
|
|
1,33, 32,64, 256,321, &
|
|
32,64, 1,33, 256,321, &
|
|
32,64, 32,64, 256,321, &
|
|
1,33, 1,33, 320,385, &
|
|
1,33, 32,64, 320,385, &
|
|
32,64, 1,33, 320,385, &
|
|
32,64, 32,64, 320,385, &
|
|
1,33, 1,33, 384,449, &
|
|
1,33, 32,64, 384,449, &
|
|
32,64, 1,33, 384,449, &
|
|
32,64, 32,64, 384,449, &
|
|
1,33, 1,33, 448,512, &
|
|
1,33, 32,64, 448,512, &
|
|
32,64, 1,33, 448,512, &
|
|
32,64, 32,64, 448,512 /
|
|
nargs = IARGC ()
|
|
IF (nargs == 0) THEN
|
|
PRINT *, "Usage: H5BlockExampleF -w | -r [-g]"
|
|
CALL EXIT (1)
|
|
END IF
|
|
DO i = 1, nargs
|
|
CALL GETARG ( i, arg_str )
|
|
IF ( arg_str == "-r" ) THEN
|
|
opt_read = 1
|
|
ELSE IF ( arg_str == "-w" ) THEN
|
|
opt_write = 1
|
|
ELSE IF ( arg_str == "-g" ) THEN
|
|
opt_with_ghosts = 1
|
|
ELSE
|
|
PRINT *, "Illegal option ", arg_str, "\n"
|
|
PRINT *, "Usage: H5BlockExampleF -w | -r [-g]"
|
|
CALL EXIT (1)
|
|
END IF
|
|
END DO
|
|
|
|
#ifdef PARALLEL_IO
|
|
comm = MPI_COMM_WORLD
|
|
CALL MPI_Init ( mpi_err )
|
|
comm = MPI_COMM_WORLD
|
|
CALL MPI_Comm_rank ( comm, myproc, mpi_err)
|
|
CALL MPI_Comm_size ( comm, nprocs, mpi_err)
|
|
#endif
|
|
SELECTCASE ( nprocs )
|
|
CASE ( 1 )
|
|
fname = "blockfile1.h5"
|
|
layout = layout1 ( :, myproc+1 )
|
|
|
|
CASE ( 8 )
|
|
IF ( opt_with_ghosts == 1 ) THEN
|
|
fname = "blockfile8G.h5"
|
|
layout = layout8g ( :, myproc+1 )
|
|
ELSE
|
|
fname = "blockfile8.h5"
|
|
layout = layout8 ( :, myproc+1 )
|
|
END IF
|
|
|
|
CASE ( 16 )
|
|
IF ( opt_with_ghosts == 1 ) THEN
|
|
fname = "blockfile16G.h5"
|
|
layout = layout16g ( :, myproc+1 )
|
|
ELSE
|
|
fname = "blockfile16.h5"
|
|
layout = layout16 ( :, myproc+1 )
|
|
END IF
|
|
|
|
CASE ( 32 )
|
|
IF ( opt_with_ghosts == 1 ) THEN
|
|
fname = "blockfile32G.h5"
|
|
layout = layout32g ( :, myproc+1 )
|
|
ELSE
|
|
fname = "blockfile32.h5"
|
|
layout = layout32 ( :, myproc+1 )
|
|
END IF
|
|
|
|
CASE DEFAULT
|
|
PRINT *, "Run this test on 1, 8, 16 or 32 cores!"
|
|
#ifdef PARALLEL_IO
|
|
CALL MPI_Finalize
|
|
#endif
|
|
CALL EXIT (1)
|
|
END SELECT
|
|
|
|
h5_err = h5_set_verbosity_level ( 511_8 )
|
|
|
|
IF ( opt_write == 1 ) THEN
|
|
h5_err = write_file ( fname, myproc, comm, layout )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Faild to write file ', A, '!')", myproc, fname
|
|
END IF
|
|
|
|
ELSE IF ( opt_read == 1 ) THEN
|
|
h5_err = read_file ( fname, myproc, comm, layout )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Faild to read file ', A, '!')", myproc, fname
|
|
END IF
|
|
|
|
ENDIF
|
|
#ifdef PARALLEL_IO
|
|
PRINT "('[proc ', I3, ']: Cleanup.')", myproc
|
|
CALL MPI_Finalize
|
|
#endif
|
|
PRINT "('[proc ', I3, ']: Done.')", myproc
|
|
CALL EXIT (0)
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!!
|
|
CONTAINS
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!!
|
|
INTEGER*8 FUNCTION write_file ( fname, myproc, comm, layout )
|
|
IMPLICIT NONE
|
|
|
|
CHARACTER(LEN=*), INTENT(IN) :: fname
|
|
INTEGER, INTENT(IN) :: myproc
|
|
INTEGER, INTENT(IN) :: comm
|
|
INTEGER*8, INTENT(IN) :: layout(6)
|
|
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER*8 :: file
|
|
INTEGER*8 :: timestep = 1
|
|
|
|
PRINT "('[proc ', I3, ']: Open file for writing ...')", myproc
|
|
#ifdef PARALLEL_IO
|
|
file = h5_openw_par (fname, comm)
|
|
#else
|
|
file = h5_openw_par (fname)
|
|
#endif
|
|
IF ( file == 0 ) THEN
|
|
write_file = -1
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = h5_setstep ( file, timestep )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_file = h5_err
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = write_field ( file, myproc, layout )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_file = h5_err
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = write_attributes ( file )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_file = h5_err
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = h5_close ( file )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_file = h5_err
|
|
RETURN
|
|
ENDIF
|
|
|
|
write_file = 0
|
|
END FUNCTION write_file
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!!
|
|
INTEGER*8 FUNCTION write_field ( file, myproc, layout )
|
|
IMPLICIT NONE
|
|
|
|
INTEGER*8, INTENT(IN) :: file
|
|
INTEGER, INTENT(IN) :: myproc
|
|
INTEGER*8, INTENT(IN) :: layout(6)
|
|
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER*8 :: i, j, k
|
|
INTEGER*8 :: i_start
|
|
INTEGER*8 :: i_end
|
|
INTEGER*8 :: j_start
|
|
INTEGER*8 :: j_end
|
|
INTEGER*8 :: k_start
|
|
INTEGER*8 :: k_end
|
|
INTEGER*8 :: i_dims
|
|
INTEGER*8 :: j_dims
|
|
INTEGER*8 :: k_dims
|
|
REAL*8 :: value
|
|
|
|
REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data
|
|
|
|
i_start = layout(1)
|
|
i_end = layout(2)
|
|
j_start = layout(3)
|
|
j_end = layout(4)
|
|
k_start = layout(5)
|
|
k_end = layout(6)
|
|
i_dims = i_end - i_start + 1
|
|
j_dims = j_end - j_start + 1
|
|
k_dims = k_end - k_start + 1
|
|
|
|
ALLOCATE ( data (i_dims,j_dims, k_dims) )
|
|
|
|
PRINT "('[proc ', I3, ']: Defining layout for writing ...')", myproc
|
|
PRINT "('[proc ', I3, ']: ', I3, ':', I3, ', ', I3, ':', I3,', ', I3, ':', I3)", &
|
|
myproc, &
|
|
i_start, i_end, &
|
|
j_start, j_end, &
|
|
k_start, k_end
|
|
|
|
h5_err = h5bl_3d_setview ( file, i_start, i_end, j_start, j_end, k_start, k_end )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_field = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
DO i = 1, i_dims
|
|
DO j = 1, j_dims
|
|
DO k = 1, k_dims
|
|
value = (k-1) + 1000*(j-1) + 100000*(i-1) + 10000000*myproc
|
|
data(i,j,k) = value
|
|
END DO
|
|
END DO
|
|
END DO
|
|
|
|
PRINT "('[proc ', I3, ']: Writing field ...')", myproc
|
|
h5_err = h5bl_3d_write_scalar_field_r8 ( file, "TestField", data )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_field = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
write_field = 0
|
|
END FUNCTION write_field
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!!
|
|
INTEGER*8 FUNCTION write_attributes ( file )
|
|
IMPLICIT NONE
|
|
INTEGER*8, INTENT(IN) :: file
|
|
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER*8 :: h5_err = 0
|
|
CHARACTER(LEN=128) :: s_val
|
|
INTEGER*8 :: i8_val(1)
|
|
INTEGER*4 :: i4_val(1)
|
|
REAL*8 :: r8_val(1)
|
|
REAL*4 :: r4_val(1)
|
|
|
|
PRINT "('[proc ', I3, ']: Writing string attribute ...')", myproc
|
|
s_val = "42"
|
|
h5_err = h5bl_writefieldattrib_string ( file, "TestField", "TestString", s_val )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Writing int64 attribute ...')", myproc
|
|
i8_val(1) = 42
|
|
h5_err = h5bl_writefieldattrib_i8 ( file, "TestField", "TestInt64", i8_val, 1_8 )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Writing int32 attribute ...')", myproc
|
|
i4_val(1) = 42
|
|
h5_err = h5bl_writefieldattrib_i4 ( file, "TestField", "TestInt32", i4_val, 1_8 )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Writing float64 attribute ...')", myproc
|
|
r8_val(1) = 42.0
|
|
h5_err = h5bl_writefieldattrib_r8 ( file, "TestField", "TestFloat64", r8_val, 1_8 )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Writing float32 attribute ...')", myproc
|
|
r4_val(1) = 42.0
|
|
h5_err = h5bl_writefieldattrib_r4 ( file, "TestField", "TestFloat32", r4_val, 1_8 )
|
|
IF ( h5_err < 0 ) THEN
|
|
write_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
|
|
write_attributes = 0
|
|
END FUNCTION write_attributes
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!!
|
|
INTEGER*8 FUNCTION read_file ( fname, myproc, comm, layout )
|
|
IMPLICIT NONE
|
|
|
|
CHARACTER(LEN=*), INTENT(IN) :: fname
|
|
INTEGER, INTENT(IN) :: myproc
|
|
INTEGER, INTENT(IN) :: comm
|
|
INTEGER*8, INTENT(IN) :: layout(6)
|
|
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER*8 :: file
|
|
INTEGER*8 :: timestep = 1
|
|
|
|
PRINT "('[proc ', I3, ']: Open file for reading ...')", myproc
|
|
#ifdef PARALLEL_IO
|
|
file = h5_openr_par ( fname, comm )
|
|
#else
|
|
file = h5_openr (fname
|
|
#endif
|
|
if ( file == 0 ) THEN
|
|
read_file = -1
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = h5_setstep ( file, timestep )
|
|
IF ( h5_err < 0 ) THEN
|
|
read_file = -1
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = read_field ( file, myproc, layout )
|
|
IF ( h5_err < 0 ) THEN
|
|
read_file = -1
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = read_attributes ( file )
|
|
IF ( h5_err < 0 ) THEN
|
|
read_file = -1
|
|
RETURN
|
|
ENDIF
|
|
|
|
h5_err = h5_close ( file )
|
|
IF ( h5_err < 0 ) THEN
|
|
read_file = -1
|
|
RETURN
|
|
ENDIF
|
|
|
|
read_file = 0
|
|
END FUNCTION read_file
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
!!
|
|
INTEGER*8 FUNCTION read_field ( file, myproc, layout )
|
|
IMPLICIT NONE
|
|
|
|
INTEGER*8, INTENT(IN) :: file
|
|
INTEGER, INTENT(IN) :: myproc
|
|
INTEGER*8, INTENT(IN) :: layout(6)
|
|
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER*8 :: i, j, k
|
|
INTEGER*8 :: i_start, i_start2
|
|
INTEGER*8 :: i_end, i_end2
|
|
INTEGER*8 :: j_start, j_start2
|
|
INTEGER*8 :: j_end, j_end2
|
|
INTEGER*8 :: k_start, k_start2
|
|
INTEGER*8 :: k_end, k_end2
|
|
INTEGER*8 :: i_dims
|
|
INTEGER*8 :: j_dims
|
|
INTEGER*8 :: k_dims
|
|
INTEGER*8 :: ri, rj, rk, proc
|
|
REAL*8 :: value
|
|
|
|
REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data
|
|
|
|
i_start = layout(1)
|
|
i_end = layout(2)
|
|
j_start = layout(3)
|
|
j_end = layout(4)
|
|
k_start = layout(5)
|
|
k_end = layout(6)
|
|
i_dims = i_end - i_start + 1
|
|
j_dims = j_end - j_start + 1
|
|
k_dims = k_end - k_start + 1
|
|
|
|
ALLOCATE ( data (i_dims, j_dims, k_dims) )
|
|
|
|
PRINT "('[proc ', I3, ']: Defining layout for reading ...')", myproc
|
|
PRINT "('[proc ', I3, ']: ', I3, ':', I3, ', ', I3, ':', I3,', ', I3, ':', I3)", &
|
|
myproc, &
|
|
i_start, i_end, &
|
|
j_start, j_end, &
|
|
k_start, k_end
|
|
|
|
h5_err = h5bl_3d_setview ( file, i_start, i_end, j_start, j_end, k_start, k_end )
|
|
IF ( h5_err < 0 ) THEN
|
|
read_field = -1
|
|
RETURN
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Reading field ...')", myproc
|
|
h5_err = h5bl_3d_read_scalar_field_r8 ( file, "TestField", data )
|
|
IF ( h5_err < 0 ) THEN
|
|
read_field = -1
|
|
RETURN
|
|
END IF
|
|
|
|
DO i = 1, i_dims
|
|
DO j = 1, j_dims
|
|
DO k = 1, k_dims
|
|
value = (k-1) + 1000*(j-1) + 100000*(i-1) + 10000000*myproc
|
|
if ( data(i,j,k) /= value ) THEN
|
|
PRINT "('[proc ', I3, ']: error: data(',I4,',',I4,',',I4,') = ',F10.2,' /= ',F10.2)", &
|
|
i, j, k, data(i,j,k), value
|
|
read_field = -2
|
|
RETURN
|
|
END IF
|
|
END DO
|
|
END DO
|
|
END DO
|
|
read_field = 0
|
|
END FUNCTION read_field
|
|
|
|
INTEGER*8 FUNCTION read_attributes ( file )
|
|
IMPLICIT NONE
|
|
INTEGER*8, INTENT(IN) :: file
|
|
|
|
INCLUDE 'H5hutF.h'
|
|
|
|
INTEGER*8 :: h5_err = 0
|
|
CHARACTER(LEN=128) :: s_val
|
|
INTEGER*8 :: i8_val(1)
|
|
INTEGER*4 :: i4_val(1)
|
|
REAL*8 :: r8_val(1)
|
|
REAL*4 :: r4_val(1)
|
|
|
|
PRINT "('[proc ', I3, ']: Reading string attribute ...')", myproc
|
|
h5_err = h5bl_readfieldattrib_string ( file, "TestField", "TestString", s_val )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Oops ...')", myproc
|
|
read_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
IF ( s_val /= "42" ) THEN
|
|
PRINT "('[proc ', I3, ']: Error reading string attribute: Value is ', A, ' but should be 42')", &
|
|
myproc, s_val
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Reading int64 attribute ...')", myproc
|
|
h5_err = h5bl_readfieldattrib_i8 ( file, "TestField", "TestInt64", i8_val )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Oops ...')", myproc
|
|
read_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
IF ( i8_val(1) /= 42 ) THEN
|
|
PRINT "('[proc ', I3, ']: Error reading int64 attribute: Value is ', I8, ' but should be 42')", &
|
|
myproc, i8_val(1)
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Reading int32 attribute ...')", myproc
|
|
h5_err = h5bl_readfieldattrib_i4 ( file, "TestField", "TestInt32", i4_val )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Oops ...')", myproc
|
|
read_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
IF ( i4_val(1) /= 42 ) THEN
|
|
PRINT "('[proc ', I3, ']: Error reading int32 attribute: Value is ', I8, ' but should be 42')", &
|
|
myproc, i4_val(1)
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Reading float64 attribute ...')", myproc
|
|
h5_err = h5bl_readfieldattrib_r8 ( file, "TestField", "TestFloat64", r8_val )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Oops ...')", myproc
|
|
read_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
IF ( r8_val(1) /= 42.0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Error reading float64 attribute: Value is ', F10.2, ' but should be 42.0')", &
|
|
myproc, r8_val(1)
|
|
END IF
|
|
|
|
PRINT "('[proc ', I3, ']: Reading float32 attribute ...')", myproc
|
|
h5_err = h5bl_readfieldattrib_r4 ( file, "TestField", "TestFloat32", r4_val )
|
|
IF ( h5_err < 0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Oops ...')", myproc
|
|
read_attributes = h5_err
|
|
RETURN
|
|
END IF
|
|
IF ( r4_val(1) /= 42.0 ) THEN
|
|
PRINT "('[proc ', I3, ']: Error reading float32 attribute: Value is ', F10.2, ' but should be 42.0')", &
|
|
myproc, r4_val(1)
|
|
END IF
|
|
|
|
read_attributes = h5_err
|
|
END FUNCTION read_attributes
|
|
|
|
END PROGRAM
|