20#include "libmesh/fe.h"
21#include "libmesh/elem.h"
22#include "libmesh/fe_lagrange_shape_1D.h"
23#include "libmesh/enum_to_string.h"
24#include "libmesh/face_c0polygon.h"
48#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
51Real fe_lagrange_2D_shape_second_deriv(
const ElemType type,
78 return fe_lagrange_2D_shape<LAGRANGE>(type,
nullptr, order, i, p);
89 return fe_lagrange_2D_shape<L2_LAGRANGE>(type,
nullptr, order, i, p);
98 const bool add_p_level)
103 return fe_lagrange_2D_shape<LAGRANGE>(elem->
type(), elem, order + add_p_level*elem->
p_level(), i, p);
111 const unsigned int i,
113 const bool add_p_level)
118 return fe_lagrange_2D_shape<L2_LAGRANGE>(elem->
type(), elem, order + add_p_level*elem->
p_level(), i, p);
125 const unsigned int i,
127 const bool add_p_level)
130 return fe_lagrange_2D_shape<LAGRANGE>(elem->
type(), elem, fet.
order + add_p_level*elem->
p_level(), i, p);
138 const unsigned int i,
140 const bool add_p_level)
143 return fe_lagrange_2D_shape<L2_LAGRANGE>(elem->
type(), elem, fet.
order + add_p_level*elem->
p_level(), i, p);
150 const unsigned int i,
151 const unsigned int j,
154 return fe_lagrange_2D_shape_deriv<LAGRANGE>(type,
nullptr, order, i, j, p);
162 const unsigned int i,
163 const unsigned int j,
166 return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(type,
nullptr, order, i, j, p);
174 const unsigned int i,
175 const unsigned int j,
177 const bool add_p_level)
182 return fe_lagrange_2D_shape_deriv<LAGRANGE>(elem->
type(), elem, order + add_p_level*elem->
p_level(), i, j, p);
190 const unsigned int i,
191 const unsigned int j,
193 const bool add_p_level)
198 return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(elem->
type(), elem, order + add_p_level*elem->
p_level(), i, j, p);
205 const unsigned int i,
206 const unsigned int j,
208 const bool add_p_level)
211 return fe_lagrange_2D_shape_deriv<LAGRANGE>(elem->
type(), elem, fet.
order + add_p_level*elem->
p_level(), i, j, p);
219 const unsigned int i,
220 const unsigned int j,
222 const bool add_p_level)
225 return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(elem->
type(), elem, fet.
order + add_p_level*elem->
p_level(), i, j, p);
230#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
235 const unsigned int i,
236 const unsigned int j,
239 return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(type,
nullptr, order, i, j, p);
247 const unsigned int i,
248 const unsigned int j,
251 return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(type,
nullptr, order, i, j, p);
259 const unsigned int i,
260 const unsigned int j,
262 const bool add_p_level)
267 return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(elem->
type(), elem, order + add_p_level*elem->
p_level(), i, j, p);
275 const unsigned int i,
276 const unsigned int j,
278 const bool add_p_level)
283 return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(elem->
type(), elem, order + add_p_level*elem->
p_level(), i, j, p);
290 const unsigned int i,
291 const unsigned int j,
293 const bool add_p_level)
296 return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(elem->
type(), elem, fet.
order + add_p_level*elem->
p_level(), i, j, p);
304 const unsigned int i,
305 const unsigned int j,
307 const bool add_p_level)
310 return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(elem->
type(), elem, fet.
order + add_p_level*elem->
p_level(), i, j, p);
329 const unsigned int i,
349 const Real xi = p(0);
350 const Real eta = p(1);
352 libmesh_assert_less (i, 4);
355 static const unsigned int i0[] = {0, 1, 1, 0};
356 static const unsigned int i1[] = {0, 0, 1, 1};
367 const Real zeta1 = p(0);
368 const Real zeta2 = p(1);
369 const Real zeta0 = 1. - zeta1 - zeta2;
371 libmesh_assert_less (i, 3);
385 libmesh_error_msg(
"Invalid shape function index i = " << i);
393 libmesh_error_msg(
"Code (see stack trace) used an outdated FE function overload.\n"
394 "Shape functions on a C0Polygon are not defined by its ElemType alone.");
398 const C0Polygon & poly = *cast_ptr<const C0Polygon *>(elem);
412 if (nodei == subtri[0])
414 if (nodei == subtri[1])
416 if (nodei == subtri[2])
437 const Real xi = p(0);
438 const Real eta = p(1);
440 libmesh_assert_less (i, 8);
445 return .25*(1. - xi)*(1. - eta)*(-1. - xi - eta);
448 return .25*(1. + xi)*(1. - eta)*(-1. + xi - eta);
451 return .25*(1. + xi)*(1. + eta)*(-1. + xi + eta);
454 return .25*(1. - xi)*(1. + eta)*(-1. - xi + eta);
457 return .5*(1. - xi*xi)*(1. - eta);
460 return .5*(1. + xi)*(1. - eta*eta);
463 return .5*(1. - xi*xi)*(1. + eta);
466 return .5*(1. - xi)*(1. - eta*eta);
469 libmesh_error_msg(
"Invalid shape function index i = " << i);
475 "High order on first order elements only supported for L2 families");
476 libmesh_fallthrough();
482 const Real xi = p(0);
483 const Real eta = p(1);
485 libmesh_assert_less (i, 9);
488 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
489 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
497 "High order on first order elements only supported for L2 families");
498 libmesh_fallthrough();
502 const Real zeta1 = p(0);
503 const Real zeta2 = p(1);
504 const Real zeta0 = 1. - zeta1 - zeta2;
506 libmesh_assert_less (i, 6);
511 return 2.*zeta0*(zeta0-0.5);
514 return 2.*zeta1*(zeta1-0.5);
517 return 2.*zeta2*(zeta2-0.5);
520 return 4.*zeta0*zeta1;
523 return 4.*zeta1*zeta2;
526 return 4.*zeta2*zeta0;
529 libmesh_error_msg(
"Invalid shape function index i = " << i);
547 const Real zeta1 = p(0);
548 const Real zeta2 = p(1);
549 const Real zeta0 = 1. - zeta1 - zeta2;
550 const Real bubble_27th = zeta0*zeta1*zeta2;
552 libmesh_assert_less (i, 7);
557 return 2.*zeta0*(zeta0-0.5) + 3.*bubble_27th;
560 return 2.*zeta1*(zeta1-0.5) + 3.*bubble_27th;
563 return 2.*zeta2*(zeta2-0.5) + 3.*bubble_27th;
566 return 4.*zeta0*zeta1 - 12.*bubble_27th;
569 return 4.*zeta1*zeta2 - 12.*bubble_27th;
572 return 4.*zeta2*zeta0 - 12.*bubble_27th;
575 return 27.*bubble_27th;
578 libmesh_error_msg(
"Invalid shape function index i = " << i);
591 libmesh_error_msg(
"ERROR: Unsupported 2D FE order: " << order);
595 libmesh_not_implemented();
605 const unsigned int i,
606 const unsigned int j,
611 libmesh_assert_less (j, 2);
628 const Real xi = p(0);
629 const Real eta = p(1);
631 libmesh_assert_less (i, 4);
634 static const unsigned int i0[] = {0, 1, 1, 0};
635 static const unsigned int i1[] = {0, 0, 1, 1};
650 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
659 libmesh_assert_less (i, 3);
661 const Real dzeta0dxi = -1.;
662 const Real dzeta1dxi = 1.;
663 const Real dzeta2dxi = 0.;
665 const Real dzeta0deta = -1.;
666 const Real dzeta1deta = 0.;
667 const Real dzeta2deta = 1.;
686 libmesh_error_msg(
"Invalid shape function index i = " << i);
704 libmesh_error_msg(
"Invalid shape function index i = " << i);
708 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
716 libmesh_error_msg(
"Code (see stack trace) used an outdated FE function overload.\n"
717 "Shape functions on a C0Polygon are not defined by its ElemType alone.");
721 const C0Polygon & poly = *cast_ptr<const C0Polygon *>(elem);
735 Real du_da = 0, du_db = 0;
739 if (nodei == subtri[0])
741 else if (nodei == subtri[1])
743 else if (nodei == subtri[2])
757 const Real dxi_da = master_points[1](0) - master_points[0](0);
758 const Real dxi_db = master_points[2](0) - master_points[0](0);
759 const Real deta_da = master_points[1](1) - master_points[0](1);
760 const Real deta_db = master_points[2](1) - master_points[0](1);
761 const Real jac = dxi_da*deta_db - dxi_db*deta_da;
768 const Real da_dxi = deta_db / jac;
769 const Real db_dxi = -deta_da / jac;
770 return du_da*da_dxi + du_db*db_dxi;
775 const Real da_deta = -dxi_db / jac;
776 const Real db_deta = dxi_da / jac;
777 return du_da*da_deta + du_db*db_deta;
780 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
798 const Real xi = p(0);
799 const Real eta = p(1);
801 libmesh_assert_less (i, 8);
810 return .25*(1. - eta)*((1. - xi)*(-1.) +
811 (-1.)*(-1. - xi - eta));
814 return .25*(1. - eta)*((1. + xi)*(1.) +
815 (1.)*(-1. + xi - eta));
818 return .25*(1. + eta)*((1. + xi)*(1.) +
819 (1.)*(-1. + xi + eta));
822 return .25*(1. + eta)*((1. - xi)*(-1.) +
823 (-1.)*(-1. - xi + eta));
826 return .5*(-2.*xi)*(1. - eta);
829 return .5*(1.)*(1. - eta*eta);
832 return .5*(-2.*xi)*(1. + eta);
835 return .5*(-1.)*(1. - eta*eta);
838 libmesh_error_msg(
"Invalid shape function index i = " << i);
846 return .25*(1. - xi)*((1. - eta)*(-1.) +
847 (-1.)*(-1. - xi - eta));
850 return .25*(1. + xi)*((1. - eta)*(-1.) +
851 (-1.)*(-1. + xi - eta));
854 return .25*(1. + xi)*((1. + eta)*(1.) +
855 (1.)*(-1. + xi + eta));
858 return .25*(1. - xi)*((1. + eta)*(1.) +
859 (1.)*(-1. - xi + eta));
862 return .5*(1. - xi*xi)*(-1.);
865 return .5*(1. + xi)*(-2.*eta);
868 return .5*(1. - xi*xi)*(1.);
871 return .5*(1. - xi)*(-2.*eta);
874 libmesh_error_msg(
"Invalid shape function index i = " << i);
878 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
884 "High order on first order elements only supported for L2 families");
885 libmesh_fallthrough();
890 const Real xi = p(0);
891 const Real eta = p(1);
893 libmesh_assert_less (i, 9);
896 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
897 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
912 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
918 "High order on first order elements only supported for L2 families");
919 libmesh_fallthrough();
923 libmesh_assert_less (i, 6);
925 const Real zeta1 = p(0);
926 const Real zeta2 = p(1);
927 const Real zeta0 = 1. - zeta1 - zeta2;
929 const Real dzeta0dxi = -1.;
930 const Real dzeta1dxi = 1.;
931 const Real dzeta2dxi = 0.;
933 const Real dzeta0deta = -1.;
934 const Real dzeta1deta = 0.;
935 const Real dzeta2deta = 1.;
944 return (4.*zeta0-1.)*dzeta0dxi;
947 return (4.*zeta1-1.)*dzeta1dxi;
950 return (4.*zeta2-1.)*dzeta2dxi;
953 return 4.*zeta1*dzeta0dxi + 4.*zeta0*dzeta1dxi;
956 return 4.*zeta2*dzeta1dxi + 4.*zeta1*dzeta2dxi;
959 return 4.*zeta2*dzeta0dxi + 4*zeta0*dzeta2dxi;
962 libmesh_error_msg(
"Invalid shape function index i = " << i);
971 return (4.*zeta0-1.)*dzeta0deta;
974 return (4.*zeta1-1.)*dzeta1deta;
977 return (4.*zeta2-1.)*dzeta2deta;
980 return 4.*zeta1*dzeta0deta + 4.*zeta0*dzeta1deta;
983 return 4.*zeta2*dzeta1deta + 4.*zeta1*dzeta2deta;
986 return 4.*zeta2*dzeta0deta + 4*zeta0*dzeta2deta;
989 libmesh_error_msg(
"Invalid shape function index i = " << i);
993 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1011 libmesh_assert_less (i, 7);
1013 const Real zeta1 = p(0);
1014 const Real zeta2 = p(1);
1015 const Real zeta0 = 1. - zeta1 - zeta2;
1018 const Real dzeta0dxi = -1.;
1019 const Real dzeta1dxi = 1.;
1020 const Real dzeta2dxi = 0.;
1021 const Real dbubbledxi = zeta2 * (1. - 2.*zeta1 - zeta2);
1023 const Real dzeta0deta = -1.;
1024 const Real dzeta1deta = 0.;
1025 const Real dzeta2deta = 1.;
1026 const Real dbubbledeta= zeta1 * (1. - zeta1 - 2.*zeta2);
1035 return (4.*zeta0-1.)*dzeta0dxi + 3.*dbubbledxi;
1038 return (4.*zeta1-1.)*dzeta1dxi + 3.*dbubbledxi;
1041 return (4.*zeta2-1.)*dzeta2dxi + 3.*dbubbledxi;
1044 return 4.*zeta1*dzeta0dxi + 4.*zeta0*dzeta1dxi - 12.*dbubbledxi;
1047 return 4.*zeta2*dzeta1dxi + 4.*zeta1*dzeta2dxi - 12.*dbubbledxi;
1050 return 4.*zeta2*dzeta0dxi + 4*zeta0*dzeta2dxi - 12.*dbubbledxi;
1053 return 27.*dbubbledxi;
1056 libmesh_error_msg(
"Invalid shape function index i = " << i);
1065 return (4.*zeta0-1.)*dzeta0deta + 3.*dbubbledeta;
1068 return (4.*zeta1-1.)*dzeta1deta + 3.*dbubbledeta;
1071 return (4.*zeta2-1.)*dzeta2deta + 3.*dbubbledeta;
1074 return 4.*zeta1*dzeta0deta + 4.*zeta0*dzeta1deta - 12.*dbubbledeta;
1077 return 4.*zeta2*dzeta1deta + 4.*zeta1*dzeta2deta - 12.*dbubbledeta;
1080 return 4.*zeta2*dzeta0deta + 4*zeta0*dzeta2deta - 12.*dbubbledeta;
1083 return 27.*dbubbledeta;
1086 libmesh_error_msg(
"Invalid shape function index i = " << i);
1090 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1103 libmesh_error_msg(
"ERROR: Unsupported 2D FE order: " << order);
1107 libmesh_not_implemented();
1113#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
1115template <FEFamily T>
1116Real fe_lagrange_2D_shape_second_deriv(
const ElemType type,
1119 const unsigned int i,
1120 const unsigned int j,
1128 libmesh_assert_less (j, 3);
1145 const Real xi = p(0);
1146 const Real eta = p(1);
1148 libmesh_assert_less (i, 4);
1151 static const unsigned int i0[] = {0, 1, 1, 0};
1152 static const unsigned int i1[] = {0, 0, 1, 1};
1170 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1203 const Real xi = p(0);
1204 const Real eta = p(1);
1206 libmesh_assert_less (j, 3);
1217 return 0.5*(1.-eta);
1221 return 0.5*(1.+eta);
1234 libmesh_error_msg(
"Invalid shape function index i = " << i);
1244 return 0.25*( 1. - 2.*xi - 2.*eta);
1247 return 0.25*(-1. - 2.*xi + 2.*eta);
1250 return 0.25*( 1. + 2.*xi + 2.*eta);
1253 return 0.25*(-1. + 2.*xi - 2.*eta);
1268 libmesh_error_msg(
"Invalid shape function index i = " << i);
1296 libmesh_error_msg(
"Invalid shape function index i = " << i);
1301 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1307 "High order on first order elements only supported for L2 families");
1308 libmesh_fallthrough();
1313 const Real xi = p(0);
1314 const Real eta = p(1);
1316 libmesh_assert_less (i, 9);
1319 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
1320 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
1340 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1346 "High order on first order elements only supported for L2 families");
1347 libmesh_fallthrough();
1351 const Real dzeta0dxi = -1.;
1352 const Real dzeta1dxi = 1.;
1353 const Real dzeta2dxi = 0.;
1355 const Real dzeta0deta = -1.;
1356 const Real dzeta1deta = 0.;
1357 const Real dzeta2deta = 1.;
1359 libmesh_assert_less (j, 3);
1369 return 4.*dzeta0dxi*dzeta0dxi;
1372 return 4.*dzeta1dxi*dzeta1dxi;
1375 return 4.*dzeta2dxi*dzeta2dxi;
1378 return 8.*dzeta0dxi*dzeta1dxi;
1381 return 8.*dzeta1dxi*dzeta2dxi;
1384 return 8.*dzeta0dxi*dzeta2dxi;
1387 libmesh_error_msg(
"Invalid shape function index i = " << i);
1397 return 4.*dzeta0dxi*dzeta0deta;
1400 return 4.*dzeta1dxi*dzeta1deta;
1403 return 4.*dzeta2dxi*dzeta2deta;
1406 return 4.*dzeta1deta*dzeta0dxi + 4.*dzeta0deta*dzeta1dxi;
1409 return 4.*dzeta2deta*dzeta1dxi + 4.*dzeta1deta*dzeta2dxi;
1412 return 4.*dzeta2deta*dzeta0dxi + 4.*dzeta0deta*dzeta2dxi;
1415 libmesh_error_msg(
"Invalid shape function index i = " << i);
1425 return 4.*dzeta0deta*dzeta0deta;
1428 return 4.*dzeta1deta*dzeta1deta;
1431 return 4.*dzeta2deta*dzeta2deta;
1434 return 8.*dzeta0deta*dzeta1deta;
1437 return 8.*dzeta1deta*dzeta2deta;
1440 return 8.*dzeta0deta*dzeta2deta;
1443 libmesh_error_msg(
"Invalid shape function index i = " << i);
1448 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1466 "High order on first order elements only supported for L2 families");
1467 libmesh_fallthrough();
1471 const Real zeta1 = p(0);
1472 const Real zeta2 = p(1);
1475 const Real dzeta0dxi = -1.;
1476 const Real dzeta1dxi = 1.;
1477 const Real dzeta2dxi = 0.;
1479 const Real d2bubbledxi2 = -2. * zeta2;
1481 const Real dzeta0deta = -1.;
1482 const Real dzeta1deta = 0.;
1483 const Real dzeta2deta = 1.;
1485 const Real d2bubbledeta2 = -2. * zeta1;
1487 const Real d2bubbledxideta = (1. - 2.*zeta1 - 2.*zeta2);
1489 libmesh_assert_less (j, 3);
1499 return 4.*dzeta0dxi*dzeta0dxi + 3.*d2bubbledxi2;
1502 return 4.*dzeta1dxi*dzeta1dxi + 3.*d2bubbledxi2;
1505 return 4.*dzeta2dxi*dzeta2dxi + 3.*d2bubbledxi2;
1508 return 8.*dzeta0dxi*dzeta1dxi - 12.*d2bubbledxi2;
1511 return 8.*dzeta1dxi*dzeta2dxi - 12.*d2bubbledxi2;
1514 return 8.*dzeta0dxi*dzeta2dxi - 12.*d2bubbledxi2;
1517 return 27.*d2bubbledxi2;
1520 libmesh_error_msg(
"Invalid shape function index i = " << i);
1530 return 4.*dzeta0dxi*dzeta0deta + 3.*d2bubbledxideta;
1533 return 4.*dzeta1dxi*dzeta1deta + 3.*d2bubbledxideta;
1536 return 4.*dzeta2dxi*dzeta2deta + 3.*d2bubbledxideta;
1539 return 4.*dzeta1deta*dzeta0dxi + 4.*dzeta0deta*dzeta1dxi - 12.*d2bubbledxideta;
1542 return 4.*dzeta2deta*dzeta1dxi + 4.*dzeta1deta*dzeta2dxi - 12.*d2bubbledxideta;
1545 return 4.*dzeta2deta*dzeta0dxi + 4.*dzeta0deta*dzeta2dxi - 12.*d2bubbledxideta;
1548 return 27.*d2bubbledxideta;
1551 libmesh_error_msg(
"Invalid shape function index i = " << i);
1561 return 4.*dzeta0deta*dzeta0deta + 3.*d2bubbledeta2;
1564 return 4.*dzeta1deta*dzeta1deta + 3.*d2bubbledeta2;
1567 return 4.*dzeta2deta*dzeta2deta + 3.*d2bubbledeta2;
1570 return 8.*dzeta0deta*dzeta1deta - 12.*d2bubbledeta2;
1573 return 8.*dzeta1deta*dzeta2deta - 12.*d2bubbledeta2;
1576 return 8.*dzeta0deta*dzeta2deta - 12.*d2bubbledeta2;
1579 return 27.*d2bubbledeta2;
1582 libmesh_error_msg(
"Invalid shape function index i = " << i);
1587 libmesh_error_msg(
"ERROR: Invalid derivative index j = " << j);
1598 libmesh_error_msg(
"ERROR: Unsupported 2D FE order: " << order);
1604 libmesh_not_implemented();
The C0Polygon is an element in 2D with an arbitrary (but fixed) number of first-order (EDGE2) sides.
This is the base class from which all geometric element types are derived.
virtual ElemType type() const =0
unsigned int p_level() const
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
OrderWrapper order
The approximation order of the element (at 0 p-refinement level).
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
A Point defines a location in LIBMESH_DIM dimensional Real space.
virtual std::array< Point, 3 > master_subtriangle(unsigned int i) const
virtual std::array< int, 3 > subtriangle(unsigned int i) const
unsigned int n_subtriangles() const
std::tuple< unsigned int, Real, Real > subtriangle_coordinates(const Point &p, Real tol=TOLERANCE *TOLERANCE) const
std::string enum_to_string(const T e)
The libMesh namespace provides an interface to certain functionality in the library.
Real fe_lagrange_1D_quadratic_shape(const unsigned int i, const Real xi)
LIBMESH_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
Real fe_lagrange_1D_quadratic_shape_second_deriv(const unsigned int i, const unsigned int libmesh_dbg_var(j), const Real)
Real fe_lagrange_1D_quadratic_shape_deriv(const unsigned int i, const unsigned int libmesh_dbg_var(j), const Real xi)
ElemType
Defines an enum for geometric element types.
void libmesh_ignore(const Args &...)
Real fe_lagrange_1D_linear_shape(const unsigned int i, const Real xi)
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
Real fe_lagrange_1D_linear_shape_deriv(const unsigned int i, const unsigned int libmesh_dbg_var(j), const Real)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real