Hello, every one .
I want to implement the ILUT preconditioned FGMRES RCI to solve a large Poisson equation in a lab CFD code which based on non-uniform cartesian grids and standard 7-point discretization scheme . I read the MKL Developer Reference and example : dcsrilut_exampl2.f90 and understand the RCI mechanism , GMRES method and ILU well, but I am still confused about the process of the preconditioned FGMRES method.
According to my understanding , to use ILUT+FGMRES, the user should first generate a CSR matrix for both A(csrA) and precondition matrix B(csrL) .Next, MKL invokes the preconditioned version of FGMRES by setting ipar(11)=1 and then performs an additional matrix(csrL)-vector multiplication step (RCI_request =3) to precondition the rhs , which probably correspond : B.inv() * b in GMRES.
What confuses me is that where is the preconditioning step of coefficients A? Shouldn't there exists a B.inv() * A step in the (RCI_request =3) (Not clear whether right or left precondition is adopted in MKL) ? Actually , I am expecting some code like :
call mkl_sparse_d_spmm(op, B.inv() , csrA , reconditioned_A_CSR)
following the preconditioning of vector TMP(ipar(22)) .
I also notice the RCI_request =1 performs a set of A*V_i operations with the input of csrA, not csrA and csrL. So, How the preconditioning of A is handled in FGMRES is not clear to me at all.
My guess is that MKL performs the precondition of A automatically after precondition of vector tmp(ipar(22)) ,and then overrides the original A matrix with the same variable name , so that explains why the RCI_request=1 part remain unchanged in precondition version. Can anyone confirm this or explains it for me? Thanks a lot !