26 #include "libmesh/libmesh_config.h"
28 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
30 #include "libmesh/fe.h"
31 #include "libmesh/elem.h"
32 #include "libmesh/utility.h"
58 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
69 const bool add_p_level)
75 const Order totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
94 const Real l1 = 1-p(0)-p(1);
98 libmesh_assert_less (i, 6);
106 case 3:
return l1*l2*(-4.*sqrt6);
107 case 4:
return l2*l3*(-4.*sqrt6);
108 case 5:
return l3*l1*(-4.*sqrt6);
111 libmesh_error_msg(
"Invalid i = " << i);
122 const Real xi = p(0);
123 const Real eta = p(1);
125 libmesh_assert_less (i, 9);
128 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
129 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
137 libmesh_error_msg(
"Invalid element type = " << type);
151 Real l1 = 1-p(0)-p(1);
157 libmesh_assert_less (i, 10);
160 if (i==4 && (elem->
point(0) > elem->
point(1)))f=-1;
161 if (i==6 && (elem->
point(1) > elem->
point(2)))f=-1;
162 if (i==8 && (elem->
point(2) > elem->
point(0)))f=-1;
173 case 3:
return l1*l2*(-4.*sqrt6);
174 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
176 case 5:
return l2*l3*(-4.*sqrt6);
177 case 6:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
179 case 7:
return l3*l1*(-4.*sqrt6);
180 case 8:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
183 case 9:
return l1*l2*l3;
186 libmesh_error_msg(
"Invalid i = " << i);
196 const Real xi = p(0);
197 const Real eta = p(1);
199 libmesh_assert_less (i, 16);
202 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
203 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
236 libmesh_error_msg(
"Invalid element type = " << type);
251 Real l1 = 1-p(0)-p(1);
257 libmesh_assert_less (i, 15);
260 if (i== 4 && (elem->
point(0) > elem->
point(1)))f=-1;
261 if (i== 7 && (elem->
point(1) > elem->
point(2)))f=-1;
262 if (i==10 && (elem->
point(2) > elem->
point(0)))f=-1;
273 case 3:
return l1*l2*(-4.*sqrt6);
274 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
275 case 5:
return l1*l2*(-sqrt14)*(5.*pow<2>(l2-l1)-1);
277 case 6:
return l2*l3*(-4.*sqrt6);
278 case 7:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
279 case 8:
return l2*l3*(-sqrt14)*(5.*pow<2>(l3-l2)-1);
281 case 9:
return l3*l1*(-4.*sqrt6);
282 case 10:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
283 case 11:
return l3*l1*(-sqrt14)*(5.*pow<2>(l1-l3)-1);
286 case 12:
return l1*l2*l3;
288 case 13:
return l1*l2*l3*(l2-l1);
289 case 14:
return l1*l2*l3*(2*l3-1);
292 libmesh_error_msg(
"Invalid i = " << i);
302 const Real xi = p(0);
303 const Real eta = p(1);
305 libmesh_assert_less (i, 25);
308 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};
309 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};
338 libmesh_error_msg(
"Invalid element type = " << type);
353 Real l1 = 1-p(0)-p(1);
358 const Real y=2.*l3-1;
362 libmesh_assert_less (i, 21);
365 if ((i== 4||i== 6) && (elem->
point(0) > elem->
point(1)))f=-1;
366 if ((i== 8||i==10) && (elem->
point(1) > elem->
point(2)))f=-1;
367 if ((i==12||i==14) && (elem->
point(2) > elem->
point(0)))f=-1;
378 case 3:
return l1*l2*(-4.*sqrt6);
379 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
380 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
381 case 6:
return f*(-sqrt2)*l1*l2*((9.-21.*l1*l1)*l1+(-9.+63.*l1*l1+(-63.*l1+21.*l2)*l2)*l2);
383 case 7:
return l2*l3*(-4.*sqrt6);
384 case 8:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
385 case 9:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
386 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);
388 case 11:
return l3*l1*(-4.*sqrt6);
389 case 12:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
390 case 13:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
391 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);
394 case 15:
return l1*l2*l3;
396 case 16:
return l1*l2*l3*x;
397 case 17:
return l1*l2*l3*y;
399 case 18:
return l1*l2*l3*(1.5*l1*l1-.5+(-3.0*l1+1.5*l2)*l2);
400 case 19:
return l1*l2*l3*x*y;
401 case 20:
return l1*l2*l3*(1.0+(-6.0+6.0*l3)*l3);
404 libmesh_error_msg(
"Invalid i = " << i);
413 const Real xi = p(0);
414 const Real eta = p(1);
416 libmesh_assert_less (i, 36);
419 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};
420 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};
454 libmesh_error_msg(
"Invalid element type = " << type);
468 Real l1 = 1-p(0)-p(1);
473 const Real y=2.*l3-1;
477 libmesh_assert_less (i, 28);
480 if ((i== 4||i== 6) && (elem->
point(0) > elem->
point(1)))f=-1;
481 if ((i== 9||i==11) && (elem->
point(1) > elem->
point(2)))f=-1;
482 if ((i==14||i==16) && (elem->
point(2) > elem->
point(0)))f=-1;
493 case 3:
return l1*l2*(-4.*sqrt6);
494 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
495 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
496 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);
497 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);
499 case 8:
return l2*l3*(-4.*sqrt6);
500 case 9:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
501 case 10:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
502 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);
503 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);
505 case 13:
return l3*l1*(-4.*sqrt6);
506 case 14:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
507 case 15:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
508 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);
509 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);
514 case 18:
return l1*l2*l3;
516 case 19:
return l1*l2*l3*x;
517 case 20:
return l1*l2*l3*y;
519 case 21:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2);
520 case 22:
return l1*l2*l3*(l2-l1)*(2.0*l3-1.0);
521 case 23:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3);
522 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);
523 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);
524 case 26:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
525 case 27:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
529 libmesh_error_msg(
"Invalid i = " << i);
538 const Real xi = p(0);
539 const Real eta = p(1);
541 libmesh_assert_less (i, 49);
544 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};
545 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};
579 libmesh_error_msg(
"Invalid element type = " << type);
595 Real l1 = 1-p(0)-p(1);
600 const Real y=2.*l3-1.;
604 libmesh_assert_less (i, 36);
607 if ((i>= 4&&i<= 8) && (elem->
point(0) > elem->
point(1)))f=-1;
608 if ((i>=10&&i<=14) && (elem->
point(1) > elem->
point(2)))f=-1;
609 if ((i>=16&&i<=20) && (elem->
point(2) > elem->
point(0)))f=-1;
620 case 3:
return l1*l2*(-4.*sqrt6);
621 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
623 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
624 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);
625 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);
626 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);
628 case 9:
return l2*l3*(-4.*sqrt6);
629 case 10:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
631 case 11:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
632 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);
633 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);
634 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);
636 case 15:
return l3*l1*(-4.*sqrt6);
637 case 16:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
639 case 17:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
640 case 18:
return -f*sqrt2*l3*l1*((9.-21.*l3*l3)*l3+(-9.+63.*l3*l3+(-63.*l3+21.*l1)*l1)*l1);
641 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);
642 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);
646 case 21:
return l1*l2*l3;
648 case 22:
return l1*l2*l3*x;
649 case 23:
return l1*l2*l3*y;
651 case 24:
return l1*l2*l3*0.5*(3.*pow<2>(x)-1.);
652 case 25:
return l1*l2*l3*x*y;
653 case 26:
return l1*l2*l3*0.5*(3.*pow<2>(y)-1.);
655 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);
656 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);
657 case 29:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
658 case 30:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
659 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);
660 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);
661 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);
662 case 34:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3)*(l2-l1);
663 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);
666 libmesh_error_msg(
"Invalid i = " << i);
675 const Real xi = p(0);
676 const Real eta = p(1);
678 libmesh_assert_less (i, 64);
681 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};
682 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};
720 libmesh_error_msg(
"Invalid element type = " << type);
729 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
744 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
753 const unsigned int i,
754 const unsigned int j,
756 const bool add_p_level)
762 const Order totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
779 const Real eps = 1.e-6;
781 libmesh_assert_less (i, 6);
782 libmesh_assert_less (j, 2);
789 const Point pp(p(0)+eps, p(1));
790 const Point pm(p(0)-eps, p(1));
799 const Point pp(p(0), p(1)+eps);
800 const Point pm(p(0), p(1)-eps);
807 libmesh_error_msg(
"Invalid j = " << j);
819 const Real xi = p(0);
820 const Real eta = p(1);
822 libmesh_assert_less (i, 9);
825 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
826 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
841 libmesh_error_msg(
"Invalid j = " << j);
846 libmesh_error_msg(
"Invalid element type = " << type);
861 const Real eps = 1.e-6;
863 libmesh_assert_less (i, 10);
864 libmesh_assert_less (j, 2);
871 const Point pp(p(0)+eps, p(1));
872 const Point pm(p(0)-eps, p(1));
881 const Point pp(p(0), p(1)+eps);
882 const Point pm(p(0), p(1)-eps);
890 libmesh_error_msg(
"Invalid j = " << j);
900 const Real xi = p(0);
901 const Real eta = p(1);
903 libmesh_assert_less (i, 16);
906 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
907 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
945 libmesh_error_msg(
"Invalid j = " << j);
950 libmesh_error_msg(
"Invalid element type = " << type);
967 const Real eps = 1.e-6;
969 libmesh_assert_less (i, 15);
970 libmesh_assert_less (j, 2);
977 const Point pp(p(0)+eps, p(1));
978 const Point pm(p(0)-eps, p(1));
987 const Point pp(p(0), p(1)+eps);
988 const Point pm(p(0), p(1)-eps);
996 libmesh_error_msg(
"Invalid j = " << j);
1007 const Real xi = p(0);
1008 const Real eta = p(1);
1010 libmesh_assert_less (i, 25);
1013 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};
1014 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};
1052 libmesh_error_msg(
"Invalid j = " << j);
1057 libmesh_error_msg(
"Invalid element type = " << type);
1075 const Real eps = 1.e-6;
1077 libmesh_assert_less (i, 21);
1078 libmesh_assert_less (j, 2);
1085 const Point pp(p(0)+eps, p(1));
1086 const Point pm(p(0)-eps, p(1));
1095 const Point pp(p(0), p(1)+eps);
1096 const Point pm(p(0), p(1)-eps);
1103 libmesh_error_msg(
"Invalid j = " << j);
1113 const Real xi = p(0);
1114 const Real eta = p(1);
1116 libmesh_assert_less (i, 36);
1119 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};
1120 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};
1162 libmesh_error_msg(
"Invalid j = " << j);
1167 libmesh_error_msg(
"Invalid element type = " << type);
1183 const Real eps = 1.e-6;
1185 libmesh_assert_less (i, 28);
1186 libmesh_assert_less (j, 2);
1193 const Point pp(p(0)+eps, p(1));
1194 const Point pm(p(0)-eps, p(1));
1203 const Point pp(p(0), p(1)+eps);
1204 const Point pm(p(0), p(1)-eps);
1211 libmesh_error_msg(
"Invalid j = " << j);
1221 const Real xi = p(0);
1222 const Real eta = p(1);
1224 libmesh_assert_less (i, 49);
1227 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};
1228 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};
1270 libmesh_error_msg(
"Invalid j = " << j);
1275 libmesh_error_msg(
"Invalid element type = " << type);
1291 const Real eps = 1.e-6;
1293 libmesh_assert_less (i, 36);
1294 libmesh_assert_less (j, 2);
1301 const Point pp(p(0)+eps, p(1));
1302 const Point pm(p(0)-eps, p(1));
1311 const Point pp(p(0), p(1)+eps);
1312 const Point pm(p(0), p(1)-eps);
1319 libmesh_error_msg(
"Invalid j = " << j);
1329 const Real xi = p(0);
1330 const Real eta = p(1);
1332 libmesh_assert_less (i, 64);
1335 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};
1336 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};
1382 libmesh_error_msg(
"Invalid j = " << j);
1387 libmesh_error_msg(
"Invalid element type = " << type);
1395 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
1400 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
1409 static bool warning_given =
false;
1412 libMesh::err <<
"Second derivatives for Szabab elements "
1413 <<
" are not yet implemented!"
1416 warning_given =
true;
1430 static bool warning_given =
false;
1433 libMesh::err <<
"Second derivatives for Szabab elements "
1434 <<
" are not yet implemented!"
1437 warning_given =
true;
1445 #endif// LIBMESH_ENABLE_HIGHER_ORDER_SHAPES