dumps and retrieves a dbcsr matrix, and checks a checksum
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type) | :: | matrix_a |
matrix to be written |
|||
integer | :: | io_unit |
unit for status updates |
SUBROUTINE test_binary_io(matrix_a, io_unit)
!! dumps and retrieves a dbcsr matrix, and checks a checksum
TYPE(dbcsr_type) :: matrix_a
!! matrix to be written
INTEGER :: io_unit
!! unit for status updates
CHARACTER(LEN=100) :: file_name
REAL(kind=real_8) :: norm, post, pre
TYPE(dbcsr_type) :: matrix_a_read
file_name = "test_dbcsr_binary_io.dat"
pre = dbcsr_checksum(matrix_a, pos=.TRUE.)
CALL dbcsr_binary_write(matrix_a, file_name)
! needs a new matrix, reading into matrix_a does not work
CALL dbcsr_binary_read(file_name, distribution=dbcsr_distribution(matrix_a), &
matrix_new=matrix_a_read)
post = dbcsr_checksum(matrix_a_read, pos=.TRUE.)
CALL dbcsr_add(matrix_a_read, matrix_a, -1.0_dp, 1.0_dp)
norm = dbcsr_frobenius_norm(matrix_a_read)
IF (io_unit > 0) THEN
WRITE (io_unit, *) "checksums", pre, post
WRITE (io_unit, *) "difference norm", norm
END IF
IF (norm /= 0.0_dp) &
DBCSR_ABORT("bug in binary io")
CALL dbcsr_release(matrix_a_read)
END SUBROUTINE test_binary_io