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)