1 #ifndef DUNE_FEM_SPACE_LAGRANGE_LAGRANGEPOINTS_HH 2 #define DUNE_FEM_SPACE_LAGRANGE_LAGRANGEPOINTS_HH 5 #include <dune/geometry/referenceelements.hh> 30 template<
unsigned int topologyId,
unsigned int dim,
unsigned int polOrder >
32 :
public GenericLagrangePoint< typename GeometryWrapper< topologyId, dim >::GenericGeometryType, polOrder >
38 static const unsigned int dimension = BaseType::dimension;
46 template<
unsigned int codim >
66 BaseType::dofSubEntity( codim, subEntity );
69 void dofSubEntity (
unsigned int &codim,
unsigned int &subEntity,
unsigned int &dofNumber )
71 BaseType::dofSubEntity( codim, subEntity, dofNumber );
77 return BaseType::entityDofNumber( codim, subEntity, dof );
81 template<
unsigned int dim,
unsigned int maxPolOrder >
91 static const unsigned int maxPolynomialOrder = maxPolOrder;
97 unsigned int subEntity,
98 unsigned int dofNumber )
const = 0;
100 virtual GeometryType geometryType ()
const = 0;
108 virtual unsigned int maxDofs (
unsigned int codim )
const = 0;
112 return maxPolynomialOrder;
122 virtual unsigned int numDofs (
unsigned int codim,
unsigned int subEntity )
const = 0;
130 virtual unsigned int numDofs (
unsigned int codim )
const = 0;
134 return maxPolynomialOrder;
138 template<
unsigned int topologyId,
unsigned int dim,
unsigned int maxPolOrder,
int polOrder >
149 entityDofNumber (
unsigned int codim,
unsigned int subEntity,
unsigned int dofNumber )
const 151 return LagrangePointType::entityDofNumber( codim, subEntity, dofNumber );
156 return GeometryType( topologyId, dim );
161 virtual unsigned int maxDofs (
unsigned int codim )
const 163 return LagrangePointType::maxDofs( codim );
169 numDofs (
unsigned int codim,
unsigned int subEntity )
const 171 return LagrangePointType::numDofs( codim, subEntity );
176 virtual unsigned int numDofs (
unsigned int codim )
const 178 return LagrangePointType::numDofs( codim );
181 virtual int order ()
const {
return polOrder; }
194 template<
class FieldImp,
int dim,
unsigned int maxPolOrder >
209 static const unsigned int maxPolynomialOrder = maxPolOrder;
218 const LagrangePointInterfaceType &lagrangePointImpl ()
const 220 assert( lagrangePointImpl_ ) ;
221 return *lagrangePointImpl_;
228 lagrangePointImpl_( 0 )
233 delete lagrangePointImpl_;
243 assert( lagrangePointImpl_ == 0 );
244 lagrangePointImpl_ = lpImpl ;
249 return dofInfos_[ index ];
254 unsigned int &subEntity,
255 unsigned int &dofNumber )
const 257 const LocalKey &dofInfo = this->dofInfo( index );
258 codim = dofInfo.
codim();
260 dofNumber = dofInfo.
index();
264 unsigned int subEntity,
265 unsigned int dofNumber )
const 267 return lagrangePointImpl().entityDofNumber( codim, subEntity, dofNumber );
272 return lagrangePointImpl().geometryType();
281 unsigned int maxDofs (
unsigned int codim )
const 283 return lagrangePointImpl().maxDofs( codim );
288 return LagrangePointInterfaceType::maxOrder();
298 unsigned int numDofs (
unsigned int codim,
unsigned int subEntity )
const 300 return lagrangePointImpl().numDofs( codim, subEntity );
309 unsigned int numDofs (
unsigned int codim )
const 311 return lagrangePointImpl().numDofs( codim );
316 return lagrangePointImpl().order();
322 dofInfos_.push_back( dofInfo );
326 std::vector< LocalKey > dofInfos_;
327 const LagrangePointInterfaceType* lagrangePointImpl_;
331 template<
class FieldImp,
unsigned int topologyId,
unsigned int dim,
unsigned int maxPolOrder >
346 static const int maxPolynomialOrder = maxPolOrder ;
353 struct CreateLagrangePoint
358 static void apply( ThisType& lp,
const int order )
361 if( order != pOrd ) return ;
365 LagrangePointType pt( i );
367 CoordinateType local;
371 unsigned int codim, subEntity, dofNumber;
372 pt.dofSubEntity( codim, subEntity, dofNumber );
373 lp.addDofInfo(
LocalKey( subEntity, codim, dofNumber ) );
377 LagrangePointImplementationType;
378 lp.setLagrangePointImpl(
new LagrangePointImplementationType() );
385 ForLoop< CreateLagrangePoint, 1, maxPolynomialOrder > :: apply( *
this, maxPolynomialOrder );
391 ForLoop< CreateLagrangePoint, 1, maxPolynomialOrder > :: apply( *
this, order );
395 assert( order <= maxPolynomialOrder );
396 assert( geo == this->geometryType() );
404 template<
class FieldImp,
unsigned int topologyId,
unsigned int dim,
unsigned int maxPolOrder >
410 template<
class Field,
int dim,
unsigned int polOrder >
423 static const int codimension = 0;
426 template<
typename ct,
int quaddim >
460 template<
class Gr
idPart,
unsigned int polOrder >
468 template<
class Gr
idPart,
int codim,
unsigned int polOrder >
479 static const int codimension = codim;
488 typedef Dune::ReferenceElement< FieldType, dimension > ReferenceElementType;
489 typedef Dune::ReferenceElements< FieldType, dimension > ReferenceElementsType;
492 const unsigned int subEntity,
493 const bool beginIterator )
494 : lagrangePointSet_( &lagrangePointSet ),
495 refElement_( &ReferenceElementsType::general( lagrangePointSet_->geometryType() ) ),
496 subEntity_( subEntity ),
497 codim_( beginIterator ? codimension : dimension+1 ),
500 subSubEntity_( subEntity_ ),
502 numDofs_( lagrangePointSet_->numDofs( codimension, subSubEntity_ ) )
510 : lagrangePointSet_( 0 ),
512 codim_( dimension+1 ),
520 assert( lagrangePointSet_ );
521 assert( codim_ <= dimension );
523 return lagrangePointSet_->entityDofNumber( codim_, subSubEntity_, dofNumber_ );
526 ThisType &operator++ ()
528 assert( codim_ <= dimension );
536 if( (other.codim_ != codim_)
537 || (other.subIndex_ != subIndex_)
538 || (other.dofNumber_ != dofNumber_) )
541 return (other.lagrangePointSet_ == lagrangePointSet_)
542 && (other.subEntity_ == subEntity_);
547 return !(*
this == other);
550 static ThisType
begin (
const LagrangePointSetType &lagrangePointSet,
551 unsigned int subEntity )
553 return ThisType( lagrangePointSet, subEntity,
true );
556 static ThisType
end (
const LagrangePointSetType &lagrangePointSet,
557 unsigned int subEntity )
559 return ThisType( lagrangePointSet, subEntity,
false );
565 assert( lagrangePointSet_ );
566 assert( refElement_ );
568 while( dofNumber_ >= numDofs_ )
570 const ReferenceElementType &refElement = *refElement_;
574 while( subIndex_ >= numSubIndices_ )
577 if( ++codim_ > dimension )
579 numSubIndices_ = refElement.size( subEntity_, codimension, codim_ );
581 subSubEntity_ = refElement.subEntity( subEntity_, codimension, subIndex_, codim_ );
582 numDofs_ = lagrangePointSet_->numDofs( codim_, subSubEntity_ );
586 const LagrangePointSetType *lagrangePointSet_;
587 const ReferenceElementType *refElement_;
588 unsigned int subEntity_;
591 unsigned int subIndex_, numSubIndices_;
592 unsigned int subSubEntity_;
593 unsigned int dofNumber_, numDofs_;
601 template<
class Gr
idPart,
unsigned int polOrder >
612 static const int codimension = 0;
622 const unsigned int subEntity,
623 const bool beginIterator )
624 : lagrangePointSet_( &lagrangePointSet ),
625 numDofs_( lagrangePointSet_->size() ),
626 index_( beginIterator ? 0 : numDofs_ )
628 assert( subEntity == 0 );
633 : lagrangePointSet_( 0 ),
640 assert( lagrangePointSet_ );
641 assert( index_ < numDofs_ );
645 ThisType& operator++ ()
647 assert( index_ < numDofs_ );
654 return (other.index_ == index_)
655 && (other.lagrangePointSet_ == lagrangePointSet_);
660 return !(*
this == other);
664 static ThisType
begin (
const LagrangePointSetType &lagrangePointSet,
665 unsigned int subEntity )
667 return ThisType( lagrangePointSet, subEntity,
true );
670 static ThisType
end (
const LagrangePointSetType &lagrangePointSet,
671 unsigned int subEntity )
673 return ThisType( lagrangePointSet, subEntity,
false );
677 const LagrangePointSetType *lagrangePointSet_;
678 unsigned int numDofs_, index_;
683 template<
class Gr
idPart,
unsigned int maxPolOrder >
685 :
public CachingPointList< GridPart, 0, LagrangePointSetTraits< typename GridPart::ctype, GridPart::dimension, maxPolOrder > >
704 template<
unsigned int codim >
713 typedef typename BaseType::IntegrationPointListType::IntegrationPointListType
714 LagrangePointListType;
719 : BaseType( geometry, order ),
720 lagrangePointList_( this->quadImp().ipList() )
726 lagrangePointList_( this->quadImp().ipList() )
731 ThisType& operator=(
const ThisType &other )
740 return lagrangePointList_.dofInfo( index );
744 unsigned int &subEntity )
const 746 unsigned int dofNumber;
747 lagrangePointList_.dofSubEntity( index, codim, subEntity, dofNumber );
751 unsigned int &subEntity,
unsigned int &dofNumber )
const 753 lagrangePointList_.dofSubEntity( index, codim, subEntity, dofNumber );
757 unsigned int dofNumber )
const 759 return lagrangePointList_.entityDofNumber( codim, subEntity, dofNumber );
762 unsigned int maxDofs (
unsigned int codim )
const 764 return lagrangePointList_.maxDofs( codim );
767 unsigned int numDofs (
unsigned int codim,
unsigned int subEntity )
const 769 return lagrangePointList_.numDofs( codim, subEntity );
772 unsigned int numDofs (
unsigned int codim )
const 774 return lagrangePointList_.numDofs( codim );
783 template<
unsigned int codim >
790 template<
unsigned int codim >
798 const LagrangePointListType &lagrangePointList_;
805 #endif // #ifndef DUNE_FEM_SPACE_LAGRANGE_LAGRANGEPOINTS_HH Definition: lagrangepoints.hh:411
static ThisType end(const LagrangePointSetType &lagrangePointSet, unsigned int subEntity)
Definition: lagrangepoints.hh:670
FieldVector< FieldType, dimension > CoordinateType
type of points
Definition: lagrangepoints.hh:212
SubEntityLagrangePointIterator< GridPartType, codim, polynomialOrder > SubEntityIteratorType
type of iterator over DoF numbers in a subentity
Definition: lagrangepoints.hh:709
unsigned int codim() const
Definition: localkey.hh:27
unsigned int entityDofNumber(unsigned int codim, unsigned int subEntity, unsigned int dofNumber) const
Definition: lagrangepoints.hh:263
static const unsigned int dimension
Definition: lagrangepoints.hh:38
int order() const
obtain order of the integration point list
Definition: lagrangepoints.hh:314
virtual int order() const
Definition: lagrangepoints.hh:132
LagrangePointSet< GridPartType, polynomialOrder > LagrangePointSetType
Definition: lagrangepoints.hh:618
Definition: genericlagrangepoints.hh:21
BaseType::DofCoordinateType DofCoordinateType
Definition: lagrangepoints.hh:40
virtual unsigned int numDofs(unsigned int codim) const
Definition: lagrangepoints.hh:176
integration point list supporting base function caching
Definition: cachingpointlist.hh:74
LagrangePointListImplementation(const size_t id)
Definition: lagrangepoints.hh:382
GridPart GridPartType
Definition: lagrangepoints.hh:607
Set of lagrange points.
Definition: lagrangepoints.hh:195
BaseType::CoordinateType CoordinateType
Definition: lagrangepoints.hh:701
GridPartType::ctype FieldType
Definition: lagrangepoints.hh:695
Definition: lagrangepoints.hh:82
GridPart GridPartType
Definition: lagrangepoints.hh:693
FieldImp FieldType
field type of points
Definition: lagrangepoints.hh:203
actual interface class for integration point lists
Definition: quadrature.hh:118
LagrangePoint(unsigned int index)
Definition: lagrangepoints.hh:56
default defines for used point lists
Definition: lagrangepoints.hh:427
void dofSubEntity(unsigned int index, unsigned int &codim, unsigned int &subEntity) const
Definition: lagrangepoints.hh:743
Fem::IntegrationPointList< FieldType, dimension, PointListTraits > IntegrationPointListType
type of used integration point list
Definition: lagrangepoints.hh:452
SubEntityLagrangePointIterator()
Definition: lagrangepoints.hh:509
virtual ~LagrangePointInterface()
destructor
Definition: lagrangepoints.hh:94
virtual unsigned int numDofs(unsigned int codim, unsigned int subEntity) const
Definition: lagrangepoints.hh:169
static ThisType end(const LagrangePointSetType &lagrangePointSet, unsigned int subEntity)
Definition: lagrangepoints.hh:556
unsigned int numDofs(unsigned int codim, unsigned int subEntity) const
Definition: lagrangepoints.hh:767
FieldVector< FieldType, dimension > pointType
Definition: lagrangepoints.hh:616
virtual ~LagrangePointImplementation()
Definition: lagrangepoints.hh:146
static unsigned int maxDofs()
Definition: lagrangepoints.hh:49
static const unsigned int numLagrangePoints
Definition: lagrangepoints.hh:43
LagrangePointImplementation()
Definition: lagrangepoints.hh:144
void dofSubEntity(unsigned int index, unsigned int &codim, unsigned int &subEntity, unsigned int &dofNumber) const
Definition: lagrangepoints.hh:252
LagrangePointListImplementation(const GeometryType &geo, const int order, const size_t id)
Definition: lagrangepoints.hh:388
void addIntegrationPoint(const CoordinateType &point)
Adds an integration point to the list.
Definition: quadratureimp.hh:159
A single lagrange point.
Definition: lagrangepoints.hh:31
unsigned int entityDofNumber(unsigned int codim, unsigned int subEntity, unsigned int dofNumber) const
Definition: lagrangepoints.hh:756
LagrangePointListInterface(const size_t id)
Definition: lagrangepoints.hh:225
IntegrationPointListType::CoordinateType CoordinateType
type of global coordinate
Definition: lagrangepoints.hh:455
const LocalKey & localKey(unsigned int index) const
Definition: lagrangepoints.hh:738
Traits::CoordinateType PointType
Definition: lagrangepoints.hh:702
static unsigned int entityDofNumber(unsigned int codim, unsigned int subEntity, unsigned int dof)
Definition: lagrangepoints.hh:75
Definition: lagrangepoints.hh:47
GridPart GridPartType
Definition: lagrangepoints.hh:474
bool operator!=(const Double &a, const Double &b)
Definition: double.hh:629
virtual GeometryType geometryType() const
Definition: lagrangepoints.hh:154
bool operator==(const Double &a, const Double &b)
Definition: double.hh:589
unsigned int maxDofs(unsigned int codim) const
obtain the maximal number of DoFs in one entity of a codimension
Definition: lagrangepoints.hh:281
FieldVector< FieldType, dimension > CoordinateType
type of points
Definition: lagrangepoints.hh:349
~LagrangePointListInterface()
Definition: lagrangepoints.hh:231
Definition: lagrangepoints.hh:139
Definition: coordinate.hh:4
GridPartType::ctype FieldType
Definition: lagrangepoints.hh:476
LagrangePointSet(const ThisType &other)
copy constructor
Definition: lagrangepoints.hh:724
GeometryType geometryType() const
obtain GeometryType for this integration point list
Definition: lagrangepoints.hh:270
unsigned int subEntity() const
Definition: localkey.hh:26
GridPartType::ctype FieldType
Definition: lagrangepoints.hh:609
Codim< codim >::SubEntityIteratorType beginSubEntity(unsigned int subEntity) const
Definition: lagrangepoints.hh:785
static ThisType begin(const LagrangePointSetType &lagrangePointSet, unsigned int subEntity)
Definition: lagrangepoints.hh:550
static int maxOrder()
Definition: lagrangepoints.hh:110
Double operator*(const Double &a, const Double &b)
Definition: double.hh:495
const LocalKey & dofInfo(unsigned int index) const
Definition: lagrangepoints.hh:247
LagrangePointSet(const GeometryType &geometry, const int order)
constructor
Definition: lagrangepoints.hh:718
Definition: lagrangepoints.hh:469
unsigned int numDofs(unsigned int codim) const
obtain the total number of DoFs in a codimension
Definition: lagrangepoints.hh:309
void dofSubEntity(unsigned int &codim, unsigned int &subEntity, unsigned int &dofNumber)
Definition: lagrangepoints.hh:69
static int maxOrder()
Definition: lagrangepoints.hh:286
void dofSubEntity(unsigned int index, unsigned int &codim, unsigned int &subEntity, unsigned int &dofNumber) const
Definition: lagrangepoints.hh:750
unsigned int numDofs(unsigned int codim, unsigned int subEntity) const
obtain the number of DoFs on one entity
Definition: lagrangepoints.hh:298
LagrangePointListImplementation< ct,(1<< (dimension-1)), dimension, polynomialOrder > PrismQuadratureType
Definition: lagrangepoints.hh:442
unsigned int maxDofs(unsigned int codim) const
Definition: lagrangepoints.hh:762
unsigned int index() const
Definition: localkey.hh:28
LagrangePointSet< GridPartType, polynomialOrder > LagrangePointSetType
Definition: lagrangepoints.hh:485
unsigned int numDofs(unsigned int codim) const
Definition: lagrangepoints.hh:772
std::size_t size() const
get number of Lagrange points
Definition: lagrangepoints.hh:778
LagrangePointListInterface< ct, quaddim, polynomialOrder > IntegrationPointListType
type of integration point list implemementation
Definition: lagrangepoints.hh:448
LagrangePointListImplementation< ct, 0, 0, polynomialOrder > PointQuadratureType
Definition: lagrangepoints.hh:430
FieldImp FieldType
field type of points
Definition: lagrangepoints.hh:340
SubEntityLagrangePointIterator()
Definition: lagrangepoints.hh:632
Codim< codim >::SubEntityIteratorType endSubEntity(unsigned int subEntity) const
Definition: lagrangepoints.hh:792
void dofSubEntity(unsigned int &codim, unsigned int &subEntity)
Definition: lagrangepoints.hh:64
void addDofInfo(const LocalKey &dofInfo)
Definition: lagrangepoints.hh:320
Definition: lagrangepoints.hh:602
virtual unsigned int maxDofs(unsigned int codim) const
obtain the maximal number of DoFs in one entity of a codimension
Definition: lagrangepoints.hh:161
Definition: lagrangepoints.hh:705
static ThisType begin(const LagrangePointSetType &lagrangePointSet, unsigned int subEntity)
Definition: lagrangepoints.hh:664
Field FieldType
field type of coordinates
Definition: lagrangepoints.hh:414
LagrangePoint(const BaseType &point)
Definition: lagrangepoints.hh:60
LagrangePointListImplementation< ct, 0, dimension, polynomialOrder > SimplexQuadratureType
Definition: lagrangepoints.hh:436
FieldVector< FieldType, dimension > pointType
Definition: lagrangepoints.hh:483
IntegrationPointListType::CoordinateType CoordinateType
type of coordinate
Definition: quadrature.hh:138
LagrangePointListImplementation< ct,(1<< (dimension-1))-1, dimension, polynomialOrder > PyramidQuadratureType
Definition: lagrangepoints.hh:445
LagrangePointInterface()
Definition: lagrangepoints.hh:86
Definition: lagrangepoints.hh:461
static const unsigned int polynomialOrder
Definition: lagrangepoints.hh:42
virtual unsigned int entityDofNumber(unsigned int codim, unsigned int subEntity, unsigned int dofNumber) const
Definition: lagrangepoints.hh:149
Definition: lagrangepoints.hh:332
LagrangePointListImplementation< ct, 0, 1, polynomialOrder > LineQuadratureType
Definition: lagrangepoints.hh:433
virtual int order() const
Definition: lagrangepoints.hh:181
Generic implementation of an IntegrationPointList.
Definition: quadratureimp.hh:32
Definition: localkey.hh:20
void setLagrangePointImpl(const LagrangePointInterfaceType *lpImpl)
Definition: lagrangepoints.hh:241
LagrangePointSetTraits< typename GridPart::ctype, GridPart::dimension, maxPolOrder > Traits
Definition: lagrangepoints.hh:691