3 #ifndef DUNE_VIRTUALINTERFACE_HH
4 #define DUNE_VIRTUALINTERFACE_HH
8 #include <dune/common/function.hh>
10 #include <dune/geometry/type.hh>
20 template<
class DomainType,
class RangeType>
40 typename T::DomainFieldType,
42 typename T::DomainType,
43 typename T::RangeFieldType,
45 typename T::RangeType,
46 typename T::JacobianType,
56 template<
class T,
int order>
61 typename T::DomainFieldType,
63 typename T::DomainType,
64 typename T::RangeFieldType,
66 typename T::RangeType,
67 typename T::JacobianType,
79 typedef typename FE::Traits::LocalBasisType::Traits::DomainType DomainType;
80 typedef typename FE::Traits::LocalBasisType::Traits::RangeType RangeType;
83 typedef typename FE::Traits::LocalInterpolationType Implementation;
122 class LocalBasisVirtualInterfaceBase :
130 virtual void evaluate (
131 const typename std::template array<int,Traits::diffOrder>& directions,
132 const typename Traits::DomainType& in,
133 std::vector<typename Traits::RangeType>& out)
const = 0;
135 using BaseInterface::evaluate;
145 template<
class DF,
int n,
class D,
class RF,
int m,
class R,
class J>
154 virtual unsigned int size ()
const = 0;
157 virtual unsigned int order ()
const = 0;
164 virtual void evaluateFunction (
const typename Traits::DomainType& in,
165 std::vector<typename Traits::RangeType>& out)
const = 0;
175 virtual void evaluateJacobian(
const typename Traits::DomainType& in,
176 std::vector<typename Traits::JacobianType>& out)
const = 0;
179 virtual void evaluate (
180 const typename std::template array<int,Traits::diffOrder>& directions,
181 const typename Traits::DomainType& in,
182 std::vector<typename Traits::RangeType>& out)
const = 0;
196 class LocalBasisVirtualInterface :
197 public virtual LocalBasisVirtualInterfaceBase<T>
199 typedef LocalBasisVirtualInterfaceBase<T> BaseInterface;
206 const typename std::template array<int,k>& directions,
208 std::vector<typename Traits::RangeType>& out)
const
210 typedef LocalBasisVirtualInterfaceBase<typename FixedOrderLocalBasisTraits<T,k>::Traits > OrderKBaseInterface;
211 const OrderKBaseInterface& asBase = *
this;
212 asBase.evaluate(directions, in, out);
215 using BaseInterface::size;
216 using BaseInterface::order;
217 using BaseInterface::evaluateFunction;
218 using BaseInterface::evaluateJacobian;
221 #ifndef __INTEL_COMPILER
222 using BaseInterface::evaluate;
245 template<
class DomainType,
class RangeType>
275 template<
class DomainType,
class RangeType>
276 class LocalInterpolationVirtualInterface
277 :
public LocalInterpolationVirtualInterfaceBase<DomainType, RangeType>
304 void interpolate (
const F& f, std::vector<CoefficientType>& out)
const
307 asBase.
interpolate(VirtualFunctionWrapper<F>(f),out);
310 template<
class F,
class C>
313 std::vector<CoefficientType> outDummy;
315 asBase.
interpolate(VirtualFunctionWrapper<F>(f),outDummy);
316 out.resize(outDummy.size());
317 for(
typename std::vector<CoefficientType>::size_type i=0; i<outDummy.size(); ++i)
318 out[i] = outDummy[i];
323 template <
typename F>
324 struct VirtualFunctionWrapper
328 VirtualFunctionWrapper(
const F &f)
332 virtual ~VirtualFunctionWrapper() {}
334 virtual void evaluate(
const DomainType& x, RangeType& y)
const
361 virtual std::size_t
size ()
const = 0;
391 typename T::DomainType,
398 using BaseInterface::localCoefficients;
399 using BaseInterface::localInterpolation;
400 using BaseInterface::type;
412 template<
class DF,
int n,
class D,
class RF,
int m,
class R,
class J>
437 virtual unsigned int size ()
const = 0;
440 virtual const GeometryType type ()
const = 0;
virtual base class for local finite elements with functions
Definition: virtualinterface.hh:381
virtual base class for a local basis
Definition: virtualinterface.hh:24
LocalFiniteElementTraits< LocalBasisVirtualInterface< T >, LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename T::DomainType, typename T::RangeType > > Traits
Definition: virtualinterface.hh:392
virtual LocalFiniteElementVirtualInterface< T > * clone() const =0
Construct LocalBasisTraits with fixed diff order.
Definition: virtualinterface.hh:57
virtual ~LocalBasisVirtualInterfaceBase()
Definition: virtualinterface.hh:151
T Traits
Definition: virtualinterface.hh:201
void interpolate(const F &f, std::vector< C > &out) const
Definition: virtualinterface.hh:311
virtual ~LocalInterpolationVirtualInterfaceBase()
Definition: virtualinterface.hh:256
virtual const Traits::LocalBasisType & localBasis() const =0
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
LocalBasisTraits< DF, n, D, RF, m, R, J, 0 > Traits
Definition: virtualinterface.hh:149
virtual ~LocalFiniteElementVirtualInterface()
Definition: virtualinterface.hh:425
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition: virtualinterface.hh:285
virtual std::size_t size() const =0
number of coefficients
virtual base class for local coefficients
Definition: virtualinterface.hh:354
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition: virtualinterface.hh:254
Function< const DomainType &, RangeType & > FunctionBase
Definition: virtualinterface.hh:88
virtual ~LocalCoefficientsVirtualInterface()
Definition: virtualinterface.hh:358
Construct LocalBasisTraits with one diff order lower.
Definition: virtualinterface.hh:36
void interpolate(const F &f, std::vector< CoefficientType > &out) const
determine coefficients interpolating a given function
Definition: virtualinterface.hh:304
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
virtual const LocalKey & localKey(std::size_t i) const =0
get i'th index
LocalBasisTraits< typename T::DomainFieldType, T::dimDomain, typename T::DomainType, typename T::RangeFieldType, T::dimRange, typename T::RangeType, typename T::JacobianType, T::diffOrder-1 > Traits
The LocalBasisTraits with one order lower.
Definition: virtualinterface.hh:47
LocalBasisTraits< typename T::DomainFieldType, T::dimDomain, typename T::DomainType, typename T::RangeFieldType, T::dimRange, typename T::RangeType, typename T::JacobianType, order > Traits
The LocalBasisTraits specified order.
Definition: virtualinterface.hh:68
LocalFiniteElementTraits< LocalBasisVirtualInterface< T >, LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename T::DomainType, typename T::RangeType > > Traits
Definition: virtualinterface.hh:423
traits helper struct
Definition: localfiniteelementtraits.hh:10
Dune::VirtualFunction< DomainType, RangeType > FunctionType
type of virtual function to interpolate
Definition: virtualinterface.hh:282
Definition: tensor.hh:165
VirtualFunction< DomainType, RangeType > VirtualFunctionBase
Definition: virtualinterface.hh:87
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:37
LI LocalInterpolationType
Definition: localfiniteelementtraits.hh:22
Dune::VirtualFunction< DomainType, RangeType > FunctionType
type of virtual function to interpolate
Definition: virtualinterface.hh:251
virtual base class for a local interpolation
Definition: virtualinterface.hh:246
LC LocalCoefficientsType
Definition: localfiniteelementtraits.hh:18
virtual ~LocalInterpolationVirtualInterface()
Definition: virtualinterface.hh:288
conditional< IsBaseOf< Interface, Implementation >::value, VirtualFunctionBase, FunctionBase >::type type
Base class type for functions to use with LocalInterpolation.
Definition: virtualinterface.hh:95
Return a proper base class for functions to use with LocalInterpolation.
Definition: virtualinterface.hh:77
R RangeType
range type
Definition: localbasis.hh:61
D DomainType
domain type
Definition: localbasis.hh:49
LB LocalBasisType
Definition: localfiniteelementtraits.hh:14
void evaluate(const typename std::template array< int, k > &directions, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Definition: virtualinterface.hh:205
Describe position of one degree of freedom.
Definition: localkey.hh:21
virtual base class for a local interpolation
Definition: virtualinterface.hh:21