3#ifndef DUNE_GEOGRID_INTERSECTION_HH 
    4#define DUNE_GEOGRID_INTERSECTION_HH 
    6#include <dune/grid/geometrygrid/declaration.hh> 
    7#include <dune/grid/geometrygrid/cornerstorage.hh> 
   18    template< 
class Gr
id, 
class HostIntersection >
 
   21      typedef typename HostIntersection::Geometry HostGeometry;
 
   22      typedef typename HostIntersection::LocalGeometry HostLocalGeometry;
 
   24      typedef typename remove_const< Grid >::type::Traits Traits;
 
   27      typedef typename Traits::ctype ctype;
 
   29      static const int dimension = Traits::dimension;
 
   30      static const int dimensionworld = Traits::dimensionworld;
 
   32      typedef typename Traits::template Codim< 0 >::Entity Entity;
 
   33      typedef typename Traits::template Codim< 1 >::Geometry Geometry;
 
   34      typedef typename Traits::template Codim< 1 >::LocalGeometry LocalGeometry;
 
   36      typedef typename Traits::template Codim< 0 >::Geometry ElementGeometry;
 
   39      typedef GeoGrid::IntersectionCoordVector< Grid > CoordVector;
 
   41      typedef typename Traits::template Codim< 0 >::EntityImpl EntityImpl;
 
   43      typedef typename Traits::template Codim< 1 >::GeometryImpl GeometryImpl;
 
   44      typedef typename Traits::template Codim< 0 >::GeometryImpl ElementGeometryImpl;
 
   51      explicit Intersection ( 
const HostIntersection &hostIntersection, 
const ElementGeometryImpl &insideGeo )
 
   52        : hostIntersection_( hostIntersection )
 
   53        , insideGeo_ ( insideGeo )
 
   57      explicit Intersection ( HostIntersection&& hostIntersection, 
const ElementGeometryImpl &insideGeo )
 
   58        : hostIntersection_( 
std::move( hostIntersection ) )
 
   59        , insideGeo_ ( insideGeo )
 
   63      bool equals ( 
const Intersection &other)
 const 
   65        return hostIntersection_ == other.hostIntersection_;
 
   68      operator bool ()
 const { 
return bool( hostIntersection_ ); }
 
   70      Entity inside ()
 const 
   72        return EntityImpl( insideGeo_, hostIntersection().inside() );
 
   75      Entity outside ()
 const 
   77        return EntityImpl( grid(), hostIntersection().outside() );
 
   80      bool boundary ()
 const { 
return hostIntersection().boundary(); }
 
   82      bool conforming ()
 const { 
return hostIntersection().conforming(); }
 
   84      bool neighbor ()
 const { 
return hostIntersection().neighbor(); }
 
   86      int boundaryId ()
 const { 
return hostIntersection().boundaryId(); }
 
   88      size_t boundarySegmentIndex ()
 const 
   90        return hostIntersection().boundarySegmentIndex();
 
   93      LocalGeometry geometryInInside ()
 const 
   95        return hostIntersection().geometryInInside();
 
   98      LocalGeometry geometryInOutside ()
 const 
  100        return hostIntersection().geometryInOutside();
 
  103      Geometry geometry ()
 const 
  107          CoordVector coords( insideGeo_, geometryInInside() );
 
  108          geo_ = GeometryImpl( grid(), type(), coords );
 
  110        return Geometry( geo_ );
 
  113      GeometryType type ()
 const { 
return hostIntersection().type(); }
 
  115      int indexInInside ()
 const 
  117        return hostIntersection().indexInInside();
 
  120      int indexInOutside ()
 const 
  122        return hostIntersection().indexInOutside();
 
  125      FieldVector< ctype, dimensionworld >
 
  126      integrationOuterNormal ( 
const FieldVector< ctype, dimension-1 > &local )
 const 
  128        const ReferenceElement< ctype, dimension > &refElement
 
  132        const typename ElementGeometryImpl::JacobianInverseTransposed &jit = insideGeo_.jacobianInverseTransposed( x );
 
  135        FieldVector< ctype, dimensionworld > normal;
 
  136        jit.mv( refNormal, normal );
 
  137        normal *= jit.detInv();
 
  142      FieldVector< ctype, dimensionworld >
 
  143      outerNormal ( 
const FieldVector< ctype, dimension-1 > &local )
 const 
  145        const ReferenceElement< ctype, dimension > &refElement
 
  149        const typename ElementGeometryImpl::JacobianInverseTransposed &jit = insideGeo_.jacobianInverseTransposed( x );
 
  152        FieldVector< ctype, dimensionworld > normal;
 
  153        jit.mv( refNormal, normal );
 
  157      FieldVector< ctype, dimensionworld >
 
  158      unitOuterNormal ( 
const FieldVector< ctype, dimension-1 > &local )
 const 
  160        FieldVector< ctype, dimensionworld > normal = outerNormal( local );
 
  161        normal *= (ctype( 1 ) / normal.two_norm());
 
  165      FieldVector< ctype, dimensionworld > centerUnitOuterNormal ()
 const 
  167        const ReferenceElement< ctype, dimension-1 > &refFace
 
  169        return unitOuterNormal( refFace.position( 0, 0 ) );
 
  172      const HostIntersection &hostIntersection ()
 const 
  174        return hostIntersection_;
 
  177      const Grid &grid ()
 const { 
return insideGeo_.grid(); }
 
  180      HostIntersection hostIntersection_;
 
  181      ElementGeometryImpl insideGeo_;
 
  182      mutable GeometryImpl geo_;
 
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