dune-pdelab  2.5-dev
convectiondiffusionparameter.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PDELAB_LOCALOPERATOR_CONVECTIONDIFFUSIONPARAMETER_HH
3 #define DUNE_PDELAB_LOCALOPERATOR_CONVECTIONDIFFUSIONPARAMETER_HH
4 
5 #include<vector>
6 
7 #include<dune/common/exceptions.hh>
8 #include<dune/common/fvector.hh>
9 #include<dune/geometry/type.hh>
10 #include<dune/geometry/referenceelements.hh>
11 #include<dune/geometry/quadraturerules.hh>
16 
17 namespace Dune {
18  namespace PDELab {
19 
26  template<typename GV, typename RF>
28  {
30  typedef GV GridViewType;
31 
33  enum {
35  dimDomain = GV::dimension
36  };
37 
39  typedef typename GV::Grid::ctype DomainFieldType;
40 
42  typedef Dune::FieldVector<DomainFieldType,dimDomain> DomainType;
43 
45  typedef Dune::FieldVector<DomainFieldType,dimDomain-1> IntersectionDomainType;
46 
48  typedef RF RangeFieldType;
49 
51  typedef Dune::FieldVector<RF,GV::dimensionworld> RangeType;
52 
54  typedef Dune::FieldMatrix<RangeFieldType,dimDomain,dimDomain> PermTensorType;
55 
57  typedef typename GV::Traits::template Codim<0>::Entity ElementType;
58  typedef typename GV::Intersection IntersectionType;
59  };
60 
64  {
65  enum Type { Dirichlet=1, Neumann=-1, Outflow=-2, None=-3 }; // BC requiring constraints must be >0 if
66  // constraints assembler coming with PDELab is used
67  };
68 
84  template<typename GV, typename RF>
86  {
88 
89  public:
91 
93  typename Traits::PermTensorType
94  A (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
95  {
96  typename Traits::PermTensorType I;
97  for (std::size_t i=0; i<Traits::dimDomain; i++)
98  for (std::size_t j=0; j<Traits::dimDomain; j++)
99  I[i][j] = (i==j) ? 1 : 0;
100  return I;
101  }
102 
104  typename Traits::RangeType
105  b (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
106  {
107  typename Traits::RangeType v(0.0);
108  return v;
109  }
110 
112  typename Traits::RangeFieldType
113  c (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
114  {
115  return 0.0;
116  }
117 
119  typename Traits::RangeFieldType
120  f (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
121  {
122  return 0.0;
123  }
124 
126  BCType
127  bctype (const typename Traits::IntersectionType& is, const typename Traits::IntersectionDomainType& x) const
128  {
130  }
131 
133  typename Traits::RangeFieldType
134  g (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
135  {
136  typename Traits::DomainType xglobal = e.geometry().global(x);
137  return xglobal.two_norm();
138  }
139 
141  typename Traits::RangeFieldType
142  j (const typename Traits::IntersectionType& is, const typename Traits::IntersectionDomainType& x) const
143  {
144  return 0.0;
145  }
146 
148  typename Traits::RangeFieldType
149  o (const typename Traits::IntersectionType& is, const typename Traits::IntersectionDomainType& x) const
150  {
151  return 0.0;
152  }
153  };
154 
155 
160  template<typename T>
162  :
164  public Dune::PDELab::DirichletConstraintsParameters /*@\label{bcp:base}@*/
165  {
166  const T& t;
167 
168  public:
169 
170  ConvectionDiffusionBoundaryConditionAdapter(const typename T::Traits::GridViewType& gv_,
171  const T& t_ )
172  : t( t_ )
173  {}
174 
176  : t( t_ )
177  {}
178 
179  template<typename I>
180  bool isDirichlet(const I & ig /*@\label{bcp:name}@*/
181  , const Dune::FieldVector<typename I::ctype, I::mydimension> & coord
182  ) const
183  {
184  return( t.bctype( ig.intersection(), coord )
186  }
187 
188  template<typename I>
189  bool isNeumann(const I & ig, /*@\label{bcp:name}@*/
190  const Dune::FieldVector<typename I::ctype, I::mydimension> & coord
191  ) const
192  {
193  return !isDirichlet( ig, coord );
194  }
195 
196  };
197 
198 
199 
200 
201 
206  template<typename T>
208  : public Dune::PDELab::AnalyticGridFunctionBase<Dune::PDELab::AnalyticGridFunctionTraits
209  <typename T::Traits::GridViewType,
210  typename T::Traits::RangeFieldType,
211  T::Traits::GridViewType::dimension>,
212  ConvectionDiffusionVelocityExtensionAdapter<T> >
213  {
214  public:
215  typedef Dune::PDELab::AnalyticGridFunctionTraits<typename T::Traits::GridViewType,
216  typename T::Traits::RangeFieldType,
217  T::Traits::GridViewType::dimension> Traits;
219 
220 
222  ConvectionDiffusionVelocityExtensionAdapter (const typename Traits::GridViewType& gv_, T& t_)
223  : BaseT(gv_), gv(gv_), t(t_)
224  {}
225 
226  inline void evaluateGlobal (const typename Traits::DomainType& x,
227  typename Traits::RangeType& y) const
228  {
229  y = t.b(x);
230  }
231 
233  inline void evaluate (const typename Traits::ElementType& e,
234  const typename Traits::DomainType& x,
235  typename Traits::RangeType& y) const
236  {
237  y = t.b(e,x);
238  }
239 
240  inline const typename Traits::GridViewType& getGridView () const
241  {
242  return gv;
243  }
244 
245  inline void setTime(double time_)
246  {
247  t.setTime(time_);
248  }
249 
250  private:
251  const typename Traits::GridViewType gv;
252  T& t;
253  };
254 
255 
256 
257 
258 
263  template<typename T>
265  : public Dune::PDELab::GridFunctionBase<Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
266  typename T::Traits::RangeFieldType,
267  1,Dune::FieldVector<typename T::Traits::RangeFieldType,1> >
268  ,ConvectionDiffusionDirichletExtensionAdapter<T> >
269  {
270  public:
271  typedef Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
272  typename T::Traits::RangeFieldType,
273  1,Dune::FieldVector<typename T::Traits::RangeFieldType,1> > Traits;
274 
277  : g(g_), t(t_)
278  {}
279 
281  inline void evaluate (const typename Traits::ElementType& e,
282  const typename Traits::DomainType& x,
283  typename Traits::RangeType& y) const
284  {
285  y = t.g(e,x);
286  }
287 
288  inline const typename Traits::GridViewType& getGridView () const
289  {
290  return g;
291  }
292 
293  inline void setTime(double time_)
294  {
295  t.setTime(time_);
296  }
297 
298  private:
299  const typename Traits::GridViewType g;
300  T& t;
301  };
302 
303 
308 template<typename T>
310  : public Dune::PDELab::GridFunctionBase<Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
311  typename T::Traits::RangeFieldType,
312  T::Traits::GridViewType::dimension,Dune::FieldVector<typename T::Traits::RangeFieldType,T::Traits::GridViewType::dimension> >
313  ,ConvectionDiffusionExactGradientAdapter<T> >
314 {
315 public:
316  typedef Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
317  typename T::Traits::RangeFieldType,
318  T::Traits::GridViewType::dimension,Dune::FieldVector<typename T::Traits::RangeFieldType,T::Traits::GridViewType::dimension> > Traits;
319 
321  ConvectionDiffusionExactGradientAdapter (const typename Traits::GridViewType& g_, const T& t_) : g(g_), t(t_) {}
322 
324  inline void evaluate (const typename Traits::ElementType& e,
325  const typename Traits::DomainType& x,
326  typename Traits::RangeType& y) const
327  {
328  y = t.gradient(e,x);
329  }
330 
331  inline const typename Traits::GridViewType& getGridView () const
332  {
333  return g;
334  }
335 
336 private:
337  const typename Traits::GridViewType g;
338  const T& t;
339 };
340  }
341 }
342 
343 
344 #endif // DUNE_PDELAB_LOCALOPERATOR_CONVECTIONDIFFUSIONPARAMETER_HH
void evaluate(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Evaluate the GridFunction at given position.
Definition: convectiondiffusionparameter.hh:324
Dune::FieldMatrix< RangeFieldType, dimDomain, dimDomain > PermTensorType
permeability tensor type
Definition: convectiondiffusionparameter.hh:54
const Entity & e
Definition: localfunctionspace.hh:120
Traits::RangeFieldType o(const typename Traits::IntersectionType &is, const typename Traits::IntersectionDomainType &x) const
outflow boundary condition
Definition: convectiondiffusionparameter.hh:149
leaf of a function tree
Definition: function.hh:298
GV::Traits::template Codim< 0 >::Entity ElementType
grid types
Definition: convectiondiffusionparameter.hh:57
Traits::RangeFieldType j(const typename Traits::IntersectionType &is, const typename Traits::IntersectionDomainType &x) const
Neumann boundary condition.
Definition: convectiondiffusionparameter.hh:142
const Traits::GridViewType & getGridView() const
Definition: convectiondiffusionparameter.hh:240
function signature for analytic functions on a grid
Definition: function.hh:627
dimension of the domain
Definition: convectiondiffusionparameter.hh:35
Definition: convectiondiffusionparameter.hh:161
Traits class for convection diffusion parameters.
Definition: convectiondiffusionparameter.hh:27
Traits::RangeFieldType f(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
source term
Definition: convectiondiffusionparameter.hh:120
const Traits::GridViewType & getGridView() const
Definition: convectiondiffusionparameter.hh:331
void setTime(double time_)
Definition: convectiondiffusionparameter.hh:293
Definition: convectiondiffusionparameter.hh:264
ConvectionDiffusionVelocityExtensionAdapter(const typename Traits::GridViewType &gv_, T &t_)
constructor
Definition: convectiondiffusionparameter.hh:222
Traits::RangeType b(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
velocity field
Definition: convectiondiffusionparameter.hh:105
Dune::FieldVector< DomainFieldType, dimDomain-1 > IntersectionDomainType
domain type
Definition: convectiondiffusionparameter.hh:45
Parameter class for solving the linear convection-diffusion equation.
Definition: convectiondiffusionparameter.hh:85
const Traits::GridViewType & getGridView() const
Definition: convectiondiffusionparameter.hh:288
GV::Grid::ctype DomainFieldType
Export type for domain field.
Definition: convectiondiffusionparameter.hh:39
BCType bctype(const typename Traits::IntersectionType &is, const typename Traits::IntersectionDomainType &x) const
boundary condition type function
Definition: convectiondiffusionparameter.hh:127
Dune::PDELab::AnalyticGridFunctionBase< Traits, ConvectionDiffusionVelocityExtensionAdapter< T > > BaseT
Definition: convectiondiffusionparameter.hh:218
Traits::RangeFieldType c(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
sink term
Definition: convectiondiffusionparameter.hh:113
Dune::FieldVector< GV::Grid::ctype, GV::dimension > DomainType
domain type in dim-size coordinates
Definition: function.hh:49
Definition: convectiondiffusionparameter.hh:65
GV::Traits::template Codim< 0 >::Entity ElementType
codim 0 entity
Definition: function.hh:118
traits class holding the function signature, same as in local function
Definition: function.hh:176
void evaluate(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Evaluate the GridFunction at given position.
Definition: convectiondiffusionparameter.hh:233
ConvectionDiffusionExactGradientAdapter(const typename Traits::GridViewType &g_, const T &t_)
constructor
Definition: convectiondiffusionparameter.hh:321
ConvectionDiffusionBoundaryConditionAdapter(const typename T::Traits::GridViewType &gv_, const T &t_)
Definition: convectiondiffusionparameter.hh:170
Dune::FieldVector< RF, GV::dimensionworld > RangeType
range type
Definition: convectiondiffusionparameter.hh:51
void evaluateGlobal(const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Definition: convectiondiffusionparameter.hh:226
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
ConvectionDiffusionBoundaryConditionAdapter(const T &t_)
Definition: convectiondiffusionparameter.hh:175
void evaluate(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Evaluate the GridFunction at given position.
Definition: convectiondiffusionparameter.hh:281
bool isNeumann(const I &ig, const Dune::FieldVector< typename I::ctype, I::mydimension > &coord) const
Definition: convectiondiffusionparameter.hh:189
const IG & ig
Definition: constraints.hh:148
ConvectionDiffusionParameterTraits< GV, RF > Traits
Definition: convectiondiffusionparameter.hh:90
GV GridViewType
the grid view
Definition: convectiondiffusionparameter.hh:30
Traits::RangeFieldType g(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
Dirichlet boundary condition value.
Definition: convectiondiffusionparameter.hh:134
Definition: constraintsparameters.hh:24
Dune::FieldVector< DomainFieldType, dimDomain > DomainType
domain type
Definition: convectiondiffusionparameter.hh:42
bool isDirichlet(const I &ig, const Dune::FieldVector< typename I::ctype, I::mydimension > &coord) const
Definition: convectiondiffusionparameter.hh:180
Dune::PDELab::GridFunctionTraits< typename T::Traits::GridViewType, typename T::Traits::RangeFieldType, 1, Dune::FieldVector< typename T::Traits::RangeFieldType, 1 > > Traits
Definition: convectiondiffusionparameter.hh:273
Type
Definition: convectiondiffusionparameter.hh:65
GV GridViewType
The type of the grid view the function lives on.
Definition: function.hh:115
Dune::PDELab::GridFunctionTraits< typename T::Traits::GridViewType, typename T::Traits::RangeFieldType, T::Traits::GridViewType::dimension, Dune::FieldVector< typename T::Traits::RangeFieldType, T::Traits::GridViewType::dimension > > Traits
Definition: convectiondiffusionparameter.hh:318
an analytic grid function
Definition: function.hh:645
Dune::PDELab::AnalyticGridFunctionTraits< typename T::Traits::GridViewType, typename T::Traits::RangeFieldType, T::Traits::GridViewType::dimension > Traits
Definition: convectiondiffusionparameter.hh:217
Traits::PermTensorType A(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
tensor diffusion coefficient
Definition: convectiondiffusionparameter.hh:94
ConvectionDiffusionDirichletExtensionAdapter(const typename Traits::GridViewType &g_, T &t_)
constructor
Definition: convectiondiffusionparameter.hh:276
Definition: convectiondiffusionparameter.hh:207
RF RangeFieldType
Export type for range field.
Definition: convectiondiffusionparameter.hh:48
Class to define the boundary condition types.
Definition: convectiondiffusionparameter.hh:63
GV::Intersection IntersectionType
Definition: convectiondiffusionparameter.hh:58
Definition: constraintsparameters.hh:120
void setTime(double time_)
Definition: convectiondiffusionparameter.hh:245
Definition: convectiondiffusionparameter.hh:309