1#ifndef DUNE_FEM_GRIDPART_FILTER_BASICFILTERWRAPPER_HH
2#define DUNE_FEM_GRIDPART_FILTER_BASICFILTERWRAPPER_HH
7#include <dune/grid/common/gridenums.hh>
20 template<
class >
class FilterDefaultImplementation;
21 template<
class,
class >
class BasicFilterWrapper;
27 template<
class Gr
idPartImp,
class BasicFilterImp >
55 template<
class Gr
idPartImp,
class BasicFilterImp >
60 typedef BasicFilterImp BasicFilterType;
63 typedef GridPartImp GridPartType;
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,
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 ) );
102 template< PartitionIteratorType pitype >
103 static inline void update (
const GridPart & gridPart,
104 const BasicFilter & filter,
108 typedef typename GridPartType::IndexSetType IndexSetType;
111 const IndexSetType & indexSet = gridPart.indexSet();
114 contains.resize( indexSet.size( codim ) );
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 ) );
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 ),
179 template<
typename ... Args >
181 : gridPart_( gridPart ),
187 : gridPart_( other.gridPart_ ),
188 filter_( other.filter_ )
196 gridPart_ = other.gridPart_;
197 filter_ = other.filter_;
203 template<
class Intersection >
206 return filter().interiorIntersection( intersection );
213 return Contains< cd, GridPartType, BasicFilterType >::value( entity, gridPart_, filter_, contains_[ cd ] );
217 template<
class Entity >
220 enum { cc = Entity::codimension };
221 return contains< cc >( entity );
225 template<
class Intersection >
228 return filter().intersectionBoundary( intersection );
232 template<
class Intersection >
235 return filter().intersectionBoundaryId( intersection );
239 template<
class Intersection >
242 return filter().intersectionNeighbor( intersection );
248 for(
int codim = 0; codim < nCodim; ++codim )
249 contains_[ codim ].clear();
254 const BasicFilterType & filter ()
const
259 const GridPartType & gridPart_;
260 BasicFilterType filter_;
261 mutable std::vector< bool > contains_[ nCodim ];
Definition: bindguard.hh:11
Definition: filter/filter.hh:156
Definition: basicfilterwrapper.hh:58
bool intersectionBoundary(const Intersection &intersection) const
returns true if an intersection is a boundary intersection
Definition: basicfilterwrapper.hh:226
bool interiorIntersection(const Intersection &intersection) const
default implementation returns contains from neighbor
Definition: basicfilterwrapper.hh:204
BasicFilterWrapper(const ThisType &other)
copy constructor
Definition: basicfilterwrapper.hh:186
bool contains(const typename Codim< cd >::EntityType &entity) const
returns true if the given entity of the pointer in the domain
Definition: basicfilterwrapper.hh:211
BasicFilterWrapper(const GridPartType &gridPart, const BasicFilterType &filter)
constructor
Definition: basicfilterwrapper.hh:173
Traits::FilterType FilterType
type of the filter implementation
Definition: basicfilterwrapper.hh:161
bool intersectionNeighbor(const Intersection &intersection) const
returns true if for an intersection a neighbor exsits
Definition: basicfilterwrapper.hh:240
int intersectionBoundaryId(const Intersection &intersection) const
returns the boundary id for an intersection
Definition: basicfilterwrapper.hh:233
Traits::EntityType EntityType
type of codim 0 entity
Definition: basicfilterwrapper.hh:170
void reset()
reset cached values
Definition: basicfilterwrapper.hh:246
BasicFilterWrapper(const GridPartType &gridPart, Args &&... args)
constructor
Definition: basicfilterwrapper.hh:180
bool contains(const Entity &entity) const
returns true if the given entity of the pointer in the domain
Definition: basicfilterwrapper.hh:218
ThisType & operator=(const ThisType &other)
assignment operator
Definition: basicfilterwrapper.hh:194
Definition: basicfilterwrapper.hh:29
BasicFilterImp BasicFilterType
export basic filter type
Definition: basicfilterwrapper.hh:34
GridPartImp GridPartType
grid part type
Definition: basicfilterwrapper.hh:31
BasicFilterWrapper< GridPartType, BasicFilterType > FilterType
filter type
Definition: basicfilterwrapper.hh:37
Codim< 0 >::EntityType EntityType
entity type for codimension 0
Definition: basicfilterwrapper.hh:48
entity types
Definition: basicfilterwrapper.hh:42
GridPartType::template Codim< cd >::EntityType EntityType
entity type for given codimension
Definition: basicfilterwrapper.hh:44
Definition: basicfilterwrapper.hh:165
Traits::template Codim< cd >::EntityType EntityType
Definition: basicfilterwrapper.hh:166