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)