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