1#ifndef DUNE_SPGRID_REFERENCECUBE_HH
2#define DUNE_SPGRID_REFERENCECUBE_HH
9#include <dune/common/fvector.hh>
17 namespace SPReferenceCubeHelper
20 inline static unsigned int
23 assert( codim <= dimension );
26 const unsigned int n0 = (codim < dimension ?
numSubEntities( dimension-1, codim ) : 0);
41 template<
class ct,
int dim >
61 assert( (i >= 0) && (i <
count( codim )) );
62 return subId_[ codim ][ i ];
65 int count (
const int codim )
const
67 assert( (codim >= 0) && (codim <=
dimension) );
68 return subId_[ codim ].size();
78 void subId (
const unsigned int dimension,
const unsigned int codim,
82 assert( i < numSubEntities(
dimension, codim ) );
86 const unsigned int n0 = (codim <
dimension ? numSubEntities(
dimension-1, codim ) : 0);
94 const unsigned int n1 = numSubEntities(
dimension-1, codim-1 );
100 std::vector< MultiIndex > subId_[
dimension+1 ];
105 template<
class ct,
int dim >
108 for(
int codim = 0; codim <= dimension; ++codim )
111 subId_[ codim ].resize( size );
112 for(
unsigned int i = 0; i < size; ++i )
113 subId( dimension, codim, i, subId_[ codim ][ i ] );
118 template<
class ct,
int dim >
122 assert( (i >= 0) && (i < numCorners) );
125 for(
int j = 0; j < dimension; ++j )
127 corner[ j ] =
ctype( i & 1 );
134 template<
class ct,
int dim >
139 for(
int j = 0; j < dimension; ++j )
166 assert( (codim >= 0) && (codim <=
dimension) );
187 template<
class ct,
int dim >
199 template<
int codim >
207 template<
int codim >
210 return std::get< codim >( refCubes_ );
214 template<
int... codim >
215 static std::tuple< typename Codim< codim >::ReferenceCube... > makeRefCubeTable ( std::integer_sequence< int, codim... > );
217 decltype( makeRefCubeTable( std::make_integer_sequence< int, dimension+1 >() ) ) refCubes_;
Definition: iostream.hh:7
static unsigned int numSubEntities(const unsigned int dimension, const unsigned int codim)
Definition: referencecube.hh:21
Definition: referencecube.hh:43
SPReferenceCube()
Definition: referencecube.hh:106
SPMultiIndex< dimension > MultiIndex
Definition: referencecube.hh:52
static const int numFaces
Definition: referencecube.hh:55
int count(const int codim) const
Definition: referencecube.hh:65
static GlobalVector corner(int i)
return i-th corner
Definition: referencecube.hh:120
FieldVector< ctype, dimension > GlobalVector
Definition: referencecube.hh:51
static GlobalVector center()
return center
Definition: referencecube.hh:136
const MultiIndex & subId(const int codim, const int i) const
Definition: referencecube.hh:59
ct ctype
Definition: referencecube.hh:47
static const int numCorners
Definition: referencecube.hh:54
static const int dimension
Definition: referencecube.hh:49
Definition: referencecube.hh:151
SPMultiIndex< dimension > MultiIndex
Definition: referencecube.hh:160
int count(const int codim) const
Definition: referencecube.hh:164
FieldVector< ctype, 0 > GlobalVector
Definition: referencecube.hh:159
ct ctype
Definition: referencecube.hh:155
static GlobalVector corner(const int i)
Definition: referencecube.hh:170
static GlobalVector center()
Definition: referencecube.hh:176
Definition: referencecube.hh:189
const Codim< codim >::ReferenceCube & get() const
Definition: referencecube.hh:208
const ReferenceCube & get() const
Definition: referencecube.hh:205
static const int dimension
Definition: referencecube.hh:197
ReferenceCube::ctype ctype
Definition: referencecube.hh:195
SPReferenceCube< ct, dim > ReferenceCube
Definition: referencecube.hh:193
Definition: referencecube.hh:201
SPReferenceCube< ct, dim-codim > ReferenceCube
Definition: referencecube.hh:202