Preconditioning for saddle point problems

Barry Smith bsmith at mcs.anl.gov
Tue Apr 29 12:28:13 CDT 2008


   We are starting to provide this functionality in petsc-dev and it  
will be in the
next release.

   Barry

On Apr 29, 2008, at 6:54 AM, Jed Brown wrote:

> This issue arose while discussing improved preconditioners for a  
> colleague's
> libmesh-based ice flow model.  Since libmesh is one of several  
> finite element
> libraries that use PETSc as the backend, perhaps the abstraction  
> should be
> implemented in PETSc.
>
> As a model, consider the Stokes problem with mixed discretization in
> matrix form
>
> (1)  [A, B1'; B2, 0] [u; p] = [f; 0]
>
> where A is the viscous velocity system, B1' is a gradient and B2 is  
> divergence.
> The system (1) is indefinite so most preconditioners and many direct  
> methods
> will fail, however A is a uniformly elliptic operator so we can use  
> exotic
> preconditioners.  An effective preconditioner is to solve the Schur  
> complement
> problem
>
> (2)  S p = -B2 A^{-1} f
>
> where S = -B2 A^{-1} B1' is the Schur complement.  Once p is  
> determined, we can
> find u by solving
>
> (3)  A u = f - B1' p
>
> If we solve (2,3) exactly, this is the ultimate preconditioner and  
> we converge
> in one iteration.  It is important to note that applying S in (2)  
> requires
> solving a system with A.  This can be implemented in PETSc using a  
> MatShell
> object.  The classical Uzawa algorithm is a Richardson iteration on  
> this
> problem.  A better method (in my experience) is to precondition a  
> Krylov
> iteration (FGMRES) on (1) with an approximate solve of (2,3).  For  
> instance I
> have had success with 3 iterations of GMRES on (2) where the A^{-1}  
> in S is
> replaced by one V-cycle of algebraic multigrid and the A^{-1}  
> appearing
> explicitly in (2,3) are replaced by 4 iterations of GMRES  
> preconditioned with
> AMG.
>
> It is desirable to have all the details of this iteration  
> controllable from the
> command line.  For an example implementation (a spectral method) of  
> this
> problem, check out StokesMatMultXXX() and StokesPCApply() at
>
> http://github.com/jedbrown/spectral-petsc/tree/master/stokes.C
>
> Note that typically, S is preconditioned with the mass matrix (or a
> ``pressure-laplacian'' at higher Reynolds number) but since this  
> code uses a
> collocation method and is only intended for slow flow, there is no
> preconditioner for S.
>
>
> My question for the PETSc developers: how much of this can/should be  
> abstracted
> out?  While it's not difficult to code, perhaps there should at  
> least be an
> example.  If it would be useful, I can strip my experiment above  
> down to make it
> suitable.
>
>
> PS: An excellent review paper:
> @article{benzi2005nss,
> title={{Numerical solution of saddle point problems}},
> author={Benzi, M. and Golub, G.H. and Liesen, J.},
> journal={Acta Numerica},
> volume={14},
> pages={1--137},
> year={2005},
> publisher={Cambridge Univ Press}
> }
>
> Jed




More information about the petsc-dev mailing list