21 #ifndef bempp_concrete_entity_decl_hpp
22 #define bempp_concrete_entity_decl_hpp
24 #include "../common/common.hpp"
27 #include "concrete_geometry.hpp"
28 #include "domain_index.hpp"
31 #include <boost/utility/enable_if.hpp>
32 #include <dune/common/static_assert.hh>
33 #include <dune/grid/common/geometry.hh>
45 template<
int codim,
typename DuneEntity>
49 "ConcreteEntity: codimension mismatch");
52 const DuneEntity* m_dune_entity;
61 void setDuneEntity(
const DuneEntity* dune_entity) {
62 m_dune_entity = dune_entity;
63 m_geometry.uninitialize();
82 m_dune_entity(dune_entity) {
90 m_dune_entity(dune_entity) {
95 return *m_dune_entity;
99 return m_dune_entity->level();
103 if (!m_geometry.isInitialized())
104 m_geometry.setDuneGeometry(m_dune_entity->geometry());
109 return m_dune_entity->type();
116 template<
typename DuneEntity>
119 dune_static_assert((
int)DuneEntity::codimension == (
int)codimension,
120 "ConcreteEntity: codimension mismatch");
123 const DuneEntity* m_dune_entity;
133 void setDuneEntity(
const DuneEntity* dune_entity) {
134 m_dune_entity = dune_entity;
140 m_dune_entity(0), m_domain_index(domain_index) {
148 m_dune_entity(dune_entity),
149 m_domain_index(domain_index) {
154 return *m_dune_entity;
158 return m_dune_entity->level();
162 m_geometry.setDuneGeometry(m_dune_entity->geometry());
167 return m_dune_entity->type();
170 virtual std::auto_ptr<EntityPointer<0> > father()
const;
173 return m_dune_entity->hasFather();
177 return m_dune_entity->isLeaf();
181 return m_dune_entity->isRegular();
184 virtual std::auto_ptr<EntityIterator<0> > sonIterator(
int maxlevel)
const;
187 return m_dune_entity->isNew();
191 return m_dune_entity->mightVanish();
195 return m_domain_index.domain(*
this);
200 return subEntityCodimNIterator<1>();
203 return subEntityCodimNIterator<2>();
206 return subEntityCodimNIterator<3>();
212 template <
int codimSub>
213 typename boost::disable_if_c<(codimSub <= DuneEntity::dimension), std::auto_ptr<EntityIterator<codimSub> > >
::type
214 subEntityCodimNIterator()
const;
216 template <
int codimSub>
217 typename boost::enable_if_c<(codimSub <= DuneEntity::dimension), std::auto_ptr<EntityIterator<codimSub> > >
::type
218 subEntityCodimNIterator()
const;
221 return subEntityCodimNCount<1>();
224 return subEntityCodimNCount<2>();
227 return subEntityCodimNCount<3>();
230 template <
int codimSub>
231 typename boost::disable_if_c<codimSub <= DuneEntity::dimension, size_t>::type
232 subEntityCodimNCount()
const {
236 template <
int codimSub>
237 typename boost::enable_if_c<codimSub <= DuneEntity::dimension, size_t>::type
238 subEntityCodimNCount()
const {
239 return m_dune_entity->template count<codimSub>();
virtual const Geometry & geometry() const
Reference to the geometry of this entity.
Definition: concrete_entity_decl.hpp:161
virtual std::auto_ptr< EntityIterator< 3 > > subEntityCodim3Iterator() const
Iterator over subentities of codimension 3.
Definition: concrete_entity_decl.hpp:205
virtual bool isRegular() const
True if the element is of regular type in red/green type refinement.
Definition: concrete_entity_decl.hpp:180
virtual bool isNew() const
True if the entity has been created during the last call to adapt().
Definition: concrete_entity_decl.hpp:186
Wrapper of a Dune geometry of type DuneGeometry.
Definition: concrete_geometry.hpp:72
virtual std::auto_ptr< EntityIterator< 2 > > subEntityCodim2Iterator() const
Iterator over subentities of codimension 2.
Definition: concrete_entity_decl.hpp:202
Wrapper of a Dune entity pointer of type DuneEntityPointer.
Definition: concrete_entity_pointer.hpp:37
Abstract wrapper of an entity of codimension codim.
Definition: entity.hpp:46
Dune::GeometryType GeometryType
Identifier of geometry type.
Definition: geometry_type.hpp:34
virtual bool hasFather() const
True if entity has a father entity which can be accessed using the father() method.
Definition: concrete_entity_decl.hpp:172
Iterator over entities referenced by a range of Dune iterators of type DuneEntityIt.
Definition: concrete_range_entity_iterator.hpp:43
virtual GeometryType type() const
Type of the reference element.
Definition: concrete_entity_decl.hpp:108
Wrapper of a Dune entity of type DuneEntity and codimension codim.
Definition: concrete_entity_decl.hpp:46
ConcreteEntity(const DomainIndex &domain_index)
Constructor of an empty entity.
Definition: concrete_entity_decl.hpp:139
ConcreteEntity(const DomainIndex &)
Constructor taking a single unused parameter – for compatibility with the specialization for codim = ...
Definition: concrete_entity_decl.hpp:74
virtual bool mightVanish() const
True if the entity might disappear during the next call to adapt().
Definition: concrete_entity_decl.hpp:190
virtual size_t subEntityCodim2Count() const
Number of subentities of codimension 1.
Definition: concrete_entity_decl.hpp:223
virtual bool isLeaf() const
True if the entity is contained in the leaf grid.
Definition: concrete_entity_decl.hpp:176
ConcreteEntity(const DuneEntity *dune_entity, const DomainIndex &)
Constructor from a pointer to DuneEntity.
Definition: concrete_entity_decl.hpp:88
virtual size_t subEntityCodim1Count() const
Number of subentities of codimension 1.
Definition: concrete_entity_decl.hpp:220
virtual size_t level() const
Entity level
Definition: concrete_entity_decl.hpp:157
ConcreteEntity()
Default constructor.
Definition: concrete_entity_decl.hpp:68
virtual int domain() const
Entity level
Definition: concrete_entity_decl.hpp:194
ConcreteEntity(const DuneEntity *dune_entity)
Constructor from a pointer to DuneEntity.
Definition: concrete_entity_decl.hpp:81
const DuneEntity & duneEntity() const
Read-only access to the underlying Dune entity object.
Definition: concrete_entity_decl.hpp:94
virtual GeometryType type() const
Type of the reference element.
Definition: concrete_entity_decl.hpp:166
virtual size_t subEntityCodim3Count() const
Number of subentities of codimension 1.
Definition: concrete_entity_decl.hpp:226
virtual const Geometry & geometry() const
Reference to the geometry of this entity.
Definition: concrete_entity_decl.hpp:102
Definition: domain_index.hpp:32
Iterator over the subentities of codimension codimSub of a given Dune entity of type DuneEntity...
Definition: concrete_subentity_iterator.hpp:38
virtual std::auto_ptr< EntityIterator< 1 > > subEntityCodim1Iterator() const
Iterator over subentities of codimension 1.
Definition: concrete_entity_decl.hpp:199
virtual size_t level() const
Entity level.
Definition: concrete_entity_decl.hpp:98
ConcreteEntity(const DuneEntity *dune_entity, const DomainIndex &domain_index)
Constructor from a pointer to DuneEntity.
Definition: concrete_entity_decl.hpp:146
const DuneEntity & duneEntity() const
Read-only access to the underlying Dune entity object.
Definition: concrete_entity_decl.hpp:153
Abstract wrapper of a geometry.
Definition: geometry.hpp:45