A while back (in connection with the blueprint
https://blueprints.launchpad.net/dolfin/+spec/solver-interfaces) there
was a discussion regarding the interface to VariationalProblem. Anders
and Marie have discussed this a bit further, in particular with regard
to the adaptive solution of variational problems, and suggest the
interface outlined below. (This suggestion involves a change in the
interface, and hence the double post to both the dolfin and
fenics-mailinglists)
From Marie's perspective, the main reasons for changing the interface are
(a) The current "nonlinear=true" variable seems superfluous and
suboptimal
(b) We should allow for automated computation of the Jacobian (when
needed).
For (nonlinear) variational problems, the interface should read
pde = VariationalProblem(Form F, Form jacobian=None, ...)
pde.solve(u)
where "F" is a Form of rank 1, "jacobian" is a Form of rank 2, and "u"
is a Function. Such a pde will be treated as a nonlinear variational
problem. The "jacobian" would be an optional argument. If not given,
jacobian = derivative(F, u)
will be used for the nonlinear solve if needed (for instance as the
left-hand side of the Newton iteration).
Additionally, we have the interface for linear problems (as before)
pde = VariationalProblem(Form a, Form L, ...)
pde.solve(u) / u = pde.solve()
where "a" is a Form of rank 2 and "L" is a form of rank 1. Such as pde
will be treated as a linear variational problem.