3#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
4#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
12#include "../../common/localbasis.hh"
25 template<
class D,
class R>
40 sign0 = (s[0]) ? -1.0 : 1.0;
41 sign1 = (s[1]) ? -1.0 : 1.0;
42 sign2 = (s[2]) ? -1.0 : 1.0;
43 sign3 = (s[3]) ? -1.0 : 1.0;
59 std::vector<typename Traits::RangeType>& out)
const
63 auto const& x = in[0], y = in[1];
65 const auto l1_x = 2*x - 1;
66 const auto l2_x = x*(6*x - 6) + 1;
67 const auto l3_x = x*(x*(20*x - 30) + 12) - 1;
68 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
69 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
70 const auto l1_y = 2*y - 1;
71 const auto l2_y = y*(6*y - 6) + 1;
72 const auto l3_y = y*(y*(20*y - 30) + 12) - 1;
73 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
74 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
76 out[0][0]=sign0*(0.5*(-l4_x)+0.5*l5_x);
78 out[1][0]=-(1.5)*l4_x*l1_y+1.5*l5_x*l1_y;
80 out[2][0]=sign0*(-(2.5)*l4_x*l2_y+2.5*l5_x*l2_y);
82 out[3][0]=-(3.5)*l4_x*l3_y+3.5*l5_x*l3_y;
84 out[4][0]=sign0*(-(4.5)*l4_x*l4_y+4.5*l5_x*l4_y);
87 out[5][0]=sign1*(0.5*l4_x+0.5*l5_x);
89 out[6][0]=-(1.5)*l4_x*l1_y-1.5*l5_x*l1_y;
91 out[7][0]=sign1*(2.5*l4_x*l2_y+2.5*l5_x*l2_y);
93 out[8][0]=-(3.5)*l4_x*l3_y-3.5*l5_x*l3_y;
95 out[9][0]=sign1*(4.5*l4_x*l4_y+4.5*l5_x*l4_y);
99 out[10][1]=sign2*(0.5*(-l4_y)+0.5*l5_y);
101 out[11][1]=1.5*l1_x*l4_y-1.5*l1_x*l5_y;
103 out[12][1]=sign2*(-(2.5)*l2_x*l4_y+2.5*l2_x*l5_y);
105 out[13][1]=3.5*l3_x*l4_y-3.5*l3_x*l5_y;
107 out[14][1]=sign2*(-(4.5)*l4_x*l4_y+4.5*l4_x*l5_y);
110 out[15][1]=sign3*(0.5*l4_y+0.5*l5_y);
112 out[16][1]=1.5*l1_x*l4_y+1.5*l1_x*l5_y;
114 out[17][1]=sign3*(2.5*l2_x*l4_y+2.5*l2_x*l5_y);
116 out[18][1]=3.5*l3_x*l4_y+3.5*l3_x*l5_y;
118 out[19][1]=sign3*(4.5*l4_x*l4_y+4.5*l4_x*l5_y);
122 out[21][0]=3.0*l1_y-3.0*l4_x*l1_y;
124 out[22][0]=5.0*l2_y-5.0*l4_x*l2_y;
126 out[23][0]=7.0*l3_y-7.0*l4_x*l3_y;
128 out[24][0]=9.0*l4_y-9.0*l4_x*l4_y;
130 out[25][0]=3.0*l1_x-3.0*l5_x;
132 out[26][0]=9.0*l1_x*l1_y-9.0*l5_x*l1_y;
134 out[27][0]=15.0*l1_x*l2_y-15.0*l5_x*l2_y;
136 out[28][0]=21.0*l1_x*l3_y-21.0*l5_x*l3_y;
138 out[29][0]=27.0*l1_x*l4_y-27.0*l5_x*l4_y;
140 out[30][0]=5.0*l2_x-5.0*l4_x;
142 out[31][0]=15.0*l2_x*l1_y-15.0*l4_x*l1_y;
144 out[32][0]=25.0*l2_x*l2_y-25.0*l4_x*l2_y;
146 out[33][0]=35.0*l2_x*l3_y-35.0*l4_x*l3_y;
148 out[34][0]=45.0*l2_x*l4_y-45.0*l4_x*l4_y;
150 out[35][0]=7.0*l3_x-7.0*l5_x;
152 out[36][0]=21.0*l3_x*l1_y-21.0*l5_x*l1_y;
154 out[37][0]=35.0*l3_x*l2_y-35.0*l5_x*l2_y;
156 out[38][0]=49.0*l3_x*l3_y-49.0*l5_x*l3_y;
158 out[39][0]=63.0*l3_x*l4_y-63.0*l5_x*l4_y;
163 out[41][1]=3.0*l1_y-3.0*l5_y;
165 out[42][1]=5.0*l2_y-5.0*l4_y;
167 out[43][1]=7.0*l3_y-7.0*l5_y;
169 out[44][1]=3.0*l1_x-3.0*l1_x*l4_y;
171 out[45][1]=9.0*l1_x*l1_y-9.0*l1_x*l5_y;
173 out[46][1]=15.0*l1_x*l2_y-15.0*l1_x*l4_y;
175 out[47][1]=21.0*l1_x*l3_y-21.0*l1_x*l5_y;
177 out[48][1]=5.0*l2_x-5.0*l2_x*l4_y;
179 out[49][1]=15.0*l2_x*l1_y-15.0*l2_x*l5_y;
181 out[50][1]=25.0*l2_x*l2_y-25.0*l2_x*l4_y;
183 out[51][1]=35.0*l2_x*l3_y-35.0*l2_x*l5_y;
185 out[52][1]=7.0*l3_x-7.0*l3_x*l4_y;
187 out[53][1]=21.0*l3_x*l1_y-21.0*l3_x*l5_y;
189 out[54][1]=35.0*l3_x*l2_y-35.0*l3_x*l4_y;
191 out[55][1]=49.0*l3_x*l3_y-49.0*l3_x*l5_y;
193 out[56][1]=9.0*l4_x-9.0*l4_x*l4_y;
195 out[57][1]=27.0*l4_x*l1_y-27.0*l4_x*l5_y;
197 out[58][1]=45.0*l4_x*l2_y-45.0*l4_x*l4_y;
199 out[59][1]=63.0*l4_x*l3_y-63.0*l4_x*l5_y;
209 std::vector<typename Traits::JacobianType>& out)
const
212 auto const& x = in[0], y = in[1];
214 const auto l1_x = 2*x - 1;
215 const auto l2_x = x*(6*x - 6) + 1;
216 const auto l3_x = x*(x*(20*x - 30) + 12) - 1;
217 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
218 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
219 const auto l1_y = 2*y - 1;
220 const auto l2_y = y*(6*y - 6) + 1;
221 const auto l3_y = y*(y*(20*y - 30) + 12) - 1;
222 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
223 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
225 const auto dxl1_x = 2.0;
226 const auto dxl2_x = 12*x - 6;
227 const auto dxl3_x = x*(60*x - 60) + 12;
228 const auto dxl4_x = x*(x*(280*x - 420) + 180) - 20;
229 const auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30;
230 const auto dyl1_y = 2.0;
231 const auto dyl2_y = 12*y - 6;
232 const auto dyl3_y = y*(60*y - 60) + 12;
233 const auto dyl4_y = y*(y*(280*y - 420) + 180) - 20;
234 const auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30;
237 out[0][0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x);
239 out[1][0][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y;
241 out[2][0][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
243 out[3][0][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y;
245 out[4][0][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
248 out[5][0][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x);
250 out[6][0][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y;
252 out[7][0][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
254 out[8][0][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y;
256 out[9][0][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
262 out[11][1][0]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y;
264 out[12][1][0]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
266 out[13][1][0]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y;
268 out[14][1][0]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
273 out[16][1][0]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y;
275 out[17][1][0]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
277 out[18][1][0]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y;
279 out[19][1][0]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
281 out[20][0][0]=-dxl4_x;
283 out[21][0][0]=-3.0*dxl4_x*l1_y;
285 out[22][0][0]=-5.0*dxl4_x*l2_y;
287 out[23][0][0]=-7.0*dxl4_x*l3_y;
289 out[24][0][0]=-9.0*dxl4_x*l4_y;
291 out[25][0][0]=3.0*dxl1_x-3.0*dxl5_x;
293 out[26][0][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y;
295 out[27][0][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y;
297 out[28][0][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y;
299 out[29][0][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y;
301 out[30][0][0]=5.0*dxl2_x-5.0*dxl4_x;
303 out[31][0][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y;
305 out[32][0][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y;
307 out[33][0][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y;
309 out[34][0][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y;
311 out[35][0][0]=7.0*dxl3_x-7.0*dxl5_x;
313 out[36][0][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y;
315 out[37][0][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y;
317 out[38][0][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y;
319 out[39][0][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y;
330 out[44][1][0]=3.0*dxl1_x-3.0*dxl1_x*l4_y;
332 out[45][1][0]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y;
334 out[46][1][0]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y;
336 out[47][1][0]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y;
338 out[48][1][0]=5.0*dxl2_x-5.0*dxl2_x*l4_y;
340 out[49][1][0]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y;
342 out[50][1][0]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y;
344 out[51][1][0]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y;
346 out[52][1][0]=7.0*dxl3_x-7.0*dxl3_x*l4_y;
348 out[53][1][0]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y;
350 out[54][1][0]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y;
352 out[55][1][0]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y;
354 out[56][1][0]=9.0*dxl4_x-9.0*dxl4_x*l4_y;
356 out[57][1][0]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y;
358 out[58][1][0]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y;
360 out[59][1][0]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y;
365 out[1][0][1]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y;
367 out[2][0][1]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
369 out[3][0][1]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y;
371 out[4][0][1]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
376 out[6][0][1]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y;
378 out[7][0][1]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
380 out[8][0][1]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y;
382 out[9][0][1]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
386 out[10][1][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y);
388 out[11][1][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y;
390 out[12][1][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
392 out[13][1][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y;
394 out[14][1][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
397 out[15][1][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y);
399 out[16][1][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y;
401 out[17][1][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
403 out[18][1][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y;
405 out[19][1][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
409 out[21][0][1]=3.0*dyl1_y-3.0*l4_x*dyl1_y;
411 out[22][0][1]=5.0*dyl2_y-5.0*l4_x*dyl2_y;
413 out[23][0][1]=7.0*dyl3_y-7.0*l4_x*dyl3_y;
415 out[24][0][1]=9.0*dyl4_y-9.0*l4_x*dyl4_y;
419 out[26][0][1]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y;
421 out[27][0][1]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y;
423 out[28][0][1]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y;
425 out[29][0][1]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y;
429 out[31][0][1]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y;
431 out[32][0][1]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y;
433 out[33][0][1]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y;
435 out[34][0][1]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y;
439 out[36][0][1]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y;
441 out[37][0][1]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y;
443 out[38][0][1]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y;
445 out[39][0][1]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y;
448 out[40][1][1]=-dyl4_y;
450 out[41][1][1]=3.0*dyl1_y-3.0*dyl5_y;
452 out[42][1][1]=5.0*dyl2_y-5.0*dyl4_y;
454 out[43][1][1]=7.0*dyl3_y-7.0*dyl5_y;
456 out[44][1][1]=-3.0*l1_x*dyl4_y;
458 out[45][1][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y;
460 out[46][1][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y;
462 out[47][1][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y;
464 out[48][1][1]=-5.0*l2_x*dyl4_y;
466 out[49][1][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y;
468 out[50][1][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y;
470 out[51][1][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y;
472 out[52][1][1]=-7.0*l3_x*dyl4_y;
474 out[53][1][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y;
476 out[54][1][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y;
478 out[55][1][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y;
480 out[56][1][1]=-9.0*l4_x*dyl4_y;
482 out[57][1][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y;
484 out[58][1][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y;
486 out[59][1][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y;
492 std::vector<typename Traits::RangeType>& out)
const
495 if (totalOrder == 0) {
497 }
else if (totalOrder == 1) {
499 auto const direction = std::distance(
order.begin(), std::find(
order.begin(),
order.end(), 1));
500 auto const& x = in[0], y = in[1];
503 auto l2_x = x*(6*x - 6) + 1;
504 auto l3_x = x*(x*(20*x - 30) + 12) - 1;
505 auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
506 auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
508 auto l2_y = y*(6*y - 6) + 1;
509 auto l3_y = y*(y*(20*y - 30) + 12) - 1;
510 auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
511 auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
513 if (direction == 0) {
515 auto dxl2_x = 12*x - 6;
516 auto dxl3_x = x*(60*x - 60) + 12;
517 auto dxl4_x = x*(x*(280*x - 420) + 180) - 20;
518 auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30;
520 out[0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x);
522 out[1][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y;
524 out[2][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
526 out[3][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y;
528 out[4][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
531 out[5][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x);
533 out[6][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y;
535 out[7][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
537 out[8][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y;
539 out[9][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
545 out[11][1]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y;
547 out[12][1]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
549 out[13][1]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y;
551 out[14][1]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
556 out[16][1]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y;
558 out[17][1]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
560 out[18][1]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y;
562 out[19][1]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
566 out[21][0]=-3.0*dxl4_x*l1_y;
568 out[22][0]=-5.0*dxl4_x*l2_y;
570 out[23][0]=-7.0*dxl4_x*l3_y;
572 out[24][0]=-9.0*dxl4_x*l4_y;
574 out[25][0]=3.0*dxl1_x-3.0*dxl5_x;
576 out[26][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y;
578 out[27][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y;
580 out[28][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y;
582 out[29][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y;
584 out[30][0]=5.0*dxl2_x-5.0*dxl4_x;
586 out[31][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y;
588 out[32][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y;
590 out[33][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y;
592 out[34][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y;
594 out[35][0]=7.0*dxl3_x-7.0*dxl5_x;
596 out[36][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y;
598 out[37][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y;
600 out[38][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y;
602 out[39][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y;
613 out[44][1]=3.0*dxl1_x-3.0*dxl1_x*l4_y;
615 out[45][1]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y;
617 out[46][1]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y;
619 out[47][1]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y;
621 out[48][1]=5.0*dxl2_x-5.0*dxl2_x*l4_y;
623 out[49][1]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y;
625 out[50][1]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y;
627 out[51][1]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y;
629 out[52][1]=7.0*dxl3_x-7.0*dxl3_x*l4_y;
631 out[53][1]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y;
633 out[54][1]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y;
635 out[55][1]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y;
637 out[56][1]=9.0*dxl4_x-9.0*dxl4_x*l4_y;
639 out[57][1]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y;
641 out[58][1]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y;
643 out[59][1]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y;
645 }
else if (direction == 1) {
647 auto dyl2_y = 12*y - 6;
648 auto dyl3_y = y*(60*y - 60) + 12;
649 auto dyl4_y = y*(y*(280*y - 420) + 180) - 20;
650 auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30;
654 out[1][0]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y;
656 out[2][0]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
658 out[3][0]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y;
660 out[4][0]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
665 out[6][0]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y;
667 out[7][0]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
669 out[8][0]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y;
671 out[9][0]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
675 out[10][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y);
677 out[11][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y;
679 out[12][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
681 out[13][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y;
683 out[14][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
686 out[15][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y);
688 out[16][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y;
690 out[17][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
692 out[18][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y;
694 out[19][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
698 out[21][0]=3.0*dyl1_y-3.0*l4_x*dyl1_y;
700 out[22][0]=5.0*dyl2_y-5.0*l4_x*dyl2_y;
702 out[23][0]=7.0*dyl3_y-7.0*l4_x*dyl3_y;
704 out[24][0]=9.0*dyl4_y-9.0*l4_x*dyl4_y;
708 out[26][0]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y;
710 out[27][0]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y;
712 out[28][0]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y;
714 out[29][0]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y;
718 out[31][0]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y;
720 out[32][0]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y;
722 out[33][0]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y;
724 out[34][0]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y;
728 out[36][0]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y;
730 out[37][0]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y;
732 out[38][0]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y;
734 out[39][0]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y;
739 out[41][1]=3.0*dyl1_y-3.0*dyl5_y;
741 out[42][1]=5.0*dyl2_y-5.0*dyl4_y;
743 out[43][1]=7.0*dyl3_y-7.0*dyl5_y;
745 out[44][1]=-3.0*l1_x*dyl4_y;
747 out[45][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y;
749 out[46][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y;
751 out[47][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y;
753 out[48][1]=-5.0*l2_x*dyl4_y;
755 out[49][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y;
757 out[50][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y;
759 out[51][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y;
761 out[52][1]=-7.0*l3_x*dyl4_y;
763 out[53][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y;
765 out[54][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y;
767 out[55][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y;
769 out[56][1]=-9.0*l4_x*dyl4_y;
771 out[57][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y;
773 out[58][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y;
775 out[59][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y;
791 R sign0, sign1, sign2, sign3;
A dense n x m matrix.
Definition: fmatrix.hh:69
vector space out of a tensor product of fields.
Definition: fvector.hh:95
Default exception for dummy implementations.
Definition: exceptions.hh:261
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition: raviartthomas4cube2dlocalbasis.hh:27
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition: raviartthomas4cube2dlocalbasis.hh:490
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: raviartthomas4cube2dlocalbasis.hh:58
unsigned int size() const
number of shape functions
Definition: raviartthomas4cube2dlocalbasis.hh:47
unsigned int order() const
Polynomial order of the shape functions.
Definition: raviartthomas4cube2dlocalbasis.hh:785
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: raviartthomas4cube2dlocalbasis.hh:208
RT4Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition: raviartthomas4cube2dlocalbasis.hh:38
Default exception class for range errors.
Definition: exceptions.hh:252
Implements a matrix constructed from a given type representing a field and compile-time given number ...
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
constexpr T accumulate(Range &&range, T value, F &&f)
Accumulate values.
Definition: hybridutilities.hh:289
Dune namespace.
Definition: alignedallocator.hh:11
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:32
D DomainType
domain type
Definition: localbasis.hh:43