3#ifndef DUNE_GEOGRID_CORNERSTORAGE_HH 
    4#define DUNE_GEOGRID_CORNERSTORAGE_HH 
    8#include <dune/grid/geometrygrid/coordfunctioncaller.hh> 
   19    template< 
int mydim, 
class Gr
id, 
bool fake >
 
   23    template< 
int mydim, 
class Gr
id >
 
   24    class CoordVector< mydim, Grid, false >
 
   26      typedef typename 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 >
 
   46      CoordVector ( 
const HostEntity &hostEntity,
 
   47                    const CoordFunction &coordFunction )
 
   48        : coordFunctionCaller_( hostEntity, coordFunction )
 
   51      template< std::
size_t size >
 
   52      void calculate ( 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 ] );
 
   61      const CoordFunctionCaller coordFunctionCaller_;
 
   65    template< 
int mydim, 
class Gr
id >
 
   66    class CoordVector< mydim, Grid, true >
 
   68      typedef typename 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;
 
   84      typedef GeoGrid::CoordFunctionCaller< HostElement, typename CoordFunction::Interface >
 
   88      CoordVector ( 
const HostElement &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 ( array< Coordinate, size > (&corners) )
 const 
   99        const ReferenceElement< ctype, dimension > &refElement
 
  101        const std::size_t numCorners = refElement.size( subEntity_, codimension, dimension );
 
  102        assert( size >= numCorners );
 
  103        for( std::size_t i = 0; i < numCorners; ++i )
 
  105          const std::size_t j = refElement.subEntity( subEntity_, codimension, i, dimension );
 
  106          coordFunctionCaller_.evaluate( j, corners[ i ] );
 
  111      const CoordFunctionCaller coordFunctionCaller_;
 
  112      const unsigned int subEntity_;
 
  120    template< 
class Gr
id >
 
  121    class IntersectionCoordVector
 
  123      typedef typename remove_const< Grid >::type::Traits Traits;
 
  125      typedef typename Traits::ctype ctype;
 
  127      static const int dimension = Traits::dimension;
 
  128      static const int codimension = 1;
 
  129      static const int mydimension = dimension-codimension;
 
  130      static const int dimensionworld = Traits::dimensionworld;
 
  132      typedef FieldVector< ctype, dimensionworld > Coordinate;
 
  134      typedef typename Traits::HostGrid HostGrid;
 
  136      typedef typename Traits::template Codim< 0 >::GeometryImpl ElementGeometryImpl;
 
  137      typedef typename Traits::template Codim< codimension >::LocalGeometry HostLocalGeometry;
 
  140      IntersectionCoordVector ( 
const ElementGeometryImpl &elementGeometry,
 
  141                                const HostLocalGeometry &hostLocalGeometry )
 
  142        : elementGeometry_( elementGeometry ),
 
  143          hostLocalGeometry_( hostLocalGeometry )
 
  146      template< std::
size_t size >
 
  147      void calculate ( array< Coordinate, size > (&corners) )
 const 
  149        const std::size_t numCorners = hostLocalGeometry_.corners();
 
  150        assert( size >= numCorners );
 
  151        for( std::size_t i = 0; i < numCorners; ++i )
 
  152          corners[ i ] = elementGeometry_.global( hostLocalGeometry_.corner( i ) );
 
  155      template< 
unsigned int numCorners >
 
  156      void calculate ( Coordinate (&corners)[ numCorners ] )
 const 
  158        assert( numCorners == hostLocalGeometry_.corners() );
 
  162      const ElementGeometryImpl &elementGeometry_;
 
  163      HostLocalGeometry hostLocalGeometry_;
 
  171    template< 
int mydim, 
int cdim, 
class Gr
id >
 
  174      typedef typename remove_const< Grid >::type::Traits Traits;
 
  176      typedef typename Traits::ctype ctype;
 
  179      typedef array< Coordinate, (1 << mydim) > Coords;
 
  182      typedef typename Coords::const_iterator const_iterator;
 
  184      template< 
bool fake >
 
  185      explicit CornerStorage ( 
const CoordVector< mydim, Grid, fake > &coords )
 
  187        coords.calculate( coords_ );
 
  190      explicit CornerStorage ( 
const IntersectionCoordVector< Grid > &coords )
 
  192        coords.calculate( coords_ );
 
  195      const Coordinate &operator[] ( 
unsigned int i )
 const 
  200      const_iterator begin ()
 const { 
return coords_.begin(); }
 
  201      const_iterator end ()
 const { 
return coords_.end(); }
 
Fallback implementation of the std::array class (a static array)
 
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
 
Dune namespace.
Definition: alignment.hh:10
 
static const ReferenceElement< ctype, dim > & general(const GeometryType &type)
get general reference elements
Definition: referenceelements.hh:484