5#ifndef DUNE_ALBERTA_ENTITY_HH
6#define DUNE_ALBERTA_ENTITY_HH
8#include <dune/grid/common/entity.hh>
11#include <dune/grid/albertagrid/entityseed.hh>
12#include <dune/grid/albertagrid/geometry.hh>
22 template<
int codim,
class Gr
id,
bool leafIterator >
23 class AlbertaGridTreeIterator;
25 template<
class Gr
id >
26 class AlbertaGridHierarchicIterator;
28 template<
class Gr
id >
29 class AlbertaGridLeafIntersection;
31 template<
class Gr
id >
32 class AlbertaGridLeafIntersectionIterator;
43 template<
int codim,
int dim,
class Gr
id >
57 static const int dimension = dim;
58 static const int codimension = codim;
59 static const int mydimension = dimension - codimension;
64 typedef typename Grid::template Codim< cd >::Entity Entity;
67 typedef typename Grid::template Codim< codim >::Entity Entity;
68 typedef typename Grid::template Codim< codim >::EntitySeed EntitySeed;
69 typedef typename Grid::template Codim< codim >::Geometry Geometry;
71 typedef Alberta::ElementInfo< dimension > ElementInfo;
74 typedef typename Grid::Traits::template Codim< codim >::GeometryImpl GeometryImpl;
98 EntitySeed
seed ()
const {
return EntitySeed( AlbertaGridEntitySeed< codim, Grid >( elementInfo(),
subEntity() ) ); }
110 int n = mydimension+1;
111 int k = dimension-cd+1;
115 for (
int i=n-k+1; i<=n; i++)
117 for (
long i=2; i<=k; i++)
130 const ElementInfo &elementInfo ()
const {
return elementInfo_; }
133 bool equals (
const This &other )
const;
135 void clearElement ();
136 void setElement (
const ElementInfo &elementInfo,
int subEntity );
139 void setEntity (
const This &other );
156 return elementInfo().template twist< codimension >(
subEntity() );
164 ElementInfo elementInfo_;
182 template<
int dim,
class Gr
id >
191 friend class AlbertaGridLeafIntersection<
Grid >;
196 static const int dimension = dim;
197 static const int codimension = 0;
198 static const int mydimension = dimension - codimension;
200 template<
int codim >
203 typedef typename Grid::template Codim< codim >::Entity
215 typedef Dune::AlbertaGridLeafIntersectionIterator< Grid > AlbertaGridLeafIntersectionIterator;
216 typedef AlbertaGridLeafIntersectionIterator AlbertaGridLevelIntersectionIterator;
218 typedef Alberta::ElementInfo< dimension > ElementInfo;
232 int boundaryId ()
const;
241 EntitySeed
seed ()
const {
return EntitySeed( AlbertaGridEntitySeed< 0, Grid >(elementInfo() )); }
253 int n = mydimension+1;
254 int k = dimension-cd+1;
258 for (
int i=n-k+1; i<=n; i++)
260 for (
long i=2; i<=k; i++)
276 template<
int codim >
284 AlbertaGridLeafIntersectionIterator ileafbegin ()
const;
287 AlbertaGridLeafIntersectionIterator ileafend ()
const;
289 AlbertaGridLevelIntersectionIterator ilevelbegin ()
const
291 if(
grid().maxLevel() == 0 )
300 AlbertaGridLevelIntersectionIterator ilevelend ()
const
306 bool isLeaf ()
const;
310 Entity father ()
const;
314 return (this->
level()>0);
325 LocalGeometry geometryInFather ()
const;
331 HierarchicIterator hbegin (
int maxlevel)
const;
334 HierarchicIterator hend (
int maxlevel)
const;
340 bool mightVanish ()
const;
344 bool hasBoundaryIntersections ()
const ;
350 bool equals (
const This &i )
const;
355 const ElementInfo &elementInfo ()
const
360 void clearElement ();
361 void setElement (
const ElementInfo &elementInfo,
int subEntity );
364 void setEntity (
const This &other );
381 return elementInfo().template twist< codimension >(
subEntity() );
385 template<
int codim >
388 return elementInfo().template twist< codim >(
grid().generic2alberta( codim, i ) );
399 ElementInfo elementInfo_;
Definition: entity.hh:185
EntitySeed seed() const
obtain entity seed
Definition: entity.hh:241
int twist() const
obtain twist
Definition: entity.hh:379
bool hasFather() const
returns true if father entity exists
Definition: entity.hh:312
int subEntity() const
obtain number of the subentity within the element (in ALBERTA numbering)
Definition: entity.hh:373
int twist(int i) const
obtain twist of a subentity
Definition: entity.hh:386
const Grid & grid() const
obtain a reference to the grid
Definition: entity.hh:367
unsigned int subEntities(unsigned int cd) const
Obtain the number of subentities of a given codimension.
Definition: entity.hh:251
int twist() const
obtain twist
Definition: entity.hh:154
ALBERTA EL_INFO * getElInfo() const
needed for the LevelIterator and LeafIterator
Definition: entity.cc:62
int level() const
level of this element
Definition: entity.cc:94
EntitySeed seed() const
obtain entity seed
Definition: entity.hh:98
PartitionType partitionType() const
return partition type of this entity
Definition: entity.cc:40
Geometry geometry() const
geometry of this entity
Definition: entity.cc:103
unsigned int subEntities(unsigned int cd) const
Obtain the number of subentities of a given codimension.
Definition: entity.hh:108
const Grid & grid() const
obtain a reference to the grid
Definition: entity.hh:142
int subEntity() const
obtain number of the subentity within the element (in ALBERTA numbering)
Definition: entity.hh:148
GeometryType type() const
type of geometry of this entity
Definition: entity.cc:114
bool equals(const This &other) const
equality of entities
Definition: entity.cc:48
Definition: hierarchiciterator.hh:29
Definition: treeiterator.hh:189
[ provides Dune::Grid ]
Definition: agrid.hh:109
Default Implementations for EntityImp.
Definition: entity.hh:542
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:114
Grid abstract base class.
Definition: grid.hh:375
GridFamily::Traits::HierarchicIterator HierarchicIterator
A type that is a model of Dune::HierarchicIterator A type of iterator that allows to examine,...
Definition: grid.hh:482
static constexpr int dimensionworld
The dimension of the world the grid lives in.
Definition: grid.hh:390
Default exception for dummy implementations.
Definition: exceptions.hh:355
provides a wrapper for ALBERTA's el_info structure
#define DUNE_THROW(E,...)
Definition: exceptions.hh:312
Dune namespace.
Definition: alignedallocator.hh:13
static constexpr T binomial(const T &n, const T &k) noexcept
calculate the binomial coefficient n over k as a constexpr
Definition: math.hh:131
Static tag representing a codimension.
Definition: dimension.hh:24