Implementation of partial() method for all LocalBasis classes
It was decided to switch to the multi-index notation for evaluating partial derivatives in local bases by adding a new method partial()
. This is now provided for all LocalBasis classes.
For many classes at least the zero-order derivative, i.e. function evaluation, is implemented and for some the first and even second order derivative. If a derivative is not yet implemented for a class and the method partial()
is called, an exception will be thrown.
To test the new implementation, the test-localfe
is adapted and extended. Tests are only performed for derivatives with order <= Traits::diffOrder
. curently the old evaluate()
method is still there and neeeds a diffOrder
template argument. Some LocalBasis can be differentiated infinitly times, since all higher derivatives are zero. To account for this, a constant DUNE_MAX_DIFF_ORDER
is provided. (When the evaluate()
method will be removed in the future, this constant can also be deleted.)
For the tests at first it is checked whether a class provides the partial()
and/or the evaluate()
method. Therefore, the interface for localBasis is specified in a concept definition, providing checks like bool isLocalBasis<LB>()
or simply bool localBasisHasPartial<LB>()
. Just for completeness these concepts are implemented for localCoefficients, localInterpolation and localFiniteElement as well. A concept test is added in the test directory.
For the implementation of the tests and also for some partial()
methods a compile-time loop was necessary. This is similar and partially adopted from dune-functions and may be put in the dune-common module instead. It is discussed currently whether to exchange this staticFor and staticIf with a hybridFor and hybridIf from dune-solvers. But this can easily be adapted.