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(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