Template Function combine_via_lanczos¶
Defined in File matrix_continued_fraction.hpp
Function Documentation¶
-
template<typename T>
matrix_continued_fraction<T> combine_via_lanczos(const matrix_continued_fraction<T> &e, const matrix_continued_fraction<T> &h, int M0)¶ Combine two MCFs via a new block Lanczos run on their direct-sum operator.
Applies blockLanczos to the direct-sum operator T = T_e ⊕ T_h on a space of dimension N = (Me + Mh)*p, using p starting vectors whose level-0 components are W_e (e-sector) and W_h (h-sector). The resulting MCF has the same block size p as the individual electron and hole MCFs.
The Green function of the result satisfies: G_combined(z) = W_new^H F_new(z) W_new = G⁺(z) + (G⁻)ᵀ(z)
matching the convention of the default (non-combined) path. This is achieved by running blockLanczos on T_e ⊕ T_h* (T_h* = conj of T_h) and using conj(W_h) as h-sector starting vectors, so that the h contribution becomes conj(W_h)^H F_{T_h*} conj(W_h) = G_mcf_h^T = (G⁻)ᵀ For T=double (real Hamiltonian), T_h* = T_h and the modification is a no-op.
M0 must be at least Me + Mh to capture the full Krylov space of the combined operator (each sector independently contributes Me and Mh steps).
- Parameters:
e – Electron MCF (block size p, Me floors).
h – Hole MCF (block size p, Mh floors).
M0 – Maximum number of Lanczos steps; updated to actual count on return.