dune-localfunctions  2.4.1-rc2
hierarchicalsimplexp2localbasis.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
4 #define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
5 
10 #include <dune/common/fvector.hh>
11 #include <dune/common/fmatrix.hh>
12 
14 
15 namespace Dune
16 {
17  template<class D, class R, int dim>
19  {
20  public:
22  {
23  DUNE_THROW(Dune::NotImplemented,"HierarchicalSimplexP2LocalBasis not implemented for dim > 3.");
24  }
25  };
26 
41  template<class D, class R>
43  {
44  public:
46  typedef LocalBasisTraits<D,1,Dune::FieldVector<D,1>,R,1,Dune::FieldVector<R,1>,
47  Dune::FieldMatrix<R,1,1> > Traits;
48 
50  unsigned int size () const
51  {
52  return 3;
53  }
54 
56  inline void evaluateFunction (const typename Traits::DomainType& in,
57  std::vector<typename Traits::RangeType>& out) const
58  {
59  out.resize(3);
60 
61  out[0] = 1-in[0];
62  out[1] = 1-4*(in[0]-0.5)*(in[0]-0.5);
63  out[2] = in[0];
64  }
65 
67  inline void
68  evaluateJacobian (const typename Traits::DomainType& in, // position
69  std::vector<typename Traits::JacobianType>& out) const // return value
70  {
71  out.resize(3);
72 
73  out[0][0][0] = -1;
74  out[1][0][0] = 4-8*in[0];
75  out[2][0][0] = 1;
76  }
77 
80  unsigned int order () const
81  {
82  return 2;
83  }
84 
85  };
86 
106  template<class D, class R>
108  {
109  public:
111  typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,1,Dune::FieldVector<R,1>,
112  Dune::FieldMatrix<R,1,2> > Traits;
113 
115  unsigned int size () const
116  {
117  return 6;
118  }
119 
121  inline void evaluateFunction (const typename Traits::DomainType& in,
122  std::vector<typename Traits::RangeType>& out) const
123  {
124  out.resize(6);
125 
126  out[0] = 1 - in[0] - in[1];
127  out[1] = 4*in[0]*(1-in[0]-in[1]);
128  out[2] = in[0];
129  out[3] = 4*in[1]*(1-in[0]-in[1]);
130  out[4] = 4*in[0]*in[1];
131  out[5] = in[1];
132 
133  }
134 
136  inline void
137  evaluateJacobian (const typename Traits::DomainType& in, // position
138  std::vector<typename Traits::JacobianType>& out) const // return value
139  {
140  out.resize(6);
141 
142  out[0][0][0] = -1; out[0][0][1] = -1;
143  out[1][0][0] = 4-8*in[0]-4*in[1]; out[1][0][1] = -4*in[0];
144  out[2][0][0] = 1; out[2][0][1] = 0;
145  out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1];
146  out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0];
147  out[5][0][0] = 0; out[5][0][1] = 1;
148  }
149 
152  unsigned int order () const
153  {
154  return 2;
155  }
156 
157  };
158 
182  template<class D, class R>
184  {
185  public:
187  typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
188  Dune::FieldMatrix<R,1,3> > Traits;
189 
191  unsigned int size () const
192  {
193  return 10;
194  }
195 
197  void evaluateFunction (const typename Traits::DomainType& in,
198  std::vector<typename Traits::RangeType>& out) const
199  {
200  out.resize(10);
201 
202  out[0] = 1 - in[0] - in[1] - in[2];
203  out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]);
204  out[2] = in[0];
205  out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]);
206  out[4] = 4 * in[0] * in[1];
207  out[5] = in[1];
208  out[6] = 4 * in[2] * (1 - in[0] - in[1] - in[2]);
209  out[7] = 4 * in[0] * in[2];
210  out[8] = 4 * in[1] * in[2];
211  out[9] = in[2];
212  }
213 
215  void evaluateJacobian (const typename Traits::DomainType& in, // position
216  std::vector<typename Traits::JacobianType>& out) const // return value
217  {
218  out.resize(10);
219 
220  out[0][0][0] = -1; out[0][0][1] = -1; out[0][0][2] = -1;
221  out[1][0][0] = 4-8*in[0]-4*in[1]-4*in[2]; out[1][0][1] = -4*in[0]; out[1][0][2] = -4*in[0];
222  out[2][0][0] = 1; out[2][0][1] = 0; out[2][0][2] = 0;
223  out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1]-4*in[2]; out[3][0][2] = -4*in[1];
224  out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; out[4][0][2] = 0;
225  out[5][0][0] = 0; out[5][0][1] = 1; out[5][0][2] = 0;
226  out[6][0][0] = -4*in[2]; out[6][0][1] = -4*in[2]; out[6][0][2] = 4-4*in[0]-4*in[1]-8*in[2];
227  out[7][0][0] = 4*in[2]; out[7][0][1] = 0; out[7][0][2] = 4*in[0];
228  out[8][0][0] = 0; out[8][0][1] = 4*in[2]; out[8][0][2] = 4*in[1];
229  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 1;
230  }
231 
232 
235  unsigned int order () const
236  {
237  return 2;
238  }
239 
240  };
241 }
242 #endif
LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
export type traits for function signature
Definition: hierarchicalsimplexp2localbasis.hh:47
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: hierarchicalsimplexp2localbasis.hh:215
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: hierarchicalsimplexp2localbasis.hh:137
unsigned int size() const
number of shape functions
Definition: hierarchicalsimplexp2localbasis.hh:115
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition: hierarchicalsimplexp2localbasis.hh:188
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: hierarchicalsimplexp2localbasis.hh:56
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: hierarchicalsimplexp2localbasis.hh:197
unsigned int size() const
number of shape functions
Definition: hierarchicalsimplexp2localbasis.hh:50
Definition: hierarchicalsimplexp2localbasis.hh:18
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: hierarchicalsimplexp2localbasis.hh:68
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:37
unsigned int order() const
Polynomial order of the shape functions (2 in this case)
Definition: hierarchicalsimplexp2localbasis.hh:235
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
export type traits for function signature
Definition: hierarchicalsimplexp2localbasis.hh:112
unsigned int order() const
Polynomial order of the shape functions (2, in this case)
Definition: hierarchicalsimplexp2localbasis.hh:80
HierarchicalSimplexP2LocalBasis()
Definition: hierarchicalsimplexp2localbasis.hh:21
unsigned int size() const
number of shape functions
Definition: hierarchicalsimplexp2localbasis.hh:191
unsigned int order() const
Polynomial order of the shape functions (2 in this case)
Definition: hierarchicalsimplexp2localbasis.hh:152
D DomainType
domain type
Definition: localbasis.hh:49
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: hierarchicalsimplexp2localbasis.hh:121