3 #ifndef DUNE_VIRTUALINTERFACE_HH
4 #define DUNE_VIRTUALINTERFACE_HH
6 #include<dune/common/function.hh>
8 #include<dune/geometry/type.hh>
18 template<
class DomainType,
class RangeType>
38 typename T::DomainFieldType,
40 typename T::DomainType,
41 typename T::RangeFieldType,
43 typename T::RangeType,
44 typename T::JacobianType,
54 template<
class T,
int order>
59 typename T::DomainFieldType,
61 typename T::DomainType,
62 typename T::RangeFieldType,
64 typename T::RangeType,
65 typename T::JacobianType,
77 typedef typename FE::Traits::LocalBasisType::Traits::DomainType DomainType;
78 typedef typename FE::Traits::LocalBasisType::Traits::RangeType RangeType;
81 typedef typename FE::Traits::LocalInterpolationType Implementation;
120 class LocalBasisVirtualInterfaceBase :
128 virtual void evaluate (
129 const typename Dune::template array<int,Traits::diffOrder>& directions,
130 const typename Traits::DomainType& in,
131 std::vector<typename Traits::RangeType>& out)
const = 0;
133 using BaseInterface::evaluate;
143 template<
class DF,
int n,
class D,
class RF,
int m,
class R,
class J>
152 virtual unsigned int size ()
const = 0;
155 virtual unsigned int order ()
const = 0;
162 virtual void evaluateFunction (
const typename Traits::DomainType& in,
163 std::vector<typename Traits::RangeType>& out)
const = 0;
173 virtual void evaluateJacobian(
const typename Traits::DomainType& in,
174 std::vector<typename Traits::JacobianType>& out)
const = 0;
177 virtual void evaluate (
178 const typename Dune::template array<int,Traits::diffOrder>& directions,
179 const typename Traits::DomainType& in,
180 std::vector<typename Traits::RangeType>& out)
const = 0;
194 class LocalBasisVirtualInterface :
195 public virtual LocalBasisVirtualInterfaceBase<T>
197 typedef LocalBasisVirtualInterfaceBase<T> BaseInterface;
204 const typename Dune::template array<int,k>& directions,
206 std::vector<typename Traits::RangeType>& out)
const
208 typedef LocalBasisVirtualInterfaceBase<typename FixedOrderLocalBasisTraits<T,k>::Traits > OrderKBaseInterface;
209 const OrderKBaseInterface& asBase = *
this;
210 asBase.evaluate(directions, in, out);
213 using BaseInterface::size;
214 using BaseInterface::order;
215 using BaseInterface::evaluateFunction;
216 using BaseInterface::evaluateJacobian;
219 #ifndef __INTEL_COMPILER
220 using BaseInterface::evaluate;
243 template<
class DomainType,
class RangeType>
273 template<
class DomainType,
class RangeType>
274 class LocalInterpolationVirtualInterface
275 :
public LocalInterpolationVirtualInterfaceBase<DomainType, RangeType>
302 void interpolate (
const F& f, std::vector<CoefficientType>& out)
const
305 asBase.
interpolate(VirtualFunctionWrapper<F>(f),out);
308 template<
class F,
class C>
311 std::vector<CoefficientType> outDummy;
313 asBase.
interpolate(VirtualFunctionWrapper<F>(f),outDummy);
314 out.resize(outDummy.size());
315 for(
typename std::vector<CoefficientType>::size_type i=0; i<outDummy.size(); ++i)
316 out[i] = outDummy[i];
321 template <
typename F>
322 struct VirtualFunctionWrapper
326 VirtualFunctionWrapper(
const F &f)
330 virtual ~VirtualFunctionWrapper() {}
332 virtual void evaluate(
const DomainType& x, RangeType& y)
const
359 virtual std::size_t
size ()
const = 0;
389 typename T::DomainType,
396 using BaseInterface::localCoefficients;
397 using BaseInterface::localInterpolation;
398 using BaseInterface::type;
410 template<
class DF,
int n,
class D,
class RF,
int m,
class R,
class J>
435 virtual const GeometryType type ()
const = 0;