DUNE-FEM (unstable)

default.hh
1#ifndef DUNE_FEM_BASISFUNCTIONSET_DEFAULT_HH
2#define DUNE_FEM_BASISFUNCTIONSET_DEFAULT_HH
3
4// C++ includes
5#include <cassert>
6#include <cstddef>
7#include <memory>
8#include <type_traits>
9#include <utility>
10#include <optional>
11
12// dune-geometry includes
13#include <dune/geometry/referenceelements.hh>
14#include <dune/geometry/type.hh>
15
16#include <dune/fem/storage/entitygeometry.hh>
17#include <dune/fem/space/shapefunctionset/caching.hh>
18
19// dune-fem includes
20#include <dune/fem/space/basisfunctionset/functor.hh>
21#include <dune/fem/space/basisfunctionset/transformation.hh>
22#include <dune/fem/space/shapefunctionset/caching.hh>
23#include <dune/fem/quadrature/cachingquadrature.hh>
24#include <dune/fem/space/common/functionspace.hh>
25#include <dune/fem/version.hh>
26
27#include <dune/fem/space/basisfunctionset/codegen.hh>
28#include <dune/fem/space/basisfunctionset/evaluatecaller.hh>
29
30namespace Dune
31{
32
33 namespace Fem
34 {
35 template< class Entity, class ShapeFunctionSet >
36 class BasisFunctionSetStorage : public EntityGeometryStorage< Entity >
37 {
38 typedef EntityGeometryStorage< Entity > BaseType;
39 typedef BasisFunctionSetStorage< Entity, ShapeFunctionSet > ThisType;
40
41 public:
43 typedef typename BaseType :: EntityType EntityType;
45 typedef typename BaseType :: Geometry Geometry;
46
48 typedef ShapeFunctionSet ShapeFunctionSetType;
49
50 // if underlying shape function set was created with storage CodegenStorage
51 // then this value should be true (see selectcaching.hh)
52 static constexpr bool codegenShapeFunctionSet = detail::IsCodegenShapeFunctionSet< ShapeFunctionSetType >::value;
53
54 static const int pointSetId = detail::SelectPointSetId< ShapeFunctionSetType >::value;
55
57 BasisFunctionSetStorage () {}
58
60 explicit BasisFunctionSetStorage( const EntityType &entity, const ShapeFunctionSet &shapeFunctionSet = ShapeFunctionSet() )
61 : BaseType( entity ),
62 shapeFunctionSet_( shapeFunctionSet )
63 {
64 }
65
66 BasisFunctionSetStorage ( const BasisFunctionSetStorage &other )
67 : BaseType( other ),
68 shapeFunctionSet_( other.shapeFunctionSet_ )
69 {
70 }
71
72 BasisFunctionSetStorage &operator= ( const BasisFunctionSetStorage &other )
73 {
75 shapeFunctionSet_ = other.shapeFunctionSet_;
76 return *this;
77 }
78
79 using BaseType :: entity;
80 using BaseType :: valid;
81 using BaseType :: geometry;
82 using BaseType :: type;
83 using BaseType :: referenceElement;
84
85 // Non-interface methods
86 // ---------------------
87
89 const ShapeFunctionSetType &shapeFunctionSet () const { return shapeFunctionSet_; }
90
91 // Basis Function Set Interface Methods
92 // ------------------------------------
93
95 int order () const { return shapeFunctionSet().order(); }
96
98 std::size_t size () const { return shapeFunctionSet().size(); }
99
100 protected:
101 ShapeFunctionSetType shapeFunctionSet_;
102 };
103
104
105 // DefaultBasisFunctionSet
106 // -----------------------
107
121 template< class Entity, class ShapeFunctionSet >
123 : public BasisFunctionSetStorage< Entity, ShapeFunctionSet >
124 {
125 typedef BasisFunctionSetStorage< Entity, ShapeFunctionSet > BaseType;
127
128 public:
131
133 typedef typename BaseType::Geometry Geometry ;
134
136 typedef typename Geometry::ctype ctype;
137
139 typedef typename BaseType::ShapeFunctionSetType ShapeFunctionSetType;
140
141 // if underlying shape function set was created with storage CodegenStorage
142 // then this value should be true (see selectcaching.hh)
143 using BaseType :: codegenShapeFunctionSet;
144
145 protected:
147 typedef typename LocalFunctionSpaceType::JacobianRangeType LocalJacobianRangeType;
149
150 typedef typename LocalFunctionSpaceType::RangeFieldType RangeFieldType;
151
152 public:
153 // slight misuse of struct ToLocalFunctionSpace!!!
156
165
166 typedef typename FunctionSpaceType::ScalarFunctionSpaceType ScalarFunctionSpaceType;
167
168 typedef typename ScalarFunctionSpaceType::RangeType ScalarRangeType;
169 typedef typename ScalarFunctionSpaceType::JacobianRangeType ScalarJacobianRangeType;
170
172 typedef std::decay_t< decltype( Dune::ReferenceElements< ctype, Geometry::coorddimension >::general( std::declval< const Dune::GeometryType & >() ) ) > ReferenceElementType;
173
175
178
180 explicit DefaultBasisFunctionSet ( const EntityType &entity, const ShapeFunctionSet &shapeFunctionSet = ShapeFunctionSet() )
181 : BaseType( entity, shapeFunctionSet )
182 {
183 }
184
185 DefaultBasisFunctionSet ( const DefaultBasisFunctionSet &other ) = default;
186 DefaultBasisFunctionSet &operator= ( const DefaultBasisFunctionSet &other ) = default;
187
188 using BaseType :: entity;
189 using BaseType :: geometry;
190 using BaseType :: type;
191 using BaseType :: shapeFunctionSet;
192 using BaseType :: order;
193 using BaseType :: size;
194 using BaseType :: referenceElement;
195
199 template< class QuadratureType, class Vector, class DofVector >
200 void axpy ( const QuadratureType &quad, const Vector &values, DofVector &dofs ) const
201 {
202 axpyImpl( quad, values, dofs, values[ 0 ] );
203 }
204
211 template< class QuadratureType, class VectorA, class VectorB, class DofVector >
212 void axpy ( const QuadratureType &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector &dofs ) const
213 {
214 assert( valuesA.size() > 0 );
215 assert( valuesB.size() > 0 );
216
217 axpyImpl( quad, valuesA, dofs, valuesA[ 0 ] );
218 axpyImpl( quad, valuesB, dofs, valuesB[ 0 ] );
219 }
220
224 template< class Point, class DofVector >
225 void axpy ( const Point &x, const RangeType &valueFactor, DofVector &dofs ) const
226 {
227 FunctionalAxpyFunctor< RangeType, DofVector > f( valueFactor, dofs );
228 shapeFunctionSet().evaluateEach( x, f );
229 }
230
234 template< class Point, class DofVector >
235 void axpy ( const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs ) const
236 {
237 typedef typename Geometry::JacobianInverseTransposed GeometryJacobianInverseTransposedType;
238 const Geometry &geo = geometry();
239 const GeometryJacobianInverseTransposedType &gjit = geo.jacobianInverseTransposed( coordinate( x ) );
240 LocalJacobianRangeType tmpJacobianFactor;
241 for( int r = 0; r < FunctionSpaceType::dimRange; ++r )
242 gjit.mtv( jacobianFactor[ r ], tmpJacobianFactor[ r ] );
243
244 FunctionalAxpyFunctor< LocalJacobianRangeType, DofVector > f( tmpJacobianFactor, dofs );
245 shapeFunctionSet().jacobianEach( x, f );
246 }
247
251 template< class Point, class DofVector >
252 void axpy ( const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor,
253 DofVector &dofs ) const
254 {
255 axpy( x, valueFactor, dofs );
256 axpy( x, jacobianFactor, dofs );
257 }
258
261 template< class Point, class DofVector >
262 void axpy ( const Point &x, const HessianRangeType &hessianFactor, DofVector &dofs ) const
263 {
264 typedef typename Geometry::JacobianInverseTransposed GeometryJacobianInverseTransposedType;
265 const Geometry &geo = geometry();
266 const GeometryJacobianInverseTransposedType &gjit = geo.jacobianInverseTransposed( coordinate( x ) );
267 LocalHessianRangeType tmpHessianFactor( RangeFieldType(0) );
268 hessianTransformation(gjit.transposed(),hessianFactor,tmpHessianFactor);
269
270 FunctionalAxpyFunctor< LocalHessianRangeType, DofVector > f( tmpHessianFactor, dofs );
271 shapeFunctionSet().hessianEach( x, f );
272 }
273
274
276 template< class QuadratureType, class DofVector, class RangeArray >
277 void evaluateAll ( const QuadratureType &quad, const DofVector &dofs, RangeArray &ranges ) const
278 {
279 assert( ranges.size() >= quad.nop() );
280
281 // if shape function set supports codegen and quadrature supports caching
282 if constexpr ( codegenShapeFunctionSet && std::is_base_of< CachingInterface, QuadratureType > :: value)
283 {
284 typedef Codegen :: EvaluateCallerInterfaceTraits< QuadratureType, RangeArray, DofVector > Traits;
285 typedef Codegen :: EvaluateCallerInterface< Traits > BaseEvaluationType;
286
287 // get base function evaluate caller
288 const auto& baseEval = BaseEvaluationType::storage( *this, rangeCache( quad ), quad );
289
290 // true if implementation exists, otherwise this is a nullptr
291 if( baseEval )
292 {
293 baseEval->evaluateRanges( quad, dofs, ranges );
294 return ;
295 }
296 }
297
298 {
299 // call axpy method for each entry of the given vector, e.g. rangeVector or jacobianVector
300 const unsigned int nop = quad.nop();
301 for( unsigned int qp = 0; qp < nop; ++qp )
302 {
303 evaluateAll( quad[ qp ], dofs, ranges[ qp ] );
304 }
305 }
306 }
307
309 template< class Point, class DofVector >
310 void evaluateAll ( const Point &x, const DofVector &dofs, RangeType &value ) const
311 {
312 value = RangeType( 0 );
313 AxpyFunctor< DofVector, RangeType > f( dofs, value );
314 shapeFunctionSet().evaluateEach( x, f );
315 }
316
318 template< class Point, class RangeArray >
319 void evaluateAll ( const Point &x, RangeArray &values ) const
320 {
321 assert( values.size() >= size() );
322 std::fill( values.begin(), values.end(), RangeType(0) );
323 AssignFunctor< RangeArray > f( values );
324 shapeFunctionSet().evaluateEach( x, f );
325 }
326
328 template< class QuadratureType, class DofVector, class JacobianArray >
329 void jacobianAll ( const QuadratureType &quad, const DofVector &dofs, JacobianArray &jacobians ) const
330 {
331 assert( jacobians.size() >= quad.nop() );
332
333 // if shape function set supports codegen and quadrature supports caching
334 if constexpr ( codegenShapeFunctionSet && std::is_base_of< CachingInterface, QuadratureType > :: value)
335 {
336 typedef Codegen :: EvaluateCallerInterfaceTraits< QuadratureType, JacobianArray, DofVector, Geometry > Traits;
337 typedef Codegen :: EvaluateCallerInterface< Traits > BaseEvaluationType;
338
339 // get base function evaluate caller (calls axpyRanges)
340 const auto& baseEval = BaseEvaluationType::storage( *this, jacobianCache( quad ), quad );
341
342 // true if implementation exists
343 if( baseEval )
344 {
345 // call appropriate axpyJacobian method
346 baseEval->evaluateJacobians( quad, geometry(), dofs, jacobians );
347 return ;
348 }
349 }
350
351 {
352 // call axpy method for each entry of the given vector, e.g. rangeVector or jacobianVector
353 const unsigned int nop = quad.nop();
354 for( unsigned int qp = 0; qp < nop; ++qp )
355 {
356 jacobianAll( quad[ qp ], dofs, jacobians[ qp ] );
357 }
358 }
359 }
360
362 template< class Point, class DofVector >
363 void jacobianAll ( const Point &x, const DofVector &dofs, JacobianRangeType &jacobian ) const
364 {
365 LocalJacobianRangeType localJacobian( RangeFieldType( 0 ) );
366 AxpyFunctor< DofVector, LocalJacobianRangeType > f( dofs, localJacobian );
367 shapeFunctionSet().jacobianEach( x, f );
368
369 typedef JacobianTransformation< Geometry > Transformation;
370 Transformation transformation( geometry(), coordinate( x ) );
371 transformation( localJacobian, jacobian );
372 }
373
375 template< class Point, class JacobianRangeArray >
376 void jacobianAll ( const Point &x, JacobianRangeArray &jacobians ) const
377 {
378 assert( jacobians.size() >= size() );
379 typedef JacobianTransformation< Geometry > Transformation;
380
381 Transformation transformation( geometry(), coordinate( x ) );
382 AssignFunctor< JacobianRangeArray, Transformation > f( jacobians, transformation );
383 shapeFunctionSet().jacobianEach( x, f );
384 }
385
387 template< class QuadratureType, class DofVector, class HessianArray >
388 void hessianAll ( const QuadratureType &quad, const DofVector &dofs, HessianArray &hessians ) const
389 {
390 assert( hessians.size() >= quad.nop() );
391 // call axpy method for each entry of the given vector, e.g. rangeVector or jacobianVector
392 const unsigned int nop = quad.nop();
393 for( unsigned int qp = 0; qp < nop; ++qp )
394 {
395 hessianAll( quad[ qp ], dofs, hessians[ qp ] );
396 }
397 }
398
400 template< class Point, class DofVector >
401 void hessianAll ( const Point &x, const DofVector &dofs, HessianRangeType &hessian ) const
402 {
403 LocalHessianRangeType localHessian( typename LocalHessianRangeType::value_type( RangeFieldType( 0 ) ) );
404 AxpyFunctor< DofVector, LocalHessianRangeType > f( dofs, localHessian );
405 shapeFunctionSet().hessianEach( x, f );
406
407 typedef HessianTransformation< Geometry > Transformation;
408 Transformation transformation( geometry(), coordinate( x ) );
409 transformation( localHessian, hessian );
410 }
411
413 template< class Point, class HessianRangeArray >
414 void hessianAll ( const Point &x, HessianRangeArray &hessians ) const
415 {
416 assert( hessians.size() >= size() );
417 typedef HessianTransformation< Geometry > Transformation;
418 Transformation transformation( geometry(), coordinate( x ) );
419 AssignFunctor< HessianRangeArray, Transformation > f( hessians, transformation );
420 shapeFunctionSet().hessianEach( x, f );
421 }
422 protected:
424 template< class QuadratureType, class RangeArray, class DofVector >
425 void axpyImpl ( const QuadratureType &quad, const RangeArray &rangeFactors, DofVector &dofs, const RangeType& ) const
426 {
427 assert( rangeFactors.size() >= quad.nop() );
428
429 // if shape function set supports codegen and quadrature supports caching
430 if constexpr ( codegenShapeFunctionSet && std::is_base_of< CachingInterface, QuadratureType > :: value)
431 {
432 typedef Codegen :: EvaluateCallerInterfaceTraits< QuadratureType, RangeArray, DofVector > Traits;
433 typedef Codegen :: EvaluateCallerInterface< Traits > BaseEvaluationType;
434
435 // get base function evaluate caller (calls axpyRanges)
436 const auto& baseEval = BaseEvaluationType::storage( *this, rangeCache( quad ), quad );
437
438 // true if implementation exists
439 if( baseEval )
440 {
441 baseEval->axpyRanges( quad, rangeFactors, dofs );
442 return ;
443 }
444 }
445
446 {
447 // call axpy method for each entry of the given vector, e.g. rangeVector or jacobianVector
448 const unsigned int nop = quad.nop();
449 for( unsigned int qp = 0; qp < nop; ++qp )
450 {
451 axpy( quad[ qp ], rangeFactors[ qp ], dofs );
452 }
453 }
454 }
455
457 template< class QuadratureType, class JacobianArray, class DofVector >
458 void axpyImpl ( const QuadratureType &quad, const JacobianArray &jacobianFactors, DofVector &dofs, const JacobianRangeType& ) const
459 {
460 assert( jacobianFactors.size() >= quad.nop() );
461 // if shape function set supports codegen and quadrature supports caching
462 if constexpr ( codegenShapeFunctionSet && std::is_base_of< CachingInterface, QuadratureType > :: value)
463 {
464 typedef Codegen :: EvaluateCallerInterfaceTraits< QuadratureType, JacobianArray, DofVector, Geometry > Traits;
465 typedef Codegen :: EvaluateCallerInterface< Traits > BaseEvaluationType;
466
467 // get base function evaluate caller (calls axpyRanges)
468 const auto& baseEval = BaseEvaluationType::storage( *this, jacobianCache( quad ), quad );
469
470 // true if implementation exists
471 if( baseEval )
472 {
473 // call appropriate axpyRanges method
474 baseEval->axpyJacobians( quad, geometry(), jacobianFactors, dofs );
475 return ;
476 }
477 }
478
479 {
480 // call axpy method for each entry of the given vector, e.g. rangeVector or jacobianVector
481 const unsigned int nop = quad.nop();
482 for( unsigned int qp = 0; qp < nop; ++qp )
483 {
484 axpy( quad[ qp ], jacobianFactors[ qp ], dofs );
485 }
486 }
487 }
488
490 template< class QuadratureType, class HessianArray, class DofVector >
491 void axpyImpl ( const QuadratureType &quad, const HessianArray &hessianFactors, DofVector &dofs, const HessianRangeType& ) const
492 {
493 assert( hessianFactors.size() >= quad.nop() );
494 /* TODO add code generation for hessians
495 // if shape function set supports codegen and quadrature supports caching
496 if constexpr ( codegenShapeFunctionSet && std::is_base_of< CachingInterface, QuadratureType > :: value)
497 {
498 typedef Codegen :: EvaluateCallerInterfaceTraits< QuadratureType, HessianArray, DofVector, Geometry > Traits;
499 typedef Codegen :: EvaluateCallerInterface< Traits > BaseEvaluationType;
500
501 // get base function evaluate caller (calls axpyRanges)
502 const auto& baseEval = BaseEvaluationType::storage( *this, hessianCache( quad ), quad );
503
504 // true if implementation exists
505 if( baseEval )
506 {
507 // call appropriate axpyRanges method
508 const Geometry &geo = geometry();
509 baseEval->axpyHessian( quad, geo, hessianFactors, dofs );
510 return ;
511 }
512 }
513 */
514 {
515 const unsigned int nop = quad.nop();
516 for( unsigned int qp = 0; qp < nop; ++qp )
517 {
518 axpy( quad[ qp ], hessianFactors[ qp ], dofs );
519 }
520 }
521 }
522
523 template <class QuadratureType>
524 const auto& rangeCache( const QuadratureType& quad ) const
525 {
526 return shapeFunctionSet().scalarShapeFunctionSet().impl().rangeCache( quad );
527 }
528
529 template <class QuadratureType>
530 const auto& jacobianCache( const QuadratureType& quad ) const
531 {
532 return shapeFunctionSet().scalarShapeFunctionSet().impl().jacobianCache( quad );
533 }
534 };
535
536 } // namespace Fem
537
538} // namespace Dune
539
540#endif // #ifndef DUNE_FEM_BASISFUNCTIONSET_DEFAULT_HH
Wrapper class for entities.
Definition: entity.hh:66
Definition: default.hh:124
FunctionSpaceType::DomainType DomainType
domain type
Definition: default.hh:160
void evaluateAll(const Point &x, const DofVector &dofs, RangeType &value) const
Definition: default.hh:310
DefaultBasisFunctionSet()
constructor
Definition: default.hh:177
FunctionSpaceType::HessianRangeType HessianRangeType
hessian range type
Definition: default.hh:164
ToNewDimDomainFunctionSpace< LocalFunctionSpaceType, Geometry::coorddimension >::Type FunctionSpaceType
type of function space
Definition: default.hh:155
void axpy(const QuadratureType &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector &dofs) const
evaluate all basis function and multiply with given values and add to dofs
Definition: default.hh:212
void axpy(const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
evaluate all basis function and derivatives and multiply with given values and add to dofs
Definition: default.hh:252
FunctionSpaceType::RangeType RangeType
range type
Definition: default.hh:158
void axpy(const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
evaluate all derivatives of all basis function and multiply with given values and add to dofs
Definition: default.hh:235
void jacobianAll(const Point &x, JacobianRangeArray &jacobians) const
Definition: default.hh:376
DefaultBasisFunctionSet(const EntityType &entity, const ShapeFunctionSet &shapeFunctionSet=ShapeFunctionSet())
constructor
Definition: default.hh:180
void axpy(const Point &x, const HessianRangeType &hessianFactor, DofVector &dofs) const
Add H:D^2phi to each dof.
Definition: default.hh:262
FunctionSpaceType::JacobianRangeType JacobianRangeType
jacobian range type
Definition: default.hh:162
void hessianAll(const Point &x, HessianRangeArray &hessians) const
Definition: default.hh:414
void evaluateAll(const QuadratureType &quad, const DofVector &dofs, RangeArray &ranges) const
Definition: default.hh:277
std::decay_t< decltype(Dune::ReferenceElements< ctype, Geometry::coorddimension >::general(std::declval< const Dune::GeometryType & >())) > ReferenceElementType
type of reference element
Definition: default.hh:172
void hessianAll(const Point &x, const DofVector &dofs, HessianRangeType &hessian) const
Definition: default.hh:401
void hessianAll(const QuadratureType &quad, const DofVector &dofs, HessianArray &hessians) const
Definition: default.hh:388
void evaluateAll(const Point &x, RangeArray &values) const
Definition: default.hh:319
BaseType::EntityType EntityType
entity type
Definition: default.hh:130
void axpyImpl(const QuadratureType &quad, const HessianArray &hessianFactors, DofVector &dofs, const HessianRangeType &) const
evaluate all basis function and multiply with given values and add to dofs
Definition: default.hh:491
void jacobianAll(const Point &x, const DofVector &dofs, JacobianRangeType &jacobian) const
Definition: default.hh:363
BaseType::Geometry Geometry
geometry
Definition: default.hh:133
BaseType::ShapeFunctionSetType ShapeFunctionSetType
shape function set type
Definition: default.hh:139
void axpyImpl(const QuadratureType &quad, const RangeArray &rangeFactors, DofVector &dofs, const RangeType &) const
evaluate all basis function and multiply with given values and add to dofs
Definition: default.hh:425
void axpyImpl(const QuadratureType &quad, const JacobianArray &jacobianFactors, DofVector &dofs, const JacobianRangeType &) const
evaluate all basis function and multiply with given values and add to dofs
Definition: default.hh:458
void axpy(const Point &x, const RangeType &valueFactor, DofVector &dofs) const
evaluate all basis function and multiply with given values and add to dofs
Definition: default.hh:225
Geometry::ctype ctype
type of coordinate field
Definition: default.hh:136
void jacobianAll(const QuadratureType &quad, const DofVector &dofs, JacobianArray &jacobians) const
Definition: default.hh:329
void axpy(const QuadratureType &quad, const Vector &values, DofVector &dofs) const
evaluate all basis function and multiply with given values and add to dofs
Definition: default.hh:200
implementation of entity and geometry storage for basis function set and local functions
Definition: entitygeometry.hh:35
Dune::GeometryType type() const
return geometry type
Definition: entitygeometry.hh:126
EntityGeometryStorageImpl & operator=(const EntityGeometryStorageImpl &other)
assignment operator
Definition: entitygeometry.hh:90
const Entity & entity() const
return entity
Definition: entitygeometry.hh:101
const Geometry & geometry() const
return geometry
Definition: entitygeometry.hh:111
const ReferenceElementType & referenceElement() const
return reference element
Definition: entitygeometry.hh:129
Entity EntityType
entity type
Definition: entitygeometry.hh:39
EntityType::Geometry Geometry
type of geometry
Definition: entitygeometry.hh:42
Definition: explicitfieldvector.hh:75
FunctionSpaceTraits::RangeType RangeType
Type of range vector (using type of range field) has a Dune::FieldVector type interface.
Definition: functionspaceinterface.hh:71
@ dimRange
dimension of range vector space
Definition: functionspaceinterface.hh:48
FunctionSpaceTraits::LinearMappingType JacobianRangeType
Intrinsic type used for the jacobian values has a Dune::FieldMatrix type interface.
Definition: functionspaceinterface.hh:75
FunctionSpaceTraits::DomainType DomainType
Type of domain vector (using type of domain field) has a Dune::FieldVector type interface.
Definition: functionspaceinterface.hh:67
FunctionSpaceTraits::RangeFieldType RangeFieldType
Intrinsic type used for values in the range field (usually a double)
Definition: functionspaceinterface.hh:63
FunctionSpaceTraits::ScalarFunctionSpaceType ScalarFunctionSpaceType
corresponding scalar function space
Definition: functionspaceinterface.hh:83
A vector valued function space.
Definition: functionspace.hh:60
Interface class for shape function sets.
Definition: shapefunctionset.hh:33
Implementation::JacobianInverseTransposed JacobianInverseTransposed
type of jacobian inverse transposed
Definition: geometry.hh:120
GridImp::ctype ctype
define type used for coordinates in grid module
Definition: geometry.hh:100
unspecified value type referenceElement(T &&... t)
Returns a reference element for the objects t....
Dune namespace.
Definition: alignedallocator.hh:13
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition: integersequence.hh:75
convert functions space to space with new dim domain
Definition: functionspace.hh:246
selects Obj::pointSetId if available, otherwise defaultValue (default is -1)
Definition: utility.hh:174
static const ReferenceElement & general(const GeometryType &type)
get general reference elements
Definition: referenceelements.hh:156
A unique label for each type of element that can occur in a grid.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 21, 23:30, 2024)