template<Rank summed, Rank frank, Rank srank, typename Scalar , std::enable_if_t<(int(frank)+int(srank) - 2 *int(summed) > 0), int > = 0>
GenericDenseTensor<frank + srank - 2 * summed, Scalar> syten::IdentityDenseTensorImpl::prodD |
( |
DenseTensor< frank, Scalar > const & |
a, |
|
|
IdentityDenseTensor< srank, Scalar > const & |
b, |
|
|
std::array< int, frank > const & |
c_a, |
|
|
std::array< int, srank > const & |
c_b, |
|
|
bool |
= false , |
|
|
EliminateZeros const |
ezeros = EliminateZeros::No , |
|
|
DenseProduct::TemporaryTransposeStorage< Scalar, frank, srank > * |
= nullptr |
|
) |
| |
|
inline |
Product of a standard dense tensor and an identity dense tensor.
Only the case of rank-3 identity dense tensors is special-cased here and done by merge
and split
above. Otherwise, the identity dense tensor is transformed into a standard dense tensor and the standard dense product is used.
References syten::Cuda::copy(), if_constexpr, merge(), and split().