My Project
Loading...
Searching...
No Matches
entity.hh
1// -*- mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=2 sw=2 sts=2:
3#ifndef DUNE_POLYHEDRALGRID_ENTITY_HH
4#define DUNE_POLYHEDRALGRID_ENTITY_HH
5
6//- dune-common includes
7#include <dune/common/typetraits.hh>
8
9//- dune-grid includes
10#include <dune/grid/common/entity.hh>
11
12namespace Dune
13{
14
15 // PolyhedralGridEntityBasic
16 // -----------------
17
22 template< int codim, int dim, class Grid >
24 {
25 protected:
26 typedef typename std::remove_const< Grid >::type::Traits Traits;
27
28 public:
33 static const int codimension = codim;
35 static const int dimension = Traits::dimension;
37 static const int mydimension = dimension - codimension;
39 static const int dimensionworld = Traits::dimensionworld;
40
47 typedef typename Traits::ctype ctype;
48
49 typedef typename Traits::Index Index;
50
52 typedef typename Grid::template Codim< codimension >::Entity Entity;
53
55 typedef typename Grid::template Codim< codimension >::EntitySeed EntitySeed;
57 typedef typename Traits::template Codim< codimension >::Geometry Geometry;
58 typedef typename Traits::template Codim< codimension >::GeometryImpl GeometryImpl;
59
62 protected:
63 // type of extra data, e.g. a pointer to grid (here empty)
64 typedef typename Traits::ExtraData ExtraData;
65
66 public:
72 : data_( nullptr ),
73 seed_()
74 {}
75
77 explicit PolyhedralGridEntityBasic ( ExtraData data )
78 : data_( data ),
79 seed_()
80 {}
81
84 PolyhedralGridEntityBasic ( ExtraData data, const EntitySeed& seed )
85 : data_( data )
86 , seed_( seed )
87 {}
88
98 GeometryType type () const
99 {
100 return data()->geometryType(seed_);
101 }
102
104 int level () const
105 {
106 return 0;
107 }
108
110 PartitionType partitionType () const
111 {
112 return InteriorEntity; // data()->partitionType( *this );
113 }
114
117 {
118 return Geometry( GeometryImpl( data(), seed_ ) );
119 }
120
122 EntitySeed seed () const { return seed_; }
123
129 ExtraData data() const { return data_; }
130
131 Index index () const { return seed_.index(); }
132
135 bool equals(const PolyhedralGridEntityBasic& other) const
136 {
137 return seed_.equals(other.seed_);
138 }
139
140 protected:
141 ExtraData data_;
142 EntitySeed seed_;
143 };
144
145
146
147 // PolyhedralGridEntity
148 // ------------
149
150 template< int codim, int dim, class Grid >
151 class PolyhedralGridEntity : public PolyhedralGridEntityBasic< codim, dim, Grid >
152 {
154 protected:
155 typedef typename std::remove_const< Grid >::type::Traits Traits;
156
157 protected:
158 // type of extra data, e.g. a pointer to grid (here empty)
159 typedef typename Traits::ExtraData ExtraData;
160
161 using Base::seed_;
162 public:
163 typedef typename Base :: EntitySeed EntitySeed;
164 using Base :: codimension ;
165 using Base :: data ;
166
168 : Base()
169 {}
170
171 explicit PolyhedralGridEntity ( ExtraData data_param )
172 : Base( data_param )
173 {}
174
175 PolyhedralGridEntity ( ExtraData data_param, const EntitySeed& seed )
176 : Base( data_param, seed )
177 {}
178
179 unsigned int subEntities( const unsigned int cd ) const
180 {
181 if( cd == Base :: codimension )
182 return 1;
183 else
184 return data()->subEntities( seed_, cd );
185 }
186
187 template< int cd >
188 typename Grid::template Codim< cd >::EntityPointer
189 subEntity ( int i ) const
190 {
191 typedef typename Traits::template Codim< cd >::EntityPointerImpl EntityPointerImpl;
192 typedef typename Traits::template Codim< cd >::EntityImpl EntityImpl;
193 return EntityPointerImpl( EntityImpl( data(), data()->template subEntitySeed< cd >( seed_, i ) ) );
194 }
195 };
196
197
198 // PolyhedralGridEntity for codimension 0
199 // ----------------------------------
200
205 template< int dim, class Grid >
206 class PolyhedralGridEntity< 0, dim, Grid > : public PolyhedralGridEntityBasic< 0, dim, Grid >
207 {
210
211 protected:
212 typedef typename Base::Traits Traits;
213
214 // type of extra data, e.g. a pointer to grid (here empty)
215 typedef typename Base::ExtraData ExtraData;
216
217 using Base::seed_;
218 public:
219 using Base::codimension ;
220 using Base::data ;
221
222 protected:
223 typedef typename Traits :: LeafIntersectionIteratorImpl LeafIntersectionIteratorImpl;
224 typedef typename Traits::template Codim< codimension >::LocalGeometryImpl LocalGeometryImpl;
225
226 public:
230 typedef typename Base :: EntitySeed EntitySeed;
231
233 typedef typename Traits::template Codim< codimension >::LocalGeometry LocalGeometry;
235 typedef typename Traits::template Codim< codimension >::Entity Entity;
237 typedef typename Traits::template Codim< codimension >::EntityPointer EntityPointer;
238
240 typedef typename Traits::HierarchicIterator HierarchicIterator;
242 typedef typename Traits::LeafIntersectionIterator LeafIntersectionIterator;
244 typedef typename Traits::LevelIntersectionIterator LevelIntersectionIterator;
245
253 : Base()
254 {}
255
257 explicit PolyhedralGridEntity ( ExtraData data_param )
258 : Base( data_param )
259 {}
260
262 PolyhedralGridEntity ( ExtraData data_param, const EntitySeed& seed )
263 : Base( data_param, seed )
264 {}
265
268 const This& dereference() const
269 { return *this; }
270
271 This& dereference()
272 { return *this; }
273
274 unsigned int subEntities( const unsigned int codim ) const
275 {
276 if( codim == 0 )
277 return 1;
278 else
279 return data()->subEntities( seed_, codim );
280 }
281
282 template< int codim >
283 int count () const
284 {
285 return subEntities( codim );
286 }
287
288 template< int codim >
289 typename Grid::template Codim< codim >::EntityPointer
290 subEntity ( int i ) const
291 {
292 typedef typename Traits::template Codim< codim >::EntityPointerImpl EntityPointerImpl;
293 typedef typename Traits::template Codim< codim >::EntityImpl EntityImpl;
294 return EntityPointerImpl( EntityImpl( data(), data()->template subEntitySeed< codim >( seed_, i ) ) );
295 }
296
297 bool hasBoundaryIntersections () const
298 {
299 return data()->hasBoundaryIntersections( this->seed() );
300 }
301
302 LeafIntersectionIterator ibegin () const
303 {
304 return LeafIntersectionIterator( LeafIntersectionIteratorImpl( data(), seed_, true ) );
305 }
306
307 LeafIntersectionIterator iend () const
308 {
309 return LeafIntersectionIterator( LeafIntersectionIteratorImpl( data(), seed_, false ) );
310 }
311
312 LeafIntersectionIterator ileafbegin () const { return ibegin(); }
313 LevelIntersectionIterator ilevelbegin () const { return ibegin(); }
314
315 LeafIntersectionIterator ileafend () const { return iend(); }
316 LevelIntersectionIterator ilevelend () const { return iend(); }
317
318 bool isLeaf () const
319 {
320 return true;
321 }
322
323 EntityPointer father () const
324 {
325 DUNE_THROW(InvalidStateException,"no father available");
326 typedef typename Traits::template Codim< 0 >::EntityImpl EntityImpl;
327 typedef typename Traits::template Codim< 0 >::EntityPointerImpl EntityPointerImpl;
328 return EntityPointer( EntityPointerImpl( EntityImpl( data() ) ) );
329 }
330
331 bool hasFather () const
332 {
333 return false;
334 }
335
336 LocalGeometry geometryInFather () const
337 {
338 DUNE_THROW(InvalidStateException,"no father available");
339 return LocalGeometry( LocalGeometryImpl( data() ) );
340 }
341
342 HierarchicIterator hbegin ( int maxLevel ) const
343 {
344 return hend( maxLevel );
345 }
346
347 HierarchicIterator hend ( int ) const
348 {
349 typedef typename Traits :: HierarchicIteratorImpl HierarchicIteratorImpl ;
350 return HierarchicIterator( HierarchicIteratorImpl( data(), false ) );
351 }
352
353 bool isRegular () const
354 {
355 return true;
356 }
357
358 bool isNew () const
359 {
360 return false;
361 }
362
363 bool mightVanish () const
364 {
365 return false;
366 }
367
370 };
371
372
373} // namespace Dune
374
375#endif // #ifndef DUNE_POLYHEDRALGRID_ENTITY_HH
Definition entity.hh:24
static const int codimension
codimensioon of the entity
Definition entity.hh:33
Traits::template Codim< codimension >::Geometry Geometry
type of corresponding geometry
Definition entity.hh:57
Grid::template Codim< codimension >::Entity Entity
type of entity
Definition entity.hh:52
int level() const
obtain the level of this entity
Definition entity.hh:104
PolyhedralGridEntityBasic()
construct a null entity
Definition entity.hh:71
static const int mydimension
dimension of the entity
Definition entity.hh:37
Traits::ctype ctype
coordinate type of the grid
Definition entity.hh:47
static const int dimension
dimension of the grid
Definition entity.hh:35
static const int dimensionworld
dimension of the world
Definition entity.hh:39
PolyhedralGridEntityBasic(ExtraData data, const EntitySeed &seed)
construct an initialized entity
Definition entity.hh:84
PartitionType partitionType() const
obtain the partition type of this entity
Definition entity.hh:110
Grid::template Codim< codimension >::EntitySeed EntitySeed
type of corresponding entity seed
Definition entity.hh:55
Geometry geometry() const
obtain the geometry of this entity
Definition entity.hh:116
PolyhedralGridEntityBasic(ExtraData data)
construct a null entity with data pointer
Definition entity.hh:77
EntitySeed seed() const
return EntitySeed
Definition entity.hh:122
GeometryType type() const
obtain the name of the corresponding reference element
Definition entity.hh:98
construct a null entity
Definition entity.hh:207
Traits::template Codim< codimension >::LocalGeometry LocalGeometry
type of corresponding local geometry
Definition entity.hh:233
PolyhedralGridEntity(ExtraData data_param, const EntitySeed &seed)
construct an initialized entity
Definition entity.hh:262
Traits::template Codim< codimension >::Entity Entity
type of corresponding entity
Definition entity.hh:235
PolyhedralGridEntity(ExtraData data_param)
construct a null entity with data pointer
Definition entity.hh:257
Traits::template Codim< codimension >::EntityPointer EntityPointer
type of corresponding entity
Definition entity.hh:237
Traits::HierarchicIterator HierarchicIterator
type of hierarchic iterator
Definition entity.hh:240
PolyhedralGridEntity()
construct a null entity
Definition entity.hh:252
Traits::LeafIntersectionIterator LeafIntersectionIterator
type of leaf intersection iterator
Definition entity.hh:242
Traits::LevelIntersectionIterator LevelIntersectionIterator
type of level intersection iterator
Definition entity.hh:244
Definition entity.hh:152
The namespace Dune is the main namespace for all Dune code.
Definition CartesianIndexMapper.hpp:10