Dune Core Modules (2.4.1)

entity.hh
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_GEOGRID_ENTITY_HH
4 #define DUNE_GEOGRID_ENTITY_HH
5 
6 #include <dune/common/nullptr.hh>
7 
8 #include <dune/geometry/referenceelements.hh>
9 
10 #include <dune/grid/common/grid.hh>
11 #include <dune/grid/geometrygrid/capabilities.hh>
12 #include <dune/grid/geometrygrid/cornerstorage.hh>
13 
14 namespace Dune
15 {
16 
17  namespace GeoGrid
18  {
19 
20  // Internal Forward Declarations
21  // -----------------------------
22 
33  template< int codim, class Grid, bool fake = !(Capabilities::hasHostEntity< Grid, codim >::v) >
34  class EntityBase;
35 
48  template< int codim, int dim, class Grid >
49  class Entity;
50 
51 
52 
53  // External Forward Declarations
54  // -----------------------------
55 
56  template< class Grid >
57  class HierarchicIterator;
58 
59  template< class Grid, class HostIntersectionIterator >
60  class IntersectionIterator;
61 
62 
63 
64  // EntityBase (real)
65  // -----------------
66 
74  template< int codim, class Grid >
75  class EntityBase< codim, Grid, false >
76  {
77  typedef typename remove_const< Grid >::type::Traits Traits;
78 
79  public:
84  static const int codimension = codim;
86  static const int dimension = Traits::dimension;
88  static const int mydimension = dimension - codimension;
90  static const int dimensionworld = Traits::dimensionworld;
91 
93  static const bool fake = false;
94 
101  typedef typename Traits::ctype ctype;
102 
104  typedef typename Traits::template Codim< codimension >::Geometry Geometry;
107  private:
108  typedef typename Traits::HostGrid HostGrid;
109  typedef typename Traits::CoordFunction CoordFunction;
110 
111  public:
116  typedef typename HostGrid::template Codim< codimension >::Entity HostEntity;
118  typedef typename HostGrid::template Codim< codimension >::EntityPointer HostEntityPointer;
119 
121  typedef typename Traits::template Codim< codimension >::EntitySeed EntitySeed;
122 
124  typedef typename HostGrid::template Codim< 0 >::Entity HostElement;
127  typedef typename Traits::template Codim< codim >::GeometryImpl GeometryImpl;
128 
129  private:
130  typedef typename HostGrid::template Codim< codimension >::Geometry HostGeometry;
131 
132  typedef GeoGrid::CoordVector< mydimension, Grid, fake > CoordVector;
133 
134  public:
138  EntityBase ()
139  : hostEntity_()
140  , grid_( nullptr )
141  , geo_()
142  {}
143 
144  EntityBase ( const Grid &grid, const EntitySeed &seed )
145  : hostEntity_( grid.hostGrid().entity( grid.getRealImplementation(seed).hostEntitySeed() ) )
146  , grid_( &grid )
147  {}
148 
149  EntityBase ( const Grid &grid, const HostElement &hostElement, int i )
150  : hostEntity_( hostElement.template subEntity<codim>(i) )
151  , grid_( &grid )
152  {}
153 
154 
155  EntityBase ( const GeometryImpl &geo, const HostEntity &hostEntity )
156  : hostEntity_( hostEntity )
157  , grid_( &geo.grid() )
158  , geo_( geo )
159  {}
160 
161  EntityBase ( const GeometryImpl &geo, HostEntity&& hostEntity )
162  : hostEntity_( std::move( hostEntity ) )
163  , grid_( &geo.grid() )
164  , geo_( geo )
165  {}
166 
167  EntityBase ( const Grid &grid, const HostEntity& hostEntity )
168  : hostEntity_( hostEntity )
169  , grid_( &grid )
170  {}
171 
172  EntityBase ( const Grid &grid, HostEntity&& hostEntity )
173  : hostEntity_( std::move( hostEntity ) )
174  , grid_( &grid )
175  {}
176 
177 
178  EntityBase ( const EntityBase &other )
179  : hostEntity_( other.hostEntity_ )
180  , grid_( other.grid_ )
181  , geo_( other.geo_ )
182  {}
183 
184  EntityBase ( EntityBase&& other )
185  : hostEntity_( std::move( other.hostEntity_ ) )
186  , grid_( other.grid_ )
187  , geo_( std::move( other.geo_ ) )
188  {}
189 
192  const EntityBase &operator= ( const EntityBase &other )
193  {
194  hostEntity_ = other.hostEntity_;
195  grid_ = other.grid_;
196  geo_ = other.geo_;
197  return *this;
198  }
199 
200  const EntityBase &operator= ( EntityBase&& other )
201  {
202  hostEntity_ = std::move( other.hostEntity_ );
203  grid_ = std::move( other.grid_ );
204  geo_ = std::move( other.geo_ );
205  return *this;
206  }
207 
209  bool equals ( const EntityBase &other) const
210  {
211  return hostEntity_ == other.hostEntity_;
212  }
213 
214  public:
223  {
224  return hostEntity().type();
225  }
226 
228  int level () const
229  {
230  return hostEntity().level();
231  }
232 
235  {
236  return hostEntity().partitionType();
237  }
238 
254  {
255  if( !geo_ )
256  {
257  CoordVector coords( hostEntity(), grid().coordFunction() );
258  geo_ = GeometryImpl( grid(), type(), coords );
259  }
260  return Geometry( geo_ );
261  }
262 
264  EntitySeed seed () const { return typename EntitySeed::Implementation( hostEntity().seed() ); }
271  const Grid &grid () const { assert( grid_ ); return *grid_; }
272 
273  const HostEntity &hostEntity () const
274  {
275  return hostEntity_;
276  }
277 
283  void initialize ( const HostEntity &hostEntity ) { hostEntity_ = hostEntity; }
284 
292  template< class HostIndexSet >
293  typename HostIndexSet::IndexType
294  index ( const HostIndexSet &indexSet ) const
295  {
296  return indexSet.template index< codimension >( hostEntity() );
297  }
298 
308  template< class HostIndexSet >
309  typename HostIndexSet::IndexType
310  subIndex ( const HostIndexSet &indexSet, int i, unsigned int cd ) const
311  {
312  return indexSet.subIndex( hostEntity(), i, cd );
313  }
314 
322  template< class HostIndexSet >
323  bool isContained ( const HostIndexSet &indexSet ) const
324  {
325  return indexSet.contains( hostEntity() );
326  }
327 
335  template< class HostIdSet >
336  typename HostIdSet::IdType id ( const HostIdSet &idSet ) const
337  {
338  return idSet.template id< codimension >( hostEntity() );
339  }
342  private:
343  HostEntity hostEntity_;
344  const Grid *grid_;
345  mutable GeometryImpl geo_;
346  };
347 
348 
349 
350  // EntityBase (fake)
351  // -----------------
352 
360  template< int codim, class Grid >
361  class EntityBase< codim, Grid, true >
362  {
363  typedef typename remove_const< Grid >::type::Traits Traits;
364 
365  public:
370  static const int codimension = codim;
372  static const int dimension = Traits::dimension;
374  static const int mydimension = dimension - codimension;
376  static const int dimensionworld = Traits::dimensionworld;
377 
379  static const bool fake = true;
386  typedef typename Traits::ctype ctype;
387 
389  typedef typename Traits::template Codim< codimension >::Geometry Geometry;
392  private:
393  typedef typename Traits::HostGrid HostGrid;
394  typedef typename Traits::CoordFunction CoordFunction;
395 
396  public:
401  typedef typename HostGrid::template Codim< codimension >::Entity HostEntity;
403  typedef typename HostGrid::template Codim< codimension >::EntityPointer HostEntityPointer;
404 
406  typedef typename Traits::template Codim< codimension >::EntitySeed EntitySeed;
407 
409  typedef typename HostGrid::template Codim< 0 >::Entity HostElement;
412  typedef typename Traits::template Codim< codimension >::GeometryImpl GeometryImpl;
413 
414  private:
415  typedef typename HostGrid::template Codim< 0 >::Geometry HostGeometry;
416  typedef typename HostGrid::template Codim< dimension >::EntityPointer HostVertexPointer;
417 
418  typedef GeoGrid::CoordVector< mydimension, Grid, fake > CoordVector;
419 
420  public:
424  EntityBase () : geo_(), hostElement_(), subEntity_( -1 ) {}
425 
426 
427  EntityBase ( const Grid &grid, const EntitySeed &seed )
428  : hostElement_( grid.hostGrid().entity( grid.getRealImplementation(seed).hostElementSeed() ) )
429  , grid_( &grid )
430  , subEntity_( grid.getRealImplementation(seed).subEntity() )
431  {}
432 
433  EntityBase ( const EntityBase &other )
434  : geo_( other.geo_ ),
435  hostElement_( other.hostElement_ ),
436  subEntity_( other.subEntity_ )
437  {}
438 
439  EntityBase ( EntityBase &&other )
440  : geo_( std::move( other.geo_ ) ),
441  hostElement_( std::move( other.hostElement_ ) ),
442  subEntity_( std::move( other.subEntity_ ) )
443  {}
444 
447  const EntityBase &operator= ( const EntityBase &other )
448  {
449  geo_ = other.geo_;
450  hostElement_ = other.hostElement_;
451  subEntity_ = other.subEntity_;
452  return *this;
453  }
454 
455  const EntityBase &operator= ( EntityBase&& other )
456  {
457  geo_ = std::move( other.geo_ );
458  hostElement_ = std::move( other.hostElement_ );
459  subEntity_ = std::move( other.subEntity_ );
460  return *this;
461  }
462 
464  bool equals ( const EntityBase &other) const
465  {
466  const bool thisEnd = (subEntity() < 0);
467  const bool otherEnd = (other.subEntity() < 0);
468  if( thisEnd || otherEnd )
469  return thisEnd && otherEnd;
470 
471  const int lvl = level();
472  if( lvl != other.level() )
473  return false;
474 
475  const typename Traits::HostGrid::Traits::LevelIndexSet &indexSet
476  = grid().hostGrid().levelIndexSet( lvl );
477 
478  const HostElement &thisElement = hostElement();
479  assert( indexSet.contains( thisElement ) );
480  const HostElement &otherElement = other.hostElement();
481  assert( indexSet.contains( otherElement ) );
482 
483  const int thisIndex = indexSet.subIndex( thisElement, subEntity(), codimension );
484  const int otherIndex = indexSet.subIndex( otherElement, other.subEntity(), codimension );
485  return (thisIndex == otherIndex);
486  }
487 
496  {
497  const ReferenceElement< ctype, dimension > &refElement
498  = ReferenceElements< ctype, dimension >::general( hostElement().type() );
499  return refElement.type( subEntity_, codimension );
500  }
501 
503  int level () const
504  {
505  return hostElement().level();
506  }
507 
510  {
512  return InteriorEntity;
513 
514  const ReferenceElement< ctype, dimension > &refElement
515  = ReferenceElements< ctype, dimension >::general( hostElement().type() );
516 
517  PartitionType type = vertexPartitionType( refElement, 0 );
518  if( (type != BorderEntity) && (type != FrontEntity) )
519  return type;
520 
521  const int numVertices = refElement.size( subEntity_, codimension, dimension );
522  for( int i = 1; i < numVertices; ++i )
523  {
524  PartitionType vtxType = vertexPartitionType( refElement, i );
525  if( (vtxType != BorderEntity) && (vtxType != FrontEntity) )
526  return vtxType;
527  if( type != vtxType )
528  return OverlapEntity;
529  }
530  assert( (type == BorderEntity) || (type == FrontEntity) );
531  return type;
532  }
533 
549  {
550  if( !geo_ )
551  {
552  CoordVector coords( hostElement(), subEntity_, grid().coordFunction() );
553  geo_ = GeometryImpl( grid(), type(), coords );
554  }
555  return Geometry( geo_ );
556  }
557 
559  EntitySeed seed () const { return typename EntitySeed::Implementation( hostElement().seed(), subEntity_ ); }
565  const Grid &grid () const { assert( grid_ ); return *grid_; }
566 
567  const HostEntity &hostEntity () const
568  {
569  DUNE_THROW( NotImplemented, "HostGrid has no entities of codimension " << codimension << "." );
570  }
571 
572  const HostElement &hostElement () const
573  {
574  assert( *this );
575  return hostElement_;
576  }
577 
578  int subEntity () const { return subEntity_; }
579 
587  void initialize ( const HostElement &hostElement ) { hostElement_ = hostElement; }
588 
596  template< class HostIndexSet >
597  typename HostIndexSet::IndexType index ( const HostIndexSet &indexSet ) const
598  {
599  return indexSet.subIndex( hostElement(), subEntity_, codimension );
600  }
601 
611  template< class HostIndexSet >
612  typename HostIndexSet::IndexType
613  subIndex ( const HostIndexSet &indexSet, int i, unsigned int cd ) const
614  {
615  const ReferenceElement< ctype, dimension > &refElement
616  = ReferenceElements< ctype, dimension >::general( hostElement().type() );
617  const int j = refElement.subEntity( subEntity_, codimension, i, codimension+cd );
618  return indexSet.subIndex( hostElement(), j, codimension+cd );
619  }
620 
628  template< class HostIndexSet >
629  bool isContained ( const HostIndexSet &indexSet ) const
630  {
631  return indexSet.contains( hostElement() );
632  }
633 
641  template< class HostIdSet >
642  typename HostIdSet::IdType id ( const HostIdSet &idSet ) const
643  {
644  return idSet.subId( hostElement(), subEntity_, codimension );
645  }
648  private:
650  vertexPartitionType ( const ReferenceElement< ctype, dimension > &refElement, int i ) const
651  {
652  const int j = refElement.subEntity( subEntity_, codimension, 0, dimension );
653  return hostElement().template subEntity< dimension >( j )->partitionType();
654  }
655 
656  private:
657  HostElement hostElement_;
658  unsigned int subEntity_;
659  const Grid *grid_;
660  mutable GeometryImpl geo_;
661  };
662 
663 
664 
665  // Entity
666  // ------
667 
668  template< int codim, int dim, class Grid >
669  class Entity
670  : public EntityBase< codim, Grid >
671  {
672  typedef EntityBase< codim, Grid > Base;
673 
674  public:
675  typedef typename Base::HostEntity HostEntity;
676  typedef typename Base::HostElement HostElement;
677  typedef typename Base::GeometryImpl GeometryImpl;
678  typedef typename Base::EntitySeed EntitySeed;
679 
680  Entity () : Base() {}
681 
682  Entity ( const Grid &grid, const EntitySeed &seed ) : Base( grid, seed ) {}
683 
684  Entity ( const Grid &grid, const HostEntity &hostEntity ) : Base( grid, hostEntity ) {}
685  Entity ( const Grid &grid, HostEntity&& hostEntity ) : Base( grid, std::move( hostEntity ) ) {}
686 
687  Entity ( const Grid &grid, const HostElement &hostEntity, int i ) : Base( grid, hostEntity, i ) {}
688 
689  };
690 
691 
692 
693  // Entity for codimension 0
694  // ------------------------
695 
696  template< int dim, class Grid >
697  class Entity< 0, dim, Grid >
698  : public EntityBase< 0, Grid >
699  {
700  typedef EntityBase< 0, Grid > Base;
701 
702  typedef typename remove_const< Grid >::type::Traits Traits;
703 
704  typedef typename Traits::HostGrid HostGrid;
705 
706  public:
711  static const int codimension = Base::codimension;
713  static const int dimension = Base::dimension;
715  static const int mydimension = Base::mydimension;
717  static const int dimensionworld = Base::dimensionworld;
718 
720  static const bool fake = Base::fake;
727  typedef typename Traits::template Codim< codimension >::LocalGeometry LocalGeometry;
729  typedef typename Traits::template Codim< codimension >::EntityPointer EntityPointer;
730 
732 
734  typedef typename Traits::HierarchicIterator HierarchicIterator;
736  typedef typename Traits::LeafIntersectionIterator LeafIntersectionIterator;
738  typedef typename Traits::LevelIntersectionIterator LevelIntersectionIterator;
739 
742  typedef typename Base::HostEntity HostEntity;
743  typedef typename Base::HostElement HostElement;
744  typedef typename Base::GeometryImpl GeometryImpl;
745  typedef typename Base::EntitySeed EntitySeed;
746 
747  using Base::grid;
748  using Base::hostEntity;
749 
750  Entity () : Base() {}
751 
752  Entity ( const Grid &grid, const HostEntity &hostEntity ) : Base( grid, hostEntity ) {}
753  Entity ( const Grid &grid, HostEntity&& hostEntity ) : Base( grid, std::move( hostEntity ) ) {}
754  Entity ( const GeometryImpl &geo, const HostEntity& hostEntity ) : Base( geo, hostEntity ) {}
755  Entity ( const GeometryImpl &geo, HostEntity &&hostEntity ) : Base( geo, std::move( hostEntity ) ) {}
756 
757  Entity ( const Grid &grid, const EntitySeed &seed ) : Base( grid, seed ) {}
758 
759  Entity ( const Grid &grid, const HostEntity &hostEntity, int i ) : Base( grid, hostEntity )
760  {
761  assert( i == 0 );
762  }
763 
764  template< int codim >
765  int count () const
766  {
767  return hostEntity().template count< codim >();
768  }
769 
770  unsigned int subEntities (unsigned int codim) const
771  {
772  return hostEntity().subEntities(codim);
773  }
774 
775  template< int codim >
776  typename Grid::template Codim< codim >::Entity
777  subEntity ( int i ) const
778  {
779  typedef typename Traits::template Codim< codim >::EntityImpl EntityImpl;
780  return EntityImpl( grid(), hostEntity(), i );
781  }
782 
783  LevelIntersectionIterator ilevelbegin () const
784  {
785  typedef GeoGrid::IntersectionIterator< Grid, typename HostGrid::LevelIntersectionIterator > LevelIntersectionIteratorImpl;
786  return LevelIntersectionIteratorImpl( *this, hostEntity().ilevelbegin() );
787  }
788 
789  LevelIntersectionIterator ilevelend () const
790  {
791  typedef GeoGrid::IntersectionIterator< Grid, typename HostGrid::LevelIntersectionIterator > LevelIntersectionIteratorImpl;
792  return LevelIntersectionIteratorImpl( *this, hostEntity().ilevelend() );
793  }
794 
795  LeafIntersectionIterator ileafbegin () const
796  {
797  typedef GeoGrid::IntersectionIterator< Grid, typename HostGrid::LeafIntersectionIterator > LeafIntersectionIteratorImpl;
798  return LeafIntersectionIteratorImpl( *this, hostEntity().ileafbegin() );
799  }
800 
801  LeafIntersectionIterator ileafend () const
802  {
803  typedef GeoGrid::IntersectionIterator< Grid, typename HostGrid::LeafIntersectionIterator > LeafIntersectionIteratorImpl;
804  return LeafIntersectionIteratorImpl( *this, hostEntity().ileafend() );
805  }
806 
807  bool hasBoundaryIntersections () const
808  {
809  return hostEntity().hasBoundaryIntersections();
810  }
811 
812  bool isLeaf () const
813  {
814  return hostEntity().isLeaf();
815  }
816 
817  EntityFacade father () const
818  {
819  return Entity( grid(), hostEntity().father() );
820  }
821 
822  bool hasFather () const
823  {
824  return hostEntity().hasFather();
825  }
826 
827  LocalGeometry geometryInFather () const
828  {
829  return hostEntity().geometryInFather();
830  }
831 
832  HierarchicIterator hbegin ( int maxLevel ) const
833  {
834  typedef GeoGrid::HierarchicIterator< Grid > HierarchicIteratorImpl;
835  return HierarchicIteratorImpl( grid(), hostEntity().hbegin( maxLevel ) );
836  }
837 
838  HierarchicIterator hend ( int maxLevel ) const
839  {
840  typedef GeoGrid::HierarchicIterator< Grid > HierarchicIteratorImpl;
841  return HierarchicIteratorImpl( grid(), hostEntity().hend( maxLevel ) );
842  }
843 
844  bool isRegular () const
845  {
846  return hostEntity().isRegular();
847  }
848 
849  bool isNew () const
850  {
851  return hostEntity().isNew();
852  }
853 
854  bool mightVanish () const
855  {
856  return hostEntity().mightVanish();
857  }
858  };
859 
860  } // namespace GeoGrid
861 
862 } // namespace Dune
863 
864 #endif // #ifndef DUNE_GEOGRID_ENTITY_HH
EntitySeedImp Implementation
Export the implementation type.
Definition: entityseed.hh:31
Wrapper class for entities.
Definition: entity.hh:62
GeometryType type() const
obtain the name of the corresponding reference element
Definition: entity.hh:222
Traits::template Codim< codimension >::EntitySeed EntitySeed
type of corresponding entity seed
Definition: entity.hh:121
bool equals(const EntityBase &other) const
compare two entities
Definition: entity.hh:209
HostGrid::template Codim< codimension >::EntityPointer HostEntityPointer
type of corresponding host entity pointer
Definition: entity.hh:118
HostGrid::template Codim< codimension >::Entity HostEntity
type of corresponding host entity
Definition: entity.hh:116
Traits::ctype ctype
coordinate type of the grid
Definition: entity.hh:101
Traits::template Codim< codimension >::Geometry Geometry
type of corresponding geometry
Definition: entity.hh:104
HostGrid::template Codim< 0 >::Entity HostElement
type of host elements, i.e., of host entities of codimension 0
Definition: entity.hh:124
Geometry geometry() const
Definition: entity.hh:253
void initialize(const HostEntity &hostEntity)
initiliaze an entity
Definition: entity.hh:283
EntitySeed seed() const
return EntitySeed of host grid entity
Definition: entity.hh:264
HostIdSet::IdType id(const HostIdSet &idSet) const
obtain the entity's id from a host IdSet
Definition: entity.hh:336
HostIndexSet::IndexType index(const HostIndexSet &indexSet) const
obtain the entity's index from a host IndexSet
Definition: entity.hh:294
PartitionType partitionType() const
obtain the partition type of this entity
Definition: entity.hh:234
int level() const
obtain the level of this entity
Definition: entity.hh:228
HostIndexSet::IndexType subIndex(const HostIndexSet &indexSet, int i, unsigned int cd) const
obtain the index of a subentity from a host IndexSet
Definition: entity.hh:310
bool isContained(const HostIndexSet &indexSet) const
check whether the entity is contained in a host index set
Definition: entity.hh:323
HostGrid::template Codim< 0 >::Entity HostElement
type of host elements, i.e., of host entities of codimension 0
Definition: entity.hh:409
int level() const
obtain the level of this entity
Definition: entity.hh:503
PartitionType partitionType() const
obtain the partition type of this entity
Definition: entity.hh:509
bool equals(const EntityBase &other) const
compare two entities
Definition: entity.hh:464
HostIndexSet::IndexType index(const HostIndexSet &indexSet) const
obtain the entity's index from a host IndexSet
Definition: entity.hh:597
HostGrid::template Codim< codimension >::Entity HostEntity
type of corresponding host entity
Definition: entity.hh:401
HostIdSet::IdType id(const HostIdSet &idSet) const
obtain the entity's id from a host IdSet
Definition: entity.hh:642
EntitySeed seed() const
return EntitySeed of host grid entity
Definition: entity.hh:559
HostIndexSet::IndexType subIndex(const HostIndexSet &indexSet, int i, unsigned int cd) const
obtain the index of a subentity from a host IndexSet
Definition: entity.hh:613
void initialize(const HostElement &hostElement)
initiliaze an entity
Definition: entity.hh:587
HostGrid::template Codim< codimension >::EntityPointer HostEntityPointer
type of corresponding host entity pointer
Definition: entity.hh:403
Geometry geometry() const
Definition: entity.hh:548
Traits::ctype ctype
coordinate type of the grid
Definition: entity.hh:386
Traits::template Codim< codimension >::EntitySeed EntitySeed
type of corresponding entity seed
Definition: entity.hh:406
bool isContained(const HostIndexSet &indexSet) const
check whether the entity is contained in a host index set
Definition: entity.hh:629
GeometryType type() const
obtain the name of the corresponding reference element
Definition: entity.hh:495
Traits::template Codim< codimension >::Geometry Geometry
type of corresponding geometry
Definition: entity.hh:389
actual implementation of the entity
Definition: entity.hh:34
DUNE-conform implementation of the entity.
Definition: entity.hh:34
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:25
Grid abstract base class.
Definition: grid.hh:388
Default exception for dummy implementations.
Definition: exceptions.hh:288
This class provides access to geometric and topological properties of a reference element.
Definition: referenceelements.hh:31
int size(int c) const
number of subentities of codimension c
Definition: referenceelements.hh:82
int subEntity(int i, int c, int ii, int cc) const
obtain number of ii-th subentity with codim cc of (i,c)
Definition: referenceelements.hh:118
const GeometryType & type(int i, int c) const
obtain the type of subentity (i,c)
Definition: referenceelements.hh:132
Different resources needed by all grid implementations.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:243
PartitionType
Attributes used in the generic overlap model.
Definition: gridenums.hh:28
@ FrontEntity
on boundary between overlap and ghost
Definition: gridenums.hh:32
@ InteriorEntity
all interior entities
Definition: gridenums.hh:29
@ BorderEntity
on boundary between interior and overlap
Definition: gridenums.hh:30
@ OverlapEntity
all entities lying in the overlap zone
Definition: gridenums.hh:31
Dune namespace.
Definition: alignment.hh:10
Fallback implementation of the nullptr object in C++0x.
Specialize with 'true' if implementation supports parallelism. (default=false)
Definition: capabilities.hh:73
Static tag representing a codimension.
Definition: dimension.hh:22
static const ReferenceElement< ctype, dim > & general(const GeometryType &type)
get general reference elements
Definition: referenceelements.hh:484
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 16, 22:29, 2024)