28 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES 40 static const Real sqrt2 = std::sqrt(2.);
41 static const Real sqrt6 = std::sqrt(6.);
42 static const Real sqrt10 = std::sqrt(10.);
43 static const Real sqrt14 = std::sqrt(14.);
44 static const Real sqrt22 = std::sqrt(22.);
45 static const Real sqrt26 = std::sqrt(26.);
58 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
93 const Real l1 = 1-p(0)-p(1);
97 libmesh_assert_less (i, 6);
105 case 3:
return l1*l2*(-4.*sqrt6);
106 case 4:
return l2*l3*(-4.*sqrt6);
107 case 5:
return l3*l1*(-4.*sqrt6);
110 libmesh_error_msg(
"Invalid i = " << i);
121 const Real xi = p(0);
122 const Real eta = p(1);
124 libmesh_assert_less (i, 9);
127 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
128 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
136 libmesh_error_msg(
"Invalid element type = " << type);
150 Real l1 = 1-p(0)-p(1);
156 libmesh_assert_less (i, 10);
159 if (i==4 && (elem->
point(0) > elem->
point(1)))f=-1;
160 if (i==6 && (elem->
point(1) > elem->
point(2)))f=-1;
161 if (i==8 && (elem->
point(2) > elem->
point(0)))f=-1;
172 case 3:
return l1*l2*(-4.*sqrt6);
173 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
175 case 5:
return l2*l3*(-4.*sqrt6);
176 case 6:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
178 case 7:
return l3*l1*(-4.*sqrt6);
179 case 8:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
182 case 9:
return l1*l2*l3;
185 libmesh_error_msg(
"Invalid i = " << i);
195 const Real xi = p(0);
196 const Real eta = p(1);
198 libmesh_assert_less (i, 16);
201 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
202 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
235 libmesh_error_msg(
"Invalid element type = " << type);
250 Real l1 = 1-p(0)-p(1);
256 libmesh_assert_less (i, 15);
259 if (i== 4 && (elem->
point(0) > elem->
point(1)))f=-1;
260 if (i== 7 && (elem->
point(1) > elem->
point(2)))f=-1;
261 if (i==10 && (elem->
point(2) > elem->
point(0)))f=-1;
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};
337 libmesh_error_msg(
"Invalid element type = " << type);
352 Real l1 = 1-p(0)-p(1);
357 const Real y=2.*l3-1;
361 libmesh_assert_less (i, 21);
364 if ((i== 4||i== 6) && (elem->
point(0) > elem->
point(1)))f=-1;
365 if ((i== 8||i==10) && (elem->
point(1) > elem->
point(2)))f=-1;
366 if ((i==12||i==14) && (elem->
point(2) > elem->
point(0)))f=-1;
377 case 3:
return l1*l2*(-4.*sqrt6);
378 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
379 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
380 case 6:
return f*(-sqrt2)*l1*l2*((9.-21.*l1*l1)*l1+(-9.+63.*l1*l1+(-63.*l1+21.*l2)*l2)*l2);
382 case 7:
return l2*l3*(-4.*sqrt6);
383 case 8:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
384 case 9:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
385 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);
387 case 11:
return l3*l1*(-4.*sqrt6);
388 case 12:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
389 case 13:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
390 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);
393 case 15:
return l1*l2*l3;
395 case 16:
return l1*l2*l3*x;
396 case 17:
return l1*l2*l3*y;
398 case 18:
return l1*l2*l3*(1.5*l1*l1-.5+(-3.0*l1+1.5*l2)*l2);
399 case 19:
return l1*l2*l3*x*y;
400 case 20:
return l1*l2*l3*(1.0+(-6.0+6.0*l3)*l3);
403 libmesh_error_msg(
"Invalid i = " << i);
412 const Real xi = p(0);
413 const Real eta = p(1);
415 libmesh_assert_less (i, 36);
418 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};
419 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};
453 libmesh_error_msg(
"Invalid element type = " << type);
467 Real l1 = 1-p(0)-p(1);
472 const Real y=2.*l3-1;
476 libmesh_assert_less (i, 28);
479 if ((i== 4||i== 6) && (elem->
point(0) > elem->
point(1)))f=-1;
480 if ((i== 9||i==11) && (elem->
point(1) > elem->
point(2)))f=-1;
481 if ((i==14||i==16) && (elem->
point(2) > elem->
point(0)))f=-1;
492 case 3:
return l1*l2*(-4.*sqrt6);
493 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
494 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
495 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);
496 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);
498 case 8:
return l2*l3*(-4.*sqrt6);
499 case 9:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
500 case 10:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
501 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);
502 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);
504 case 13:
return l3*l1*(-4.*sqrt6);
505 case 14:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
506 case 15:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
507 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);
508 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);
513 case 18:
return l1*l2*l3;
515 case 19:
return l1*l2*l3*x;
516 case 20:
return l1*l2*l3*y;
518 case 21:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2);
519 case 22:
return l1*l2*l3*(l2-l1)*(2.0*l3-1.0);
520 case 23:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3);
521 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);
522 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);
523 case 26:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
524 case 27:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
528 libmesh_error_msg(
"Invalid i = " << i);
537 const Real xi = p(0);
538 const Real eta = p(1);
540 libmesh_assert_less (i, 49);
543 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};
544 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};
578 libmesh_error_msg(
"Invalid element type = " << type);
594 Real l1 = 1-p(0)-p(1);
599 const Real y=2.*l3-1.;
603 libmesh_assert_less (i, 36);
606 if ((i>= 4&&i<= 8) && (elem->
point(0) > elem->
point(1)))f=-1;
607 if ((i>=10&&i<=14) && (elem->
point(1) > elem->
point(2)))f=-1;
608 if ((i>=16&&i<=20) && (elem->
point(2) > elem->
point(0)))f=-1;
619 case 3:
return l1*l2*(-4.*sqrt6);
620 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
622 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
623 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);
624 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);
625 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);
627 case 9:
return l2*l3*(-4.*sqrt6);
628 case 10:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
630 case 11:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
631 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);
632 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);
633 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);
635 case 15:
return l3*l1*(-4.*sqrt6);
636 case 16:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
638 case 17:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
639 case 18:
return -f*sqrt2*l3*l1*((9.-21.*l3*l3)*l3+(-9.+63.*l3*l3+(-63.*l3+21.*l1)*l1)*l1);
640 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);
641 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);
645 case 21:
return l1*l2*l3;
647 case 22:
return l1*l2*l3*x;
648 case 23:
return l1*l2*l3*y;
650 case 24:
return l1*l2*l3*0.5*(3.*pow<2>(x)-1.);
651 case 25:
return l1*l2*l3*x*y;
652 case 26:
return l1*l2*l3*0.5*(3.*pow<2>(y)-1.);
654 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);
655 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);
656 case 29:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
657 case 30:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
658 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);
659 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);
660 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);
661 case 34:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3)*(l2-l1);
662 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);
665 libmesh_error_msg(
"Invalid i = " << i);
674 const Real xi = p(0);
675 const Real eta = p(1);
677 libmesh_assert_less (i, 64);
680 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};
681 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};
719 libmesh_error_msg(
"Invalid element type = " << type);
728 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
743 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
752 const unsigned int i,
753 const unsigned int j,
756 libmesh_assert(elem);
777 const Real eps = 1.e-6;
779 libmesh_assert_less (i, 6);
780 libmesh_assert_less (j, 2);
787 const Point pp(p(0)+eps, p(1));
788 const Point pm(p(0)-eps, p(1));
797 const Point pp(p(0), p(1)+eps);
798 const Point pm(p(0), p(1)-eps);
805 libmesh_error_msg(
"Invalid j = " << j);
817 const Real xi = p(0);
818 const Real eta = p(1);
820 libmesh_assert_less (i, 9);
823 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
824 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
839 libmesh_error_msg(
"Invalid j = " << j);
844 libmesh_error_msg(
"Invalid element type = " << type);
859 const Real eps = 1.e-6;
861 libmesh_assert_less (i, 10);
862 libmesh_assert_less (j, 2);
869 const Point pp(p(0)+eps, p(1));
870 const Point pm(p(0)-eps, p(1));
879 const Point pp(p(0), p(1)+eps);
880 const Point pm(p(0), p(1)-eps);
888 libmesh_error_msg(
"Invalid j = " << j);
898 const Real xi = p(0);
899 const Real eta = p(1);
901 libmesh_assert_less (i, 16);
904 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
905 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
943 libmesh_error_msg(
"Invalid j = " << j);
948 libmesh_error_msg(
"Invalid element type = " << type);
965 const Real eps = 1.e-6;
967 libmesh_assert_less (i, 15);
968 libmesh_assert_less (j, 2);
975 const Point pp(p(0)+eps, p(1));
976 const Point pm(p(0)-eps, p(1));
985 const Point pp(p(0), p(1)+eps);
986 const Point pm(p(0), p(1)-eps);
994 libmesh_error_msg(
"Invalid j = " << j);
1005 const Real xi = p(0);
1006 const Real eta = p(1);
1008 libmesh_assert_less (i, 25);
1011 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};
1012 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};
1050 libmesh_error_msg(
"Invalid j = " << j);
1055 libmesh_error_msg(
"Invalid element type = " << type);
1073 const Real eps = 1.e-6;
1075 libmesh_assert_less (i, 21);
1076 libmesh_assert_less (j, 2);
1083 const Point pp(p(0)+eps, p(1));
1084 const Point pm(p(0)-eps, p(1));
1093 const Point pp(p(0), p(1)+eps);
1094 const Point pm(p(0), p(1)-eps);
1101 libmesh_error_msg(
"Invalid j = " << j);
1111 const Real xi = p(0);
1112 const Real eta = p(1);
1114 libmesh_assert_less (i, 36);
1117 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};
1118 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};
1160 libmesh_error_msg(
"Invalid j = " << j);
1165 libmesh_error_msg(
"Invalid element type = " << type);
1181 const Real eps = 1.e-6;
1183 libmesh_assert_less (i, 28);
1184 libmesh_assert_less (j, 2);
1191 const Point pp(p(0)+eps, p(1));
1192 const Point pm(p(0)-eps, p(1));
1201 const Point pp(p(0), p(1)+eps);
1202 const Point pm(p(0), p(1)-eps);
1209 libmesh_error_msg(
"Invalid j = " << j);
1219 const Real xi = p(0);
1220 const Real eta = p(1);
1222 libmesh_assert_less (i, 49);
1225 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};
1226 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};
1268 libmesh_error_msg(
"Invalid j = " << j);
1273 libmesh_error_msg(
"Invalid element type = " << type);
1289 const Real eps = 1.e-6;
1291 libmesh_assert_less (i, 36);
1292 libmesh_assert_less (j, 2);
1299 const Point pp(p(0)+eps, p(1));
1300 const Point pm(p(0)-eps, p(1));
1309 const Point pp(p(0), p(1)+eps);
1310 const Point pm(p(0), p(1)-eps);
1317 libmesh_error_msg(
"Invalid j = " << j);
1327 const Real xi = p(0);
1328 const Real eta = p(1);
1330 libmesh_assert_less (i, 64);
1333 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};
1334 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};
1380 libmesh_error_msg(
"Invalid j = " << j);
1385 libmesh_error_msg(
"Invalid element type = " << type);
1393 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
1406 static bool warning_given =
false;
1409 libMesh::err <<
"Second derivatives for Szabab elements " 1410 <<
" are not yet implemented!" 1413 warning_given =
true;
1426 static bool warning_given =
false;
1429 libMesh::err <<
"Second derivatives for Szabab elements " 1430 <<
" are not yet implemented!" 1433 warning_given =
true;
1440 #endif// LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
The base class for all geometric element types.
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
Template class which generates the different FE families and orders.
OStreamProxy err(std::cerr)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0
A geometric point in (x,y,z) space.
const Point & point(const unsigned int i) const
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)