27 #ifndef EWOMS_PFF_GRID_VECTOR_HH
28 #define EWOMS_PFF_GRID_VECTOR_HH
32 #include <dune/grid/common/mcmgmapper.hh>
33 #include <dune/common/version.hh>
47 template <
class Gr
idView,
class Stencil,
class Data,
class DofMapper>
50 typedef typename GridView::template Codim<0>::Entity Element;
51 typedef Dune::MultipleCodimMultipleGeomTypeMapper<GridView, Dune::MCMGElementLayout> ElementMapper;
54 PffGridVector(
const GridView& gridView,
const DofMapper& dofMapper)
56 , elementMapper_(gridView_)
57 , dofMapper_(dofMapper)
60 template <
class DistFn>
61 void update(
const DistFn& distFn)
63 unsigned numElements = gridView_.size(0);
64 unsigned numLocalDofs = computeNumLocalDofs_();
66 elemData_.resize(numElements);
67 data_.resize(numLocalDofs);
71 Data *curElemDataPtr = &data_[0];
72 Stencil stencil(gridView_, dofMapper_);
73 auto elemIt = gridView_.template begin<0>();
74 const auto& elemEndIt = gridView_.template end<0>();
75 for (; elemIt != elemEndIt; ++elemIt) {
77 const auto& elem = *elemIt;
78 unsigned elemIdx = elementMapper_.index(elem);
79 elemData_[elemIdx] = curElemDataPtr;
82 unsigned numDof = stencil.numDof();
83 for (
unsigned localDofIdx = 0; localDofIdx < numDof; ++ localDofIdx)
84 distFn(curElemDataPtr[localDofIdx], stencil, localDofIdx);
88 curElemDataPtr += numDof;
92 void prefetch(
const Element& elem)
const
94 unsigned elemIdx = elementMapper_.index(elem);
98 Ewoms::prefetch<0>(elemData_[elemIdx]);
101 const Data&
get(
const Element& elem,
unsigned localDofIdx)
const
103 unsigned elemIdx = elementMapper_.index(elem);
104 return elemData_[elemIdx][localDofIdx];
108 unsigned computeNumLocalDofs_()
const
113 Stencil stencil(gridView_, dofMapper_);
114 auto elemIt = gridView_.template begin<0>();
115 const auto& elemEndIt = gridView_.template end<0>();
116 for (; elemIt != elemEndIt; ++elemIt) {
117 stencil.update(*elemIt);
118 result += stencil.numDof();
125 ElementMapper elementMapper_;
126 const DofMapper& dofMapper_;
127 std::vector<Data> data_;
128 std::vector<Data*> elemData_;
A random-access container which stores data attached to a grid's degrees of freedom in a prefetch fri...
Definition: pffgridvector.hh:48