3 #ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH 4 #define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH 9 #include <dune/common/function.hh> 11 #include <dune/geometry/type.hh> 21 template<
class DomainType,
class RangeType>
36 typedef typename FE::Traits::LocalBasisType::Traits::DomainType DomainType;
37 typedef typename FE::Traits::LocalBasisType::Traits::RangeType RangeType;
40 typedef typename FE::Traits::LocalInterpolationType Implementation;
77 virtual unsigned int size ()
const = 0;
80 virtual unsigned int order ()
const = 0;
88 std::vector<typename Traits::RangeType>& out)
const = 0;
99 std::vector<typename Traits::JacobianType>& out)
const = 0;
106 virtual void partial(
const std::array<unsigned int,Traits::dimDomain>& order,
108 std::vector<typename Traits::RangeType>& out)
const = 0;
129 template<
class DomainType,
class RangeType>
149 virtual void interpolate (
const FunctionType& f, std::vector<CoefficientType>& out)
const = 0;
159 template<
class DomainType,
class RangeType>
183 virtual void interpolate (
const FunctionType& f, std::vector<CoefficientType>& out)
const = 0;
188 void interpolate (
const F& f, std::vector<CoefficientType>& out)
const 191 asBase.
interpolate(VirtualFunctionWrapper<F>(f),out);
194 template<
class F,
class C>
197 std::vector<CoefficientType> outDummy;
199 asBase.
interpolate(VirtualFunctionWrapper<F>(f),outDummy);
200 out.resize(outDummy.size());
201 for(
typename std::vector<CoefficientType>::size_type i=0; i<outDummy.size(); ++i)
202 out[i] = outDummy[i];
207 template <
typename F>
208 struct VirtualFunctionWrapper
209 :
public FunctionType
212 VirtualFunctionWrapper(
const F &f)
216 virtual ~VirtualFunctionWrapper() {}
218 virtual void evaluate(
const DomainType& x, RangeType& y)
const 245 virtual std::size_t size ()
const = 0;
248 const virtual LocalKey& localKey (std::size_t i)
const = 0;
267 using LocalBasisTraits = T;
288 virtual unsigned int size ()
const = 0;
291 virtual const GeometryType
type ()
const = 0;
virtual base class for a local interpolation
Definition: virtualinterface.hh:130
R RangeType
range type
Definition: localbasis.hh:55
virtual base class for a local interpolation
Definition: virtualinterface.hh:22
virtual base class for local finite elements with functions
Definition: virtualinterface.hh:265
Dune::VirtualFunction< DomainType, RangeType > FunctionType
type of virtual function to interpolate
Definition: virtualinterface.hh:166
traits helper struct
Definition: localfiniteelementtraits.hh:10
void interpolate(const F &f, std::vector< CoefficientType > &out) const
determine coefficients interpolating a given function
Definition: virtualinterface.hh:188
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition: virtualinterface.hh:169
LI LocalInterpolationType
Definition: localfiniteelementtraits.hh:22
virtual ~LocalBasisVirtualInterface()
Definition: virtualinterface.hh:74
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:31
LC LocalCoefficientsType
Definition: localfiniteelementtraits.hh:18
D DomainType
domain type
Definition: localbasis.hh:43
virtual ~LocalInterpolationVirtualInterfaceBase()
Definition: virtualinterface.hh:140
virtual base class for a local basis
Definition: virtualinterface.hh:68
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition: virtualinterface.hh:138
VirtualFunction< DomainType, RangeType > VirtualFunctionBase
Definition: virtualinterface.hh:44
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
Function< const DomainType &, RangeType & > FunctionBase
Definition: virtualinterface.hh:45
Return a proper base class for functions to use with LocalInterpolation.
Definition: virtualinterface.hh:34
Dune::VirtualFunction< DomainType, RangeType > FunctionType
type of virtual function to interpolate
Definition: virtualinterface.hh:135
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:15
virtual base class for local coefficients
Definition: virtualinterface.hh:238
Definition: tensor.hh:165
virtual ~LocalCoefficientsVirtualInterface()
Definition: virtualinterface.hh:242
virtual ~LocalFiniteElementVirtualInterface()
Definition: virtualinterface.hh:276
virtual ~LocalInterpolationVirtualInterface()
Definition: virtualinterface.hh:172
LocalFiniteElementTraits< LocalBasisVirtualInterface< LocalBasisTraits >, LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType > > Traits
Definition: virtualinterface.hh:274
Describe position of one degree of freedom.
Definition: localkey.hh:20
std::conditional< std::is_base_of< Interface, Implementation >::value, VirtualFunctionBase, FunctionBase >::type type
Base class type for functions to use with LocalInterpolation.
Definition: virtualinterface.hh:52
LB LocalBasisType
Definition: localfiniteelementtraits.hh:14
void interpolate(const F &f, std::vector< C > &out) const
Definition: virtualinterface.hh:195