← Back to team overview

dolfin team mailing list archive

Re: VariationalProblem interface(s)

 

Marie Rognes skrev 2010-10-20 19.39:

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.

Agree with all of the above (except maybe the u argument).

Philosophical question: Should u be given as an argument to the
   VariationalProblem instead of to the call to solve?

Comments welcome!

I agree with your argument that it should be an argument to solve since there will otherwise be too many arguments to VariationalProblem... :-)

--
Anders



References