7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDFINITEELEMENTMIXIN_HH
8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDFINITEELEMENTMIXIN_HH
15namespace Dune::Functions::Impl {
24template<
class FEImplementation,
class ReferenceLocalBasisTraits>
25class TransformedLocalBasis
28 using Traits = ReferenceLocalBasisTraits;
30 TransformedLocalBasis(FEImplementation
const& feImpl)
41 return feImpl_->size();
45 void evaluateFunction(
const typename Traits::DomainType &x,
48 feImpl_->referenceLocalBasis().evaluateFunction(x, rangeBuffer_);
50 feImpl_->transform(rangeBuffer_, out);
59 void evaluateJacobian(
const typename Traits::DomainType &x,
62 feImpl_->referenceLocalBasis().evaluateJacobian(x, jacobianBuffer_);
64 feImpl_->transform(jacobianBuffer_, out);
79 void evaluateHessian(
const typename Traits::DomainType &x,
82 feImpl_->referenceLocalBasis().evaluateHessian(x, hessianBuffer_);
84 feImpl_->transform(hessianBuffer_, out);
95 const typename Traits::DomainType &x,
98 feImpl_->referenceLocalBasis().partial(order, x, rangeBuffer_);
100 feImpl_->transform(rangeBuffer_, out);
104 auto order()
const {
return feImpl_->referenceLocalBasis().order(); }
107 FEImplementation
const* feImpl_;
146template<
class FEImplementation,
class ReferenceLocalBasisTraits>
147class TransformedFiniteElementMixin
150 TransformedFiniteElementMixin()
151 : tlb_(this->asImpl())
154 TransformedFiniteElementMixin(TransformedFiniteElementMixin
const& other)
155 : TransformedFiniteElementMixin()
158 const FEImplementation& asImpl()
const
160 return *(
static_cast<FEImplementation const*
>(
this));
163 auto const& localBasis()
const
169 TransformedLocalBasis<FEImplementation, ReferenceLocalBasisTraits> tlb_;