19 #include "libmesh/libmesh_config.h" 21 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES 24 #include "libmesh/fe.h" 25 #include "libmesh/elem.h" 26 #include "libmesh/utility.h" 27 #include "libmesh/enum_to_string.h" 38 static const Real sqrt2 = std::sqrt(2.);
39 static const Real sqrt6 = std::sqrt(6.);
40 static const Real sqrt10 = std::sqrt(10.);
41 static const Real sqrt14 = std::sqrt(14.);
42 static const Real sqrt22 = std::sqrt(22.);
43 static const Real sqrt26 = std::sqrt(26.);
49 const unsigned int totalorder,
52 libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u));
55 if (i < 4 || i >= 4*totalorder)
58 const int edge = (i-4) / (totalorder-1);
59 libmesh_assert_less(edge, 4);
60 libmesh_assert_greater_equal(edge, 0);
62 const int edge_i = i - 4 - edge*(totalorder-1);
89 const bool add_p_level)
95 const Order totalorder = order + add_p_level*elem->
p_level();
115 const Real l1 = 1-p(0)-p(1);
116 const Real l2 = p(0);
117 const Real l3 = p(1);
119 libmesh_assert_less (i, 6);
127 case 3:
return l1*l2*(-4.*sqrt6);
128 case 4:
return l2*l3*(-4.*sqrt6);
129 case 5:
return l3*l1*(-4.*sqrt6);
132 libmesh_error_msg(
"Invalid i = " << i);
143 const Real xi = p(0);
144 const Real eta = p(1);
146 libmesh_assert_less (i, 9);
149 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
150 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
173 Real l1 = 1-p(0)-p(1);
179 libmesh_assert_less (i, 10);
195 case 3:
return l1*l2*(-4.*sqrt6);
196 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
198 case 5:
return l2*l3*(-4.*sqrt6);
199 case 6:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
201 case 7:
return l3*l1*(-4.*sqrt6);
202 case 8:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
205 case 9:
return l1*l2*l3;
208 libmesh_error_msg(
"Invalid i = " << i);
218 const Real xi = p(0);
219 const Real eta = p(1);
221 libmesh_assert_less (i, 16);
224 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
225 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
227 const Real f = quad_flip(elem, totalorder, i);
250 Real l1 = 1-p(0)-p(1);
256 libmesh_assert_less (i, 15);
272 case 3:
return l1*l2*(-4.*sqrt6);
273 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
274 case 5:
return l1*l2*(-sqrt14)*(5.*pow<2>(l2-l1)-1);
276 case 6:
return l2*l3*(-4.*sqrt6);
277 case 7:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
278 case 8:
return l2*l3*(-sqrt14)*(5.*pow<2>(l3-l2)-1);
280 case 9:
return l3*l1*(-4.*sqrt6);
281 case 10:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
282 case 11:
return l3*l1*(-sqrt14)*(5.*pow<2>(l1-l3)-1);
285 case 12:
return l1*l2*l3;
287 case 13:
return l1*l2*l3*(l2-l1);
288 case 14:
return l1*l2*l3*(2*l3-1);
291 libmesh_error_msg(
"Invalid i = " << i);
301 const Real xi = p(0);
302 const Real eta = p(1);
304 libmesh_assert_less (i, 25);
307 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4};
308 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4};
310 const Real f = quad_flip(elem, totalorder, i);
333 Real l1 = 1-p(0)-p(1);
338 const Real y=2.*l3-1;
342 libmesh_assert_less (i, 21);
358 case 3:
return l1*l2*(-4.*sqrt6);
359 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
360 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
361 case 6:
return f*(-sqrt2)*l1*l2*((9.-21.*l1*l1)*l1+(-9.+63.*l1*l1+(-63.*l1+21.*l2)*l2)*l2);
363 case 7:
return l2*l3*(-4.*sqrt6);
364 case 8:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
365 case 9:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
366 case 10:
return -f*sqrt2*l2*l3*((-9.0+21.0*l3*l3)*l3+(-63.0*l3*l3+9.0+(63.0*l3-21.0*l2)*l2)*l2);
368 case 11:
return l3*l1*(-4.*sqrt6);
369 case 12:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
370 case 13:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
371 case 14:
return f*(-sqrt2)*l3*l1*((9.0-21.0*l3*l3)*l3+(-9.0+63.0*l3*l3+(-63.0*l3+21.0*l1)*l1)*l1);
374 case 15:
return l1*l2*l3;
376 case 16:
return l1*l2*l3*x;
377 case 17:
return l1*l2*l3*y;
379 case 18:
return l1*l2*l3*(1.5*l1*l1-.5+(-3.0*l1+1.5*l2)*l2);
380 case 19:
return l1*l2*l3*x*y;
381 case 20:
return l1*l2*l3*(1.0+(-6.0+6.0*l3)*l3);
384 libmesh_error_msg(
"Invalid i = " << i);
393 const Real xi = p(0);
394 const Real eta = p(1);
396 libmesh_assert_less (i, 36);
399 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5};
400 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5};
402 const Real f = quad_flip(elem, totalorder, i);
425 Real l1 = 1-p(0)-p(1);
430 const Real y=2.*l3-1;
434 libmesh_assert_less (i, 28);
450 case 3:
return l1*l2*(-4.*sqrt6);
451 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
452 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
453 case 6:
return f*(-sqrt2)*l1*l2*((9.0-21.0*l1*l1)*l1+(-9.0+63.0*l1*l1+(-63.0*l1+21.0*l2)*l2)*l2);
454 case 7:
return -sqrt22*l1*l2*(0.5+(-7.0+0.105E2*l1*l1)*l1*l1+((14.0-0.42E2*l1*l1)*l1+(-7.0+0.63E2*l1*l1+(-0.42E2*l1+0.105E2*l2)*l2)*l2)*l2);
456 case 8:
return l2*l3*(-4.*sqrt6);
457 case 9:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
458 case 10:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
459 case 11:
return f*(-sqrt2)*l2*l3*((-9.0+21.0*l3*l3)*l3+(-63.0*l3*l3+9.0+(63.0*l3-21.0*l2)*l2)*l2);
460 case 12:
return -sqrt22*l2*l3*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l2)*l2)*l2)*l2);
462 case 13:
return l3*l1*(-4.*sqrt6);
463 case 14:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
464 case 15:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
465 case 16:
return f*(-sqrt2)*l3*l1*((9.0-21.0*l3*l3)*l3+(-9.0+63.0*l3*l3+(-63.0*l3+21.0*l1)*l1)*l1);
466 case 17:
return -sqrt22*l3*l1*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l1)*l1)*l1)*l1);
471 case 18:
return l1*l2*l3;
473 case 19:
return l1*l2*l3*x;
474 case 20:
return l1*l2*l3*y;
476 case 21:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2);
477 case 22:
return l1*l2*l3*(l2-l1)*(2.0*l3-1.0);
478 case 23:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3);
479 case 24:
return 0.5*l1*l2*l3*((3.0-5.0*l1*l1)*l1+(-3.0+15.0*l1*l1+(-15.0*l1+5.0*l2)*l2)*l2);
480 case 25:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2)*(2.0*l3-1.0);
481 case 26:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
482 case 27:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
486 libmesh_error_msg(
"Invalid i = " << i);
495 const Real xi = p(0);
496 const Real eta = p(1);
498 libmesh_assert_less (i, 49);
501 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6};
502 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6};
504 const Real f = quad_flip(elem, totalorder, i);
529 Real l1 = 1-p(0)-p(1);
534 const Real y=2.*l3-1.;
538 libmesh_assert_less (i, 36);
554 case 3:
return l1*l2*(-4.*sqrt6);
555 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
557 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
558 case 6:
return f*-sqrt2*l1*l2*((9.0-21.0*l1*l1)*l1+(-9.0+63.0*l1*l1+(-63.0*l1+21.0*l2)*l2)*l2);
559 case 7:
return -sqrt22*l1*l2*(0.5+(-7.0+0.105E2*l1*l1)*l1*l1+((14.0-0.42E2*l1*l1)*l1+(-7.0+0.63E2*l1*l1+(-0.42E2*l1+0.105E2*l2)*l2)*l2)*l2);
560 case 8:
return f*-sqrt26*l1*l2*((-0.25E1+(15.0-0.165E2*l1*l1)*l1*l1)*l1+(0.25E1+(-45.0+0.825E2*l1*l1)*l1*l1+((45.0-0.165E3*l1*l1)*l1+(-15.0+0.165E3*l1*l1+(-0.825E2*l1+0.165E2*l2)*l2)*l2)*l2)*l2);
562 case 9:
return l2*l3*(-4.*sqrt6);
563 case 10:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
565 case 11:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
566 case 12:
return f*-sqrt2*l2*l3*((-9.0+21.0*l3*l3)*l3+(-63.0*l3*l3+9.0+(63.0*l3-21.0*l2)*l2)*l2);
567 case 13:
return -sqrt22*l2*l3*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l2)*l2)*l2)*l2);
568 case 14:
return f*-sqrt26*l2*l3*((0.25E1+(-15.0+0.165E2*l3*l3)*l3*l3)*l3+(-0.25E1+(45.0-0.825E2*l3*l3)*l3*l3+((-45.0+0.165E3*l3*l3)*l3+(15.0-0.165E3*l3*l3+(0.825E2*l3-0.165E2*l2)*l2)*l2)*l2)*l2);
570 case 15:
return l3*l1*(-4.*sqrt6);
571 case 16:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
573 case 17:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
574 case 18:
return -f*sqrt2*l3*l1*((9.-21.*l3*l3)*l3+(-9.+63.*l3*l3+(-63.*l3+21.*l1)*l1)*l1);
575 case 19:
return -sqrt22*l3*l1*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l1)*l1)*l1)*l1);
576 case 20:
return f*-sqrt26*l3*l1*((-0.25E1+(15.0-0.165E2*l3*l3)*l3*l3)*l3+(0.25E1+(-45.0+0.825E2*l3*l3)*l3*l3+((45.0-0.165E3*l3*l3)*l3+(-15.0+0.165E3*l3*l3+(-0.825E2*l3+0.165E2*l1)*l1)*l1)*l1)*l1);
580 case 21:
return l1*l2*l3;
582 case 22:
return l1*l2*l3*x;
583 case 23:
return l1*l2*l3*y;
585 case 24:
return l1*l2*l3*0.5*(3.*pow<2>(x)-1.);
586 case 25:
return l1*l2*l3*x*y;
587 case 26:
return l1*l2*l3*0.5*(3.*pow<2>(y)-1.);
589 case 27:
return 0.5*l1*l2*l3*((3.0-5.0*l1*l1)*l1+(-3.0+15.0*l1*l1+(-15.0*l1+5.0*l2)*l2)*l2);
590 case 28:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2)*(2.0*l3-1.0);
591 case 29:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
592 case 30:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
593 case 31:
return 0.125*l1*l2*l3*((-15.0+(70.0-63.0*l1*l1)*l1*l1)*l1+(15.0+(-210.0+315.0*l1*l1)*l1*l1+((210.0-630.0*l1*l1)*l1+(-70.0+630.0*l1*l1+(-315.0*l1+63.0*l2)*l2)*l2)*l2)*l2);
594 case 32:
return 0.5*l1*l2*l3*((3.0-5.0*l1*l1)*l1+(-3.0+15.0*l1*l1+(-15.0*l1+5.0*l2)*l2)*l2)*(2.0*l3-1.0);
595 case 33:
return 0.25*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2)*(2.0+(-12.0+12.0*l3)*l3);
596 case 34:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3)*(l2-l1);
597 case 35:
return 0.125*l1*l2*l3*(-8.0+(240.0+(-1680.0+(4480.0+(-5040.0+2016.0*l3)*l3)*l3)*l3)*l3);
600 libmesh_error_msg(
"Invalid i = " << i);
609 const Real xi = p(0);
610 const Real eta = p(1);
612 libmesh_assert_less (i, 64);
615 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7};
616 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7};
618 const Real f = quad_flip(elem, totalorder, i);
635 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
649 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
658 const unsigned int i,
660 const bool add_p_level)
672 const unsigned int i,
673 const unsigned int j,
675 const bool add_p_level)
681 const Order totalorder = order + add_p_level*elem->
p_level();
708 const Real xi = p(0);
709 const Real eta = p(1);
711 libmesh_assert_less (i, 9);
714 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
715 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
730 libmesh_error_msg(
"Invalid j = " << j);
759 const Real xi = p(0);
760 const Real eta = p(1);
762 libmesh_assert_less (i, 16);
765 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
766 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
768 const Real f = quad_flip(elem, totalorder, i);
783 libmesh_error_msg(
"Invalid j = " << j);
814 const Real xi = p(0);
815 const Real eta = p(1);
817 libmesh_assert_less (i, 25);
820 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4};
821 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4};
823 const Real f = quad_flip(elem, totalorder, i);
838 libmesh_error_msg(
"Invalid j = " << j);
869 const Real xi = p(0);
870 const Real eta = p(1);
872 libmesh_assert_less (i, 36);
875 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5};
876 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5};
878 const Real f = quad_flip(elem, totalorder, i);
893 libmesh_error_msg(
"Invalid j = " << j);
922 const Real xi = p(0);
923 const Real eta = p(1);
925 libmesh_assert_less (i, 49);
928 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6};
929 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6};
931 const Real f = quad_flip(elem, totalorder, i);
946 libmesh_error_msg(
"Invalid j = " << j);
975 const Real xi = p(0);
976 const Real eta = p(1);
978 libmesh_assert_less (i, 64);
981 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7};
982 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7};
984 const Real f = quad_flip(elem, totalorder, i);
999 libmesh_error_msg(
"Invalid j = " << j);
1012 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
1027 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
1035 const unsigned int i,
1036 const unsigned int j,
1038 const bool add_p_level)
1046 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1055 static bool warning_given =
false;
1058 libMesh::err <<
"Second derivatives for Szabab elements " 1059 <<
" are not yet implemented!" 1062 warning_given =
true;
1076 static bool warning_given =
false;
1079 libMesh::err <<
"Second derivatives for Szabab elements " 1080 <<
" are not yet implemented!" 1083 warning_given =
true;
1096 static bool warning_given =
false;
1099 libMesh::err <<
"Second derivatives for Szabab elements " 1100 <<
" are not yet implemented!" 1103 warning_given =
true;
1111 #endif// LIBMESH_ENABLE_HIGHER_ORDER_SHAPES class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
This is the base class from which all geometric element types are derived.
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
unsigned int p_level() const
OrderWrapper order
The approximation order of the element.
The libMesh namespace provides an interface to certain functionality in the library.
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven't be...
LIBMESH_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
A specific instantiation of the FEBase class.
bool positive_edge_orientation(const unsigned int i) const
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)