20 #ifndef bempp_concrete_grid_view_hpp
21 #define bempp_concrete_grid_view_hpp
23 #include "../common/common.hpp"
25 #include "grid_view.hpp"
26 #include "concrete_element_mapper.hpp"
27 #include "concrete_entity.hpp"
28 #include "concrete_index_set.hpp"
29 #include "concrete_range_entity_iterator.hpp"
30 #include "concrete_vtk_writer.hpp"
32 #include "reverse_element_mapper.hpp"
41 template<
typename DuneGr
idView>
45 DuneGridView m_dune_gv;
50 mutable bool m_reverse_element_mapper_is_up_to_date;
56 m_dune_gv(dune_gv), m_index_set(&dune_gv.
indexSet()),
57 m_element_mapper(dune_gv), m_reverse_element_mapper(*this),
58 m_reverse_element_mapper_is_up_to_date(false),
59 m_domain_index(domain_index)
74 return DuneGridView::dimensionworld;
77 virtual int dim()
const {
78 return DuneGridView::dimension;
86 return m_element_mapper;
90 return m_dune_gv.size(codim);
94 return m_dune_gv.size(type);
98 return containsEntityCodimN(e);
101 return containsEntityCodimN(e);
104 return containsEntityCodimN(e);
107 return containsEntityCodimN(e);
111 if (!m_reverse_element_mapper_is_up_to_date)
113 m_reverse_element_mapper.update();
114 m_reverse_element_mapper_is_up_to_date =
true;
116 return m_reverse_element_mapper;
119 virtual std::auto_ptr<VtkWriter>
vtkWriter(Dune::VTK::DataMode dm=Dune::VTK::conforming)
const {
125 return entityCodimNIterator<0>();
128 return entityCodimNIterator<1>();
131 return entityCodimNIterator<2>();
134 return entityCodimNIterator<3>();
138 typename boost::disable_if_c<codim <= DuneGridView::dimension, bool>::type
140 throw std::logic_error(
"GridView::containsEntity(): invalid entity codimension");
144 typename boost::enable_if_c<codim <= DuneGridView::dimension, bool>::type
145 containsEntityCodimN(
const Entity<codim>& e)
const {
146 typedef typename DuneGridView::template Codim<codim>::Entity DuneEntity;
147 typedef ConcreteEntity<codim, DuneEntity> ConcEntity;
148 const ConcEntity& ce =
dynamic_cast<const ConcEntity&
>(e);
149 return m_dune_gv.contains(ce.duneEntity());
153 typename boost::disable_if_c<codim <= DuneGridView::dimension, std::auto_ptr<EntityIterator<codim> > >::type
154 entityCodimNIterator()
const {
155 throw std::logic_error(
"GridView::entityIterator(): invalid entity codimension");
159 typename boost::enable_if_c<codim <= DuneGridView::dimension, std::auto_ptr<EntityIterator<codim> > >::type
160 entityCodimNIterator()
const {
161 typedef typename DuneGridView::template Codim<codim>::Iterator DuneIterator;
162 typedef typename DuneGridView::template Codim<codim>::EntityPointer DuneEntityPointer;
163 typedef ConcreteRangeEntityIterator<DuneIterator, DuneEntityPointer> ConcIterator;
164 typedef typename DuneGridView::Grid::LevelGridView DuneLevelGridView;
166 return std::auto_ptr<EntityIterator<codim> >(
167 new ConcIterator(m_dune_gv.template begin<codim>(),
168 m_dune_gv.template end<codim>(),
172 virtual void getRawElementDataDoubleImpl(arma::Mat<double>& vertices,
173 arma::Mat<int>& elementCorners,
174 arma::Mat<char>& auxData,
175 std::vector<int>* domainIndices)
const;
176 virtual void getRawElementDataFloatImpl(arma::Mat<float>& vertices,
177 arma::Mat<int>& elementCorners,
178 arma::Mat<char>& auxData,
179 std::vector<int>* domainIndices)
const;
181 template <
typename CoordinateType>
182 void getRawElementDataImpl(arma::Mat<CoordinateType>& vertices,
183 arma::Mat<int>& elementCorners,
184 arma::Mat<char>& auxData,
185 std::vector<int>* domainIndices)
const;
190 #include "concrete_grid_view_imp.hpp"
DuneGridView & duneGridView()
Access to the underlying Dune grid view object. Use at your own risk!
Definition: concrete_grid_view.hpp:69
virtual std::auto_ptr< EntityIterator< 0 > > entityCodim0Iterator() const
Iterator over entities of codimension 0 contained in this view.
Definition: concrete_grid_view.hpp:124
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 std::auto_ptr< EntityIterator< 1 > > entityCodim1Iterator() const
Iterator over entities of codimension 1 contained in this view.
Definition: concrete_grid_view.hpp:127
Wrapper of a Dune VTK writer for a grid view of type DuneGridView.
Definition: concrete_vtk_writer.hpp:43
virtual std::auto_ptr< EntityIterator< 2 > > entityCodim2Iterator() const
Iterator over entities of codimension 2 contained in this view.
Definition: concrete_grid_view.hpp:130
ConcreteGridView(const DuneGridView &dune_gv, const DomainIndex &domain_index)
Constructor.
Definition: concrete_grid_view.hpp:54
Abstract wrapper of an index set.
Definition: index_set.hpp:36
virtual bool containsEntity(const Entity< 2 > &e) const
True if the entity e of codimension 2 is contained in this grid view.
Definition: concrete_grid_view.hpp:103
virtual bool containsEntity(const Entity< 1 > &e) const
True if the entity e of codimension 1 is contained in this grid view.
Definition: concrete_grid_view.hpp:100
virtual std::auto_ptr< EntityIterator< 3 > > entityCodim3Iterator() const
Iterator over entities of codimension 3 contained in this view.
Definition: concrete_grid_view.hpp:133
virtual bool containsEntity(const Entity< 0 > &e) const
True if the entity e of codimension 0 is contained in this grid view.
Definition: concrete_grid_view.hpp:97
Wrapper of a Dune grid view of type DuneGridView.
Definition: concrete_grid_view.hpp:42
Mapping from codim-0 entity indices to entity pointers.
Definition: reverse_element_mapper.hpp:37
An injective mapping from the full set of codimension-0 entities ("elements") of a grid to the intege...
Definition: concrete_element_mapper.hpp:37
const DuneGridView & duneGridView() const
Read-only access to the underlying Dune grid view object.
Definition: concrete_grid_view.hpp:64
Abstract wrapper of a grid view.
Definition: grid_view.hpp:48
virtual const ReverseElementMapper & reverseElementMapper() const
Mapping from codim-0 entity index to entity pointer.
Definition: concrete_grid_view.hpp:110
virtual bool containsEntity(const Entity< 3 > &e) const
True if the entity e of codimension 3 is contained in this grid view.
Definition: concrete_grid_view.hpp:106
virtual std::auto_ptr< VtkWriter > vtkWriter(Dune::VTK::DataMode dm=Dune::VTK::conforming) const
Create a VtkWriter for this grid view.
Definition: concrete_grid_view.hpp:119
virtual const IndexSet & indexSet() const
The index set.
Definition: concrete_grid_view.hpp:81
Definition: domain_index.hpp:32
virtual const Mapper & elementMapper() const
The element mapper.
Definition: concrete_grid_view.hpp:85
virtual size_t entityCount(const GeometryType &type) const
Number of entities with geometry type type.
Definition: concrete_grid_view.hpp:93
virtual size_t entityCount(int codim) const
Number of entities with codimension codim.
Definition: concrete_grid_view.hpp:89
Wrapper of the index set specific to a Dune grid view class DuneGridView.
Definition: concrete_index_set.hpp:45
virtual int dimWorld() const
Dimension of the space containing the grid.
Definition: concrete_grid_view.hpp:73
virtual int dim() const
Dimension of the grid.
Definition: concrete_grid_view.hpp:77
Abstract wrapper of an entity of codimension 0.
Definition: entity.hpp:81
Abstract mapper class.
Definition: mapper.hpp:39