1 #ifndef DUNE_FEM_PASS_COMMON_LOCALFUNCTIONTUPLE_HH 2 #define DUNE_FEM_PASS_COMMON_LOCALFUNCTIONTUPLE_HH 8 #include <dune/common/exceptions.hh> 9 #include <dune/common/forloop.hh> 10 #include <dune/common/nullptr.hh> 11 #include <dune/common/tuples.hh> 12 #include <dune/common/tupleutility.hh> 31 template<
class DiscreteFunction >
35 typename Dune::TypeTraits< DiscreteFunction >::ReferredType
38 static Type
apply (
const DiscreteFunction &discreteFunction )
40 return Type( discreteFunction );
52 template<
class LocalFunction >
66 template<
class LocalFunction >
80 template<
class LocalFunction >
94 template<
class DiscreteFunctionTuple,
class Entity,
95 size_t TupleSize = tuple_size< DiscreteFunctionTuple >::value >
100 template<
int pos >
struct SetEntity;
101 template<
int pos >
struct Evaluate;
102 template<
int pos >
struct EvaluateQuadrature;
103 template<
int pos >
struct Jacobian;
104 template<
int pos >
struct Hessian;
120 typedef typename Dune::ForEachType< RangeTypeEvaluator, LocalFunctionTupleType >::Type
RangeTupleType;
124 typedef typename Dune::ForEachType< HessianRangeTypeEvaluator, LocalFunctionTupleType >::Type
HessianRangeTupleType;
129 typedef typename std::tuple_element< i, LocalFunctionTupleType >::type
Type;
132 template<
class Factory >
141 void init (
const EntityType &entity )
143 ForLoop< SetEntity, 0, TupleSize-1 >::apply( localFunctions(), entity );
149 return std::get< 0 >( localFunctions() ).entity();
157 template<
class Po
int >
158 void evaluate (
const Point &x, RangeTupleType &values )
const 160 ForLoop< Evaluate, 0, TupleSize-1 >::apply( localFunctions(), x, values );
168 template<
class Po
int >
169 void jacobian (
const Point &x, JacobianRangeTupleType &jacobians )
const 171 ForLoop< Jacobian, 0, TupleSize-1 >::apply( localFunctions(), x, jacobians );
179 template<
class Po
int >
180 void hessian (
const Point &x, HessianRangeTupleType &hessians )
const 182 ForLoop< Hessian, 0, TupleSize-1 >::apply( localFunctions(), x, hessians );
190 template<
class QuadratureType,
class TupleVectorType >
193 assert( vector.size() >= quadrature.nop() );
194 ForLoop< EvaluateQuadrature, 0, TupleSize-1 >::apply( quadrature, localFunctions(), vector );
199 typename Get< i >::Type &
get () {
return std::get< i >( localFunctions() ); }
203 const typename Get< i >::Type &
get ()
const {
return std::get< i >( localFunctions() ); }
207 const LocalFunctionTupleType &
localFunctions ()
const {
return localFunctionTuple_; }
210 mutable LocalFunctionTupleType localFunctionTuple_;
218 template<
class DiscreteFunctionTuple,
class Entity >
231 template<
class Factory >
236 void init (
const EntityType &entity ) { entity_ = &entity; }
244 template<
class Po
int >
245 void evaluate (
const Point &x, RangeTupleType &values )
const 248 template<
class Po
int >
249 void jacobian (
const Point &x, JacobianRangeTupleType &jacobians )
const 252 template<
class Po
int >
253 void hessian (
const Point &x, HessianRangeTupleType &hessians )
const 256 template<
class QuadratureType,
class TupleVectorType >
259 assert( vector.size() >= quadrature.nop() );
271 template<
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
275 static void apply ( LocalFunctionTupleType &localFunctions,
278 std::get< pos >( localFunctions ).init( entity );
287 template<
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
291 template<
class Po
int >
292 static void apply (
const LocalFunctionTupleType &localFunctions,
296 std::get< pos >( localFunctions ).evaluate( x, std::get< pos >( values ) );
305 template<
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
307 struct LocalFunctionTuple< DiscreteFunctionTuple, Entity, TupleSize >::EvaluateQuadrature
309 template<
class Quadrature,
class VectorOfTuples >
311 const LocalFunctionTupleType &localFunctions,
312 VectorOfTuples &vectorOfTuples )
315 std::get< pos >( localFunctions ).evaluateQuadrature( quadrature, vector );
324 template<
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
328 template<
class Po
int >
329 static void apply (
const LocalFunctionTupleType &localFunctions,
333 std::get< pos >( localFunctions ).jacobian( x, std::get< pos >( jacobians ) );
342 template<
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
346 template<
class Po
int >
347 static void apply (
const LocalFunctionTupleType &localFunctions,
351 std::get< pos >( localFunctions ).hessian( x, std::get< pos >( hessians ) );
362 template<
int i,
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
366 return localFunctionTuple.template get< i >();
369 template<
int i,
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
373 return localFunctionTuple.template get< i >();
387 template<
size_t i,
class DiscreteFunctionTuple,
class Entity,
size_t TupleSize >
388 struct tuple_element< i,
Dune::Fem::LocalFunctionTuple< DiscreteFunctionTuple, Entity, TupleSize > >
394 #endif // #ifndef DUNE_FEM_PASS_COMMON_LOCALFUNCTIONTUPLE_HH GeometryType::LocalCoordinate LocalCoordinateType
Definition: localfunctiontuple.hh:116
Definition: localfunctiontuple.hh:219
std::tuple RangeTupleType
Definition: localfunctiontuple.hh:227
Dune::Fem::LocalFunctionSelector< typename Dune::TypeTraits< DiscreteFunction >::ReferredType >::Type Type
Definition: localfunctiontuple.hh:36
Dune::ForEachType< HessianRangeTypeEvaluator, LocalFunctionTupleType >::Type HessianRangeTupleType
Definition: localfunctiontuple.hh:124
DiscreteFunctionTuple DiscreteFunctionTupleType
discrete function tuple
Definition: localfunctiontuple.hh:104
void evaluate(const Point &x, RangeTupleType &values) const
evaluate local functions
Definition: localfunctiontuple.hh:158
const EntityType & entity() const
return entity
Definition: localfunctiontuple.hh:147
Definition: localfunctiontuple.hh:96
Definition: localfunctiontuple.hh:32
DiscreteFunctionTuple DiscreteFunctionTupleType
Definition: localfunctiontuple.hh:224
static Type apply(const DiscreteFunction &discreteFunction)
Definition: localfunctiontuple.hh:38
LocalFunction::JacobianRangeType Type
Definition: localfunctiontuple.hh:69
void hessian(const Point &x, HessianRangeTupleType &hessians) const
Definition: localfunctiontuple.hh:253
Dune::ForEachType< RangeTypeEvaluator, LocalFunctionTupleType >::Type RangeTupleType
Definition: localfunctiontuple.hh:120
std::tuple JacobianRangeTupleType
Definition: localfunctiontuple.hh:228
FunctionSpaceType::JacobianRangeType JacobianRangeType
type of the Jacobian, i.e., type of evaluated Jacobian matrix
Definition: localfunction.hh:73
void init(const EntityType &entity)
set local functions to given entity
Definition: localfunctiontuple.hh:141
void jacobian(const Point &x, JacobianRangeTupleType &jacobians) const
evaluate jacobians of local functions
Definition: localfunctiontuple.hh:169
void evaluate(const Point &x, RangeTupleType &values) const
Definition: localfunctiontuple.hh:245
Dune::ForEachType< JacobianRangeTypeEvaluator, LocalFunctionTupleType >::Type JacobianRangeTupleType
Definition: localfunctiontuple.hh:122
LocalFunctionTuple(Factory factory)
Definition: localfunctiontuple.hh:232
Definition: coordinate.hh:4
const EntityType & entity() const
Definition: localfunctiontuple.hh:238
Definition: localfunctiontuple.hh:67
wrapper class to convert a vector of tuples of RangeTypes into something that behaves like a vector< ...
Definition: tupleutility.hh:295
#define DUNE_CLOSE_TUPLE_NAMESPACE
Definition: tupleutility.hh:13
void evaluateQuadrature(const QuadratureType &quadrature, TupleVectorType &vector) const
evaluate local functions for quadrature
Definition: localfunctiontuple.hh:191
LocalFunctionTuple(Factory factory)
Definition: localfunctiontuple.hh:133
#define DUNE_OPEN_TUPLE_NAMESPACE
Definition: tupleutility.hh:12
Dune::Fem::LocalFunctionTuple< DiscreteFunctionTuple, Entity, TupleSize >::template Get< i >::Type type
Definition: localfunctiontuple.hh:390
LocalFunction::HessianRangeType Type
Definition: localfunctiontuple.hh:83
Definition: localfunctiontuple.hh:53
void jacobian(const Point &x, JacobianRangeTupleType &jacobians) const
Definition: localfunctiontuple.hh:249
Dune::ForEachType< LocalFunctionEvaluator, DiscreteFunctionTupleType >::Type LocalFunctionTupleType
Definition: localfunctiontuple.hh:113
A constant local function carrying values for one entity.
Definition: const.hh:31
LocalFunction::RangeType Type
Definition: localfunctiontuple.hh:55
Definition: localfunctiontuple.hh:127
LocalFunctionTupleType & localFunctions()
Definition: localfunctiontuple.hh:206
const LocalFunctionTupleType & localFunctions() const
Definition: localfunctiontuple.hh:207
std::tuple HessianRangeTupleType
Definition: localfunctiontuple.hh:229
EntityType::Geometry GeometryType
Definition: localfunctiontuple.hh:115
Definition: localfunctionselector.hh:20
std::tuple_element< i, LocalFunctionTupleType >::type Type
Definition: localfunctiontuple.hh:129
Entity EntityType
entity type
Definition: localfunctiontuple.hh:110
void evaluateQuadrature(const QuadratureType &quadrature, TupleVectorType &vector) const
Definition: localfunctiontuple.hh:257
Definition: localfunctiontuple.hh:81
Entity EntityType
Definition: localfunctiontuple.hh:225
FunctionSpaceType::HessianRangeType HessianRangeType
type of the Hessian
Definition: localfunction.hh:75
void init(const EntityType &entity)
Definition: localfunctiontuple.hh:236
FunctionSpaceType::RangeType RangeType
type of range vectors, i.e., type of function values
Definition: localfunction.hh:71
actual interface class for quadratures
Definition: quadrature.hh:320
void hessian(const Point &x, HessianRangeTupleType &hessians) const
evaluate hessians of local functions
Definition: localfunctiontuple.hh:180