3 #ifndef DUNE_GEOGRID_ENTITY_HH
4 #define DUNE_GEOGRID_ENTITY_HH
6 #include <dune/common/nullptr.hh>
8 #include <dune/geometry/referenceelements.hh>
33 template< int codim, class Grid, bool fake = !(Capabilities::hasHostEntity< Grid, codim >::v) >
48 template<
int codim,
int dim,
class Gr
id >
56 template<
class Gr
id >
59 template<
class Gr
id,
class HostIntersectionIterator >
74 template<
int codim,
class Gr
id >
77 typedef typename remove_const< Grid >::type::Traits Traits;
83 static const int codimension = codim;
86 static const int dimension = Traits::dimension;
88 static const int mydimension = dimension - codimension;
90 static const int dimensionworld = Traits::dimensionworld;
93 static const bool fake =
false;
100 typedef typename Traits::ctype
ctype;
104 typedef typename Traits::template Codim< codimension >::Geometry
Geometry;
108 typedef typename Traits::HostGrid HostGrid;
109 typedef typename Traits::CoordFunction CoordFunction;
115 typedef typename HostGrid::template Codim< codimension >::Entity
HostEntity;
121 typedef typename Traits::template Codim< codimension >::EntitySeed
EntitySeed;
124 typedef typename HostGrid::template Codim< 0 >::Entity
HostElement;
127 typedef typename Traits::template Codim< codim >::GeometryImpl
GeometryImpl;
130 typedef typename HostGrid::template Codim< codimension >::Geometry HostGeometry;
146 hostEntity_( nullptr )
157 hostEntity_( nullptr )
161 : geo_( other.geo_ ),
162 hostEntity_( nullptr )
170 hostEntity_ =
nullptr;
174 operator bool ()
const {
return bool( hostEntity_ ); }
186 return hostEntity().type();
192 return hostEntity().level();
198 return hostEntity().partitionType();
219 CoordVector coords( hostEntity(), grid().coordFunction() );
257 template<
class HostIndexSet >
258 typename HostIndexSet::IndexType
259 index (
const HostIndexSet &indexSet )
const
261 return indexSet.template index< codimension >( hostEntity() );
273 template<
class HostIndexSet >
274 typename HostIndexSet::IndexType
275 subIndex (
const HostIndexSet &indexSet,
int i,
unsigned int cd )
const
277 return indexSet.subIndex( hostEntity(), i, cd );
287 template<
class HostIndexSet >
290 return indexSet.contains( hostEntity() );
300 template<
class HostIdSet >
301 typename HostIdSet::IdType
id (
const HostIdSet &idSet )
const
303 return idSet.template id< codimension >( hostEntity() );
308 mutable GeometryImpl geo_;
309 const HostEntity *hostEntity_;
324 template<
int codim,
class Gr
id >
327 typedef typename remove_const< Grid >::type::Traits Traits;
333 static const int codimension = codim;
336 static const int dimension = Traits::dimension;
338 static const int mydimension = dimension - codimension;
340 static const int dimensionworld = Traits::dimensionworld;
343 static const bool fake =
true;
349 typedef typename Traits::ctype
ctype;
353 typedef typename Traits::template Codim< codimension >::Geometry
Geometry;
357 typedef typename Traits::HostGrid HostGrid;
358 typedef typename Traits::CoordFunction CoordFunction;
364 typedef typename HostGrid::template Codim< codimension >::Entity
HostEntity;
370 typedef typename Traits::template Codim< codimension >::EntitySeed
EntitySeed;
373 typedef typename HostGrid::template Codim< 0 >::Entity
HostElement;
376 typedef typename Traits::template Codim< codimension >::GeometryImpl
GeometryImpl;
379 typedef typename HostGrid::template Codim< 0 >::Geometry HostGeometry;
380 typedef typename HostGrid::template Codim< dimension >::EntityPointer HostVertexPointer;
397 hostElement_( nullptr ),
398 subEntity_( subEntity )
410 hostElement_( nullptr ),
411 subEntity_( subEntity )
415 : geo_( other.geo_ ),
416 hostElement_( nullptr ),
417 subEntity_( other.subEntity_ )
425 hostElement_ =
nullptr;
426 subEntity_ = other.subEntity_;
430 operator bool ()
const {
return bool( hostElement_ ); }
441 const ReferenceElement< ctype, dimension > &refElement
442 = ReferenceElements< ctype, dimension >::general( hostElement().type() );
443 return refElement.type( subEntity_, codimension );
449 return hostElement().level();
458 const ReferenceElement< ctype, dimension > &refElement
459 = ReferenceElements< ctype, dimension >::general( hostElement().type() );
465 const int numVertices = refElement.size( subEntity_, codimension, dimension );
466 for(
int i = 1; i < numVertices; ++i )
468 PartitionType vtxType = vertexPartitionType( refElement, i );
471 if( type != vtxType )
496 CoordVector coords( hostElement(), subEntity_, grid().coordFunction() );
513 DUNE_THROW( NotImplemented,
"HostGrid has no entities of codimension " << codimension <<
"." );
519 return *hostElement_;
540 template<
class HostIndexSet >
541 typename HostIndexSet::IndexType
index (
const HostIndexSet &indexSet )
const
543 return indexSet.subIndex( hostElement(), subEntity_, codimension );
555 template<
class HostIndexSet >
556 typename HostIndexSet::IndexType
557 subIndex (
const HostIndexSet &indexSet,
int i,
unsigned int cd )
const
559 const ReferenceElement< ctype, dimension > &refElement
560 = ReferenceElements< ctype, dimension >::general( hostElement().type() );
561 const int j = refElement.subEntity( subEntity_, codimension, i, codimension+cd );
562 return indexSet.subIndex( hostElement(), j, codimension+cd );
572 template<
class HostIndexSet >
575 return indexSet.contains( hostElement() );
585 template<
class HostIdSet >
586 typename HostIdSet::IdType
id (
const HostIdSet &idSet )
const
588 return idSet.subId( hostElement(), subEntity_, codimension );
594 vertexPartitionType (
const ReferenceElement< ctype, dimension > &refElement,
int i )
const
596 const int j = refElement.subEntity( subEntity_, codimension, 0, dimension );
597 return hostElement().template subEntity< dimension >( j )->partitionType();
601 mutable GeometryImpl geo_;
602 const HostElement *hostElement_;
603 unsigned int subEntity_;
611 template<
int codim,
int dim,
class Gr
id >
613 :
public EntityBase< codim, Grid >
631 :
Base( grid, subEntity )
635 :
Base( geo, subEntity )
644 template<
int dim,
class Gr
id >
650 typedef typename remove_const< Grid >::type::Traits Traits;
652 typedef typename Traits::HostGrid HostGrid;
658 static const int codimension = Base::codimension;
661 static const int dimension = Base::dimension;
663 static const int mydimension = Base::mydimension;
665 static const int dimensionworld = Base::dimensionworld;
668 static const bool fake = Base::fake;
674 typedef typename Traits::template Codim< codimension >::LocalGeometry
LocalGeometry;
677 typedef typename Traits::template Codim< codimension >::EntityPointer
EntityPointer;
693 using Base::hostEntity;
703 template<
int codim >
706 return hostEntity().template count< codim >();
709 template<
int codim >
710 typename Grid::template Codim< codim >::EntityPointer
713 typedef typename Traits::template Codim< codim >::EntityPointerImpl EntityPointerImpl;
714 return EntityPointerImpl( grid(), hostEntity(), i );
720 return LevelIntersectionIteratorImpl( *
this, hostEntity().ilevelbegin() );
726 return LevelIntersectionIteratorImpl( *
this, hostEntity().ilevelend() );
732 return LeafIntersectionIteratorImpl( *
this, hostEntity().ileafbegin() );
738 return LeafIntersectionIteratorImpl( *
this, hostEntity().ileafend() );
743 return hostEntity().hasBoundaryIntersections();
748 return hostEntity().isLeaf();
753 typedef typename Traits::template Codim< 0 >::EntityPointerImpl EntityPointerImpl;
754 return EntityPointerImpl( grid(), hostEntity().father() );
759 return hostEntity().hasFather();
764 return hostEntity().geometryInFather();
770 return HierarchicIteratorImpl( grid(), hostEntity().hbegin( maxLevel ) );
776 return HierarchicIteratorImpl( grid(), hostEntity().hend( maxLevel ) );
781 return hostEntity().isRegular();
786 return hostEntity().isNew();
791 return hostEntity().mightVanish();
799 #endif // #ifndef DUNE_GEOGRID_ENTITY_HH
EntityBase(const GeometryImpl &geo, int subEntity)
construct an uninitialized entity
Definition: geometrygrid/entity.hh:408
on boundary between overlap and ghost
Definition: gridenums.hh:28
Base::GeometryImpl GeometryImpl
Definition: geometrygrid/entity.hh:620
HostGrid::template Codim< codimension >::Entity HostEntity
type of corresponding host entity
Definition: geometrygrid/entity.hh:365
PartitionType partitionType() const
obtain the partition type of this entity
Definition: geometrygrid/entity.hh:453
bool isContained(const HostIndexSet &indexSet) const
check whether the entity is contained in a host index set
Definition: geometrygrid/entity.hh:288
HostIndexSet::IndexType subIndex(const HostIndexSet &indexSet, int i, unsigned int cd) const
obtain the index of a subentity from a host IndexSet
Definition: geometrygrid/entity.hh:275
Entity(const GeometryImpl &geo)
Definition: geometrygrid/entity.hh:699
HierarchicIterator hend(int maxLevel) const
Definition: geometrygrid/entity.hh:773
Grid::template Codim< codim >::EntityPointer subEntity(int i) const
Definition: geometrygrid/entity.hh:711
Traits::LevelIntersectionIterator LevelIntersectionIterator
type of level intersection iterator
Definition: geometrygrid/entity.hh:684
HostGrid::template Codim< 0 >::Entity HostElement
type of host elements, i.e., of host entities of codimension 0
Definition: geometrygrid/entity.hh:373
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
EntityBase(const EntityBase &other)
Definition: geometrygrid/entity.hh:160
HostIndexSet::IndexType index(const HostIndexSet &indexSet) const
obtain the entity's index from a host IndexSet
Definition: geometrygrid/entity.hh:541
Base::HostElement HostElement
Definition: geometrygrid/entity.hh:689
Traits::ctype ctype
coordinate type of the grid
Definition: geometrygrid/entity.hh:101
Traits::template Codim< codim >::GeometryImpl GeometryImpl
Definition: geometrygrid/entity.hh:127
bool hasBoundaryIntersections() const
Definition: geometrygrid/entity.hh:741
HierarchicIterator hbegin(int maxLevel) const
Definition: geometrygrid/entity.hh:767
Traits::template Codim< codimension >::Geometry Geometry
type of corresponding geometry
Definition: geometrygrid/entity.hh:104
HostGrid::template Codim< codimension >::Entity HostEntity
type of corresponding host entity
Definition: geometrygrid/entity.hh:116
bool mightVanish() const
Definition: geometrygrid/entity.hh:789
HostGrid::template Codim< codimension >::EntityPointer HostEntityPointer
type of corresponding host entity pointer
Definition: geometrygrid/entity.hh:118
void initialize(const HostElement &hostElement)
initiliaze an entity
Definition: geometrygrid/entity.hh:531
DUNE-conform implementation of the entityThis class merely changes the template parameters of the ent...
Definition: geometrygrid/entity.hh:49
EntityPointer father() const
Definition: geometrygrid/entity.hh:751
EntityBase(const EntityBase &other)
Definition: geometrygrid/entity.hh:414
GeometryType type() const
obtain the name of the corresponding reference element
Definition: geometrygrid/entity.hh:184
Entity(const Grid &grid)
Definition: geometrygrid/entity.hh:622
Traits::template Codim< codimension >::LocalGeometry LocalGeometry
type of corresponding local geometry
Definition: geometrygrid/entity.hh:675
const Grid & grid() const
Definition: geometrygrid/entity.hh:233
Entity(const Grid &grid, int subEntity)
Definition: geometrygrid/entity.hh:630
bool isNew() const
Definition: geometrygrid/entity.hh:784
Traits::template Codim< codimension >::Geometry Geometry
type of corresponding geometry
Definition: geometrygrid/entity.hh:353
on boundary between interior and overlap
Definition: gridenums.hh:26
EntitySeedImp Implementation
Export the implementation type.
Definition: common/entityseed.hh:31
Base::HostEntity HostEntity
Definition: geometrygrid/entity.hh:688
Geometry geometry() const
Definition: geometrygrid/entity.hh:215
int count() const
Definition: geometrygrid/entity.hh:704
const Grid & grid() const
Definition: geometrygrid/entity.hh:509
EntityBase(const GeometryImpl &geo)
construct an uninitialized entity
Definition: geometrygrid/entity.hh:155
GeometryType type() const
obtain the name of the corresponding reference element
Definition: geometrygrid/entity.hh:439
LeafIntersectionIterator ileafend() const
Definition: geometrygrid/entity.hh:735
actual implementation of the entity
Definition: geometrygrid/entity.hh:34
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:24
HostIdSet::IdType id(const HostIdSet &idSet) const
obtain the entity's id from a host IdSet
Definition: geometrygrid/entity.hh:586
Traits::template Codim< codimension >::EntityPointer EntityPointer
type of corresponding entity pointer
Definition: geometrygrid/entity.hh:677
bool isLeaf() const
Definition: geometrygrid/entity.hh:746
EntitySeed seed() const
return EntitySeed of host grid entity
Definition: geometrygrid/entity.hh:503
Traits::template Codim< codimension >::GeometryImpl GeometryImpl
Definition: geometrygrid/entity.hh:376
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:386
void initialize(const HostEntity &hostEntity)
initiliaze an entity
Definition: geometrygrid/entity.hh:248
EntityBase(const Grid &grid)
construct an uninitialized entity
Definition: geometrygrid/entity.hh:144
Traits::template Codim< codimension >::EntitySeed EntitySeed
type of corresponding entity seed
Definition: geometrygrid/entity.hh:370
Entity(const GeometryImpl &geo, int subEntity)
Definition: geometrygrid/entity.hh:634
bool isRegular() const
Definition: geometrygrid/entity.hh:779
HostIndexSet::IndexType index(const HostIndexSet &indexSet) const
obtain the entity's index from a host IndexSet
Definition: geometrygrid/entity.hh:259
LevelIntersectionIterator ilevelbegin() const
Definition: geometrygrid/entity.hh:717
Specialize with 'true' if implementation supports parallelism. (default=false)
Definition: common/capabilities.hh:64
Traits::ctype ctype
coordinate type of the grid
Definition: geometrygrid/entity.hh:350
Geometry geometry() const
Definition: geometrygrid/entity.hh:492
Traits::HierarchicIterator HierarchicIterator
type of hierarchic iterator
Definition: geometrygrid/entity.hh:680
LeafIntersectionIterator ileafbegin() const
Definition: geometrygrid/entity.hh:729
Traits::LeafIntersectionIterator LeafIntersectionIterator
type of leaf intersection iterator
Definition: geometrygrid/entity.hh:682
HostGrid::template Codim< codimension >::EntityPointer HostEntityPointer
type of corresponding host entity pointer
Definition: geometrygrid/entity.hh:367
HostIdSet::IdType id(const HostIdSet &idSet) const
obtain the entity's id from a host IdSet
Definition: geometrygrid/entity.hh:301
Traits::template Codim< codimension >::EntitySeed EntitySeed
type of corresponding entity seed
Definition: geometrygrid/entity.hh:121
all entities lying in the overlap zone
Definition: gridenums.hh:27
LevelIntersectionIterator ilevelend() const
Definition: geometrygrid/entity.hh:723
Different resources needed by all grid implementations.
Definition: cornerstorage.hh:20
bool isContained(const HostIndexSet &indexSet) const
check whether the entity is contained in a host index set
Definition: geometrygrid/entity.hh:573
HostGrid::template Codim< 0 >::Entity HostElement
type of host elements, i.e., of host entities of codimension 0
Definition: geometrygrid/entity.hh:124
const HostEntity & hostEntity() const
Definition: geometrygrid/entity.hh:511
Definition: geometrygrid/entity.hh:57
int level() const
obtain the level of this entity
Definition: geometrygrid/entity.hh:447
int level() const
obtain the level of this entity
Definition: geometrygrid/entity.hh:190
Base::HostEntity HostEntity
Definition: geometrygrid/entity.hh:618
HostIndexSet::IndexType subIndex(const HostIndexSet &indexSet, int i, unsigned int cd) const
obtain the index of a subentity from a host IndexSet
Definition: geometrygrid/entity.hh:557
Base::GeometryImpl GeometryImpl
Definition: geometrygrid/entity.hh:690
EntityBase(const Grid &grid, int subEntity)
construct an uninitialized entity
Definition: geometrygrid/entity.hh:395
EntitySeed seed() const
return EntitySeed of host grid entity
Definition: geometrygrid/entity.hh:226
Base::HostElement HostElement
Definition: geometrygrid/entity.hh:619
LocalGeometry geometryInFather() const
Definition: geometrygrid/entity.hh:762
bool hasFather() const
Definition: geometrygrid/entity.hh:757
int subEntity() const
Definition: geometrygrid/entity.hh:522
const HostElement & hostElement() const
Definition: geometrygrid/entity.hh:516
all interior entities
Definition: gridenums.hh:25
const HostEntity & hostEntity() const
Definition: geometrygrid/entity.hh:235
PartitionType partitionType() const
obtain the partition type of this entity
Definition: geometrygrid/entity.hh:196
Entity(const GeometryImpl &geo)
Definition: geometrygrid/entity.hh:626
Definition: geometrygrid/entity.hh:60
Entity(const Grid &grid)
Definition: geometrygrid/entity.hh:695