3 #ifndef DUNE_ALBERTA_ENTITY_HH
4 #define DUNE_ALBERTA_ENTITY_HH
20 template<
int codim,
class Gr
id,
bool leafIterator >
21 class AlbertaGridTreeIterator;
23 template<
class Gr
id >
24 class AlbertaGridHierarchicIterator;
26 template<
class Gr
id >
27 class AlbertaGridLeafIntersection;
29 template<
class Gr
id >
30 class AlbertaGridLeafIntersectionIterator;
41 template<
int codim,
int dim,
class Gr
id >
42 class AlbertaGridEntity
43 :
public EntityDefaultImplementation< codim, dim, Grid, AlbertaGridEntity >
45 typedef AlbertaGridEntity< codim, dim, Grid > This;
48 friend class AlbertaGrid< dim, dimworld >;
49 friend class AlbertaGridEntity< 0, dim, Grid >;
51 friend class AlbertaGridHierarchicIterator< Grid >;
52 template<
int,
class,
bool >
friend class AlbertaGridTreeIterator;
55 static const int dimension = dim;
56 static const int codimension = codim;
57 static const int mydimension = dimension - codimension;
62 typedef typename Grid::template Codim< cd >::Entity Entity;
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;
69 typedef Alberta::ElementInfo< dimension > ElementInfo;
72 typedef typename Grid::Traits::template Codim< codim >::GeometryImpl GeometryImpl;
76 explicit AlbertaGridEntity (
const Grid &grid );
81 AlbertaGridEntity (
const Grid &grid,
const ElementInfo &elementInfo,
int subEntity );
90 Geometry geometry ()
const;
96 EntitySeed seed ()
const {
return EntitySeed( AlbertaGridEntitySeed< codim, Grid >( elementInfo(), subEntity() ) ); }
106 unsigned int subEntities (
unsigned int cd )
const
108 int n = mydimension+1;
109 int k = dimension-cd+1;
113 for (
int i=n-k+1; i<=n; i++)
115 for (
long i=2; i<=k; i++)
126 ALBERTA EL_INFO *getElInfo ()
const;
128 const ElementInfo &elementInfo ()
const {
return elementInfo_; }
131 bool equals (
const This &other )
const;
133 void clearElement ();
134 void setElement (
const ElementInfo &elementInfo,
int subEntity );
137 void setEntity (
const This &other );
140 const Grid &grid ()
const
146 int subEntity ()
const
154 return elementInfo().template twist< codimension >( subEntity() );
162 ElementInfo elementInfo_;
180 template<
int dim,
class Gr
id >
181 class AlbertaGridEntity< 0, dim, Grid >
182 :
public EntityDefaultImplementation< 0, dim, Grid, AlbertaGridEntity >
184 typedef AlbertaGridEntity< 0, dim, Grid > This;
188 friend class AlbertaGrid< dim, dimworld >;
189 friend class AlbertaGridLeafIntersection< Grid >;
190 friend class AlbertaGridHierarchicIterator< Grid >;
191 template<
int,
class,
bool >
friend class AlbertaGridTreeIterator;
194 static const int dimension = dim;
195 static const int codimension = 0;
196 static const int mydimension = dimension - codimension;
198 template<
int codim >
201 typedef typename Grid::template Codim< codim >::Entity
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;
213 typedef Dune::AlbertaGridLeafIntersectionIterator< Grid > AlbertaGridLeafIntersectionIterator;
214 typedef AlbertaGridLeafIntersectionIterator AlbertaGridLevelIntersectionIterator;
216 typedef Alberta::ElementInfo< dimension > ElementInfo;
219 explicit AlbertaGridEntity (
const Grid &grid );
221 AlbertaGridEntity ();
224 AlbertaGridEntity (
const Grid &grid,
const ElementInfo &elementInfo,
int subEntity );
230 int boundaryId ()
const;
233 Geometry geometry ()
const;
239 EntitySeed seed ()
const {
return EntitySeed( AlbertaGridEntitySeed< 0, Grid >(elementInfo() )); }
249 unsigned int subEntities (
unsigned int cd )
const
251 int n = mydimension+1;
252 int k = dimension-cd+1;
256 for (
int i=n-k+1; i<=n; i++)
258 for (
long i=2; i<=k; i++)
274 template<
int codim >
275 typename Grid::template Codim< codim >::Entity subEntity (
int i )
const;
282 AlbertaGridLeafIntersectionIterator ileafbegin ()
const;
285 AlbertaGridLeafIntersectionIterator ileafend ()
const;
287 AlbertaGridLevelIntersectionIterator ilevelbegin ()
const
289 if( grid().maxLevel() == 0 )
293 DUNE_THROW( NotImplemented,
"method ilevelbegin not implemented for AlbertaGrid." );
298 AlbertaGridLevelIntersectionIterator ilevelend ()
const
304 bool isLeaf ()
const;
308 Entity father ()
const;
310 bool hasFather ()
const
312 return (this->level()>0);
323 LocalGeometry geometryInFather ()
const;
329 HierarchicIterator hbegin (
int maxlevel)
const;
332 HierarchicIterator hend (
int maxlevel)
const;
338 bool mightVanish ()
const;
342 bool hasBoundaryIntersections ()
const ;
348 bool equals (
const This &i )
const;
351 ALBERTA EL_INFO *getElInfo ()
const;
353 const ElementInfo &elementInfo ()
const
358 void clearElement ();
359 void setElement (
const ElementInfo &elementInfo,
int subEntity );
362 void setEntity (
const This &other );
365 const Grid &grid ()
const
371 int subEntity ()
const
379 return elementInfo().template twist< codimension >( subEntity() );
383 template<
int codim >
384 int twist (
int i )
const
386 return elementInfo().template twist< codim >( grid().generic2alberta( codim, i ) );
397 ElementInfo elementInfo_;
402 #endif // #if HAVE_ALBERTA
404 #endif // #ifndef DUNE_ALBERTA_ENTITY_HH