1 #ifndef DUNE_FEM_GRIDPART_FILTER_BASICFILTERWRAPPER_HH 2 #define DUNE_FEM_GRIDPART_FILTER_BASICFILTERWRAPPER_HH 7 #include <dune/grid/common/gridenums.hh> 27 template<
class Gr
idPartImp,
class BasicFilterImp >
55 template<
class Gr
idPartImp,
class BasicFilterImp >
74 static const int dimension = GridPartType::GridType::dimension;
76 static const int nCodim = dimension+1;
78 template<
int codim,
class Gr
idPart,
class BasicFilter >
85 static inline bool value (
const EntityType & entity,
86 const GridPart & gridPart,
87 const BasicFilter & filter,
88 std::vector< bool > & contains )
90 if( contains.size() != size_t(gridPart.indexSet().size(codim)) )
91 update< All_Partition >( gridPart, filter, contains );
94 typedef typename GridPartType::IndexSetType IndexSetType;
95 const IndexSetType & indexSet = gridPart.indexSet();
96 size_t index = size_t( indexSet.index( entity ) );
98 return contains[ index ];
102 template< PartitionIteratorType pitype >
103 static inline void update (
const GridPart & gridPart,
104 const BasicFilter & filter,
105 std::vector< bool > & contains )
108 typedef typename GridPartType::IndexSetType IndexSetType;
111 const IndexSetType & indexSet = gridPart.indexSet();
114 contains.resize( indexSet.size( codim ) );
117 std::fill( contains.begin(), contains.end(), false );
120 typedef typename GridPart::template
Codim< 0 >::template Partition< pitype >::IteratorType IteratorType;
123 IteratorType it = gridPart.template begin< 0, pitype >();
124 const IteratorType end = gridPart.template end< 0, pitype >();
125 for( ; it != end; ++it )
127 const typename IteratorType::Entity & entity = *it;
130 if( !filter.contains( entity ) )
133 const int count = entity.subEntities( codim );
134 for(
int i = 0; i < count; ++i )
136 size_t subIndex = size_t( indexSet.subIndex( entity, i , codim ) );
137 contains[ subIndex ] =
true;
143 template<
class Gr
idPart,
class BasicFilter >
144 struct Contains< 0, GridPart, BasicFilter >
150 static inline bool value (
const EntityType & entity,
152 const BasicFilter & filter,
153 std::vector< bool > & )
155 return filter.contains( entity );
174 : gridPart_( gridPart ),
180 : gridPart_( other.gridPart_ ),
181 filter_( other.filter_ )
187 ThisType & operator= (
const ThisType & other )
189 gridPart_ = other.gridPart_;
190 filter_ = other.filter_;
196 template<
class Intersection >
199 return filter().interiorIntersection( intersection );
206 return Contains< cd, GridPartType, BasicFilterType >::value( entity, gridPart_, filter_, contains_[ cd ] );
210 template<
class Entity >
213 enum { cc = Entity::codimension };
214 return contains< cc >( entity );
218 template<
class Intersection >
221 return filter().intersectionBoundary( intersection );
225 template<
class Intersection >
228 return filter().intersectionBoundaryId( intersection );
232 template<
class Intersection >
235 return filter().intersectionNeighbor( intersection );
241 for(
int codim = 0; codim < nCodim; ++codim )
242 contains_[ codim ].clear();
247 const BasicFilterType & filter ()
const 252 const GridPartType & gridPart_;
253 BasicFilterType filter_;
254 mutable std::vector< bool > contains_[ nCodim ];
261 #endif // #ifndef DUNE_FEM_GRIDPART_FILTER_BASICFILTERWRAPPER_HH
BasicFilterWrapper(const GridPartType &gridPart, const BasicFilterType &filter=BasicFilterType())
constructor
Definition: basicfilterwrapper.hh:173
Traits::EntityType EntityType
type of codim 0 entity
Definition: basicfilterwrapper.hh:170
void reset()
reset cached values
Definition: basicfilterwrapper.hh:239
int intersectionBoundaryId(const Intersection &intersection) const
returns the boundary id for an intersection
Definition: basicfilterwrapper.hh:226
Definition: basicfilterwrapper.hh:21
bool intersectionNeighbor(const Intersection &intersection) const
returns true if for an intersection a neighbor exsits
Definition: basicfilterwrapper.hh:233
BasicFilterWrapper(const ThisType &other)
copy constructor
Definition: basicfilterwrapper.hh:179
bool intersectionBoundary(const Intersection &intersection) const
returns true if an intersection is a boundary intersection
Definition: basicfilterwrapper.hh:219
bool contains(const Entity &entity) const
returns true if the given entity of the pointer in the domain
Definition: basicfilterwrapper.hh:211
Traits::template Codim< cd >::EntityType EntityType
Definition: basicfilterwrapper.hh:166
entity types
Definition: basicfilterwrapper.hh:41
bool interiorIntersection(const Intersection &intersection) const
default implementation returns contains from neighbor
Definition: basicfilterwrapper.hh:197
BasicFilterWrapper< GridPartType, BasicFilterType > FilterType
filter type
Definition: basicfilterwrapper.hh:37
GridPartImp GridPartType
grid part type
Definition: basicfilterwrapper.hh:31
BasicFilterImp BasicFilterType
export basic filter type
Definition: basicfilterwrapper.hh:34
Definition: coordinate.hh:4
Definition: basicfilterwrapper.hh:20
GridPartType::template Codim< cd >::EntityType EntityType
entity type for given codimension
Definition: basicfilterwrapper.hh:44
Traits::FilterType FilterType
type of the filter implementation
Definition: basicfilterwrapper.hh:161
Definition: basicfilterwrapper.hh:28
bool contains(const typename Codim< cd >::EntityType &entity) const
returns true if the given entity of the pointer in the domain
Definition: basicfilterwrapper.hh:204
Codim< 0 >::EntityType EntityType
entity type for codimension 0
Definition: basicfilterwrapper.hh:48
Definition: basicfilterwrapper.hh:164