1#ifndef DUNE_SPGRID_GEOMETRICGRIDLEVEL_HH
2#define DUNE_SPGRID_GEOMETRICGRIDLEVEL_HH
7#include <dune/common/hybridutilities.hh>
9#include <dune/geometry/dimension.hh>
22 template<
class ct,
int dim >
72 return geometryCache< 0 >( *dirIt );
78 void buildGeometry ();
83 std::array< void *, numDirections > geometryCache_;
84 std::array< ctype, ReferenceCube::numFaces > faceVolume_;
92 template<
class ct,
int dim >
95 : refCubes_( refCubes ),
102 template<
class ct,
int dim >
104 : refCubes_( other.refCubes_ ),
111 template<
class ct,
int dim >
114 Hybrid::forEach( std::make_integer_sequence< int, dimension+1 >(), [
this ] (
auto codim ) {
118 geometryCache_[ (*dirIt).bits() ] =
nullptr;
124 template<
class ct,
int dim >
127 Hybrid::forEach( std::make_integer_sequence< int, dimension+1 >(), [
this ] (
auto codim ) {
128 typedef typename Codim< codim >::GeometryCache GeometryCache;
130 geometryCache_[ (*dirIt).bits() ] =
new GeometryCache( h_, *dirIt );
133 const ctype volume = geometryCache( Dune::Codim< 0 >() ).volume();
134 for(
int face = 0; face < ReferenceCube::numFaces; ++face )
137 SPNormalVector< ctype, dimension > normal( normalId );
138 faceVolume_[ face ] = std::abs( volume / (normal * h_) );
Definition: iostream.hh:7
Definition: direction.hh:18
unsigned long bits() const
Definition: direction.hh:41
int mydimension() const
Definition: direction.hh:38
Definition: direction.hh:157
Definition: geometricgridlevel.hh:24
const Codim< codim >::GeometryCache & geometryCache(Direction dir, Dune::Codim< codim >=Dune::Codim< codim >()) const
Definition: geometricgridlevel.hh:63
const ReferenceCube & referenceCube() const
Definition: geometricgridlevel.hh:53
ReferenceCube::GlobalVector GlobalVector
Definition: geometricgridlevel.hh:35
const Codim< 0 >::GeometryCache & geometryCache(Dune::Codim< 0 >) const
Definition: geometricgridlevel.hh:69
const GlobalVector & h() const
Definition: geometricgridlevel.hh:59
SPReferenceCubeContainer< ct, dim > ReferenceCubeContainer
Definition: geometricgridlevel.hh:28
~SPGeometricGridLevel()
Definition: geometricgridlevel.hh:112
const Codim< codim >::ReferenceCube & referenceCube() const
Definition: geometricgridlevel.hh:57
static const unsigned int numDirections
Definition: geometricgridlevel.hh:37
SPGeometricGridLevel(const ReferenceCubeContainer &refCubes, const GlobalVector &h)
Definition: geometricgridlevel.hh:94
ctype faceVolume(int i) const
Definition: geometricgridlevel.hh:75
ReferenceCube::ctype ctype
Definition: geometricgridlevel.hh:32
SPGeometricGridLevel(const This &other)
Definition: geometricgridlevel.hh:103
SPDirection< dimension > Direction
Definition: geometricgridlevel.hh:39
static const int dimension
Definition: geometricgridlevel.hh:33
ReferenceCubeContainer::ReferenceCube ReferenceCube
Definition: geometricgridlevel.hh:30
Definition: geometricgridlevel.hh:43
SPGeometryCache< ctype, dimension, codim > GeometryCache
Definition: geometricgridlevel.hh:45
ReferenceCubeContainer::template Codim< codim >::ReferenceCube ReferenceCube
Definition: geometricgridlevel.hh:44
Definition: geometrycache.hh:252
Definition: referencecube.hh:43
static const int numFaces
Definition: referencecube.hh:55
FieldVector< ctype, dimension > GlobalVector
Definition: referencecube.hh:51
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:189
const ReferenceCube & get() const
Definition: referencecube.hh:205