21 #ifndef bempp_concrete_grid_hpp
22 #define bempp_concrete_grid_hpp
24 #include "../common/common.hpp"
25 #include "../common/ensure_not_null.hpp"
26 #include "grid_parameters.hpp"
27 #include "grid_factory.hpp"
28 #include "../common/shared_ptr.hpp"
31 #include "concrete_domain_index.hpp"
32 #include "concrete_entity.hpp"
33 #include "concrete_geometry_factory.hpp"
34 #include "concrete_grid_view.hpp"
35 #include "concrete_id_set.hpp"
44 template<
int codim>
class Entity;
55 template<
typename DuneGr
id>
59 DuneGrid* m_dune_grid;
60 bool m_owns_dune_grid;
78 bool leafIsBarycentric =
false) :
79 m_dune_grid(ensureNotNull(dune_grid)),
81 m_owns_dune_grid(own),
83 m_domain_index(*dune_grid,
85 dune_grid->size(0 , 0 ),
98 const std::vector<int>& domainIndices,
100 m_dune_grid(ensureNotNull(dune_grid)),
101 m_topology(topology),
102 m_owns_dune_grid(own),
104 m_domain_index(*dune_grid, domainIndices)
110 if (m_owns_dune_grid)
128 return DuneGrid::dimensionworld;
132 return DuneGrid::dimension;
136 return m_dune_grid->maxLevel();
143 virtual std::auto_ptr<GridView>
levelView(
size_t level)
const {
144 return std::auto_ptr<GridView>(
146 m_dune_grid->levelView(level), m_domain_index));
149 virtual std::auto_ptr<GridView>
leafView()
const {
150 return std::auto_ptr<GridView>(
152 m_dune_grid->leafView(), m_domain_index));
160 return std::auto_ptr<GeometryFactory>(
161 new ConcreteGeometryFactory<
162 typename DuneGrid::template Codim<0>::Geometry>());
170 return m_global_id_set;
188 if (!m_barycentricGrid.get()){
189 tbb::mutex::scoped_lock lock(m_barycentricSpaceMutex);
190 if (!m_barycentricGrid.get()){
192 arma::Mat<double> vertices;
193 arma::Mat<int> elementCorners;
194 arma::Mat<char> auxData;
195 std::vector<int> domainIndices;
197 std::auto_ptr<GridView> view = this->
leafView();
199 view->getRawElementData(vertices,
208 shared_ptr<ConcreteGrid<DuneGrid> > concreteGrid = dynamic_pointer_cast<
ConcreteGrid<DuneGrid> >(newGrid);
209 (concreteGrid->duneGrid()).globalBarycentricRefine(1);
211 m_barycentricGrid = newGrid;
215 return m_barycentricGrid;
221 if (!m_barycentricGrid.get())
236 mutable shared_ptr<Grid> m_barycentricGrid;
237 mutable tbb::mutex m_barycentricSpaceMutex;
Wrapper of a Dune surface grid of type DuneGrid.
Definition: concrete_grid.hpp:56
virtual const IdSet & globalIdSet() const
Reference to the grid's global id set.
Definition: concrete_grid.hpp:163
DuneGrid & duneGrid()
Access to the underlying Dune grid object. Use at your own risk!
Definition: concrete_grid.hpp:120
virtual GridParameters::Topology topology() const
Get the grid topology.
Definition: concrete_grid.hpp:169
virtual int dimWorld() const
Dimension of the space containing the grid.
Definition: concrete_grid.hpp:127
virtual int dim() const
Dimension of the grid.
Definition: concrete_grid.hpp:131
Grid parameters.
Definition: grid_parameters.hpp:31
two-dimensional grid composed of triangular elements, embedded in a three-dimensional space ...
Definition: grid_parameters.hpp:38
virtual std::auto_ptr< GeometryFactory > elementGeometryFactory() const
Factory able to construct empty geometries of codimension 0 compatible with this grid.
Definition: concrete_grid.hpp:155
virtual shared_ptr< Grid > barycentricGrid() const
Return a barycentrically refined grid based on the LeafView.
Definition: concrete_grid.hpp:177
virtual bool hasBarycentricGrid() const
Return true if a barycentric refinement of this grid has been created.
Definition: concrete_grid.hpp:212
static shared_ptr< Grid > createGridFromConnectivityArrays(const GridParameters ¶ms, const arma::Mat< double > &vertices, const arma::Mat< int > &elementCorners, const std::vector< int > &domainIndices=std::vector< int >())
Create a grid from connectivity arrays.
Definition: grid_factory.cpp:154
DuneGrid DuneGridType
Underlying Dune grid's type.
Definition: concrete_grid.hpp:67
Definition: concrete_domain_index.hpp:31
const DuneGrid & duneGrid() const
Read-only access to the underlying Dune grid object.
Definition: concrete_grid.hpp:115
Wrapper of a Dune grid view of type DuneGridView.
Definition: concrete_grid_view.hpp:42
Abstract wrapper of a grid.
Definition: grid.hpp:50
Abstract wrapper of an id set.
Definition: id_set.hpp:37
Topology
Grid topology
Definition: grid_parameters.hpp:33
ConcreteGrid(DuneGrid *dune_grid, GridParameters::Topology topology, const std::vector< int > &domainIndices, bool own=false)
Wrap an existing Dune grid object.
Definition: concrete_grid.hpp:96
ConcreteGrid(DuneGrid *dune_grid, GridParameters::Topology topology, bool own=false, bool leafIsBarycentric=false)
Wrap an existing Dune grid object.
Definition: concrete_grid.hpp:76
~ConcreteGrid()
Destructor.
Definition: concrete_grid.hpp:109
virtual std::auto_ptr< GridView > leafView() const
View of the leaf entities.
Definition: concrete_grid.hpp:147
virtual std::auto_ptr< GridView > levelView(size_t level) const
View of the entities on grid level level.
Definition: concrete_grid.hpp:141
virtual int maxLevel() const
Maximum level defined in this grid.
Definition: concrete_grid.hpp:135