1 #ifndef DUNE_FEM_BASISFUNCTIONSET_VECTORIAL_HH 2 #define DUNE_FEM_BASISFUNCTIONSET_VECTORIAL_HH 8 #include <dune/geometry/referenceelements.hh> 9 #include <dune/geometry/type.hh> 32 template<
class Implementation >
57 return impl().globalDof( localDof );
70 return impl().localDof( globalDof );
74 const Implementation &
impl ()
const 76 return static_cast< const Implementation &
>( *this );
93 template<
class ScalarBasisFunctionSet,
class Range >
95 :
public DofAlignment< HorizontalDofAlignment< ScalarBasisFunctionSet, Range > >
107 : scalarSize_( scalarBasisFunctionSet.size() )
113 return GlobalDofType( localDof.first*scalarSize_ + localDof.second );
119 return LocalDofType( globalDof / scalarSize_, globalDof % scalarSize_ );
123 std::size_t scalarSize_;
138 template<
class ScalarBasisFunctionSet,
class Range >
140 :
public DofAlignment< VerticalDofAlignment< ScalarBasisFunctionSet, Range > >
145 static const int dimRange = Range::dimension;
158 return GlobalDofType( localDof.first + localDof.second*dimRange );
164 return LocalDofType( globalDof % dimRange, globalDof / dimRange );
178 template<
class DofVector,
class DofAlignment >
181 template<
class DofVector,
class ScalarBasisFunctionSet,
class Range >
186 typedef typename Range::value_type RangeFieldType;
195 : dofs_( &(dofs[ dofAlignment.
globalDof( LocalDofType( coordinate, 0 ) ) ] ) )
198 const RangeFieldType &operator[] ( std::size_t i )
const 204 const RangeFieldType *dofs_;
207 template<
class DofVector,
class ScalarBasisFunctionSet,
class Range >
212 typedef typename Range::value_type RangeFieldType;
222 coordinate_( coordinate ),
223 dofAlignment_( dofAlignment )
226 const RangeFieldType &operator[] ( std::size_t i )
const 228 return dofs_[ dofAlignment_.globalDof(
LocalDofType( coordinate_, i ) ) ];
232 const DofVector &dofs_;
234 DofAlignmentType dofAlignment_;
257 typedef typename ScalarBasisFunctionSetType::EntityType
EntityType;
261 typedef typename ScalarBasisFunctionSetType::FunctionSpaceType ScalarFunctionSpaceType;
262 static const int dimRange = Range::dimension;
268 typedef typename FunctionSpaceType::RangeType
RangeType;
278 typedef typename FunctionSpaceType::RangeFieldType RangeFieldType;
288 : scalarBasisFunctionSet_( scalarBasisFunctionSet ),
289 dofAlignment_( scalarBasisFunctionSet_ )
292 int order ()
const {
return scalarBasisFunctionSet().order(); }
294 std::size_t
size ()
const {
return dimRange*scalarBasisFunctionSet().size(); }
296 const ReferenceElementType &
referenceElement ()
const {
return scalarBasisFunctionSet().referenceElement(); }
298 template<
class Po
int,
class DofVector >
299 void axpy (
const Point &x,
const RangeType &valueFactor, DofVector &dofs )
const 301 axpy< EvaluateAll >( x, valueFactor, dofs );
304 template<
class Po
int,
class DofVector >
305 void axpy (
const Point &x,
const JacobianRangeType &jacobianFactor, DofVector &dofs )
const 307 axpy< JacobianAll >( x, jacobianFactor, dofs );
310 template<
class Po
int,
class DofVector >
311 void axpy (
const Point &x,
const RangeType &valueFactor,
const JacobianRangeType &jacobianFactor,
312 DofVector &dofs )
const 314 axpy( x, valueFactor, dofs );
315 axpy( x, jacobianFactor, dofs );
318 template<
class Quadrature,
class Vector,
class DofVector >
319 void axpy (
const Quadrature &quad,
const Vector &values, DofVector & dofs )
const 321 const unsigned int nop = quad.
nop();
322 for(
unsigned int qp = 0; qp < nop ; ++qp )
323 axpy( quad[ qp ], values[ qp ], dofs );
326 template<
class Quadrature,
class VectorA,
class VectorB,
class DofVector >
327 void axpy (
const Quadrature &quad,
const VectorA &valuesA,
const VectorB &valuesB, DofVector & dofs )
const 329 const unsigned int nop = quad.
nop();
330 for(
unsigned int qp = 0; qp < nop ; ++qp )
332 axpy( quad[ qp ], valuesA[ qp ], dofs );
333 axpy( quad[ qp ], valuesB[ qp ], dofs );
337 template<
class Po
int,
class DofVector >
338 void evaluateAll (
const Point &x,
const DofVector &dofs, RangeType &value )
const 340 evaluateAll< EvaluateAll >( x, dofs, value );
343 template<
class Po
int,
class RangeArray >
346 evaluateAll< EvaluateAll >( x, values );
349 template<
class Quadrature,
class DofVector,
class RangeArray >
352 const unsigned int nop = quad.
nop();
353 for(
unsigned int qp = 0; qp < nop ; ++qp )
354 evaluateAll( quad[ qp ], dofs, ranges[ qp ] );
357 template<
class Po
int,
class DofVector >
358 void jacobianAll (
const Point &x,
const DofVector &dofs, JacobianRangeType &jacobian )
const 360 evaluateAll< JacobianAll >( x, dofs, jacobian );
363 template<
class Po
int,
class JacobianRangeArray >
364 void jacobianAll (
const Point &x, JacobianRangeArray &jacobians )
const 366 evaluateAll< JacobianAll >( x, jacobians );
369 template<
class Quadrature,
class DofVector,
class JacobianArray >
372 const unsigned int nop = quad.
nop();
373 for(
unsigned int qp = 0; qp < nop ; ++qp )
374 jacobianAll( quad[ qp ], dofs, jacobians[ qp ] );
377 template<
class Po
int,
class DofVector >
378 void hessianAll (
const Point &x,
const DofVector &dofs, HessianRangeType &hessian )
const 380 evaluateAll< HessianAll >( x, dofs, hessian );
383 template<
class Po
int,
class HessianRangeArray >
384 void hessianAll (
const Point &x, HessianRangeArray &hessians )
const 386 evaluateAll< HessianAll >( x, hessians );
389 const EntityType &
entity ()
const {
return scalarBasisFunctionSet().entity(); }
395 return scalarBasisFunctionSet_;
399 template<
class Evaluate,
class Po
int,
class DofVector >
400 void axpy (
const Point &x,
const typename Evaluate::Vector &factor, DofVector &dofs )
const 402 const std::size_t size = scalarBasisFunctionSet().size();
403 std::vector< typename Evaluate::Scalar > scalars( size );
404 Evaluate::apply( scalarBasisFunctionSet(), x, scalars );
406 for(
int r = 0; r < dimRange; ++r )
408 for( std::size_t i = 0; i < size; ++i )
411 dofs[
globalDof ] += factor[ r ] * scalars[ i ][ 0 ];
416 template<
class Evaluate,
class Po
int,
class DofVector >
417 void evaluateAll (
const Point &x,
const DofVector &dofs,
typename Evaluate::Vector &vector )
const 419 typename Evaluate::Scalar scalar;
420 for(
int r = 0; r < dimRange; ++r )
423 Evaluate::apply( scalarBasisFunctionSet(), x, subDofs, scalar );
424 vector[ r ] = scalar[ 0 ];
428 template<
class Evaluate,
class Po
int,
class VectorArray >
429 void evaluateAll (
const Point &x, VectorArray &vectorials )
const 431 const std::size_t size = scalarBasisFunctionSet().size();
432 std::vector< typename Evaluate::Scalar > scalars( size );
433 Evaluate::apply( scalarBasisFunctionSet(), x, scalars );
435 typedef typename Evaluate::Vector Vector;
437 for(
int r = 0; r < dimRange; ++r )
439 for( std::size_t i = 0; i < size; ++i )
442 Vector &vector = vectorials[
globalDof ];
443 vector = Vector(
typename Vector::value_type( 0 ) );
444 vector[ r ] = scalars[ i ][ 0 ];
449 ScalarBasisFunctionSetType scalarBasisFunctionSet_;
450 DofAlignmentType dofAlignment_;
458 template<
class ScalarBasisFunctionSet,
class Range,
template<
class,
class >
class DofAlignment >
461 typedef typename ScalarFunctionSpaceType::RangeType
Scalar;
464 template<
class Po
int,
class SubDofVector >
466 const Point &x,
const SubDofVector &dofs, Scalar &scalar )
468 scalarBasisFunctionSet.evaluateAll( x, dofs, scalar );
471 template<
class Po
int,
class ScalarArray >
473 const Point &x, ScalarArray &scalars )
475 scalarBasisFunctionSet.evaluateAll( x, scalars );
484 template<
class ScalarBasisFunctionSet,
class Range,
template<
class,
class >
class DofAlignment >
487 typedef typename ScalarFunctionSpaceType::JacobianRangeType
Scalar;
490 template<
class Po
int,
class SubDofVector >
492 const Point &x,
const SubDofVector &dofs, Scalar &scalar )
494 scalarBasisFunctionSet.jacobianAll( x, dofs, scalar );
497 template<
class Po
int,
class ScalarArray >
499 const Point &x, ScalarArray &scalars )
501 scalarBasisFunctionSet.jacobianAll( x, scalars );
510 template<
class ScalarBasisFunctionSet,
class Range,
template<
class,
class >
class DofAlignment >
513 typedef typename ScalarFunctionSpaceType::HessianRangeType
Scalar;
516 template<
class Po
int,
class SubDofVector >
518 const Point &x,
const SubDofVector &dofs, Scalar &scalar )
520 scalarBasisFunctionSet.hessianAll( x, dofs, scalar );
523 template<
class Po
int,
class ScalarArray >
525 const Point &x, ScalarArray &scalars )
527 scalarBasisFunctionSet.hessianAll( x, scalars );
535 #endif // #ifndef DUNE_FEM_BASISFUNCTIONSET_VECTORIAL_HH
SubDofVector(const DofVector &dofs, int coordinate, const DofAlignmentType &dofAlignment)
Definition: basisfunctionset/vectorial.hh:220
HorizontalDofAlignment(const ScalarBasisFunctionSet &scalarBasisFunctionSet)
Definition: basisfunctionset/vectorial.hh:106
LocalDofType localDof(const GlobalDofType &globalDof) const
map global to local Dof
Definition: basisfunctionset/vectorial.hh:68
int nop() const
obtain the number of integration points
Definition: quadrature.hh:226
void hessianAll(const Point &x, const DofVector &dofs, HessianRangeType &hessian) const
Definition: basisfunctionset/vectorial.hh:378
void evaluateAll(const Point &x, RangeArray &values) const
Definition: basisfunctionset/vectorial.hh:344
BaseType::LocalDofType LocalDofType
Definition: basisfunctionset/vectorial.hh:102
Definition: basisfunctionset/vectorial.hh:182
RangeFieldType value_type
Definition: basisfunctionset/vectorial.hh:192
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, ScalarArray &scalars)
Definition: basisfunctionset/vectorial.hh:498
ScalarFunctionSpaceType::RangeType Scalar
Definition: basisfunctionset/vectorial.hh:461
FunctionSpaceType::HessianRangeType HessianRangeType
Definition: basisfunctionset/vectorial.hh:270
GlobalDofType globalDof(const LocalDofType &localDof) const
map local to global Dof
Definition: basisfunctionset/vectorial.hh:55
const EntityType & entity() const
Definition: basisfunctionset/vectorial.hh:389
FunctionSpaceType::JacobianRangeType JacobianRangeType
Definition: basisfunctionset/vectorial.hh:269
VerticalDofAlignment(const ScalarBasisFunctionSet &)
Definition: basisfunctionset/vectorial.hh:153
RangeFieldType value_type
Definition: basisfunctionset/vectorial.hh:218
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, const SubDofVector &dofs, Scalar &scalar)
Definition: basisfunctionset/vectorial.hh:491
void axpy(const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:311
Definition: basisfunctionset/vectorial.hh:485
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, ScalarArray &scalars)
Definition: basisfunctionset/vectorial.hh:524
SubDofVector(const DofVector &dofs, int coordinate, const DofAlignmentType &dofAlignment)
Definition: basisfunctionset/vectorial.hh:194
std::size_t size() const
Definition: basisfunctionset/vectorial.hh:294
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, const SubDofVector &dofs, Scalar &scalar)
Definition: basisfunctionset/vectorial.hh:465
void jacobianAll(const Point &x, JacobianRangeArray &jacobians) const
Definition: basisfunctionset/vectorial.hh:364
void axpy(const Quadrature &quad, const Vector &values, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:319
FunctionSpaceType::DomainType DomainType
Definition: basisfunctionset/vectorial.hh:267
LocalDofType localDof(const GlobalDofType &globalDof) const
map global to local Dof
Definition: basisfunctionset/vectorial.hh:162
void axpy(const T &a, const T &x, T &y)
Definition: space/basisfunctionset/functor.hh:37
void axpy(const Point &x, const RangeType &valueFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:299
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, ScalarArray &scalars)
Definition: basisfunctionset/vectorial.hh:472
Definition: basisfunctionset/vectorial.hh:511
HessianRangeType Vector
Definition: basisfunctionset/vectorial.hh:514
Extract Sub dof vector for single coordinate.
Definition: basisfunctionset/vectorial.hh:179
GlobalDofType globalDof(const LocalDofType &localDof) const
map local to global Dof
Definition: basisfunctionset/vectorial.hh:111
Definition: coordinate.hh:4
BaseType::GlobalDofType GlobalDofType
Definition: basisfunctionset/vectorial.hh:148
DofAlignmentType dofAlignment() const
Definition: basisfunctionset/vectorial.hh:391
FunctionSpaceType::RangeType RangeType
Definition: basisfunctionset/vectorial.hh:268
ScalarFunctionSpaceType::JacobianRangeType Scalar
Definition: basisfunctionset/vectorial.hh:487
void jacobianAll(const Point &x, const DofVector &dofs, JacobianRangeType &jacobian) const
Definition: basisfunctionset/vectorial.hh:358
void hessianAll(const Point &x, HessianRangeArray &hessians) const
Definition: basisfunctionset/vectorial.hh:384
const ReferenceElementType & referenceElement() const
Definition: basisfunctionset/vectorial.hh:296
const ScalarBasisFunctionSetType & scalarBasisFunctionSet() const
Definition: basisfunctionset/vectorial.hh:393
Definition: basisfunctionset/vectorial.hh:459
DofAlignment< ScalarBasisFunctionSet, Range > DofAlignmentType
Definition: basisfunctionset/vectorial.hh:272
JacobianRangeType Vector
Definition: basisfunctionset/vectorial.hh:488
ScalarFunctionSpaceType::HessianRangeType Scalar
Definition: basisfunctionset/vectorial.hh:513
ScalarBasisFunctionSetType::ReferenceElementType ReferenceElementType
Definition: basisfunctionset/vectorial.hh:258
BaseType::LocalDofType LocalDofType
Definition: basisfunctionset/vectorial.hh:149
ToNewDimRangeFunctionSpace< ScalarFunctionSpaceType, dimRange >::Type FunctionSpaceType
Definition: basisfunctionset/vectorial.hh:265
RangeType Vector
Definition: basisfunctionset/vectorial.hh:462
ScalarBasisFunctionSet ScalarBasisFunctionSetType
Definition: basisfunctionset/vectorial.hh:255
Implementation of DofAlignment.
Definition: basisfunctionset/vectorial.hh:139
GlobalDofType globalDof(const LocalDofType &localDof) const
map local to global Dof
Definition: basisfunctionset/vectorial.hh:156
static void apply(const ScalarBasisFunctionSetType &scalarBasisFunctionSet, const Point &x, const SubDofVector &dofs, Scalar &scalar)
Definition: basisfunctionset/vectorial.hh:517
Implementation of DofAlignment.
Definition: basisfunctionset/vectorial.hh:94
Interface documentation for Dof alignment classes used in VectorialBasisFunctionSet.
Definition: basisfunctionset/vectorial.hh:33
BaseType::GlobalDofType GlobalDofType
Definition: basisfunctionset/vectorial.hh:101
Builds a vectorial basis function set from given scalar basis function set.
Definition: basisfunctionset/vectorial.hh:250
void jacobianAll(const Quadrature &quad, const DofVector &dofs, JacobianArray &jacobians) const
Definition: basisfunctionset/vectorial.hh:370
void axpy(const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:305
void axpy(const Quadrature &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector &dofs) const
Definition: basisfunctionset/vectorial.hh:327
void evaluateAll(const Point &x, const DofVector &dofs, RangeType &value) const
Definition: basisfunctionset/vectorial.hh:338
std::pair< int, std::size_t > LocalDofType
local Dof type consists of coordinate number and Dof number in scalar basis function set ...
Definition: basisfunctionset/vectorial.hh:41
const Implementation & impl() const
Definition: basisfunctionset/vectorial.hh:74
std::size_t GlobalDofType
global Dof type
Definition: basisfunctionset/vectorial.hh:37
Definition: basisfunctionset/vectorial.hh:208
int order() const
Definition: basisfunctionset/vectorial.hh:292
VectorialBasisFunctionSet(const ScalarBasisFunctionSetType &scalarBasisFunctionSet)
Definition: basisfunctionset/vectorial.hh:287
static const Point & coordinate(const Point &x)
Definition: coordinate.hh:11
void evaluateAll(const Quadrature &quad, const DofVector &dofs, RangeArray &ranges) const
Definition: basisfunctionset/vectorial.hh:350
LocalDofType localDof(const GlobalDofType &globalDof) const
map global to local Dof
Definition: basisfunctionset/vectorial.hh:117
ScalarBasisFunctionSetType::EntityType EntityType
Definition: basisfunctionset/vectorial.hh:257
convert functions space to space with new dim range
Definition: functionspace.hh:246
actual interface class for quadratures
Definition: quadrature.hh:320
VectorialBasisFunctionSet()
Definition: basisfunctionset/vectorial.hh:285