SyTen

◆ sp_convergence()

template<typename Vec >
SRDef syten::EnergyTruncation::EnergyTruncationPolicy::sp_convergence ( DenseTensor< 2, SDef mat,
EnergyWindow const &  energy_window,
EnergyWindow const &  relative_energy_window,
SRDef const &  truncation_threshold,
std::vector< Vec > const &  krylov 
)
inline

Tests convergence of energy truncation via i) evaluation of expansion coefficients <e_i|kv_1> of initial state |kv_1> restricted to eigenstates of effective Hamiltonian in given energy window (e_i \in (e_{min}, e_{max})) ii) convergence criterion is obtained by evaluating norm of coefficient vector.

Currently we are assuming that the krylov vectors or orthogonal.

If one finds this assumption to be invalid, please exchange coefficient calculation for:

Vec candidate = memoizedMatrix[{i,0}]*krylov[0]; for (Index j{1}; j != memoizedMatrix.dim(2); j++){ candidate += memoizedMatrix[{i,j}]*krylov[j]; } memoizedComplementaryCoeffs[i] = overlap(candidate, krylov.front());

theoretically, one can use this to project out degenerate energies by simply summing up the remaining weights.

THE ACTUAL PROJECTION DOES NOT MAKE THIS ASSUMPTION!

References syten::abs(), syten::DenseTensor< rank, Scalar >::dim(), std::distance(), syten::DenseEigensolver::DenseSymEigensolverBase< Type >::evalues, syten::DenseEigensolver::DenseSymEigensolverBase< Type >::evectors, std::lower_bound(), std::max(), memoizedCoeffs, memoizedComplementaryCoeffs, memoizedMatrix, std::min(), std::move(), syten::normSqd(), syten::sqrt(), and syten::vsplit().

Referenced by syten::EnergyTruncation::Standard< Matrix, Vector, OrthoPolicy, EnergyTruncationPolicy >::apply_energy_truncation().

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