Thanks Lawrence,

Just to clarify, does aP has to be provide on top of specifying these options?

-pc_type fieldsplit
-pc_fieldsplit_type additive

-fieldsplit_0_pc_type something_that_works_for_grad_div_helmholtz
-fieldsplit_1_pc_type something_that_works_for_mass

What about the ksp's? Just use CG for outer loop and preonly for the two fields?

Thanks,
Justin

On Tuesday, December 8, 2015, Lawrence Mitchell <lawrence.mitchell@imperial.ac.uk> wrote:


On 08/12/15 17:58, Justin Chang wrote:
> Hi Colin (or anyone),
>
> Coming back to this
>
> 1) Could you elaborate a little more on implementing this block H(div)
> operator in firedrake/petsc:
>
> ( 1 - grad(div .)    0 )
> ( 0                     1 )
>
> My guess at least for that bottom right entry would be to use the
> fieldsplit, where fieldsplit_1_pc would be bjacobi/ilu?


OK, so you build Jp:

Jp = dot(u, v)*dx + div(u)*div(v)*dx + p*q*dx

And provide that as either an optional Jp argument (or an aP argument
if you're using a LinearVariationalSolver), see
http://firedrakeproject.org/solving-interface.html#providing-an-operator-for-preconditioning.

No you do:

-pc_type fieldsplit
-pc_fieldsplit_type additive

-fieldsplit_0_pc_type something_that_works_for_grad_div_helmholtz
-fieldsplit_1_pc_type something_that_works_for_mass

> also
>
> 2) What exactly do you guys mean by "hybridise the equation"? Like how
> would it look in the context of LSFEM?


See, for example, Bernardo Cockburn, Jayadeep Gopalakrishnan and
Raytcho Lazarov. Unified Hybridization of Discontinuous Galerkin,
Mixed, and Continuous Galerkin Methods for Second Order Elliptic
Problems, {SIAM} Journal on Numerical Analysis (2009).

Lawrence