Matrix free preconditioning

Jed Brown jed at
Tue Oct 14 08:18:01 CDT 2008

On Tue 2008-10-14 14:26, Tim Kroeger wrote:
> Can you give me some advice on possible/recommended choices of  
> preconditioners in the case of matrix free ksp?  I create my matrix  
> using MatCreateShell().  The matrix is not symmetric.  I understand that 
> the typical preconditioners like ILU or JACOBI will not work since they 
> require access to the matrix entries.  Is there any good precoditioner 
> that will work?

The short answer is PCShell.  That is, you have to know something about
the matrix and can't expect any black-box approach to work.

I assume your matrix comes from the rank-1 update you brought up
recently on the libmesh list?  That is

  B = A + u v'

for where A is an explicit matrix and u,v are vectors.  Did you try the
rank-1 update I suggested?  In detail, let A^ be an approximate inverse
of A (i.e. an application of any standard preconditioner) and form a
preconditioner for B as

  B^ = A^ - alpha w v' A^


  w = A^ u
  alpha = 1 + v' w.

If A^ is an exact inverse (i.e. -pc_type lu), then B^ is an exact
inverse.  This shell preconditioner requires one application of the
preconditioner for A in PCSetUp (you implement a setup function which
stores `w' and `alpha') and one rank-1 update per application.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <>

More information about the petsc-users mailing list