KSPEKSM#

Implements the Extended Krylov Subspace Method (EKSM) for solving multiple shifted linear systems simultaneously using KSP.

Options Database Keys#

  • -ksp_eksm_shift shift - the scalar shift for the internal linear solves

  • -ksp_eksm_haptol tol - the tolerance for happy breakdown (exact convergence) of KSPEKSM

Note#

This solver should be used with no preconditioning, PCNONE. It is possible to use a preconditioner in the internal linear solvers, see KSPEKSMGetKSP(). To configure the internal linear solvers from the command line, use the -eksm_s_ and -eksm_m_ prefixes, respectively. For instance -ksp_type eksm -eksm_s_ksp_type bcgs -eksm_s_pc_type bjacobi -eksm_m_pc_type none.

Unlike restarted methods such as KSPGMRES, this solver keeps the whole extended Krylov basis, so the maximum iteration count set with KSPSetTolerances() also fixes the size of the workspace allocated in KSPSetUp(): two basis vectors per iteration and \(O(\textrm{max\_it}^2)\) scalars of dense storage. Choose it accordingly, and set it before KSPSetUp(); changing it afterwards makes the next KSPSolve() fail.

When a mass matrix \(M\) is given to MatCreateNestFromMultipleShifts(), the residual norm used by the convergence test and reported by -ksp_monitor is \(\|M^{-1}(b-(K+\sigma_i M)x_i)\|\) maximized over the shifts, not the unpreconditioned residual norm.

See Also#

KSP: Linear System Solvers, KSPCreate(), KSPSetType(), KSPType, KSP, KSPEKSM, KSPEKSMSetHapTol(), KSPEKSMSetKSP(), KSPEKSMSetShift(), MatCreateNestFromMultipleShifts(), MatCreateVecNestFromMultipleShifts()

Level#

beginner

Location#

src/ksp/ksp/impls/eksm/eksm.c


Index of all KSP routines
Table of Contents for all manual pages
Index of all manual pages