20 #include "libmesh/fe.h"
21 #include "libmesh/elem.h"
22 #include "libmesh/fe_lagrange_shape_1D.h"
42 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
44 Real fe_lagrange_3D_shape_second_deriv(
const ElemType type,
50 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES
63 return fe_lagrange_3D_shape(type, order, i, p);
74 return fe_lagrange_3D_shape(type, order, i, p);
84 const bool add_p_level)
89 return fe_lagrange_3D_shape(elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, p);
99 const bool add_p_level)
104 return fe_lagrange_3D_shape(elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, p);
112 const unsigned int i,
113 const unsigned int j,
116 return fe_lagrange_3D_shape_deriv(type, order, i, j, p);
124 const unsigned int i,
125 const unsigned int j,
128 return fe_lagrange_3D_shape_deriv(type, order, i, j, p);
136 const unsigned int i,
137 const unsigned int j,
139 const bool add_p_level)
144 return fe_lagrange_3D_shape_deriv(elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
151 const unsigned int i,
152 const unsigned int j,
154 const bool add_p_level)
159 return fe_lagrange_3D_shape_deriv(elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
164 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
169 const unsigned int i,
170 const unsigned int j,
173 return fe_lagrange_3D_shape_second_deriv(type, order, i, j, p);
181 const unsigned int i,
182 const unsigned int j,
185 return fe_lagrange_3D_shape_second_deriv(type, order, i, j, p);
193 const unsigned int i,
194 const unsigned int j,
196 const bool add_p_level)
201 return fe_lagrange_3D_shape_second_deriv
202 (elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
210 const unsigned int i,
211 const unsigned int j,
213 const bool add_p_level)
218 return fe_lagrange_3D_shape_second_deriv
219 (elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
222 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES
234 const unsigned int i,
251 libmesh_assert_less (i, 8);
254 const Real xi = p(0);
255 const Real eta = p(1);
256 const Real zeta = p(2);
259 static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
260 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
261 static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
272 libmesh_assert_less (i, 4);
275 const Real zeta1 = p(0);
276 const Real zeta2 = p(1);
277 const Real zeta3 = p(2);
278 const Real zeta0 = 1. - zeta1 - zeta2 - zeta3;
295 libmesh_error_msg(
"Invalid i = " << i);
304 libmesh_assert_less (i, 6);
309 Point p2d(p(0),p(1));
313 static const unsigned int i0[] = {0, 0, 0, 1, 1, 1};
314 static const unsigned int i1[] = {0, 1, 2, 0, 1, 2};
325 libmesh_assert_less (i, 5);
327 const Real xi = p(0);
328 const Real eta = p(1);
329 const Real zeta = p(2);
330 const Real eps = 1.e-35;
335 return .25*(zeta + xi - 1.)*(zeta + eta - 1.)/((1. - zeta) + eps);
338 return .25*(zeta - xi - 1.)*(zeta + eta - 1.)/((1. - zeta) + eps);
341 return .25*(zeta - xi - 1.)*(zeta - eta - 1.)/((1. - zeta) + eps);
344 return .25*(zeta + xi - 1.)*(zeta - eta - 1.)/((1. - zeta) + eps);
350 libmesh_error_msg(
"Invalid i = " << i);
356 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << type);
370 libmesh_assert_less (i, 20);
372 const Real xi = p(0);
373 const Real eta = p(1);
374 const Real zeta = p(2);
378 const Real x = .5*(xi + 1.);
379 const Real y = .5*(eta + 1.);
380 const Real z = .5*(zeta + 1.);
385 return (1. - x)*(1. - y)*(1. - z)*(1. - 2.*x - 2.*y - 2.*z);
388 return x*(1. - y)*(1. - z)*(2.*x - 2.*y - 2.*z - 1.);
391 return x*y*(1. - z)*(2.*x + 2.*y - 2.*z - 3.);
394 return (1. - x)*y*(1. - z)*(2.*y - 2.*x - 2.*z - 1.);
397 return (1. - x)*(1. - y)*z*(2.*z - 2.*x - 2.*y - 1.);
400 return x*(1. - y)*z*(2.*x - 2.*y + 2.*z - 3.);
403 return x*y*z*(2.*x + 2.*y + 2.*z - 5.);
406 return (1. - x)*y*z*(2.*y - 2.*x + 2.*z - 3.);
409 return 4.*x*(1. - x)*(1. - y)*(1. - z);
412 return 4.*x*y*(1. - y)*(1. - z);
415 return 4.*x*(1. - x)*y*(1. - z);
418 return 4.*(1. - x)*y*(1. - y)*(1. - z);
421 return 4.*(1. - x)*(1. - y)*z*(1. - z);
424 return 4.*x*(1. - y)*z*(1. - z);
427 return 4.*x*y*z*(1. - z);
430 return 4.*(1. - x)*y*z*(1. - z);
433 return 4.*x*(1. - x)*(1. - y)*z;
436 return 4.*x*y*(1. - y)*z;
439 return 4.*x*(1. - x)*y*z;
442 return 4.*(1. - x)*y*(1. - y)*z;
445 libmesh_error_msg(
"Invalid i = " << i);
452 libmesh_assert_less (i, 27);
455 const Real xi = p(0);
456 const Real eta = p(1);
457 const Real zeta = p(2);
463 static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 1, 0, 2, 1, 2, 0, 2, 2, 1, 2, 0, 2, 2};
464 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 1, 0, 2, 1, 2, 2, 0, 2, 1, 2, 2, 2};
465 static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1, 0, 2, 2, 2, 2, 1, 2};
475 libmesh_assert_less (i, 10);
478 const Real zeta1 = p(0);
479 const Real zeta2 = p(1);
480 const Real zeta3 = p(2);
481 const Real zeta0 = 1. - zeta1 - zeta2 - zeta3;
486 return zeta0*(2.*zeta0 - 1.);
489 return zeta1*(2.*zeta1 - 1.);
492 return zeta2*(2.*zeta2 - 1.);
495 return zeta3*(2.*zeta3 - 1.);
498 return 4.*zeta0*zeta1;
501 return 4.*zeta1*zeta2;
504 return 4.*zeta2*zeta0;
507 return 4.*zeta0*zeta3;
510 return 4.*zeta1*zeta3;
513 return 4.*zeta2*zeta3;
516 libmesh_error_msg(
"Invalid i = " << i);
523 libmesh_assert_less (i, 15);
525 const Real xi = p(0);
526 const Real eta = p(1);
527 const Real zeta = p(2);
532 return (1. - zeta)*(xi + eta - 1.)*(xi + eta + 0.5*zeta);
535 return (1. - zeta)*xi*(xi - 1. - 0.5*zeta);
538 return (1. - zeta)*eta*(eta - 1. - 0.5*zeta);
541 return (1. + zeta)*(xi + eta - 1.)*(xi + eta - 0.5*zeta);
544 return (1. + zeta)*xi*(xi - 1. + 0.5*zeta);
547 return (1. + zeta)*eta*(eta - 1. + 0.5*zeta);
550 return 2.*(1. - zeta)*xi*(1. - xi - eta);
553 return 2.*(1. - zeta)*xi*eta;
556 return 2.*(1. - zeta)*eta*(1. - xi - eta);
559 return (1. - zeta)*(1. + zeta)*(1. - xi - eta);
562 return (1. - zeta)*(1. + zeta)*xi;
565 return (1. - zeta)*(1. + zeta)*eta;
568 return 2.*(1. + zeta)*xi*(1. - xi - eta);
571 return 2.*(1. + zeta)*xi*eta;
574 return 2.*(1. + zeta)*eta*(1. - xi - eta);
577 libmesh_error_msg(
"Invalid i = " << i);
584 libmesh_assert_less (i, 18);
589 Point p2d(p(0),p(1));
593 static const unsigned int i0[] = {0, 0, 0, 1, 1, 1, 0, 0, 0, 2, 2, 2, 1, 1, 1, 2, 2, 2};
594 static const unsigned int i1[] = {0, 1, 2, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 3, 4, 5};
605 libmesh_assert_less (i, 13);
607 const Real xi = p(0);
608 const Real eta = p(1);
609 const Real zeta = p(2);
610 const Real eps = 1.e-35;
614 Real den = (1. - zeta + eps);
619 return 0.25*(-xi - eta - 1.)*((1. - xi)*(1. - eta) - zeta + xi*eta*zeta/den);
622 return 0.25*(-eta + xi - 1.)*((1. + xi)*(1. - eta) - zeta - xi*eta*zeta/den);
625 return 0.25*(xi + eta - 1.)*((1. + xi)*(1. + eta) - zeta + xi*eta*zeta/den);
628 return 0.25*(eta - xi - 1.)*((1. - xi)*(1. + eta) - zeta - xi*eta*zeta/den);
631 return zeta*(2.*zeta - 1.);
634 return 0.5*(1. + xi - zeta)*(1. - xi - zeta)*(1. - eta - zeta)/den;
637 return 0.5*(1. + eta - zeta)*(1. - eta - zeta)*(1. + xi - zeta)/den;
640 return 0.5*(1. + xi - zeta)*(1. - xi - zeta)*(1. + eta - zeta)/den;
643 return 0.5*(1. + eta - zeta)*(1. - eta - zeta)*(1. - xi - zeta)/den;
646 return zeta*(1. - xi - zeta)*(1. - eta - zeta)/den;
649 return zeta*(1. + xi - zeta)*(1. - eta - zeta)/den;
652 return zeta*(1. + eta - zeta)*(1. + xi - zeta)/den;
655 return zeta*(1. - xi - zeta)*(1. + eta - zeta)/den;
658 libmesh_error_msg(
"Invalid i = " << i);
667 libmesh_assert_less (i, 14);
669 const Real xi = p(0);
670 const Real eta = p(1);
671 const Real zeta = p(2);
672 const Real eps = 1.e-35;
677 p1 = 0.5*(1. - eta - zeta),
678 p2 = 0.5*(1. + xi - zeta),
679 p3 = 0.5*(1. + eta - zeta),
680 p4 = 0.5*(1. - xi - zeta);
685 den = (-1. + zeta + eps),
691 return p4*p1*(xi*eta - zeta + zeta*zeta)/den2;
694 return -p1*p2*(xi*eta + zeta - zeta*zeta)/den2;
697 return p2*p3*(xi*eta - zeta + zeta*zeta)/den2;
700 return -p3*p4*(xi*eta + zeta - zeta*zeta)/den2;
703 return zeta*(2.*zeta - 1.);
706 return -4.*p2*p1*p4*eta/den2;
709 return 4.*p1*p2*p3*xi/den2;
712 return 4.*p2*p3*p4*eta/den2;
715 return -4.*p3*p4*p1*xi/den2;
718 return -4.*p1*p4*zeta/den;
721 return -4.*p2*p1*zeta/den;
724 return -4.*p3*p2*zeta/den;
727 return -4.*p4*p3*zeta/den;
730 return 16.*p1*p2*p3*p4/den2;
733 libmesh_error_msg(
"Invalid i = " << i);
739 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << type);
746 libmesh_error_msg(
"ERROR: Unsupported 3D FE order!: " << order);
749 #else // LIBMESH_DIM != 3
751 libmesh_not_implemented();
759 const unsigned int i,
760 const unsigned int j,
765 libmesh_assert_less (j, 3);
779 libmesh_assert_less (i, 8);
782 const Real xi = p(0);
783 const Real eta = p(1);
784 const Real zeta = p(2);
786 static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
787 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
788 static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
808 libmesh_error_msg(
"Invalid j = " << j);
816 libmesh_assert_less (i, 4);
819 const Real dzeta0dxi = -1.;
820 const Real dzeta1dxi = 1.;
821 const Real dzeta2dxi = 0.;
822 const Real dzeta3dxi = 0.;
824 const Real dzeta0deta = -1.;
825 const Real dzeta1deta = 0.;
826 const Real dzeta2deta = 1.;
827 const Real dzeta3deta = 0.;
829 const Real dzeta0dzeta = -1.;
830 const Real dzeta1dzeta = 0.;
831 const Real dzeta2dzeta = 0.;
832 const Real dzeta3dzeta = 1.;
854 libmesh_error_msg(
"Invalid i = " << i);
876 libmesh_error_msg(
"Invalid i = " << i);
898 libmesh_error_msg(
"Invalid i = " << i);
903 libmesh_error_msg(
"Invalid shape function derivative j = " << j);
912 libmesh_assert_less (i, 6);
917 Point p2d(p(0),p(1));
921 static const unsigned int i0[] = {0, 0, 0, 1, 1, 1};
922 static const unsigned int i1[] = {0, 1, 2, 0, 1, 2};
942 libmesh_error_msg(
"Invalid shape function derivative j = " << j);
951 libmesh_assert_less (i, 5);
953 const Real xi = p(0);
954 const Real eta = p(1);
955 const Real zeta = p(2);
956 const Real eps = 1.e-35;
965 return .25*(zeta + eta - 1.)/((1. - zeta) + eps);
968 return -.25*(zeta + eta - 1.)/((1. - zeta) + eps);
971 return -.25*(zeta - eta - 1.)/((1. - zeta) + eps);
974 return .25*(zeta - eta - 1.)/((1. - zeta) + eps);
980 libmesh_error_msg(
"Invalid i = " << i);
989 return .25*(zeta + xi - 1.)/((1. - zeta) + eps);
992 return .25*(zeta - xi - 1.)/((1. - zeta) + eps);
995 return -.25*(zeta - xi - 1.)/((1. - zeta) + eps);
998 return -.25*(zeta + xi - 1.)/((1. - zeta) + eps);
1004 libmesh_error_msg(
"Invalid i = " << i);
1014 num = zeta*(2. - zeta) - 1.,
1015 den = (1. - zeta + eps)*(1. - zeta + eps);
1021 return .25*(num + xi*eta)/den;
1025 return .25*(num - xi*eta)/den;
1031 libmesh_error_msg(
"Invalid i = " << i);
1036 libmesh_error_msg(
"Invalid j = " << j);
1042 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << type);
1056 libmesh_assert_less (i, 20);
1058 const Real xi = p(0);
1059 const Real eta = p(1);
1060 const Real zeta = p(2);
1064 const Real x = .5*(xi + 1.);
1065 const Real y = .5*(eta + 1.);
1066 const Real z = .5*(zeta + 1.);
1078 return .5*(1. - y)*(1. - z)*((1. - x)*(-2.) +
1079 (-1.)*(1. - 2.*x - 2.*y - 2.*z));
1082 return .5*(1. - y)*(1. - z)*(x*(2.) +
1083 (1.)*(2.*x - 2.*y - 2.*z - 1.));
1086 return .5*y*(1. - z)*(x*(2.) +
1087 (1.)*(2.*x + 2.*y - 2.*z - 3.));
1090 return .5*y*(1. - z)*((1. - x)*(-2.) +
1091 (-1.)*(2.*y - 2.*x - 2.*z - 1.));
1094 return .5*(1. - y)*z*((1. - x)*(-2.) +
1095 (-1.)*(2.*z - 2.*x - 2.*y - 1.));
1098 return .5*(1. - y)*z*(x*(2.) +
1099 (1.)*(2.*x - 2.*y + 2.*z - 3.));
1102 return .5*y*z*(x*(2.) +
1103 (1.)*(2.*x + 2.*y + 2.*z - 5.));
1106 return .5*y*z*((1. - x)*(-2.) +
1107 (-1.)*(2.*y - 2.*x + 2.*z - 3.));
1110 return 2.*(1. - y)*(1. - z)*(1. - 2.*x);
1113 return 2.*y*(1. - y)*(1. - z);
1116 return 2.*y*(1. - z)*(1. - 2.*x);
1119 return 2.*y*(1. - y)*(1. - z)*(-1.);
1122 return 2.*(1. - y)*z*(1. - z)*(-1.);
1125 return 2.*(1. - y)*z*(1. - z);
1128 return 2.*y*z*(1. - z);
1131 return 2.*y*z*(1. - z)*(-1.);
1134 return 2.*(1. - y)*z*(1. - 2.*x);
1137 return 2.*y*(1. - y)*z;
1140 return 2.*y*z*(1. - 2.*x);
1143 return 2.*y*(1. - y)*z*(-1.);
1146 libmesh_error_msg(
"Invalid i = " << i);
1155 return .5*(1. - x)*(1. - z)*((1. - y)*(-2.) +
1156 (-1.)*(1. - 2.*x - 2.*y - 2.*z));
1159 return .5*x*(1. - z)*((1. - y)*(-2.) +
1160 (-1.)*(2.*x - 2.*y - 2.*z - 1.));
1163 return .5*x*(1. - z)*(y*(2.) +
1164 (1.)*(2.*x + 2.*y - 2.*z - 3.));
1167 return .5*(1. - x)*(1. - z)*(y*(2.) +
1168 (1.)*(2.*y - 2.*x - 2.*z - 1.));
1171 return .5*(1. - x)*z*((1. - y)*(-2.) +
1172 (-1.)*(2.*z - 2.*x - 2.*y - 1.));
1175 return .5*x*z*((1. - y)*(-2.) +
1176 (-1.)*(2.*x - 2.*y + 2.*z - 3.));
1179 return .5*x*z*(y*(2.) +
1180 (1.)*(2.*x + 2.*y + 2.*z - 5.));
1183 return .5*(1. - x)*z*(y*(2.) +
1184 (1.)*(2.*y - 2.*x + 2.*z - 3.));
1187 return 2.*x*(1. - x)*(1. - z)*(-1.);
1190 return 2.*x*(1. - z)*(1. - 2.*y);
1193 return 2.*x*(1. - x)*(1. - z);
1196 return 2.*(1. - x)*(1. - z)*(1. - 2.*y);
1199 return 2.*(1. - x)*z*(1. - z)*(-1.);
1202 return 2.*x*z*(1. - z)*(-1.);
1205 return 2.*x*z*(1. - z);
1208 return 2.*(1. - x)*z*(1. - z);
1211 return 2.*x*(1. - x)*z*(-1.);
1214 return 2.*x*z*(1. - 2.*y);
1217 return 2.*x*(1. - x)*z;
1220 return 2.*(1. - x)*z*(1. - 2.*y);
1223 libmesh_error_msg(
"Invalid i = " << i);
1232 return .5*(1. - x)*(1. - y)*((1. - z)*(-2.) +
1233 (-1.)*(1. - 2.*x - 2.*y - 2.*z));
1236 return .5*x*(1. - y)*((1. - z)*(-2.) +
1237 (-1.)*(2.*x - 2.*y - 2.*z - 1.));
1240 return .5*x*y*((1. - z)*(-2.) +
1241 (-1.)*(2.*x + 2.*y - 2.*z - 3.));
1244 return .5*(1. - x)*y*((1. - z)*(-2.) +
1245 (-1.)*(2.*y - 2.*x - 2.*z - 1.));
1248 return .5*(1. - x)*(1. - y)*(z*(2.) +
1249 (1.)*(2.*z - 2.*x - 2.*y - 1.));
1252 return .5*x*(1. - y)*(z*(2.) +
1253 (1.)*(2.*x - 2.*y + 2.*z - 3.));
1256 return .5*x*y*(z*(2.) +
1257 (1.)*(2.*x + 2.*y + 2.*z - 5.));
1260 return .5*(1. - x)*y*(z*(2.) +
1261 (1.)*(2.*y - 2.*x + 2.*z - 3.));
1264 return 2.*x*(1. - x)*(1. - y)*(-1.);
1267 return 2.*x*y*(1. - y)*(-1.);
1270 return 2.*x*(1. - x)*y*(-1.);
1273 return 2.*(1. - x)*y*(1. - y)*(-1.);
1276 return 2.*(1. - x)*(1. - y)*(1. - 2.*z);
1279 return 2.*x*(1. - y)*(1. - 2.*z);
1282 return 2.*x*y*(1. - 2.*z);
1285 return 2.*(1. - x)*y*(1. - 2.*z);
1288 return 2.*x*(1. - x)*(1. - y);
1291 return 2.*x*y*(1. - y);
1294 return 2.*x*(1. - x)*y;
1297 return 2.*(1. - x)*y*(1. - y);
1300 libmesh_error_msg(
"Invalid i = " << i);
1304 libmesh_error_msg(
"Invalid shape function derivative j = " << j);
1311 libmesh_assert_less (i, 27);
1314 const Real xi = p(0);
1315 const Real eta = p(1);
1316 const Real zeta = p(2);
1322 static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 1, 0, 2, 1, 2, 0, 2, 2, 1, 2, 0, 2, 2};
1323 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 1, 0, 2, 1, 2, 2, 0, 2, 1, 2, 2, 2};
1324 static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1, 0, 2, 2, 2, 2, 1, 2};
1344 libmesh_error_msg(
"Invalid j = " << j);
1351 libmesh_assert_less (i, 10);
1354 const Real zeta1 = p(0);
1355 const Real zeta2 = p(1);
1356 const Real zeta3 = p(2);
1357 const Real zeta0 = 1. - zeta1 - zeta2 - zeta3;
1359 const Real dzeta0dxi = -1.;
1360 const Real dzeta1dxi = 1.;
1361 const Real dzeta2dxi = 0.;
1362 const Real dzeta3dxi = 0.;
1364 const Real dzeta0deta = -1.;
1365 const Real dzeta1deta = 0.;
1366 const Real dzeta2deta = 1.;
1367 const Real dzeta3deta = 0.;
1369 const Real dzeta0dzeta = -1.;
1370 const Real dzeta1dzeta = 0.;
1371 const Real dzeta2dzeta = 0.;
1372 const Real dzeta3dzeta = 1.;
1382 return (4.*zeta0 - 1.)*dzeta0dxi;
1385 return (4.*zeta1 - 1.)*dzeta1dxi;
1388 return (4.*zeta2 - 1.)*dzeta2dxi;
1391 return (4.*zeta3 - 1.)*dzeta3dxi;
1394 return 4.*(zeta0*dzeta1dxi + dzeta0dxi*zeta1);
1397 return 4.*(zeta1*dzeta2dxi + dzeta1dxi*zeta2);
1400 return 4.*(zeta0*dzeta2dxi + dzeta0dxi*zeta2);
1403 return 4.*(zeta0*dzeta3dxi + dzeta0dxi*zeta3);
1406 return 4.*(zeta1*dzeta3dxi + dzeta1dxi*zeta3);
1409 return 4.*(zeta2*dzeta3dxi + dzeta2dxi*zeta3);
1412 libmesh_error_msg(
"Invalid i = " << i);
1422 return (4.*zeta0 - 1.)*dzeta0deta;
1425 return (4.*zeta1 - 1.)*dzeta1deta;
1428 return (4.*zeta2 - 1.)*dzeta2deta;
1431 return (4.*zeta3 - 1.)*dzeta3deta;
1434 return 4.*(zeta0*dzeta1deta + dzeta0deta*zeta1);
1437 return 4.*(zeta1*dzeta2deta + dzeta1deta*zeta2);
1440 return 4.*(zeta0*dzeta2deta + dzeta0deta*zeta2);
1443 return 4.*(zeta0*dzeta3deta + dzeta0deta*zeta3);
1446 return 4.*(zeta1*dzeta3deta + dzeta1deta*zeta3);
1449 return 4.*(zeta2*dzeta3deta + dzeta2deta*zeta3);
1452 libmesh_error_msg(
"Invalid i = " << i);
1462 return (4.*zeta0 - 1.)*dzeta0dzeta;
1465 return (4.*zeta1 - 1.)*dzeta1dzeta;
1468 return (4.*zeta2 - 1.)*dzeta2dzeta;
1471 return (4.*zeta3 - 1.)*dzeta3dzeta;
1474 return 4.*(zeta0*dzeta1dzeta + dzeta0dzeta*zeta1);
1477 return 4.*(zeta1*dzeta2dzeta + dzeta1dzeta*zeta2);
1480 return 4.*(zeta0*dzeta2dzeta + dzeta0dzeta*zeta2);
1483 return 4.*(zeta0*dzeta3dzeta + dzeta0dzeta*zeta3);
1486 return 4.*(zeta1*dzeta3dzeta + dzeta1dzeta*zeta3);
1489 return 4.*(zeta2*dzeta3dzeta + dzeta2dzeta*zeta3);
1492 libmesh_error_msg(
"Invalid i = " << i);
1497 libmesh_error_msg(
"Invalid j = " << j);
1505 libmesh_assert_less (i, 15);
1507 const Real xi = p(0);
1508 const Real eta = p(1);
1509 const Real zeta = p(2);
1519 return (2.*xi + 2.*eta + 0.5*zeta - 1.)*(1. - zeta);
1521 return (2.*xi - 1. - 0.5*zeta)*(1. - zeta);
1525 return (2.*xi + 2.*eta - 0.5*zeta - 1.)*(1. + zeta);
1527 return (2.*xi - 1. + 0.5*zeta)*(1. + zeta);
1531 return (4.*xi + 2.*eta - 2.)*(zeta - 1.);
1533 return -2.*(zeta - 1.)*eta;
1535 return 2.*(zeta - 1.)*eta;
1537 return (zeta - 1.)*(1. + zeta);
1539 return (1. - zeta)*(1. + zeta);
1543 return (-4.*xi - 2.*eta + 2.)*(1. + zeta);
1545 return 2.*(1. + zeta)*eta;
1547 return -2.*(1. + zeta)*eta;
1549 libmesh_error_msg(
"Invalid i = " << i);
1559 return (2.*xi + 2.*eta + 0.5*zeta - 1.)*(1. - zeta);
1563 return (2.*eta - 1. - 0.5*zeta)*(1. - zeta);
1565 return (2.*xi + 2.*eta - 0.5*zeta - 1.)*(1. + zeta);
1569 return (2.*eta - 1. + 0.5*zeta)*(1. + zeta);
1571 return 2.*(zeta - 1.)*xi;
1573 return 2.*(1. - zeta)*xi;
1575 return (2.*xi + 4.*eta - 2.)*(zeta - 1.);
1577 return (zeta - 1.)*(1. + zeta);
1581 return (1. - zeta)*(1. + zeta);
1583 return -2.*(1. + zeta)*xi;
1585 return 2.*(1. + zeta)*xi;
1587 return (-2.*xi - 4.*eta + 2.)*(1. + zeta);
1590 libmesh_error_msg(
"Invalid i = " << i);
1600 return (-xi - eta - zeta + 0.5)*(xi + eta - 1.);
1602 return -0.5*xi*(2.*xi - 1. - 2.*zeta);
1604 return -0.5*eta*(2.*eta - 1. - 2.*zeta);
1606 return (xi + eta - zeta - 0.5)*(xi + eta - 1.);
1608 return 0.5*xi*(2.*xi - 1. + 2.*zeta);
1610 return 0.5*eta*(2.*eta - 1. + 2.*zeta);
1612 return 2.*xi*(xi + eta - 1.);
1616 return 2.*eta*(xi + eta - 1.);
1618 return 2.*zeta*(xi + eta - 1.);
1622 return -2.*eta*zeta;
1624 return 2.*xi*(1. - xi - eta);
1628 return 2.*eta*(1. - xi - eta);
1631 libmesh_error_msg(
"Invalid i = " << i);
1636 libmesh_error_msg(
"Invalid j = " << j);
1645 libmesh_assert_less (i, 18);
1650 Point p2d(p(0),p(1));
1654 static const unsigned int i0[] = {0, 0, 0, 1, 1, 1, 0, 0, 0, 2, 2, 2, 1, 1, 1, 2, 2, 2};
1655 static const unsigned int i1[] = {0, 1, 2, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 3, 4, 5};
1675 libmesh_error_msg(
"Invalid shape function derivative j = " << j);
1684 libmesh_assert_less (i, 13);
1686 const Real xi = p(0);
1687 const Real eta = p(1);
1688 const Real zeta = p(2);
1689 const Real eps = 1.e-35;
1694 den = (-1. + zeta + eps),
1708 return 0.25*(-zeta - eta + 2.*eta*zeta - 2.*xi + 2.*zeta*xi + 2.*eta*xi + zeta2 + eta2)/den;
1711 return -0.25*(-zeta - eta + 2.*eta*zeta + 2.*xi - 2.*zeta*xi - 2.*eta*xi + zeta2 + eta2)/den;
1714 return -0.25*(-zeta + eta - 2.*eta*zeta + 2.*xi - 2.*zeta*xi + 2.*eta*xi + zeta2 + eta2)/den;
1717 return 0.25*(-zeta + eta - 2.*eta*zeta - 2.*xi + 2.*zeta*xi - 2.*eta*xi + zeta2 + eta2)/den;
1723 return -(-1. + eta + zeta)*xi/den;
1726 return 0.5*(-1. + eta + zeta)*(1. + eta - zeta)/den;
1729 return (1. + eta - zeta)*xi/den;
1732 return -0.5*(-1. + eta + zeta)*(1. + eta - zeta)/den;
1735 return -(-1. + eta + zeta)*zeta/den;
1738 return (-1. + eta + zeta)*zeta/den;
1741 return -(1. + eta - zeta)*zeta/den;
1744 return (1. + eta - zeta)*zeta/den;
1747 libmesh_error_msg(
"Invalid i = " << i);
1755 return 0.25*(-zeta - 2.*eta + 2.*eta*zeta - xi + 2.*zeta*xi + 2.*eta*xi + zeta2 + xi2)/den;
1758 return -0.25*(zeta + 2.*eta - 2.*eta*zeta - xi + 2.*zeta*xi + 2.*eta*xi - zeta2 - xi2)/den;
1761 return -0.25*(-zeta + 2.*eta - 2.*eta*zeta + xi - 2.*zeta*xi + 2.*eta*xi + zeta2 + xi2)/den;
1764 return 0.25*(zeta - 2.*eta + 2.*eta*zeta + xi - 2.*zeta*xi + 2.*eta*xi - zeta2 - xi2)/den;
1770 return -0.5*(-1. + xi + zeta)*(1. + xi - zeta)/den;
1773 return (1. + xi - zeta)*eta/den;
1776 return 0.5*(-1. + xi + zeta)*(1. + xi - zeta)/den;
1779 return -(-1. + xi + zeta)*eta/den;
1782 return -(-1. + xi + zeta)*zeta/den;
1785 return (1. + xi - zeta)*zeta/den;
1788 return -(1. + xi - zeta)*zeta/den;
1791 return (-1. + xi + zeta)*zeta/den;
1794 libmesh_error_msg(
"Invalid i = " << i);
1803 return -0.25*(xi + eta + 1.)*(-1. + 2.*zeta - zeta2 + eta*xi)/den2;
1806 return 0.25*(eta - xi + 1.)*(1. - 2.*zeta + zeta2 + eta*xi)/den2;
1809 return 0.25*(xi + eta - 1.)*(-1. + 2.*zeta - zeta2 + eta*xi)/den2;
1812 return -0.25*(eta - xi - 1.)*(1. - 2.*zeta + zeta2 + eta*xi)/den2;
1815 return 4.*zeta - 1.;
1818 return 0.5*(-2 + eta + 6.*zeta + eta*xi2 + eta*zeta2 - 6.*zeta2 + 2.*zeta3 - 2.*eta*zeta)/den2;
1821 return -0.5*(2 - 6.*zeta + xi + xi*zeta2 + eta2*xi + 6.*zeta2 - 2.*zeta3 - 2.*zeta*xi)/den2;
1824 return -0.5*(2 + eta - 6.*zeta + eta*xi2 + eta*zeta2 + 6.*zeta2 - 2.*zeta3 - 2.*eta*zeta)/den2;
1827 return 0.5*(-2 + 6.*zeta + xi + xi*zeta2 + eta2*xi - 6.*zeta2 + 2.*zeta3 - 2.*zeta*xi)/den2;
1830 return (1. - eta - 4.*zeta - xi - xi*zeta2 - eta*zeta2 + eta*xi + 5.*zeta2 - 2.*zeta3 + 2.*eta*zeta + 2.*zeta*xi)/den2;
1833 return -(-1. + eta + 4.*zeta - xi - xi*zeta2 + eta*zeta2 + eta*xi - 5.*zeta2 + 2.*zeta3 - 2.*eta*zeta + 2.*zeta*xi)/den2;
1836 return (1. + eta - 4.*zeta + xi + xi*zeta2 + eta*zeta2 + eta*xi + 5.*zeta2 - 2.*zeta3 - 2.*eta*zeta - 2.*zeta*xi)/den2;
1839 return -(-1. - eta + 4.*zeta + xi + xi*zeta2 - eta*zeta2 + eta*xi - 5.*zeta2 + 2.*zeta3 + 2.*eta*zeta - 2.*zeta*xi)/den2;
1842 libmesh_error_msg(
"Invalid i = " << i);
1847 libmesh_error_msg(
"Invalid j = " << j);
1856 libmesh_assert_less (i, 14);
1858 const Real xi = p(0);
1859 const Real eta = p(1);
1860 const Real zeta = p(2);
1861 const Real eps = 1.e-35;
1866 p1 = 0.5*(1. - eta - zeta),
1867 p2 = 0.5*(1. + xi - zeta),
1868 p3 = 0.5*(1. + eta - zeta),
1869 p4 = 0.5*(1. - xi - zeta);
1874 den = (-1. + zeta + eps),
1885 return 0.5*p1*(-xi*eta + zeta - zeta*zeta + 2.*p4*eta)/den2;
1888 return -0.5*p1*(xi*eta + zeta - zeta*zeta + 2.*p2*eta)/den2;
1891 return 0.5*p3*(xi*eta - zeta + zeta*zeta + 2.*p2*eta)/den2;
1894 return -0.5*p3*(-xi*eta - zeta + zeta*zeta + 2.*p4*eta)/den2;
1900 return 2.*p1*eta*xi/den2;
1903 return 2.*p1*p3*(xi + 2.*p2)/den2;
1906 return -2.*p3*eta*xi/den2;
1909 return -2.*p1*p3*(-xi + 2.*p4)/den2;
1912 return 2.*p1*zeta/den;
1915 return -2.*p1*zeta/den;
1918 return -2.*p3*zeta/den;
1921 return 2.*p3*zeta/den;
1924 return -8.*p1*p3*xi/den2;
1927 libmesh_error_msg(
"Invalid i = " << i);
1935 return -0.5*p4*(xi*eta - zeta + zeta*zeta - 2.*p1*xi)/den2;
1938 return 0.5*p2*(xi*eta + zeta - zeta*zeta - 2.*p1*xi)/den2;
1941 return 0.5*p2*(xi*eta - zeta + zeta*zeta + 2.*p3*xi)/den2;
1944 return -0.5*p4*(xi*eta + zeta - zeta*zeta + 2.*p3*xi)/den2;
1950 return 2.*p2*p4*(eta - 2.*p1)/den2;
1953 return -2.*p2*xi*eta/den2;
1956 return 2.*p2*p4*(eta + 2.*p3)/den2;
1959 return 2.*p4*xi*eta/den2;
1962 return 2.*p4*zeta/den;
1965 return 2.*p2*zeta/den;
1968 return -2.*p2*zeta/den;
1971 return -2.*p4*zeta/den;
1974 return -8.*p2*p4*eta/den2;
1977 libmesh_error_msg(
"Invalid i = " << i);
1987 return -0.5*p1*(xi*eta - zeta + zeta*zeta)/den2
1988 - 0.5*p4*(xi*eta - zeta + zeta*zeta)/den2
1989 + p4*p1*(2.*zeta - 1)/den2
1990 - 2.*p4*p1*(xi*eta - zeta + zeta*zeta)/den3;
1993 return 0.5*p2*(xi*eta + zeta - zeta*zeta)/den2
1994 + 0.5*p1*(xi*eta + zeta - zeta*zeta)/den2
1995 - p1*p2*(1 - 2.*zeta)/den2
1996 + 2.*p1*p2*(xi*eta + zeta - zeta*zeta)/den3;
1999 return -0.5*p3*(xi*eta - zeta + zeta*zeta)/den2
2000 - 0.5*p2*(xi*eta - zeta + zeta*zeta)/den2
2001 + p2*p3*(2.*zeta - 1)/den2
2002 - 2.*p2*p3*(xi*eta - zeta + zeta*zeta)/den3;
2005 return 0.5*p4*(xi*eta + zeta - zeta*zeta)/den2
2006 + 0.5*p3*(xi*eta + zeta - zeta*zeta)/den2
2007 - p3*p4*(1 - 2.*zeta)/den2
2008 + 2.*p3*p4*(xi*eta + zeta - zeta*zeta)/den3;
2011 return 4.*zeta - 1.;
2014 return 2.*p4*p1*eta/den2
2017 + 8.*p2*p1*p4*eta/den3;
2020 return -2.*p2*p3*xi/den2
2023 - 8.*p1*p2*p3*xi/den3;
2026 return -2.*p3*p4*eta/den2
2029 - 8.*p2*p3*p4*eta/den3;
2032 return 2.*p4*p1*xi/den2
2035 + 8.*p3*p4*p1*xi/den3;
2038 return 2.*p4*zeta/den
2041 + 4.*p1*p4*zeta/den2;
2044 return 2.*p1*zeta/den
2047 + 4.*p2*p1*zeta/den2;
2050 return 2.*p2*zeta/den
2053 + 4.*p3*p2*zeta/den2;
2056 return 2.*p3*zeta/den
2059 + 4.*p4*p3*zeta/den2;
2062 return -8.*p2*p3*p4/den2
2066 - 32.*p1*p2*p3*p4/den3;
2069 libmesh_error_msg(
"Invalid i = " << i);
2074 libmesh_error_msg(
"Invalid j = " << j);
2080 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << type);
2087 libmesh_error_msg(
"ERROR: Unsupported 3D FE order!: " << order);
2090 #else // LIBMESH_DIM != 3
2092 libmesh_not_implemented();
2098 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
2100 Real fe_lagrange_3D_shape_second_deriv(
const ElemType type,
2102 const unsigned int i,
2103 const unsigned int j,
2106 #if LIBMESH_DIM == 3
2108 libmesh_assert_less (j, 6);
2132 libmesh_assert_less (i, 6);
2137 Point p2d(p(0),p(1));
2141 static const unsigned int i0[] = {0, 0, 0, 1, 1, 1};
2142 static const unsigned int i1[] = {0, 1, 2, 0, 1, 2};
2164 libmesh_error_msg(
"Invalid j = " << j);
2172 libmesh_assert_less (i, 5);
2174 const Real xi = p(0);
2175 const Real eta = p(1);
2176 const Real zeta = p(2);
2177 const Real eps = 1.e-35;
2192 return 0.25/(1. - zeta + eps);
2195 return -0.25/(1. - zeta + eps);
2199 libmesh_error_msg(
"Invalid i = " << i);
2205 Real den = (1. - zeta + eps)*(1. - zeta + eps);
2211 return 0.25*eta/den;
2214 return -0.25*eta/den;
2218 libmesh_error_msg(
"Invalid i = " << i);
2224 Real den = (1. - zeta + eps)*(1. - zeta + eps);
2233 return -0.25*xi/den;
2237 libmesh_error_msg(
"Invalid i = " << i);
2243 Real den = (1. - zeta + eps)*(1. - zeta + eps)*(1. - zeta + eps);
2249 return 0.5*xi*eta/den;
2252 return -0.5*xi*eta/den;
2256 libmesh_error_msg(
"Invalid i = " << i);
2261 libmesh_error_msg(
"Invalid j = " << j);
2270 libmesh_assert_less (i, 8);
2273 const Real xi = p(0);
2274 const Real eta = p(1);
2275 const Real zeta = p(2);
2277 static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
2278 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
2279 static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
2307 libmesh_error_msg(
"Invalid j = " << j);
2312 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << type);
2326 libmesh_assert_less (i, 20);
2328 const Real xi = p(0);
2329 const Real eta = p(1);
2330 const Real zeta = p(2);
2334 const Real x = .5*(xi + 1.);
2335 const Real y = .5*(eta + 1.);
2336 const Real z = .5*(zeta + 1.);
2346 return (1. - y) * (1. - z);
2349 return y * (1. - z);
2352 return (1. - y) * z;
2357 return -2. * (1. - y) * (1. - z);
2359 return -2. * y * (1. - z);
2361 return -2. * (1. - y) * z;
2374 libmesh_error_msg(
"Invalid i = " << i);
2382 return (1.25 - x - y - .5*z) * (1. - z);
2384 return (-x + y + .5*z - .25) * (1. - z);
2386 return (x + y - .5*z - .75) * (1. - z);
2388 return (-y + x + .5*z - .25) * (1. - z);
2390 return -.25*z * (4.*x + 4.*y - 2.*z - 3);
2392 return -.25*z * (-4.*y + 4.*x + 2.*z - 1.);
2394 return .25*z * (-5 + 4.*x + 4.*y + 2.*z);
2396 return .25*z * (4.*x - 4.*y - 2.*z + 1.);
2398 return (-1. + 2.*x) * (1. - z);
2400 return (1. - 2.*y) * (1. - z);
2402 return (1. - 2.*x) * (1. - z);
2404 return (-1. + 2.*y) * (1. - z);
2406 return z * (1. - z);
2408 return -z * (1. - z);
2410 return z * (1. - z);
2412 return -z * (1. - z);
2414 return (-1. + 2.*x) * z;
2416 return (1. - 2.*y) * z;
2418 return (1. - 2.*x) * z;
2420 return (-1. + 2.*y) * z;
2422 libmesh_error_msg(
"Invalid i = " << i);
2430 return (1. - x) * (1. - z);
2433 return x * (1. - z);
2436 return (1. - x) * z;
2441 return -2. * x * (1. - z);
2443 return -2. * (1. - x) * (1. - z);
2447 return -2. * (1. - x) * z;
2458 libmesh_error_msg(
"Invalid i = " << i);
2464 return (1.25 - x - .5*y - z) * (1. - y);
2466 return (-x + .5*y + z - .25) * (1. - y);
2468 return -.25*y * (2.*y + 4.*x - 4.*z - 1.);
2470 return -.25*y * (-2.*y + 4.*x + 4.*z - 3);
2472 return (-z + x + .5*y - .25) * (1. - y);
2474 return (x - .5*y + z - .75) * (1. - y);
2476 return .25*y * (2.*y + 4.*x + 4.*z - 5);
2478 return .25*y * (-2.*y + 4.*x - 4.*z + 1.);
2480 return (-1. + 2.*x) * (1. - y);
2482 return -y * (1. - y);
2484 return (-1. + 2.*x) * y;
2486 return y * (1. - y);
2488 return (-1. + 2.*z) * (1. - y);
2490 return (1. - 2.*z) * (1. - y);
2492 return (1. - 2.*z) * y;
2494 return (-1. + 2.*z) * y;
2496 return (1. - 2.*x) * (1. - y);
2498 return y * (1. - y);
2500 return (1. - 2.*x) * y;
2502 return -y * (1. - y);
2504 libmesh_error_msg(
"Invalid i = " << i);
2510 return (1.25 - .5*x - y - z) * (1. - x);
2512 return .25*x * (2.*x - 4.*y - 4.*z + 3.);
2514 return -.25*x * (2.*x + 4.*y - 4.*z - 1.);
2516 return (-y + .5*x + z - .25) * (1. - x);
2518 return (-z + .5*x + y - .25) * (1. - x);
2520 return -.25*x * (2.*x - 4.*y + 4.*z - 1.);
2522 return .25*x * (2.*x + 4.*y + 4.*z - 5);
2524 return (y - .5*x + z - .75) * (1. - x);
2526 return x * (1. - x);
2528 return (-1. + 2.*y) * x;
2530 return -x * (1. - x);
2532 return (-1. + 2.*y) * (1. - x);
2534 return (-1. + 2.*z) * (1. - x);
2536 return (-1. + 2.*z) * x;
2538 return (1. - 2.*z) * x;
2540 return (1. - 2.*z) * (1. - x);
2542 return -x * (1. - x);
2544 return (1. - 2.*y) * x;
2546 return x * (1. - x);
2548 return (1. - 2.*y) * (1. - x);
2550 libmesh_error_msg(
"Invalid i = " << i);
2557 return (1. - x) * (1. - y);
2560 return x * (1. - y);
2566 return (1. - x) * y;
2568 return -2. * (1. - x) * (1. - y);
2570 return -2. * x * (1. - y);
2574 return -2. * (1. - x) * y;
2585 libmesh_error_msg(
"Invalid i = " << i);
2588 libmesh_error_msg(
"Invalid j = " << j);
2595 libmesh_assert_less (i, 27);
2598 const Real xi = p(0);
2599 const Real eta = p(1);
2600 const Real zeta = p(2);
2606 static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 1, 0, 2, 1, 2, 0, 2, 2, 1, 2, 0, 2, 2};
2607 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 1, 0, 2, 1, 2, 2, 0, 2, 1, 2, 2, 2};
2608 static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1, 0, 2, 2, 2, 2, 1, 2};
2649 libmesh_error_msg(
"Invalid j = " << j);
2662 static const Real dzetadxi[4][3] =
2672 static const unsigned short int independent_var_indices[6][2] =
2686 static const unsigned short int zeta_indices[10][2] =
2701 const unsigned int my_j = independent_var_indices[j][0];
2702 const unsigned int my_k = independent_var_indices[j][1];
2706 return 4.*dzetadxi[i][my_j]*dzetadxi[i][my_k];
2711 const unsigned short int my_m = zeta_indices[i][0];
2712 const unsigned short int my_n = zeta_indices[i][1];
2714 return 4.*(dzetadxi[my_n][my_j]*dzetadxi[my_m][my_k] +
2715 dzetadxi[my_m][my_j]*dzetadxi[my_n][my_k] );
2718 libmesh_error_msg(
"Invalid shape function index " << i);
2726 libmesh_assert_less (i, 15);
2728 const Real xi = p(0);
2729 const Real eta = p(1);
2730 const Real zeta = p(2);
2741 return 2.*(1. - zeta);
2754 return 2.*(1. + zeta);
2756 return 4.*(zeta - 1);
2758 return -4.*(1. + zeta);
2760 libmesh_error_msg(
"Invalid i = " << i);
2771 return 2.*(1. - zeta);
2782 return 2.*(1. + zeta);
2785 return 2.*(zeta - 1.);
2788 return -2.*(1. + zeta);
2790 libmesh_error_msg(
"Invalid i = " << i);
2801 return 2.*(1. - zeta);
2814 return 2.*(1. + zeta);
2816 return 4.*(zeta - 1.);
2818 return -4.*(1. + zeta);
2820 libmesh_error_msg(
"Invalid i = " << i);
2830 return 1.5 - zeta - 2.*xi - 2.*eta;
2832 return 0.5 + zeta - 2.*xi;
2838 return -1.5 - zeta + 2.*xi + 2.*eta;
2840 return -0.5 + zeta + 2.*xi;
2842 return 4.*xi + 2.*eta - 2.;
2852 return -4.*xi - 2.*eta + 2.;
2858 libmesh_error_msg(
"Invalid i = " << i);
2868 return 1.5 - zeta - 2.*xi - 2.*eta;
2874 return .5 + zeta - 2.*eta;
2876 return -1.5 - zeta + 2.*xi + 2.*eta;
2878 return -.5 + zeta + 2.*eta;
2884 return 2.*xi + 4.*eta - 2.;
2894 return -2.*xi - 4.*eta + 2.;
2896 libmesh_error_msg(
"Invalid i = " << i);
2907 return 1. - xi - eta;
2922 return 2.*xi + 2.*eta - 2.;
2928 libmesh_error_msg(
"Invalid i = " << i);
2933 libmesh_error_msg(
"Invalid j = " << j);
2942 libmesh_assert_less (i, 18);
2947 Point p2d(p(0),p(1));
2951 static const unsigned int i0[] = {0, 0, 0, 1, 1, 1, 0, 0, 0, 2, 2, 2, 1, 1, 1, 2, 2, 2};
2952 static const unsigned int i1[] = {0, 1, 2, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 3, 4, 5};
2987 libmesh_error_msg(
"Invalid shape function derivative j = " << j);
2997 libmesh_assert_less (i, 14);
2999 const Real xi = p(0);
3000 const Real eta = p(1);
3001 const Real zeta = p(2);
3002 const Real eps = 1.e-35;
3007 p1 = 0.5*(1. - eta - zeta),
3008 p2 = 0.5*(1. + xi - zeta),
3009 p3 = 0.5*(1. + eta - zeta),
3010 p4 = 0.5*(1. - xi - zeta);
3015 den = (-1. + zeta + eps),
3022 numer_mp = xi*eta - zeta + zeta*zeta,
3023 numer_pm = xi*eta + zeta - zeta*zeta;
3033 return -p1*eta/den2;
3044 return 2.*p1*eta/den2;
3047 return 4.*p1*p3/den2;
3049 return -2.*p3*eta/den2;
3051 return -8.*p1*p3/den2;
3053 libmesh_error_msg(
"Invalid i = " << i);
3062 return 0.25*numer_mp/den2
3068 return 0.25*numer_pm/den2
3074 return 0.25*numer_mp/den2
3080 return 0.25*numer_pm/den2
3121 return 4.*p4*p1/den2
3127 libmesh_error_msg(
"Invalid i = " << i);
3150 return 4.*p2*p4/den2;
3152 return -2.*p2*xi/den2;
3154 return 2.*p4*xi/den2;
3156 return -8.*p2*p4/den2;
3158 libmesh_error_msg(
"Invalid i = " << i);
3168 return 0.25*numer_mp/den2
3169 - 0.5*p1*(2.*zeta - 1.)/den2
3173 - 2.*p4*p1*eta/den3;
3176 return 0.25*numer_pm/den2
3177 - 0.5*p1*(1 - 2.*zeta)/den2
3181 + 2.*p1*p2*eta/den3;
3184 return -0.25*numer_mp/den2
3185 + 0.5*p3*(2.*zeta - 1.)/den2
3189 - 2.*p2*p3*eta/den3;
3192 return -0.25*numer_pm/den2
3193 + 0.5*p3*(1 - 2.*zeta)/den2
3197 + 2.*p3*p4*eta/den3;
3206 - 4.*p1*p2*eta/den3;
3221 + 4.*p2*p3*eta/den3;
3253 return -4.*p4*p1/den2
3258 + 16.*p1*p2*p3/den3;
3261 libmesh_error_msg(
"Invalid i = " << i);
3270 return 0.25*numer_mp/den2
3271 - 0.5*p4*(2.*zeta - 1.)/den2
3278 return -0.25*numer_pm/den2
3279 + 0.5*p2*(1. - 2.*zeta)/den2
3286 return -0.25*numer_mp/den2
3287 + 0.5*p2*(2.*zeta - 1.)/den2
3294 return 0.25*numer_pm/den2
3295 - 0.5*p4*(1. - 2.*zeta)/den2
3355 return 4.*p3*p4/den2
3360 - 16.*p2*p1*p4/den3;
3363 libmesh_error_msg(
"Invalid i = " << i);
3372 return 0.5*numer_mp/den2
3373 - p1*(2.*zeta - 1.)/den2
3374 + 2.*p1*numer_mp/den3
3375 - p4*(2.*zeta - 1.)/den2
3376 + 2.*p4*numer_mp/den3
3378 - 4.*p4*p1*(2.*zeta - 1.)/den3
3379 + 6.*p4*p1*numer_mp/den4;
3382 return -0.5*numer_pm/den2
3383 + p2*(1 - 2.*zeta)/den2
3384 - 2.*p2*numer_pm/den3
3385 + p1*(1 - 2.*zeta)/den2
3386 - 2.*p1*numer_pm/den3
3388 + 4.*p1*p2*(1 - 2.*zeta)/den3
3389 - 6.*p1*p2*numer_pm/den4;
3392 return 0.5*numer_mp/den2
3393 - p3*(2.*zeta - 1.)/den2
3394 + 2.*p3*numer_mp/den3
3395 - p2*(2.*zeta - 1.)/den2
3396 + 2.*p2*numer_mp/den3
3398 - 4.*p2*p3*(2.*zeta - 1.)/den3
3399 + 6.*p2*p3*numer_mp/den4;
3402 return -0.5*numer_pm/den2
3403 + p4*(1 - 2.*zeta)/den2
3404 - 2.*p4*numer_pm/den3
3405 + p3*(1 - 2.*zeta)/den2
3406 - 2.*p3*numer_pm/den3
3408 + 4.*p3*p4*(1 - 2.*zeta)/den3
3409 - 6.*p3*p4*numer_pm/den4;
3415 return -2.*p1*eta/den2
3421 - 24.*p2*p1*p4*eta/den4;
3424 return 2.*p3*xi/den2
3430 + 24.*p1*p2*p3*xi/den4;
3433 return 2.*p4*eta/den2
3439 + 24.*p2*p3*p4*eta/den4;
3442 return -2.*p1*xi/den2
3448 - 24.*p3*p4*p1*xi/den4;
3457 - 8.*p1*p4*zeta/den3;
3466 - 8.*p2*p1*zeta/den3;
3475 - 8.*p3*p2*zeta/den3;
3484 - 8.*p4*p3*zeta/den3;
3487 return 8.*p3*p4/den2
3497 + 96.*p1*p2*p3*p4/den4;
3500 libmesh_error_msg(
"Invalid i = " << i);
3505 libmesh_error_msg(
"Invalid j = " << j);
3514 libmesh_assert_less (i, 13);
3516 const Real xi = p(0);
3517 const Real eta = p(1);
3518 const Real zeta = p(2);
3519 const Real eps = 1.e-35;
3524 den = (-1. + zeta + eps),
3540 return 0.5*(-1. + zeta + eta)/den;
3544 return 0.5*(-1. + zeta - eta)/den;
3556 return (1. - eta - zeta)/den;
3559 return (1. + eta - zeta)/den;
3562 libmesh_error_msg(
"Invalid i = " << i);
3571 return 0.25*(-1. + 2.*zeta + 2.*xi + 2.*eta)/den;
3574 return -0.25*(-1. + 2.*zeta - 2.*xi + 2.*eta)/den;
3577 return -0.25*(1. - 2.*zeta + 2.*xi + 2.*eta)/den;
3580 return 0.25*(1. - 2.*zeta - 2.*xi + 2.*eta)/den;
3610 libmesh_error_msg(
"Invalid i = " << i);
3621 return 0.5*(-1. + zeta + xi)/den;
3625 return 0.5*(-1. + zeta - xi)/den;
3637 return (1. + xi - zeta)/den;
3640 return (1. - xi - zeta)/den;
3643 libmesh_error_msg(
"Invalid i = " << i);
3653 return -0.25*(-1. + 2.*zeta - zeta2 + eta + 2.*eta*xi + eta2)/den2;
3656 return 0.25*(-1. + 2.*zeta - zeta2 + eta - 2.*eta*xi + eta2)/den2;
3659 return 0.25*(-1. + 2.*zeta - zeta2 - eta + 2.*eta*xi + eta2)/den2;
3662 return -0.25*(-1. + 2.*zeta - zeta2 - eta - 2.*eta*xi + eta2)/den2;
3671 return -0.5*(1. + zeta2 + eta2 - 2.*zeta)/den2;
3674 return -eta*xi/den2;
3677 return 0.5*(1. + zeta2 + eta2 - 2.*zeta)/den2;
3680 return (-1. - zeta2 + eta + 2.*zeta)/den2;
3683 return -(-1. - zeta2 + eta + 2.*zeta)/den2;
3686 return (1. + zeta2 + eta - 2.*zeta)/den2;
3689 return -(1. + zeta2 + eta - 2.*zeta)/den2;
3692 libmesh_error_msg(
"Invalid i = " << i);
3701 return -0.25*(-1. + 2.*zeta - zeta2 + xi + 2.*eta*xi + xi2)/den2;
3704 return 0.25*(1. - 2.*zeta + zeta2 + xi + 2.*eta*xi - xi2)/den2;
3707 return 0.25*(-1. + 2.*zeta - zeta2 - xi + 2.*eta*xi + xi2)/den2;
3710 return -0.25*(1. - 2.*zeta + zeta2 - xi + 2.*eta*xi - xi2)/den2;
3716 return 0.5*(1. + xi2 + zeta2 - 2.*zeta)/den2;
3719 return -eta*xi/den2;
3722 return -0.5*(1. + xi2 + zeta2 - 2.*zeta)/den2;
3728 return (-1. - zeta2 + xi + 2.*zeta)/den2;
3731 return -(1. + zeta2 + xi - 2.*zeta)/den2;
3734 return (1. + zeta2 + xi - 2.*zeta)/den2;
3737 return -(-1. - zeta2 + xi + 2.*zeta)/den2;
3740 libmesh_error_msg(
"Invalid i = " << i);
3749 return 0.5*(xi + eta + 1.)*eta*xi/den3;
3752 return -0.5*(eta - xi + 1.)*eta*xi/den3;
3755 return -0.5*(xi + eta - 1.)*eta*xi/den3;
3758 return 0.5*(eta - xi - 1.)*eta*xi/den3;
3764 return -(1. - 3.*zeta + 3.*zeta2 - zeta3 + eta*xi2)/den3;
3767 return (-1. + 3.*zeta - 3.*zeta2 + zeta3 + eta2*xi)/den3;
3770 return (-1. + 3.*zeta - 3.*zeta2 + zeta3 + eta*xi2)/den3;
3773 return -(1. - 3.*zeta + 3.*zeta2 - zeta3 + eta2*xi)/den3;
3776 return -2.*(-1. + 3.*zeta - 3.*zeta2 + zeta3 + eta*xi)/den3;
3779 return 2.*(1. - 3.*zeta + 3.*zeta2 - zeta3 + eta*xi)/den3;
3782 return -2.*(-1. + 3.*zeta - 3.*zeta2 + zeta3 + eta*xi)/den3;
3785 return 2.*(1. - 3.*zeta + 3.*zeta2 - zeta3 + eta*xi)/den3;
3788 libmesh_error_msg(
"Invalid i = " << i);
3793 libmesh_error_msg(
"Invalid j = " << j);
3798 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << type);
3805 libmesh_error_msg(
"ERROR: Unsupported 3D FE order!: " << order);
3808 #else // LIBMESH_DIM != 3
3810 libmesh_not_implemented();
3814 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES