This is a read only copy of the old FEniCS QA forum. Please visit the new QA forum to ask questions

Approximating schur complements for saddle-point systems

+1 vote

If I am doing a simple mixed-poisson example using RT0 spaces, I would like to do a schur-complement approximation for preconditioning.

PETSc has interfaces for this, and one could simply have these options passed in:

-ksp_type gmres
-pc_type fieldsplit
-pc_fieldsplit_type schur
-pc_fieldsplit_schur_fact_type full
-pc_fieldsplit_schur_precondition selfp
-fieldsplit_0_ksp_type preonly
-fieldsplit_0_pc_type bjacobi
-fieldsplit_0_sub_pc_type ilu
-fieldsplit_1_ksp_type preonly
-fieldsplit_1_pc_type hypre

Where "selfp" happens to be the approximation of the laplacian, but of course one could pass in their own form. In the Firedrake project, one could do these easily, but I was wondering if FEniCS could do something similar?

Thanks,
Justin

asked Dec 21, 2015 by jychang48 FEniCS Novice (510 points)

1 Answer

+1 vote

Have a look at the stokes-iterative
demo to see how to submit a separate form for the
preconditioner

answered Dec 21, 2015 by Kent-Andre Mardal FEniCS Expert (14,380 points)

Thanks for your answer. However, my question is more on the possibility of explicitly doing some form of schur complementing instead of submitting a separate form for the preconditioner. Because AFAIK, it seems FEniCS only provides block diagonal preconditioning where one provides the forms for the top left and bottom right diagonals, and such preconditioning does not work well for the mixed-poisson problem.

To work with the explicit form of the Schur complement you would need
to use the PETSc backend. You may do this with petsc4py if you
want to work in Python.

The module cbc.block,
https://bitbucket.org/fenics-apps/cbc.block,
which is a tool using petsc4py, also
has some tools for constructing the preconditioner in more
explicit forms.

However, you should also know that for the mixed-poisson problem
you may construct spectrally equivalent forms using the jump terms
instead of the Schur complement.

See, Rusten, Vassilevski, Winther, Math Comp., 1996
http://www.ams.org/journals/mcom/1996-65-214/S0025-5718-96-00720-X/S0025-5718-96-00720-X.pdf
and Mardal, Winther, NLAA, 2011
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.154.9307&rep=rep1&type=pdf

I thought that we had this example as one of the examples in bc.block, but it is not.
I will put in an example of this today.

I've added two demos to cbc.block now.

...