21 #include "../common/common.hpp"
22 #include "../common/acc.hpp"
24 #include "concrete_grid_view.hpp"
29 template <
typename DuneGr
idView>
30 void ConcreteGridView<DuneGridView>::getRawElementDataDoubleImpl(
31 arma::Mat<double>& vertices,
32 arma::Mat<int>& elementCorners,
33 arma::Mat<char>& auxData,
34 std::vector<int>* domainIndices)
const
36 getRawElementDataImpl(vertices, elementCorners, auxData, domainIndices);
39 template <
typename DuneGr
idView>
40 void ConcreteGridView<DuneGridView>::getRawElementDataFloatImpl(arma::Mat<float>& vertices,
41 arma::Mat<int>& elementCorners,
42 arma::Mat<char>& auxData,
43 std::vector<int>* domainIndices)
const
45 getRawElementDataImpl(vertices, elementCorners, auxData, domainIndices);
48 template <
typename DuneGr
idView>
49 template <
typename CoordinateType>
50 void ConcreteGridView<DuneGridView>::getRawElementDataImpl(
51 arma::Mat<CoordinateType>& vertices,
52 arma::Mat<int>& elementCorners,
53 arma::Mat<char>& auxData,
54 std::vector<int>* domainIndices)
const
56 typedef typename DuneGridView::Grid DuneGrid;
57 typedef typename DuneGridView::IndexSet DuneIndexSet;
58 const int dimGrid = DuneGrid::dimension;
59 const int dimWorld = DuneGrid::dimensionworld;
60 const int codimVertex = dimGrid;
61 const int codimElement = 0;
62 typedef Dune::LeafMultipleCodimMultipleGeomTypeMapper<DuneGrid,
63 Dune::MCMGElementLayout> DuneElementMapper;
64 typedef typename DuneGridView::template Codim<codimVertex>::Iterator
66 typedef typename DuneGridView::template Codim<codimElement>::Iterator
68 typedef typename DuneGridView::template Codim<codimVertex>::Geometry
70 typedef typename DuneGridView::template Codim<codimElement>::Geometry
72 typedef typename DuneGrid::ctype ctype;
74 const DuneIndexSet& indexSet = m_dune_gv.indexSet();
76 vertices.set_size(dimWorld, indexSet.size(codimVertex));
77 for (DuneVertexIterator it = m_dune_gv.template begin<codimVertex>();
78 it != m_dune_gv.template end<codimVertex>(); ++it)
80 size_t index = indexSet.index(*it);
81 const DuneVertexGeometry& geom = it->geometry();
82 Dune::FieldVector<ctype, dimWorld> vertex = geom.corner(0);
83 for (
int i = 0; i < dimWorld; ++i)
84 vertices(i, index) = vertex[i];
87 const int MAX_CORNER_COUNT = dimWorld == 2 ? 2 : 4;
88 DuneElementMapper elementMapper(m_dune_gv.grid());
89 const int elementCount = elementMapper.size();
90 elementCorners.set_size(MAX_CORNER_COUNT, elementCount);
91 for (DuneElementIterator it = m_dune_gv.template begin<codimElement>();
92 it != m_dune_gv.template end<codimElement>(); ++it)
94 size_t index = indexSet.index(*it);
95 const Dune::GenericReferenceElement<ctype, dimGrid>& refElement =
96 Dune::GenericReferenceElements<ctype, dimGrid>::general(it->type());
97 const int cornerCount = refElement.size(codimVertex);
98 assert(cornerCount <= MAX_CORNER_COUNT);
99 for (
int i = 0; i < cornerCount; ++i)
100 elementCorners(i, index) = indexSet.subIndex(*it, i, codimVertex);
101 for (
int i = cornerCount; i < MAX_CORNER_COUNT; ++i)
102 elementCorners(i, index) = -1;
105 auxData.set_size(0, elementCorners.n_cols);
110 domainIndices->resize(elementCount);
111 std::auto_ptr<EntityIterator<0> > it = this->entityIterator<0>();
112 const IndexSet& indexSet = this->indexSet();
113 while (!it->finished()) {
114 const Entity<0>& entity = it->entity();
115 const int index = indexSet.entityIndex(entity);
116 const int domain = entity.domain();
117 acc(*domainIndices, index) = domain;
Container::reference acc(Container &v, typename Container::size_type i)
Returns i'th element of the container v, optionally checking bounds.
Definition: acc.hpp:38