2 #ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
3 #define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
9 #include <dune/common/fvector.hh>
10 #include <dune/common/fmatrix.hh>
16 template<
class D,
class R,
int dim>
22 DUNE_THROW(Dune::NotImplemented,
"HierarchicalSimplexP2LocalBasis not implemented for dim > 3.");
40 template<
class D,
class R>
49 unsigned int size ()
const
56 std::vector<typename Traits::RangeType>& out)
const
62 out[2] = 1-4*(in[0]-0.5)*(in[0]-0.5);
68 std::vector<typename Traits::JacobianType>& out)
const
74 out[2][0][0] = 4-8*in[0];
79 unsigned int order ()
const
105 template<
class D,
class R>
114 unsigned int size ()
const
121 std::vector<typename Traits::RangeType>& out)
const
125 out[0] = 1 - in[0] - in[1];
126 out[1] = 4*in[0]*(1-in[0]-in[1]);
128 out[3] = 4*in[1]*(1-in[0]-in[1]);
129 out[4] = 4*in[0]*in[1];
137 std::vector<typename Traits::JacobianType>& out)
const
141 out[0][0][0] = -1; out[0][0][1] = -1;
142 out[1][0][0] = 4-8*in[0]-4*in[1]; out[1][0][1] = -4*in[0];
143 out[2][0][0] = 1; out[2][0][1] = 0;
144 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1];
145 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0];
146 out[5][0][0] = 0; out[5][0][1] = 1;
151 unsigned int order ()
const
181 template<
class D,
class R>
190 unsigned int size ()
const
197 std::vector<typename Traits::RangeType>& out)
const
201 out[0] = 1 - in[0] - in[1] - in[2];
202 out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]);
204 out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]);
205 out[4] = 4 * in[0] * in[1];
207 out[6] = 4 * in[2] * (1 - in[0] - in[1] - in[2]);
208 out[7] = 4 * in[0] * in[2];
209 out[8] = 4 * in[1] * in[2];
215 std::vector<typename Traits::JacobianType>& out)
const
219 out[0][0][0] = -1; out[0][0][1] = -1; out[0][0][2] = -1;
220 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];
221 out[2][0][0] = 1; out[2][0][1] = 0; out[2][0][2] = 0;
222 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];
223 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; out[4][0][2] = 0;
224 out[5][0][0] = 0; out[5][0][1] = 1; out[5][0][2] = 0;
225 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];
226 out[7][0][0] = 4*in[2]; out[7][0][1] = 0; out[7][0][2] = 4*in[0];
227 out[8][0][0] = 0; out[8][0][1] = 4*in[2]; out[8][0][2] = 4*in[1];
228 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 1;
234 unsigned int order ()
const