Interface for dbcsr_add
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type), | intent(inout) | :: | matrix_a | |||
type(dbcsr_type), | intent(in) | :: | matrix_b | |||
real(kind=real_8), | intent(in) | :: | alpha_scalar | |||
real(kind=real_8), | intent(in) | :: | beta_scalar |
SUBROUTINE dbcsr_add_d(matrix_a, matrix_b, alpha_scalar, beta_scalar)
!! Interface for dbcsr_add
TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a
TYPE(dbcsr_type), INTENT(IN) :: matrix_b
REAL(real_8), INTENT(IN) :: alpha_scalar, beta_scalar
CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_d'
INTEGER :: handle
CALL timeset(routineN, handle)
IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. &
dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8) THEN
CALL dbcsr_add_anytype(matrix_a, matrix_b, &
alpha_scalar=dbcsr_scalar(alpha_scalar), &
beta_scalar=dbcsr_scalar(beta_scalar))
ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &
dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN
CALL dbcsr_add_anytype(matrix_a, matrix_b, &
alpha_scalar=dbcsr_scalar(REAL(alpha_scalar, real_4)), &
beta_scalar=dbcsr_scalar(REAL(beta_scalar, real_4)))
ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. &
dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN
CALL dbcsr_add_anytype(matrix_a, matrix_b, &
alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, 0, real_4)), &
beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, 0, real_4)))
ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_8 .AND. &
dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_8) THEN
CALL dbcsr_add_anytype(matrix_a, matrix_b, &
alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, 0, real_8)), &
beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, 0, real_8)))
ELSE
DBCSR_ABORT("Invalid combination of data type, NYI")
END IF
CALL timestop(handle)
END SUBROUTINE dbcsr_add_d