dune-grid  2.6-git
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 
14 namespace Dune
15 {
16 
17  // Forward Declarations
18  // --------------------
19 
20  template< int codim, class Grid, bool leafIterator >
22 
23  template< class Grid >
25 
26  template< class Grid >
28 
29  template< class Grid >
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 
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 
81  AlbertaGridEntity ( const Grid &grid, const ElementInfo &elementInfo, int subEntity );
82 
84  int level () const;
85 
88 
90  Geometry geometry () const;
91 
93  GeometryType type () const;
94 
96  EntitySeed seed () const { return EntitySeed( AlbertaGridEntitySeed< codim, Grid >( elementInfo(), subEntity() ) ); }
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 >;
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 
214  typedef AlbertaGridLeafIntersectionIterator AlbertaGridLevelIntersectionIterator;
215 
217 
219  explicit AlbertaGridEntity ( const Grid &grid );
220 
222 
224  AlbertaGridEntity ( const Grid &grid, const ElementInfo &elementInfo, int subEntity );
225 
227  int level () const;
228 
230  int boundaryId () const;
231 
233  Geometry geometry () const;
234 
236  GeometryType type () const;
237 
239  EntitySeed seed () const { return EntitySeed( AlbertaGridEntitySeed< 0, Grid >(elementInfo() )); }
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 
287  AlbertaGridLevelIntersectionIterator ilevelbegin () const
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 
298  AlbertaGridLevelIntersectionIterator ilevelend () const
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
Include standard header files.
Definition: agrid.hh:58
int subEntity() const
obtain number of the subentity within the element (in ALBERTA numbering)
Definition: albertagrid/entity.hh:371
Definition: albertagrid/entity.hh:21
Grid::template Codim< codim >::EntitySeed EntitySeed
Definition: albertagrid/entity.hh:66
Dune::AlbertaGridLeafIntersectionIterator< Grid > AlbertaGridLeafIntersectionIterator
Definition: albertagrid/entity.hh:213
Definition: albertagrid/entity.hh:60
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:486
Grid::HierarchicIterator HierarchicIterator
Definition: albertagrid/entity.hh:211
void clearElement()
Definition: entity.cc:68
#define ALBERTA
Definition: albertaheader.hh:27
Grid::template Codim< 0 >::EntitySeed EntitySeed
Definition: albertagrid/entity.hh:206
void setElement(const ElementInfo &elementInfo, int subEntity)
Definition: entity.cc:76
Geometry geometry() const
geometry of this entity
Definition: entity.cc:101
AlbertaGridEntity()
Definition: entity.cc:30
Grid::template Codim< codim >::Geometry Geometry
Definition: albertagrid/entity.hh:67
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:373
int twist(int i) const
obtain twist of a subentity
Definition: albertagrid/entity.hh:384
[ provides Dune::Grid ]
Definition: agrid.hh:136
Definition: albertagrid/entity.hh:27
bool hasFather() const
returns true if father entity exists
Definition: albertagrid/entity.hh:310
AlbertaGridLeafIntersectionIterator AlbertaGridLevelIntersectionIterator
Definition: albertagrid/entity.hh:214
Default Implementations for EntityImp.
Definition: common/entity.hh:547
static const int mydimension
Definition: albertagrid/entity.hh:57
provides a wrapper for ALBERTA&#39;s el_info structure
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/entity.hh:216
void setEntity(const This &other)
Definition: entity.cc:85
Definition: albertagrid/entity.hh:42
AlbertaGridLevelIntersectionIterator ilevelend() const
Definition: albertagrid/entity.hh:298
unsigned int subEntities(unsigned int cd) const
Obtain the number of subentities of a given codimension.
Definition: albertagrid/entity.hh:106
Definition: albertagrid/entity.hh:24
GeometryType
Type representing VTK&#39;s entity geometry types.
Definition: common.hh:178
Grid::template Codim< 0 >::Geometry Geometry
Definition: albertagrid/entity.hh:207
EntitySeed seed() const
obtain entity seed
Definition: albertagrid/entity.hh:96
int twist() const
obtain twist
Definition: albertagrid/entity.hh:377
const ElementInfo & elementInfo() const
Definition: albertagrid/entity.hh:128
unsigned int subEntities(unsigned int cd) const
Obtain the number of subentities of a given codimension.
Definition: albertagrid/entity.hh:249
int subEntity() const
obtain number of the subentity within the element (in ALBERTA numbering)
Definition: albertagrid/entity.hh:146
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:28
Definition: albertagrid/entity.hh:181
Grid::template Codim< cd >::Entity Entity
Definition: albertagrid/entity.hh:62
Definition: albertagrid/entity.hh:30
const ElementInfo & elementInfo() const
Definition: albertagrid/entity.hh:353
int level() const
level of this element
Definition: entity.cc:92
static const int codimension
Definition: albertagrid/entity.hh:56
Grid::template Codim< codim >::Entity Entity
Definition: albertagrid/entity.hh:202
Definition: albertagrid/entityseed.hh:16
GeometryType type() const
type of geometry of this entity
Definition: entity.cc:112
The dimension of the world the grid lives in.
Definition: common/grid.hh:393
Grid::template Codim< codim >::Entity Entity
Definition: albertagrid/entity.hh:65
bool equals(const This &other) const
equality of entities
Definition: entity.cc:46
int twist() const
obtain twist
Definition: albertagrid/entity.hh:152
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/entity.hh:69
const Grid & grid() const
obtain a reference to the grid
Definition: albertagrid/entity.hh:365
Grid::template Codim< 0 >::LocalGeometry LocalGeometry
Definition: albertagrid/entity.hh:208
Grid::template Codim< 0 >::Entity Entity
Definition: albertagrid/entity.hh:205
PartitionType partitionType() const
return partition type of this entity
Definition: entity.cc:38
const Grid & grid() const
obtain a reference to the grid
Definition: albertagrid/entity.hh:140
EntitySeed seed() const
obtain entity seed
Definition: albertagrid/entity.hh:239
static const int dimension
Definition: albertagrid/entity.hh:55
Grid::Traits::template Codim< 0 >::GeometryImpl GeometryImpl
Definition: albertagrid/entity.hh:209
ALBERTA EL_INFO * getElInfo() const
needed for the LevelIterator and LeafIterator
Definition: entity.cc:60
AlbertaGridLevelIntersectionIterator ilevelbegin() const
Definition: albertagrid/entity.hh:287