dbcsr_tas_multiply Subroutine

public recursive subroutine dbcsr_tas_multiply(transa, transb, transc, alpha, matrix_a, matrix_b, beta, matrix_c, optimize_dist, split_opt, filter_eps, flop, move_data_a, move_data_b, retain_sparsity, simple_split, result_index, unit_nr, log_verbose)

tall-and-skinny matrix-matrix multiplication. Undocumented dummy arguments are identical to arguments of dbcsr_multiply (see dbcsr_mm, dbcsr_multiply_generic).

Arguments

Type IntentOptional Attributes Name
character(len=1), intent(in) :: transa
character(len=1), intent(in) :: transb
character(len=1), intent(in) :: transc
type(dbcsr_scalar_type), intent(in) :: alpha
type(dbcsr_tas_type), intent(inout), TARGET :: matrix_a
type(dbcsr_tas_type), intent(inout), TARGET :: matrix_b
type(dbcsr_scalar_type), intent(in) :: beta
type(dbcsr_tas_type), intent(inout), TARGET :: matrix_c
logical, intent(in), optional :: optimize_dist

Whether distribution should be optimized internally. In the current implementation this guarantees optimal parameters only for dense matrices.

type(dbcsr_tas_split_info), intent(out), optional :: split_opt

optionally return split info containing optimal grid and split parameters. This can be used to choose optimal process grids for subsequent matrix multiplications with matrices of similar shape and sparsity.

real(kind=real_8), intent(in), optional :: filter_eps
integer(kind=int_8), intent(out), optional :: flop
logical, intent(in), optional :: move_data_a

memory optimization: move data to matrix_c such that matrix_a is empty on return memory optimization: move data to matrix_c such that matrix_b is empty on return for internal use only

logical, intent(in), optional :: move_data_b

memory optimization: move data to matrix_c such that matrix_a is empty on return memory optimization: move data to matrix_c such that matrix_b is empty on return for internal use only

logical, intent(in), optional :: retain_sparsity

memory optimization: move data to matrix_c such that matrix_a is empty on return memory optimization: move data to matrix_c such that matrix_b is empty on return for internal use only

logical, intent(in), optional :: simple_split

memory optimization: move data to matrix_c such that matrix_a is empty on return memory optimization: move data to matrix_c such that matrix_b is empty on return for internal use only

integer(kind=int_8), intent(out), optional, DIMENSION(:, :), ALLOCATABLE :: result_index
integer, intent(in), optional :: unit_nr

unit number for logging output

logical, intent(in), optional :: log_verbose

only for testing: verbose output