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);
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_;
Definition: baseauxiliarymodule.hh:37
void prefetch(const T &val, unsigned n=1)
Template function which emits prefetch instructions for a range of memory.
Definition: prefetch.hh:38
A random-access container which stores data attached to a grid's degrees of freedom in a prefetch fri...
Definition: pffgridvector.hh:48