I am using the MKL's preconditioned FGMRES solver and I am trying to understand what exactly is the vector that FGMRES is asking to apply the preconditioner to. From the reference for the solver, Saad's Iterative methods for sparse linear systems, the left-preconditioned GMRES iteration (I'm assuming that FGMRES does left-preconditioning, please correct me if I'm wrong) involves computing at each step M^-1 A v_j. That is, FGMRES first asks to compute the matrix vector product A v_j, and then I would assume that FGMRES would ask to apply the preconditioner on that result, i.e. compute M^-1 A v_j. Only, when I compute the squared 2 norm of the vectors involved, I get that the vector on which FGMRES asks to apply the preconditioner (which I would assume to be A v_j) always has a unit norm, regardless of the norm of A v_j. What is this unit norm vector that FGMRES is asking the user to apply the preconditioner to?
Bump, I'm not an expert in iterative methods, just a user seeking more information, hopefully this question does not expose a gross misunderstanding of mine about the GMRES algorithm.
MKL uses flexible GMRES which allows the preconditioner to vary from step to step. In the FGMRES, preconditioner will be changed at each step, and according to Saad's doc, the flexible seems do changes bases on right precondition that the action of AM^−1 j on a vector v do not in the span of Vm+1. MKL provides Incomplete LU factorization for preconditioners, you could use ILU0 & ILUT to apply it for FGMRES solver, please refer this document for detailed implement steps:
Thank you Fiona, I had somehow missed the fact that F in FGMRES stands for Flexible, and it does say so in the documentation, my bad! Nevertheless I appreciate you clarifying this for me!