My system is a symmetric FE problem with lagrange multipliers (e.g. incompressible Stokes' flow):

\begin{pmatrix}A & B^T \\ B & C\end{pmatrix}

where $C = 0$ is the typical case (I have even made sure that the equations are numbered so that the Lagrange multipliers appear last ). The system is quite large (+100k lines).

Having read the answer to this question, I was given the impression that there are suitable preconditioners that can be used for mixed FE-problems.

Using PETSc, I've managed to solve the system with MINRES (-ksp_type minres -pc_type none -mat_type sbaij ), although the precision isn't great (causing several Newton-iterations for a linear problem). No other combination of preconditioner and ksp-solver seems to work.

Is there any combination of flags for PETSc that will solve this system faster than with just MINRES?

  • 1
    $\begingroup$ Welcome to SciComp SE! Your question is well posed in terms of clearity and generality. Only one sentence is somewhat unclear or incomplete: What do you mean is caused by the inexact computations? $\endgroup$
    – Jan
    May 20 '13 at 14:55
  • 1
    $\begingroup$ I forgot to finish the sentence! I hope it is clear now. $\endgroup$ May 20 '13 at 15:38


Solving saddle point problems involves a lot more choices than definite problems, and there are a lot more things that can go wrong. Use monitors for all levels to debug convergence, to sure that null spaces are handled correctly when auxiliary operators are singular (usually just a constant null space), and to ensure that preconditioners are stable. These techniques are discussed in this question.

Solving saddle point problems

You can start with the section on solving block matrices in the User's Manual. For Stokes-like problems, you can build a Schur complement preconditioner using PCFIELDSPLIT.

-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point

This may be combined with a Least Squares Commutator preconditioner for the Schur complement (-fieldsplit_1_pc_type lsc). It is common to -fieldsplit_1_ksp_type preonly and let the outer iteration do most of the work. The block-triangular variants are popular when used in this way, e.g., -pc_fieldsplit_schur_fact_type upper.

You can find further details on solver composition using options options in our paper (preprint), which also discusses commuting multigrid with the block decomposition (putting the fieldsplit inside multigrid).

For many problems, you'll want to customize the field decomposition and Schur complement preconditioners, many of which involve auxiliary operators. For example, the "pressure convection-diffusion" (PCD) method from Elman et al requires discretization of an auxiliary operator in the pressure space. See examples of PCSHELL and the user's manual section for this purpose.


You do want a preconditioner, and the construction of one is discussed here: http://www.math.tamu.edu/~bangerth/videos.676.38.html

  • $\begingroup$ The lecture was very interesting, but I was looking for some concrete examples on how to use PETSc to solver it. $\endgroup$ May 20 '13 at 14:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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