19#include "./base/base_uses.f90"
26 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'gw_utils_dbcsr'
39 TYPE(
dbcsr_type),
INTENT(INOUT) :: matrix_a, matrix_b, matrix_c
40 REAL(kind=
dp),
INTENT(IN) :: factor
42 CHARACTER(LEN=*),
PARAMETER :: routinen =
'hadamard_product'
44 INTEGER :: handle, icol, irow
46 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: block_b, block_c
49 CALL timeset(routinen, handle)
57 block_c(:, :) = factor*block_c(:, :)*block_b(:, :)
59 block_c(:, :) = 0.0_dp
75 TYPE(
dbcsr_type),
INTENT(INOUT) :: matrix_a, matrix_b
76 REAL(kind=
dp),
INTENT(IN) :: factor
78 CHARACTER(LEN=*),
PARAMETER :: routinen =
'hadamard_product_inplace'
80 INTEGER :: handle, icol, irow
82 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: block_a, block_b
85 CALL timeset(routinen, handle)
92 block_a(:, :) = factor*block_a(:, :)*block_b(:, :)
94 block_a(:, :) = 0.0_dp
113 eps_filter, retain_sparsity)
114 CHARACTER(LEN=1),
INTENT(IN) :: trans_a_left, trans_a_right
115 TYPE(
dbcsr_type),
INTENT(INOUT) :: matrix_a, matrix_b, matrix_c
116 REAL(kind=
dp),
INTENT(IN) :: eps_filter
117 LOGICAL,
INTENT(IN),
OPTIONAL :: retain_sparsity
119 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dbcsr_contract_ABA'
122 LOGICAL :: my_retain_sparsity
125 CALL timeset(routinen, handle)
127 my_retain_sparsity = .false.
128 IF (
PRESENT(retain_sparsity)) my_retain_sparsity = retain_sparsity
132 IF (trans_a_left ==
"N" .AND. trans_a_right ==
"T")
THEN
135 0.0_dp, work, filter_eps=eps_filter)
137 0.0_dp, matrix_c, filter_eps=eps_filter, &
138 retain_sparsity=my_retain_sparsity)
139 ELSE IF (trans_a_left ==
"T" .AND. trans_a_right ==
"N")
THEN
142 0.0_dp, work, filter_eps=eps_filter)
144 0.0_dp, matrix_c, filter_eps=eps_filter, &
145 retain_sparsity=my_retain_sparsity)
147 cpabort(
"Unsupported transposition pair in dbcsr_contract_ABA")
151 CALL timestop(handle)
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_get_block_p(matrix, row, col, block, found, row_size, col_size)
...
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_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset, transposed)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
subroutine, public dbcsr_release(matrix)
...
Common DBCSR matrix operations used by GW modules.
subroutine, public hadamard_product(matrix_a, matrix_b, matrix_c, factor)
Computes the scaled element-wise product C = factor (A ◦ B) while preserving the block structure of A...
subroutine, public hadamard_product_inplace(matrix_a, matrix_b, factor)
Form A = factor * (A element-wise B) without changing A's block structure.
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.
Defines the basic variable types.
integer, parameter, public dp