SyTen

◆ exponentialTensorSym()

Tensor< 2 > syten::exponentialTensorSym ( Tensor< 2 > const &  in,
SDef const  prefactor,
Basis const &  full_basis = Basis() 
)

Builds the exponential \( e^{c A} \) of a hermitian rank-2 tensor \( A \) and a scalar prefactor \( c \).

The directions of the legs of the tensor are arbitrary, but you must ensure that the CGC space is proportional to the identity (i.e. one of the legs has to be incoming and the other has to be outgoing).

Explicitly diagonalises the dense tensor, hence this is only useful for small problems.

Remarks
Since \( e^0 \) is 1, but zero blocks are not stored in tensors explicitly, you should usually specify the 'full' basis of the input tensor, i.e. the basis in which you would like the exponential to live. Appropriately-sized identity blocks will then be added to the result.
Parameters
[in]intensor \( A \)
[in]prefactorscalar factor \( c \)
[in]full_basisthe full basis of the first tensor leg
Returns
exponential tensor \( e^{c A} \)

References dense(), syten::DenseTensor< rank, Scalar >::dim(), syten::DenseTensor< rank, Scalar >::dims, syten::Basis::dir, syten::Tensor< rank >::dirs, syten::Tensor< rank >::emplace_back(), syten::DenseEigensolver::DenseSymEigensolverBase< Type >::evalues, syten::DenseEigensolver::DenseSymEigensolverBase< Type >::evectors, std::exp(), syten::Tensor< rank >::getBasisMap(), hasCGC(), herm(), makeIdentity(), std::move(), normSqd(), syten::Tensor< rank >::push_back(), std::vector< T >::push_back(), syten::Tensor< rank >::reduce(), syten::Basis::size(), SYTEN_ASSERT, SYTEN_ASSERT_MSG, SYTEN_SMALL_THRESHOLD, transpose(), and underThreshold().

Referenced by syten::MPS::TEBD::build_local_T(), syten::IPEPS::exp(), syten::STensorImpl::exp(), and syten::MPS::SwappableTEBD::exponentiate_rank6_tensor().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: