I need to solve Ax=b, but I realize that even if it is sparse, storing the matrix coefficients of my problem will take too much memory. So now I'm considering using a matrix-free method, because the same coefficients appear a lot of time in the matrix, so I could use my own private storage scheme (and increase cache efficiency by the way).

I'm looking at petsc, which provides interface for such matrix-free linear operators, but what I don't really understand, is how the preconditioner is then computed by petsc ? Or should I provide my own preconditioner ? If so, are there tools or recipies available to construct preconditioner from a matrix-free linear operator ?

More information about my operator: it is unsymmetric, not diagonally dominant, but dominated by a few sidebands (but it is not banded diagonal either)


1 Answer 1


You'll need to roll your own preconditioner. If you know the matrix, it should not be terribly difficult to implement something like an SSOR preconditioner, for example. If you know something else about the problem, for example that it comes from a PDE whose solution can be well approximated on a coarser mesh, then you can also consider constructing preconditioners by restricting the problem to the coarser mesh, solving there, and extending the solution back out to the original one. Restriction and prolongation can be implemented as matrix-free operations.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.