dbcsr_t_contract_expert Subroutine

private subroutine dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, contract_1, notcontract_1, contract_2, notcontract_2, map_1, map_2, bounds_1, bounds_2, bounds_3, optimize_dist, pgrid_opt_1, pgrid_opt_2, pgrid_opt_3, filter_eps, flop, move_data, retain_sparsity, nblks_local, result_index, unit_nr, log_verbose)

expert routine for tensor contraction. For internal use only.


Type IntentOptional Attributes Name
type(dbcsr_scalar_type), intent(in) :: alpha
type(dbcsr_t_type), intent(inout), TARGET :: tensor_1
type(dbcsr_t_type), intent(inout), TARGET :: tensor_2
type(dbcsr_scalar_type), intent(in) :: beta
type(dbcsr_t_type), intent(inout), TARGET :: tensor_3
integer, intent(in), DIMENSION(:) :: contract_1
integer, intent(in), DIMENSION(:) :: notcontract_1
integer, intent(in), DIMENSION(:) :: contract_2
integer, intent(in), DIMENSION(:) :: notcontract_2
integer, intent(in), DIMENSION(:) :: map_1
integer, intent(in), DIMENSION(:) :: map_2
integer, intent(in), optional, DIMENSION(2, SIZE(contract_1)) :: bounds_1
integer, intent(in), optional, DIMENSION(2, SIZE(notcontract_1)) :: bounds_2
integer, intent(in), optional, DIMENSION(2, SIZE(notcontract_2)) :: bounds_3
logical, intent(in), optional :: optimize_dist
type(dbcsr_t_pgrid_type), intent(out), optional, POINTER :: pgrid_opt_1
type(dbcsr_t_pgrid_type), intent(out), optional, POINTER :: pgrid_opt_2
type(dbcsr_t_pgrid_type), intent(out), optional, POINTER :: pgrid_opt_3
real(kind=real_8), intent(in), optional :: filter_eps
integer(kind=int_8), intent(out), optional :: flop
logical, intent(in), optional :: move_data
logical, intent(in), optional :: retain_sparsity
integer, intent(out), optional :: nblks_local

number of local blocks on this MPI rank

integer, intent(out), optional, DIMENSION(dbcsr_t_max_nblks_local(tensor_3), ndims_tensor(tensor_3)) :: result_index

get indices of non-zero tensor blocks for tensor_3 without actually performing contraction this is an estimate based on block norm multiplication

integer, intent(in), optional :: unit_nr
logical, intent(in), optional :: log_verbose