1 #ifndef DUNE_FEM_GRIDPART_ENTITYSEARCH_HH 2 #define DUNE_FEM_GRIDPART_ENTITYSEARCH_HH 4 #include <dune/common/typetraits.hh> 6 #include <dune/geometry/referenceelements.hh> 8 #include <dune/grid/common/gridenums.hh> 9 #include <dune/grid/common/exceptions.hh> 10 #include <dune/grid/utility/hierarchicsearch.hh> 24 template<
class Gr
idPart,
int codim, PartitionIteratorType partition >
29 static const int dimension = GridPart::dimension;
30 static const int dimensionworld = GridPart::dimensionworld;
31 static const int codimension = codim;
32 static const int mydimension = dimension - codimension;
34 typedef typename GridPart::template Codim< codimension >::GeometryType GeometryType;
35 typedef typename GridPart::template Codim< codimension >::template Partition< partition >::IteratorType IteratorType;
37 typedef typename GeometryType::ctype ctype;
38 typedef typename GeometryType::LocalCoordinate LocalCoordinateType;
43 typedef typename GridPart::template Codim< codimension >::EntityType
EntityType;
48 : gridPart_( gridPart )
51 EntityType
operator() (
const GlobalCoordinateType &x )
const 53 const IteratorType end = gridPart_.template end< codimension, partition >();
54 for( IteratorType it = gridPart_.template begin< codimension, partition >(); it != end; ++it )
56 const EntityType &entity = *it;
57 const GeometryType geo = entity.geometry();
59 const LocalCoordinateType &z = geo.local( x );
60 if( (mydimension < dimensionworld) && ((geo.global( z ) - x).two_norm() > 1e-8 ) )
63 if( ReferenceElements< ctype, mydimension >::general( geo.type() ).checkInside( z ) )
66 DUNE_THROW( GridError,
"Coordinate " << x <<
" is outside the grid." );
70 const GridPartType &gridPart_;
78 template<
class Gr
idPart,
int codim, PartitionIteratorType partition >
89 : BaseType( gridPart )
93 template<
class Gr
idPart, PartitionIteratorType partition >
98 static const int dimension = GridPart::dimension;
99 static const int dimensionworld = GridPart::dimensionworld;
100 static const int codimension = 0;
101 static const int mydimension = dimension - codimension;
103 typedef typename GridPart::template Codim< codimension >::GeometryType GeometryType;
108 typedef typename GridPart::template Codim< codimension >::EntityType
EntityType;
113 : hierarchicSearch_( gridPart.grid(), gridPart.indexSet() )
116 EntityType
operator() (
const GlobalCoordinateType &x )
const 118 return make_entity( hierarchicSearch_.template findEntity< partition >( x ) );
122 Dune::HierarchicSearch< typename GridPartType::GridType, typename GridPartType::IndexSetType > hierarchicSearch_;
130 template<
class Gr
idPart,
int codim = 0, PartitionIteratorType partition = All_Partition >
132 :
public conditional< GridPartCapabilities::hasGrid< GridPart >::v, GridEntitySearch< GridPart, codim, partition >, DefaultEntitySearch< GridPart, codim, partition > >::type
141 : BaseType( gridPart )
149 #endif // #ifndef DUNE_FEM_GRIDPART_ENTITYSEARCH_HH EntityType operator()(const GlobalCoordinateType &x) const
Definition: entitysearch.hh:51
GridEntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:88
BaseType::GridPartType GridPartType
Definition: entitysearch.hh:138
EntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:140
GridPart::template Codim< codimension >::EntityType EntityType
Definition: entitysearch.hh:43
GridPart GridPartType
Definition: entitysearch.hh:106
GeometryType::GlobalCoordinate GlobalCoordinateType
Definition: entitysearch.hh:45
GridPart GridPartType
Definition: entitysearch.hh:41
Definition: entitysearch.hh:94
Definition: entitysearch.hh:131
Dune::EntityPointer< Grid, Implementation >::Entity make_entity(const Dune::EntityPointer< Grid, Implementation > &entityPointer)
Definition: compatibility.hh:23
Definition: entitysearch.hh:79
Definition: coordinate.hh:4
GridEntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:112
GridPart::template Codim< codimension >::EntityType EntityType
Definition: entitysearch.hh:108
DefaultEntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:47
Definition: entitysearch.hh:25
GeometryType::GlobalCoordinate GlobalCoordinateType
Definition: entitysearch.hh:110
BaseType::GridPartType GridPartType
Definition: entitysearch.hh:86