1 #ifndef DUNE_FEM_DGL2PROJECTION_HH 2 #define DUNE_FEM_DGL2PROJECTION_HH 22 template <
int dummy,
bool hasLocalFunction>
25 template <
class FunctionImp,
class FunctionSpace>
28 const FunctionImp& function_;
38 function_.evaluate( local , ret );
42 template <
class FunctionImp,
class DiscreteFunctionImp>
43 static void project(
const FunctionImp& f,
44 DiscreteFunctionImp& discFunc,
48 typedef typename DiscreteFunctionImp :: DiscreteFunctionSpaceType DiscreteFunctionSpaceType;
49 typedef typename DiscreteFunctionSpaceType :: GridPartType GridPartType;
52 FunctionAdapterType af( f );
55 "DGL2projection::adapter" , f , discFunc.space().gridPart());
61 struct ProjectChooser<dummy,true>
63 template <
class FunctionImp,
class DiscreteFunctionImp>
64 static void project(
const FunctionImp& f,
65 DiscreteFunctionImp& discFunc,
80 template <
class FunctionImp,
class DiscreteFunctionImp>
81 static void project(
const FunctionImp& f, DiscreteFunctionImp& discFunc,
82 const int quadOrd = -1,
const bool communicate =
true )
84 ProjectChooser<0, Conversion<FunctionImp, HasLocalFunction> ::exists >
:: project(f,discFunc,quadOrd);
88 discFunc.communicate();
93 template <
class FunctionImp,
class DiscreteFunctionImp>
94 static void apply(
const FunctionImp& f, DiscreteFunctionImp& discFunc )
100 template <
class FunctionImp,
class DiscreteFunctionImp>
102 DiscreteFunctionImp& discFunc,
105 typedef typename DiscreteFunctionImp::DiscreteFunctionSpaceType DiscreteFunctionSpaceType;
106 typedef typename DiscreteFunctionImp::LocalFunctionType LocalFuncType;
107 typedef typename DiscreteFunctionSpaceType::GridPartType GridPartType;
108 typedef typename DiscreteFunctionSpaceType::RangeType
RangeType;
110 typedef typename FunctionImp::LocalFunctionType LocalFType;
112 const DiscreteFunctionSpaceType& space = discFunc.space();
119 const int quadOrd = (polOrd == -1) ? (2 * space.order()) : polOrd;
122 LocalMassMatrixType massMatrix( space, quadOrd );
128 typedef typename GridPartType::template Codim<0>::GeometryType Geometry;
131 std::vector< RangeType > values;
133 for(
const auto & en : space)
136 const Geometry& geo = en.geometry();
139 QuadratureType quad(en, quadOrd);
142 LocalFuncType lf = discFunc.localFunction(en);
145 const LocalFType f = func.localFunction(en);
147 const int quadNop = quad.nop();
150 values.resize( quadNop );
152 for(
int qP = 0; qP < quadNop ; ++qP)
155 quad.weight(qP) * geo.integrationElement( quad.point(qP) );
158 f.evaluate(quad[ qP ], values[ qP ] );
161 values[ qP ] *= intel;
165 lf.axpyQuadrature( quad, values );
168 massMatrix.applyInverse( en, lf );
177 #endif // #ifndef DUNE_FEM_DGL2PROJECTION_HH FunctionAdapter(const FunctionImp &f)
Definition: dgl2projection.hh:33
A vector valued function space.
Definition: functionspace.hh:16
void evaluate(const DomainType &local, RangeType &ret) const
Definition: dgl2projection.hh:35
FunctionSpaceType::RangeType RangeType
Definition: dgl2projection.hh:31
static void apply(const FunctionImp &f, DiscreteFunctionImp &discFunc)
project function to discrete space
Definition: dgl2projection.hh:94
FunctionSpace FunctionSpaceType
Definition: dgl2projection.hh:30
static void project(const FunctionImp &f, DiscreteFunctionImp &discFunc, const int quadOrd=-1, const bool communicate=true)
Definition: dgl2projection.hh:81
Definition: coordinate.hh:4
VectorSpaceTraits< DomainField, RangeField, dimD, dimR >::DomainType DomainType
Type of domain vector (using type of domain field) has a Dune::FieldVector type interface.
Definition: functionspaceinterface.hh:66
FunctionSpaceType::DomainType DomainType
Definition: dgl2projection.hh:32
Definition: dgl2projection.hh:20
GridFunctionAdapter provides local functions for a Function.
Definition: gridfunctionadapter.hh:36
static void projectFunction(const FunctionImp &func, DiscreteFunctionImp &discFunc, int polOrd=-1)
Definition: dgl2projection.hh:101
Definition: dgl2projection.hh:26
VectorSpaceTraits< DomainField, RangeField, dimD, dimR >::RangeType RangeType
Type of range vector (using type of range field) has a Dune::FieldVector type interface.
Definition: functionspaceinterface.hh:70