23 #include "libmesh/libmesh_config.h" 25 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES 27 #include "libmesh/fe.h" 28 #include "libmesh/elem.h" 40 const Order libmesh_dbg_var(order),
45 const Real xi2 = xi*xi;
50 libmesh_assert_less_equal (order,
SEVENTH);
65 case 0:
return 1./2.-1./2.*xi;
66 case 1:
return 1./2.+1./2.*xi;
67 case 2:
return 1./4. *2.4494897427831780982*(xi2-1.);
68 case 3:
return 1./4. *3.1622776601683793320*(xi2-1.)*xi;
69 case 4:
return 1./16. *3.7416573867739413856*((5.*xi2-6.)*xi2+1.);
70 case 5:
return 3./16. *1.4142135623730950488*(3.+(-10.+7.*xi2)*xi2)*xi;
71 case 6:
return 1./32. *4.6904157598234295546*(-1.+(15.+(-35.+21.*xi2)*xi2)*xi2);
72 case 7:
return 1./32. *5.0990195135927848300*(-5.+(35.+(-63.+33.*xi2)*xi2)*xi2)*xi;
73 case 8:
return 1./256.*5.4772255750516611346*(5.+(-140.+(630.+(-924.+429.*xi2)*xi2)*xi2)*xi2);
76 libmesh_error_msg(
"Invalid shape function index!");
87 const bool add_p_level)
100 const bool add_p_level)
111 const Order libmesh_dbg_var(order),
112 const unsigned int i,
113 const unsigned int libmesh_dbg_var(j),
117 libmesh_assert_equal_to (j, 0);
119 const Real xi = p(0);
120 const Real xi2 = xi*xi;
124 libmesh_assert_less_equal (order,
SEVENTH);
138 case 0:
return -1./2.;
140 case 2:
return 1./2.*2.4494897427831780982*xi;
141 case 3:
return -1./4.*3.1622776601683793320+3./4.*3.1622776601683793320*xi2;
142 case 4:
return 1./16.*3.7416573867739413856*(-12.+20*xi2)*xi;
143 case 5:
return 9./16.*1.4142135623730950488+(-45./8.*1.4142135623730950488+105./16.*1.4142135623730950488*xi2)*xi2;
144 case 6:
return 1./32.*4.6904157598234295546*(30.+(-140.+126.*xi2)*xi2)*xi;
145 case 7:
return -5./32.*5.0990195135927848300+(105./32.*5.0990195135927848300+(-315./32.*5.0990195135927848300+231./32.*5.0990195135927848300*xi2)*xi2)*xi2;
146 case 8:
return 1./256.*5.4772255750516611346*(-280.+(2520.+(-5544.+3432.*xi2)*xi2)*xi2)*xi;
149 libmesh_error_msg(
"Invalid shape function index!");
158 const unsigned int i,
159 const unsigned int j,
161 const bool add_p_level)
166 order + add_p_level*elem->
p_level(), i, j, p);
174 const unsigned int i,
175 const unsigned int j,
177 const bool add_p_level)
188 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 197 static bool warning_given =
false;
200 libMesh::err <<
"Second derivatives for Szabab elements " 201 <<
" are not yet implemented!" 204 warning_given =
true;
218 static bool warning_given =
false;
221 libMesh::err <<
"Second derivatives for Szabab elements " 222 <<
" are not yet implemented!" 225 warning_given =
true;
233 const unsigned int i,
234 const unsigned int j,
236 const bool add_p_level)
253 #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.
LIBMESH_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
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)