dune-spgrid 2.7
entity.hh
Go to the documentation of this file.
1#ifndef DUNE_SPGRID_ENTITY_HH
2#define DUNE_SPGRID_ENTITY_HH
3
4#include <utility>
5
6#include <dune/geometry/type.hh>
7
8#include <dune/grid/common/gridenums.hh>
9
12
13namespace Dune
14{
15
16 // Internal Forward Declarations
17 // -----------------------------
18
19 template< int codim, int dim, class Grid >
20 class SPEntity;
21
22
23
24 // External Forward Declarations
25 // -----------------------------
26
27 template< class, int >
28 class SPHierarchicIterator;
29
30
31
32 // SPBasicEntity
33 // -------------
34
35 template< int codim, class Grid >
37 {
39
40 public:
43 typedef typename EntityInfo::Traits Traits;
44
45 static const int dimension = EntityInfo::dimension;
48
49 typedef typename Traits::template Codim< codimension >::Entity Entity;
50 typedef typename Traits::template Codim< codimension >::EntitySeed EntitySeed;
51 typedef typename Traits::template Codim< codimension >::Geometry Geometry;
52 typedef typename Traits::template Codim< codimension >::LocalGeometry LocalGeometry;
53
54 typedef typename Traits::HierarchicIterator HierarchicIterator;
55
56 protected:
59
61
62 public:
64
66 : entityInfo_( entityInfo )
67 {}
68
69 int level () const
70 {
71 return gridLevel().level();
72 }
73
74 bool isLeaf () const
75 {
76 return (level() == entityInfo().gridLevel().grid().maxLevel());
77 }
78
79 PartitionType partitionType () const
80 {
81 return entityInfo().partitionType();
82 }
83
84 GeometryType type () const { return GeometryTypes::cube( mydimension ); }
85
87 {
88 return Geometry( GeometryImpl( entityInfo_ ) );
89 }
90
91 bool equals ( const This &other ) const
92 {
93 return entityInfo().equals( other.entityInfo() );
94 }
95
97 {
98 return EntitySeed( EntitySeedImpl( level(), entityInfo().id(), entityInfo().partitionNumber() ) );
99 }
100
101 unsigned int subEntities ( unsigned int cd ) const
102 {
103 return gridLevel().template referenceCube< codim >().count( cd-codim );
104 }
105
106 bool hasFather () const { return ((level() > 0) && entityInfo().hasFather()); }
107
108 Entity father () const
109 {
111 father.entityInfo().up();
112 return Entity( std::move( father ) );
113 }
114
115 HierarchicIterator hbegin ( int maxlevel ) const
116 {
117 assert( maxlevel >= level() );
118 return HierarchicIteratorImpl( entityInfo(), maxlevel );
119 }
120
121 HierarchicIterator hend ( int maxlevel ) const
122 {
123 assert( maxlevel >= level() );
125 }
126
127 const EntityInfo &entityInfo () const { return entityInfo_; }
128 EntityInfo &entityInfo () { return entityInfo_; }
129
130 const GridLevel &gridLevel () const { return entityInfo().gridLevel(); }
131
132 const Grid &grid () const { return gridLevel().grid(); }
133
134 private:
135 EntityInfo entityInfo_;
136 };
137
138
139
140 // SPEntity
141 // --------
142
143 template< int codim, int dim, class Grid >
145 : public SPBasicEntity< codim, Grid >
146 {
149
150 public:
151 typedef typename Base::EntityInfo EntityInfo;
152 typedef typename Base::GridLevel GridLevel;
153
155
157
158 explicit SPEntity ( const EntityInfo &entityInfo )
159 : Base( entityInfo )
160 {}
161
162 SPEntity ( const GridLevel &gridLevel, const MultiIndex &id, unsigned int partitionNumber )
163 : Base( EntityInfo( gridLevel, id, partitionNumber ) )
164 {}
165 };
166
167
168
169 // SPEntity (for codimension 0)
170 // ----------------------------
171
172 template< int dim, class Grid >
173 class SPEntity< 0, dim, Grid >
174 : public SPBasicEntity< 0, Grid >
175 {
178
179 public:
180 typedef typename Base::EntityInfo EntityInfo;
181 typedef typename Base::GridLevel GridLevel;
182 typedef typename Base::Traits Traits;
183
184 static const int dimension = Base::dimension;
185
186 typedef typename Base::Geometry Geometry;
188
189 template< int codim >
190 struct Codim
191 {
192 typedef typename Traits::template Codim< codim >::Entity Entity;
193 };
194
196
197 protected:
198 typedef typename GridLevel::Mesh Mesh;
199
200 static const int numFaces = GridLevel::ReferenceCube::numFaces;
201
202 public:
204
205 explicit SPEntity ( const EntityInfo &entityInfo )
206 : Base( entityInfo )
207 {}
208
209 SPEntity ( const GridLevel &gridLevel, const MultiIndex &id, unsigned int partitionNumber )
210 : Base( EntityInfo( gridLevel, id, partitionNumber ) )
211 {}
212
213 using Base::entityInfo;
214 using Base::gridLevel;
215
216 template< int codim >
217 typename Codim< codim >::Entity subEntity ( int i ) const;
218
219 bool hasBoundaryIntersections () const;
220
222 {
223 return gridLevel().geometryInFather( entityInfo().id() );
224 }
225
226 bool isRegular () const { return true; }
227 bool isNew () const { return false; }
228 bool mightVanish () const { return false; }
229 };
230
231
232
233 // Implementation of SPEntity (for codimension 0)
234 // ----------------------------------------------
235
236
237 template< int dim, class Grid >
238 template< int codim >
239 inline typename SPEntity< 0, dim, Grid >::template Codim< codim >::Entity
241 {
243 typedef SPEntity< codim, dimension, Grid > SubEntityImpl;
244
245 // warning: this is only true for closed partitions
246 const unsigned int partitionNumber = entityInfo().partitionNumber();
247 MultiIndex id = entityInfo().id();
248 id += gridLevel().referenceCube().subId( codim, i );
249 __SPGrid::EntityInfo< Grid, codim > subInfo( gridLevel(), id, partitionNumber );
250 return SubEntity( SubEntityImpl( std::move( subInfo ) ) );
251 }
252
253
254 template< int dim, class Grid >
256 {
257 const Mesh &globalMesh = gridLevel().globalMesh();
258 const MultiIndex &id = entityInfo().id();
259
260 bool hasBoundaryIntersections = false;
261 for( int i = 0; i < dimension; ++i )
262 {
263 hasBoundaryIntersections |= (id[ i ] == 2*globalMesh.begin()[ i ] + 1);
264 hasBoundaryIntersections |= (id[ i ] == 2*globalMesh.end()[ i ] - 1);
265 }
266 return hasBoundaryIntersections;
267 }
268
269} // namespace Dune
270
271#endif // #ifndef DUNE_SPGRID_ENTITY_HH
entity seed for SPGrid
Definition: iostream.hh:7
Definition: entity.hh:146
SPEntity(const GridLevel &gridLevel, const MultiIndex &id, unsigned int partitionNumber)
Definition: entity.hh:162
SPEntity(const EntityInfo &entityInfo)
Definition: entity.hh:158
Base::EntityInfo EntityInfo
Definition: entity.hh:151
GridLevel::MultiIndex MultiIndex
Definition: entity.hh:154
Base::GridLevel GridLevel
Definition: entity.hh:152
SPEntity()
Definition: entity.hh:156
Definition: hierarchiciterator.hh:18
Definition: entity.hh:37
SPGeometry< mydimension, dimension, Grid > GeometryImpl
Definition: entity.hh:57
SPHierarchicIterator< Grid, codimension > HierarchicIteratorImpl
Definition: entity.hh:60
Traits::template Codim< codimension >::Geometry Geometry
Definition: entity.hh:51
unsigned int subEntities(unsigned int cd) const
Definition: entity.hh:101
const EntityInfo & entityInfo() const
Definition: entity.hh:127
Entity father() const
Definition: entity.hh:108
GeometryType type() const
Definition: entity.hh:84
SPBasicEntity(const EntityInfo &entityInfo)
Definition: entity.hh:65
SPBasicEntity()
Definition: entity.hh:63
EntityInfo::Traits Traits
Definition: entity.hh:43
const Grid & grid() const
Definition: entity.hh:132
EntityInfo & entityInfo()
Definition: entity.hh:128
Geometry geometry() const
Definition: entity.hh:86
SPEntitySeed< codimension, Grid > EntitySeedImpl
Definition: entity.hh:58
EntityInfo::GridLevel GridLevel
Definition: entity.hh:42
bool hasFather() const
Definition: entity.hh:106
Traits::template Codim< codimension >::EntitySeed EntitySeed
Definition: entity.hh:50
bool isLeaf() const
Definition: entity.hh:74
static const int dimension
Definition: entity.hh:45
static const int codimension
Definition: entity.hh:46
const GridLevel & gridLevel() const
Definition: entity.hh:130
HierarchicIterator hbegin(int maxlevel) const
Definition: entity.hh:115
__SPGrid::EntityInfo< Grid, codim > EntityInfo
Definition: entity.hh:41
HierarchicIterator hend(int maxlevel) const
Definition: entity.hh:121
Traits::template Codim< codimension >::Entity Entity
Definition: entity.hh:49
bool equals(const This &other) const
Definition: entity.hh:91
Traits::HierarchicIterator HierarchicIterator
Definition: entity.hh:54
int level() const
Definition: entity.hh:69
static const int mydimension
Definition: entity.hh:47
EntitySeed seed() const
Definition: entity.hh:96
Traits::template Codim< codimension >::LocalGeometry LocalGeometry
Definition: entity.hh:52
PartitionType partitionType() const
Definition: entity.hh:79
Definition: entity.hh:175
bool isRegular() const
Definition: entity.hh:226
Codim< codim >::Entity subEntity(int i) const
SPEntity(const GridLevel &gridLevel, const MultiIndex &id, unsigned int partitionNumber)
Definition: entity.hh:209
GridLevel::MultiIndex MultiIndex
Definition: entity.hh:195
Base::EntityInfo EntityInfo
Definition: entity.hh:180
Base::GridLevel GridLevel
Definition: entity.hh:181
bool isNew() const
Definition: entity.hh:227
Base::Geometry Geometry
Definition: entity.hh:186
Base::Traits Traits
Definition: entity.hh:182
Base::LocalGeometry LocalGeometry
Definition: entity.hh:187
bool mightVanish() const
Definition: entity.hh:228
LocalGeometry geometryInFather() const
Definition: entity.hh:221
GridLevel::Mesh Mesh
Definition: entity.hh:198
SPEntity()
Definition: entity.hh:203
SPEntity(const EntityInfo &entityInfo)
Definition: entity.hh:205
Traits::template Codim< codim >::Entity Entity
Definition: entity.hh:192
Definition: entityinfo.hh:24
const GridLevel & gridLevel() const
Definition: entityinfo.hh:66
static const int codimension
Definition: entityinfo.hh:31
PartitionType partitionType() const
Definition: entityinfo.hh:82
static const int dimension
Definition: entityinfo.hh:30
unsigned int partitionNumber() const
Definition: entityinfo.hh:73
const MultiIndex & id() const
Definition: entityinfo.hh:68
bool equals(const This &other) const
Definition: entityinfo.hh:77
GridLevel::Traits Traits
Definition: entityinfo.hh:43
static const int mydimension
Definition: entityinfo.hh:32
entity seed for SPGrid
Definition: entityseed.hh:32
Definition: geometry.hh:87
Definition: gridlevel.hh:35
const ReferenceCube & referenceCube() const
Definition: geometricgridlevel.hh:53
const Mesh & globalMesh() const
Definition: gridlevel.hh:210
int level() const
Definition: gridlevel.hh:83
const Grid & grid() const
Definition: gridlevel.hh:82
LocalGeometry geometryInFather(const MultiIndex &id) const
Definition: gridlevel.hh:287
const MultiIndex & begin() const
Definition: mesh.hh:36
const MultiIndex & end() const
Definition: mesh.hh:37
static const int numFaces
Definition: referencecube.hh:55
const MultiIndex & subId(const int codim, const int i) const
Definition: referencecube.hh:59