SRDef syten::SVD::svd | ( | Tensor< rank > const & | in, |
Index | uncombinedLeg, | ||
Tensor< rank > & | u, | ||
Tensor< 2 > & | s, | ||
Tensor< 2 > & | v, | ||
Truncation const & | trunc = Truncation() , |
||
DecompRescaleCGC const | rescaleCGC = DecompRescaleCGC::Yes , |
||
GaugeFixSVD | gf = GaugeFixSVD::n() , |
||
Pick_U_SV | = Pick_U_SV() , |
||
SourceLocation | location = SourceLocation::current() |
||
) |
Left-normalising SVD.
[in] | in | input tensor to decompose into in → u s v |
[in] | uncombinedLeg | leg of in /u which is not combined and at which s attaches |
[out] | u | output tensor with same rank as in |
[out] | s | output singular value tensor with rank 2 |
[out] | v | output unitary tensor with rank 2 |
[in] | trunc | Truncation specification |
[in] | rescaleCGC | whether to rescale the CGC tensors to result in identities matrices when contracted |
gf[in] | if set to GaugeFixSVD::y(), the gauge freedom of the complex SVD is fixed. | |
[in] | location | Callsite identifier. |
u
with the first leg of s
and the second leg of s
with the first leg of v
will give the input tensor again (modulo discarded singular values).u
with its complex-conjugated self over all indices but the uncombined leg gives an identity matrix.v
is already hermitian conjugated so you don’t have to do that.Symmetry-incured multiplicity on the uncombined leg
Symmetry-incured multiplicity on the uncombined leg
References syten::abs(), std::vector< T >::begin(), syten::Tensor< rank >::clear(), std::clock(), syten::Cuda::copy(), std::chrono::duration::count(), syten::Tensor< rank >::dense_is_standard(), syten::Tensor< rank >::dirs, syten::Tensor< rank >::empty(), std::vector< T >::end(), std::fill(), syten::hasCGC(), syten::isZero(), syten::logGW(), syten::makeIdentity(), std::max(), std::move(), syten::No, std::chrono::high_resolution_clock::now(), syten::DenseIter< rank >::offset(), syten::prodS(), syten::Tensor< rank >::push_back(), std::vector< T >::push_back(), syten::rank(), syten::real(), syten::Tensor< rank >::reduce(), syten::Tensor< rank >::reserve(), std::vector< T >::resize(), syten::Tensor< rank >::return_as_dense_standard(), std::vector< T >::size(), std::sort(), syten::sqrt(), svd(), SYTEN_ASSERT_MSG, SYTEN_SINGLE_ARG, SYTEN_ZERO_THRESHOLD, syten::EnvVars::tensor_time, syten::tensorSortBuckets(), and syten::validateCGCContraction().
Referenced by syten::IPEPS::FullUpdate::apply_op(), syten::MPS::apply_op_itrunc(), syten::MPS::block_entropies(), syten::MPS::TEBD::build_local_T(), syten::IPEPS::cond_number(), syten::MPS::BasisTransformation::ModeTransformation::cost_function(), syten::MPS::BasisTransformation::ModeTransformation::cost_function_global(), syten::MPS::fine_grain(), syten::IPEPS::gauge_fix(), syten::MPS::Lat::SU3::genSpinLattice(), syten::MPS::TDVP::Worker::gse_create_expanded(), syten::IPEPS::horizontal_simple_update(), syten::Pyten::init_tensor_decomp(), syten::MPS::BasisTransformation::ModeTransformation::initial_cost(), syten::MPS::BasisTransformation::ModeTransformation::initial_cost_global(), syten::IPEPS::inv_qr_to_back_r(), syten::MPS::State::leftnorm(), syten::MPS::TEBD::TpsWrapper::leftnorm_w_lambda(), syten::MPS::LBOState::leftnormM(), syten::MPS::TDVP::Worker::locally_expand_bond(), syten::MPS::TDVP::Worker::normL(), syten::MPS::TDVP::Worker::normR(), syten::MPS::LBOState::physnormM(), syten::MPS::LBOState::physnormV(), syten::pseudo_invert(), syten::MPS::State::rightnorm(), syten::MPS::LBOState::rightnormM(), syten::MPS::schmidt_decompositions(), syten::MPS::schmidt_values(), syten::MPS::SwappableTEBD::split_rank6_into_mpos(), syten::MPS::split_rank_4_into_mps_cnorm(), syten::MPS::split_rank_4_into_mps_lnorm(), syten::MPS::split_rank_4_into_mps_rnorm(), syten::STensorImpl::svd(), svd(), syten::MPS::TDVP::Worker::sweepLeftTwoSite(), syten::MPS::TDVP::Worker::sweepRightTwoSite(), syten::MPS::TDVP::Worker::sync(), syten::MPS::BasisTransformation::ModeTransformation::transform_accepted(), syten::MPS::BasisTransformation::ModeTransformation::transform_accepted_global(), syten::IPEPS::vertical_simple_update(), syten::IPEPS::vertical_simple_update_remover(), syten::MPS::DMRG::Worker::Worker(), and syten::MPS::TDVP::Worker::Worker().