dune-pdelab  2.0.0
linearacousticsparameter.hh
Go to the documentation of this file.
1 // -*- tab-width: 8; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PDELAB_LINEARACOUSTICPARAMETER_HH
3 #define DUNE_PDELAB_LINEARACOUSTICPARAMETER_HH
4 
5 #include<vector>
6 
7 #include<dune/common/exceptions.hh>
8 #include<dune/common/fvector.hh>
9 #include<dune/common/static_assert.hh>
10 #include<dune/geometry/type.hh>
11 #include<dune/geometry/referenceelements.hh>
12 #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::dimension> RangeType;
52 
54  typedef Dune::FieldVector<RF,GV::dimension+1> StateType;
55 
57  typedef typename GV::Traits::template Codim<0>::Entity ElementType;
58  typedef typename GV::Intersection IntersectionType;
59  };
60 
61  template<typename T>
63  : public Dune::PDELab::GridFunctionBase<Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
64  typename T::Traits::RangeFieldType,
65  T::Traits::dimDomain+1,Dune::FieldVector<typename T::Traits::RangeFieldType,T::Traits::dimDomain+1> >
66  ,LinearAcousticsInitialValueAdapter<T> >
67  {
68  public:
69  typedef Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
70  typename T::Traits::RangeFieldType,
71  T::Traits::dimDomain+1,Dune::FieldVector<typename T::Traits::RangeFieldType,T::Traits::dimDomain+1> > Traits;
72 
74  LinearAcousticsInitialValueAdapter (const typename Traits::GridViewType& g_, const T& t_) : g(g_), t(t_) {}
75 
77  inline void evaluate (const typename Traits::ElementType& e,
78  const typename Traits::DomainType& x,
79  typename Traits::RangeType& y) const
80  {
81  y = t.u0(e,x);
82  }
83 
84  inline const typename Traits::GridViewType& getGridView () const
85  {
86  return g;
87  }
88 
89  private:
90  typename Traits::GridViewType g;
91  const T& t;
92  };
93 
94  template<typename GV, typename RF>
96  {
97  public:
99 
101  : pi(3.141592653589793238462643), time(0.0)
102  {
103  }
104 
106  typename Traits::RangeFieldType
107  c (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
108  {
109  return 340.0;
110  }
111 
113  typename Traits::StateType
114  g (const typename Traits::IntersectionType& is, const typename Traits::IntersectionDomainType& x, const typename Traits::StateType& s) const
115  {
116  typename Traits::DomainType xglobal = is.geometry().global(x);
117  if (xglobal[0]<1e-6)
118  {
119  typename Traits::StateType u(0.0);
120  u[0] = s[0];
121  u[1] = 1.224*(1+0.5*sin(2*pi*1500.0*time));
122  return u;
123  }
124  if (xglobal[0]>1.0-1e-6)
125  {
126  typename Traits::StateType u(0.0);
127  return u;
128  }
129  typename Traits::StateType u(0.0);
130  u[0] = s[0];
131  u[2] = 0.0;
132  return u;
133  }
134 
136  typename Traits::StateType
137  q (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
138  {
139  typename Traits::StateType rhs(0.0);
140  return rhs;
141  }
142 
144  typename Traits::StateType
145  u0 (const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
146  {
147  typename Traits::StateType u(0.0);
148  return u;
149  }
150 
152  void setTime (RF t)
153  {
154  time = t;
155  }
156 
157  private:
158  double pi;
159  RF time;
160  };
161 
162 
163 
164  }
165 }
166 
167 #endif
Traits::RangeFieldType c(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
speed of sound
Definition: linearacousticsparameter.hh:107
void evaluate(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Evaluate the GridFunction at given position.
Definition: linearacousticsparameter.hh:77
Dune::FieldVector< DomainFieldType, dimDomain > DomainType
domain type
Definition: linearacousticsparameter.hh:42
Dune::FieldVector< DomainFieldType, dimDomain-1 > IntersectionDomainType
domain type
Definition: linearacousticsparameter.hh:45
GV::Traits::template Codim< 0 >::Entity ElementType
codim 0 entity
Definition: function.hh:118
Traits class for linear acoustics parameters.
Definition: linearacousticsparameter.hh:27
void setTime(RF t)
set time for subsequent evaluation
Definition: linearacousticsparameter.hh:152
const Traits::GridViewType & getGridView() const
Definition: linearacousticsparameter.hh:84
Dune::PDELab::GridFunctionTraits< typename T::Traits::GridViewType, typename T::Traits::RangeFieldType, T::Traits::dimDomain+1, Dune::FieldVector< typename T::Traits::RangeFieldType, T::Traits::dimDomain+1 > > Traits
Definition: linearacousticsparameter.hh:71
Traits::StateType u0(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
initial value
Definition: linearacousticsparameter.hh:145
Dune::FieldVector< GV::Grid::ctype, GV::dimension > DomainType
domain type in dim-size coordinates
Definition: function.hh:49
GV::Grid::ctype DomainFieldType
Export type for domain field.
Definition: linearacousticsparameter.hh:39
Dune::FieldVector< RF, GV::dimension > RangeType
range type
Definition: linearacousticsparameter.hh:51
LinearAcousticsInitialValueAdapter(const typename Traits::GridViewType &g_, const T &t_)
constructor
Definition: linearacousticsparameter.hh:74
Traits::StateType g(const typename Traits::IntersectionType &is, const typename Traits::IntersectionDomainType &x, const typename Traits::StateType &s) const
Dirichlet boundary condition value.
Definition: linearacousticsparameter.hh:114
leaf of a function tree
Definition: function.hh:577
Definition: linearacousticsparameter.hh:95
Dune::FieldVector< RF, GV::dimension+1 > StateType
range type
Definition: linearacousticsparameter.hh:54
GV GridViewType
the grid view
Definition: linearacousticsparameter.hh:30
Traits::StateType q(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
right hand side
Definition: linearacousticsparameter.hh:137
dimension of the domain
Definition: linearacousticsparameter.hh:35
traits class holding the function signature, same as in local function
Definition: function.hh:176
GV::Intersection IntersectionType
Definition: linearacousticsparameter.hh:58
GV GridViewType
The type of the grid view the function lives on.
Definition: function.hh:115
Definition: linearacousticsparameter.hh:62
LinearAcousticsModelProblem()
Definition: linearacousticsparameter.hh:100
const E & e
Definition: interpolate.hh:172
LinearAcousticsParameterTraits< GV, RF > Traits
Definition: linearacousticsparameter.hh:98
const std::string s
Definition: function.hh:1103
GV::Traits::template Codim< 0 >::Entity ElementType
grid types
Definition: linearacousticsparameter.hh:57
RF RangeFieldType
Export type for range field.
Definition: linearacousticsparameter.hh:48