3 #ifndef DUNE_PDELAB_LOCALOPERATOR_L2VOLUMEFUNCTIONAL_HH
4 #define DUNE_PDELAB_LOCALOPERATOR_L2VOLUMEFUNCTIONAL_HH
8 #include <dune/common/exceptions.hh>
9 #include <dune/common/fvector.hh>
11 #include <dune/geometry/type.hh>
12 #include <dune/geometry/quadraturerules.hh>
14 #include <dune/localfunctions/common/interfaceswitch.hh>
53 template<
typename EG,
typename LFSV,
typename R>
57 typedef FiniteElementInterfaceSwitch<typename LFSV::Traits::FiniteElementType> FESwitch;
58 typedef BasisInterfaceSwitch<typename FESwitch::Basis> BasisSwitch;
60 typedef typename BasisSwitch::DomainField DF;
61 typedef typename BasisSwitch::RangeField RF;
62 typedef typename BasisSwitch::Range Range;
65 static const int dimLocal = EG::Geometry::mydimension;
68 Dune::GeometryType gt = eg.geometry().type();
69 const Dune::QuadratureRule<DF,dimLocal>& rule =
70 Dune::QuadratureRules<DF,dimLocal>::rule(gt,
quadOrder_);
73 for (
typename Dune::QuadratureRule<DF,dimLocal>::const_iterator it =
74 rule.begin(); it!=rule.end(); ++it)
77 std::vector<Range> phi(lfsv.size());
78 FESwitch::basis(lfsv.finiteElement()).
79 evaluateFunction(it->position(),phi);
82 typename F::Traits::RangeType y(0.0);
83 f_.evaluate(eg.entity(),it->position(),y);
86 RF factor = r.weight() * it->weight() * eg.geometry().integrationElement(it->position());
87 for (
size_t i=0; i<lfsv.size(); i++)
88 r.rawAccumulate(lfsv,i,y*phi[i]*factor);
A local operator that tests a function against a test function space defined on the entire grid...
Definition: l2volumefunctional.hh:36
void lambda_volume(const EG &eg, const LFSV &lfsv, R &r) const
Definition: l2volumefunctional.hh:54
L2VolumeFunctional(const F &f, unsigned int quadOrder)
Constructor.
Definition: l2volumefunctional.hh:48
Default flags for all local operators.
Definition: flags.hh:18
const F & f_
Definition: l2volumefunctional.hh:93
Definition: adaptivity.hh:27
unsigned int quadOrder_
Definition: l2volumefunctional.hh:96
Definition: l2volumefunctional.hh:41
const EG & eg
Definition: constraints.hh:280