20#include "libmesh/fe.h"
21#include "libmesh/elem.h"
22#include "libmesh/utility.h"
33 const Order libmesh_dbg_var(order),
38 const Order libmesh_dbg_var(order),
40 const unsigned int libmesh_dbg_var(j),
43#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
46 const Order libmesh_dbg_var(order),
48 const unsigned int libmesh_dbg_var(j),
72 return fe_hierarchic_1D_shape(elem_type, order, i, p);
83 return fe_hierarchic_1D_shape(elem_type, order, i, p);
94 unsigned int right_side = p(0) > 0;
95 return (right_side == i);
103 const unsigned int i,
105 const bool add_p_level)
109 return fe_hierarchic_1D_shape(elem->
type(), order + add_p_level*elem->
p_level(), i, p);
117 const unsigned int i,
119 const bool add_p_level)
122 return fe_hierarchic_1D_shape(elem->
type(), fet.
order + add_p_level*elem->
p_level(), i, p);
132 const unsigned int i,
134 const bool add_p_level)
138 return fe_hierarchic_1D_shape(elem->
type(), order + add_p_level*elem->
p_level(), i, p);
144 const unsigned int i,
146 const bool add_p_level)
149 return fe_hierarchic_1D_shape(elem->
type(), fet.
order + add_p_level*elem->
p_level(), i, p);
157 const unsigned int i,
161 unsigned int right_side = p(0) > 0;
162 return (right_side == i);
168 const unsigned int i,
172 unsigned int right_side = p(0) > 0;
173 return (right_side == i);
180 const unsigned int i,
181 const unsigned int j,
184 return fe_hierarchic_1D_shape_deriv(elem_type, order, i, j, p);
192 const unsigned int i,
193 const unsigned int j,
196 return fe_hierarchic_1D_shape_deriv(elem_type, order, i, j, p);
216 const unsigned int i,
217 const unsigned int j,
219 const bool add_p_level)
223 return fe_hierarchic_1D_shape_deriv(elem->
type(),
224 order + add_p_level*elem->
p_level(), i, j, p);
232 const unsigned int i,
233 const unsigned int j,
235 const bool add_p_level)
238 return fe_hierarchic_1D_shape_deriv(elem->
type(), fet.
order + add_p_level*elem->
p_level(), i, j, p);
247 const unsigned int i,
248 const unsigned int j,
250 const bool add_p_level)
254 return fe_hierarchic_1D_shape_deriv(elem->
type(),
255 order + add_p_level*elem->
p_level(), i, j, p);
263 const unsigned int i,
264 const unsigned int j,
266 const bool add_p_level)
269 return fe_hierarchic_1D_shape_deriv(elem->
type(), fet.
order + add_p_level*elem->
p_level(), i, j, p);
299#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
304 const unsigned int i,
305 const unsigned int j,
308 return fe_hierarchic_1D_shape_second_deriv(elem_type, order, i, j, p);
317 const unsigned int i,
318 const unsigned int j,
321 return fe_hierarchic_1D_shape_second_deriv(elem_type, order, i, j, p);
341 const unsigned int i,
342 const unsigned int j,
344 const bool add_p_level)
348 return fe_hierarchic_1D_shape_second_deriv(elem->
type(),
349 order + add_p_level*elem->
p_level(), i, j, p);
357 const unsigned int i,
358 const unsigned int j,
360 const bool add_p_level)
363 return fe_hierarchic_1D_shape_second_deriv(elem->
type(),
371 const unsigned int i,
372 const unsigned int j,
374 const bool add_p_level)
378 return fe_hierarchic_1D_shape_second_deriv(elem->
type(),
379 order + add_p_level*elem->
p_level(), i, j, p);
386 const unsigned int i,
387 const unsigned int j,
389 const bool add_p_level)
392 return fe_hierarchic_1D_shape_second_deriv(elem->
type(),
432 const unsigned int i,
435 libmesh_assert_less (i, order+1u);
438 libmesh_error_msg_if (order <= 0,
439 "HIERARCHIC FE families do not support p=0");
445 const Real xi = p(0);
452 returnval = .5*(1. - xi);
455 returnval = .5*(1. + xi);
460 returnval = (xi*xi - 1.)/2.;
463 returnval = (pow<4>(xi) - 1.)/24.;
466 returnval = (pow<6>(xi) - 1.)/720.;
472 returnval = (xi*xi*xi - xi)/6.;
475 returnval = (pow<5>(xi) - xi)/120.;
478 returnval = (pow<7>(xi) - xi)/5040.;
481 Real denominator = 1.;
482 for (
unsigned int n=1; n <= i; ++n)
489 returnval = (returnval - xi)/denominator;
492 returnval = (returnval - 1.)/denominator;
503 const unsigned int i,
504 const unsigned int libmesh_dbg_var(j),
508 libmesh_assert_equal_to (j, 0);
509 libmesh_assert_less (i, order+1u);
512 libmesh_error_msg_if (order <= 0,
513 "HIERARCHIC FE families do not support p=0");
519 const Real xi = p(0);
537 returnval = pow<3>(xi)/6.;
540 returnval = pow<5>(xi)/120.;
545 returnval = (3*xi*xi - 1.)/6.;
548 returnval = (5.*pow<4>(xi) - 1.)/120.;
551 returnval = (7.*pow<6>(xi) - 1.)/5040.;
554 Real denominator = 1.;
555 for (
unsigned int n=1; n != i; ++n)
562 returnval = (i * returnval - 1.)/denominator/i;
565 returnval = returnval/denominator;
574#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
578 const unsigned int i,
579 const unsigned int libmesh_dbg_var(j),
583 libmesh_assert_equal_to (j, 0);
584 libmesh_assert_less (i, order+1u);
587 libmesh_error_msg_if (order <= 0,
588 "HIERARCHIC FE families do not support p=0");
594 const Real xi = p(0);
613 returnval = pow<2>(xi)/2.;
616 returnval = pow<3>(xi)/6.;
619 returnval = pow<4>(xi)/24.;
622 returnval = pow<5>(xi)/120.;
626 Real denominator = 1.;
627 for (
unsigned int n=1; n != i; ++n)
634 returnval = (i * returnval - 1.)/denominator/i;
637 returnval = returnval/denominator;
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.
The libMesh namespace provides an interface to certain functionality in the library.
LIBMESH_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
ElemType
Defines an enum for geometric element types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real