dune-pdelab  2.0.0
linearelasticityparameter.hh
Go to the documentation of this file.
1 // -*- tab-width: 8; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PDELAB_LINEARELASTICITYPARAMETER_HH
3 #define DUNE_PDELAB_LINEARELASTICITYPARAMETER_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>
17 
18 namespace Dune {
19  namespace PDELab {
20 
27  template<typename GV, typename RF>
29  {
31  typedef GV GridViewType;
32 
34  enum {
36  dimDomain = GV::dimension,
37  dimRange = GV::dimension
38  };
39 
41  typedef typename GV::Grid::ctype DomainFieldType;
42 
44  typedef Dune::FieldVector<DomainFieldType,dimDomain> DomainType;
45 
47  typedef Dune::FieldVector<DomainFieldType,dimDomain-1> IntersectionDomainType;
48 
50  typedef RF RangeFieldType;
51 
53  typedef Dune::FieldVector<RF,dimRange> RangeType;
54 
56  typedef typename GV::Traits::template Codim<0>::Entity ElementType;
57  typedef typename GV::Intersection IntersectionType;
58  };
59 
61  template<class T, class Imp>
64  {
65  public:
66  typedef T Traits;
67 
69  void
70  f (const typename Traits::ElementType& e, const typename Traits::DomainType& x,
71  typename Traits::RangeType & y) const
72  {
73  asImp().f(e,x,y);
74  }
75 
76  template<typename I>
77  bool isDirichlet(const I & ig,
78  const typename Traits::IntersectionDomainType & coord
79  ) const
80  {
81  return asImp().isDirichlet( ig, coord );
82  }
83 
85  void
86  u (const typename Traits::ElementType& e, const typename Traits::DomainType& x,
87  typename Traits::RangeType & y) const
88  {
89  asImp().g(e,x,y);
90  }
91 
92  // //! Neumann boundary condition (surface force)
93  // void
94  // g (const typename Traits::ElementType& e, const typename Traits::DomainType& x,
95  // typename Traits::RangeType & y) const
96  // {
97  // asImp().g(e,x,y);
98  // }
99 
101  typename Traits::RangeFieldType
102  lambda(const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
103  {
104  return asImp().lambda(e,x);
105  }
106 
108  typename Traits::RangeFieldType
109  mu(const typename Traits::ElementType& e, const typename Traits::DomainType& x) const
110  {
111  return asImp().mu(e,x);
112  }
113 
114  private:
115  Imp& asImp () {return static_cast<Imp &> (*this);}
116  const Imp& asImp () const {return static_cast<const Imp &>(*this);}
117  };
118 
123  template<typename T>
125  : public Dune::PDELab::GridFunctionBase<Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
126  typename T::Traits::RangeFieldType,
127  T::Traits::dimRange, typename T::Traits::RangeType >
128  ,LinearElasticityDirichletExtensionAdapter<T> >
129  {
130  public:
131  typedef Dune::PDELab::GridFunctionTraits<typename T::Traits::GridViewType,
132  typename T::Traits::RangeFieldType,
133  T::Traits::dimRange, typename T::Traits::RangeType > Traits;
134 
137  : g(g_), t(t_)
138  {}
139 
141  inline void evaluate (const typename Traits::ElementType& e,
142  const typename Traits::DomainType& x,
143  typename Traits::RangeType& y) const
144  {
145  t.u(e,x,y);
146  }
147 
148  inline const typename Traits::GridViewType& getGridView () const
149  {
150  return g;
151  }
152 
153  private:
154  const typename Traits::GridViewType g;
155  T& t;
156  };
157 
158  }
159 }
160 
161 #endif
GV::Traits::template Codim< 0 >::Entity ElementType
grid types
Definition: linearelasticityparameter.hh:56
const Traits::GridViewType & getGridView() const
Definition: linearelasticityparameter.hh:148
Traits::RangeFieldType lambda(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
First Lame parameter.
Definition: linearelasticityparameter.hh:102
Traits class for linear elasticity parameters.
Definition: linearelasticityparameter.hh:28
void evaluate(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Evaluate the GridFunction at given position.
Definition: linearelasticityparameter.hh:141
GV::Traits::template Codim< 0 >::Entity ElementType
codim 0 entity
Definition: function.hh:118
void f(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
volume force term
Definition: linearelasticityparameter.hh:70
Traits::RangeFieldType mu(const typename Traits::ElementType &e, const typename Traits::DomainType &x) const
Second Lame parameter (shear modulus)
Definition: linearelasticityparameter.hh:109
bool isDirichlet(const I &ig, const typename Traits::IntersectionDomainType &coord) const
Definition: linearelasticityparameter.hh:77
Definition: common/constraintsparameters.hh:24
Definition: linearelasticityparameter.hh:37
Dune::FieldVector< GV::Grid::ctype, GV::dimension > DomainType
domain type in dim-size coordinates
Definition: function.hh:49
base class for linear elasticity parameter class
Definition: linearelasticityparameter.hh:62
Dune::PDELab::GridFunctionTraits< typename T::Traits::GridViewType, typename T::Traits::RangeFieldType, T::Traits::dimRange, typename T::Traits::RangeType > Traits
Definition: linearelasticityparameter.hh:133
Dune::FieldVector< RF, dimRange > RangeType
range type
Definition: linearelasticityparameter.hh:53
RF RangeFieldType
Export type for range field.
Definition: linearelasticityparameter.hh:50
const IG & ig
Definition: common/constraints.hh:146
leaf of a function tree
Definition: function.hh:577
GV::Grid::ctype DomainFieldType
Export type for domain field.
Definition: linearelasticityparameter.hh:41
Definition: linearelasticityparameter.hh:124
void u(const typename Traits::ElementType &e, const typename Traits::DomainType &x, typename Traits::RangeType &y) const
Dirichlet boundary condition value (displacement)
Definition: linearelasticityparameter.hh:86
traits class holding the function signature, same as in local function
Definition: function.hh:176
T Traits
Definition: linearelasticityparameter.hh:66
GV GridViewType
The type of the grid view the function lives on.
Definition: function.hh:115
GV GridViewType
the grid view
Definition: linearelasticityparameter.hh:31
Dune::FieldVector< DomainFieldType, dimDomain > DomainType
domain type
Definition: linearelasticityparameter.hh:44
Dune::FieldVector< DomainFieldType, dimDomain-1 > IntersectionDomainType
domain type
Definition: linearelasticityparameter.hh:47
const E & e
Definition: interpolate.hh:172
dimension of the domain
Definition: linearelasticityparameter.hh:36
GV::Intersection IntersectionType
Definition: linearelasticityparameter.hh:57
LinearElasticityDirichletExtensionAdapter(const typename Traits::GridViewType &g_, T &t_)
constructor
Definition: linearelasticityparameter.hh:136