1 #ifndef DUNE_FEM_EVALUATECALLER_HH 2 #define DUNE_FEM_EVALUATECALLER_HH 7 #include <dune/common/exceptions.hh> 10 #ifdef USE_BASEFUNCTIONSET_CODEGEN 11 #define CODEGEN_INCLUDEMAXNUMS 13 #include <autogeneratedcode.hh> 14 #undef CODEGEN_INCLUDEMAXNUMS 22 #ifndef MAX_NUMBER_OF_QUAD_POINTS 23 #define MAX_NUMBER_OF_QUAD_POINTS 20 26 #ifndef MAX_NUMBER_OF_BASE_FCT 27 #define MAX_NUMBER_OF_BASE_FCT 20 30 #ifndef MIN_NUMBER_OF_QUAD_POINTS 31 #define MIN_NUMBER_OF_QUAD_POINTS 1 34 #ifndef MIN_NUMBER_OF_BASE_FCT 35 #define MIN_NUMBER_OF_BASE_FCT 1 48 template <
class Traits,
55 class LocalDofVectorImp,
65 template <
class Traits,
66 class BaseFunctionSet,
81 template <
class Traits>
87 enum { maxQuadratures = 50 };
97 storage_( maxQuadratures, (ThisType* ) 0 )
102 for(
size_t i = 0; i<storage_.size(); ++i )
103 delete storage_[ i ];
106 ValueType& operator [] (
const int i ) {
return storage_[ i ]; }
107 const ValueType& operator [] (
const int i )
const {
return storage_[ i ]; }
121 virtual void* storageAddress ()
const = 0;
123 virtual void axpyRanges(
const QuadratureType&,
125 LocalDofVectorType & )
const = 0;
127 virtual void evaluateRanges(
const QuadratureType& quad,
128 const LocalDofVectorType & dofs,
129 FactorType& factors)
const = 0;
131 virtual void axpyJacobians(
const QuadratureType&,
134 LocalDofVectorType & )
const = 0;
136 virtual void evaluateJacobians(
const QuadratureType&,
138 const LocalDofVectorType&,
139 FactorType&)
const = 0;
141 template <
class BaseFunctionSet,
class Storage >
142 static const ThisType&
storage(
const BaseFunctionSet& baseSet,
143 const Storage& dataCache,
144 const QuadratureType& quad)
147 assert( baseSet.numDifferentBaseFunctions() <= maxNumBaseFunctions );
148 assert( quad.nop() <= maxQuadNop );
149 assert( quad.id() < maxQuadratures );
153 EvaluatorStorage& evaluators = *evaluatorStorage;
156 const size_t quadId = quad.id();
157 if( evaluators[ quadId ] == 0 )
161 evaluators[ quadId ] =
163 :: create( dataCache , quad.nop(), baseSet.numDifferentBaseFunctions() );
167 assert( ((
void *) &dataCache) == evaluators[ quadId ]->storageAddress() );
170 return *(evaluators[ quadId ]);
174 template <
class Traits,
188 enum { dimRange = BaseFunctionSetType :: dimRange };
199 : rangeStorage_( rangeStorage )
205 const FactorType& rangeFactors,
206 LocalDofVectorType & dofs )
const 208 BaseFunctionSetType :: template AxpyRanges
209 < BaseFunctionSetType, Geometry, dimRange, quadNop, numBaseFct >
:: axpy 210 ( quad, rangeStorage_, rangeFactors, dofs );
214 const Geometry& geometry,
215 const FactorType& jacFactors,
216 LocalDofVectorType& dofs)
const 218 BaseFunctionSetType :: template AxpyJacobians
219 < BaseFunctionSetType, Geometry, dimRange, quadNop, numBaseFct >
:: axpy 220 ( quad, geometry, rangeStorage_, jacFactors, dofs );
224 const LocalDofVectorType & dofs,
225 FactorType& rangeFactors)
const 227 BaseFunctionSetType :: template EvaluateRanges
228 < BaseFunctionSetType, Geometry, dimRange, quadNop, numBaseFct >
229 :: eval ( quad, rangeStorage_, dofs, rangeFactors );
233 const Geometry& geometry,
234 const LocalDofVectorType& dofs,
235 FactorType& jacFactors)
const 237 BaseFunctionSetType :: template EvaluateJacobians
238 < BaseFunctionSetType, Geometry, dimRange, quadNop, numBaseFct > :: eval
239 ( quad, geometry, rangeStorage_, dofs, jacFactors );
242 static InterfaceType*
create(
const RangeVectorType& rangeStorage )
244 return new ThisType( rangeStorage );
250 template <
class Traits,
275 const FactorType& rangeFactors,
276 LocalDofVectorType & dofs )
const 282 const Geometry& geometry,
283 const FactorType& jacFactors,
284 LocalDofVectorType& dofs)
const 290 const LocalDofVectorType & dofs,
291 FactorType& rangeFactors)
const 297 const Geometry& geometry,
298 const LocalDofVectorType& dofs,
299 FactorType& jacFactors)
const 304 static InterfaceType*
create(
const RangeVectorType& )
306 DUNE_THROW(NotImplemented,
"EvaluateImplementation for < " << quadNop <<
" , " << numBaseFct <<
" > not created!");
307 return (InterfaceType*) 0;
311 template <
class Traits,
320 static InterfaceType*
createObj(
const RangeVectorType& rangeStorage,
321 const size_t numbase )
323 if( numBaseFct == numbase )
329 static InterfaceType*
create(
const RangeVectorType& rangeStorage,
330 const size_t quadnop,
const size_t numbase )
332 if( quadNop == quadnop )
339 template <
class Traits,
348 static InterfaceType*
createObj(
const RangeVectorType& rangeStorage,
349 const size_t numbase )
351 if( numBaseFct == numbase )
357 static InterfaceType*
create(
const RangeVectorType& rangeStorage,
358 const size_t quadnop,
const size_t numbase )
360 if( quadNop == quadnop )
369 template <
class Traits,
378 static InterfaceType*
createObj(
const RangeVectorType& rangeStorage,
379 const size_t numbase )
381 if( numBaseFct == numbase )
387 static InterfaceType*
create(
const RangeVectorType& rangeStorage,
388 const size_t quadnop,
const size_t numbase )
390 if( quadNop == quadnop )
399 template <
class Traits>
408 static InterfaceType*
createObj(
const RangeVectorType& rangeStorage,
409 const size_t numbase )
411 if( numBaseFct == numbase )
417 static InterfaceType*
create(
const RangeVectorType& rangeStorage,
418 const size_t quadnop,
const size_t numbase )
420 if( quadNop == quadnop )
429 #ifdef USE_BASEFUNCTIONSET_CODEGEN 430 #define CODEGEN_INCLUDEEVALCALLERS 432 #include <autogeneratedcode.hh> 433 #undef CODEGEN_INCLUDEEVALCALLERS 440 #endif // #ifndef DUNE_FEM_EVALUATECALLER_HH Traits::BaseFunctionSetType BaseFunctionSetType
Definition: evaluatecaller.hh:257
Traits::Geometry Geometry
Definition: evaluatecaller.hh:74
QuadratureImp QuadratureType
Definition: evaluatecaller.hh:59
Definition: evaluatecaller.hh:68
Traits::FactorType FactorType
Definition: evaluatecaller.hh:115
static InterfaceType * create(const RangeVectorType &)
Definition: evaluatecaller.hh:304
Definition: evaluatecaller.hh:177
virtual void axpyRanges(const QuadratureType &quad, const FactorType &rangeFactors, LocalDofVectorType &dofs) const
Definition: evaluatecaller.hh:204
static InterfaceType * createObj(const RangeVectorType &rangeStorage, const size_t numbase)
Definition: evaluatecaller.hh:348
EvaluateCallerInterface< typename Traits::BaseTraits > InterfaceType
Definition: evaluatecaller.hh:318
Traits::FactorType FactorType
Definition: evaluatecaller.hh:259
Traits::LocalDofVectorType LocalDofVectorType
Definition: evaluatecaller.hh:116
Traits::Geometry Geometry
Definition: evaluatecaller.hh:117
#define MIN_NUMBER_OF_QUAD_POINTS
Definition: evaluatecaller.hh:31
EvaluateRealImplementation< Traits, quadNop, numBaseFct > ThisType
Definition: evaluatecaller.hh:189
Definition: evaluatecaller.hh:51
BaseType InterfaceType
Definition: evaluatecaller.hh:269
EvaluateCallerInterface< typename Traits::BaseTraits > InterfaceType
Definition: evaluatecaller.hh:406
virtual void axpyJacobians(const QuadratureType &quad, const Geometry &geometry, const FactorType &jacFactors, LocalDofVectorType &dofs) const
Definition: evaluatecaller.hh:281
virtual void evaluateJacobians(const QuadratureType &quad, const Geometry &geometry, const LocalDofVectorType &dofs, FactorType &jacFactors) const
Definition: evaluatecaller.hh:296
Traits::LocalDofVectorType LocalDofVectorType
Definition: evaluatecaller.hh:260
Traits::RangeVectorType RangeVectorType
Definition: evaluatecaller.hh:375
virtual void * storageAddress() const
Definition: evaluatecaller.hh:202
Definition: evaluatecaller.hh:57
#define MIN_NUMBER_OF_BASE_FCT
Definition: evaluatecaller.hh:35
Traits::QuadratureType QuadratureType
Definition: evaluatecaller.hh:182
const RangeVectorType & rangeStorage_
Definition: evaluatecaller.hh:192
#define MAX_NUMBER_OF_QUAD_POINTS
Definition: evaluatecaller.hh:23
EvaluateImplementation< Traits, quadNop, numBaseFct > ThisType
Definition: evaluatecaller.hh:264
Traits::BaseFunctionSetType BaseFunctionSetType
Definition: evaluatecaller.hh:181
void axpy(const T &a, const T &x, T &y)
Definition: space/basisfunctionset/functor.hh:37
Traits::QuadratureType QuadratureType
Definition: evaluatecaller.hh:71
Traits::QuadratureType QuadratureType
Definition: evaluatecaller.hh:258
static InterfaceType * create(const RangeVectorType &rangeStorage)
Definition: evaluatecaller.hh:242
Traits::FactorType FactorType
Definition: evaluatecaller.hh:72
virtual void evaluateJacobians(const QuadratureType &quad, const Geometry &geometry, const LocalDofVectorType &dofs, FactorType &jacFactors) const
Definition: evaluatecaller.hh:232
virtual void axpyJacobians(const QuadratureType &quad, const Geometry &geometry, const FactorType &jacFactors, LocalDofVectorType &dofs) const
Definition: evaluatecaller.hh:213
#define MAX_NUMBER_OF_BASE_FCT
Definition: evaluatecaller.hh:27
static const ThisType & storage(const BaseFunctionSet &baseSet, const Storage &dataCache, const QuadratureType &quad)
Definition: evaluatecaller.hh:142
Traits::QuadratureType QuadratureType
Definition: evaluatecaller.hh:114
static InterfaceType * create(const RangeVectorType &rangeStorage, const size_t quadnop, const size_t numbase)
Definition: evaluatecaller.hh:329
Definition: evaluatecaller.hh:253
EvaluateCallerInterface()
Definition: evaluatecaller.hh:111
Definition: coordinate.hh:4
LocalDofVectorImp LocalDofVectorType
Definition: evaluatecaller.hh:61
Traits::LocalDofVectorType LocalDofVectorType
Definition: evaluatecaller.hh:73
~EvaluatorStorage()
Definition: evaluatecaller.hh:100
Definition: evaluatecaller.hh:45
Traits::Geometry Geometry
Definition: evaluatecaller.hh:261
Traits::Geometry Geometry
Definition: evaluatecaller.hh:185
RangeVectorImp RangeVectorType
Definition: evaluatecaller.hh:77
Definition: evaluatecaller.hh:82
static InterfaceType * createObj(const RangeVectorType &rangeStorage, const size_t numbase)
Definition: evaluatecaller.hh:320
static InterfaceType * create(const RangeVectorType &rangeStorage, const size_t quadnop, const size_t numbase)
Definition: evaluatecaller.hh:357
Traits::RangeVectorType RangeVectorType
Definition: evaluatecaller.hh:317
static InterfaceType * create(const RangeVectorType &rangeStorage, const size_t quadnop, const size_t numbase)
Definition: evaluatecaller.hh:387
std::vector< ValueType > storage_
Definition: evaluatecaller.hh:94
GeometryImp Geometry
Definition: evaluatecaller.hh:62
Traits BaseTraits
Definition: evaluatecaller.hh:70
Traits::RangeVectorType RangeVectorType
Definition: evaluatecaller.hh:405
EvaluateImplementation(const RangeVectorType &rangeStorage)
Definition: evaluatecaller.hh:271
BaseFunctionSet BaseFunctionSetType
Definition: evaluatecaller.hh:76
Traits::FactorType FactorType
Definition: evaluatecaller.hh:183
virtual void axpyRanges(const QuadratureType &quad, const FactorType &rangeFactors, LocalDofVectorType &dofs) const
Definition: evaluatecaller.hh:274
EvaluateRealImplementation(const RangeVectorType &rangeStorage)
Definition: evaluatecaller.hh:198
ThisType * ValueType
Definition: evaluatecaller.hh:93
Generic implementation of a Dune quadrature.
Definition: quadratureimp.hh:178
static InterfaceType * create(const RangeVectorType &rangeStorage, const size_t quadnop, const size_t numbase)
Definition: evaluatecaller.hh:417
BaseType InterfaceType
Definition: evaluatecaller.hh:196
Definition: evaluatecaller.hh:90
ThreadSafeValue realizes thread safety for a given variable by creating an instance of this variable ...
Definition: threadsafevalue.hh:16
static InterfaceType * createObj(const RangeVectorType &rangeStorage, const size_t numbase)
Definition: evaluatecaller.hh:408
EvaluateCallerInterface< typename Traits::BaseTraits > InterfaceType
Definition: evaluatecaller.hh:346
Traits::RangeVectorType RangeVectorType
Definition: evaluatecaller.hh:262
EvaluateCallerInterface< typename Traits::BaseTraits > InterfaceType
Definition: evaluatecaller.hh:376
EvaluatorStorage()
Definition: evaluatecaller.hh:96
FactorImp FactorType
Definition: evaluatecaller.hh:60
virtual void evaluateRanges(const QuadratureType &quad, const LocalDofVectorType &dofs, FactorType &rangeFactors) const
Definition: evaluatecaller.hh:289
EvaluateCallerInterface< typename Traits::BaseTraits > BaseType
Definition: evaluatecaller.hh:190
virtual ~EvaluateCallerInterface()
Definition: evaluatecaller.hh:119
static InterfaceType * createObj(const RangeVectorType &rangeStorage, const size_t numbase)
Definition: evaluatecaller.hh:378
virtual void evaluateRanges(const QuadratureType &quad, const LocalDofVectorType &dofs, FactorType &rangeFactors) const
Definition: evaluatecaller.hh:223
EvaluateCallerInterface< typename Traits::BaseTraits > BaseType
Definition: evaluatecaller.hh:266
Traits::LocalDofVectorType LocalDofVectorType
Definition: evaluatecaller.hh:184
Traits::RangeVectorType RangeVectorType
Definition: evaluatecaller.hh:186
Traits::RangeVectorType RangeVectorType
Definition: evaluatecaller.hh:345