SUBROUTINE dbcsr_multiply_d(transa, transb, &
alpha, matrix_a, matrix_b, beta, matrix_c, &
first_row, last_row, first_column, last_column, first_k, last_k, &
retain_sparsity, filter_eps, &
flop)
CHARACTER(LEN=1), INTENT(IN) :: transa, transb
REAL(KIND=real_8), INTENT(IN) :: alpha
TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b
REAL(KIND=real_8), INTENT(IN) :: beta
TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c
INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, first_column, &
last_column, first_k, last_k
LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity
REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps
INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop
IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &
dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4 .AND. &
dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_4) THEN
CALL dbcsr_multiply_generic(transa, transb, &
dbcsr_scalar(REAL(alpha, real_4)), matrix_a, matrix_b, &
dbcsr_scalar(REAL(beta, real_4)), matrix_c, &
first_row, last_row, first_column, last_column, first_k, last_k, &
retain_sparsity, &
filter_eps=filter_eps, &
flop=flop)
ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. &
dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8 .AND. &
dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_8) THEN
CALL dbcsr_multiply_generic(transa, transb, &
dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, &
first_row, last_row, first_column, last_column, first_k, last_k, &
retain_sparsity, &
filter_eps=filter_eps, &
flop=flop)
ELSE
DBCSR_ABORT("This combination of data types NYI")
END IF
END SUBROUTINE dbcsr_multiply_d