SyTen

◆ leftnorm() [1/2]

SRDef syten::MPS::State::leftnorm ( Index const  site,
Truncation  trunc = Truncation(),
State::DropNorm const  dropN = DropNorm::Yes,
State::DropUnmatched const  dropU = DropUnmatched::lr 
)

Left-normalises the tensor \(X_i\) on the specified site as \(X_i^{\sigma_i} \to U^\sigma S V\) and multiplies the corresponding transformation \(SV\) in the next tensor on the right \(X_{i+1} \to SV X_{i+1}\).

After normalisation, the contraction of \(X\) with its hermitian conjugate over the physical and left indices should give an identity matrix:

.-→[+]--→     .--→
|   ↓      =  |
'-←[ ]--←     '--←
Parameters
sitelocation of tensor to normalise
truncTruncation specification
dropNif tensors on all sites but site are normalised on entry, ensure that the state is normalised on exit.
dropUwhether, and if so, compared to where, drop unmatched blocks
Returns
the error incurred during truncation, calculated as \( sqrt(2 - 2 \sqrt(1-D)) \) where \( D \) is the squared sum of discarded singular values (see thesis for details) or -1 if no states have been kept.

If trunc is a default syten::Truncation object, a QR decomposition rather than a SVD is used.

References syten::clear(), dropUnmatched(), lInt, syten::MPS::norm(), syten::QR::qr(), rIdx, rInt, syten::singValSqdToError(), size(), syten::Tensor< rank >::size(), syten::SVD::svd(), SYTEN_ZNORM_THRESHOLD, uInt, and syten::underThreshold().

Referenced by syten::allSiteEntropy(), syten::mutualInfo::allSiteEntropy(), syten::MPS::apply_op_orthogonalise_fit(), syten::MPS::ProjectedPurification::correlator(), syten::mutualInfo::entropyOneSite(), syten::entropyOneSite(), syten::entropyTwoSite(), syten::mutualInfo::entropyTwoSite(), syten::Pyten::init_mps(), leftnorm(), syten::MPS::ProjectedPurification::local_expectation(), syten::MPS::Snapshots::Workspace::move_to_site(), syten::MPS::RDMs::OrbRDM::OrbRDM(), syten::MPS::orthogonalise_variational(), syten::MPS::TDVP::Worker::sync(), truncate(), truncateVariational(), syten::MPS::DMRG::Worker::Worker(), and syten::MPS::TDVP::Worker::Worker().

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