The way the preconditioner is used can be specified in the Options.
Options.TypePrecond (default 'left')
The preconditioner can be used as explicit left preconditioner ('left'), as explicit right preconditioner ('right'), or implicitly ('impl').
In this subsection,
an MV (matrix vector multiplication) is an operation by A,
a PS (preconditioner solve) is a solution of the system , where is the preconditioner (i.e., the computation of Mv),
If explicit preconditioning is used, then there is an additional PS needed each time the correction equation is solved. The total number of PSs that jdqr will take is equal to the total number of MVs plus the number of Jacobi-Davidson steps (the number of outer iterations).
With implicit preconditioning the number of PSs reduces to the number of MVs plus the number of detected eigenvalues. However, implicit preconditioning requires more memory. For BiCGstab(ell), 2ell additional n-vectors have to be stored. If GMRES is requested as linear solver, then FGMRES is used, requiring storage of an additional n-vectors. Here is the maximum number of steps that GMRES needs to achieve the required residual reduction.
Implicit preconditioning in CG does not lead to additional memory requirements and jdqr uses implicit preconditioning whenever CG is selected as linear solver.
Implicit precondioning in MINRES and in SYMMLQ does not reduce the PSs. Moreover, it requires storage of one additional n-vector. However, with implicit preconditioning, there is no need specify the factors L and L' of the preconditioner M (). Therefore, jdqr uses implicit preconditioning also if MINRES or SYMMLQ is selected as linear solver.
The methods CG, MINRES and SYMMLQ require a positive definite preconditioner.
By storing the preconditioned vectors of the search subspace the number of PSs can be reduced even further. Then the number of PSs will be equal to the number of MVs. However, this strategy has not been implemented in jdqr.
There may be a slight deviation in the count of PSs and MVs if jdqr detects more than one eigenpair at the same iteration step.