All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
indexset.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_INDEXSET_HH
4 #define DUNE_POLYHEDRALGRID_INDEXSET_HH
5 
6 #include <vector>
7 
8 #include <dune/common/typetraits.hh>
9 
10 #include <dune/grid/common/gridenums.hh>
11 #include <dune/grid/common/indexidset.hh>
12 
13 #include <dune/grid/polyhedralgrid/declaration.hh>
14 
15 namespace Dune
16 {
17 
18  // PolyhedralGridIndexSet
19  // --------------
20 
21  template< int dim, int dimworld >
23  : public IndexSet< PolyhedralGrid< dim, dimworld >, PolyhedralGridIndexSet< dim, dimworld >, int >
24  {
26 
27  protected:
29  typedef IndexSet< GridType, This, int > Base;
30 
31  typedef typename std::remove_const< GridType >::type::Traits Traits;
32 
33  public:
34  static const int dimension = Traits::dimension;
35 
36  typedef typename Base::IndexType IndexType;
37 
38  PolyhedralGridIndexSet ( const GridType& grid )
39  : grid_(&grid)
40  {
41  }
42 
43  template< class Entity >
44  IndexType index ( const Entity &entity ) const
45  {
46  return index< Entity::codimension >( entity );
47  }
48 
49  template< int cd >
50  IndexType index ( const typename Traits::template Codim< cd >::Entity &entity ) const
51  {
52  return grid().getRealImplementation(entity).index();
53  }
54 
55 #if ! DUNE_VERSION_NEWER(DUNE_GRID,2,4)
56  template< int cd >
57  IndexType index ( const typename Traits::template Codim< cd >::EntityPointer &entityPointer ) const
58  {
59  return index( *entityPointer );
60  }
61 #endif
62 
63  template< class Entity >
64  IndexType subIndex ( const Entity &entity, int i, unsigned int codim ) const
65  {
66  if( codim == 0 )
67  return index( entity );
68  else if ( codim == 1 )
69  return index( grid().getRealImplementation( entity ).template subEntity< 1 > ( i ) );
70  else if ( codim == dimension )
71  return index( grid().getRealImplementation( entity ).template subEntity< dimension > ( i ) );
72  else
73  {
74  DUNE_THROW(NotImplemented,"codimension not available");
75  return IndexType( -1 );
76  }
77  }
78 
79  IndexType size ( GeometryType type ) const
80  {
81  return grid().size( type );
82  }
83 
84  int size ( int codim ) const
85  {
86  return grid().size( codim );
87  }
88 
89  template< class Entity >
90  bool contains ( const Entity &entity ) const
91  {
92  return index(entity) >= 0 && index(entity) < size(Entity::codimension);
93  }
94 
95  const std::vector< GeometryType > &geomTypes ( int codim ) const
96  {
97  return grid().geomTypes(codim);
98  }
99 
100  const std::vector< GeometryType >& types(int codim) const
101  {
102  return grid().geomTypes(codim);
103  }
104 
105  const GridType& grid() const { assert( grid_ ); return *grid_; }
106 
107  protected:
108  const GridType *grid_;
109  };
110 
111 } // namespace Dune
112 
113 #endif // #ifndef DUNE_POLYHEDRALGRID_INDEXSET_HH
int size(int, int codim) const
obtain number of entites on a level
Definition: grid.hh:372
identical grid wrapper
Definition: declaration.hh:10
Definition: indexset.hh:22