dune-grid 2.8.0
Loading...
Searching...
No Matches
albertagrid/entity.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_ALBERTA_ENTITY_HH
4#define DUNE_ALBERTA_ENTITY_HH
5
7
11
12#if HAVE_ALBERTA
13
14namespace Dune
15{
16
17 // Forward Declarations
18 // --------------------
19
20 template< int codim, class Grid, bool leafIterator >
21 class AlbertaGridTreeIterator;
22
23 template< class Grid >
24 class AlbertaGridHierarchicIterator;
25
26 template< class Grid >
27 class AlbertaGridLeafIntersection;
28
29 template< class Grid >
30 class AlbertaGridLeafIntersectionIterator;
31
32
33
34 // AlbertaGridEntity
35 // -----------------
36
41 template< int codim, int dim, class Grid >
43 : public EntityDefaultImplementation< codim, dim, Grid, AlbertaGridEntity >
44 {
46
47 enum { dimworld = Grid::dimensionworld };
48 friend class AlbertaGrid< dim, dimworld >;
49 friend class AlbertaGridEntity< 0, dim, Grid >;
50
51 friend class AlbertaGridHierarchicIterator< Grid >;
52 template< int, class, bool > friend class AlbertaGridTreeIterator;
53
54 public:
55 static const int dimension = dim;
56 static const int codimension = codim;
57 static const int mydimension = dimension - codimension;
58
59 template< int cd >
60 struct Codim
61 {
62 typedef typename Grid::template Codim< cd >::Entity Entity;
63 };
64
65 typedef typename Grid::template Codim< codim >::Entity Entity;
66 typedef typename Grid::template Codim< codim >::EntitySeed EntitySeed;
67 typedef typename Grid::template Codim< codim >::Geometry Geometry;
68
70
71 private:
72 typedef typename Grid::Traits::template Codim< codim >::GeometryImpl GeometryImpl;
73
74 public:
76 explicit AlbertaGridEntity ( const Grid &grid );
77
79
82
84 int level () const;
85
88
90 Geometry geometry () const;
91
93 GeometryType type () const;
94
97
106 unsigned int subEntities ( unsigned int cd ) const
107 {
108 int n = mydimension+1;
109 int k = dimension-cd+1;
110
111 // binomial: n over k
112 int binomial=1;
113 for (int i=n-k+1; i<=n; i++)
114 binomial *= i;
115 for (long i=2; i<=k; i++)
116 binomial /= i;
117
118 return binomial;
119 }
120
121 //***********************************************
122 // end of interface methods
123 //***********************************************
124
126 ALBERTA EL_INFO *getElInfo () const;
127
128 const ElementInfo &elementInfo () const { return elementInfo_; }
129
131 bool equals ( const This &other ) const;
132
133 void clearElement ();
134 void setElement ( const ElementInfo &elementInfo, int subEntity );
135
136 // same as setElInfo just with a entity given
137 void setEntity ( const This &other );
138
140 const Grid &grid () const
141 {
142 return *grid_;
143 }
144
146 int subEntity () const
147 {
148 return subEntity_;
149 }
150
152 int twist () const
153 {
154 return elementInfo().template twist< codimension >( subEntity() );
155 }
156
157 private:
158 // grid this entity belong to
159 const Grid *grid_;
160
161 // ALBERTA element info
162 ElementInfo elementInfo_;
163
164 // number of the subentity within the element (in ALBERTA numbering)
165 int subEntity_;
166 };
167
168
169
170 // AlbertaGridEntity for codimension 0
171 // -----------------------------------
172
180 template< int dim, class Grid >
181 class AlbertaGridEntity< 0, dim, Grid >
182 : public EntityDefaultImplementation< 0, dim, Grid, AlbertaGridEntity >
183 {
185
186 static const int dimworld = Grid::dimensionworld;
187
188 friend class AlbertaGrid< dim, dimworld >;
189 friend class AlbertaGridLeafIntersection< Grid >;
190 friend class AlbertaGridHierarchicIterator< Grid >;
191 template< int, class, bool > friend class AlbertaGridTreeIterator;
192
193 public:
194 static const int dimension = dim;
195 static const int codimension = 0;
196 static const int mydimension = dimension - codimension;
197
198 template< int codim >
199 struct Codim
200 {
201 typedef typename Grid::template Codim< codim >::Entity
203 };
204
205 typedef typename Grid::template Codim< 0 >::Entity Entity;
206 typedef typename Grid::template Codim< 0 >::EntitySeed EntitySeed;
207 typedef typename Grid::template Codim< 0 >::Geometry Geometry;
208 typedef typename Grid::template Codim< 0 >::LocalGeometry LocalGeometry;
209 typedef typename Grid::Traits::template Codim< 0 >::GeometryImpl GeometryImpl;
210
212
215
217
219 explicit AlbertaGridEntity ( const Grid &grid );
220
222
225
227 int level () const;
228
230 int boundaryId () const;
231
233 Geometry geometry () const;
234
236 GeometryType type () const;
237
240
249 unsigned int subEntities ( unsigned int cd ) const
250 {
251 int n = mydimension+1;
252 int k = dimension-cd+1;
253
254 // binomial: n over k
255 int binomial=1;
256 for (int i=n-k+1; i<=n; i++)
257 binomial *= i;
258 for (long i=2; i<=k; i++)
259 binomial /= i;
260
261 return binomial;
262 }
263
274 template< int codim >
275 typename Grid::template Codim< codim >::Entity subEntity ( int i ) const;
276
282 AlbertaGridLeafIntersectionIterator ileafbegin () const;
283
285 AlbertaGridLeafIntersectionIterator ileafend () const;
286
288 {
289 if( grid().maxLevel() == 0 )
290 return ileafbegin();
291 else
292 {
293 DUNE_THROW( NotImplemented, "method ilevelbegin not implemented for AlbertaGrid." );
294 return ileafend();
295 }
296 }
297
299 {
300 return ileafend();
301 }
302
304 bool isLeaf () const;
305
308 Entity father () const;
310 bool hasFather () const
311 {
312 return (this->level()>0);
313 }
314
323 LocalGeometry geometryInFather () const;
324
329 HierarchicIterator hbegin (int maxlevel) const;
330
332 HierarchicIterator hend (int maxlevel) const;
333
335 bool isNew () const;
336
338 bool mightVanish () const;
339
342 bool hasBoundaryIntersections () const ;
343
346
348 bool equals ( const This &i ) const;
349
350 // needed for LevelIterator to compare
351 ALBERTA EL_INFO *getElInfo () const;
352
353 const ElementInfo &elementInfo () const
354 {
355 return elementInfo_;
356 }
357
358 void clearElement ();
359 void setElement ( const ElementInfo &elementInfo, int subEntity );
360
361 // same as setElInfo just with a entity given
362 void setEntity ( const This &other );
363
365 const Grid &grid () const
366 {
367 return *grid_;
368 }
369
371 int subEntity () const
372 {
373 return 0;
374 }
375
377 int twist () const
378 {
379 return elementInfo().template twist< codimension >( subEntity() );
380 }
381
383 template< int codim >
384 int twist ( int i ) const
385 {
386 return elementInfo().template twist< codim >( grid().generic2alberta( codim, i ) );
387 }
388
389 private:
391 int nChild () const;
392
394 const Grid *grid_;
395
396 // Alberta element info
397 ElementInfo elementInfo_;
398 };
399
400} // namespace Dune
401
402#endif // #if HAVE_ALBERTA
403
404#endif // #ifndef DUNE_ALBERTA_ENTITY_HH
#define ALBERTA
Definition: albertaheader.hh:27
provides a wrapper for ALBERTA's el_info structure
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:28
Include standard header files.
Definition: agrid.hh:58
[ provides Dune::Grid ]
Definition: agrid.hh:107
Definition: treeiterator.hh:187
Definition: hierarchiciterator.hh:27
Definition: albertagrid/intersection.hh:103
Definition: albertagrid/intersectioniterator.hh:25
Definition: albertagrid/entity.hh:44
void clearElement()
Definition: entity.cc:68
int twist() const
obtain twist
Definition: albertagrid/entity.hh:152
ALBERTA EL_INFO * getElInfo() const
needed for the LevelIterator and LeafIterator
Definition: entity.cc:60
Grid::template Codim< codim >::Entity Entity
Definition: albertagrid/entity.hh:65
int level() const
level of this element
Definition: entity.cc:92
void setElement(const ElementInfo &elementInfo, int subEntity)
Definition: entity.cc:76
EntitySeed seed() const
obtain entity seed
Definition: albertagrid/entity.hh:96
PartitionType partitionType() const
return partition type of this entity
Definition: entity.cc:38
Grid::template Codim< codim >::Geometry Geometry
Definition: albertagrid/entity.hh:67
void setEntity(const This &other)
Definition: entity.cc:85
const ElementInfo & elementInfo() const
Definition: albertagrid/entity.hh:128
Geometry geometry() const
geometry of this entity
Definition: entity.cc:101
static const int dimension
Definition: albertagrid/entity.hh:55
unsigned int subEntities(unsigned int cd) const
Obtain the number of subentities of a given codimension.
Definition: albertagrid/entity.hh:106
static const int codimension
Definition: albertagrid/entity.hh:56
const Grid & grid() const
obtain a reference to the grid
Definition: albertagrid/entity.hh:140
Grid::template Codim< codim >::EntitySeed EntitySeed
Definition: albertagrid/entity.hh:66
static const int mydimension
Definition: albertagrid/entity.hh:57
int subEntity() const
obtain number of the subentity within the element (in ALBERTA numbering)
Definition: albertagrid/entity.hh:146
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/entity.hh:69
GeometryType type() const
type of geometry of this entity
Definition: entity.cc:112
bool equals(const This &other) const
equality of entities
Definition: entity.cc:46
AlbertaGridEntity()
Definition: entity.cc:30
Definition: albertagrid/entity.hh:61
Grid::template Codim< cd >::Entity Entity
Definition: albertagrid/entity.hh:62
Definition: albertagrid/entity.hh:183
Grid::HierarchicIterator HierarchicIterator
Definition: albertagrid/entity.hh:211
EntitySeed seed() const
obtain entity seed
Definition: albertagrid/entity.hh:239
Grid::Traits::template Codim< 0 >::GeometryImpl GeometryImpl
Definition: albertagrid/entity.hh:209
const ElementInfo & elementInfo() const
Definition: albertagrid/entity.hh:353
int twist() const
obtain twist
Definition: albertagrid/entity.hh:377
Grid::template Codim< 0 >::Geometry Geometry
Definition: albertagrid/entity.hh:207
bool hasFather() const
returns true if father entity exists
Definition: albertagrid/entity.hh:310
Grid::template Codim< 0 >::Entity Entity
Definition: albertagrid/entity.hh:205
int subEntity() const
obtain number of the subentity within the element (in ALBERTA numbering)
Definition: albertagrid/entity.hh:371
int twist(int i) const
obtain twist of a subentity
Definition: albertagrid/entity.hh:384
AlbertaGridLevelIntersectionIterator ilevelbegin() const
Definition: albertagrid/entity.hh:287
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/entity.hh:216
Grid::template Codim< 0 >::EntitySeed EntitySeed
Definition: albertagrid/entity.hh:206
AlbertaGridLevelIntersectionIterator ilevelend() const
Definition: albertagrid/entity.hh:298
Grid::template Codim< 0 >::LocalGeometry LocalGeometry
Definition: albertagrid/entity.hh:208
const Grid & grid() const
obtain a reference to the grid
Definition: albertagrid/entity.hh:365
unsigned int subEntities(unsigned int cd) const
Obtain the number of subentities of a given codimension.
Definition: albertagrid/entity.hh:249
Dune::AlbertaGridLeafIntersectionIterator< Grid > AlbertaGridLeafIntersectionIterator
Definition: albertagrid/entity.hh:213
AlbertaGridLeafIntersectionIterator AlbertaGridLevelIntersectionIterator
Definition: albertagrid/entity.hh:214
Grid::template Codim< codim >::Entity Entity
Definition: albertagrid/entity.hh:202
Definition: albertagrid/entityseed.hh:16
Wrapper class for entities.
Definition: common/entity.hh:64
Default Implementations for EntityImp.
Definition: common/entity.hh:548
Grid abstract base class.
Definition: common/grid.hh:372
GridFamily::Traits::HierarchicIterator HierarchicIterator
A type that is a model of Dune::HierarchicIterator A type of iterator that allows to examine,...
Definition: common/grid.hh:485
@ dimensionworld
The dimension of the world the grid lives in.
Definition: common/grid.hh:392