1#ifndef DUNE_FEM_GRIDPART_ENTITYSEARCH_HH
2#define DUNE_FEM_GRIDPART_ENTITYSEARCH_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>
23 template<
class Gr
idPart,
int codim, PartitionIteratorType partition >
28 static const int dimension = GridPart::dimension;
29 static const int dimensionworld = GridPart::dimensionworld;
30 static const int codimension = codim;
31 static const int mydimension = dimension - codimension;
33 typedef typename GridPart::template Codim< codimension >::GeometryType GeometryType;
34 typedef typename GridPart::template Codim< codimension >::template Partition< partition >::IteratorType IteratorType;
36 typedef typename GeometryType::ctype ctype;
37 typedef typename GeometryType::LocalCoordinate LocalCoordinateType;
42 typedef typename GridPart::template Codim< codimension >::EntityType
EntityType;
47 : gridPart_( gridPart )
52 const auto end = gridPart_.template end< codimension, partition >();
53 for(
auto it = gridPart_.template begin< codimension, partition >(); it != end; ++it )
55 const auto& entity = *it;
56 const auto geo = entity.geometry();
57 const auto z = geo.local( x );
58 if( (mydimension < dimensionworld) && ((geo.global( z ) - x).two_norm() > 1e-8 ) )
61 if( referenceElement<ctype,mydimension>( geo.type() ).checkInside( z ) )
64 DUNE_THROW( GridError,
"Coordinate " << x <<
" is outside the grid." );
76 template<
class Gr
idPart,
int codim, PartitionIteratorType partition >
91 template<
class Gr
idPart, PartitionIteratorType partition >
96 static const int dimension = GridPart::dimension;
97 static const int dimensionworld = GridPart::dimensionworld;
98 static const int codimension = 0;
99 static const int mydimension = dimension - codimension;
101 typedef typename GridPart::template Codim< codimension >::GeometryType GeometryType;
106 typedef typename GridPart::template Codim< codimension >::EntityType
EntityType;
111 : hierarchicSearch_( gridPart.grid(), gridPart.indexSet() )
116 return hierarchicSearch_.template findEntity< partition >( x );
120 Dune::HierarchicSearch< typename GridPartType::GridType, typename GridPartType::IndexSetType > hierarchicSearch_;
128 template<
class Gr
idPart,
int codim = 0, PartitionIteratorType partition = All_Partition >
130 :
public std::conditional< GridPartCapabilities::hasGrid< GridPart >::v, GridEntitySearch< GridPart, codim, partition >, DefaultEntitySearch< GridPart, codim, partition > >::type
139 : BaseType( gridPart )
Definition: bindguard.hh:11
Definition: entitysearch.hh:25
EntityType operator()(const GlobalCoordinateType &x) const
Definition: entitysearch.hh:50
GridPart::template Codim< codimension >::EntityType EntityType
Definition: entitysearch.hh:42
GeometryType::GlobalCoordinate GlobalCoordinateType
Definition: entitysearch.hh:44
GridPart GridPartType
Definition: entitysearch.hh:40
DefaultEntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:46
Definition: entitysearch.hh:79
GridEntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:86
BaseType::GridPartType GridPartType
Definition: entitysearch.hh:84
Definition: entitysearch.hh:93
GeometryType::GlobalCoordinate GlobalCoordinateType
Definition: entitysearch.hh:108
GridEntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:110
GridPart GridPartType
Definition: entitysearch.hh:104
GridPart::template Codim< codimension >::EntityType EntityType
Definition: entitysearch.hh:106
Definition: entitysearch.hh:131
EntitySearch(const GridPartType &gridPart)
Definition: entitysearch.hh:138
BaseType::GridPartType GridPartType
Definition: entitysearch.hh:136