I guess that replacing the QUICK advection and Crank-Nicolson by low-order schemes (like central difference advection and Laasonen time integration scheme) in the derivation of the preconditioner should be enough to improve the krylov solver.

There are two approach to devise a preconditioner :
   1)  Find a matrix M that approximates A, and for which solving a system is easier than solving with A.
   2)  Find a matrix M that approximates A^{-1}, so that only multiplication by M is needed.
Which approach should be used with the krylov solvers provided by scipy ? For example, if I want to use Jacobi preconditioner, should I use  M = diag(A) or M = 1/diag(A) ?

For the moment, I am working with regular cartesian grid, so SSOR is fine and could be used because the matrix is SPD. In the future, I would like to extend my work to unstructured grid and I am not sure that the jacobian will still be symetric. Which preconditioner could be used in this case in a matrix-free manner ?

Thanks

Christine

2010/3/29 Darcoux Christine <bouloumag@gmail.com>
I am developping a Jacobian-Free Newton-Krylov code to solve the Navier Stokes equations. In this code, the product of the Jacobian matrix with a given vector is represented by the matvec method of a "LinearOperator" object. The scipy.sparse.linalg.isolve.gmres method can takes an optional preconditioner as parameter which is either an object "LinearOperator" or a matrix. However, the scipy documentation does not explain how one can form this preconditioner in a (ideally) matrix-free manner given only the matvec method of the jacobian.

Any suggestions on this would be very appreciated.

Thanks,

Christine