22 #include "libmesh/fe.h" 
   23 #include "libmesh/elem.h" 
   33                            const Order libmesh_dbg_var(order),
 
   40   const Real eta  = p(1);
 
   41   const Real zeta = p(2);
 
   43   libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
 
   44                        (static_cast<unsigned int>(order)+2)*
 
   45                        (static_cast<unsigned int>(order)+3)/6);
 
  109       return eta*zeta*zeta;
 
  112       return zeta*zeta*zeta;
 
  122       return xi*xi*eta*eta;
 
  125       return xi*eta*eta*eta;
 
  128       return eta*eta*eta*eta;
 
  131       return xi*xi*xi*zeta;
 
  134       return xi*xi*eta*zeta;
 
  137       return xi*eta*eta*zeta;
 
  140       return eta*eta*eta*zeta;
 
  143       return xi*xi*zeta*zeta;
 
  146       return xi*eta*zeta*zeta;
 
  149       return eta*eta*zeta*zeta;
 
  152       return xi*zeta*zeta*zeta;
 
  155       return eta*zeta*zeta*zeta;
 
  158       return zeta*zeta*zeta*zeta;
 
  162       for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  163       unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  164       unsigned int block=o, nz = 0;
 
  165       for (; block < i2; block += (o-nz+1)) { nz++; }
 
  166       const unsigned int nx = block - i2;
 
  167       const unsigned int ny = o - nx - nz;
 
  169       for (
unsigned int index=0; index != nx; index++)
 
  171       for (
unsigned int index=0; index != ny; index++)
 
  173       for (
unsigned int index=0; index != nz; index++)
 
  178 #else // LIBMESH_DIM != 3 
  181   libmesh_not_implemented();
 
  190                            const unsigned int i,
 
  192                            const bool add_p_level)
 
  204                                  const Order libmesh_dbg_var(order),
 
  205                                  const unsigned int i,
 
  206                                  const unsigned int j,
 
  211   libmesh_assert_less (j, 3);
 
  213   libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
 
  214                        (static_cast<unsigned int>(order)+2)*
 
  215                        (static_cast<unsigned int>(order)+3)/6);
 
  218   const Real xi   = p(0);
 
  219   const Real eta  = p(1);
 
  220   const Real zeta = p(2);
 
  302             return 2.*xi*eta*eta;
 
  311             return 3.*xi*xi*zeta;
 
  314             return 2.*xi*eta*zeta;
 
  323             return 2.*xi*zeta*zeta;
 
  326             return eta*zeta*zeta;
 
  332             return zeta*zeta*zeta;
 
  342             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  343             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  344             unsigned int block=o, nz = 0;
 
  345             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  346             const unsigned int nx = block - i2;
 
  347             const unsigned int ny = o - nx - nz;
 
  349             for (
unsigned int index=1; index < nx; index++)
 
  351             for (
unsigned int index=0; index != ny; index++)
 
  353             for (
unsigned int index=0; index != nz; index++)
 
  440             return 3.*xi*eta*eta;
 
  443             return 4.*eta*eta*eta;
 
  452             return 2.*xi*eta*zeta;
 
  455             return 3.*eta*eta*zeta;
 
  464             return 2.*eta*zeta*zeta;
 
  470             return zeta*zeta*zeta;
 
  477             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  478             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  479             unsigned int block=o, nz = 0;
 
  480             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  481             const unsigned int nx = block - i2;
 
  482             const unsigned int ny = o - nx - nz;
 
  484             for (
unsigned int index=0; index != nx; index++)
 
  486             for (
unsigned int index=1; index < ny; index++)
 
  488             for (
unsigned int index=0; index != nz; index++)
 
  593             return 2.*xi*xi*zeta;
 
  596             return 2.*xi*eta*zeta;
 
  599             return 2.*eta*eta*zeta;
 
  602             return 3.*xi*zeta*zeta;
 
  605             return 3.*eta*zeta*zeta;
 
  608             return 4.*zeta*zeta*zeta;
 
  612             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  613             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  614             unsigned int block=o, nz = 0;
 
  615             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  616             const unsigned int nx = block - i2;
 
  617             const unsigned int ny = o - nx - nz;
 
  619             for (
unsigned int index=0; index != nx; index++)
 
  621             for (
unsigned int index=0; index != ny; index++)
 
  623             for (
unsigned int index=1; index < nz; index++)
 
  630       libmesh_error_msg(
"Invalid shape function derivative j = " << j);
 
  633 #else // LIBMESH_DIM != 3 
  636   libmesh_not_implemented();
 
  645                                  const unsigned int i,
 
  646                                  const unsigned int j,
 
  648                                  const bool add_p_level)
 
  657 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 
  661                                         const Order libmesh_dbg_var(order),
 
  662                                         const unsigned int i,
 
  663                                         const unsigned int j,
 
  668   libmesh_assert_less (j, 6);
 
  670   libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
 
  671                        (static_cast<unsigned int>(order)+2)*
 
  672                        (static_cast<unsigned int>(order)+3)/6);
 
  674   const Real xi   = p(0);
 
  675   const Real eta  = p(1);
 
  676   const Real zeta = p(2);
 
  763             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  764             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  765             unsigned int block=o, nz = 0;
 
  766             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  767             const unsigned int nx = block - i2;
 
  768             const unsigned int ny = o - nx - nz;
 
  769             Real val = nx * (nx - 1);
 
  770             for (
unsigned int index=2; index < nx; index++)
 
  772             for (
unsigned int index=0; index != ny; index++)
 
  774             for (
unsigned int index=0; index != nz; index++)
 
  869             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  870             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  871             unsigned int block=o, nz = 0;
 
  872             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  873             const unsigned int nx = block - i2;
 
  874             const unsigned int ny = o - nx - nz;
 
  876             for (
unsigned int index=1; index < nx; index++)
 
  878             for (
unsigned int index=1; index < ny; index++)
 
  880             for (
unsigned int index=0; index != nz; index++)
 
  974             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  975             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  976             unsigned int block=o, nz = 0;
 
  977             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  978             const unsigned int nx = block - i2;
 
  979             const unsigned int ny = o - nx - nz;
 
  980             Real val = ny * (ny - 1);
 
  981             for (
unsigned int index=0; index != nx; index++)
 
  983             for (
unsigned int index=2; index < ny; index++)
 
  985             for (
unsigned int index=0; index != nz; index++)
 
 1072             return 3.*zeta*zeta;
 
 1080             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1081             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1082             unsigned int block=o, nz = 0;
 
 1083             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1084             const unsigned int nx = block - i2;
 
 1085             const unsigned int ny = o - nx - nz;
 
 1087             for (
unsigned int index=1; index < nx; index++)
 
 1089             for (
unsigned int index=0; index != ny; index++)
 
 1091             for (
unsigned int index=1; index < nz; index++)
 
 1178             return 3.*zeta*zeta;
 
 1185             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1186             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1187             unsigned int block=o, nz = 0;
 
 1188             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1189             const unsigned int nx = block - i2;
 
 1190             const unsigned int ny = o - nx - nz;
 
 1192             for (
unsigned int index=0; index != nx; index++)
 
 1194             for (
unsigned int index=1; index < ny; index++)
 
 1196             for (
unsigned int index=1; index < nz; index++)
 
 1275             return 12.*zeta*zeta;
 
 1279             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1280             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1281             unsigned int block=o, nz = 0;
 
 1282             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1283             const unsigned int nx = block - i2;
 
 1284             const unsigned int ny = o - nx - nz;
 
 1285             Real val = nz * (nz - 1);
 
 1286             for (
unsigned int index=0; index != nx; index++)
 
 1288             for (
unsigned int index=0; index != ny; index++)
 
 1290             for (
unsigned int index=2; index < nz; index++)
 
 1297       libmesh_error_msg(
"Invalid j = " << j);
 
 1300 #else // LIBMESH_DIM != 3 
 1303   libmesh_not_implemented();
 
 1312                                         const unsigned int i,
 
 1313                                         const unsigned int j,
 
 1315                                         const bool add_p_level)