41 eps_filter, retain_sparsity)
42 CHARACTER(LEN=1),
INTENT(IN) :: trans_a_left, trans_a_right
43 TYPE(
dbcsr_type),
INTENT(INOUT) :: matrix_a, matrix_b, matrix_c
44 REAL(kind=
dp),
INTENT(IN) :: eps_filter
45 LOGICAL,
INTENT(IN),
OPTIONAL :: retain_sparsity
47 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dbcsr_contract_ABA'
50 LOGICAL :: my_retain_sparsity
53 CALL timeset(routinen, handle)
55 my_retain_sparsity = .false.
56 IF (
PRESENT(retain_sparsity)) my_retain_sparsity = retain_sparsity
60 IF (trans_a_left ==
"N" .AND. trans_a_right ==
"T")
THEN
63 0.0_dp, work, filter_eps=eps_filter)
65 0.0_dp, matrix_c, filter_eps=eps_filter, &
66 retain_sparsity=my_retain_sparsity)
67 ELSE IF (trans_a_left ==
"T" .AND. trans_a_right ==
"N")
THEN
70 0.0_dp, work, filter_eps=eps_filter)
72 0.0_dp, matrix_c, filter_eps=eps_filter, &
73 retain_sparsity=my_retain_sparsity)
75 cpabort(
"Unsupported transposition pair in dbcsr_contract_ABA")
subroutine, public dbcsr_multiply(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)
...
subroutine, public dbcsr_contract_aba(trans_a_left, trans_a_right, matrix_a, matrix_b, matrix_c, eps_filter, retain_sparsity)
Computes C=A B A^T or C=A^T B A for DBCSR matrices.