3#ifndef DUNE_GEOGRID_CORNERSTORAGE_HH
4#define DUNE_GEOGRID_CORNERSTORAGE_HH
19 template<
int mydim,
class Gr
id,
bool fake >
23 template<
int mydim,
class Gr
id >
26 typedef typename std::remove_const< Grid >::type::Traits Traits;
28 typedef typename Traits::ctype ctype;
30 static const int dimension = Traits::dimension;
31 static const int mydimension = mydim;
32 static const int codimension = dimension - mydimension;
33 static const int dimensionworld = Traits::dimensionworld;
35 typedef FieldVector< ctype, dimensionworld > Coordinate;
37 typedef typename Traits::HostGrid HostGrid;
38 typedef typename Traits::CoordFunction CoordFunction;
40 typedef typename HostGrid::template Codim< codimension >::Entity HostEntity;
42 typedef GeoGrid :: CoordFunctionCaller< HostEntity, typename CoordFunction::Interface >
47 const CoordFunction &coordFunction )
48 : coordFunctionCaller_( hostEntity, coordFunction )
51 template< std::
size_t size >
52 void calculate ( std::array< Coordinate, size > (&corners) )
const
54 const std::size_t numCorners = coordFunctionCaller_.size();
55 assert( size >= numCorners );
56 for( std::size_t i = 0; i < numCorners; ++i )
57 coordFunctionCaller_.evaluate( i, corners[ i ] );
65 template<
int mydim,
class Gr
id >
68 typedef typename std::remove_const< Grid > :: type :: Traits Traits;
70 typedef typename Traits::ctype ctype;
72 static const int dimension = Traits::dimension;
73 static const int mydimension = mydim;
74 static const int codimension = dimension - mydimension;
75 static const int dimensionworld = Traits::dimensionworld;
77 typedef FieldVector< ctype, dimensionworld > Coordinate;
79 typedef typename Traits::HostGrid HostGrid;
80 typedef typename Traits::CoordFunction CoordFunction;
82 typedef typename HostGrid::template Codim< 0 >::Entity HostElement;
89 const unsigned int subEntity,
90 const CoordFunction &coordFunction )
91 : coordFunctionCaller_( hostElement, coordFunction ),
92 subEntity_( subEntity )
95 template< std::
size_t size >
96 void calculate ( std::array< Coordinate, size > (&corners) )
const
98 const GeometryType type = coordFunctionCaller_.type();
99 auto refElement = referenceElement< ctype, dimension >( type );
100 const std::size_t numCorners = refElement.size( subEntity_, codimension, dimension );
101 assert( size >= numCorners );
102 for( std::size_t i = 0; i < numCorners; ++i )
104 const std::size_t j = refElement.subEntity( subEntity_, codimension, i, dimension );
105 coordFunctionCaller_.evaluate( j, corners[ i ] );
111 const unsigned int subEntity_;
119 template<
class Gr
id >
122 typedef typename std::remove_const< Grid >::type::Traits Traits;
124 typedef typename Traits::ctype ctype;
126 static const int dimension = Traits::dimension;
127 static const int codimension = 1;
128 static const int mydimension = dimension-codimension;
129 static const int dimensionworld = Traits::dimensionworld;
131 typedef FieldVector< ctype, dimensionworld > Coordinate;
133 typedef typename Traits::HostGrid HostGrid;
135 typedef typename Traits::template Codim< 0 >::GeometryImpl ElementGeometryImpl;
136 typedef typename Traits::template Codim< codimension >::LocalGeometry HostLocalGeometry;
140 const HostLocalGeometry &hostLocalGeometry )
141 : elementGeometry_( elementGeometry ),
142 hostLocalGeometry_( hostLocalGeometry )
145 template< std::
size_t size >
146 void calculate ( std::array< Coordinate, size > (&corners) )
const
148 const std::size_t numCorners = hostLocalGeometry_.corners();
149 assert( size >= numCorners );
150 for( std::size_t i = 0; i < numCorners; ++i )
151 corners[ i ] = elementGeometry_.global( hostLocalGeometry_.corner( i ) );
154 template<
unsigned int numCorners >
155 void calculate ( Coordinate (&corners)[ numCorners ] )
const
157 assert( numCorners == hostLocalGeometry_.corners() );
161 const ElementGeometryImpl &elementGeometry_;
162 HostLocalGeometry hostLocalGeometry_;
170 template<
int mydim,
int cdim,
class Gr
id >
173 typedef typename std::remove_const< Grid >::type::Traits Traits;
175 typedef typename Traits::ctype ctype;
176 typedef FieldVector< ctype, cdim > Coordinate;
178 typedef std::array< Coordinate, (1 << mydim) > Coords;
183 template<
bool fake >
186 coords.calculate( coords_ );
Include standard header files.
Definition: agrid.hh:58
Grid abstract base class.
Definition: common/grid.hh:372
Definition: coordfunctioncaller.hh:19
Definition: cornerstorage.hh:20
CoordVector(const HostEntity &hostEntity, const CoordFunction &coordFunction)
Definition: cornerstorage.hh:46
void calculate(std::array< Coordinate, size >(&corners)) const
Definition: cornerstorage.hh:52
CoordVector(const HostElement &hostElement, const unsigned int subEntity, const CoordFunction &coordFunction)
Definition: cornerstorage.hh:88
void calculate(std::array< Coordinate, size >(&corners)) const
Definition: cornerstorage.hh:96
Definition: cornerstorage.hh:121
IntersectionCoordVector(const ElementGeometryImpl &elementGeometry, const HostLocalGeometry &hostLocalGeometry)
Definition: cornerstorage.hh:139
void calculate(Coordinate(&corners)[numCorners]) const
Definition: cornerstorage.hh:155
void calculate(std::array< Coordinate, size >(&corners)) const
Definition: cornerstorage.hh:146
Definition: cornerstorage.hh:172
Coords::const_iterator const_iterator
Definition: cornerstorage.hh:181
const_iterator begin() const
Definition: cornerstorage.hh:199
CornerStorage(const IntersectionCoordVector< Grid > &coords)
Definition: cornerstorage.hh:189
const_iterator end() const
Definition: cornerstorage.hh:200
const Coordinate & operator[](unsigned int i) const
Definition: cornerstorage.hh:194
CornerStorage(const CoordVector< mydim, Grid, fake > &coords)
Definition: cornerstorage.hh:184