The hybrid solver is designed to detect whether a multigrid preconditioner is needed when solving a linear system and possibly avoid the expensive setup of a preconditioner if a system can be solved efficiently with a diagonally scaled Krylov solver, e.g. a strongly diagonally dominant system. It first uses a diagonally scaled Krylov solver, which can be chosen by the user (the default is conjugate gradient, but one should use GMRES if the matrix of the linear system to be solved is nonsymmetric). It monitors how fast the Krylov solver converges. If there is not sufficient progress, the algorithm switches to a preconditioned Krylov solver.

If used through the Struct interface, the solver is called StructHybrid and can be used with the preconditioners SMG and PFMG (default). It is called ParCSRHybrid, if used through the IJ interface and is used here with BoomerAMG. The user can determine the average convergence speed by setting a convergence tolerance \(0 \leq \theta < 1\) via the routine HYPRE_StructHybridSetConvergenceTol or HYPRE_ParCSRHybridSetConvergenceTol. The default setting is 0.9.

The average convergence factor \(\rho_i = \left({{\| r_i \|} \over {\| r_0 \|}}\right)^{1/i}\) is monitored within the chosen Krylov solver, where \(r_i = b - Ax_{i}\) is the \(i\)-th residual. Convergence is considered too slow when

\[\left( 1 - {{|\rho_i - \rho_{i-1}|} \over { \max(\rho_i, \rho_{i-1})}} \right) \rho_i > \theta .\]

When this condition is fulfilled the hybrid solver switches from a diagonally scaled Krylov solver to a preconditioned solver.