Problem: I have translated Jacobian-Free Newton-Krylov solver written by C. T. Kelley to Fortran and now want to parallelize it on a shared-memory system with OpenMP. In addition, I want to precondition the system with ILU0 or ILUT preconditioners.
Considered solution: I want to use FGMRES from Intel MKL library - I expect that it is highly optimized and threaded. Since it does not support complex numbers, I will follow Intel's solution to split the problem:
$$ \left(\array{A_r & -A_i \\A_i &A_r}\right)\left(\array{x_r\\x_i}\right)=\left(\array{f_r\\f_i}\right) $$
For ILU0 precondition, I have decided to use a piece of code from Yousef Saad's book Iterative Methods for Sparse Linear Systems Second Edition and parallelize it.
Then I will use ?getri
from MKL which "Computes the inverse of an LU-factored general matrix".
Question: Does it sounds reasonable? Any other solver for shared-memory systems?