4#ifndef DUNE_GRID_HIERARCHICSEARCH_HH
5#define DUNE_GRID_HIERARCHICSEARCH_HH
23#include <dune/grid/common/gridenums.hh>
31 template<
class Gr
id,
class IS>
52 static std::string formatEntityInformation (
const Entity &e ) {
54 std::ostringstream info;
55 info <<
"level=" << e.level() <<
" "
56 <<
"partition=" << e.partitionType() <<
" "
57 <<
"center=(" << geo.center() <<
") "
58 <<
"corners=[(" << geo.corner(0) <<
")";
59 for(
int i = 1; i < geo.corners(); ++i)
60 info <<
" (" << e.geometry().corner(i) <<
")";
75 Entity hFindEntity (
const Entity &entity,
83 const int childLevel = entity.level()+1 ;
85 const HierarchicIterator end = entity.hend( childLevel );
86 for( HierarchicIterator it = entity.hbegin( childLevel ); it != end; ++it )
89 const Geometry &geo = child.geometry();
91 LocalCoordinate local = geo.local(global);
95 if( indexSet_.contains( child ) )
96 return std::move( child );
98 return hFindEntity( child, global );
101 std::ostringstream children;
102 HierarchicIterator it = entity.hbegin( childLevel );
104 children <<
"{" << formatEntityInformation(*it) <<
"}";
105 for( ++it; it != end; ++it )
106 children <<
" {" << formatEntityInformation(*it) <<
"}";
109 "internal Error: none of the children of the entity "
110 "{" << formatEntityInformation(entity) <<
"} contains "
111 "coordinate (" << global <<
"). Children are: "
112 "[" << children.str() <<
"].");
129 {
return findEntity<All_Partition>(global); }
138 template<PartitionIteratorType partition>
142 const LevelGV &gv = grid_.template levelGridView(0);
145 typedef typename LevelGV::template
Codim<0>::template Partition<partition>::Iterator LevelIterator;
153 const LevelIterator end = gv.template end<0, partition>();
154 for (LevelIterator it = gv.template begin<0, partition>(); it != end; ++it)
157 const Geometry &geo = entity.geometry();
159 LocalCoordinate local = geo.local( global );
163 if( (
int(dim) !=
int(dimw)) && ((geo.
global( local ) - global).two_norm() > 1e-8) )
167 if( indexSet_.contains( entity ) )
168 return std::move( entity );
170 return hFindEntity( entity, global );
GridImp::template Codim< cd >::Geometry Geometry
The corresponding geometry type.
Definition: entity.hh:97
Base class for Dune-Exceptions.
Definition: exceptions.hh:91
vector space out of a tensor product of fields.
Definition: fvector.hh:94
Wrapper class for geometries.
Definition: geometry.hh:66
GeometryType type() const
Return the name of the reference element. The type can be used to access the Dune::ReferenceElement.
Definition: geometry.hh:131
GlobalCoordinate global(const LocalCoordinate &local) const
Evaluate the map .
Definition: geometry.hh:165
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:18
Grid abstract base class.
Definition: grid.hh:388
GridFamily::Traits::HierarchicIterator HierarchicIterator
A type that is a model of Dune::HierarchicIterator A type of iterator that allows to examine,...
Definition: grid.hh:512
@ dimensionworld
The dimension of the world the grid lives in.
Definition: grid.hh:408
@ dimension
The dimension of the grid.
Definition: grid.hh:402
Partition< All_Partition >::LevelGridView LevelGridView
View types for All_Partition.
Definition: grid.hh:428
ct ctype
Define type used for coordinates in grid module.
Definition: grid.hh:548
Search an IndexSet for an Entity containing a given point.
Definition: hierarchicsearch.hh:33
Entity findEntity(const FieldVector< ct, dimw > &global) const
Search the IndexSet of this HierarchicSearch for an Entity containing point global.
Definition: hierarchicsearch.hh:128
Entity findEntity(const FieldVector< ct, dimw > &global) const
Search the IndexSet of this HierarchicSearch for an Entity containing point global.
Definition: hierarchicsearch.hh:139
HierarchicSearch(const Grid &g, const IS &is)
Construct a HierarchicSearch object from a Grid and an IndexSet.
Definition: hierarchicsearch.hh:119
A free function to provide the demangled class name of a given object or type as a string.
Different resources needed by all grid implementations.
A few common exception classes.
Implements a vector constructed from a given type representing a field and a compile-time given size.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:243
Dune namespace.
Definition: alignment.hh:10
std::string className(T &t)
Provide the demangled class name of a given object as a string.
Definition: classname.hh:23
Static tag representing a codimension.
Definition: dimension.hh:22
Class providing access to the singletons of the reference elements.
Definition: referenceelements.hh:479