3 #ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
4 #define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
10 #include <dune/common/fvector.hh>
11 #include <dune/common/fmatrix.hh>
17 template<
class D,
class R,
int dim>
23 DUNE_THROW(Dune::NotImplemented,
"HierarchicalSimplexP2LocalBasis not implemented for dim > 3.");
41 template<
class D,
class R>
50 unsigned int size ()
const
57 std::vector<typename Traits::RangeType>& out)
const
62 out[1] = 1-4*(in[0]-0.5)*(in[0]-0.5);
69 std::vector<typename Traits::JacobianType>& out)
const
74 out[1][0][0] = 4-8*in[0];
80 unsigned int order ()
const
106 template<
class D,
class R>
115 unsigned int size ()
const
122 std::vector<typename Traits::RangeType>& out)
const
126 out[0] = 1 - in[0] - in[1];
127 out[1] = 4*in[0]*(1-in[0]-in[1]);
129 out[3] = 4*in[1]*(1-in[0]-in[1]);
130 out[4] = 4*in[0]*in[1];
138 std::vector<typename Traits::JacobianType>& out)
const
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;
152 unsigned int order ()
const
182 template<
class D,
class R>
191 unsigned int size ()
const
198 std::vector<typename Traits::RangeType>& out)
const
202 out[0] = 1 - in[0] - in[1] - in[2];
203 out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]);
205 out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]);
206 out[4] = 4 * in[0] * 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];
216 std::vector<typename Traits::JacobianType>& out)
const
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;
235 unsigned int order ()
const