4 #ifndef DUNE_PDELAB_POISSON_HH
5 #define DUNE_PDELAB_POISSON_HH
6 #warning "The file dune/pdelab/localoperator/poisson.hh is deprecated. Please use the ConvectionDiffusionFEM local operator from dune/pdelab/localoperator/convectiondiffusionfem.hh instead."
10 #include<dune/common/deprecated.hh>
11 #include<dune/common/exceptions.hh>
12 #include<dune/common/fvector.hh>
14 #include<dune/geometry/type.hh>
15 #include<dune/geometry/quadraturerules.hh>
17 #include <dune/localfunctions/common/interfaceswitch.hh>
44 template<
typename F,
typename B,
typename J>
52 enum { doPatternVolume =
true };
55 enum { doAlphaVolume =
true };
56 enum { doLambdaVolume =
true };
57 enum { doLambdaBoundary =
true };
63 DUNE_DEPRECATED_MSG(
"Deprecated in DUNE-PDELab 2.4, use the local operator ConvectionDiffusionFEM instead!")
64 Poisson (const F& f_, const B& bctype_, const J& j_,
unsigned int quadOrder)
65 : f(f_), bctype(bctype_), j(j_),
71 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename R>
72 void alpha_volume (
const EG&
eg,
const LFSU& lfsu,
const X& x,
const LFSV& lfsv, R& r)
const
74 laplace_.alpha_volume(eg, lfsu, x, lfsv, r);
87 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename M>
88 void jacobian_volume (
const EG&
eg,
const LFSU& lfsu,
const X& x,
const LFSV& lfsv, M & matrix)
const
90 laplace_.jacobian_volume(eg, lfsu, x, lfsv, matrix);
93 template<
typename EG,
typename LFSV,
typename R>
97 typedef FiniteElementInterfaceSwitch<
98 typename LFSV::Traits::FiniteElementType
100 typedef BasisInterfaceSwitch<
101 typename FESwitch::Basis
103 typedef typename BasisSwitch::DomainField DF;
104 typedef typename BasisSwitch::RangeField RF;
105 typedef typename BasisSwitch::Range Range;
108 static const int dimLocal = EG::Geometry::mydimension;
111 Dune::GeometryType gt = eg.geometry().type();
112 const Dune::QuadratureRule<DF,dimLocal>& rule =
113 Dune::QuadratureRules<DF,dimLocal>::rule(gt,quadOrder_);
116 for (
typename Dune::QuadratureRule<DF,dimLocal>::const_iterator it =
117 rule.begin(); it!=rule.end(); ++it)
120 std::vector<Range> phi(lfsv.size());
121 FESwitch::basis(lfsv.finiteElement()).
122 evaluateFunction(it->position(),phi);
125 typename F::Traits::RangeType y(0.0);
126 f.evaluate(eg.entity(),it->position(),y);
129 RF factor = - r.weight() * it->weight() * eg.geometry().integrationElement(it->position());
130 for (
size_t i=0; i<lfsv.size(); i++)
131 r.rawAccumulate(lfsv,i,y*phi[i]*factor);
136 template<
typename IG,
typename LFSV,
typename R>
140 typedef FiniteElementInterfaceSwitch<
141 typename LFSV::Traits::FiniteElementType
143 typedef BasisInterfaceSwitch<
144 typename FESwitch::Basis
146 typedef typename BasisSwitch::DomainField DF;
147 typedef typename BasisSwitch::DomainLocal DomainLocal;
148 typedef typename BasisSwitch::RangeField RF;
149 typedef typename BasisSwitch::Range Range;
152 static const int dimLocal = IG::Geometry::mydimension;
155 Dune::GeometryType gtface = ig.geometryInInside().type();
156 const Dune::QuadratureRule<DF,dimLocal>& rule =
157 Dune::QuadratureRules<DF,dimLocal>::rule(gtface,quadOrder_);
160 for (
typename Dune::QuadratureRule<DF,dimLocal>::const_iterator it =
161 rule.begin(); it!=rule.end(); ++it)
165 if( !bctype.isNeumann( ig,it->position() ) )
169 const DomainLocal& local =
170 ig.geometryInInside().global(it->position());
173 std::vector<Range> phi(lfsv.size());
174 FESwitch::basis(lfsv.finiteElement()).evaluateFunction(local,phi);
177 typename J::Traits::RangeType y(0.0);
178 j.evaluate(*(ig.inside()),local,y);
181 RF factor = r.weight() * it->weight()*ig.geometry().integrationElement(it->position());
182 for (
size_t i=0; i<lfsv.size(); i++)
183 r.rawAccumulate(lfsv,i,y*phi[i]*factor);
215 template<
typename Time,
typename F,
typename B,
typename J>
232 : Base(f_, bctype_, j_, quadOrder)
243 IDefault::setTime(t);
F & f
Definition: poisson.hh:225
const F & f
Definition: poisson.hh:188
J & j
Definition: poisson.hh:227
InstationaryPoisson(F &f_, B &bctype_, J &j_, unsigned int quadOrder)
construct InstationaryPoisson
Definition: poisson.hh:231
Implement jacobian_apply_volume() based on alpha_volume()
Definition: defaultimp.hh:321
Laplace laplace_
Definition: poisson.hh:193
void setTime(Time t)
set the time for subsequent evaluation on the parameter functions
Definition: poisson.hh:239
B & bctype
Definition: poisson.hh:226
const IG & ig
Definition: constraints.hh:147
void jacobian_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &matrix) const
Compute the Laplace stiffness matrix for the element given in 'eg'.
Definition: poisson.hh:88
Default flags for all local operators.
Definition: flags.hh:18
sparsity pattern generator
Definition: pattern.hh:13
void lambda_boundary(const IG &ig, const LFSV &lfsv, R &r) const
Definition: poisson.hh:137
Definition: poisson.hh:45
void lambda_volume(const EG &eg, const LFSV &lfsv, R &r) const
Definition: poisson.hh:94
Definition: convectiondiffusionfem.hh:39
a local operator for solving the Poisson equation in instationary problems
Definition: poisson.hh:216
unsigned int quadOrder_
Definition: poisson.hh:196
Definition: adaptivity.hh:27
const J & j
Definition: poisson.hh:190
Definition: laplace.hh:36
const EG & eg
Definition: constraints.hh:280
void alpha_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition: poisson.hh:72
Default class for additional methods in instationary local operators.
Definition: idefault.hh:89
const B & bctype
Definition: poisson.hh:189