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 PointDataLocalFunction () =
default;
59 void bind (LocalContext
const& element)
61 lfe_ = &cache_.get(element.type());
65 localValues_.resize(element.subEntities(Grid::dimension));
66 for (
unsigned int i = 0; i < element.subEntities(Grid::dimension); ++i) {
67 unsigned int idx = factory_->insertionIndex(element.template subEntity<Grid::dimension>(i));
68 DynamicVector<Field>& v = localValues_[i];
70 for (
unsigned int j = 0; j < comp_; ++j)
71 v[j] = (*values_)[comp_*idx + j];
83 auto const& lb = lfe_->localBasis();
84 lb.evaluateFunction(local, shapeValues_);
85 assert(shapeValues_.size() == localValues_.size());
87 Range y(comp_, Field(0));
88 for (std::size_t i = 0; i < shapeValues_.size(); ++i)
89 y.axpy(shapeValues_[i], localValues_[i]);
95 Factory
const* factory_ =
nullptr;
96 std::vector<Field>
const* values_ =
nullptr;
101 LFE
const* lfe_ =
nullptr;
104 std::vector<DynamicVector<Field>> localValues_;
105 mutable std::vector<typename LB::Traits::RangeType> shapeValues_;
109 class CellDataLocalFunction
112 using LocalContext = LC;
113 using Domain =
typename LC::Geometry::LocalCoordinate;
114 using Range = DynamicVector<Field>;
118 CellDataLocalFunction (Factory
const* factory, std::vector<Field>
const* values,
unsigned int comp)
124 CellDataLocalFunction () =
default;
126 void bind (LocalContext
const& element)
128 unsigned int idx = factory_->insertionIndex(element);
131 DynamicVector<Field>& v = localValue_;
134 for (
unsigned int j = 0; j < comp_; ++j)
135 v[j] = (*values_)[comp_*idx + j];
147 Factory
const* factory_ =
nullptr;
148 std::vector<Field>
const* values_ =
nullptr;
152 DynamicVector<Field> localValue_;
156 using LocalFunction = std::conditional_t< std::is_same_v<Context,PointContext>,
157 PointDataLocalFunction<LC>,
158 CellDataLocalFunction<LC>>;
161 template <
class Gr
idCreator>
164 std::vector<std::uint8_t>
const& ,
165 std::vector<std::int64_t>
const& ,
166 std::vector<std::int64_t>
const& )
167 : factory_(&creator.factory())
169 , name_(std::move(
name))
178 DUNE_THROW(Dune::NotImplemented,
"Evaluation in global coordinates not implemented.");
179 return Range(ncomps_, 0);
187 std::string
const&
name ()
const
204 return {gf.factory_, gf.values_, gf.ncomps_};
208 Factory
const* factory_;
209 std::vector<Field>
const* values_ =
nullptr;
210 std::string name_ =
"GridFunction";
211 unsigned int ncomps_ = 0;
214 EntitySet entitySet_;
DataTypes
Definition: types.hh:52
A GridFunction representing data stored on the grid vertices in a continuous manner.
Definition: continuousgridfunction.hh:16
int numComponents() const
Definition: continuousgridfunction.hh:192
Vtk::DataTypes dataType() const
Definition: continuousgridfunction.hh:197
Range(Domain) Signature
Definition: continuousgridfunction.hh:33
DynamicVector< Field > Range
Definition: continuousgridfunction.hh:32
ContinuousGridFunction(GridCreator const &creator, std::vector< Field > const &values, std::string name, unsigned int ncomps, Vtk::DataTypes dataType, std::vector< std::uint8_t > const &, std::vector< std::int64_t > const &, std::vector< std::int64_t > const &)
Definition: continuousgridfunction.hh:162
Range operator()(Domain const &global) const
Definition: continuousgridfunction.hh:176
friend LocalFunction< typename EntitySet::Element > localFunction(ContinuousGridFunction const &gf)
Definition: continuousgridfunction.hh:202
EntitySet const & entitySet() const
Definition: continuousgridfunction.hh:182
typename EntitySet::GlobalCoordinate Domain
Definition: continuousgridfunction.hh:31
ContinuousGridFunction()=default
std::string const & name() const
Definition: continuousgridfunction.hh:187
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