1 #ifndef DUNE_ALU2DGRIDINDEXSETS_HH
2 #define DUNE_ALU2DGRIDINDEXSETS_HH
8 #include <dune/common/stdstreams.hh>
9 #include <dune/common/bigunsignedint.hh>
24 template<
int dim,
int dimworld, ALU2DSPACE ElementType eltype >
27 template<
int cd,
int dim,
class Gr
idImp>
28 class ALU2dGridEntity;
36 template <
int dim,
int dimworld, ALU2DSPACE ElementType eltype>
38 public IndexSet< ALU2dGrid< dim, dimworld, eltype >,
39 ALU2dGridHierarchicIndexSet< dim, dimworld, eltype >, int >
44 enum { numCodim = dim+1 };
57 int index (
const typename GridType::Traits::template Codim< codim >::Entity &entity )
const
63 template<
class Entity >
79 const int codim = dim-type.dim();
80 assert( grid_.
geomTypes(codim).size() == 1 );
81 if( type != grid_.
geomTypes(codim)[0] )
return 0;
87 int size (
int codim )
const
94 const std::vector<GeometryType>&
geomTypes (
int codim)
const
100 template <
class EntityType>
101 bool contains (
const EntityType &)
const {
return true; }
105 const GridType & grid_;
115 template <
int dim,
int dimworld, ALU2DSPACE ElementType eltype>
117 public IdSet < ALU2dGrid< dim, dimworld, eltype >,
118 ALU2dGridLocalIdSet< dim, dimworld, eltype >, int >
126 enum { codimMultiplier = 300000000 };
127 typedef typename GridType::Traits::template Codim<0>::Entity EntityCodim0Type;
132 for(
int i=0; i<dim+1; i++)
133 codimStart_[i] = i*codimMultiplier;
137 void updateIdSet() {}
148 template <
class EntityType>
149 int id (
const EntityType & ep)
const
151 enum { cd = EntityType :: codimension };
152 assert( hset_.
size(cd) < codimMultiplier );
153 return codimStart_[cd] + hset_.
index(ep);
158 int id (
const typename GridType:: template Codim<codim> :: Entity & ep)
const
161 assert( hset_.
size(codim) < codimMultiplier );
162 return codimStart_[codim] + hset_.
index(ep);
166 int subId (
const EntityCodim0Type &e,
int i,
unsigned int codim )
const
168 assert( hset_.
size( codim ) < codimMultiplier );
169 return codimStart_[ codim ] + hset_.
subIndex( e, i, codim );
174 const HierarchicIndexSetType & hset_;
177 int codimStart_[dim+1];