Adds two blocks
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_data_obj), | intent(inout) | :: | block_a |
Block to add to |
||
type(dbcsr_data_obj), | intent(in) | :: | block_b |
Block to add to block_a |
||
integer, | intent(in) | :: | lb_a | |||
integer, | intent(in) | :: | lb_b | |||
integer, | intent(in) | :: | len |
SUBROUTINE block_add_anytype_bounds(block_a, block_b, lb_a, lb_b, len)
!! Adds two blocks
TYPE(dbcsr_data_obj), INTENT(INOUT) :: block_a
!! Block to add to
TYPE(dbcsr_data_obj), INTENT(IN) :: block_b
!! Block to add to block_a
INTEGER, INTENT(IN) :: lb_a, lb_b, len
! ---------------------------------------------------------------------------
IF (careful_mod) THEN
IF (dbcsr_data_get_type(block_a) /= dbcsr_data_get_type(block_a)) &
DBCSR_ABORT("Mismatched data types.")
END IF
IF (dbcsr_data_get_size(block_b) < lb_b + len - 1) &
DBCSR_ABORT("Block B too small.")
IF (dbcsr_data_get_size(block_a) < lb_a + len - 1) &
DBCSR_ABORT("Block A too small.")
SELECT CASE (dbcsr_data_get_type(block_a))
CASE (dbcsr_type_real_4)
CALL block_add_s(block_a%d%r_sp(lb_a:), block_b%d%r_sp(lb_b:), len)
CASE (dbcsr_type_real_8)
CALL block_add_d(block_a%d%r_dp(lb_a:), block_b%d%r_dp(lb_b:), len)
CASE (dbcsr_type_complex_4)
CALL block_add_c(block_a%d%c_sp(lb_a:), block_b%d%c_sp(lb_b:), len)
CASE (dbcsr_type_complex_8)
CALL block_add_z(block_a%d%c_dp(lb_a:), block_b%d%c_dp(lb_b:), len)
CASE default
DBCSR_ABORT("Invalid data type!")
END SELECT
END SUBROUTINE block_add_anytype_bounds