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,
46 std::vector<typename Traits::RangeType> &out)
const
48 feImpl_->referenceLocalBasis().evaluateFunction(x, rangeBuffer_);
50 feImpl_->transform(rangeBuffer_, out);
59 void evaluateJacobian(
const typename Traits::DomainType &x,
60 std::vector<typename Traits::JacobianType> &out)
const
62 feImpl_->referenceLocalBasis().evaluateJacobian(x, jacobianBuffer_);
64 feImpl_->transform(jacobianBuffer_, out);
78 std::enable_if_t<std::is_same_v<TT, typename Traits::HessianType>,
int> = 0>
79 void evaluateHessian(
const typename Traits::DomainType &x,
80 std::vector<TT> &out)
const
82 feImpl_->referenceLocalBasis().evaluateHessian(x, hessianBuffer_);
84 feImpl_->transform(hessianBuffer_, out);
94 void partial(std::array<unsigned int, Traits::dimDomain>
const &order,
95 const typename Traits::DomainType &x,
96 std::vector<typename Traits::RangeType> &out)
const
98 feImpl_->referenceLocalBasis().partial(order, x, rangeBuffer_);
100 feImpl_->transform(rangeBuffer_, out);
104 auto order()
const {
return feImpl_->referenceLocalBasis().order(); }
107 FEImplementation
const* feImpl_;
108 mutable std::vector<typename Traits::RangeType> rangeBuffer_;
109 mutable std::vector<typename Traits::JacobianType> jacobianBuffer_;
110 mutable std::vector<typename Traits::HessianType> hessianBuffer_;
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_;