20 #include "libmesh/fe.h" 21 #include "libmesh/elem.h" 22 #include "libmesh/enum_to_string.h" 34 const bool add_p_level)
39 const Order total_order =
static_cast<Order>(order + add_p_level * elem->
p_level());
51 libmesh_assert_less (i, 4);
54 const Real eta = p(1);
59 libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*
TOLERANCE );
60 libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*
TOLERANCE );
95 libmesh_error_msg(
"Invalid i = " << i);
104 const Real xi = p(0);
105 const Real eta = p(1);
107 libmesh_assert_less (i, 3);
135 libmesh_error_msg(
"Invalid i = " << i);
146 libmesh_error_msg(
"ERROR: Unsupported 2D FE order!: " << total_order);
148 #else // LIBMESH_DIM > 1 150 libmesh_not_implemented();
163 libmesh_error_msg(
"Nedelec elements require the element type \nbecause edge orientation is needed.");
171 const unsigned int i,
173 const bool add_p_level)
181 const unsigned int i,
182 const unsigned int j,
184 const bool add_p_level)
188 libmesh_assert_less (j, 2);
190 const Order total_order =
static_cast<Order>(order + add_p_level * elem->
p_level());
197 switch (elem->
type())
202 libmesh_assert_less (i, 4);
229 libmesh_error_msg(
"Invalid i = " << i);
256 libmesh_error_msg(
"Invalid i = " << i);
261 libmesh_error_msg(
"Invalid j = " << j);
270 libmesh_assert_less (i, 3);
296 libmesh_error_msg(
"Invalid i = " << i);
312 libmesh_error_msg(
"Invalid j = " << j);
322 libmesh_error_msg(
"ERROR: Unsupported 2D FE order!: " << total_order);
324 #else // LIBMESH_DIM > 1 326 libmesh_not_implemented();
339 libmesh_error_msg(
"Nedelec elements require the element type \nbecause edge orientation is needed.");
346 const unsigned int i,
347 const unsigned int j,
349 const bool add_p_level)
358 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 363 const unsigned int libmesh_dbg_var(i),
364 const unsigned int libmesh_dbg_var(j),
366 const bool add_p_level)
374 libmesh_assert_less (j, 3);
376 const Order total_order =
static_cast<Order>(order + add_p_level * elem->
p_level());
383 switch (elem->
type())
388 libmesh_assert_less (i, 4);
396 libmesh_assert_less (i, 3);
409 libmesh_error_msg(
"ERROR: Unsupported 2D FE order!: " << total_order);
413 #else // LIBMESH_DIM > 1 416 libmesh_not_implemented();
429 libmesh_error_msg(
"Nedelec elements require the element type \nbecause edge orientation is needed.");
437 const unsigned int i,
438 const unsigned int j,
440 const bool add_p_level)
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
ElemType
Defines an enum for geometric element types.
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
static constexpr Real TOLERANCE
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.
void libmesh_ignore(const Args &...)
std::string enum_to_string(const T e)
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.
const Point & point(const unsigned int i) const
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)