Prepare tensor for contraction: redistribute to a 2d format which can be contracted by matrix multiplication. This routine reshapes the two largest of the three tensors. Redistribution is avoided if tensors already in a consistent layout.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_t_type), | intent(inout), | TARGET | :: | tensor1 |
tensor 1 in |
|
type(dbcsr_t_type), | intent(inout), | TARGET | :: | tensor2 |
tensor 2 in |
|
type(dbcsr_t_type), | intent(out), | POINTER | :: | tensor1_out |
tensor 1 out tensor 2 out |
|
type(dbcsr_t_type), | intent(out), | POINTER | :: | tensor2_out |
tensor 1 out tensor 2 out |
|
integer, | intent(in), | DIMENSION(:) | :: | ind1_free |
indices of tensor 1 that are "free" (not linked to any index of tensor 2) |
|
integer, | intent(in), | DIMENSION(:) | :: | ind1_linked |
indices of tensor 1 that are linked to indices of tensor 2 1:1 correspondence with ind1_linked |
|
integer, | intent(in), | DIMENSION(:) | :: | ind2_free |
indices of tensor 1 that are "free" (not linked to any index of tensor 2) |
|
integer, | intent(in), | DIMENSION(:) | :: | ind2_linked |
indices of tensor 1 that are linked to indices of tensor 2 1:1 correspondence with ind1_linked |
|
character(len=1), | intent(out) | :: | trans1 |
transpose flag of matrix rep. of tensor 1 transpose flag of matrix rep. tensor 2 |
||
character(len=1), | intent(out) | :: | trans2 |
transpose flag of matrix rep. of tensor 1 transpose flag of matrix rep. tensor 2 |
||
logical, | intent(out) | :: | new1 |
whether a new tensor 1 was created whether a new tensor 2 was created |
||
logical, | intent(out) | :: | new2 |
whether a new tensor 1 was created whether a new tensor 2 was created |
||
integer, | intent(out) | :: | ref_tensor | |||
logical, | intent(in), | optional | :: | nodata1 |
don't copy data of tensor 1 don't copy data of tensor 2 |
|
logical, | intent(in), | optional | :: | nodata2 |
don't copy data of tensor 1 don't copy data of tensor 2 |
|
logical, | intent(inout), | optional | :: | move_data_1 |
memory optimization: transfer data s.t. tensor1 may be empty on return memory optimization: transfer data s.t. tensor2 may be empty on return |
|
logical, | intent(inout), | optional | :: | move_data_2 |
memory optimization: transfer data s.t. tensor1 may be empty on return memory optimization: transfer data s.t. tensor2 may be empty on return |
|
logical, | intent(in), | optional | :: | optimize_dist |
experimental: optimize distribution |
|
integer, | intent(in), | optional | :: | unit_nr |
output unit |