1#ifndef DUNE_FEM_FUNCTION_LOCALFUNCTION_CONVERTER_HH
2#define DUNE_FEM_FUNCTION_LOCALFUNCTION_CONVERTER_HH
71 template<
class HostLocalFunction,
class Converter,
template<
class >
class Storage = __InstationaryFunction::HoldCopy >
73 :
private Storage< HostLocalFunction >
76 typedef Storage< HostLocalFunction > BaseType;
78 typedef typename HostLocalFunction::RangeType HostRangeType;
79 typedef typename HostLocalFunction::JacobianRangeType HostJacobianRangeType;
80 typedef typename HostLocalFunction::HessianRangeType HostHessianRangeType;
84 static const int dimRange =
decltype( std::declval< Converter >() ( std::declval< HostRangeType >() ) ) ::dimension;
90 typedef typename HostLocalFunction::EntityType
EntityType;
93 typedef typename FunctionSpaceType::DomainType
DomainType;
94 typedef typename FunctionSpaceType::RangeType
RangeType;
100 static const int dimDomain = FunctionSpaceType::dimDomain;
105 typedef typename FunctionSpaceType::RangeType
RangeType;
113 : BaseType( hostLocalFunction ),
converter_( converter )
117 : BaseType(
std::move( hostLocalFunction ) ),
converter_( converter )
120 template<
class Po
int >
124 this->
get().evaluate( p, hRet );
127 template<
class Po
int >
135 template<
class Po
int >
138 HostJacobianRangeType hJac;
139 this->
get().jacobian( p, hJac );
143 template<
class Po
int >
146 HostHessianRangeType hHes;
147 this->
get().hessian( p, hHes );
151 template<
class Quadrature,
class ... Vectors >
154 std::ignore = std::make_tuple(
160 EntityType
entity ()
const {
return this->
get().entity(); }
165 template<
class QuadratureType,
class VectorType >
168 const unsigned int nop = quadrature.nop();
169 for(
unsigned int qp = 0; qp < nop; ++qp )
170 evaluate( quadrature[ qp ], values[ qp ] );
173 template<
class QuadratureType,
class VectorType >
176 const unsigned int nop = quadrature.nop();
177 for(
unsigned int qp = 0; qp < nop; ++qp )
178 jacobian( quadrature[ qp ], values[ qp ] );
181 template<
class QuadratureType,
class VectorType >
184 const unsigned int nop = quadrature.nop();
185 for(
unsigned int qp = 0; qp < nop; ++qp )
186 hessian( quadrature[ qp ], values[ qp ] );
197 template<
class HostLocalFunction,
class Converter >
202 return LocalFunctionConverterType( std::move( hostLocalFunction ), converter );
205 template<
class HostLocalFunction,
class Converter >
206 LocalFunctionConverter< typename std::remove_const< HostLocalFunction >::type, Converter, __InstationaryFunction::HoldReference >
207 localFunctionConverter ( std::reference_wrapper< HostLocalFunction > hostLocalFunction,
const Converter &converter = Converter() )
210 return LocalFunctionConverterType( hostLocalFunction.get(), converter );
Definition: bindguard.hh:11
std::tuple_element< i, Tuple >::type & get(Dune::TypeIndexedTuple< Tuple, Types > &tuple)
Definition: typeindexedtuple.hh:122
LocalFunctionConverter< HostLocalFunction, Converter, __InstationaryFunction::HoldCopy > localFunctionConverter(HostLocalFunction hostLocalFunction, const Converter &converter=Converter())
Definition: converter.hh:199
implementation of a Dune::Fem::LocalFunction on a FunctionSpace V restircted/prolongated from an othe...
Definition: converter.hh:74
static const int dimRange
Definition: converter.hh:84
FunctionSpaceType::RangeType RangeType
Definition: converter.hh:94
FunctionSpaceType::RangeFieldType RangeFieldType
Definition: converter.hh:98
FunctionSpaceType::DomainType DomainType
Definition: converter.hh:93
ToNewDimRangeFunctionSpace< typenameHostLocalFunction::FunctionSpaceType, dimRange >::Type FunctionSpaceType
Definition: converter.hh:87
void evaluateQuadrature(const Quadrature &quad, Vectors &... vector) const
Definition: converter.hh:152
FunctionSpaceType::DomainFieldType DomainFieldType
Definition: converter.hh:97
void init(const EntityType &entity)
Definition: converter.hh:162
HostLocalFunction::EntityType EntityType
Definition: converter.hh:90
int order() const
Definition: converter.hh:158
void evaluateQuadratureImp(const QuadratureType &quadrature, VectorType &values, const RangeType &) const
Definition: converter.hh:166
void evaluateQuadratureImp(const QuadratureType &quadrature, VectorType &values, const HessianRangeType &) const
Definition: converter.hh:182
void evaluateQuadratureImp(const QuadratureType &quadrature, VectorType &values, const JacobianRangeType &) const
Definition: converter.hh:174
void hessian(const Point &p, HessianRangeType &hes) const
Definition: converter.hh:144
EntityType entity() const
Definition: converter.hh:160
FunctionSpaceType::JacobianRangeType JacobianRangeType
Definition: converter.hh:95
RangeType operator()(const Point &p) const
Definition: converter.hh:128
Converter converter_
Definition: converter.hh:189
FunctionSpaceType::HessianRangeType HessianRangeType
Definition: converter.hh:96
LocalFunctionConverter(HostLocalFunction &&hostLocalFunction, const Converter &converter=Converter())
Definition: converter.hh:116
void jacobian(const Point &p, JacobianRangeType &jac) const
Definition: converter.hh:136
static const int dimDomain
Definition: converter.hh:100
LocalFunctionConverter(const HostLocalFunction &hostLocalFunction, const Converter &converter=Converter())
Definition: converter.hh:112
void evaluate(const Point &p, RangeType &ret) const
Definition: converter.hh:121
Definition: converter.hh:103
FunctionSpaceType::DomainFieldType DomainFieldType
Definition: converter.hh:108
FunctionSpaceType::DomainType DomainType
Definition: converter.hh:104
FunctionSpaceType::RangeFieldType RangeFieldType
Definition: converter.hh:109
FunctionSpaceType::JacobianRangeType JacobianRangeType
Definition: converter.hh:106
FunctionSpaceType::HessianRangeType HessianRangeType
Definition: converter.hh:107
FunctionSpaceType::RangeType RangeType
Definition: converter.hh:105
actual interface class for quadratures
Definition: quadrature.hh:405
convert functions space to space with new dim range
Definition: functionspace.hh:250