# OpenMP threaded nonlinear solver for complex numbers

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?