dune-localfunctions  2.2.1
raviartthomas1q3dlocalbasis.hh
Go to the documentation of this file.
1 #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1Q3DLOCALBASIS_HH
2 #define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1Q3DLOCALBASIS_HH
3 
4 #include <vector>
5 
6 #include <dune/common/fmatrix.hh>
7 
8 #include "../../common/localbasis.hh"
9 
10 namespace Dune
11 {
21  template<class D, class R>
23  {
24 
25 public:
26  typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
27  Dune::FieldMatrix<R,3,3> > Traits;
28 
31  {
32  sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
33  }
34 
40  RT1Q3DLocalBasis (unsigned int s)
41  {
42  sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
43  if (s & 1)
44  {
45  sign0 = -1.0;
46  }
47  if (s & 2)
48  {
49  sign1 = -1.0;
50  }
51  if (s & 4)
52  {
53  sign2 = -1.0;
54  }
55  if (s & 8)
56  {
57  sign3 = -1.0;
58  }
59  if (s & 16)
60  {
61  sign4 = -1.0;
62  }
63  if (s & 32)
64  {
65  sign5 = -1.0;
66  }
67  }
68 
70  unsigned int size () const
71  {
72  return 36;
73  }
74 
81  inline void evaluateFunction (const typename Traits::DomainType& in,
82  std::vector<typename Traits::RangeType>& out) const
83  {
84  out.resize(36);
85 
86  out[0][0] = sign0*(-3.0*in[0]*in[0] + 4.0*in[0] - 1.0);
87  out[0][1] = 0.0;
88  out[0][2] = 0.0;
89 
90  out[1][0] = sign1*(-2.0*in[0] + 3.0*in[0]*in[0]);
91  out[1][1] = 0.0;
92  out[1][2] = 0.0;
93 
94  out[2][0] = 0.0;
95  out[2][1] = sign2*(-3.0*in[1]*in[1] + 4.0*in[1] - 1.0);
96  out[2][2] = 0.0;
97 
98  out[3][0] = 0.0;
99  out[3][1] = sign3*(3.0*in[1]*in[1] - 2.0*in[1]);
100  out[3][2] = 0.0;
101 
102  out[4][0] = 0.0;
103  out[4][1] = 0.0;
104  out[4][2] = sign4*(-3.0*in[2]*in[2] + 4.0*in[2] - 1.0);
105 
106  out[5][0] = 0.0;
107  out[5][1] = 0.0;
108  out[5][2] = sign5*(3.0*in[2]*in[2] - 2.0*in[2]);
109 
110  out[6][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 24.0*in[0]*in[1] - 6.0*in[1] -12.0*in[0] + 3.0;
111  out[6][1] = 0.0;
112  out[6][2] = 0.0;
113 
114  out[7][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 12.0*in[0]*in[1] - 6.0*in[0];
115  out[7][1] = 0.0;
116  out[7][2] = 0.0;
117 
118  out[8][0] = 0.0;
119  out[8][1] = 18.0*in[0]*in[1]*in[1] - 9.0*in[1]*in[1] - 24.0*in[0]*in[1] + 12.0*in[1] + 6.0*in[0] - 3.0;
120  out[8][2] = 0.0;
121 
122  out[9][0] = 0.0;
123  out[9][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
124  out[9][2] = 0.0;
125 
126  out[10][0] = 0.0;
127  out[10][1] = 0.0;
128  out[10][2] = -3.0 + 6.0*in[0] + 12.0*in[2] - 24.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
129 
130  out[11][0] = 0.0;
131  out[11][1] = 0.0;
132  out[11][2] = 6.0*in[2] - 12.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
133 
134  out[12][0] = 3.0 - 12.0*in[0] - 6.0*in[2] + 24.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
135  out[12][1] = 0.0;
136  out[12][2] = 0.0;
137 
138  out[13][0] = -6.0*in[0] + 12.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
139  out[13][1] = 0.0;
140  out[13][2] = 0.0;
141 
142  out[14][0] = 0.0;
143  out[14][1] = 3.0 - 12.0*in[1] - 6.0*in[2] + 24.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
144  out[14][2] = 0.0;
145 
146  out[15][0] = 0.0;
147  out[15][1] = -6.0*in[1] + 12.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
148  out[15][2] = 0.0;
149 
150  out[16][0] = 0.0;
151  out[16][1] = 0.0;
152  out[16][2] = -3.0 + 6.0*in[1] + 12.0*in[2] - 24.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
153 
154  out[17][0] = 0.0;
155  out[17][1] = 0.0;
156  out[17][2] = 6.0*in[2] - 12.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
157 
158  out[18][0] = -9.0 + 36.0*in[0] + 18.0*in[1] + 18.0*in[2] - 72.0*in[0]*in[1] - 72.0*in[0]*in[2] - 36.0*in[1]*in[2] + 144.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
159  out[18][1] = 0.0;
160  out[18][2] = 0.0;
161 
162  out[19][0] = 18.0*in[0] - 36.0*in[0]*in[1] - 36.0*in[0]*in[2] + 72.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
163  out[19][1] = 0.0;
164  out[19][2] = 0.0;
165 
166  out[20][0] = 0.0;
167  out[20][1] = 9.0 - 18.0*in[0] - 36.0*in[1] - 18.0*in[2] + 72.0*in[0]*in[1] + 36.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[1]*in[1]*in[0] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
168  out[20][2] = 0.0;
169 
170  out[21][0] = 0.0;
171  out[21][1] = -18.0*in[1] + 36.0*in[0]*in[1] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[0]*in[1]*in[1] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
172  out[21][2] = 0.0;
173 
174  out[22][0] = 0.0;
175  out[22][1] = 0.0;
176  out[22][2] = 9.0 - 18.0*in[0] - 18.0*in[1] - 36.0*in[2] + 36.0*in[0]*in[1] + 72.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
177 
178  out[23][0] = 0.0;
179  out[23][1] = 0.0;
180  out[23][2] = -18.0*in[2] + 36.0*in[0]*in[2] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
181 
182  out[24][0] = 96.0*in[0] - 144.0*in[0]*in[1] - 144.0*in[0]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[0]*in[0] + 144.0*in[0]*in[0]*in[1] + 144.0*in[0]*in[0]*in[2] - 216.0*in[0]*in[0]*in[1]*in[2];
183  out[24][1] = 0.0;
184  out[24][2] = 0.0;
185 
186  out[25][0] = 0.0;
187  out[25][1] = 96.0*in[1] - 144.0*in[0]*in[1] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[1]*in[1] + 144.0*in[0]*in[1]*in[1] + 144.0*in[1]*in[1]*in[2] - 216.0*in[0]*in[1]*in[1]*in[2];
188  out[25][2] = 0.0;
189 
190  out[26][0] = 0.0;
191  out[26][1] = 0.0;
192  out[26][2] = 96.0*in[2] - 144.0*in[0]*in[2] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[2]*in[2] + 144.0*in[0]*in[2]*in[2] + 144.0*in[1]*in[2]*in[2] - 216.0*in[0]*in[1]*in[2]*in[2];
193 
194  out[27][0] = -144.0*in[0] + 288.0*in[0]*in[1] + 216.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 288.0*in[0]*in[0]*in[1] - 216.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
195  out[27][1] = 0.0;
196  out[27][2] = 0.0;
197 
198  out[28][0] = -144.0*in[0] + 216.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1] - 288.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
199  out[28][1] = 0.0;
200  out[28][2] = 0.0;
201 
202  out[29][0] = 0.0;
203  out[29][1] = -144.0*in[1] + 288.0*in[0]*in[1] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 288.0*in[0]*in[1]*in[1] - 216.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
204  out[29][2] = 0.0;
205 
206  out[30][0] = 0.0;
207  out[30][1] = -144.0*in[1] + 216.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1] - 288.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
208  out[30][2] = 0.0;
209 
210  out[31][0] = 0.0;
211  out[31][1] = 0.0;
212  out[31][2] =-144.0*in[2] + 288.0*in[0]*in[2] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 288.0*in[0]*in[2]*in[2] - 216.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
213 
214  out[32][0] = 0.0;
215  out[32][1] = 0.0;
216  out[32][2] = -144.0*in[2] + 216.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2] - 288.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
217 
218  out[33][0] = 216.0*in[0] - 432.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1] + 432.0*in[0]*in[0]*in[2] - 864.0*in[0]*in[0]*in[1]*in[2];
219  out[33][1] = 0.0;
220  out[33][2] = 0.0;
221 
222  out[34][0] = 0.0;
223  out[34][1] = 216.0*in[1] - 432.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1] + 432.0*in[1]*in[1]*in[2] - 864.0*in[0]*in[1]*in[1]*in[2];
224  out[34][2] = 0.0;
225 
226  out[35][0] = 0.0;
227  out[35][1] = 0.0;
228  out[35][2] = 216.0*in[2] - 432.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2] + 432.0*in[1]*in[2]*in[2] - 864.0*in[0]*in[1]*in[2]*in[2];
229  }
230 
237  inline void evaluateJacobian (const typename Traits::DomainType& in,
238  std::vector<typename Traits::JacobianType>& out) const
239  {
240  out.resize(36);
241 
242  out[0][0][0] = sign0*(-6.0*in[0] + 4);
243  out[0][0][1] = 0;
244  out[0][0][2] = 0;
245  out[0][1][0] = 0;
246  out[0][1][1] = 0;
247  out[0][1][2] = 0;
248  out[0][2][0] = 0;
249  out[0][2][1] = 0;
250  out[0][2][2] = 0;
251 
252  out[1][0][0] = sign1*(-2 + 6.0*in[0]);
253  out[1][0][1] = 0;
254  out[1][0][2] = 0;
255  out[1][1][0] = 0;
256  out[1][1][1] = 0;
257  out[1][1][2] = 0;
258  out[1][2][0] = 0;
259  out[1][2][1] = 0;
260  out[1][2][2] = 0;
261 
262  out[2][0][0] = 0;
263  out[2][0][1] = 0;
264  out[2][0][2] = 0;
265  out[2][1][0] = 0;
266  out[2][1][1] = sign2*(-6.0*in[1] + 4);
267  out[2][1][2] = 0;
268  out[2][2][0] = 0;
269  out[2][2][1] = 0;
270  out[2][2][2] = 0;
271 
272  out[3][0][0] = 0;
273  out[3][0][1] = 0;
274  out[3][0][2] = 0;
275  out[3][1][0] = 0;
276  out[3][1][1] = sign3*(6.0*in[1] - 2);
277  out[3][1][2] = 0;
278  out[3][2][0] = 0;
279  out[3][2][1] = 0;
280  out[3][2][2] = 0;
281 
282  out[4][0][0] = 0;
283  out[4][0][1] = 0;
284  out[4][0][2] = 0;
285  out[4][1][0] = 0;
286  out[4][1][1] = 0;
287  out[4][1][2] = 0;
288  out[4][2][0] = 0;
289  out[4][2][1] = 0;
290  out[4][2][2] = sign4*(-6.0*in[2] + 4);
291 
292  out[5][0][0] = 0;
293  out[5][0][1] = 0;
294  out[5][0][2] = 0;
295  out[5][1][0] = 0;
296  out[5][1][1] = 0;
297  out[5][1][2] = 0;
298  out[5][2][0] = 0;
299  out[5][2][1] = 0;
300  out[5][2][2] = sign5*(6.0*in[2] - 2);
301 
302  out[6][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 24.0*in[1] - 12.0;
303  out[6][0][1] = -18.0*in[0]*in[0] + 24.0*in[0] - 6;
304  out[6][0][2] = 0.0;
305  out[6][1][0] = 0.0;
306  out[6][1][1] = 0.0;
307  out[6][1][2] = 0.0;
308  out[6][2][0] = 0.0;
309  out[6][2][1] = 0.0;
310  out[6][2][2] = 0.0;
311 
312  out[7][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 12.0*in[1] - 6.0;
313  out[7][0][1] = -18.0*in[0]*in[0] + 12.0*in[0];
314  out[7][0][2] = 0.0;
315  out[7][1][0] = 0.0;
316  out[7][1][1] = 0.0;
317  out[7][1][2] = 0.0;
318  out[7][2][0] = 0.0;
319  out[7][2][1] = 0.0;
320  out[7][2][2] = 0.0;
321 
322  out[8][0][0] = 0.0;
323  out[8][0][1] = 0.0;
324  out[8][0][2] = 0.0;
325  out[8][1][0] = 18.0*in[1]*in[1] - 24.0*in[1] + 6.0;
326  out[8][1][1] = 36.0*in[0]*in[1] - 18.0*in[1] - 24.0*in[0] + 12.0;
327  out[8][1][2] = 0.0;
328  out[8][2][0] = 0.0;
329  out[8][2][1] = 0.0;
330  out[8][2][2] = 0.0;
331 
332  out[9][0][0] = 0.0;
333  out[9][0][1] = 0.0;
334  out[9][0][2] = 0.0;
335  out[9][1][0] = -12.0*in[1] + 18.0*in[1]*in[1];
336  out[9][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];;
337  out[9][1][2] = 0.0;
338  out[9][2][0] = 0.0;
339  out[9][2][1] = 0.0;
340  out[9][2][2] = 0.0;
341 
342  out[10][0][0] = 0.0;
343  out[10][0][1] = 0.0;
344  out[10][0][2] = 0.0;
345  out[10][1][0] = 0.0;
346  out[10][1][1] = 0.0;
347  out[10][1][2] = 0.0;
348  out[10][2][0] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
349  out[10][2][1] = 0.0;
350  out[10][2][2] = 12.0 - 24.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
351 
352  out[11][0][0] = 0.0;
353  out[11][0][1] = 0.0;
354  out[11][0][2] = 0.0;
355  out[11][1][0] = 0.0;
356  out[11][1][1] = 0.0;
357  out[11][1][2] = 0.0;
358  out[11][2][0] = -12.0*in[2] + 18.0*in[2]*in[2];
359  out[11][2][1] = 0.0;
360  out[11][2][2] = 6.0 - 12.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
361 
362  out[12][0][0] = -12.0 + 24.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
363  out[12][0][1] = 0.0;
364  out[12][0][2] = -6.0 + 24.0*in[0] - 18.0*in[0]*in[0];
365  out[12][1][0] = 0.0;
366  out[12][1][1] = 0.0;
367  out[12][1][2] = 0.0;
368  out[12][2][0] = 0.0;
369  out[12][2][1] = 0.0;
370  out[12][2][2] = 0.0;
371 
372  out[13][0][0] = -6.0 + 12.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
373  out[13][0][1] = 0.0;
374  out[13][0][2] = 12.0*in[0] - 18.0*in[0]*in[0];
375  out[13][1][0] = 0.0;
376  out[13][1][1] = 0.0;
377  out[13][1][2] = 0.0;
378  out[13][2][0] = 0.0;
379  out[13][2][1] = 0.0;
380  out[13][2][2] = 0.0;
381 
382  out[14][0][0] = 0.0;
383  out[14][0][1] = 0.0;
384  out[14][0][2] = 0.0;
385  out[14][1][0] = 0.0;
386  out[14][1][1] = -12.0 + 24.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
387  out[14][1][2] = -6.0 + 24.0*in[1] - 18.0*in[1]*in[1];
388  out[14][2][0] = 0.0;
389  out[14][2][1] = 0.0;
390  out[14][2][2] = 0.0;
391 
392  out[15][0][0] = 0.0;
393  out[15][0][1] = 0.0;
394  out[15][0][2] = 0.0;
395  out[15][1][0] = 0.0;
396  out[15][1][1] = -6.0 + 12.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
397  out[15][1][2] = 12.0*in[1] - 18.0*in[1]*in[1];
398  out[15][2][0] = 0.0;
399  out[15][2][1] = 0.0;
400  out[15][2][2] = 0.0;
401 
402  out[16][0][0] = 0.0;
403  out[16][0][1] = 0.0;
404  out[16][0][2] = 0.0;
405  out[16][1][0] = 0.0;
406  out[16][1][1] = 0.0;
407  out[16][1][2] = 0.0;
408  out[16][2][0] = 0.0;
409  out[16][2][1] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
410  out[16][2][2] = 12.0 - 24.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
411 
412  out[17][0][0] = 0.0;
413  out[17][0][1] = 0.0;
414  out[17][0][2] = 0.0;
415  out[17][1][0] = 0.0;
416  out[17][1][1] = 0.0;
417  out[17][1][2] = 0.0;
418  out[17][2][0] = 0.0;
419  out[17][2][1] = -12.0*in[2] + 18.0*in[2]*in[2];
420  out[17][2][2] = 6.0 - 12.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
421 
422  out[18][0][0] = 36.0 - 72.0*in[1] - 72.0*in[2] + 144.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
423  out[18][0][1] = 18.0 - 72.0*in[0] - 36.0*in[2] + 144.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
424  out[18][0][2] = 18.0 - 72.0*in[0] - 36.0*in[1] + 144.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
425  out[18][1][0] = 0.0;
426  out[18][1][1] = 0.0;
427  out[18][1][2] = 0.0;
428  out[18][2][0] = 0.0;
429  out[18][2][1] = 0.0;
430  out[18][2][2] = 0.0;
431 
432  out[19][0][0] = 18 - 36.0*in[1] - 36.0*in[2] + 72.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
433  out[19][0][1] = -36.0*in[0] + 72.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
434  out[19][0][2] = -36.0*in[0] + 72.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
435  out[19][1][0] = 0.0;
436  out[19][1][1] = 0.0;
437  out[19][1][2] = 0.0;
438  out[19][2][0] = 0.0;
439  out[19][2][1] = 0.0;
440  out[19][2][2] = 0.0;
441 
442  out[20][0][0] = 0.0;
443  out[20][0][1] = 0.0;
444  out[20][0][2] = 0.0;
445  out[20][1][0] = -18.0 + 72.0*in[1] + 36.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
446  out[20][1][1] = -36.0 + 72.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[1]*in[0] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
447  out[20][1][2] = -18.0 + 36.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
448  out[20][2][0] = 0.0;
449  out[20][2][1] = 0.0;
450  out[20][2][2] = 0.0;
451 
452  out[21][0][0] = 0.0;
453  out[21][0][1] = 0.0;
454  out[21][0][2] = 0.0;
455  out[21][1][0] = 36.0*in[1] - 72.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
456  out[21][1][1] = -18.0 + 36.0*in[0] + 36.0*in[2] - 72.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[0]*in[1] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
457  out[21][1][2] = 36.0*in[1] - 72.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
458  out[21][2][0] = 0.0;
459  out[21][2][1] = 0.0;
460  out[21][2][2] = 0.0;
461 
462  out[22][0][0] = 0.0;
463  out[22][0][1] = 0.0;
464  out[22][0][2] = 0.0;
465  out[22][1][0] = 0.0;
466  out[22][1][1] = 0.0;
467  out[22][1][2] = 0.0;
468  out[22][2][0] = -18.0 + 36.0*in[1] + 72.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
469  out[22][2][1] = -18.0 + 36.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
470  out[22][2][2] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
471 
472  out[23][0][0] = 0.0;
473  out[23][0][1] = 0.0;
474  out[23][0][2] = 0.0;
475  out[23][1][0] = 0.0;
476  out[23][1][1] = 0.0;
477  out[23][1][2] = 0.0;
478  out[23][2][0] = 36.0*in[2] - 72.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
479  out[23][2][1] = 36.0*in[2] - 72.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
480  out[23][2][2] = -18.0 + 36.0*in[0] + 36.0*in[1] - 72.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
481 
482  out[24][0][0] = 96.0 - 144.0*in[1] - 144.0*in[2] + 216.0*in[1]*in[2] - 192.0*in[0] + 288.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2];
483  out[24][0][1] = -144.0*in[0] + 216.0*in[0]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[2];
484  out[24][0][2] = -144.0*in[0] + 216.0*in[0]*in[1] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1];
485  out[24][1][0] = 0.0;
486  out[24][1][1] = 0.0;
487  out[24][1][2] = 0.0;
488  out[24][2][0] = 0.0;
489  out[24][2][1] = 0.0;
490  out[24][2][2] = 0.0;
491 
492  out[25][0][0] = 0.0;
493  out[25][0][1] = 0.0;
494  out[25][0][2] = 0.0;
495  out[25][1][0] = -144.0*in[1] + 216.0*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[1]*in[1]*in[2];
496  out[25][1][1] = 96.0 - 144.0*in[0] - 144.0*in[2] + 216.0*in[0]*in[2] - 192.0*in[1] + 288.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
497  out[25][1][2] = -144.0*in[1] + 216.0*in[0]*in[1] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1];
498  out[25][2][0] = 0.0;
499  out[25][2][1] = 0.0;
500  out[25][2][2] = 0.0;
501 
502  out[26][0][0] = 0.0;
503  out[26][0][1] = 0.0;
504  out[26][0][2] = 0.0;
505  out[26][1][0] = 0.0;
506  out[26][1][1] = 0.0;
507  out[26][1][2] = 0.0;
508  out[26][2][0] = -144.0*in[2] + 216.0*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[1]*in[2]*in[2];
509  out[26][2][1] = -144.0*in[2] + 216.0*in[0]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2];
510  out[26][2][2] = 96.0 - 144.0*in[0] - 144.0*in[1] + 216.0*in[0]*in[1] - 192.0*in[2] + 288.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
511 
512  out[27][0][0] = -144.0 + 288.0*in[1] + 216.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 576.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
513  out[27][0][1] = 288.0*in[0] - 432.0*in[0]*in[2] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
514  out[27][0][2] = 216.0*in[0] - 432.0*in[0]*in[1] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
515  out[27][1][0] = 0.0;
516  out[27][1][1] = 0.0;
517  out[27][1][2] = 0.0;
518  out[27][2][0] = 0.0;
519  out[27][2][1] = 0.0;
520  out[27][2][2] = 0.0;
521 
522  out[28][0][0] = -144.0 + 216.0*in[1] + 288.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 432.0*in[0]*in[1] - 576.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
523  out[28][0][1] = 216.0*in[0] - 432.0*in[0]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
524  out[28][0][2] = 288.0*in[0] - 432.0*in[0]*in[1] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
525  out[28][1][0] = 0.0;
526  out[28][1][1] = 0.0;
527  out[28][1][2] = 0.0;
528  out[28][2][0] = 0.0;
529  out[28][2][1] = 0.0;
530  out[28][2][2] = 0.0;
531 
532  out[29][0][0] = 0.0;
533  out[29][0][1] = 0.0;
534  out[29][0][2] = 0.0;
535  out[29][1][0] = 288.0*in[1] - 432.0*in[1]*in[2] - 288.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
536  out[29][1][1] = -144.0 + 288.0*in[0] + 216.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 576.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
537  out[29][1][2] = 216.0*in[1] - 432.0*in[0]*in[1] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
538  out[29][2][0] = 0.0;
539  out[29][2][1] = 0.0;
540  out[29][2][2] = 0.0;
541 
542  out[30][0][0] = 0.0;
543  out[30][0][1] = 0.0;
544  out[30][0][2] = 0.0;
545  out[30][1][0] = 216.0*in[1] - 432.0*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
546  out[30][1][1] = -144.0 + 216.0*in[0] + 288.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 432.0*in[0]*in[1] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
547  out[30][1][2] = 288.0*in[1] - 432.0*in[0]*in[1] - 288.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
548  out[30][2][0] = 0.0;
549  out[30][2][1] = 0.0;
550  out[30][2][2] = 0.0;
551 
552  out[31][0][0] = 0.0;
553  out[31][0][1] = 0.0;
554  out[31][0][2] = 0.0;
555  out[31][1][0] = 0.0;
556  out[31][1][1] = 0.0;
557  out[31][1][2] = 0.0;
558  out[31][2][0] = 288.0*in[2] - 432.0*in[1]*in[2] - 288.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
559  out[31][2][1] = 216.0*in[2] - 432.0*in[0]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
560  out[31][2][2] = -144.0 + 288.0*in[0] + 216.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 576.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
561 
562  out[32][0][0] = 0.0;
563  out[32][0][1] = 0.0;
564  out[32][0][2] = 0.0;
565  out[32][1][0] = 0.0;
566  out[32][1][1] = 0.0;
567  out[32][1][2] = 0.0;
568  out[32][2][0] = 216.0*in[2] - 432.0*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
569  out[32][2][1] = 288.0*in[2] - 432.0*in[0]*in[2] - 288.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
570  out[32][2][2] = -144.0 + 216.0*in[0] + 288.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 432.0*in[0]*in[2] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
571 
572  out[33][0][0] = 216.0 - 432.0*in[1] - 432.0*in[2] + 864.0*in[1]*in[2] - 432.0*in[0] + 864.0*in[0]*in[1] + 864.0*in[0]*in[2] - 1728.0*in[0]*in[1]*in[2];
573  out[33][0][1] = -432.0*in[0] + 864.0*in[0]*in[2] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[2];
574  out[33][0][2] = -432.0*in[0] + 864.0*in[0]*in[1] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[1];
575  out[33][1][0] = 0.0;
576  out[33][1][1] = 0.0;
577  out[33][1][2] = 0.0;
578  out[33][2][0] = 0.0;
579  out[33][2][1] = 0.0;
580  out[33][2][2] = 0.0;
581 
582  out[34][0][0] = 0.0;
583  out[34][0][1] = 0.0;
584  out[34][0][2] = 0.0;
585  out[34][1][0] = -432.0*in[1] + 864.0*in[1]*in[2] + 432.0*in[1]*in[1] - 864.0*in[1]*in[1]*in[2];
586  out[34][1][1] = 216.0 - 432.0*in[0] - 432.0*in[2] + 864.0*in[0]*in[2] - 432.0*in[1] + 864.0*in[0]*in[1] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
587  out[34][1][2] = -432.0*in[1] + 864.0*in[0]*in[1] + 432.0*in[1]*in[1] - 864.0*in[0]*in[1]*in[1];
588  out[34][2][0] = 0.0;
589  out[34][2][1] = 0.0;
590  out[34][2][2] = 0.0;
591 
592  out[35][0][0] = 0.0;
593  out[35][0][1] = 0.0;
594  out[35][0][2] = 0.0;
595  out[35][1][0] = 0.0;
596  out[35][1][1] = 0.0;
597  out[35][1][2] = 0.0;
598  out[35][2][0] = -432.0*in[2] + 864.0*in[1]*in[2] + 432.0*in[2]*in[2] - 864.0*in[1]*in[2]*in[2];
599  out[35][2][1] = -432.0*in[2] + 864.0*in[0]*in[2] + 432.0*in[2]*in[2] - 864.0*in[0]*in[2]*in[2];
600  out[35][2][2] = 216.0 - 432.0*in[0] - 432.0*in[1] + 864.0*in[0]*in[1] - 432.0*in[2] + 864.0*in[0]*in[2] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
601  }
602 
604  unsigned int order () const
605  {
606  return 3;
607  }
608 
609 private:
610  R sign0, sign1, sign2, sign3, sign4, sign5;
611  };
612 }
613 #endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1Q3DLOCALBASIS_HH