5 #include <dune/common/dynvector.hh>
6 #include <dune/localfunctions/lagrange/lagrangelfecache.hh>
14 template <
class Gr
idType,
class FieldType,
class Context>
17 using Grid = GridType;
18 using Field = FieldType;
20 using Factory = GridFactory<Grid>;
26 using Element =
typename GridType::template Codim<0>::Entity;
32 using Range = DynamicVector<Field>;
37 class PointDataLocalFunction
40 using LFECache = LagrangeLocalFiniteElementCache<Field,Field,LC::mydimension,1>;
41 using LFE =
typename LFECache::FiniteElementType;
42 using LB =
typename LFE::Traits::LocalBasisType;
45 using LocalContext = LC;
46 using Domain =
typename LC::Geometry::LocalCoordinate;
47 using Range = DynamicVector<Field>;
51 PointDataLocalFunction (Factory
const& factory, std::vector<Field>
const& values,
unsigned int comp)
57 void bind (LocalContext
const& element)
59 lfe_ = &cache_.get(element.type());
63 localValues_.resize(element.subEntities(Grid::dimension));
64 for (
unsigned int i = 0; i < element.subEntities(Grid::dimension); ++i) {
65 unsigned int idx = factory_.insertionIndex(element.template subEntity<Grid::dimension>(i));
66 DynamicVector<Field>& v = localValues_[i];
68 for (
unsigned int j = 0; j < comp_; ++j)
69 v[j] = values_[comp_*idx + j];
81 auto const& lb = lfe_->localBasis();
82 lb.evaluateFunction(local, shapeValues_);
83 assert(shapeValues_.size() == localValues_.size());
85 Range y(comp_, Field(0));
86 for (std::size_t i = 0; i < shapeValues_.size(); ++i)
87 y.axpy(shapeValues_[i], localValues_[i]);
93 Factory
const& factory_;
94 std::vector<Field>
const& values_;
99 LFE
const* lfe_ =
nullptr;
102 std::vector<DynamicVector<Field>> localValues_;
103 mutable std::vector<typename LB::Traits::RangeType> shapeValues_;
107 class CellDataLocalFunction
110 using LocalContext = LC;
111 using Domain =
typename LC::Geometry::LocalCoordinate;
112 using Range = DynamicVector<Field>;
116 CellDataLocalFunction (Factory
const& factory, std::vector<Field>
const& values,
unsigned int comp)
122 void bind (LocalContext
const& element)
124 unsigned int idx = factory_.insertionIndex(element);
127 DynamicVector<Field>& v = localValue_;
130 for (
unsigned int j = 0; j < comp_; ++j)
131 v[j] = values_[comp_*idx + j];
143 Factory
const& factory_;
144 std::vector<Field>
const& values_;
148 DynamicVector<Field> localValue_;
152 using LocalFunction = std::conditional_t< std::is_same_v<Context,PointContext>,
153 PointDataLocalFunction<LC>,
154 CellDataLocalFunction<LC>>;
157 template <
class Gr
idCreator>
159 std::vector<std::uint8_t>
const& ,
160 std::vector<std::int64_t>
const& ,
161 std::vector<std::int64_t>
const& )
162 : factory_(creator.factory())
169 DUNE_THROW(Dune::NotImplemented,
"Evaluation in global coordinates not implemented.");
170 return Range(comp_, 0);
180 return {gf.factory_, gf.values_, gf.comp_};
184 Factory
const& factory_;
185 std::vector<Field>
const& values_;
188 EntitySet entitySet_;
Definition: datacollectorinterface.hh:9
A GridFunction representing data stored on the grid vertices in a continuous manner.
Definition: continuousgridfunction.hh:16
ContinuousGridFunction(GridCreator const &creator, std::vector< Field > const &values, unsigned int comp, std::vector< std::uint8_t > const &, std::vector< std::int64_t > const &, std::vector< std::int64_t > const &)
Definition: continuousgridfunction.hh:158
Range(Domain) Signature
Definition: continuousgridfunction.hh:33
DynamicVector< Field > Range
Definition: continuousgridfunction.hh:32
Range operator()(Domain const &global) const
Definition: continuousgridfunction.hh:167
friend LocalFunction< typename EntitySet::Element > localFunction(ContinuousGridFunction const &gf)
Definition: continuousgridfunction.hh:178
EntitySet const & entitySet() const
Definition: continuousgridfunction.hh:173
typename EntitySet::GlobalCoordinate Domain
Definition: continuousgridfunction.hh:31
Definition: continuousgridfunction.hh:24
typename Element::Geometry::GlobalCoordinate GlobalCoordinate
Definition: continuousgridfunction.hh:28
GridType Grid
Definition: continuousgridfunction.hh:25
typename Element::Geometry::LocalCoordinate LocalCoordinate
Definition: continuousgridfunction.hh:27
typename GridType::template Codim< 0 >::Entity Element
Definition: continuousgridfunction.hh:26