Template Function combine_via_lanczos

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.