pub struct TwoSiteStepResultBlockSparse<T: Scalar, S: Sector> {
pub eigenvalue: T::Real,
pub residual: T::Real,
pub iters: usize,
pub converged: bool,
pub u: BlockSparseTensor<T, S>,
pub s: BlockScalars<<T as Scalar>::Real, S>,
pub vt: BlockSparseTensor<T, S>,
pub trunc_err: T::Real,
}Expand description
Result of a single BlockSparse 2-site DMRG step: smallest local eigenpair plus the truncated-SVD split of its eigenvector.
u, s, vt are returned separately so the caller (the
BlockSparse sweep driver
super::sweep_2site) decides which side
absorbs S. Mirrors super::heff::TwoSiteStepResult for the
Dense path.
Debug is not derived because BlockSparse: !Debug; tests that
need to inspect the result destructure its fields directly.
Fields§
§eigenvalue: T::RealLocal-block variational minimum (smallest H_eff eigenvalue).
residual: T::RealLocal-eigensolver true residual ‖H v − λ v‖₂.
iters: usizeNumber of local-eigensolver iterations.
converged: boolWhether the local eigensolver reported convergence (Lanczos by its absolute true-residual test, ARPACK by its relative-tol stopping criterion).
u: BlockSparseTensor<T, S>Left singular vectors. Legs [chi_l, d_i, bond(In)],
flux = identity(). Left-canonical at axes (chi_l, d_i).
s: BlockScalars<<T as Scalar>::Real, S>Singular values per fused sector (descending within each sector).
vt: BlockSparseTensor<T, S>Right singular vectors. Legs [bond(Out), d_{i+1}, chi_r],
flux = psi_flux. Right-canonical at axes (d_{i+1}, chi_r).
trunc_err: T::RealFrobenius norm of the discarded singular values.
Auto Trait Implementations§
impl<T, S> Freeze for TwoSiteStepResultBlockSparse<T, S>
impl<T, S> RefUnwindSafe for TwoSiteStepResultBlockSparse<T, S>
impl<T, S> Send for TwoSiteStepResultBlockSparse<T, S>where
S: Send,
impl<T, S> Sync for TwoSiteStepResultBlockSparse<T, S>where
S: Sync,
impl<T, S> Unpin for TwoSiteStepResultBlockSparse<T, S>
impl<T, S> UnsafeUnpin for TwoSiteStepResultBlockSparse<T, S>
impl<T, S> UnwindSafe for TwoSiteStepResultBlockSparse<T, S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more