[firedrake] Pass approximate Jacobian to derivative() call

Buesing, Henrik HBuesing at eonerc.rwth-aachen.de
Thu Nov 12 11:02:59 GMT 2015


> > Is there a multi-physics example where the user supplies a Jacobian to
> > solve()? I think if I knew how this Jacobian should look like in my
> > 2x2 block case, I would manage with the rest.
> 
> firedrake/tests/regression/test_vector_laplace_on_quadrilaterals.py
> does something similar.  It solves with one specified Jacobian, and uses
> a different one as the preconditioner.
> 
> The idea is that the blocks are "implicit" in the fact that your test
> and trial functions are from a mixed space.
> 
> For example:
> 
> W = DG1*DG2
> 
> u, p = TrialFunctions(W)
> v, q = TestFunctions(W)
> 
> J = u*v*dx + p*q*dx
> 
> Builds a jacobian that is, block-wise:
> 
> J = [DG1-mass-matrix, 0;
>      0, DG2-mass-matrix]
> 
> So you just need to write down the symbolic form in terms of things that
> have come from the mixed space.

[Buesing, Henrik] So in my nonlinear case I would use

u=Function(W)
pw, enth=split(u)

and write down my J in terms of pw,enth. Nevertheless I will have four contributions (for the four blocks) in my Jacobian, which I just add together as in your example. 

Every contribution has a (pw + eps) and (pw - eps), or with enth. Can I write down my form as a function dependent on the primary variables. Then I do not need to define all these different +/- eps...

Henrik




More information about the firedrake mailing list