[draft]Add support for Hermite elements to the global interpolate() method
Currently this contains two cases (activated via a macro):
- (A) Local interpolation of
fLocalassumes thatderivative(fLocal)is really the derivative offLocal. - (B) Local interpolation of
fLocalassumes thatderivative(fLocal)is the localized version of the global derivative.
See #76 (closed) for a discussion of the two variants.
This also included support for local functions lf where derivative(lf)
hands out a reference to a cached derivative. This potentially allows
to avoid the creation and copy of those local derivatives on each element
which can be relatively costly as e.g. in case of DiscreteGlobalBasisFunction.
However, the latter does not implement such caching so far but could easily
be patched to provide it.
To test this, this furthermore adds the following:
- A general
checkInterpolateConsistency()utility for testing if globalinterpolate()andDiscreteGlobalBasisFunctionare consistent. - An implementation of a 1d and 2d cubic Hermite basis for testing.
- A new test that applies
checkInterpolateConsistency()to theCubicHermitePreBasisto test the updatedinterpolate()method.
The CubicHermitePreBasis implementation is currently only
used for testing and thus contained in the test directory.
However it is fully functional in 1d and 2d and also brings all
the boiler-plate code needed for general dimension. Hence
we could also add it as real implementation. Internally
it uses a new LeafPreBasisMapperMixIn class, that allows
to simplify the Prebasis significantly, if index computations
can be done using a MultipleCodimMultipleGeometryMapper.
Notice that this incorporates the changes from !413 (merged).