libMesh
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
libMesh::FESubdivision Class Reference

#include <fe.h>

Inheritance diagram for libMesh::FESubdivision:
[legend]

Public Types

typedef FEGenericBase< typename FEOutputType< T >::type >::OutputShape OutputShape
 
typedef TensorTools::IncrementRank< OutputShape >::type OutputGradient
 
typedef TensorTools::IncrementRank< OutputGradient >::type OutputTensor
 
typedef TensorTools::DecrementRank< OutputShape >::type OutputDivergence
 
typedef TensorTools::MakeNumber< OutputShape >::type OutputNumber
 
typedef TensorTools::IncrementRank< OutputNumber >::type OutputNumberGradient
 
typedef TensorTools::IncrementRank< OutputNumberGradient >::type OutputNumberTensor
 
typedef TensorTools::DecrementRank< OutputNumber >::type OutputNumberDivergence
 

Public Member Functions

 FESubdivision (const FEType &fet)
 Constructor. More...
 
virtual void reinit (const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
 This is at the core of this class. More...
 
virtual void reinit (const Elem *, const unsigned int, const Real=TOLERANCE, const std::vector< Point > *const =nullptr, const std::vector< Real > *const =nullptr) override
 This prevents some compilers being confused by partially overriding this virtual function. More...
 
virtual void attach_quadrature_rule (QBase *q) override
 Provides the class with the quadrature rule, which provides the locations (on a reference element) where the shape functions are to be calculated. More...
 
virtual void init_shape_functions (const std::vector< Point > &qp, const Elem *elem) override
 Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc. More...
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 Subdivision finite elements. More...
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *libmesh_dbg_var(elem), const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *libmesh_dbg_var(elem), const unsigned int, const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const Point &p, const bool libmesh_dbg_var(add_p_level))
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int libmesh_dbg_var(i), const Point &)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int, const Point &, const bool)
 
Real shape (const ElemType elem_type, const Order order, const unsigned int i, const Point &p)
 
Real shape (const ElemType, const Order, const unsigned int i, const Point &p)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int i, const Point &p, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int i, const Point &p, const bool)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int libmesh_dbg_var(i), const Point &)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const ElemType, const Order order, const unsigned int i, const Point &p)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
Real shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealVectorValue shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealVectorValue shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealVectorValue shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
RealVectorValue shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealVectorValue shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealVectorValue shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealVectorValue shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const ElemType, const Order, const unsigned int, const Point &)
 
RealGradient shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
RealGradient shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int, const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int, const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int, const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int, const Point &, const bool)
 
Real shape (const ElemType type, const Order order, const unsigned int i, const Point &p)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const Elem *elem, const Order order, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const Elem *, const Order, const unsigned int, const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int, const Point &, const bool)
 
Real shape (const Elem *, const Order, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const FEType, const Elem *, const unsigned int libmesh_dbg_var(i), const Point &, const bool)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
Real shape (const ElemType, const Order, const unsigned int, const Point &)
 
Real shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
 
void shapes (const Elem *elem, const Order o, const unsigned int i, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level)
 
void shapes (const Elem *elem, const Order o, const unsigned int i, const std::vector< Point > &p, std::vector< OutputShape > &vi, const bool add_p_level)
 
void shapes (const Elem *elem, const Order o, const unsigned int i, const std::vector< Point > &p, std::vector< OutputShape > &vi, const bool add_p_level)
 
void shapes (const Elem *elem, const Order o, const unsigned int i, const std::vector< Point > &p, std::vector< OutputShape > &vi, const bool add_p_level)
 
void all_shapes (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> &v, const bool add_p_level)
 
void all_shapes (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> &v, const bool add_p_level)
 
void all_shapes (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> &v, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order order, const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *libmesh_dbg_var(elem), const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *libmesh_dbg_var(elem), const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int, const Point &p, const bool libmesh_dbg_var(add_p_level))
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType elem_type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const ElemType elem_type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const ElemType, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &, const bool add_p_level)
 
RealGradient shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &p)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &point_in, const bool libmesh_dbg_var(add_p_level))
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &point_in, const bool libmesh_dbg_var(add_p_level))
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &point_in, const bool libmesh_dbg_var(add_p_level))
 
Real shape_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
void shape_derivs (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level)
 
void shape_derivs (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level)
 
void shape_derivs (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level)
 
void shape_derivs (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level)
 
void all_shape_derivs (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> *comps[3], const bool add_p_level)
 
void all_shape_derivs (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< Real >> *comps[3], const bool add_p_level)
 
void all_shape_derivs (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< Real >> *comps[3], const bool add_p_level)
 
void all_shape_derivs (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< Real >> *comps[3], const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order order, const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *libmesh_dbg_var(elem), const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *libmesh_dbg_var(elem), const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int, const Point &p, const bool libmesh_dbg_var(add_p_level))
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType elem_type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const ElemType elem_type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const ElemType, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
RealVectorValue shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealVectorValue shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int libmesh_dbg_var(i), const unsigned int libmesh_dbg_var(j), const Point &, const bool add_p_level)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
RealGradient shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
RealGradient shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType type, const Order order, const unsigned int i, const unsigned int j, const Point &p)
 
Real shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const FEType, const Elem *, const unsigned int, const unsigned int, const Point &, const bool)
 
Real shape_second_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int libmesh_dbg_var(j), const Point &point_in, const bool libmesh_dbg_var(add_p_level))
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &point_in, const bool libmesh_dbg_var(add_p_level))
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
Real shape_second_deriv (const Elem *elem, const Order libmesh_dbg_var(order), const unsigned int i, const unsigned int j, const Point &point_in, const bool libmesh_dbg_var(add_p_level))
 
Real shape_second_deriv (const ElemType, const Order, const unsigned int, const unsigned int, const Point &)
 
Real shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool, const unsigned)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool, const unsigned)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned vdim)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool, const unsigned)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool, const unsigned)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned vdim)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool, const unsigned)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool, const unsigned)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned vdim)
 
void nodal_soln (const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level, const unsigned)
 
void nodal_soln (const Elem *elem, const Order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool, const unsigned)
 
void side_nodal_soln (const Elem *, const Order, const unsigned int side, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln_on_side, const bool, const unsigned)
 
void side_nodal_soln (const Elem *elem, const Order o, const unsigned int side, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln_on_side, const bool add_p_level, const unsigned)
 
void side_nodal_soln (const Elem *elem, const Order o, const unsigned int side, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln_on_side, const bool add_p_level, const unsigned)
 
virtual unsigned int n_shape_functions () const override
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType, const Order)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType, const Order)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType, const Order)
 
unsigned int n_dofs (const ElemType, const Order)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType, const Order o)
 
unsigned int n_dofs (const ElemType, const Order o)
 
unsigned int n_dofs (const ElemType, const Order o)
 
unsigned int n_dofs (const Elem *, const Order o)
 
unsigned int n_dofs (const Elem *, const Order o)
 
unsigned int n_dofs (const Elem *, const Order o)
 
unsigned int n_dofs (const Elem *, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType, const Order)
 
unsigned int n_dofs (const Elem *, const Order)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const ElemType t, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs (const Elem *e, const Order o)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const ElemType, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_at_node (const Elem &, const Order, const unsigned int)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const ElemType, const Order)
 
unsigned int n_dofs_per_elem (const Elem &, const Order)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
virtual FEContinuity get_continuity () const override
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
FEContinuity get_continuity () const
 
virtual bool is_hierarchic () const override
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
bool is_hierarchic () const
 
void dofs_on_side (const Elem *const, const Order, unsigned int, std::vector< unsigned int > &di, bool)
 
void dofs_on_edge (const Elem *const, const Order, unsigned int, std::vector< unsigned int > &di, bool)
 
Point inverse_map (const Elem *, const Point &, const Real, const bool)
 
void inverse_map (const Elem *, const std::vector< Point > &, std::vector< Point > &, Real, bool)
 
virtual void reinit_dual_shape_coeffs (const Elem *elem, const std::vector< Point > &pts, const std::vector< Real > &JxW) override
 This re-computes the dual shape function coefficients. More...
 
virtual void reinit_default_dual_shape_coeffs (const Elem *elem) override
 This computes the default dual shape function coefficients. More...
 
virtual void edge_reinit (const Elem *elem, const unsigned int edge, const Real tolerance=TOLERANCE, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
 Reinitializes all the physical element-dependent data based on the edge. More...
 
void edge_reinit (Elem const *, unsigned int, Real, const std::vector< Point > *const, const std::vector< Real > *const)
 Reinitializes all the physical element-dependent data based on the edge of the element elem. More...
 
virtual void side_map (const Elem *elem, const Elem *side, const unsigned int s, const std::vector< Point > &reference_side_points, std::vector< Point > &reference_points) override
 Computes the reference space quadrature points on the side of an element based on the side quadrature points. More...
 
void side_map (const Elem *, const Elem *, const unsigned int, const std::vector< Point > &, std::vector< Point > &)
 Computes the reference space quadrature points on the side of an element based on the side quadrature points. More...
 
virtual void edge_map (const Elem *elem, const Elem *edge, const unsigned int e, const std::vector< Point > &reference_edge_points, std::vector< Point > &reference_points)
 Computes the reference space quadrature points on the side of an element based on the edge quadrature points. More...
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
void compute_constraints (DofConstraints &, DofMap &, const unsigned int, const Elem *)
 
virtual bool shapes_need_reinit () const override
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
bool shapes_need_reinit () const
 
std::unique_ptr< FEGenericBase< Real > > build (const unsigned int dim, const FEType &fet)
 
std::unique_ptr< FEGenericBase< RealGradient > > build (const unsigned int dim, const FEType &fet)
 
std::unique_ptr< FEGenericBase< Real > > build_InfFE (const unsigned int dim, const FEType &fet)
 
std::unique_ptr< FEGenericBase< RealGradient > > build_InfFE (const unsigned int, const FEType &)
 
const std::vector< std::vector< OutputShape > > & get_phi () const
 
const std::vector< std::vector< OutputShape > > & get_dual_phi () const
 
virtual void request_phi () const override
 request phi calculations More...
 
virtual void request_dual_phi () const override
 
const std::vector< std::vector< OutputGradient > > & get_dphi () const
 
const std::vector< std::vector< OutputGradient > > & get_dual_dphi () const
 
virtual void request_dphi () const override
 request dphi calculations More...
 
virtual void request_dual_dphi () const override
 
const DenseMatrix< Real > & get_dual_coeff () const
 
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi () const
 
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi () const
 
const std::vector< std::vector< OutputShape > > & get_dphidx () const
 
const std::vector< std::vector< OutputShape > > & get_dphidy () const
 
const std::vector< std::vector< OutputShape > > & get_dphidz () const
 
const std::vector< std::vector< OutputShape > > & get_dphidxi () const
 
const std::vector< std::vector< OutputShape > > & get_dphideta () const
 
const std::vector< std::vector< OutputShape > > & get_dphidzeta () const
 
const std::vector< std::vector< OutputTensor > > & get_d2phi () const
 
const std::vector< std::vector< OutputTensor > > & get_dual_d2phi () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidx2 () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidxdy () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidxdz () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidy2 () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidydz () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidz2 () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidxi2 () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidxideta () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidxidzeta () const
 
const std::vector< std::vector< OutputShape > > & get_d2phideta2 () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidetadzeta () const
 
const std::vector< std::vector< OutputShape > > & get_d2phidzeta2 () const
 
const std::vector< OutputGradient > & get_dphase () const
 
virtual const std::vector< Real > & get_Sobolev_weight () const
 
virtual const std::vector< RealGradient > & get_Sobolev_dweight () const
 
virtual const std::vector< Real > & get_Sobolev_weightxR_sq () const
 
virtual const std::vector< RealGradient > & get_Sobolev_dweightxR_sq () const
 
virtual const std::vector< std::vector< OutputShape > > & get_phi_over_decayxR () const
 
virtual const std::vector< std::vector< OutputGradient > > & get_dphi_over_decayxR () const
 
virtual const std::vector< std::vector< OutputGradient > > & get_dphi_over_decay () const
 
virtual void print_phi (std::ostream &os) const override
 Prints the value of each shape function at each quadrature point. More...
 
virtual void print_dual_phi (std::ostream &os) const override
 
virtual void print_dphi (std::ostream &os) const override
 Prints the value of each shape function's derivative at each quadrature point. More...
 
virtual void print_dual_dphi (std::ostream &os) const override
 
virtual void print_d2phi (std::ostream &os) const override
 Prints the value of each shape function's second derivatives at each quadrature point. More...
 
virtual void print_dual_d2phi (std::ostream &os) const override
 
unsigned int get_dim () const
 
void get_nothing () const
 
virtual_for_inffe const std::vector< Point > & get_xyz () const
 
virtual const std::vector< Real > & get_JxWxdecay_sq () const
 This function is the variant of get_JxW() for InfFE. More...
 
virtual_for_inffe const std::vector< Real > & get_JxW () const
 
virtual_for_inffe const std::vector< RealGradient > & get_dxyzdxi () const
 
virtual_for_inffe const std::vector< RealGradient > & get_dxyzdeta () const
 
virtual_for_inffe const std::vector< RealGradient > & get_dxyzdzeta () const
 
virtual_for_inffe const std::vector< RealGradient > & get_d2xyzdxi2 () const
 
virtual_for_inffe const std::vector< RealGradient > & get_d2xyzdeta2 () const
 
virtual_for_inffe const std::vector< RealGradient > & get_d2xyzdzeta2 () const
 
virtual_for_inffe const std::vector< RealGradient > & get_d2xyzdxideta () const
 
virtual_for_inffe const std::vector< RealGradient > & get_d2xyzdxidzeta () const
 
virtual_for_inffe const std::vector< RealGradient > & get_d2xyzdetadzeta () const
 
virtual_for_inffe const std::vector< Real > & get_dxidx () const
 
virtual_for_inffe const std::vector< Real > & get_dxidy () const
 
virtual_for_inffe const std::vector< Real > & get_dxidz () const
 
virtual_for_inffe const std::vector< Real > & get_detadx () const
 
virtual_for_inffe const std::vector< Real > & get_detady () const
 
virtual_for_inffe const std::vector< Real > & get_detadz () const
 
virtual_for_inffe const std::vector< Real > & get_dzetadx () const
 
virtual_for_inffe const std::vector< Real > & get_dzetady () const
 
virtual_for_inffe const std::vector< Real > & get_dzetadz () const
 
virtual_for_inffe const std::vector< std::vector< Point > > & get_tangents () const
 
virtual_for_inffe const std::vector< Point > & get_normals () const
 
virtual_for_inffe const std::vector< Real > & get_curvatures () const
 
virtual unsigned int n_quadrature_points () const
 
const Elemget_elem () const
 
ElemType get_type () const
 
unsigned int get_p_level () const
 
FEType get_fe_type () const
 
Order get_order () const
 
void set_fe_order (int new_order)
 Sets the base FE order of the finite element. More...
 
FEFamily get_family () const
 
const FEMapget_fe_map () const
 
FEMapget_fe_map ()
 
void print_JxW (std::ostream &os) const
 Prints the Jacobian times the weight for each quadrature point. More...
 
void print_xyz (std::ostream &os) const
 Prints the spatial location of each quadrature point (on the physical element). More...
 
void print_info (std::ostream &os) const
 Prints all the relevant information about the current element. More...
 
void set_calculate_dual (const bool val)
 set calculate_dual as needed More...
 
void set_calculate_default_dual_coeff (const bool val)
 set calculate_default_dual_coeff as needed More...
 
void add_p_level_in_reinit (bool value)
 Indicate whether to add p-refinement levels in init/reinit methods. More...
 
bool add_p_level_in_reinit () const
 Whether to add p-refinement levels in init/reinit methods. More...
 

Static Public Member Functions

static Real regular_shape (const unsigned int i, const Real v, const Real w)
 
static Real regular_shape_deriv (const unsigned int i, const unsigned int j, const Real v, const Real w)
 
static Real regular_shape_second_deriv (const unsigned int i, const unsigned int j, const Real v, const Real w)
 
static void loop_subdivision_mask (std::vector< Real > &weights, const unsigned int valence)
 Fills the vector weights with the weight coefficients of the Loop subdivision mask for evaluating the limit surface at a node explicitly. More...
 
static void init_subdivision_matrix (DenseMatrix< Real > &A, unsigned int valence)
 Builds the subdivision matrix A for the Loop scheme. More...
 
static OutputShape shape (const ElemType t, const Order o, const unsigned int i, const Point &p)
 
static OutputShape shape (const Elem *elem, const Order o, const unsigned int i, const Point &p, const bool add_p_level=true)
 
static OutputShape shape (const FEType fet, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level=true)
 
static void shapes (const Elem *elem, const Order o, const unsigned int i, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level=true)
 Fills v with the values of the \( i^{th} \) shape function, evaluated at all points p. More...
 
static void all_shapes (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape > > &v, const bool add_p_level=true)
 Fills v[i][qp] with the values of the \( i^{th} \) shape functions, evaluated at all points in p. More...
 
static OutputShape shape_deriv (const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
 
static OutputShape shape_deriv (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level=true)
 
static OutputShape shape_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level=true)
 
static void shape_derivs (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level=true)
 Fills v with the \( j^{th} \) derivative of the \( i^{th} \) shape function, evaluated at all points p. More...
 
static void all_shape_derivs (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> *comps[3], const bool add_p_level=true)
 Fills comps with dphidxi (and in higher dimensions, eta/zeta) derivative component values for all shape functions, evaluated at all points in p. More...
 
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_second_deriv (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level=true)
 
static OutputShape shape_second_deriv (const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level=true)
 
static void nodal_soln (const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
 Build the nodal soln from the element soln. More...
 
static void side_nodal_soln (const Elem *elem, const Order o, const unsigned int side, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln_on_side, bool add_p_level=true, const unsigned vdim=1)
 Build the nodal soln on one side from the (full) element soln. More...
 
static unsigned int n_shape_functions (const ElemType t, const Order o)
 
static unsigned int n_dofs (const ElemType t, const Order o)
 
static unsigned int n_dofs (const Elem *e, const Order o)
 
static unsigned int n_dofs_at_node (const ElemType t, const Order o, const unsigned int n)
 
static unsigned int n_dofs_at_node (const Elem &e, const Order o, const unsigned int n)
 
static unsigned int n_dofs_per_elem (const ElemType t, const Order o)
 
static unsigned int n_dofs_per_elem (const Elem &e, const Order o)
 
static void dofs_on_side (const Elem *const elem, const Order o, unsigned int s, std::vector< unsigned int > &di, bool add_p_level=true)
 Fills the vector di with the local degree of freedom indices associated with side s of element elem. More...
 
static void dofs_on_edge (const Elem *const elem, const Order o, unsigned int e, std::vector< unsigned int > &di, bool add_p_level=true)
 Fills the vector di with the local degree of freedom indices associated with edge e of element elem. More...
 
static Point inverse_map (const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
 
static void inverse_map (const Elem *elem, const std::vector< Point > &physical_points, std::vector< Point > &reference_points, const Real tolerance=TOLERANCE, const bool secure=true)
 
static void compute_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to variable number var_number, using element-specific optimizations if possible. More...
 
static Point map (const Elem *elem, const Point &reference_point)
 
static Point map_xi (const Elem *elem, const Point &reference_point)
 
static Point map_eta (const Elem *elem, const Point &reference_point)
 
static Point map_zeta (const Elem *elem, const Point &reference_point)
 
static std::unique_ptr< FEGenericBasebuild (const unsigned int dim, const FEType &type)
 Builds a specific finite element type. More...
 
static std::unique_ptr< FEGenericBasebuild_InfFE (const unsigned int dim, const FEType &type)
 Builds a specific infinite element type. More...
 
static void compute_proj_constraints (DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
 Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to variable number var_number, using generic projections. More...
 
static void coarsened_dof_values (const NumericVector< Number > &global_vector, const DofMap &dof_map, const Elem *coarse_elem, DenseVector< Number > &coarse_dofs, const unsigned int var, const bool use_old_dof_indices=false)
 Creates a local projection on coarse_elem, based on the DoF values in global_vector for it's children. More...
 
static void coarsened_dof_values (const NumericVector< Number > &global_vector, const DofMap &dof_map, const Elem *coarse_elem, DenseVector< Number > &coarse_dofs, const bool use_old_dof_indices=false)
 Creates a local projection on coarse_elem, based on the DoF values in global_vector for it's children. More...
 
static void compute_periodic_constraints (DofConstraints &constraints, DofMap &dof_map, const PeriodicBoundaries &boundaries, const MeshBase &mesh, const PointLocatorBase *point_locator, const unsigned int variable_number, const Elem *elem)
 Computes the constraint matrix contributions (for meshes with periodic boundary conditions) corresponding to variable number var_number, using generic projections. More...
 
static bool on_reference_element (const Point &p, const ElemType t, const Real eps=TOLERANCE)
 
static void get_refspace_nodes (const ElemType t, std::vector< Point > &nodes)
 
static void compute_node_constraints (NodeConstraints &constraints, const Elem *elem)
 Computes the nodal constraint contributions (for non-conforming adapted meshes), using Lagrange geometry. More...
 
static void compute_periodic_node_constraints (NodeConstraints &constraints, const PeriodicBoundaries &boundaries, const MeshBase &mesh, const PointLocatorBase *point_locator, const Elem *elem)
 Computes the node position constraint equation contributions (for meshes with periodic boundary conditions) More...
 
static void print_info (std::ostream &out_stream=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static std::string get_info ()
 Gets a string containing the reference information. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void disable_print_counter_info ()
 

Protected Types

typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
 Data structure to log the information. More...
 

Protected Member Functions

void init_dual_shape_functions (unsigned int n_shapes, unsigned int n_qp)
 Init dual_phi and potentially dual_dphi, dual_d2phi. More...
 
virtual void init_base_shape_functions (const std::vector< Point > &qp, const Elem *e) override
 Initialize the data fields for the base of an an infinite element. More...
 
void cache (const Elem *elem)
 Repopulate the element cache with the node locations, edge and face orientations of the element elem. More...
 
bool matches_cache (const Elem *elem)
 Check if the node locations, edge and face orientations held in the element cache match those of element elem. More...
 
virtual_for_inffe void determine_calculations ()
 Determine which values are to be calculated, for both the FE itself and for the FEMap. More...
 
bool calculating_nothing () const
 
virtual void compute_shape_functions (const Elem *elem, const std::vector< Point > &qp) override
 After having updated the jacobian and the transformation from local to global coordinates in FEMap::compute_map(), the first derivatives of the shape functions are transformed to global coordinates, giving dphi, dphidx, dphidy, and dphidz. More...
 
void compute_dual_shape_coeffs (const std::vector< Real > &JxW, const std::vector< std::vector< OutputShape >> &phi)
 Compute the dual basis coefficients dual_coeff we rely on the JxW (or weights) and the phi values, which can come from default or customized qrule. More...
 
void compute_dual_shape_coeffs (const std::vector< Real > &, const std::vector< std::vector< OutputShape >> &)
 
void compute_dual_shape_coeffs (const std::vector< Real > &JxW, const std::vector< std::vector< OutputShape >> &phi_vals)
 
void compute_dual_shape_functions ()
 Compute dual_phi, dual_dphi, dual_d2phi It is only valid for this to be called after reinit has occurred with a quadrature rule. More...
 
void compute_dual_shape_functions ()
 
void compute_dual_shape_functions ()
 
void increment_constructor_count (const std::string &name) noexcept
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name) noexcept
 Increments the destruction counter. More...
 

Static Protected Member Functions

static void default_all_shape_derivs (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> *comps[3], const bool add_p_level=true)
 A default implementation for all_shape_derivs. More...
 
static void default_shapes (const Elem *elem, const Order o, const unsigned int i, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level=true)
 A default implementation for shapes. More...
 
static void default_all_shapes (const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> &v, const bool add_p_level=true)
 A default implementation for all_shapes. More...
 
static void default_shape_derivs (const Elem *elem, const Order o, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputShape > &v, const bool add_p_level=true)
 A default implementation for shape_derivs. More...
 
static void default_side_nodal_soln (const Elem *elem, const Order o, const unsigned int side, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln_on_side, bool add_p_level=true, const unsigned vdim=1)
 A default implementation for side_nodal_soln. More...
 

Protected Attributes

std::vector< Pointcached_nodes
 Vectors holding the node locations, edge and face orientations of the last element we cached. More...
 
std::vector< bool > cached_edges
 
std::vector< bool > cached_faces
 
ElemType last_side
 The last side and last edge we did a reinit on. More...
 
ElemType last_edge
 
std::unique_ptr< FETransformationBase< FEOutputType< T >::type > > _fe_trans
 Object that handles computing shape function values, gradients, etc in the physical domain. More...
 
std::vector< std::vector< OutputShape > > phi
 Shape function values. More...
 
std::vector< std::vector< OutputShape > > dual_phi
 
std::vector< std::vector< OutputGradient > > dphi
 Shape function derivative values. More...
 
std::vector< std::vector< OutputGradient > > dual_dphi
 
DenseMatrix< Realdual_coeff
 Coefficient matrix for the dual basis. More...
 
std::vector< std::vector< OutputShape > > curl_phi
 Shape function curl values. More...
 
std::vector< std::vector< OutputDivergence > > div_phi
 Shape function divergence values. More...
 
std::vector< std::vector< OutputShape > > dphidxi
 Shape function derivatives in the xi direction. More...
 
std::vector< std::vector< OutputShape > > dphideta
 Shape function derivatives in the eta direction. More...
 
std::vector< std::vector< OutputShape > > dphidzeta
 Shape function derivatives in the zeta direction. More...
 
std::vector< std::vector< OutputShape > > dphidx
 Shape function derivatives in the x direction. More...
 
std::vector< std::vector< OutputShape > > dphidy
 Shape function derivatives in the y direction. More...
 
std::vector< std::vector< OutputShape > > dphidz
 Shape function derivatives in the z direction. More...
 
std::vector< std::vector< OutputTensor > > d2phi
 Shape function second derivative values. More...
 
std::vector< std::vector< OutputTensor > > dual_d2phi
 
std::vector< std::vector< OutputShape > > d2phidxi2
 Shape function second derivatives in the xi direction. More...
 
std::vector< std::vector< OutputShape > > d2phidxideta
 Shape function second derivatives in the xi-eta direction. More...
 
std::vector< std::vector< OutputShape > > d2phidxidzeta
 Shape function second derivatives in the xi-zeta direction. More...
 
std::vector< std::vector< OutputShape > > d2phideta2
 Shape function second derivatives in the eta direction. More...
 
std::vector< std::vector< OutputShape > > d2phidetadzeta
 Shape function second derivatives in the eta-zeta direction. More...
 
std::vector< std::vector< OutputShape > > d2phidzeta2
 Shape function second derivatives in the zeta direction. More...
 
std::vector< std::vector< OutputShape > > d2phidx2
 Shape function second derivatives in the x direction. More...
 
std::vector< std::vector< OutputShape > > d2phidxdy
 Shape function second derivatives in the x-y direction. More...
 
std::vector< std::vector< OutputShape > > d2phidxdz
 Shape function second derivatives in the x-z direction. More...
 
std::vector< std::vector< OutputShape > > d2phidy2
 Shape function second derivatives in the y direction. More...
 
std::vector< std::vector< OutputShape > > d2phidydz
 Shape function second derivatives in the y-z direction. More...
 
std::vector< std::vector< OutputShape > > d2phidz2
 Shape function second derivatives in the z direction. More...
 
std::vector< OutputGradientdphase
 Used for certain infinite element families: the first derivatives of the phase term in global coordinates, over all quadrature points. More...
 
std::vector< RealGradientdweight
 Used for certain infinite element families: the global derivative of the additional radial weight \( 1/{r^2} \), over all quadrature points. More...
 
std::vector< Realweight
 Used for certain infinite element families: the additional radial weight \( 1/{r^2} \) in local coordinates, over all quadrature points. More...
 
std::unique_ptr< FEMap_fe_map
 
const unsigned int dim
 The dimensionality of the object. More...
 
bool calculations_started
 Have calculations with this object already been started? Then all get_* functions should already have been called. More...
 
bool calculate_dual
 Are we calculating dual basis? More...
 
bool calculate_default_dual_coeff
 Are we calculating the coefficient for the dual basis using the default qrule? More...
 
bool calculate_nothing
 Are we potentially deliberately calculating nothing? More...
 
bool calculate_map
 Are we calculating mapping functions? More...
 
bool calculate_phi
 Should we calculate shape functions? More...
 
bool calculate_dphi
 Should we calculate shape function gradients? More...
 
bool calculate_d2phi
 Should we calculate shape function hessians? More...
 
const bool calculate_d2phi =false
 
bool calculate_curl_phi
 Should we calculate shape function curls? More...
 
bool calculate_div_phi
 Should we calculate shape function divergences? More...
 
bool calculate_dphiref
 Should we calculate reference shape function gradients? More...
 
FEType fe_type
 The finite element type for this object. More...
 
ElemType _elem_type
 The element type the current data structures were set up for. More...
 
const Elem_elem
 The element the current data structures were set up for. More...
 
unsigned int _elem_p_level
 The element p-refinement level the current data structures are set up for. More...
 
unsigned int _p_level
 The p refinement level the current data structures are set up for. More...
 
QBaseqrule
 A pointer to the quadrature rule employed. More...
 
bool shapes_on_quadrature
 A flag indicating if current data structures correspond to quadrature rule points. More...
 
unsigned int _n_total_qp
 The total number of quadrature points for the current configuration. More...
 
bool _add_p_level_in_reinit
 Whether to add p-refinement levels in init/reinit methods. More...
 

Static Protected Attributes

static Counts _counts
 Actually holds the data. More...
 
static Threads::atomic< unsigned int_n_objects
 The number of objects. More...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. More...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. More...
 

Detailed Description

Definition at line 913 of file fe.h.

Member Typedef Documentation

◆ Counts

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

Definition at line 119 of file reference_counter.h.

◆ OutputDivergence

Definition at line 122 of file fe_base.h.

◆ OutputGradient

Definition at line 120 of file fe_base.h.

◆ OutputNumber

Definition at line 123 of file fe_base.h.

◆ OutputNumberDivergence

Definition at line 126 of file fe_base.h.

◆ OutputNumberGradient

Definition at line 124 of file fe_base.h.

◆ OutputNumberTensor

Definition at line 125 of file fe_base.h.

◆ OutputShape

typedef FEGenericBase<typename FEOutputType<T>::type>::OutputShape libMesh::FE< Dim, T >::OutputShape
inherited

Definition at line 139 of file fe.h.

◆ OutputTensor

Definition at line 121 of file fe_base.h.

Constructor & Destructor Documentation

◆ FESubdivision()

libMesh::FESubdivision::FESubdivision ( const FEType fet)

Constructor.

Creates a subdivision surface finite element. Currently only supported for two-dimensional meshes in three-dimensional space.

Member Function Documentation

◆ add_p_level_in_reinit() [1/2]

void libMesh::FEAbstract::add_p_level_in_reinit ( bool  value)
inlineinherited

Indicate whether to add p-refinement levels in init/reinit methods.

Definition at line 631 of file fe_abstract.h.

References libMesh::FEAbstract::_add_p_level_in_reinit, and value.

Referenced by libMesh::FEMContext::build_new_fe().

bool _add_p_level_in_reinit
Whether to add p-refinement levels in init/reinit methods.
Definition: fe_abstract.h:787
static const bool value
Definition: xdr_io.C:55

◆ add_p_level_in_reinit() [2/2]

bool libMesh::FEAbstract::add_p_level_in_reinit ( ) const
inlineinherited

Whether to add p-refinement levels in init/reinit methods.

Definition at line 636 of file fe_abstract.h.

References libMesh::FEAbstract::_add_p_level_in_reinit.

636 { return _add_p_level_in_reinit; }
bool _add_p_level_in_reinit
Whether to add p-refinement levels in init/reinit methods.
Definition: fe_abstract.h:787

◆ all_shape_derivs() [1/5]

void libMesh::FE< 3, RATIONAL_BERNSTEIN >::all_shape_derivs ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< Real >> *  comps[3],
const bool  add_p_level 
)
inherited

Definition at line 218 of file fe_rational_shape_3D.C.

223 {
224  FEType underlying_fe_type(o, _underlying_fe_family);
225 
226  rational_all_shape_derivs (*elem, underlying_fe_type, p,
227  comps, add_p_level);
228 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
void rational_all_shape_derivs(const Elem &elem, const FEType underlying_fe_type, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> *comps[3], const bool add_p_level)
Definition: fe.C:1338

◆ all_shape_derivs() [2/5]

void libMesh::FE< 2, RATIONAL_BERNSTEIN >::all_shape_derivs ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< Real >> *  comps[3],
const bool  add_p_level 
)
inherited

Definition at line 222 of file fe_rational_shape_2D.C.

227 {
228  FEType underlying_fe_type(o, _underlying_fe_family);
229 
230  rational_all_shape_derivs (*elem, underlying_fe_type, p,
231  comps, add_p_level);
232 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
void rational_all_shape_derivs(const Elem &elem, const FEType underlying_fe_type, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> *comps[3], const bool add_p_level)
Definition: fe.C:1338

◆ all_shape_derivs() [3/5]

void libMesh::FE< 1, RATIONAL_BERNSTEIN >::all_shape_derivs ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< Real >> *  comps[3],
const bool  add_p_level 
)
inherited

Definition at line 224 of file fe_rational_shape_1D.C.

229 {
230  FEType underlying_fe_type(o, _underlying_fe_family);
231 
232  rational_all_shape_derivs (*elem, underlying_fe_type, p,
233  comps, add_p_level);
234 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
void rational_all_shape_derivs(const Elem &elem, const FEType underlying_fe_type, const std::vector< Point > &p, std::vector< std::vector< OutputShape >> *comps[3], const bool add_p_level)
Definition: fe.C:1338

◆ all_shape_derivs() [4/5]

void libMesh::FE< 3, LAGRANGE >::all_shape_derivs ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> *  comps[3],
const bool  add_p_level 
)
inherited

Definition at line 239 of file fe_lagrange_shape_3D.C.

244 {
245  const ElemType type = elem->type();
246 
247  // Just loop on the harder-to-optimize cases
248  if (type != HEX8 && type != HEX27)
249  {
251  (elem,o,p,comps,add_p_level);
252  return;
253  }
254 
255 #if LIBMESH_DIM == 3
256 
257  libmesh_assert(comps[0]);
258  libmesh_assert(comps[1]);
259  libmesh_assert(comps[2]);
260  const unsigned int n_sf = comps[0]->size();
261 
262  switch (o)
263  {
264  // linear Lagrange shape functions
265  case FIRST:
266  {
267  switch (type)
268  {
269  // trilinear hexahedral shape functions
270  case HEX8:
271  case HEX20:
272  case HEX27:
273  {
274  libmesh_assert_equal_to (n_sf, 8);
275 
276  // 0 1 2 3 4 5 6 7
277  static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
278  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
279  static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
280 
281  for (auto qp : index_range(p))
282  {
283  const Point & q_point = p[qp];
284  // Compute hex shape functions as a tensor-product
285  const Real xi = q_point(0);
286  const Real eta = q_point(1);
287  const Real zeta = q_point(2);
288 
289  // one_d_shapes[dim][i] = phi_i(p(dim))
290  Real one_d_shapes[3][2] = {
295  {fe_lagrange_1D_linear_shape(0, zeta),
296  fe_lagrange_1D_linear_shape(1, zeta)}};
297 
298  // one_d_derivs[dim][i] = dphi_i/dxi(p(dim))
299  Real one_d_derivs[3][2] = {
305  fe_lagrange_1D_linear_shape_deriv(1, 0, zeta)}};
306 
307  for (unsigned int i : make_range(n_sf))
308  {
309  (*comps[0])[i][qp] = one_d_derivs[0][i0[i]] *
310  one_d_shapes[1][i1[i]] *
311  one_d_shapes[2][i2[i]];
312  (*comps[1])[i][qp] = one_d_shapes[0][i0[i]] *
313  one_d_derivs[1][i1[i]] *
314  one_d_shapes[2][i2[i]];
315  (*comps[2])[i][qp] = one_d_shapes[0][i0[i]] *
316  one_d_shapes[1][i1[i]] *
317  one_d_derivs[2][i2[i]];
318  }
319  }
320  return;
321  }
322 
323  default:
324  libmesh_error(); // How did we get here?
325  }
326  }
327 
328 
329  // quadratic Lagrange shape functions
330  case SECOND:
331  {
332  switch (type)
333  {
334  // triquadratic hexahedral shape functions
335  case HEX8:
336 // TODO: refactor to optimize this
337 // libmesh_assert_msg(T == L2_LAGRANGE,
338 // "High order on first order elements only supported for L2 families");
339  libmesh_fallthrough();
340  case HEX27:
341  {
342  libmesh_assert_less_equal (n_sf, 27);
343 
344  // The only way to make any sense of this
345  // is to look at the mgflo/mg2/mgf documentation
346  // and make the cut-out cube!
347  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
348  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};
349  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};
350  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};
351 
352  for (auto qp : index_range(p))
353  {
354  const Point & q_point = p[qp];
355  // Compute hex shape functions as a tensor-product
356  const Real xi = q_point(0);
357  const Real eta = q_point(1);
358  const Real zeta = q_point(2);
359 
360  // one_d_shapes[dim][i] = phi_i(p(dim))
361  Real one_d_shapes[3][3] = {
371 
372  // one_d_derivs[dim][i] = dphi_i/dxi(p(dim))
373  Real one_d_derivs[3][3] = {
383 
384  for (unsigned int i : make_range(n_sf))
385  {
386  (*comps[0])[i][qp] = one_d_derivs[0][i0[i]] *
387  one_d_shapes[1][i1[i]] *
388  one_d_shapes[2][i2[i]];
389  (*comps[1])[i][qp] = one_d_shapes[0][i0[i]] *
390  one_d_derivs[1][i1[i]] *
391  one_d_shapes[2][i2[i]];
392  (*comps[2])[i][qp] = one_d_shapes[0][i0[i]] *
393  one_d_shapes[1][i1[i]] *
394  one_d_derivs[2][i2[i]];
395  }
396  }
397  return;
398  }
399 
400  default:
401  libmesh_error(); // How did we get here?
402  }
403  }
404 
405  // unsupported order
406  default:
407  libmesh_error_msg("ERROR: Unsupported 3D FE order on HEX!: " << o);
408  }
409 #else // LIBMESH_DIM != 3
410  libmesh_ignore(elem, o, p, v, add_p_level);
411  libmesh_not_implemented();
412 #endif // LIBMESH_DIM == 3
413 }
Real fe_lagrange_1D_linear_shape_deriv(const unsigned int i, const unsigned int libmesh_dbg_var(j), const Real)
ElemType
Defines an enum for geometric element types.
Real fe_lagrange_1D_quadratic_shape_deriv(const unsigned int i, const unsigned int libmesh_dbg_var(j), const Real xi)
Real fe_lagrange_1D_quadratic_shape(const unsigned int i, const Real xi)
A specific instantiation of the FEBase class.
Definition: fe.h:127
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
Real fe_lagrange_1D_linear_shape(const unsigned int i, const Real xi)

◆ all_shape_derivs() [5/5]

static void libMesh::FE< Dim, T >::all_shape_derivs ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> *  comps[3],
const bool  add_p_level = true 
)
staticinherited

Fills comps with dphidxi (and in higher dimensions, eta/zeta) derivative component values for all shape functions, evaluated at all points in p.

You must specify element order directly. Output component arrays in comps should already be the appropriate size.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ all_shapes() [1/4]

void libMesh::FE< 3, RATIONAL_BERNSTEIN >::all_shapes ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> &  v,
const bool  add_p_level 
)
inherited

Definition at line 188 of file fe_rational_shape_3D.C.

193 {
194  FEType underlying_fe_type(o, _underlying_fe_family);
195 
196  rational_all_shapes(*elem, underlying_fe_type, p, v, add_p_level);
197 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
void rational_all_shapes(const Elem &elem, const FEType underlying_fe_type, const std::vector< Point > &p, std::vector< std::vector< Real >> &v, const bool add_p_level)
Definition: fe.C:1308

◆ all_shapes() [2/4]

void libMesh::FE< 2, RATIONAL_BERNSTEIN >::all_shapes ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> &  v,
const bool  add_p_level 
)
inherited

Definition at line 192 of file fe_rational_shape_2D.C.

197 {
198  FEType underlying_fe_type(o, _underlying_fe_family);
199 
200  rational_all_shapes(*elem, underlying_fe_type, p, v, add_p_level);
201 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
void rational_all_shapes(const Elem &elem, const FEType underlying_fe_type, const std::vector< Point > &p, std::vector< std::vector< Real >> &v, const bool add_p_level)
Definition: fe.C:1308

◆ all_shapes() [3/4]

void libMesh::FE< 1, RATIONAL_BERNSTEIN >::all_shapes ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> &  v,
const bool  add_p_level 
)
inherited

Definition at line 194 of file fe_rational_shape_1D.C.

199 {
200  FEType underlying_fe_type(o, _underlying_fe_family);
201 
202  rational_all_shapes(*elem, underlying_fe_type, p, v, add_p_level);
203 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
void rational_all_shapes(const Elem &elem, const FEType underlying_fe_type, const std::vector< Point > &p, std::vector< std::vector< Real >> &v, const bool add_p_level)
Definition: fe.C:1308

◆ all_shapes() [4/4]

static void libMesh::FE< Dim, T >::all_shapes ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape > > &  v,
const bool  add_p_level = true 
)
staticinherited

Fills v[i][qp] with the values of the \( i^{th} \) shape functions, evaluated at all points in p.

You must specify element order directly. v should already be the appropriate size.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ attach_quadrature_rule()

void libMesh::FESubdivision::attach_quadrature_rule ( QBase q)
overridevirtual

Provides the class with the quadrature rule, which provides the locations (on a reference element) where the shape functions are to be calculated.

Reimplemented from libMesh::FE< 2, SUBDIVISION >.

Definition at line 656 of file fe_subdivision_2D.C.

References libMesh::INVALID_ELEM, and libMesh::libmesh_assert().

657 {
658  libmesh_assert(q);
659 
660  qrule = q;
661  // make sure we don't cache results from a previous quadrature rule
662  this->_elem = nullptr;
663  this->_elem_type = INVALID_ELEM;
664  return;
665 }
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735
libmesh_assert(ctx)
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:762
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ build() [1/3]

static std::unique_ptr<FEGenericBase> libMesh::FEGenericBase< FEOutputType< T >::type >::build ( const unsigned int  dim,
const FEType type 
)
staticinherited

Builds a specific finite element type.

A std::unique_ptr<FEGenericBase> is returned to prevent a memory leak. This way the user need not remember to delete the object.

The build call will fail if the OutputType of this class is not compatible with the output required for the requested type

◆ build() [2/3]

std::unique_ptr< FEGenericBase< Real > > libMesh::FEGenericBase< Real >::build ( const unsigned int  dim,
const FEType fet 
)
inherited

Definition at line 191 of file fe_base.C.

References libMesh::BERNSTEIN, libMesh::CLOUGH, dim, libMesh::Utility::enum_to_string(), libMesh::FEType::family, libMesh::HERMITE, libMesh::HIERARCHIC, libMesh::L2_HIERARCHIC, libMesh::L2_LAGRANGE, libMesh::LAGRANGE, libMesh::MONOMIAL, libMesh::RATIONAL_BERNSTEIN, libMesh::SCALAR, libMesh::SIDE_HIERARCHIC, libMesh::SUBDIVISION, libMesh::SZABAB, and libMesh::XYZ.

193 {
194  switch (dim)
195  {
196  // 0D
197  case 0:
198  {
199  switch (fet.family)
200  {
201  case CLOUGH:
202  return std::make_unique<FE<0,CLOUGH>>(fet);
203 
204  case HERMITE:
205  return std::make_unique<FE<0,HERMITE>>(fet);
206 
207  case LAGRANGE:
208  return std::make_unique<FE<0,LAGRANGE>>(fet);
209 
210  case L2_LAGRANGE:
211  return std::make_unique<FE<0,L2_LAGRANGE>>(fet);
212 
213  case HIERARCHIC:
214  return std::make_unique<FE<0,HIERARCHIC>>(fet);
215 
216  case L2_HIERARCHIC:
217  return std::make_unique<FE<0,L2_HIERARCHIC>>(fet);
218 
219  case SIDE_HIERARCHIC:
220  return std::make_unique<FE<0,SIDE_HIERARCHIC>>(fet);
221 
222  case MONOMIAL:
223  return std::make_unique<FE<0,MONOMIAL>>(fet);
224 
225 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
226  case SZABAB:
227  return std::make_unique<FE<0,SZABAB>>(fet);
228 
229  case BERNSTEIN:
230  return std::make_unique<FE<0,BERNSTEIN>>(fet);
231 
232  case RATIONAL_BERNSTEIN:
233  return std::make_unique<FE<0,RATIONAL_BERNSTEIN>>(fet);
234 #endif
235 
236  case XYZ:
237  return std::make_unique<FEXYZ<0>>(fet);
238 
239  case SCALAR:
240  return std::make_unique<FEScalar<0>>(fet);
241 
242  default:
243  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
244  }
245  }
246  // 1D
247  case 1:
248  {
249  switch (fet.family)
250  {
251  case CLOUGH:
252  return std::make_unique<FE<1,CLOUGH>>(fet);
253 
254  case HERMITE:
255  return std::make_unique<FE<1,HERMITE>>(fet);
256 
257  case LAGRANGE:
258  return std::make_unique<FE<1,LAGRANGE>>(fet);
259 
260  case L2_LAGRANGE:
261  return std::make_unique<FE<1,L2_LAGRANGE>>(fet);
262 
263  case HIERARCHIC:
264  return std::make_unique<FE<1,HIERARCHIC>>(fet);
265 
266  case L2_HIERARCHIC:
267  return std::make_unique<FE<1,L2_HIERARCHIC>>(fet);
268 
269  case SIDE_HIERARCHIC:
270  return std::make_unique<FE<1,SIDE_HIERARCHIC>>(fet);
271 
272  case MONOMIAL:
273  return std::make_unique<FE<1,MONOMIAL>>(fet);
274 
275 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
276  case SZABAB:
277  return std::make_unique<FE<1,SZABAB>>(fet);
278 
279  case BERNSTEIN:
280  return std::make_unique<FE<1,BERNSTEIN>>(fet);
281 
282  case RATIONAL_BERNSTEIN:
283  return std::make_unique<FE<1,RATIONAL_BERNSTEIN>>(fet);
284 #endif
285 
286  case XYZ:
287  return std::make_unique<FEXYZ<1>>(fet);
288 
289  case SCALAR:
290  return std::make_unique<FEScalar<1>>(fet);
291 
292  default:
293  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
294  }
295  }
296 
297 
298  // 2D
299  case 2:
300  {
301  switch (fet.family)
302  {
303  case CLOUGH:
304  return std::make_unique<FE<2,CLOUGH>>(fet);
305 
306  case HERMITE:
307  return std::make_unique<FE<2,HERMITE>>(fet);
308 
309  case LAGRANGE:
310  return std::make_unique<FE<2,LAGRANGE>>(fet);
311 
312  case L2_LAGRANGE:
313  return std::make_unique<FE<2,L2_LAGRANGE>>(fet);
314 
315  case HIERARCHIC:
316  return std::make_unique<FE<2,HIERARCHIC>>(fet);
317 
318  case L2_HIERARCHIC:
319  return std::make_unique<FE<2,L2_HIERARCHIC>>(fet);
320 
321  case SIDE_HIERARCHIC:
322  return std::make_unique<FE<2,SIDE_HIERARCHIC>>(fet);
323 
324  case MONOMIAL:
325  return std::make_unique<FE<2,MONOMIAL>>(fet);
326 
327 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
328  case SZABAB:
329  return std::make_unique<FE<2,SZABAB>>(fet);
330 
331  case BERNSTEIN:
332  return std::make_unique<FE<2,BERNSTEIN>>(fet);
333 
334  case RATIONAL_BERNSTEIN:
335  return std::make_unique<FE<2,RATIONAL_BERNSTEIN>>(fet);
336 #endif
337 
338  case XYZ:
339  return std::make_unique<FEXYZ<2>>(fet);
340 
341  case SCALAR:
342  return std::make_unique<FEScalar<2>>(fet);
343 
344  case SUBDIVISION:
345  return std::make_unique<FESubdivision>(fet);
346 
347  default:
348  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
349  }
350  }
351 
352 
353  // 3D
354  case 3:
355  {
356  switch (fet.family)
357  {
358  case CLOUGH:
359  libmesh_error_msg("ERROR: Clough-Tocher elements currently only support 1D and 2D");
360 
361  case HERMITE:
362  return std::make_unique<FE<3,HERMITE>>(fet);
363 
364  case LAGRANGE:
365  return std::make_unique<FE<3,LAGRANGE>>(fet);
366 
367  case L2_LAGRANGE:
368  return std::make_unique<FE<3,L2_LAGRANGE>>(fet);
369 
370  case HIERARCHIC:
371  return std::make_unique<FE<3,HIERARCHIC>>(fet);
372 
373  case L2_HIERARCHIC:
374  return std::make_unique<FE<3,L2_HIERARCHIC>>(fet);
375 
376  case SIDE_HIERARCHIC:
377  return std::make_unique<FE<3,SIDE_HIERARCHIC>>(fet);
378 
379  case MONOMIAL:
380  return std::make_unique<FE<3,MONOMIAL>>(fet);
381 
382 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
383  case SZABAB:
384  return std::make_unique<FE<3,SZABAB>>(fet);
385 
386  case BERNSTEIN:
387  return std::make_unique<FE<3,BERNSTEIN>>(fet);
388 
389  case RATIONAL_BERNSTEIN:
390  return std::make_unique<FE<3,RATIONAL_BERNSTEIN>>(fet);
391 #endif
392 
393  case XYZ:
394  return std::make_unique<FEXYZ<3>>(fet);
395 
396  case SCALAR:
397  return std::make_unique<FEScalar<3>>(fet);
398 
399  default:
400  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
401  }
402  }
403 
404  default:
405  libmesh_error_msg("Invalid dimension dim = " << dim);
406  }
407 }
FEFamily family
The type of finite element.
Definition: fe_type.h:221
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:660
std::string enum_to_string(const T e)

◆ build() [3/3]

std::unique_ptr< FEGenericBase< RealGradient > > libMesh::FEGenericBase< RealGradient >::build ( const unsigned int  dim,
const FEType fet 
)
inherited

Definition at line 413 of file fe_base.C.

References dim, libMesh::Utility::enum_to_string(), libMesh::FEType::family, libMesh::HIERARCHIC_VEC, libMesh::L2_HIERARCHIC_VEC, libMesh::L2_LAGRANGE_VEC, libMesh::L2_RAVIART_THOMAS, libMesh::LAGRANGE_VEC, libMesh::MONOMIAL_VEC, libMesh::NEDELEC_ONE, and libMesh::RAVIART_THOMAS.

415 {
416  switch (dim)
417  {
418  // 0D
419  case 0:
420  {
421  switch (fet.family)
422  {
423  case HIERARCHIC_VEC:
424  return std::make_unique<FEHierarchicVec<0>>(fet);
425 
426  case L2_HIERARCHIC_VEC:
427  return std::make_unique<FEL2HierarchicVec<0>>(fet);
428 
429  case LAGRANGE_VEC:
430  return std::make_unique<FELagrangeVec<0>>(fet);
431 
432  case L2_LAGRANGE_VEC:
433  return std::make_unique<FEL2LagrangeVec<0>>(fet);
434 
435  case MONOMIAL_VEC:
436  return std::make_unique<FEMonomialVec<0>>(fet);
437 
438  default:
439  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
440  }
441  }
442  case 1:
443  {
444  switch (fet.family)
445  {
446  case HIERARCHIC_VEC:
447  return std::make_unique<FEHierarchicVec<1>>(fet);
448 
449  case L2_HIERARCHIC_VEC:
450  return std::make_unique<FEL2HierarchicVec<1>>(fet);
451 
452  case LAGRANGE_VEC:
453  return std::make_unique<FELagrangeVec<1>>(fet);
454 
455  case L2_LAGRANGE_VEC:
456  return std::make_unique<FEL2LagrangeVec<1>>(fet);
457 
458  case MONOMIAL_VEC:
459  return std::make_unique<FEMonomialVec<1>>(fet);
460 
461  default:
462  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
463  }
464  }
465  case 2:
466  {
467  switch (fet.family)
468  {
469  case HIERARCHIC_VEC:
470  return std::make_unique<FEHierarchicVec<2>>(fet);
471 
472  case L2_HIERARCHIC_VEC:
473  return std::make_unique<FEL2HierarchicVec<2>>(fet);
474 
475  case LAGRANGE_VEC:
476  return std::make_unique<FELagrangeVec<2>>(fet);
477 
478  case L2_LAGRANGE_VEC:
479  return std::make_unique<FEL2LagrangeVec<2>>(fet);
480 
481  case MONOMIAL_VEC:
482  return std::make_unique<FEMonomialVec<2>>(fet);
483 
484  case NEDELEC_ONE:
485  return std::make_unique<FENedelecOne<2>>(fet);
486 
487  case RAVIART_THOMAS:
488  return std::make_unique<FERaviartThomas<2>>(fet);
489 
490  case L2_RAVIART_THOMAS:
491  return std::make_unique<FEL2RaviartThomas<2>>(fet);
492 
493  default:
494  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
495  }
496  }
497  case 3:
498  {
499  switch (fet.family)
500  {
501  case HIERARCHIC_VEC:
502  return std::make_unique<FEHierarchicVec<3>>(fet);
503 
504  case L2_HIERARCHIC_VEC:
505  return std::make_unique<FEL2HierarchicVec<3>>(fet);
506 
507  case LAGRANGE_VEC:
508  return std::make_unique<FELagrangeVec<3>>(fet);
509 
510  case L2_LAGRANGE_VEC:
511  return std::make_unique<FEL2LagrangeVec<3>>(fet);
512 
513  case MONOMIAL_VEC:
514  return std::make_unique<FEMonomialVec<3>>(fet);
515 
516  case NEDELEC_ONE:
517  return std::make_unique<FENedelecOne<3>>(fet);
518 
519  case RAVIART_THOMAS:
520  return std::make_unique<FERaviartThomas<3>>(fet);
521 
522  case L2_RAVIART_THOMAS:
523  return std::make_unique<FEL2RaviartThomas<3>>(fet);
524 
525  default:
526  libmesh_error_msg("ERROR: Bad FEType.family == " << Utility::enum_to_string(fet.family));
527  }
528  }
529 
530  default:
531  libmesh_error_msg("Invalid dimension dim = " << dim);
532  } // switch(dim)
533 }
FEFamily family
The type of finite element.
Definition: fe_type.h:221
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:660
std::string enum_to_string(const T e)

◆ build_InfFE() [1/3]

static std::unique_ptr<FEGenericBase> libMesh::FEGenericBase< FEOutputType< T >::type >::build_InfFE ( const unsigned int  dim,
const FEType type 
)
staticinherited

Builds a specific infinite element type.

A std::unique_ptr<FEGenericBase> is returned to prevent a memory leak. This way the user need not remember to delete the object.

The build call will fail if the OutputShape of this class is not compatible with the output required for the requested type

◆ build_InfFE() [2/3]

std::unique_ptr< FEGenericBase< Real > > libMesh::FEGenericBase< Real >::build_InfFE ( const unsigned int  dim,
const FEType fet 
)
inherited

Definition at line 546 of file fe_base.C.

References libMesh::CARTESIAN, dim, libMesh::Utility::enum_to_string(), libMesh::FEType::inf_map, libMesh::INFINITE_MAP, libMesh::JACOBI_20_00, libMesh::JACOBI_30_00, libMesh::LAGRANGE, libMesh::LEGENDRE, and libMesh::FEType::radial_family.

548 {
549  switch (dim)
550  {
551 
552  // 1D
553  case 1:
554  {
555  switch (fet.radial_family)
556  {
557  case INFINITE_MAP:
558  libmesh_error_msg("ERROR: Can't build an infinite element with FEFamily = " << Utility::enum_to_string(fet.radial_family));
559 
560  case JACOBI_20_00:
561  {
562  switch (fet.inf_map)
563  {
564  case CARTESIAN:
565  return std::make_unique<InfFE<1,JACOBI_20_00,CARTESIAN>>(fet);
566 
567  default:
568  libmesh_error_msg("ERROR: Can't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
569  }
570  }
571 
572  case JACOBI_30_00:
573  {
574  switch (fet.inf_map)
575  {
576  case CARTESIAN:
577  return std::make_unique<InfFE<1,JACOBI_30_00,CARTESIAN>>(fet);
578 
579  default:
580  libmesh_error_msg("ERROR: Can't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
581  }
582  }
583 
584  case LEGENDRE:
585  {
586  switch (fet.inf_map)
587  {
588  case CARTESIAN:
589  return std::make_unique<InfFE<1,LEGENDRE,CARTESIAN>>(fet);
590 
591  default:
592  libmesh_error_msg("ERROR: Can't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
593  }
594  }
595 
596  case LAGRANGE:
597  {
598  switch (fet.inf_map)
599  {
600  case CARTESIAN:
601  return std::make_unique<InfFE<1,LAGRANGE,CARTESIAN>>(fet);
602 
603  default:
604  libmesh_error_msg("ERROR: Can't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
605  }
606  }
607 
608  default:
609  libmesh_error_msg("ERROR: Bad FEType.radial_family= " << Utility::enum_to_string(fet.radial_family));
610  }
611  }
612 
613 
614 
615 
616  // 2D
617  case 2:
618  {
619  switch (fet.radial_family)
620  {
621  case INFINITE_MAP:
622  libmesh_error_msg("ERROR: Can't build an infinite element with FEFamily = " << Utility::enum_to_string(fet.radial_family));
623 
624  case JACOBI_20_00:
625  {
626  switch (fet.inf_map)
627  {
628  case CARTESIAN:
629  return std::make_unique<InfFE<2,JACOBI_20_00,CARTESIAN>>(fet);
630 
631  default:
632  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
633  }
634  }
635 
636  case JACOBI_30_00:
637  {
638  switch (fet.inf_map)
639  {
640  case CARTESIAN:
641  return std::make_unique<InfFE<2,JACOBI_30_00,CARTESIAN>>(fet);
642 
643  default:
644  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
645  }
646  }
647 
648  case LEGENDRE:
649  {
650  switch (fet.inf_map)
651  {
652  case CARTESIAN:
653  return std::make_unique<InfFE<2,LEGENDRE,CARTESIAN>>(fet);
654 
655  default:
656  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
657  }
658  }
659 
660  case LAGRANGE:
661  {
662  switch (fet.inf_map)
663  {
664  case CARTESIAN:
665  return std::make_unique<InfFE<2,LAGRANGE,CARTESIAN>>(fet);
666 
667  default:
668  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
669  }
670  }
671 
672  default:
673  libmesh_error_msg("ERROR: Bad FEType.radial_family= " << Utility::enum_to_string(fet.radial_family));
674  }
675  }
676 
677 
678 
679 
680  // 3D
681  case 3:
682  {
683  switch (fet.radial_family)
684  {
685  case INFINITE_MAP:
686  libmesh_error_msg("ERROR: Don't build an infinite element with FEFamily = " << Utility::enum_to_string(fet.radial_family));
687 
688  case JACOBI_20_00:
689  {
690  switch (fet.inf_map)
691  {
692  case CARTESIAN:
693  return std::make_unique<InfFE<3,JACOBI_20_00,CARTESIAN>>(fet);
694 
695  default:
696  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
697  }
698  }
699 
700  case JACOBI_30_00:
701  {
702  switch (fet.inf_map)
703  {
704  case CARTESIAN:
705  return std::make_unique<InfFE<3,JACOBI_30_00,CARTESIAN>>(fet);
706 
707  default:
708  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
709  }
710  }
711 
712  case LEGENDRE:
713  {
714  switch (fet.inf_map)
715  {
716  case CARTESIAN:
717  return std::make_unique<InfFE<3,LEGENDRE,CARTESIAN>>(fet);
718 
719  default:
720  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
721  }
722  }
723 
724  case LAGRANGE:
725  {
726  switch (fet.inf_map)
727  {
728  case CARTESIAN:
729  return std::make_unique<InfFE<3,LAGRANGE,CARTESIAN>>(fet);
730 
731  default:
732  libmesh_error_msg("ERROR: Don't build an infinite element with InfMapType = " << Utility::enum_to_string(fet.inf_map));
733  }
734  }
735 
736  default:
737  libmesh_error_msg("ERROR: Bad FEType.radial_family= " << Utility::enum_to_string(fet.radial_family));
738  }
739  }
740 
741  default:
742  libmesh_error_msg("Invalid dimension dim = " << dim);
743  }
744 }
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:660
InfMapType inf_map
The coordinate mapping type of the infinite element.
Definition: fe_type.h:275
FEFamily radial_family
The type of approximation in radial direction.
Definition: fe_type.h:267
std::string enum_to_string(const T e)

◆ build_InfFE() [3/3]

std::unique_ptr< FEGenericBase< RealGradient > > libMesh::FEGenericBase< RealGradient >::build_InfFE ( const unsigned  int,
const FEType  
)
inherited

Definition at line 750 of file fe_base.C.

752 {
753  // No vector types defined... YET.
754  libmesh_not_implemented();
755  return std::unique_ptr<FEVectorBase>();
756 }

◆ cache()

void libMesh::FE< Dim, T >::cache ( const Elem elem)
protectedinherited

Repopulate the element cache with the node locations, edge and face orientations of the element elem.

Definition at line 153 of file fe.C.

154 {
155  cached_nodes.resize(elem->n_nodes());
156  for (auto n : elem->node_index_range())
157  cached_nodes[n] = elem->point(n);
158 
159  if (FEInterface::orientation_dependent(T))
160  {
161  cached_edges.resize(elem->n_edges());
162  for (auto n : elem->edge_index_range())
164 
165  cached_faces.resize(elem->n_faces());
166  for (auto n : elem->face_index_range())
168  }
169 }
std::vector< bool > cached_faces
Definition: fe.h:797
IntRange< unsigned short > edge_index_range() const
Definition: elem.h:2692
IntRange< unsigned short > face_index_range() const
Definition: elem.h:2701
virtual unsigned int n_nodes() const =0
virtual unsigned int n_edges() const =0
bool positive_edge_orientation(const unsigned int i) const
Definition: elem.C:3589
std::vector< bool > cached_edges
Definition: fe.h:797
IntRange< unsigned short > node_index_range() const
Definition: elem.h:2683
bool positive_face_orientation(const unsigned int i) const
Definition: elem.C:3598
virtual unsigned int n_faces() const =0
std::vector< Point > cached_nodes
Vectors holding the node locations, edge and face orientations of the last element we cached...
Definition: fe.h:796
const Point & point(const unsigned int i) const
Definition: elem.h:2453

◆ calculating_nothing()

bool libMesh::FEGenericBase< FEOutputType< T >::type >::calculating_nothing ( ) const
inlineprotectedinherited
Returns
true iff no calculations have been requested of this FE object or of its associated FEMap

Definition at line 568 of file fe_base.h.

References libMesh::FEAbstract::calculate_curl_phi, libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_div_phi, libMesh::FEAbstract::calculate_dphi, libMesh::FEAbstract::calculate_map, libMesh::FEAbstract::calculate_nothing, and libMesh::FEAbstract::calculate_phi.

569  {
570  return calculate_nothing &&
571  !this->calculate_phi && !this->calculate_dphi &&
572 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
573  !this->calculate_d2phi &&
574 #endif
575  !this->calculate_curl_phi && !this->calculate_div_phi &&
576  !this->calculate_map;
577  }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:712
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
bool calculate_div_phi
Should we calculate shape function divergences?
Definition: fe_abstract.h:717
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
bool calculate_nothing
Are we potentially deliberately calculating nothing?
Definition: fe_abstract.h:681

◆ coarsened_dof_values() [1/2]

void libMesh::FEGenericBase< FEOutputType< T >::type >::coarsened_dof_values ( const NumericVector< Number > &  global_vector,
const DofMap dof_map,
const Elem coarse_elem,
DenseVector< Number > &  coarse_dofs,
const unsigned int  var,
const bool  use_old_dof_indices = false 
)
staticinherited

Creates a local projection on coarse_elem, based on the DoF values in global_vector for it's children.

Computes a vector of coefficients corresponding to dof_indices for only the single given var

Definition at line 1012 of file fe_base.C.

References libMesh::C_ONE, libMesh::Elem::child_ptr(), libMesh::Elem::child_ref_range(), libMesh::DenseMatrix< T >::cholesky_solve(), libMesh::FEType::default_quadrature_rule(), dim, libMesh::Elem::dim(), libMesh::DISCONTINUOUS, libMesh::DofMap::dof_indices(), libMesh::FEInterface::dofs_on_edge(), libMesh::FEInterface::dofs_on_side(), libMesh::Elem::edge_index_range(), libMesh::TensorTools::inner_product(), libMesh::FEMap::inverse_map(), libMesh::Elem::is_child_on_edge(), libMesh::Elem::is_child_on_side(), libMesh::Elem::is_vertex(), libMesh::libmesh_assert(), libMesh::Elem::max_descendant_p_level(), libMesh::Elem::n_children(), libMesh::FEInterface::n_dofs(), libMesh::FEInterface::n_dofs_at_node(), n_nodes, libMesh::Elem::n_nodes(), libMesh::DofMap::old_dof_indices(), libMesh::FEType::order, libMesh::Elem::p_level(), libMesh::DenseVector< T >::resize(), libMesh::DenseMatrix< T >::resize(), libMesh::Elem::side_index_range(), libMesh::TOLERANCE, libMesh::DofMap::variable_type(), libMesh::DenseMatrix< T >::zero(), libMesh::DenseVector< T >::zero(), and libMesh::zero.

1018 {
1019  // Side/edge local DOF indices
1020  std::vector<unsigned int> new_side_dofs, old_side_dofs;
1021 
1022  // FIXME: what about 2D shells in 3D space?
1023  unsigned int dim = elem->dim();
1024 
1025  // Cache n_children(); it's a virtual call but it's const.
1026  const unsigned int n_children = elem->n_children();
1027 
1028  // We use local FE objects for now
1029  // FIXME: we should use more, external objects instead for efficiency
1030  const FEType & base_fe_type = dof_map.variable_type(var);
1031  std::unique_ptr<FEGenericBase<OutputShape>> fe
1032  (FEGenericBase<OutputShape>::build(dim, base_fe_type));
1033  std::unique_ptr<FEGenericBase<OutputShape>> fe_coarse
1034  (FEGenericBase<OutputShape>::build(dim, base_fe_type));
1035 
1036  std::unique_ptr<QBase> qrule (base_fe_type.default_quadrature_rule(dim));
1037  std::unique_ptr<QBase> qedgerule (base_fe_type.default_quadrature_rule(1));
1038  std::unique_ptr<QBase> qsiderule (base_fe_type.default_quadrature_rule(dim-1));
1039  std::vector<Point> coarse_qpoints;
1040 
1041  // The values of the shape functions at the quadrature
1042  // points
1043  const std::vector<std::vector<OutputShape>> & phi_values =
1044  fe->get_phi();
1045  const std::vector<std::vector<OutputShape>> & phi_coarse =
1046  fe_coarse->get_phi();
1047 
1048  // The gradients of the shape functions at the quadrature
1049  // points on the child element.
1050  const std::vector<std::vector<OutputGradient>> * dphi_values =
1051  nullptr;
1052  const std::vector<std::vector<OutputGradient>> * dphi_coarse =
1053  nullptr;
1054 
1055  const FEContinuity cont = fe->get_continuity();
1056 
1057  if (cont == C_ONE)
1058  {
1059  const std::vector<std::vector<OutputGradient>> &
1060  ref_dphi_values = fe->get_dphi();
1061  dphi_values = &ref_dphi_values;
1062  const std::vector<std::vector<OutputGradient>> &
1063  ref_dphi_coarse = fe_coarse->get_dphi();
1064  dphi_coarse = &ref_dphi_coarse;
1065  }
1066 
1067  // The Jacobian * quadrature weight at the quadrature points
1068  const std::vector<Real> & JxW =
1069  fe->get_JxW();
1070 
1071  // The XYZ locations of the quadrature points on the
1072  // child element
1073  const std::vector<Point> & xyz_values =
1074  fe->get_xyz();
1075 
1076  // Number of nodes on parent element
1077  const unsigned int n_nodes = elem->n_nodes();
1078 
1079  // Number of dofs on parent element
1080  const unsigned int new_n_dofs =
1081  FEInterface::n_dofs(base_fe_type, elem->max_descendant_p_level(), elem);
1082 
1083  // Fixed vs. free DoFs on edge/face projections
1084  std::vector<char> dof_is_fixed(new_n_dofs, false); // bools
1085  std::vector<int> free_dof(new_n_dofs, 0);
1086 
1087  DenseMatrix<Real> Ke;
1089  Ue.resize(new_n_dofs); Ue.zero();
1090 
1091 
1092  // When coarsening, in general, we need a series of
1093  // projections to ensure a unique and continuous
1094  // solution. We start by interpolating nodes, then
1095  // hold those fixed and project edges, then
1096  // hold those fixed and project faces, then
1097  // hold those fixed and project interiors
1098 
1099  // Copy node values first
1100  {
1101  std::vector<dof_id_type> node_dof_indices;
1102  if (use_old_dof_indices)
1103  dof_map.old_dof_indices (elem, node_dof_indices, var);
1104  else
1105  dof_map.dof_indices (elem, node_dof_indices, var);
1106 
1107  unsigned int current_dof = 0;
1108  for (unsigned int n=0; n!= n_nodes; ++n)
1109  {
1110  // FIXME: this should go through the DofMap,
1111  // not duplicate dof_indices code badly!
1112  const unsigned int my_nc =
1113  FEInterface::n_dofs_at_node (base_fe_type, elem->max_descendant_p_level(), elem, n);
1114  if (!elem->is_vertex(n))
1115  {
1116  current_dof += my_nc;
1117  continue;
1118  }
1119 
1120  // We're assuming here that child n shares vertex n,
1121  // which is wrong on non-simplices right now
1122  // ... but this code isn't necessary except on elements
1123  // where p refinement creates more vertex dofs; we have
1124  // no such elements yet.
1125  int extra_order = 0;
1126  // if (elem->child_ptr(n)->p_level() < elem->p_level())
1127  // extra_order = elem->child_ptr(n)->p_level();
1128  const unsigned int nc =
1129  FEInterface::n_dofs_at_node (base_fe_type, extra_order, elem, n);
1130  for (unsigned int i=0; i!= nc; ++i)
1131  {
1132  Ue(current_dof) =
1133  old_vector(node_dof_indices[current_dof]);
1134  dof_is_fixed[current_dof] = true;
1135  current_dof++;
1136  }
1137  }
1138  }
1139 
1140  FEType fe_type = base_fe_type, temp_fe_type;
1141  fe_type.order = fe_type.order + elem->max_descendant_p_level();
1142 
1143  // In 3D, project any edge values next
1144  if (dim > 2 && cont != DISCONTINUOUS)
1145  for (auto e : elem->edge_index_range())
1146  {
1147  FEInterface::dofs_on_edge(elem, dim, fe_type,
1148  e, new_side_dofs);
1149 
1150  const unsigned int n_new_side_dofs =
1151  cast_int<unsigned int>(new_side_dofs.size());
1152 
1153  // Some edge dofs are on nodes and already
1154  // fixed, others are free to calculate
1155  unsigned int free_dofs = 0;
1156  for (unsigned int i=0; i != n_new_side_dofs; ++i)
1157  if (!dof_is_fixed[new_side_dofs[i]])
1158  free_dof[free_dofs++] = i;
1159  Ke.resize (free_dofs, free_dofs); Ke.zero();
1160  Fe.resize (free_dofs); Fe.zero();
1161  // The new edge coefficients
1162  DenseVector<Number> Uedge(free_dofs);
1163 
1164  // Add projection terms from each child sharing
1165  // this edge
1166  for (unsigned int c=0; c != n_children; ++c)
1167  {
1168  if (!elem->is_child_on_edge(c,e))
1169  continue;
1170  const Elem * child = elem->child_ptr(c);
1171 
1172  std::vector<dof_id_type> child_dof_indices;
1173  if (use_old_dof_indices)
1174  dof_map.old_dof_indices (child,
1175  child_dof_indices, var);
1176  else
1177  dof_map.dof_indices (child,
1178  child_dof_indices, var);
1179  const unsigned int child_n_dofs =
1180  cast_int<unsigned int>
1181  (child_dof_indices.size());
1182 
1183  temp_fe_type = base_fe_type;
1184  temp_fe_type.order = temp_fe_type.order + child->p_level();
1185 
1186  FEInterface::dofs_on_edge(child, dim,
1187  temp_fe_type, e, old_side_dofs);
1188 
1189  // Initialize both child and parent FE data
1190  // on the child's edge
1191  fe->attach_quadrature_rule (qedgerule.get());
1192  fe->edge_reinit (child, e);
1193  const unsigned int n_qp = qedgerule->n_points();
1194 
1195  FEMap::inverse_map (dim, elem, xyz_values,
1196  coarse_qpoints);
1197 
1198  fe_coarse->reinit(elem, &coarse_qpoints);
1199 
1200  // Loop over the quadrature points
1201  for (unsigned int qp=0; qp<n_qp; qp++)
1202  {
1203  // solution value at the quadrature point
1204  OutputNumber fineval = libMesh::zero;
1205  // solution grad at the quadrature point
1206  OutputNumberGradient finegrad;
1207 
1208  // Sum the solution values * the DOF
1209  // values at the quadrature point to
1210  // get the solution value and gradient.
1211  for (unsigned int i=0; i<child_n_dofs;
1212  i++)
1213  {
1214  fineval +=
1215  (old_vector(child_dof_indices[i])*
1216  phi_values[i][qp]);
1217  if (cont == C_ONE)
1218  finegrad += (*dphi_values)[i][qp] *
1219  old_vector(child_dof_indices[i]);
1220  }
1221 
1222  // Form edge projection matrix
1223  for (unsigned int sidei=0, freei=0; sidei != n_new_side_dofs; ++sidei)
1224  {
1225  unsigned int i = new_side_dofs[sidei];
1226  // fixed DoFs aren't test functions
1227  if (dof_is_fixed[i])
1228  continue;
1229  for (unsigned int sidej=0, freej=0; sidej != n_new_side_dofs; ++sidej)
1230  {
1231  unsigned int j =
1232  new_side_dofs[sidej];
1233  if (dof_is_fixed[j])
1234  Fe(freei) -=
1235  TensorTools::inner_product(phi_coarse[i][qp],
1236  phi_coarse[j][qp]) *
1237  JxW[qp] * Ue(j);
1238  else
1239  Ke(freei,freej) +=
1240  TensorTools::inner_product(phi_coarse[i][qp],
1241  phi_coarse[j][qp]) *
1242  JxW[qp];
1243  if (cont == C_ONE)
1244  {
1245  if (dof_is_fixed[j])
1246  Fe(freei) -=
1247  TensorTools::inner_product((*dphi_coarse)[i][qp],
1248  (*dphi_coarse)[j][qp]) *
1249  JxW[qp] * Ue(j);
1250  else
1251  Ke(freei,freej) +=
1252  TensorTools::inner_product((*dphi_coarse)[i][qp],
1253  (*dphi_coarse)[j][qp]) *
1254  JxW[qp];
1255  }
1256  if (!dof_is_fixed[j])
1257  freej++;
1258  }
1259  Fe(freei) += TensorTools::inner_product(phi_coarse[i][qp],
1260  fineval) * JxW[qp];
1261  if (cont == C_ONE)
1262  Fe(freei) +=
1263  TensorTools::inner_product(finegrad, (*dphi_coarse)[i][qp]) * JxW[qp];
1264  freei++;
1265  }
1266  }
1267  }
1268  Ke.cholesky_solve(Fe, Uedge);
1269 
1270  // Transfer new edge solutions to element
1271  for (unsigned int i=0; i != free_dofs; ++i)
1272  {
1273  Number & ui = Ue(new_side_dofs[free_dof[i]]);
1274  libmesh_assert(std::abs(ui) < TOLERANCE ||
1275  std::abs(ui - Uedge(i)) < TOLERANCE);
1276  ui = Uedge(i);
1277  dof_is_fixed[new_side_dofs[free_dof[i]]] = true;
1278  }
1279  }
1280 
1281  // Project any side values (edges in 2D, faces in 3D)
1282  if (dim > 1 && cont != DISCONTINUOUS)
1283  for (auto s : elem->side_index_range())
1284  {
1285  FEInterface::dofs_on_side(elem, dim, fe_type,
1286  s, new_side_dofs);
1287 
1288  const unsigned int n_new_side_dofs =
1289  cast_int<unsigned int>(new_side_dofs.size());
1290 
1291  // Some side dofs are on nodes/edges and already
1292  // fixed, others are free to calculate
1293  unsigned int free_dofs = 0;
1294  for (unsigned int i=0; i != n_new_side_dofs; ++i)
1295  if (!dof_is_fixed[new_side_dofs[i]])
1296  free_dof[free_dofs++] = i;
1297  Ke.resize (free_dofs, free_dofs); Ke.zero();
1298  Fe.resize (free_dofs); Fe.zero();
1299  // The new side coefficients
1300  DenseVector<Number> Uside(free_dofs);
1301 
1302  // Add projection terms from each child sharing
1303  // this side
1304  for (unsigned int c=0; c != n_children; ++c)
1305  {
1306  if (!elem->is_child_on_side(c,s))
1307  continue;
1308  const Elem * child = elem->child_ptr(c);
1309 
1310  std::vector<dof_id_type> child_dof_indices;
1311  if (use_old_dof_indices)
1312  dof_map.old_dof_indices (child,
1313  child_dof_indices, var);
1314  else
1315  dof_map.dof_indices (child,
1316  child_dof_indices, var);
1317  const unsigned int child_n_dofs =
1318  cast_int<unsigned int>
1319  (child_dof_indices.size());
1320 
1321  temp_fe_type = base_fe_type;
1322  temp_fe_type.order = temp_fe_type.order + child->p_level();
1323 
1324  FEInterface::dofs_on_side(child, dim,
1325  temp_fe_type, s, old_side_dofs);
1326 
1327  // Initialize both child and parent FE data
1328  // on the child's side
1329  fe->attach_quadrature_rule (qsiderule.get());
1330  fe->reinit (child, s);
1331  const unsigned int n_qp = qsiderule->n_points();
1332 
1333  FEMap::inverse_map (dim, elem, xyz_values,
1334  coarse_qpoints);
1335 
1336  fe_coarse->reinit(elem, &coarse_qpoints);
1337 
1338  // Loop over the quadrature points
1339  for (unsigned int qp=0; qp<n_qp; qp++)
1340  {
1341  // solution value at the quadrature point
1342  OutputNumber fineval = libMesh::zero;
1343  // solution grad at the quadrature point
1344  OutputNumberGradient finegrad;
1345 
1346  // Sum the solution values * the DOF
1347  // values at the quadrature point to
1348  // get the solution value and gradient.
1349  for (unsigned int i=0; i<child_n_dofs;
1350  i++)
1351  {
1352  fineval +=
1353  old_vector(child_dof_indices[i]) *
1354  phi_values[i][qp];
1355  if (cont == C_ONE)
1356  finegrad += (*dphi_values)[i][qp] *
1357  old_vector(child_dof_indices[i]);
1358  }
1359 
1360  // Form side projection matrix
1361  for (unsigned int sidei=0, freei=0; sidei != n_new_side_dofs; ++sidei)
1362  {
1363  unsigned int i = new_side_dofs[sidei];
1364  // fixed DoFs aren't test functions
1365  if (dof_is_fixed[i])
1366  continue;
1367  for (unsigned int sidej=0, freej=0; sidej != n_new_side_dofs; ++sidej)
1368  {
1369  unsigned int j =
1370  new_side_dofs[sidej];
1371  if (dof_is_fixed[j])
1372  Fe(freei) -=
1373  TensorTools::inner_product(phi_coarse[i][qp],
1374  phi_coarse[j][qp]) *
1375  JxW[qp] * Ue(j);
1376  else
1377  Ke(freei,freej) +=
1378  TensorTools::inner_product(phi_coarse[i][qp],
1379  phi_coarse[j][qp]) *
1380  JxW[qp];
1381  if (cont == C_ONE)
1382  {
1383  if (dof_is_fixed[j])
1384  Fe(freei) -=
1385  TensorTools::inner_product((*dphi_coarse)[i][qp],
1386  (*dphi_coarse)[j][qp]) *
1387  JxW[qp] * Ue(j);
1388  else
1389  Ke(freei,freej) +=
1390  TensorTools::inner_product((*dphi_coarse)[i][qp],
1391  (*dphi_coarse)[j][qp]) *
1392  JxW[qp];
1393  }
1394  if (!dof_is_fixed[j])
1395  freej++;
1396  }
1397  Fe(freei) += TensorTools::inner_product(fineval, phi_coarse[i][qp]) * JxW[qp];
1398  if (cont == C_ONE)
1399  Fe(freei) +=
1400  TensorTools::inner_product(finegrad, (*dphi_coarse)[i][qp]) * JxW[qp];
1401  freei++;
1402  }
1403  }
1404  }
1405  Ke.cholesky_solve(Fe, Uside);
1406 
1407  // Transfer new side solutions to element
1408  for (unsigned int i=0; i != free_dofs; ++i)
1409  {
1410  Number & ui = Ue(new_side_dofs[free_dof[i]]);
1411  libmesh_assert(std::abs(ui) < TOLERANCE ||
1412  std::abs(ui - Uside(i)) < TOLERANCE);
1413  ui = Uside(i);
1414  dof_is_fixed[new_side_dofs[free_dof[i]]] = true;
1415  }
1416  }
1417 
1418  // Project the interior values, finally
1419 
1420  // Some interior dofs are on nodes/edges/sides and
1421  // already fixed, others are free to calculate
1422  unsigned int free_dofs = 0;
1423  for (unsigned int i=0; i != new_n_dofs; ++i)
1424  if (!dof_is_fixed[i])
1425  free_dof[free_dofs++] = i;
1426  Ke.resize (free_dofs, free_dofs); Ke.zero();
1427  Fe.resize (free_dofs); Fe.zero();
1428  // The new interior coefficients
1429  DenseVector<Number> Uint(free_dofs);
1430 
1431  // Add projection terms from each child
1432  for (auto & child : elem->child_ref_range())
1433  {
1434  std::vector<dof_id_type> child_dof_indices;
1435  if (use_old_dof_indices)
1436  dof_map.old_dof_indices (&child,
1437  child_dof_indices, var);
1438  else
1439  dof_map.dof_indices (&child,
1440  child_dof_indices, var);
1441  const unsigned int child_n_dofs =
1442  cast_int<unsigned int>
1443  (child_dof_indices.size());
1444 
1445  // Initialize both child and parent FE data
1446  // on the child's quadrature points
1447  fe->attach_quadrature_rule (qrule.get());
1448  fe->reinit (&child);
1449  const unsigned int n_qp = qrule->n_points();
1450 
1451  FEMap::inverse_map (dim, elem, xyz_values, coarse_qpoints);
1452 
1453  fe_coarse->reinit(elem, &coarse_qpoints);
1454 
1455  // Loop over the quadrature points
1456  for (unsigned int qp=0; qp<n_qp; qp++)
1457  {
1458  // solution value at the quadrature point
1459  OutputNumber fineval = libMesh::zero;
1460  // solution grad at the quadrature point
1461  OutputNumberGradient finegrad;
1462 
1463  // Sum the solution values * the DOF
1464  // values at the quadrature point to
1465  // get the solution value and gradient.
1466  for (unsigned int i=0; i<child_n_dofs; i++)
1467  {
1468  fineval +=
1469  (old_vector(child_dof_indices[i]) *
1470  phi_values[i][qp]);
1471  if (cont == C_ONE)
1472  finegrad += (*dphi_values)[i][qp] *
1473  old_vector(child_dof_indices[i]);
1474  }
1475 
1476  // Form interior projection matrix
1477  for (unsigned int i=0, freei=0;
1478  i != new_n_dofs; ++i)
1479  {
1480  // fixed DoFs aren't test functions
1481  if (dof_is_fixed[i])
1482  continue;
1483  for (unsigned int j=0, freej=0; j !=
1484  new_n_dofs; ++j)
1485  {
1486  if (dof_is_fixed[j])
1487  Fe(freei) -=
1488  TensorTools::inner_product(phi_coarse[i][qp],
1489  phi_coarse[j][qp]) *
1490  JxW[qp] * Ue(j);
1491  else
1492  Ke(freei,freej) +=
1493  TensorTools::inner_product(phi_coarse[i][qp],
1494  phi_coarse[j][qp]) *
1495  JxW[qp];
1496  if (cont == C_ONE)
1497  {
1498  if (dof_is_fixed[j])
1499  Fe(freei) -=
1500  TensorTools::inner_product((*dphi_coarse)[i][qp],
1501  (*dphi_coarse)[j][qp]) *
1502  JxW[qp] * Ue(j);
1503  else
1504  Ke(freei,freej) +=
1505  TensorTools::inner_product((*dphi_coarse)[i][qp],
1506  (*dphi_coarse)[j][qp]) *
1507  JxW[qp];
1508  }
1509  if (!dof_is_fixed[j])
1510  freej++;
1511  }
1512  Fe(freei) += TensorTools::inner_product(phi_coarse[i][qp], fineval) *
1513  JxW[qp];
1514  if (cont == C_ONE)
1515  Fe(freei) += TensorTools::inner_product(finegrad, (*dphi_coarse)[i][qp]) * JxW[qp];
1516  freei++;
1517  }
1518  }
1519  }
1520  Ke.cholesky_solve(Fe, Uint);
1521 
1522  // Transfer new interior solutions to element
1523  for (unsigned int i=0; i != free_dofs; ++i)
1524  {
1525  Number & ui = Ue(free_dof[i]);
1526  libmesh_assert(std::abs(ui) < TOLERANCE ||
1527  std::abs(ui - Uint(i)) < TOLERANCE);
1528  ui = Uint(i);
1529  // We should be fixing all dofs by now; no need to keep track of
1530  // that unless we're debugging
1531 #ifndef NDEBUG
1532  dof_is_fixed[free_dof[i]] = true;
1533 #endif
1534  }
1535 
1536 #ifndef NDEBUG
1537  // Make sure every DoF got reached!
1538  for (unsigned int i=0; i != new_n_dofs; ++i)
1539  libmesh_assert(dof_is_fixed[i]);
1540 #endif
1541 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
virtual void zero() override final
Set every element in the vector to 0.
Definition: dense_vector.h:420
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Definition: dof_map.C:2229
virtual void zero() override final
Sets all elements of the matrix to 0 and resets any decomposition flag which may have been previously...
Definition: dense_matrix.h:911
static constexpr Real TOLERANCE
void resize(const unsigned int n)
Resize the vector.
Definition: dense_vector.h:396
const FEType & variable_type(const unsigned int c) const
Definition: dof_map.h:2230
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
TensorTools::IncrementRank< OutputNumber >::type OutputNumberGradient
Definition: fe_base.h:124
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
const Number zero
.
Definition: libmesh.h:304
std::unique_ptr< QBase > default_quadrature_rule(const unsigned int dim, const int extraorder=0) const
Definition: fe_type.C:34
const dof_id_type n_nodes
Definition: tecplot_io.C:67
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:660
libmesh_assert(ctx)
unsigned int n_points() const
Definition: quadrature.h:131
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:762
TensorTools::MakeNumber< OutputShape >::type OutputNumber
Definition: fe_base.h:123
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
Definition: dense_matrix.h:895
void cholesky_solve(const DenseVector< T2 > &b, DenseVector< T2 > &x)
For symmetric positive definite (SPD) matrices.
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730
This class forms the foundation from which generic finite elements may be derived.
boostcopy::enable_if_c< ScalarTraits< T >::value &&ScalarTraits< T2 >::value, typename CompareTypes< T, T2 >::supertype >::type inner_product(const T &a, const T2 &b)
Definition: tensor_tools.h:51
const Elem * child_ptr(unsigned int i) const
Definition: elem.h:3163
void old_dof_indices(const Elem &elem, unsigned int n, std::vector< dof_id_type > &di, const unsigned int vn) const
Appends to the vector di the old global degree of freedom indices for elem.node_ref(n), for one variable vn.
Definition: dof_map.C:2483

◆ coarsened_dof_values() [2/2]

void libMesh::FEGenericBase< FEOutputType< T >::type >::coarsened_dof_values ( const NumericVector< Number > &  global_vector,
const DofMap dof_map,
const Elem coarse_elem,
DenseVector< Number > &  coarse_dofs,
const bool  use_old_dof_indices = false 
)
staticinherited

Creates a local projection on coarse_elem, based on the DoF values in global_vector for it's children.

Computes a vector of coefficients corresponding to all dof_indices.

Definition at line 1547 of file fe_base.C.

References libMesh::DenseVector< T >::append(), libMesh::make_range(), libMesh::DofMap::n_variables(), and libMesh::DenseVector< T >::resize().

1552 {
1553  Ue.resize(0);
1554 
1555  for (auto v : make_range(dof_map.n_variables()))
1556  {
1557  DenseVector<Number> Usub;
1558 
1559  coarsened_dof_values(old_vector, dof_map, elem, Usub,
1560  v, use_old_dof_indices);
1561 
1562  Ue.append (Usub);
1563  }
1564 }
static void coarsened_dof_values(const NumericVector< Number > &global_vector, const DofMap &dof_map, const Elem *coarse_elem, DenseVector< Number > &coarse_dofs, const unsigned int var, const bool use_old_dof_indices=false)
Creates a local projection on coarse_elem, based on the DoF values in global_vector for it&#39;s children...
Definition: fe_base.C:1012
unsigned int n_variables() const override
Definition: dof_map.h:635
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140

◆ compute_constraints() [1/49]

void libMesh::FE< 2, SCALAR >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 110 of file fe_scalar.C.

114 { }

◆ compute_constraints() [2/49]

void libMesh::FE< 3, SCALAR >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 117 of file fe_scalar.C.

121 { }

◆ compute_constraints() [3/49]

void libMesh::FE< 2, RATIONAL_BERNSTEIN >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 174 of file fe_rational.C.

178 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [4/49]

void libMesh::FE< 3, RATIONAL_BERNSTEIN >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 181 of file fe_rational.C.

185 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [5/49]

void libMesh::FE< 2, L2_HIERARCHIC >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 202 of file fe_l2_hierarchic.C.

206 { }

◆ compute_constraints() [6/49]

void libMesh::FE< 3, L2_HIERARCHIC >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 209 of file fe_l2_hierarchic.C.

213 { }

◆ compute_constraints() [7/49]

void libMesh::FE< 2, L2_LAGRANGE >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 277 of file fe_l2_lagrange.C.

281 { }

◆ compute_constraints() [8/49]

void libMesh::FE< 3, L2_LAGRANGE >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 284 of file fe_l2_lagrange.C.

288 { }

◆ compute_constraints() [9/49]

void libMesh::FE< 2, CLOUGH >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 284 of file fe_clough.C.

288 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [10/49]

void libMesh::FE< 3, CLOUGH >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 291 of file fe_clough.C.

295 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [11/49]

void libMesh::FE< 2, SIDE_HIERARCHIC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 313 of file fe_side_hierarchic.C.

317 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [12/49]

void libMesh::FE< 3, SIDE_HIERARCHIC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 320 of file fe_side_hierarchic.C.

324 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [13/49]

void libMesh::FE< 2, HERMITE >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 327 of file fe_hermite.C.

331 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [14/49]

void libMesh::FE< 3, HERMITE >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 334 of file fe_hermite.C.

338 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [15/49]

void libMesh::FE< 2, XYZ >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 423 of file fe_xyz.C.

423 {}

◆ compute_constraints() [16/49]

void libMesh::FE< 3, XYZ >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 424 of file fe_xyz.C.

424 {}

◆ compute_constraints() [17/49]

void libMesh::FE< 0, NEDELEC_ONE >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 427 of file fe_nedelec_one.C.

431 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [18/49]

void libMesh::FE< 1, NEDELEC_ONE >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 434 of file fe_nedelec_one.C.

438 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [19/49]

void libMesh::FE< 2, BERNSTEIN >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 436 of file fe_bernstein.C.

440 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [20/49]

void libMesh::FE< 2, MONOMIAL >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 438 of file fe_monomial.C.

438 {}

◆ compute_constraints() [21/49]

void libMesh::FE< 3, MONOMIAL >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 439 of file fe_monomial.C.

439 {}

◆ compute_constraints() [22/49]

void libMesh::FE< 2, NEDELEC_ONE >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 441 of file fe_nedelec_one.C.

445 { nedelec_one_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/2); }

◆ compute_constraints() [23/49]

void libMesh::FE< 3, BERNSTEIN >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 443 of file fe_bernstein.C.

447 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [24/49]

void libMesh::FE< 3, NEDELEC_ONE >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 448 of file fe_nedelec_one.C.

452 { nedelec_one_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/3); }

◆ compute_constraints() [25/49]

void libMesh::FE< 2, HIERARCHIC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 490 of file fe_hierarchic.C.

494 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [26/49]

void libMesh::FE< 0, RAVIART_THOMAS >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 491 of file fe_raviart.C.

495 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [27/49]

void libMesh::FE< 3, HIERARCHIC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 497 of file fe_hierarchic.C.

501 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [28/49]

void libMesh::FE< 1, RAVIART_THOMAS >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 498 of file fe_raviart.C.

502 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [29/49]

void libMesh::FE< 2, RAVIART_THOMAS >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 505 of file fe_raviart.C.

509 { raviart_thomas_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/2); }

◆ compute_constraints() [30/49]

void libMesh::FE< 3, RAVIART_THOMAS >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 512 of file fe_raviart.C.

516 { raviart_thomas_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/3); }

◆ compute_constraints() [31/49]

void libMesh::FE< 0, L2_RAVIART_THOMAS >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 519 of file fe_raviart.C.

523 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [32/49]

void libMesh::FE< 1, L2_RAVIART_THOMAS >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 526 of file fe_raviart.C.

530 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [33/49]

void libMesh::FE< 2, L2_RAVIART_THOMAS >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 533 of file fe_raviart.C.

537 { raviart_thomas_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/2); }

◆ compute_constraints() [34/49]

void libMesh::FE< 3, L2_RAVIART_THOMAS >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 540 of file fe_raviart.C.

544 { raviart_thomas_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/3); }

◆ compute_constraints() [35/49]

static void libMesh::FE< Dim, T >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
staticinherited

Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to variable number var_number, using element-specific optimizations if possible.

◆ compute_constraints() [36/49]

void libMesh::FE< 2, MONOMIAL_VEC >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 778 of file fe_monomial_vec.C.

782 {
783 }

◆ compute_constraints() [37/49]

void libMesh::FE< 3, MONOMIAL_VEC >::compute_constraints ( DofConstraints ,
DofMap ,
const unsigned  int,
const Elem  
)
inherited

Definition at line 787 of file fe_monomial_vec.C.

791 {
792 }

◆ compute_constraints() [38/49]

void libMesh::FE< 2, HIERARCHIC_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 810 of file fe_hierarchic_vec.C.

814 { //libmesh_not_implemented();
815  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
816 }

◆ compute_constraints() [39/49]

void libMesh::FE< 3, HIERARCHIC_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 819 of file fe_hierarchic_vec.C.

823 { //libmesh_not_implemented();
824  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
825 }

◆ compute_constraints() [40/49]

void libMesh::FE< 2, L2_HIERARCHIC_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 828 of file fe_hierarchic_vec.C.

832 { //libmesh_not_implemented();
833  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
834 }

◆ compute_constraints() [41/49]

void libMesh::FE< 3, L2_HIERARCHIC_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 837 of file fe_hierarchic_vec.C.

841 { //libmesh_not_implemented();
842  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
843 }

◆ compute_constraints() [42/49]

void libMesh::FE< 2, LAGRANGE >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1137 of file fe_lagrange.C.

1141 { lagrange_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/2); }

◆ compute_constraints() [43/49]

void libMesh::FE< 3, LAGRANGE >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1144 of file fe_lagrange.C.

1148 { lagrange_compute_constraints(constraints, dof_map, variable_number, elem, /*Dim=*/3); }

◆ compute_constraints() [44/49]

void libMesh::FE< 2, SZABAB >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1339 of file fe_szabab.C.

1343 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [45/49]

void libMesh::FE< 3, SZABAB >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1346 of file fe_szabab.C.

1350 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
Definition: fe_base.C:1570

◆ compute_constraints() [46/49]

void libMesh::FE< 2, LAGRANGE_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1379 of file fe_lagrange_vec.C.

1383 { //libmesh_not_implemented();
1384  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
1385 }

◆ compute_constraints() [47/49]

void libMesh::FE< 3, LAGRANGE_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1388 of file fe_lagrange_vec.C.

1392 { //libmesh_not_implemented();
1393  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
1394 }

◆ compute_constraints() [48/49]

void libMesh::FE< 2, L2_LAGRANGE_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1397 of file fe_lagrange_vec.C.

1401 { //libmesh_not_implemented();
1402  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
1403 }

◆ compute_constraints() [49/49]

void libMesh::FE< 3, L2_LAGRANGE_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 1406 of file fe_lagrange_vec.C.

1410 { //libmesh_not_implemented();
1411  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
1412 }

◆ compute_dual_shape_coeffs() [1/3]

void libMesh::FEGenericBase< FEOutputType< T >::type >::compute_dual_shape_coeffs ( const std::vector< Real > &  JxW,
const std::vector< std::vector< OutputShape >> &  phi 
)
protectedinherited

Compute the dual basis coefficients dual_coeff we rely on the JxW (or weights) and the phi values, which can come from default or customized qrule.

Definition at line 800 of file fe_base.h.

801 {
802  libmesh_error_msg(
803  "Computation of dual shape functions for vector finite element "
804  "families is not currently implemented");
805 }

◆ compute_dual_shape_coeffs() [2/3]

void libMesh::FEGenericBase< Real >::compute_dual_shape_coeffs ( const std::vector< Real > &  JxW,
const std::vector< std::vector< OutputShape >> &  phi_vals 
)
protectedinherited

Definition at line 804 of file fe_base.C.

References libMesh::index_range().

805 {
806  // Start logging the dual coeff computation
807  LOG_SCOPE("compute_dual_shape_coeffs()", "FE");
808 
809  const unsigned int sz=phi_vals.size();
810  libmesh_error_msg_if(!sz, "ERROR: cannot compute dual shape coefficients with empty phi values");
811 
812  //compute dual basis coefficient (dual_coeff)
813  dual_coeff.resize(sz, sz);
814  DenseMatrix<Real> A(sz, sz), D(sz, sz);
815 
816  for (const auto i : index_range(phi_vals))
817  for (const auto qp : index_range(phi_vals[i]))
818  {
819  D(i,i) += JxW[qp]*phi_vals[i][qp];
820  for (const auto j : index_range(phi_vals))
821  A(i,j) += JxW[qp]*phi_vals[i][qp]*phi_vals[j][qp];
822  }
823 
824  // dual_coeff = A^-1*D
825  for (const auto j : index_range(phi_vals))
826  {
827  DenseVector<Real> Dcol(sz), coeffcol(sz);
828  for (const auto i : index_range(phi_vals))
829  Dcol(i) = D(i, j);
830  A.cholesky_solve(Dcol, coeffcol);
831 
832  for (const auto row : index_range(phi_vals))
833  dual_coeff(row, j)=coeffcol(row);
834  }
835 }
DenseMatrix< Real > dual_coeff
Coefficient matrix for the dual basis.
Definition: fe_base.h:626
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
Definition: dense_matrix.h:895
Defines a dense vector for use in Finite Element-type computations.
Definition: dof_map.h:74
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ compute_dual_shape_coeffs() [3/3]

void libMesh::FEGenericBase< Real >::compute_dual_shape_coeffs ( const std::vector< Real > &  ,
const std::vector< std::vector< OutputShape >> &   
)
protectedinherited

◆ compute_dual_shape_functions() [1/3]

void libMesh::FEGenericBase< FEOutputType< T >::type >::compute_dual_shape_functions ( )
protectedinherited

Compute dual_phi, dual_dphi, dual_d2phi It is only valid for this to be called after reinit has occurred with a quadrature rule.

Definition at line 792 of file fe_base.h.

793 {
794  libmesh_error_msg(
795  "Computation of dual shape functions for vector finite element "
796  "families is not currently implemented");
797 }

◆ compute_dual_shape_functions() [2/3]

void libMesh::FEGenericBase< Real >::compute_dual_shape_functions ( )
protectedinherited

◆ compute_dual_shape_functions() [3/3]

void libMesh::FEGenericBase< Real >::compute_dual_shape_functions ( )
protectedinherited

Definition at line 838 of file fe_base.C.

References libMesh::index_range(), and libMesh::libmesh_assert().

839 {
840  // Start logging the shape function computation
841  LOG_SCOPE("compute_dual_shape_functions()", "FE");
842 
843  // The dual coeffs matrix should have the same size as phi
844  libmesh_assert(dual_coeff.m() == phi.size());
845  libmesh_assert(dual_coeff.n() == phi.size());
846 
847  // initialize dual basis
848  for (const auto j : index_range(phi))
849  for (const auto qp : index_range(phi[j]))
850  {
851  dual_phi[j][qp] = 0;
852  if (calculate_dphi)
853  dual_dphi[j][qp] = 0;
854 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
855  if (calculate_d2phi)
856  dual_d2phi[j][qp] = 0;
857 #endif
858  }
859 
860  // compute dual basis
861  for (const auto j : index_range(phi))
862  for (const auto i : index_range(phi))
863  for (const auto qp : index_range(phi[j]))
864  {
865  dual_phi[j][qp] += dual_coeff(i, j) * phi[i][qp];
866  if (calculate_dphi)
867  dual_dphi[j][qp] += dual_coeff(i, j) * dphi[i][qp];
868 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
869  if (calculate_d2phi)
870  dual_d2phi[j][qp] += dual_coeff(i, j) * d2phi[i][qp];
871 #endif
872  }
873 }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
std::vector< std::vector< OutputTensor > > d2phi
Shape function second derivative values.
Definition: fe_base.h:674
std::vector< std::vector< OutputTensor > > dual_d2phi
Definition: fe_base.h:675
std::vector< std::vector< OutputGradient > > dual_dphi
Definition: fe_base.h:621
unsigned int m() const
DenseMatrix< Real > dual_coeff
Coefficient matrix for the dual basis.
Definition: fe_base.h:626
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
std::vector< std::vector< OutputShape > > dual_phi
Definition: fe_base.h:615
libmesh_assert(ctx)
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
unsigned int n() const
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ compute_node_constraints()

void libMesh::FEAbstract::compute_node_constraints ( NodeConstraints constraints,
const Elem elem 
)
staticinherited

Computes the nodal constraint contributions (for non-conforming adapted meshes), using Lagrange geometry.

Definition at line 886 of file fe_abstract.C.

References libMesh::Elem::build_side_ptr(), libMesh::Elem::default_order(), libMesh::Elem::default_side_order(), libMesh::Elem::dim(), libMesh::FEAbstract::fe_type, libMesh::Elem::infinite(), libMesh::FEMap::inverse_map(), libMesh::Elem::level(), libMesh::libmesh_assert(), libMesh::FEMap::map_fe_type(), libMesh::FEInterface::max_order(), libMesh::FEInterface::n_dofs(), libMesh::Elem::neighbor_ptr(), libMesh::FEType::order, libMesh::Elem::parent(), libMesh::Real, libMesh::remote_elem, libMesh::FEInterface::shape(), libMesh::Elem::side_index_range(), libMesh::Threads::spin_mtx, and libMesh::Elem::subactive().

888 {
889  libmesh_assert(elem);
890 
891  const unsigned int Dim = elem->dim();
892 
893  // Only constrain elements in 2,3D.
894  if (Dim == 1)
895  return;
896 
897  // Only constrain active and ancestor elements
898  if (elem->subactive())
899  return;
900 
901 
902 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
903  if (elem->infinite())
904  {
905  const FEType fe_t(elem->default_order(), FEMap::map_fe_type(*elem));
906 
907  // expand the infinite_compute_constraint in its template-arguments.
908  switch(Dim)
909  {
910  case 2:
911  {
912  inf_fe_family_mapping_switch(2, inf_compute_node_constraints (constraints, elem) , ,; break;);
913  break;
914  }
915  case 3:
916  {
917  inf_fe_family_mapping_switch(3, inf_compute_node_constraints (constraints, elem) , ,; break;);
918  break;
919  }
920  default:
921  libmesh_error_msg("Invalid dim = " << Dim);
922  }
923  return;
924  }
925 
926 #endif
927  const FEFamily mapping_family = FEMap::map_fe_type(*elem);
928  const FEType fe_type(elem->default_side_order(), mapping_family);
929 
930  // Pull objects out of the loop to reduce heap operations
931  std::vector<const Node *> my_nodes, parent_nodes;
932  std::unique_ptr<const Elem> my_side, parent_side;
933 
934  // Look at the element faces. Check to see if we need to
935  // build constraints.
936  for (auto s : elem->side_index_range())
937  if (elem->neighbor_ptr(s) != nullptr &&
938  elem->neighbor_ptr(s) != remote_elem)
939  if (elem->neighbor_ptr(s)->level() < elem->level()) // constrain dofs shared between
940  { // this element and ones coarser
941  // than this element.
942  // Get pointers to the elements of interest and its parent.
943  const Elem * parent = elem->parent();
944 
945  // This can't happen... Only level-0 elements have nullptr
946  // parents, and no level-0 elements can be at a higher
947  // level than their neighbors!
948  libmesh_assert(parent);
949 
950  elem->build_side_ptr(my_side, s);
951  parent->build_side_ptr(parent_side, s);
952 
953  const unsigned int n_side_nodes = my_side->n_nodes();
954 
955  my_nodes.clear();
956  my_nodes.reserve (n_side_nodes);
957  parent_nodes.clear();
958  parent_nodes.reserve (n_side_nodes);
959 
960  for (unsigned int n=0; n != n_side_nodes; ++n)
961  my_nodes.push_back(my_side->node_ptr(n));
962 
963  for (unsigned int n=0; n != n_side_nodes; ++n)
964  parent_nodes.push_back(parent_side->node_ptr(n));
965 
966  for (unsigned int my_side_n=0;
967  my_side_n < n_side_nodes;
968  my_side_n++)
969  {
970  // We can have an FE type that supports an order
971  // partially, such that sides do not support the same
972  // order. E.g. we say that a LAGRANGE PRISM21 supports
973  // "third" order to distinguish its shape functions from
974  // a PRISM18, but the QUAD9 sides will still only
975  // support second order.
976  FEType side_fe_type = fe_type;
977  const int side_max_order =
978  FEInterface::max_order(fe_type, my_side->type());
979 
980  if ((int)fe_type.order > side_max_order)
981  side_fe_type.order = side_max_order;
982 
983  // Do not use the p_level(), if any, that is inherited by the side.
984  libmesh_assert_less
985  (my_side_n,
986  FEInterface::n_dofs(side_fe_type, /*extra_order=*/0,
987  my_side.get()));
988 
989  const Node * my_node = my_nodes[my_side_n];
990 
991  // The support point of the DOF
992  const Point & support_point = *my_node;
993 
994  // Figure out where my node lies on their reference element.
995  const Point mapped_point = FEMap::inverse_map(Dim-1,
996  parent_side.get(),
997  support_point);
998 
999  // Compute the parent's side shape function values.
1000  for (unsigned int their_side_n=0;
1001  their_side_n < n_side_nodes;
1002  their_side_n++)
1003  {
1004  // Do not use the p_level(), if any, that is inherited by the side.
1005  libmesh_assert_less
1006  (their_side_n,
1007  FEInterface::n_dofs(side_fe_type,
1008  /*extra_order=*/0,
1009  parent_side.get()));
1010 
1011  const Node * their_node = parent_nodes[their_side_n];
1012  libmesh_assert(their_node);
1013 
1014  // Do not use the p_level(), if any, that is inherited by the side.
1015  const Real their_value = FEInterface::shape(side_fe_type,
1016  /*extra_order=*/0,
1017  parent_side.get(),
1018  their_side_n,
1019  mapped_point);
1020 
1021  const Real their_mag = std::abs(their_value);
1022 #ifdef DEBUG
1023  // Protect for the case u_i ~= u_j,
1024  // in which case i better equal j.
1025  if (their_mag > 0.999)
1026  {
1027  libmesh_assert_equal_to (my_node, their_node);
1028  libmesh_assert_less (std::abs(their_value - 1.), 0.001);
1029  }
1030  else
1031 #endif
1032  // To make nodal constraints useful for constructing
1033  // sparsity patterns faster, we need to get EVERY
1034  // POSSIBLE constraint coupling identified, even if
1035  // there is no coupling in the isoparametric
1036  // Lagrange case.
1037  if (their_mag < 1.e-5)
1038  {
1039  // since we may be running this method concurrently
1040  // on multiple threads we need to acquire a lock
1041  // before modifying the shared constraint_row object.
1042  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1043 
1044  // A reference to the constraint row.
1045  NodeConstraintRow & constraint_row = constraints[my_node].first;
1046 
1047  constraint_row.emplace(their_node, 0.);
1048  }
1049  // To get nodal coordinate constraints right, only
1050  // add non-zero and non-identity values for Lagrange
1051  // basis functions.
1052  else // (1.e-5 <= their_mag <= .999)
1053  {
1054  // since we may be running this method concurrently
1055  // on multiple threads we need to acquire a lock
1056  // before modifying the shared constraint_row object.
1057  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1058 
1059  // A reference to the constraint row.
1060  NodeConstraintRow & constraint_row = constraints[my_node].first;
1061 
1062  constraint_row.emplace(their_node, their_value);
1063  }
1064  }
1065  }
1066  }
1067 }
static unsigned int n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
Definition: fe_interface.C:355
static Point inverse_map(const unsigned int dim, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true, const bool extra_checks=true)
Definition: fe_map.C:1628
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
static unsigned int max_order(const FEType &fe_t, const ElemType &el_t)
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
Definition: fe_interface.C:760
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::map< const Node *, Real, std::less< const Node * >, Threads::scalable_allocator< std::pair< const Node *const, Real > > > NodeConstraintRow
A row of the Node constraint mapping.
Definition: dof_map.h:148
FEFamily
defines an enum for finite element families.
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730
static FEFamily map_fe_type(const Elem &elem)
Definition: fe_map.C:46
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30
const RemoteElem * remote_elem
Definition: remote_elem.C:57

◆ compute_periodic_constraints()

void libMesh::FEGenericBase< FEOutputType< T >::type >::compute_periodic_constraints ( DofConstraints constraints,
DofMap dof_map,
const PeriodicBoundaries boundaries,
const MeshBase mesh,
const PointLocatorBase point_locator,
const unsigned int  variable_number,
const Elem elem 
)
staticinherited

Computes the constraint matrix contributions (for meshes with periodic boundary conditions) corresponding to variable number var_number, using generic projections.

Definition at line 1878 of file fe_base.C.

References libMesh::TypeVector< T >::absolute_fuzzy_equals(), libMesh::Elem::active(), libMesh::PeriodicBoundaries::boundary(), libMesh::BoundaryInfo::boundary_ids(), libMesh::C_ONE, libMesh::C_ZERO, libMesh::DenseMatrix< T >::cholesky_solve(), libMesh::DofMap::constrain_p_dofs(), libMesh::FEType::default_quadrature_order(), libMesh::Elem::dim(), libMesh::DISCONTINUOUS, libMesh::DofMap::dof_indices(), libMesh::DofObject::dof_number(), libMesh::FEInterface::dofs_on_side(), libMesh::MeshBase::get_boundary_info(), libMesh::PeriodicBoundaryBase::get_corresponding_pos(), libMesh::PeriodicBoundaryBase::get_transformation_matrix(), libMesh::PeriodicBoundaryBase::get_variables(), libMesh::PeriodicBoundaryBase::has_transformation_matrix(), libMesh::Elem::hmin(), libMesh::DofObject::id(), libMesh::index_range(), libMesh::Elem::infinite(), libMesh::TensorTools::inner_product(), libMesh::DofObject::invalid_id, libMesh::FEMap::inverse_map(), libMesh::is, libMesh::DofMap::is_constrained_dof(), libMesh::Elem::is_edge(), libMesh::Elem::is_face(), libMesh::PeriodicBoundaryBase::is_my_variable(), libMesh::Elem::is_node_on_edge(), libMesh::Elem::is_node_on_side(), libMesh::Elem::is_vertex(), libMesh::Elem::level(), libMesh::libmesh_assert(), mesh, libMesh::Elem::min_p_level_by_neighbor(), libMesh::DofObject::n_comp(), libMesh::Elem::n_edges(), libMesh::Elem::n_sides(), libMesh::PeriodicBoundaries::neighbor(), libMesh::Elem::neighbor_ptr(), libMesh::Elem::node_index_range(), libMesh::Elem::node_ptr(), libMesh::Elem::node_ref(), libMesh::Elem::p_level(), libMesh::PeriodicBoundaryBase::pairedboundary, libMesh::Real, libMesh::DenseVector< T >::resize(), libMesh::DenseMatrix< T >::resize(), libMesh::Threads::spin_mtx, libMesh::DofMap::sys_number(), libMesh::TOLERANCE, and libMesh::DofMap::variable_type().

1885 {
1886  // Only bother if we truly have periodic boundaries
1887  if (boundaries.empty())
1888  return;
1889 
1890  libmesh_assert(elem);
1891 
1892  // Only constrain active elements with this method
1893  if (!elem->active())
1894  return;
1895 
1896  if (elem->infinite())
1897  libmesh_not_implemented();
1898 
1899  const unsigned int Dim = elem->dim();
1900 
1901  // We need sys_number and variable_number for DofObject methods
1902  // later
1903  const unsigned int sys_number = dof_map.sys_number();
1904 
1905  const FEType & base_fe_type = dof_map.variable_type(variable_number);
1906 
1907  // Construct FE objects for this element and its pseudo-neighbors.
1908  std::unique_ptr<FEGenericBase<OutputShape>> my_fe
1909  (FEGenericBase<OutputShape>::build(Dim, base_fe_type));
1910  const FEContinuity cont = my_fe->get_continuity();
1911 
1912  // We don't need to constrain discontinuous elements
1913  if (cont == DISCONTINUOUS)
1914  return;
1915  libmesh_assert (cont == C_ZERO || cont == C_ONE);
1916 
1917  // We'll use element size to generate relative tolerances later
1918  const Real primary_hmin = elem->hmin();
1919 
1920  std::unique_ptr<FEGenericBase<OutputShape>> neigh_fe
1921  (FEGenericBase<OutputShape>::build(Dim, base_fe_type));
1922 
1923  QGauss my_qface(Dim-1, base_fe_type.default_quadrature_order());
1924  my_fe->attach_quadrature_rule (&my_qface);
1925  std::vector<Point> neigh_qface;
1926 
1927  const std::vector<Real> & JxW = my_fe->get_JxW();
1928  const std::vector<Point> & q_point = my_fe->get_xyz();
1929  const std::vector<std::vector<OutputShape>> & phi = my_fe->get_phi();
1930  const std::vector<std::vector<OutputShape>> & neigh_phi =
1931  neigh_fe->get_phi();
1932  const std::vector<Point> * face_normals = nullptr;
1933  const std::vector<std::vector<OutputGradient>> * dphi = nullptr;
1934  const std::vector<std::vector<OutputGradient>> * neigh_dphi = nullptr;
1935  std::vector<dof_id_type> my_dof_indices, neigh_dof_indices;
1936  std::vector<unsigned int> my_side_dofs, neigh_side_dofs;
1937 
1938  if (cont != C_ZERO)
1939  {
1940  const std::vector<Point> & ref_face_normals =
1941  my_fe->get_normals();
1942  face_normals = &ref_face_normals;
1943  const std::vector<std::vector<OutputGradient>> & ref_dphi =
1944  my_fe->get_dphi();
1945  dphi = &ref_dphi;
1946  const std::vector<std::vector<OutputGradient>> & ref_neigh_dphi =
1947  neigh_fe->get_dphi();
1948  neigh_dphi = &ref_neigh_dphi;
1949  }
1950 
1951  DenseMatrix<Real> Ke;
1952  DenseVector<Real> Fe;
1953  std::vector<DenseVector<Real>> Ue;
1954 
1955  // Container to catch the boundary ids that BoundaryInfo hands us.
1956  std::vector<boundary_id_type> bc_ids;
1957 
1958  // Look at the element faces. Check to see if we need to
1959  // build constraints.
1960  const unsigned short int max_ns = elem->n_sides();
1961  for (unsigned short int s = 0; s != max_ns; ++s)
1962  {
1963  if (elem->neighbor_ptr(s))
1964  continue;
1965 
1966  mesh.get_boundary_info().boundary_ids (elem, s, bc_ids);
1967 
1968  for (const auto & boundary_id : bc_ids)
1969  {
1970  const PeriodicBoundaryBase * periodic = boundaries.boundary(boundary_id);
1971  if (!periodic || !periodic->is_my_variable(variable_number))
1972  continue;
1973 
1974  libmesh_assert(point_locator);
1975 
1976  // Get pointers to the element's neighbor.
1977  unsigned int s_neigh;
1978  const Elem * neigh = boundaries.neighbor(boundary_id, *point_locator, elem, s, &s_neigh);
1979 
1980  libmesh_error_msg_if(neigh == nullptr,
1981  "PeriodicBoundaries point locator object returned nullptr!");
1982 
1983  // periodic (and possibly h refinement) constraints:
1984  // constrain dofs shared between
1985  // this element and ones as coarse
1986  // as or coarser than this element.
1987  if (neigh->level() <= elem->level())
1988  {
1989 #ifdef LIBMESH_ENABLE_AMR
1990  // Find the minimum p level; we build the h constraint
1991  // matrix with this and then constrain away all higher p
1992  // DoFs.
1993  libmesh_assert(neigh->active());
1994  const unsigned int min_p_level =
1995  std::min(elem->p_level(), neigh->p_level());
1996 
1997  // we may need to make the FE objects reinit with the
1998  // minimum shared p_level
1999  // FIXME - I hate using const_cast<> and avoiding
2000  // accessor functions; there's got to be a
2001  // better way to do this!
2002  const unsigned int old_elem_level = elem->p_level();
2003  if (old_elem_level != min_p_level)
2004  (const_cast<Elem *>(elem))->hack_p_level(min_p_level);
2005  const unsigned int old_neigh_level = neigh->p_level();
2006  if (old_neigh_level != min_p_level)
2007  (const_cast<Elem *>(neigh))->hack_p_level(min_p_level);
2008 #endif // #ifdef LIBMESH_ENABLE_AMR
2009 
2010  // We can do a projection with a single integration,
2011  // due to the assumption of nested finite element
2012  // subspaces.
2013  // FIXME: it might be more efficient to do nodes,
2014  // then edges, then side, to reduce the size of the
2015  // Cholesky factorization(s)
2016  my_fe->reinit(elem, s);
2017 
2018  dof_map.dof_indices (elem, my_dof_indices,
2019  variable_number);
2020  dof_map.dof_indices (neigh, neigh_dof_indices,
2021  variable_number);
2022 
2023  // We use neigh_dof_indices_all_variables in the case that the
2024  // periodic boundary condition involves mappings between multiple
2025  // variables.
2026  std::vector<std::vector<dof_id_type>> neigh_dof_indices_all_variables;
2027  if(periodic->has_transformation_matrix())
2028  {
2029  const std::set<unsigned int> & variables = periodic->get_variables();
2030  neigh_dof_indices_all_variables.resize(variables.size());
2031  unsigned int index = 0;
2032  for(unsigned int var : variables)
2033  {
2034  dof_map.dof_indices (neigh, neigh_dof_indices_all_variables[index],
2035  var);
2036  index++;
2037  }
2038  }
2039 
2040  const unsigned int n_qp = my_qface.n_points();
2041 
2042  // Translate the quadrature points over to the
2043  // neighbor's boundary
2044  std::vector<Point> neigh_point(q_point.size());
2045  for (auto i : index_range(neigh_point))
2046  neigh_point[i] = periodic->get_corresponding_pos(q_point[i]);
2047 
2048  FEMap::inverse_map (Dim, neigh, neigh_point,
2049  neigh_qface);
2050 
2051  neigh_fe->reinit(neigh, &neigh_qface);
2052 
2053  // We're only concerned with DOFs whose values (and/or first
2054  // derivatives for C1 elements) are supported on side nodes
2055  FEInterface::dofs_on_side(elem, Dim, base_fe_type, s, my_side_dofs);
2056  FEInterface::dofs_on_side(neigh, Dim, base_fe_type, s_neigh, neigh_side_dofs);
2057 
2058  // We're done with functions that examine Elem::p_level(),
2059  // so let's unhack those levels
2060 #ifdef LIBMESH_ENABLE_AMR
2061  if (elem->p_level() != old_elem_level)
2062  (const_cast<Elem *>(elem))->hack_p_level(old_elem_level);
2063  if (neigh->p_level() != old_neigh_level)
2064  (const_cast<Elem *>(neigh))->hack_p_level(old_neigh_level);
2065 #endif // #ifdef LIBMESH_ENABLE_AMR
2066 
2067  const unsigned int n_side_dofs =
2068  cast_int<unsigned int>
2069  (my_side_dofs.size());
2070  libmesh_assert_equal_to (n_side_dofs, neigh_side_dofs.size());
2071 
2072  Ke.resize (n_side_dofs, n_side_dofs);
2073  Ue.resize(n_side_dofs);
2074 
2075  // Form the projection matrix, (inner product of fine basis
2076  // functions against fine test functions)
2077  for (unsigned int is = 0; is != n_side_dofs; ++is)
2078  {
2079  const unsigned int i = my_side_dofs[is];
2080  for (unsigned int js = 0; js != n_side_dofs; ++js)
2081  {
2082  const unsigned int j = my_side_dofs[js];
2083  for (unsigned int qp = 0; qp != n_qp; ++qp)
2084  {
2085  Ke(is,js) += JxW[qp] *
2087  phi[j][qp]);
2088  if (cont != C_ZERO)
2089  Ke(is,js) += JxW[qp] *
2090  TensorTools::inner_product((*dphi)[i][qp] *
2091  (*face_normals)[qp],
2092  (*dphi)[j][qp] *
2093  (*face_normals)[qp]);
2094  }
2095  }
2096  }
2097 
2098  // Form the right hand sides, (inner product of coarse basis
2099  // functions against fine test functions)
2100  for (unsigned int is = 0; is != n_side_dofs; ++is)
2101  {
2102  const unsigned int i = neigh_side_dofs[is];
2103  Fe.resize (n_side_dofs);
2104  for (unsigned int js = 0; js != n_side_dofs; ++js)
2105  {
2106  const unsigned int j = my_side_dofs[js];
2107  for (unsigned int qp = 0; qp != n_qp; ++qp)
2108  {
2109  Fe(js) += JxW[qp] *
2110  TensorTools::inner_product(neigh_phi[i][qp],
2111  phi[j][qp]);
2112  if (cont != C_ZERO)
2113  Fe(js) += JxW[qp] *
2114  TensorTools::inner_product((*neigh_dphi)[i][qp] *
2115  (*face_normals)[qp],
2116  (*dphi)[j][qp] *
2117  (*face_normals)[qp]);
2118  }
2119  }
2120  Ke.cholesky_solve(Fe, Ue[is]);
2121  }
2122 
2123  // Make sure we're not adding recursive constraints
2124  // due to the redundancy in the way we add periodic
2125  // boundary constraints
2126  //
2127  // In order for this to work while threaded or on
2128  // distributed meshes, we need a rigorous way to
2129  // avoid recursive constraints. Here it is:
2130  //
2131  // For vertex DoFs, if there is a "prior" element
2132  // (i.e. a coarser element or an equally refined
2133  // element with a lower id) on this boundary which
2134  // contains the vertex point, then we will avoid
2135  // generating constraints; the prior element (or
2136  // something prior to it) may do so. If we are the
2137  // most prior (or "primary") element on this
2138  // boundary sharing this point, then we look at the
2139  // boundary periodic to us, we find the primary
2140  // element there, and if that primary is coarser or
2141  // equal-but-lower-id, then our vertex dofs are
2142  // constrained in terms of that element.
2143  //
2144  // For edge DoFs, if there is a coarser element
2145  // on this boundary sharing this edge, then we will
2146  // avoid generating constraints (we will be
2147  // constrained indirectly via AMR constraints
2148  // connecting us to the coarser element's DoFs). If
2149  // we are the coarsest element sharing this edge,
2150  // then we generate constraints if and only if we
2151  // are finer than the coarsest element on the
2152  // boundary periodic to us sharing the corresponding
2153  // periodic edge, or if we are at equal level but
2154  // our edge nodes have higher ids than the periodic
2155  // edge nodes (sorted from highest to lowest, then
2156  // compared lexicographically)
2157  //
2158  // For face DoFs, we generate constraints if we are
2159  // finer than our periodic neighbor, or if we are at
2160  // equal level but our element id is higher than its
2161  // element id.
2162  //
2163  // If the primary neighbor is also the current elem
2164  // (a 1-element-thick mesh) then we choose which
2165  // vertex dofs to constrain via lexicographic
2166  // ordering on point locations
2167 
2168  // FIXME: This code doesn't yet properly handle
2169  // cases where multiple different periodic BCs
2170  // intersect.
2171  std::set<dof_id_type> my_constrained_dofs;
2172 
2173  // Container to catch boundary IDs handed back by BoundaryInfo.
2174  std::vector<boundary_id_type> new_bc_ids;
2175 
2176  for (auto n : elem->node_index_range())
2177  {
2178  if (!elem->is_node_on_side(n,s))
2179  continue;
2180 
2181  const Node & my_node = elem->node_ref(n);
2182 
2183  if (elem->is_vertex(n))
2184  {
2185  // Find all boundary ids that include this
2186  // point and have periodic boundary
2187  // conditions for this variable
2188  std::set<boundary_id_type> point_bcids;
2189 
2190  for (unsigned int new_s = 0;
2191  new_s != max_ns; ++new_s)
2192  {
2193  if (!elem->is_node_on_side(n,new_s))
2194  continue;
2195 
2196  mesh.get_boundary_info().boundary_ids (elem, s, new_bc_ids);
2197 
2198  for (const auto & new_boundary_id : new_bc_ids)
2199  {
2200  const PeriodicBoundaryBase * new_periodic = boundaries.boundary(new_boundary_id);
2201  if (new_periodic && new_periodic->is_my_variable(variable_number))
2202  point_bcids.insert(new_boundary_id);
2203  }
2204  }
2205 
2206  // See if this vertex has point neighbors to
2207  // defer to
2208  if (primary_boundary_point_neighbor
2209  (elem, my_node, mesh.get_boundary_info(), point_bcids)
2210  != elem)
2211  continue;
2212 
2213  // Find the complementary boundary id set
2214  std::set<boundary_id_type> point_pairedids;
2215  for (const auto & new_boundary_id : point_bcids)
2216  {
2217  const PeriodicBoundaryBase * new_periodic = boundaries.boundary(new_boundary_id);
2218  point_pairedids.insert(new_periodic->pairedboundary);
2219  }
2220 
2221  // What do we want to constrain against?
2222  const Elem * primary_elem = nullptr;
2223  const Elem * main_neigh = nullptr;
2224  Point main_pt = my_node,
2225  primary_pt = my_node;
2226 
2227  for (const auto & new_boundary_id : point_bcids)
2228  {
2229  // Find the corresponding periodic point and
2230  // its primary neighbor
2231  const PeriodicBoundaryBase * new_periodic = boundaries.boundary(new_boundary_id);
2232 
2233  const Point neigh_pt =
2234  new_periodic->get_corresponding_pos(my_node);
2235 
2236  // If the point is getting constrained
2237  // to itself by this PBC then we don't
2238  // generate any constraints
2239  if (neigh_pt.absolute_fuzzy_equals
2240  (my_node, primary_hmin*TOLERANCE))
2241  continue;
2242 
2243  // Otherwise we'll have a constraint in
2244  // one direction or another
2245  if (!primary_elem)
2246  primary_elem = elem;
2247 
2248  const Elem * primary_neigh =
2249  primary_boundary_point_neighbor(neigh, neigh_pt,
2251  point_pairedids);
2252 
2253  libmesh_assert(primary_neigh);
2254 
2255  if (new_boundary_id == boundary_id)
2256  {
2257  main_neigh = primary_neigh;
2258  main_pt = neigh_pt;
2259  }
2260 
2261  // Finer elements will get constrained in
2262  // terms of coarser neighbors, not the
2263  // other way around
2264  if ((primary_neigh->level() > primary_elem->level()) ||
2265 
2266  // For equal-level elements, the one with
2267  // higher id gets constrained in terms of
2268  // the one with lower id
2269  (primary_neigh->level() == primary_elem->level() &&
2270  primary_neigh->id() > primary_elem->id()) ||
2271 
2272  // On a one-element-thick mesh, we compare
2273  // points to see what side gets constrained
2274  (primary_neigh == primary_elem &&
2275  (neigh_pt > primary_pt)))
2276  continue;
2277 
2278  primary_elem = primary_neigh;
2279  primary_pt = neigh_pt;
2280  }
2281 
2282  if (!primary_elem ||
2283  primary_elem != main_neigh ||
2284  primary_pt != main_pt)
2285  continue;
2286  }
2287  else if (elem->is_edge(n))
2288  {
2289  // Find which edge we're on
2290  unsigned int e=0, ne = elem->n_edges();
2291  for (; e != ne; ++e)
2292  {
2293  if (elem->is_node_on_edge(n,e))
2294  break;
2295  }
2296  libmesh_assert_less (e, elem->n_edges());
2297 
2298  // Find the edge end nodes
2299  const Node
2300  * e1 = nullptr,
2301  * e2 = nullptr;
2302  for (auto nn : elem->node_index_range())
2303  {
2304  if (nn == n)
2305  continue;
2306 
2307  if (elem->is_node_on_edge(nn, e))
2308  {
2309  if (e1 == nullptr)
2310  {
2311  e1 = elem->node_ptr(nn);
2312  }
2313  else
2314  {
2315  e2 = elem->node_ptr(nn);
2316  break;
2317  }
2318  }
2319  }
2320  libmesh_assert (e1 && e2);
2321 
2322  // Find all boundary ids that include this
2323  // edge and have periodic boundary
2324  // conditions for this variable
2325  std::set<boundary_id_type> edge_bcids;
2326 
2327  for (unsigned int new_s = 0;
2328  new_s != max_ns; ++new_s)
2329  {
2330  if (!elem->is_node_on_side(n,new_s))
2331  continue;
2332 
2333  // We're reusing the new_bc_ids vector created outside the loop over nodes.
2334  mesh.get_boundary_info().boundary_ids (elem, s, new_bc_ids);
2335 
2336  for (const auto & new_boundary_id : new_bc_ids)
2337  {
2338  const PeriodicBoundaryBase * new_periodic = boundaries.boundary(new_boundary_id);
2339  if (new_periodic && new_periodic->is_my_variable(variable_number))
2340  edge_bcids.insert(new_boundary_id);
2341  }
2342  }
2343 
2344 
2345  // See if this edge has neighbors to defer to
2346  if (primary_boundary_edge_neighbor
2347  (elem, *e1, *e2, mesh.get_boundary_info(), edge_bcids)
2348  != elem)
2349  continue;
2350 
2351  // Find the complementary boundary id set
2352  std::set<boundary_id_type> edge_pairedids;
2353  for (const auto & new_boundary_id : edge_bcids)
2354  {
2355  const PeriodicBoundaryBase * new_periodic = boundaries.boundary(new_boundary_id);
2356  edge_pairedids.insert(new_periodic->pairedboundary);
2357  }
2358 
2359  // What do we want to constrain against?
2360  const Elem * primary_elem = nullptr;
2361  const Elem * main_neigh = nullptr;
2362  Point main_pt1 = *e1,
2363  main_pt2 = *e2,
2364  primary_pt1 = *e1,
2365  primary_pt2 = *e2;
2366 
2367  for (const auto & new_boundary_id : edge_bcids)
2368  {
2369  // Find the corresponding periodic edge and
2370  // its primary neighbor
2371  const PeriodicBoundaryBase * new_periodic = boundaries.boundary(new_boundary_id);
2372 
2373  Point neigh_pt1 = new_periodic->get_corresponding_pos(*e1),
2374  neigh_pt2 = new_periodic->get_corresponding_pos(*e2);
2375 
2376  // If the edge is getting constrained
2377  // to itself by this PBC then we don't
2378  // generate any constraints
2379  if (neigh_pt1.absolute_fuzzy_equals
2380  (*e1, primary_hmin*TOLERANCE) &&
2381  neigh_pt2.absolute_fuzzy_equals
2382  (*e2, primary_hmin*TOLERANCE))
2383  continue;
2384 
2385  // Otherwise we'll have a constraint in
2386  // one direction or another
2387  if (!primary_elem)
2388  primary_elem = elem;
2389 
2390  const Elem * primary_neigh = primary_boundary_edge_neighbor
2391  (neigh, neigh_pt1, neigh_pt2,
2392  mesh.get_boundary_info(), edge_pairedids);
2393 
2394  libmesh_assert(primary_neigh);
2395 
2396  if (new_boundary_id == boundary_id)
2397  {
2398  main_neigh = primary_neigh;
2399  main_pt1 = neigh_pt1;
2400  main_pt2 = neigh_pt2;
2401  }
2402 
2403  // If we have a one-element thick mesh,
2404  // we'll need to sort our points to get a
2405  // consistent ordering rule
2406  //
2407  // Use >= in this test to make sure that,
2408  // for angular constraints, no node gets
2409  // constrained to itself.
2410  if (primary_neigh == primary_elem)
2411  {
2412  if (primary_pt1 > primary_pt2)
2413  std::swap(primary_pt1, primary_pt2);
2414  if (neigh_pt1 > neigh_pt2)
2415  std::swap(neigh_pt1, neigh_pt2);
2416 
2417  if (neigh_pt2 >= primary_pt2)
2418  continue;
2419  }
2420 
2421  // Otherwise:
2422  // Finer elements will get constrained in
2423  // terms of coarser ones, not the other way
2424  // around
2425  if ((primary_neigh->level() > primary_elem->level()) ||
2426 
2427  // For equal-level elements, the one with
2428  // higher id gets constrained in terms of
2429  // the one with lower id
2430  (primary_neigh->level() == primary_elem->level() &&
2431  primary_neigh->id() > primary_elem->id()))
2432  continue;
2433 
2434  primary_elem = primary_neigh;
2435  primary_pt1 = neigh_pt1;
2436  primary_pt2 = neigh_pt2;
2437  }
2438 
2439  if (!primary_elem ||
2440  primary_elem != main_neigh ||
2441  primary_pt1 != main_pt1 ||
2442  primary_pt2 != main_pt2)
2443  continue;
2444  }
2445  else if (elem->is_face(n))
2446  {
2447  // If we have a one-element thick mesh,
2448  // use the ordering of the face node and its
2449  // periodic counterpart to determine what
2450  // gets constrained
2451  if (neigh == elem)
2452  {
2453  const Point neigh_pt =
2454  periodic->get_corresponding_pos(my_node);
2455  if (neigh_pt > my_node)
2456  continue;
2457  }
2458 
2459  // Otherwise:
2460  // Finer elements will get constrained in
2461  // terms of coarser ones, not the other way
2462  // around
2463  if ((neigh->level() > elem->level()) ||
2464 
2465  // For equal-level elements, the one with
2466  // higher id gets constrained in terms of
2467  // the one with lower id
2468  (neigh->level() == elem->level() &&
2469  neigh->id() > elem->id()))
2470  continue;
2471  }
2472 
2473  // If we made it here without hitting a continue
2474  // statement, then we're at a node whose dofs
2475  // should be constrained by this element's
2476  // calculations.
2477  const unsigned int n_comp =
2478  my_node.n_comp(sys_number, variable_number);
2479 
2480  for (unsigned int i=0; i != n_comp; ++i)
2481  my_constrained_dofs.insert
2482  (my_node.dof_number
2483  (sys_number, variable_number, i));
2484  }
2485 
2486  // FIXME: old code for disambiguating periodic BCs:
2487  // this is not threadsafe nor safe to run on a
2488  // non-serialized mesh.
2489  /*
2490  std::vector<bool> recursive_constraint(n_side_dofs, false);
2491 
2492  for (unsigned int is = 0; is != n_side_dofs; ++is)
2493  {
2494  const unsigned int i = neigh_side_dofs[is];
2495  const dof_id_type their_dof_g = neigh_dof_indices[i];
2496  libmesh_assert_not_equal_to (their_dof_g, DofObject::invalid_id);
2497 
2498  {
2499  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
2500 
2501  if (!dof_map.is_constrained_dof(their_dof_g))
2502  continue;
2503  }
2504 
2505  DofConstraintRow & their_constraint_row =
2506  constraints[their_dof_g].first;
2507 
2508  for (unsigned int js = 0; js != n_side_dofs; ++js)
2509  {
2510  const unsigned int j = my_side_dofs[js];
2511  const dof_id_type my_dof_g = my_dof_indices[j];
2512  libmesh_assert_not_equal_to (my_dof_g, DofObject::invalid_id);
2513 
2514  if (their_constraint_row.count(my_dof_g))
2515  recursive_constraint[js] = true;
2516  }
2517  }
2518  */
2519 
2520  for (unsigned int js = 0; js != n_side_dofs; ++js)
2521  {
2522  // FIXME: old code path
2523  // if (recursive_constraint[js])
2524  // continue;
2525 
2526  const unsigned int j = my_side_dofs[js];
2527  const dof_id_type my_dof_g = my_dof_indices[j];
2528  libmesh_assert_not_equal_to (my_dof_g, DofObject::invalid_id);
2529 
2530  // FIXME: new code path
2531  if (!my_constrained_dofs.count(my_dof_g))
2532  continue;
2533 
2534  DofConstraintRow * constraint_row;
2535 
2536  // we may be running constraint methods concurrently
2537  // on multiple threads, so we need a lock to
2538  // ensure that this constraint is "ours"
2539  {
2540  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
2541 
2542  if (dof_map.is_constrained_dof(my_dof_g))
2543  continue;
2544 
2545  constraint_row = &(constraints[my_dof_g]);
2546  libmesh_assert(constraint_row->empty());
2547  }
2548 
2549  for (unsigned int is = 0; is != n_side_dofs; ++is)
2550  {
2551  const unsigned int i = neigh_side_dofs[is];
2552  const dof_id_type their_dof_g = neigh_dof_indices[i];
2553  libmesh_assert_not_equal_to (their_dof_g, DofObject::invalid_id);
2554 
2555  // Periodic constraints should never be
2556  // self-constraints
2557  // libmesh_assert_not_equal_to (their_dof_g, my_dof_g);
2558 
2559  const Real their_dof_value = Ue[is](js);
2560 
2561  if (their_dof_g == my_dof_g)
2562  {
2563  libmesh_assert_less (std::abs(their_dof_value-1.), 1.e-5);
2564  for (unsigned int k = 0; k != n_side_dofs; ++k)
2565  libmesh_assert(k == is || std::abs(Ue[k](js)) < 1.e-5);
2566  continue;
2567  }
2568 
2569  if (std::abs(their_dof_value) < 10*TOLERANCE)
2570  continue;
2571 
2572  if(!periodic->has_transformation_matrix())
2573  {
2574  constraint_row->emplace(their_dof_g, their_dof_value);
2575  }
2576  else
2577  {
2578  // In this case the current variable is constrained in terms of other variables.
2579  // We assume that all variables in this constraint have the same FE type (this
2580  // is asserted below), and hence we can create the constraint row contribution
2581  // by multiplying their_dof_value by the corresponding row of the transformation
2582  // matrix.
2583 
2584  const std::set<unsigned int> & variables = periodic->get_variables();
2585  neigh_dof_indices_all_variables.resize(variables.size());
2586  unsigned int index = 0;
2587  for(unsigned int other_var : variables)
2588  {
2589  libmesh_assert_msg(base_fe_type == dof_map.variable_type(other_var), "FE types must match for all variables involved in constraint");
2590 
2591  Real var_weighting = periodic->get_transformation_matrix()(variable_number, other_var);
2592  constraint_row->emplace(neigh_dof_indices_all_variables[index][i],
2593  var_weighting*their_dof_value);
2594  index++;
2595  }
2596  }
2597 
2598  }
2599  }
2600  }
2601  // p refinement constraints:
2602  // constrain dofs shared between
2603  // active elements and neighbors with
2604  // lower polynomial degrees
2605 #ifdef LIBMESH_ENABLE_AMR
2606  const unsigned int min_p_level =
2607  neigh->min_p_level_by_neighbor(elem, elem->p_level());
2608  if (min_p_level < elem->p_level())
2609  {
2610  // Adaptive p refinement of non-hierarchic bases will
2611  // require more coding
2612  libmesh_assert(my_fe->is_hierarchic());
2613  dof_map.constrain_p_dofs(variable_number, elem,
2614  s, min_p_level);
2615  }
2616 #endif // #ifdef LIBMESH_ENABLE_AMR
2617  }
2618  }
2619 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
dof_id_type dof_number(const unsigned int s, const unsigned int var, const unsigned int comp) const
Definition: dof_object.h:1032
A Node is like a Point, but with more information.
Definition: node.h:52
unsigned int n_comp(const unsigned int s, const unsigned int var) const
Definition: dof_object.h:1002
virtual bool is_face(const unsigned int i) const =0
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Definition: dof_map.C:2229
static constexpr Real TOLERANCE
const std::set< unsigned int > & get_variables() const
Get the set of variables for this periodic boundary condition.
void resize(const unsigned int n)
Resize the vector.
Definition: dense_vector.h:396
const FEType & variable_type(const unsigned int c) const
Definition: dof_map.h:2230
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
MeshBase & mesh
PeriodicBoundaryBase * boundary(boundary_id_type id)
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const =0
Order default_quadrature_order() const
Definition: fe_type.h:371
unsigned int p_level() const
Definition: elem.h:3108
void boundary_ids(const Node *node, std::vector< boundary_id_type > &vec_to_fill) const
Fills a user-provided std::vector with the boundary ids associated with Node node.
const BoundaryInfo & get_boundary_info() const
The information about boundary ids on the mesh.
Definition: mesh_base.h:165
unsigned int min_p_level_by_neighbor(const Elem *neighbor, unsigned int current_min) const
Definition: elem.C:2323
unsigned int sys_number() const
Definition: dof_map.h:2182
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const =0
virtual Point get_corresponding_pos(const Point &pt) const =0
This function should be overridden by derived classes to define how one finds corresponding nodes on ...
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
const Node & node_ref(const unsigned int i) const
Definition: elem.h:2529
dof_id_type id() const
Definition: dof_object.h:828
virtual Real hmin() const
Definition: elem.C:702
libmesh_assert(ctx)
bool is_constrained_dof(const dof_id_type dof) const
Definition: dof_map.h:2268
PetscErrorCode PetscInt const PetscInt IS * is
virtual unsigned int n_edges() const =0
bool absolute_fuzzy_equals(const TypeVector< T > &rhs, Real tol=TOLERANCE) const
Definition: type_vector.h:972
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
const DenseMatrix< Real > & get_transformation_matrix() const
Get the transformation matrix, if it is defined.
virtual unsigned int n_sides() const =0
const Elem * neighbor_ptr(unsigned int i) const
Definition: elem.h:2598
unsigned int level() const
Definition: elem.h:3074
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual unsigned short dim() const =0
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
const Node * node_ptr(const unsigned int i) const
Definition: elem.h:2507
virtual bool is_vertex(const unsigned int i) const =0
bool is_my_variable(unsigned int var_num) const
std::map< dof_id_type, Real, std::less< dof_id_type >, Threads::scalable_allocator< std::pair< const dof_id_type, Real > > > DofConstraintRow
A row of the Dof constraint matrix.
Definition: dof_map.h:100
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
Definition: dense_matrix.h:895
const Elem * neighbor(boundary_id_type boundary_id, const PointLocatorBase &point_locator, const Elem *e, unsigned int side, unsigned int *neigh_side=nullptr) const
This class implements specific orders of Gauss quadrature.
IntRange< unsigned short > node_index_range() const
Definition: elem.h:2683
The base class for defining periodic boundaries.
Defines a dense vector for use in Finite Element-type computations.
Definition: dof_map.h:74
void cholesky_solve(const DenseVector< T2 > &b, DenseVector< T2 > &x)
For symmetric positive definite (SPD) matrices.
virtual bool infinite() const =0
bool active() const
Definition: elem.h:2941
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
virtual bool is_edge(const unsigned int i) const =0
This class forms the foundation from which generic finite elements may be derived.
boostcopy::enable_if_c< ScalarTraits< T >::value &&ScalarTraits< T2 >::value, typename CompareTypes< T, T2 >::supertype >::type inner_product(const T &a, const T2 &b)
Definition: tensor_tools.h:51
void constrain_p_dofs(unsigned int var, const Elem *elem, unsigned int s, unsigned int p)
Constrains degrees of freedom on side s of element elem which correspond to variable number var and t...
uint8_t dof_id_type
Definition: id_types.h:67
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ compute_periodic_node_constraints()

void libMesh::FEAbstract::compute_periodic_node_constraints ( NodeConstraints constraints,
const PeriodicBoundaries boundaries,
const MeshBase mesh,
const PointLocatorBase point_locator,
const Elem elem 
)
staticinherited

Computes the node position constraint equation contributions (for meshes with periodic boundary conditions)

Definition at line 1078 of file fe_abstract.C.

References libMesh::Elem::active(), libMesh::PeriodicBoundaries::boundary(), libMesh::Elem::build_side_ptr(), libMesh::Elem::default_side_order(), libMesh::Elem::dim(), libMesh::FEAbstract::fe_type, libMesh::PeriodicBoundaryBase::get_corresponding_pos(), libMesh::DofObject::id(), libMesh::FEMap::inverse_map(), libMesh::Elem::level(), libMesh::libmesh_assert(), libMesh::FEMap::map_fe_type(), mesh, libMesh::FEInterface::n_dofs(), libMesh::PeriodicBoundaries::neighbor(), libMesh::Elem::neighbor_ptr(), libMesh::Real, libMesh::FEInterface::shape(), libMesh::Elem::side_index_range(), and libMesh::Threads::spin_mtx.

1083 {
1084  // Only bother if we truly have periodic boundaries
1085  if (boundaries.empty())
1086  return;
1087 
1088  libmesh_assert(elem);
1089 
1090  // Only constrain active elements with this method
1091  if (!elem->active())
1092  return;
1093 
1094  const unsigned int Dim = elem->dim();
1095 
1096  const FEFamily mapping_family = FEMap::map_fe_type(*elem);
1097  const FEType fe_type(elem->default_side_order(), mapping_family);
1098 
1099  // Pull objects out of the loop to reduce heap operations
1100  std::vector<const Node *> my_nodes, neigh_nodes;
1101  std::unique_ptr<const Elem> my_side, neigh_side;
1102 
1103  // Look at the element faces. Check to see if we need to
1104  // build constraints.
1105  std::vector<boundary_id_type> bc_ids;
1106  for (auto s : elem->side_index_range())
1107  {
1108  if (elem->neighbor_ptr(s))
1109  continue;
1110 
1111  mesh.get_boundary_info().boundary_ids (elem, s, bc_ids);
1112  for (const auto & boundary_id : bc_ids)
1113  {
1114  const PeriodicBoundaryBase * periodic = boundaries.boundary(boundary_id);
1115  if (periodic)
1116  {
1117  libmesh_assert(point_locator);
1118 
1119  // Get pointers to the element's neighbor.
1120  unsigned int s_neigh;
1121  const Elem * neigh = boundaries.neighbor(boundary_id, *point_locator, elem, s, &s_neigh);
1122 
1123  libmesh_error_msg_if
1124  (!neigh, "PeriodicBoundaries can't find a periodic neighbor for element " <<
1125  elem->id() << " side " << s);
1126 
1127  // h refinement constraints:
1128  // constrain dofs shared between
1129  // this element and ones as coarse
1130  // as or coarser than this element.
1131  if (neigh->level() <= elem->level())
1132  {
1133 #ifdef LIBMESH_ENABLE_AMR
1134  libmesh_assert(neigh->active());
1135 #endif // #ifdef LIBMESH_ENABLE_AMR
1136 
1137  elem->build_side_ptr(my_side, s);
1138  neigh->build_side_ptr(neigh_side, s_neigh);
1139 
1140  const unsigned int n_side_nodes = my_side->n_nodes();
1141 
1142  my_nodes.clear();
1143  my_nodes.reserve (n_side_nodes);
1144  neigh_nodes.clear();
1145  neigh_nodes.reserve (n_side_nodes);
1146 
1147  for (unsigned int n=0; n != n_side_nodes; ++n)
1148  my_nodes.push_back(my_side->node_ptr(n));
1149 
1150  for (unsigned int n=0; n != n_side_nodes; ++n)
1151  neigh_nodes.push_back(neigh_side->node_ptr(n));
1152 
1153  // Make sure we're not adding recursive constraints
1154  // due to the redundancy in the way we add periodic
1155  // boundary constraints, or adding constraints to
1156  // nodes that already have AMR constraints
1157  std::vector<bool> skip_constraint(n_side_nodes, false);
1158 
1159  for (unsigned int my_side_n=0;
1160  my_side_n < n_side_nodes;
1161  my_side_n++)
1162  {
1163  // Do not use the p_level(), if any, that is inherited by the side.
1164  libmesh_assert_less (my_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, my_side.get()));
1165 
1166  const Node * my_node = my_nodes[my_side_n];
1167 
1168  // If we've already got a constraint on this
1169  // node, then the periodic constraint is
1170  // redundant
1171  {
1172  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1173 
1174  if (constraints.count(my_node))
1175  {
1176  skip_constraint[my_side_n] = true;
1177  continue;
1178  }
1179  }
1180 
1181  // Compute the neighbors's side shape function values.
1182  for (unsigned int their_side_n=0;
1183  their_side_n < n_side_nodes;
1184  their_side_n++)
1185  {
1186  // Do not use the p_level(), if any, that is inherited by the side.
1187  libmesh_assert_less (their_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, neigh_side.get()));
1188 
1189  const Node * their_node = neigh_nodes[their_side_n];
1190 
1191  // If there's a constraint on an opposing node,
1192  // we need to see if it's constrained by
1193  // *our side* making any periodic constraint
1194  // on us recursive
1195  {
1196  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1197 
1198  if (!constraints.count(their_node))
1199  continue;
1200 
1201  const NodeConstraintRow & their_constraint_row =
1202  constraints[their_node].first;
1203 
1204  for (unsigned int orig_side_n=0;
1205  orig_side_n < n_side_nodes;
1206  orig_side_n++)
1207  {
1208  // Do not use the p_level(), if any, that is inherited by the side.
1209  libmesh_assert_less (orig_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, my_side.get()));
1210 
1211  const Node * orig_node = my_nodes[orig_side_n];
1212 
1213  if (their_constraint_row.count(orig_node))
1214  skip_constraint[orig_side_n] = true;
1215  }
1216  }
1217  }
1218  }
1219  for (unsigned int my_side_n=0;
1220  my_side_n < n_side_nodes;
1221  my_side_n++)
1222  {
1223  // Do not use the p_level(), if any, that is inherited by the side.
1224  libmesh_assert_less (my_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, my_side.get()));
1225 
1226  if (skip_constraint[my_side_n])
1227  continue;
1228 
1229  const Node * my_node = my_nodes[my_side_n];
1230 
1231  // Figure out where my node lies on their reference element.
1232  const Point neigh_point = periodic->get_corresponding_pos(*my_node);
1233 
1234  // Figure out where my node lies on their reference element.
1235  const Point mapped_point =
1236  FEMap::inverse_map(Dim-1, neigh_side.get(),
1237  neigh_point);
1238 
1239  for (unsigned int their_side_n=0;
1240  their_side_n < n_side_nodes;
1241  their_side_n++)
1242  {
1243  // Do not use the p_level(), if any, that is inherited by the side.
1244  libmesh_assert_less (their_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, neigh_side.get()));
1245 
1246  const Node * their_node = neigh_nodes[their_side_n];
1247  libmesh_assert(their_node);
1248 
1249  // Do not use the p_level(), if any, that is inherited by the side.
1250  const Real their_value = FEInterface::shape(fe_type,
1251  /*extra_order=*/0,
1252  neigh_side.get(),
1253  their_side_n,
1254  mapped_point);
1255 
1256  // since we may be running this method concurrently
1257  // on multiple threads we need to acquire a lock
1258  // before modifying the shared constraint_row object.
1259  {
1260  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1261 
1262  NodeConstraintRow & constraint_row =
1263  constraints[my_node].first;
1264 
1265  constraint_row.emplace(their_node, their_value);
1266  }
1267  }
1268  }
1269  }
1270  }
1271  }
1272  }
1273 }
static unsigned int n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
Definition: fe_interface.C:355
static Point inverse_map(const unsigned int dim, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true, const bool extra_checks=true)
Definition: fe_map.C:1628
MeshBase & mesh
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
Definition: fe_interface.C:760
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::map< const Node *, Real, std::less< const Node * >, Threads::scalable_allocator< std::pair< const Node *const, Real > > > NodeConstraintRow
A row of the Node constraint mapping.
Definition: dof_map.h:148
FEFamily
defines an enum for finite element families.
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730
static FEFamily map_fe_type(const Elem &elem)
Definition: fe_map.C:46
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ compute_proj_constraints()

void libMesh::FEGenericBase< FEOutputType< T >::type >::compute_proj_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
staticinherited

Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to variable number var_number, using generic projections.

Definition at line 1570 of file fe_base.C.

References libMesh::Elem::active(), libMesh::Variable::active_on_subdomain(), libMesh::C_ONE, libMesh::C_ZERO, libMesh::DenseMatrix< T >::cholesky_solve(), libMesh::DofMap::constrain_p_dofs(), libMesh::FEType::default_quadrature_order(), libMesh::Elem::dim(), libMesh::DISCONTINUOUS, libMesh::DofMap::dof_indices(), libMesh::FEInterface::dofs_on_side(), libMesh::OrderWrapper::get_order(), libMesh::Elem::infinite(), libMesh::TensorTools::inner_product(), libMesh::DofObject::invalid_id, libMesh::FEMap::inverse_map(), libMesh::is, libMesh::DofMap::is_constrained_dof(), libMesh::Elem::level(), libMesh::libmesh_assert(), libMesh::Elem::min_p_level_by_neighbor(), libMesh::Elem::n_neighbors(), libMesh::Elem::n_nodes(), libMesh::Elem::neighbor_ptr(), libMesh::FEType::order, libMesh::Elem::p_level(), libMesh::Real, libMesh::DenseVector< T >::resize(), libMesh::DenseMatrix< T >::resize(), libMesh::DofMap::should_p_refine_var(), libMesh::SIDE_DISCONTINUOUS, libMesh::Elem::side_index_range(), libMesh::Threads::spin_mtx, libMesh::Elem::subdomain_id(), libMesh::TOLERANCE, libMesh::Variable::type(), libMesh::DofMap::variable(), and libMesh::Elem::which_neighbor_am_i().

1574 {
1575  libmesh_assert(elem);
1576 
1577  const unsigned int Dim = elem->dim();
1578 
1579  // Only constrain elements in 2,3D.
1580  if (Dim == 1)
1581  return;
1582 
1583  // Only constrain active elements with this method
1584  if (!elem->active())
1585  return;
1586 
1587  const Variable & var = dof_map.variable(variable_number);
1588  const FEType & base_fe_type = var.type();
1589  const bool add_p_level = dof_map.should_p_refine_var(variable_number);
1590 
1591  // Construct FE objects for this element and its neighbors.
1592  std::unique_ptr<FEGenericBase<OutputShape>> my_fe
1593  (FEGenericBase<OutputShape>::build(Dim, base_fe_type));
1594  my_fe->add_p_level_in_reinit(add_p_level);
1595  const FEContinuity cont = my_fe->get_continuity();
1596 
1597  // We don't need to constrain discontinuous elements
1598  if (cont == DISCONTINUOUS)
1599  return;
1600  libmesh_assert (cont == C_ZERO || cont == C_ONE ||
1601  cont == SIDE_DISCONTINUOUS);
1602 
1603  // this would require some generalisation:
1604  // - e.g. the 'my_fe'-object needs generalisation
1605  // - due to lack of one-to-one correspondence of DOFs and nodes,
1606  // this doesn't work easily.
1607  if (elem->infinite())
1608  libmesh_not_implemented();
1609 
1610  std::unique_ptr<FEGenericBase<OutputShape>> neigh_fe
1611  (FEGenericBase<OutputShape>::build(Dim, base_fe_type));
1612  neigh_fe->add_p_level_in_reinit(add_p_level);
1613 
1614  QGauss my_qface(Dim-1, base_fe_type.default_quadrature_order());
1615  my_fe->attach_quadrature_rule (&my_qface);
1616  std::vector<Point> neigh_qface;
1617 
1618  const std::vector<Real> & JxW = my_fe->get_JxW();
1619  const std::vector<Point> & q_point = my_fe->get_xyz();
1620  const std::vector<std::vector<OutputShape>> & phi = my_fe->get_phi();
1621  const std::vector<std::vector<OutputShape>> & neigh_phi =
1622  neigh_fe->get_phi();
1623  const std::vector<Point> * face_normals = nullptr;
1624  const std::vector<std::vector<OutputGradient>> * dphi = nullptr;
1625  const std::vector<std::vector<OutputGradient>> * neigh_dphi = nullptr;
1626 
1627  std::vector<dof_id_type> my_dof_indices, neigh_dof_indices;
1628  std::vector<unsigned int> my_side_dofs, neigh_side_dofs;
1629 
1630  if (cont == C_ONE)
1631  {
1632  const std::vector<Point> & ref_face_normals =
1633  my_fe->get_normals();
1634  face_normals = &ref_face_normals;
1635  const std::vector<std::vector<OutputGradient>> & ref_dphi =
1636  my_fe->get_dphi();
1637  dphi = &ref_dphi;
1638  const std::vector<std::vector<OutputGradient>> & ref_neigh_dphi =
1639  neigh_fe->get_dphi();
1640  neigh_dphi = &ref_neigh_dphi;
1641  }
1642 
1643  DenseMatrix<Real> Ke;
1644  DenseVector<Real> Fe;
1645  std::vector<DenseVector<Real>> Ue;
1646 
1647  // Look at the element faces. Check to see if we need to
1648  // build constraints.
1649  for (auto s : elem->side_index_range())
1650  {
1651  // Get pointers to the element's neighbor.
1652  const Elem * neigh = elem->neighbor_ptr(s);
1653 
1654  if (!neigh)
1655  continue;
1656 
1657  if (!var.active_on_subdomain(neigh->subdomain_id()))
1658  continue;
1659 
1660  // h refinement constraints:
1661  // constrain dofs shared between
1662  // this element and ones coarser
1663  // than this element.
1664  if (neigh->level() < elem->level())
1665  {
1666  unsigned int s_neigh = neigh->which_neighbor_am_i(elem);
1667  libmesh_assert_less (s_neigh, neigh->n_neighbors());
1668 
1669  // Find the minimum p level; we build the h constraint
1670  // matrix with this and then constrain away all higher p
1671  // DoFs.
1672  libmesh_assert(neigh->active());
1673  const unsigned int min_p_level = add_p_level *
1674  std::min(elem->p_level(), neigh->p_level());
1675  // we may need to make the FE objects reinit with the
1676  // minimum shared p_level
1677  const unsigned int old_elem_level = add_p_level * elem->p_level();
1678  if (old_elem_level != min_p_level)
1679  my_fe->set_fe_order(my_fe->get_fe_type().order.get_order() + min_p_level - old_elem_level);
1680  const unsigned int old_neigh_level = add_p_level * neigh->p_level();
1681  if (old_neigh_level != min_p_level)
1682  neigh_fe->set_fe_order(neigh_fe->get_fe_type().order.get_order() + min_p_level - old_neigh_level);
1683 
1684  my_fe->reinit(elem, s);
1685 
1686  // This function gets called element-by-element, so there
1687  // will be a lot of memory allocation going on. We can
1688  // at least minimize this for the case of the dof indices
1689  // by efficiently preallocating the requisite storage.
1690  // n_nodes is not necessarily n_dofs, but it is better
1691  // than nothing!
1692  my_dof_indices.reserve (elem->n_nodes());
1693  neigh_dof_indices.reserve (neigh->n_nodes());
1694 
1695  dof_map.dof_indices (elem, my_dof_indices,
1696  variable_number,
1697  min_p_level);
1698  dof_map.dof_indices (neigh, neigh_dof_indices,
1699  variable_number,
1700  min_p_level);
1701 
1702  const unsigned int n_qp = my_qface.n_points();
1703 
1704  FEMap::inverse_map (Dim, neigh, q_point, neigh_qface);
1705 
1706  neigh_fe->reinit(neigh, &neigh_qface);
1707 
1708  // We're only concerned with DOFs whose values (and/or first
1709  // derivatives for C1 elements) are supported on side nodes
1710  FEType elem_fe_type = base_fe_type;
1711  if (old_elem_level != min_p_level)
1712  elem_fe_type.order = base_fe_type.order.get_order() + min_p_level - old_elem_level;
1713  FEType neigh_fe_type = base_fe_type;
1714  if (old_neigh_level != min_p_level)
1715  neigh_fe_type.order = base_fe_type.order.get_order() + min_p_level - old_neigh_level;
1716  FEInterface::dofs_on_side(elem, Dim, elem_fe_type, s, my_side_dofs);
1717  FEInterface::dofs_on_side(neigh, Dim, neigh_fe_type, s_neigh, neigh_side_dofs);
1718 
1719  const unsigned int n_side_dofs =
1720  cast_int<unsigned int>(my_side_dofs.size());
1721  libmesh_assert_equal_to (n_side_dofs, neigh_side_dofs.size());
1722 
1723 #ifndef NDEBUG
1724  for (auto i : my_side_dofs)
1725  libmesh_assert_less(i, my_dof_indices.size());
1726  for (auto i : neigh_side_dofs)
1727  libmesh_assert_less(i, neigh_dof_indices.size());
1728 #endif
1729 
1730  Ke.resize (n_side_dofs, n_side_dofs);
1731  Ue.resize(n_side_dofs);
1732 
1733  // Form the projection matrix, (inner product of fine basis
1734  // functions against fine test functions)
1735  for (unsigned int is = 0; is != n_side_dofs; ++is)
1736  {
1737  const unsigned int i = my_side_dofs[is];
1738  for (unsigned int js = 0; js != n_side_dofs; ++js)
1739  {
1740  const unsigned int j = my_side_dofs[js];
1741  for (unsigned int qp = 0; qp != n_qp; ++qp)
1742  {
1743  Ke(is,js) += JxW[qp] * TensorTools::inner_product(phi[i][qp], phi[j][qp]);
1744  if (cont == C_ONE)
1745  Ke(is,js) += JxW[qp] *
1746  TensorTools::inner_product((*dphi)[i][qp] *
1747  (*face_normals)[qp],
1748  (*dphi)[j][qp] *
1749  (*face_normals)[qp]);
1750  }
1751  }
1752  }
1753 
1754  // Form the right hand sides, (inner product of coarse basis
1755  // functions against fine test functions)
1756  for (unsigned int is = 0; is != n_side_dofs; ++is)
1757  {
1758  const unsigned int i = neigh_side_dofs[is];
1759  Fe.resize (n_side_dofs);
1760  for (unsigned int js = 0; js != n_side_dofs; ++js)
1761  {
1762  const unsigned int j = my_side_dofs[js];
1763  for (unsigned int qp = 0; qp != n_qp; ++qp)
1764  {
1765  Fe(js) += JxW[qp] *
1766  TensorTools::inner_product(neigh_phi[i][qp],
1767  phi[j][qp]);
1768  if (cont == C_ONE)
1769  Fe(js) += JxW[qp] *
1770  TensorTools::inner_product((*neigh_dphi)[i][qp] *
1771  (*face_normals)[qp],
1772  (*dphi)[j][qp] *
1773  (*face_normals)[qp]);
1774  }
1775  }
1776  Ke.cholesky_solve(Fe, Ue[is]);
1777  }
1778 
1779  for (unsigned int js = 0; js != n_side_dofs; ++js)
1780  {
1781  const unsigned int j = my_side_dofs[js];
1782  const dof_id_type my_dof_g = my_dof_indices[j];
1783  libmesh_assert_not_equal_to (my_dof_g, DofObject::invalid_id);
1784 
1785  // Hunt for "constraining against myself" cases before
1786  // we bother creating a constraint row
1787  bool self_constraint = false;
1788  for (unsigned int is = 0; is != n_side_dofs; ++is)
1789  {
1790  const unsigned int i = neigh_side_dofs[is];
1791  const dof_id_type their_dof_g = neigh_dof_indices[i];
1792  libmesh_assert_not_equal_to (their_dof_g, DofObject::invalid_id);
1793 
1794  if (their_dof_g == my_dof_g)
1795  {
1796 #ifndef NDEBUG
1797  const Real their_dof_value = Ue[is](js);
1798  libmesh_assert_less (std::abs(their_dof_value-1.),
1799  10*TOLERANCE);
1800 
1801  for (unsigned int k = 0; k != n_side_dofs; ++k)
1802  libmesh_assert(k == is ||
1803  std::abs(Ue[k](js)) <
1804  10*TOLERANCE);
1805 #endif
1806 
1807  self_constraint = true;
1808  break;
1809  }
1810  }
1811 
1812  if (self_constraint)
1813  continue;
1814 
1815  DofConstraintRow * constraint_row;
1816 
1817  // we may be running constraint methods concurrently
1818  // on multiple threads, so we need a lock to
1819  // ensure that this constraint is "ours"
1820  {
1821  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1822 
1823  if (dof_map.is_constrained_dof(my_dof_g))
1824  continue;
1825 
1826  constraint_row = &(constraints[my_dof_g]);
1827  libmesh_assert(constraint_row->empty());
1828  }
1829 
1830  for (unsigned int is = 0; is != n_side_dofs; ++is)
1831  {
1832  const unsigned int i = neigh_side_dofs[is];
1833  const dof_id_type their_dof_g = neigh_dof_indices[i];
1834  libmesh_assert_not_equal_to (their_dof_g, DofObject::invalid_id);
1835  libmesh_assert_not_equal_to (their_dof_g, my_dof_g);
1836 
1837  const Real their_dof_value = Ue[is](js);
1838 
1839  if (std::abs(their_dof_value) < 10*TOLERANCE)
1840  continue;
1841 
1842  constraint_row->emplace(their_dof_g, their_dof_value);
1843  }
1844  }
1845 
1846  my_fe->set_fe_order(my_fe->get_fe_type().order.get_order() + old_elem_level - min_p_level);
1847  neigh_fe->set_fe_order(neigh_fe->get_fe_type().order.get_order() + old_neigh_level - min_p_level);
1848  }
1849 
1850  if (add_p_level)
1851  {
1852  // p refinement constraints:
1853  // constrain dofs shared between
1854  // active elements and neighbors with
1855  // lower polynomial degrees
1856  const unsigned int min_p_level =
1857  neigh->min_p_level_by_neighbor(elem, elem->p_level());
1858  if (min_p_level < elem->p_level())
1859  {
1860  // Adaptive p refinement of non-hierarchic bases will
1861  // require more coding
1862  libmesh_assert(my_fe->is_hierarchic());
1863  dof_map.constrain_p_dofs(variable_number, elem,
1864  s, min_p_level);
1865  }
1866  }
1867  }
1868 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
IntRange< unsigned short > side_index_range() const
Definition: elem.h:2710
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Definition: dof_map.C:2229
static constexpr Real TOLERANCE
void resize(const unsigned int n)
Resize the vector.
Definition: dense_vector.h:396
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
Order default_quadrature_order() const
Definition: fe_type.h:371
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
unsigned int min_p_level_by_neighbor(const Elem *neighbor, unsigned int current_min) const
Definition: elem.C:2323
const Variable & variable(const unsigned int c) const override
Definition: dof_map.h:2200
bool should_p_refine_var(unsigned int var) const
Whether the given variable should be p-refined.
Definition: dof_map.h:2447
This class defines the notion of a variable in the system.
Definition: variable.h:50
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
virtual unsigned int n_nodes() const =0
unsigned int which_neighbor_am_i(const Elem *e) const
This function tells you which neighbor e is.
Definition: elem.h:2919
libmesh_assert(ctx)
bool is_constrained_dof(const dof_id_type dof) const
Definition: dof_map.h:2268
PetscErrorCode PetscInt const PetscInt IS * is
bool active_on_subdomain(subdomain_id_type sid) const
Definition: variable.h:167
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
int get_order() const
Explicitly request the order as an int.
Definition: fe_type.h:80
const Elem * neighbor_ptr(unsigned int i) const
Definition: elem.h:2598
unsigned int level() const
Definition: elem.h:3074
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
subdomain_id_type subdomain_id() const
Definition: elem.h:2582
virtual unsigned short dim() const =0
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
unsigned int n_neighbors() const
Definition: elem.h:714
std::map< dof_id_type, Real, std::less< dof_id_type >, Threads::scalable_allocator< std::pair< const dof_id_type, Real > > > DofConstraintRow
A row of the Dof constraint matrix.
Definition: dof_map.h:100
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
Definition: dense_matrix.h:895
This class implements specific orders of Gauss quadrature.
Defines a dense vector for use in Finite Element-type computations.
Definition: dof_map.h:74
void cholesky_solve(const DenseVector< T2 > &b, DenseVector< T2 > &x)
For symmetric positive definite (SPD) matrices.
virtual bool infinite() const =0
bool active() const
Definition: elem.h:2941
This class forms the foundation from which generic finite elements may be derived.
boostcopy::enable_if_c< ScalarTraits< T >::value &&ScalarTraits< T2 >::value, typename CompareTypes< T, T2 >::supertype >::type inner_product(const T &a, const T2 &b)
Definition: tensor_tools.h:51
void constrain_p_dofs(unsigned int var, const Elem *elem, unsigned int s, unsigned int p)
Constrains degrees of freedom on side s of element elem which correspond to variable number var and t...
uint8_t dof_id_type
Definition: id_types.h:67
const FEType & type() const
Definition: variable.h:144
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ compute_shape_functions()

void libMesh::FEGenericBase< FEOutputType< T >::type >::compute_shape_functions ( const Elem elem,
const std::vector< Point > &  qp 
)
overrideprotectedvirtualinherited

After having updated the jacobian and the transformation from local to global coordinates in FEMap::compute_map(), the first derivatives of the shape functions are transformed to global coordinates, giving dphi, dphidx, dphidy, and dphidz.

This method should rarely be re-defined in derived classes, but still should be usable for children. Therefore, keep it protected.

Implements libMesh::FEAbstract.

Reimplemented in libMesh::FEXYZ< Dim >.

Definition at line 762 of file fe_base.C.

References dim.

764 {
765  //-------------------------------------------------------------------------
766  // Compute the shape function values (and derivatives)
767  // at the Quadrature points. Note that the actual values
768  // have already been computed via init_shape_functions
769 
770  // Start logging the shape function computation
771  LOG_SCOPE("compute_shape_functions()", "FE");
772 
773  this->determine_calculations();
774 
775  if (calculate_phi)
776  this->_fe_trans->map_phi(this->dim, elem, qp, (*this), this->phi, this->_add_p_level_in_reinit);
777 
778  if (calculate_dphi)
779  this->_fe_trans->map_dphi(this->dim, elem, qp, (*this), this->dphi,
780  this->dphidx, this->dphidy, this->dphidz);
781 
782 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
783  if (calculate_d2phi)
784  this->_fe_trans->map_d2phi(this->dim, qp, (*this), this->d2phi,
785  this->d2phidx2, this->d2phidxdy, this->d2phidxdz,
786  this->d2phidy2, this->d2phidydz, this->d2phidz2);
787 #endif //LIBMESH_ENABLE_SECOND_DERIVATIVES
788 
789  // Only compute curl for vector-valued elements
791  this->_fe_trans->map_curl(this->dim, elem, qp, (*this), this->curl_phi);
792 
793  // Only compute div for vector-valued elements
795  this->_fe_trans->map_div(this->dim, elem, qp, (*this), this->div_phi);
796 }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:712
std::vector< std::vector< OutputTensor > > d2phi
Shape function second derivative values.
Definition: fe_base.h:674
std::vector< std::vector< OutputShape > > d2phidxdz
Shape function second derivatives in the x-z direction.
Definition: fe_base.h:720
std::vector< std::vector< OutputShape > > d2phidydz
Shape function second derivatives in the y-z direction.
Definition: fe_base.h:730
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
std::unique_ptr< FETransformationBase< FEOutputType< T >::type > > _fe_trans
Object that handles computing shape function values, gradients, etc in the physical domain...
Definition: fe_base.h:609
std::vector< std::vector< OutputShape > > d2phidx2
Shape function second derivatives in the x direction.
Definition: fe_base.h:710
std::vector< std::vector< OutputShape > > curl_phi
Shape function curl values.
Definition: fe_base.h:631
std::vector< std::vector< OutputShape > > dphidy
Shape function derivatives in the y direction.
Definition: fe_base.h:661
std::vector< std::vector< OutputShape > > d2phidy2
Shape function second derivatives in the y direction.
Definition: fe_base.h:725
bool calculate_div_phi
Should we calculate shape function divergences?
Definition: fe_abstract.h:717
std::vector< std::vector< OutputShape > > d2phidxdy
Shape function second derivatives in the x-y direction.
Definition: fe_base.h:715
std::vector< std::vector< OutputShape > > dphidx
Shape function derivatives in the x direction.
Definition: fe_base.h:656
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:660
std::vector< std::vector< OutputDivergence > > div_phi
Shape function divergence values.
Definition: fe_base.h:636
virtual_for_inffe void determine_calculations()
Determine which values are to be calculated, for both the FE itself and for the FEMap.
Definition: fe_base.C:913
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
bool _add_p_level_in_reinit
Whether to add p-refinement levels in init/reinit methods.
Definition: fe_abstract.h:787
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
std::vector< std::vector< OutputShape > > d2phidz2
Shape function second derivatives in the z direction.
Definition: fe_base.h:735
std::vector< std::vector< OutputShape > > dphidz
Shape function derivatives in the z direction.
Definition: fe_base.h:666

◆ default_all_shape_derivs()

void libMesh::FE< Dim, T >::default_all_shape_derivs ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> *  comps[3],
const bool  add_p_level = true 
)
staticprotectedinherited

A default implementation for all_shape_derivs.

Definition at line 736 of file fe.C.

741 {
742  for (unsigned int d=0; d != Dim; ++d)
743  {
744  auto & comps_d = *comps[d];
745  for (auto i : index_range(comps_d))
747  (elem,o,i,d,p,comps_d[i],add_p_level);
748  }
749 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ default_all_shapes()

static void libMesh::FE< Dim, T >::default_all_shapes ( const Elem elem,
const Order  o,
const std::vector< Point > &  p,
std::vector< std::vector< OutputShape >> &  v,
const bool  add_p_level = true 
)
inlinestaticprotectedinherited

A default implementation for all_shapes.

Definition at line 753 of file fe.h.

758  {
759  for (auto i : index_range(v))
760  {
761  libmesh_assert_equal_to ( p.size(), v[i].size() );
762  FE<Dim,T>::shapes (elem, o, i, p, v[i], add_p_level);
763  }
764  }
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ default_shape_derivs()

static void libMesh::FE< Dim, T >::default_shape_derivs ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level = true 
)
inlinestaticprotectedinherited

A default implementation for shape_derivs.

Definition at line 769 of file fe.h.

776  {
777  libmesh_assert_equal_to(p.size(), v.size());
778  for (auto vi : index_range(v))
779  v[vi] = FE<Dim,T>::shape_deriv (elem, o, i, j, p[vi], add_p_level);
780  }
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ default_shapes()

static void libMesh::FE< Dim, T >::default_shapes ( const Elem elem,
const Order  o,
const unsigned int  i,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level = true 
)
inlinestaticprotectedinherited

A default implementation for shapes.

Definition at line 738 of file fe.h.

744  {
745  libmesh_assert_equal_to(p.size(), v.size());
746  for (auto vi : index_range(v))
747  v[vi] = FE<Dim,T>::shape (elem, o, i, p[vi], add_p_level);
748  }
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ default_side_nodal_soln()

void libMesh::FE< Dim, T >::default_side_nodal_soln ( const Elem elem,
const Order  o,
const unsigned int  side,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln_on_side,
bool  add_p_level = true,
const unsigned  vdim = 1 
)
staticprotectedinherited

A default implementation for side_nodal_soln.

Definition at line 754 of file fe.C.

760 {
761  std::vector<Number> full_nodal_soln;
762  nodal_soln(elem, o, elem_soln, full_nodal_soln, add_p_level, vdim);
763  const std::vector<unsigned int> side_nodes =
764  elem->nodes_on_side(side);
765 
766  std::size_t n_side_nodes = side_nodes.size();
767  nodal_soln_on_side.resize(n_side_nodes);
768  for (auto n : make_range(n_side_nodes))
769  nodal_soln_on_side[n] = full_nodal_soln[side_nodes[n]];
770 }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
virtual std::vector< unsigned int > nodes_on_side(const unsigned int) const =0

◆ determine_calculations()

void libMesh::FEGenericBase< FEOutputType< T >::type >::determine_calculations ( )
protectedinherited

Determine which values are to be calculated, for both the FE itself and for the FEMap.

Definition at line 913 of file fe_base.C.

References libMesh::FEInterface::field_type(), libMesh::libmesh_assert(), and libMesh::TYPE_VECTOR.

914 {
915  this->calculations_started = true;
916 
917  // If the user forgot to request anything, but we're enabling
918  // deprecated backwards compatibility, then we'll be safe and
919  // calculate everything. If we haven't enable deprecated backwards
920  // compatibility then we'll scream and die.
921 #ifdef LIBMESH_ENABLE_DEPRECATED
922 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
923  if (!this->calculate_nothing &&
924  !this->calculate_phi && !this->calculate_dphi &&
925  !this->calculate_dphiref &&
926  !this->calculate_d2phi && !this->calculate_curl_phi &&
927  !this->calculate_div_phi && !this->calculate_map)
928  {
929  libmesh_deprecated();
930  this->calculate_phi = this->calculate_dphi = this->calculate_d2phi = this->calculate_dphiref = true;
931  if (FEInterface::field_type(fe_type.family) == TYPE_VECTOR)
932  {
933  this->calculate_curl_phi = true;
934  this->calculate_div_phi = true;
935  }
936  }
937 #else
938  if (!this->calculate_nothing &&
939  !this->calculate_phi && !this->calculate_dphi &&
940  !this->calculate_dphiref &&
941  !this->calculate_curl_phi && !this->calculate_div_phi &&
942  !this->calculate_map)
943  {
944  libmesh_deprecated();
945  this->calculate_phi = this->calculate_dphi = this->calculate_dphiref = true;
946  if (FEInterface::field_type(fe_type.family) == TYPE_VECTOR)
947  {
948  this->calculate_curl_phi = true;
949  this->calculate_div_phi = true;
950  }
951  }
952 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES
953 #else
954 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
956  this->calculate_phi || this->calculate_dphi ||
957  this->calculate_d2phi ||
958  this->calculate_dphiref ||
959  this->calculate_curl_phi || this->calculate_div_phi ||
960  this->calculate_map);
961 #else
963  this->calculate_phi || this->calculate_dphi ||
964  this->calculate_dphiref ||
965  this->calculate_curl_phi || this->calculate_div_phi ||
966  this->calculate_map);
967 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES
968 #endif // LIBMESH_ENABLE_DEPRECATED
969 
970  // Request whichever terms are necessary from the FEMap
971  if (this->calculate_phi)
972  this->_fe_trans->init_map_phi(*this);
973 
974  if (this->calculate_dphiref)
975  this->_fe_trans->init_map_dphi(*this);
976 
977 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
978  if (this->calculate_d2phi)
979  this->_fe_trans->init_map_d2phi(*this);
980 #endif //LIBMESH_ENABLE_SECOND_DERIVATIVES
981 }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:712
FEFamily family
The type of finite element.
Definition: fe_type.h:221
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
std::unique_ptr< FETransformationBase< FEOutputType< T >::type > > _fe_trans
Object that handles computing shape function values, gradients, etc in the physical domain...
Definition: fe_base.h:609
bool calculate_div_phi
Should we calculate shape function divergences?
Definition: fe_abstract.h:717
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730
bool calculate_nothing
Are we potentially deliberately calculating nothing?
Definition: fe_abstract.h:681

◆ disable_print_counter_info()

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 100 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

101 {
102  _enable_print_counter = false;
103  return;
104 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ dofs_on_edge() [1/2]

void libMesh::FE< Dim, T >::dofs_on_edge ( const Elem *const  elem,
const Order  o,
unsigned int  e,
std::vector< unsigned int > &  di,
bool  add_p_level = true 
)
staticinherited

Fills the vector di with the local degree of freedom indices associated with edge e of element elem.

On a p-refined element, o should be the base order of the element.

Definition at line 126 of file fe.C.

131 {
132  libmesh_assert(elem);
133  libmesh_assert_less (e, elem->n_edges());
134 
135  di.clear();
136  unsigned int nodenum = 0;
137  const unsigned int n_nodes = elem->n_nodes();
138  for (unsigned int n = 0; n != n_nodes; ++n)
139  {
140  const unsigned int n_dofs =
141  n_dofs_at_node(*elem, static_cast<Order>(o + add_p_level*elem->p_level()), n);
142  if (elem->is_node_on_edge(n, e))
143  for (unsigned int i = 0; i != n_dofs; ++i)
144  di.push_back(nodenum++);
145  else
146  nodenum += n_dofs;
147  }
148 }
static unsigned int n_dofs(const ElemType t, const Order o)
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
unsigned int p_level() const
Definition: elem.h:3108
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const =0
const dof_id_type n_nodes
Definition: tecplot_io.C:67
virtual unsigned int n_nodes() const =0
libmesh_assert(ctx)
virtual unsigned int n_edges() const =0

◆ dofs_on_edge() [2/2]

void libMesh::FE< 2, SUBDIVISION >::dofs_on_edge ( const Elem const,
const Order  ,
unsigned  int,
std::vector< unsigned int > &  di,
bool   
)
inherited

Definition at line 971 of file fe_subdivision_2D.C.

971 { di.resize(0); }

◆ dofs_on_side() [1/2]

void libMesh::FE< Dim, T >::dofs_on_side ( const Elem *const  elem,
const Order  o,
unsigned int  s,
std::vector< unsigned int > &  di,
bool  add_p_level = true 
)
staticinherited

Fills the vector di with the local degree of freedom indices associated with side s of element elem.

On a p-refined element, o should be the base order of the element.

Definition at line 99 of file fe.C.

104 {
105  libmesh_assert(elem);
106  libmesh_assert_less (s, elem->n_sides());
107 
108  di.clear();
109  unsigned int nodenum = 0;
110  const unsigned int n_nodes = elem->n_nodes();
111  for (unsigned int n = 0; n != n_nodes; ++n)
112  {
113  const unsigned int n_dofs =
114  n_dofs_at_node(*elem, static_cast<Order>(o + add_p_level*elem->p_level()), n);
115  if (elem->is_node_on_side(n, s))
116  for (unsigned int i = 0; i != n_dofs; ++i)
117  di.push_back(nodenum++);
118  else
119  nodenum += n_dofs;
120  }
121 }
static unsigned int n_dofs(const ElemType t, const Order o)
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const =0
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
unsigned int p_level() const
Definition: elem.h:3108
const dof_id_type n_nodes
Definition: tecplot_io.C:67
virtual unsigned int n_nodes() const =0
libmesh_assert(ctx)
virtual unsigned int n_sides() const =0

◆ dofs_on_side() [2/2]

void libMesh::FE< 2, SUBDIVISION >::dofs_on_side ( const Elem const,
const Order  ,
unsigned  int,
std::vector< unsigned int > &  di,
bool   
)
inherited

Definition at line 970 of file fe_subdivision_2D.C.

970 { di.resize(0); }

◆ edge_map()

void libMesh::FE< Dim, T >::edge_map ( const Elem elem,
const Elem edge,
const unsigned int  e,
const std::vector< Point > &  reference_edge_points,
std::vector< Point > &  reference_points 
)
virtualinherited

Computes the reference space quadrature points on the side of an element based on the edge quadrature points.

Definition at line 403 of file fe_boundary.C.

408 {
409  // We're calculating mappings - we need at least first order info
410  this->calculate_phi = true;
411  this->determine_calculations();
412 
413  unsigned int edge_p_level = elem->p_level();
414 
415  if (edge->type() != last_edge ||
416  (elem->runtime_topology() &&
417  this->_elem != elem) ||
418  edge_p_level != this->_elem_p_level ||
419  !this->shapes_on_quadrature)
420  {
421  // Set the element type
422  this->_elem = elem;
423  this->_elem_type = elem->type();
424  this->_elem_p_level = edge_p_level;
425  this->_p_level = this->_add_p_level_in_reinit * edge_p_level;
426 
427  // Set the last_edge
428  last_edge = edge->type();
429 
430  // Initialize the edge shape functions
431  this->_fe_map->template init_edge_shape_functions<Dim>(reference_edge_points, edge);
432  }
433  else
434  this->_elem = elem;
435 
436  const unsigned int n_points =
437  cast_int<unsigned int>(reference_edge_points.size());
438  reference_points.resize(n_points);
439  for (unsigned int i = 0; i < n_points; i++)
440  reference_points[i].zero();
441 
442  std::vector<Point> refspace_nodes;
443  this->get_refspace_nodes(elem->type(), refspace_nodes);
444 
445  const std::vector<std::vector<Real>> & psi_map = this->_fe_map->get_psi();
446 
447  // sum over the nodes
448  for (auto i : index_range(psi_map))
449  {
450  const Point & edge_node = refspace_nodes[elem->local_edge_node(e,i)];
451  for (unsigned int p=0; p<n_points; p++)
452  reference_points[p].add_scaled (edge_node, psi_map[i][p]);
453  }
454 }
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:757
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:768
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:751
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735
const Number zero
.
Definition: libmesh.h:304
static void get_refspace_nodes(const ElemType t, std::vector< Point > &nodes)
Definition: fe_abstract.C:400
virtual_for_inffe void determine_calculations()
Determine which values are to be calculated, for both the FE itself and for the FEMap.
Definition: fe_base.C:913
bool _add_p_level_in_reinit
Whether to add p-refinement levels in init/reinit methods.
Definition: fe_abstract.h:787
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ edge_reinit() [1/2]

void libMesh::FE< Dim, T >::edge_reinit ( const Elem elem,
const unsigned int  edge,
const Real  tolerance = TOLERANCE,
const std::vector< Point > *const  pts = nullptr,
const std::vector< Real > *const  weights = nullptr 
)
overridevirtualinherited

Reinitializes all the physical element-dependent data based on the edge.

The tolerance parameter is passed to the involved call to inverse_map(). By default the shape functions and associated data are computed at the quadrature points specified by the quadrature rule qrule, but may be any points specified on the reference side element specified in the optional argument pts.

Implements libMesh::FEAbstract.

Definition at line 243 of file fe_boundary.C.

248 {
249  libmesh_assert(elem);
250  libmesh_assert (this->qrule != nullptr || pts != nullptr);
251  // We don't do this for 1D elements!
252  libmesh_assert_not_equal_to (Dim, 1);
253 
254  // We're (possibly re-) calculating now! Time to determine what.
255  // FIXME - we currently just assume that we're using JxW and calling
256  // edge_map later.
257  this->_fe_map->add_calculations();
258  this->_fe_map->get_JxW();
259  this->_fe_map->get_xyz();
260  this->determine_calculations();
261 
262  // Build the side of interest
263  const std::unique_ptr<const Elem> edge(elem->build_edge_ptr(e));
264 
265  // Initialize the shape functions at the user-specified
266  // points
267  if (pts != nullptr)
268  {
269  // The shape functions do not correspond to the qrule
270  this->shapes_on_quadrature = false;
271 
272  // Initialize the edge shape functions
273  this->_fe_map->template init_edge_shape_functions<Dim> (*pts, edge.get());
274 
275  // Compute the Jacobian*Weight on the face for integration
276  if (weights != nullptr)
277  {
278  this->_fe_map->compute_edge_map (Dim, *weights, edge.get());
279  }
280  else
281  {
282  std::vector<Real> dummy_weights (pts->size(), 1.);
283  this->_fe_map->compute_edge_map (Dim, dummy_weights, edge.get());
284  }
285  }
286  // If there are no user specified points, we use the
287  // quadrature rule
288  else
289  {
290  // initialize quadrature rule
291  this->qrule->init(*edge, elem->p_level());
292 
293  if (this->qrule->shapes_need_reinit())
294  this->shapes_on_quadrature = false;
295 
296  // We might not need to reinitialize the shape functions
297  if ((this->get_type() != elem->type()) ||
298  (elem->runtime_topology() &&
299  this->_elem != elem) ||
300  (edge->type() != last_edge) ||
301  this->shapes_need_reinit() ||
302  !this->shapes_on_quadrature)
303  {
304  // Set the element
305  this->_elem = elem;
306  this->_elem_type = elem->type();
307 
308  // Set the last_edge
309  last_edge = edge->type();
310 
311  // Initialize the edge shape functions
312  this->_fe_map->template init_edge_shape_functions<Dim> (this->qrule->get_points(), edge.get());
313  }
314  else
315  this->_elem = elem;
316 
317  // Compute the Jacobian*Weight on the face for integration
318  this->_fe_map->compute_edge_map (Dim, this->qrule->get_weights(), edge.get());
319 
320  // The shape functions correspond to the qrule
321  this->shapes_on_quadrature = true;
322  }
323 
324  // make a copy of the Jacobian for integration
325  const std::vector<Real> JxW_int(this->_fe_map->get_JxW());
326 
327  // Find where the integration points are located on the
328  // full element.
329  const std::vector<Point> * ref_qp;
330  if (pts != nullptr)
331  ref_qp = pts;
332  else
333  ref_qp = & this->qrule->get_points();
334 
335  std::vector<Point> qp;
336  this->edge_map(elem, edge.get(), e, *ref_qp, qp);
337 
338  // compute the shape function and derivative values
339  // at the points qp
340  this->reinit (elem, &qp);
341 
342  // copy back old data
343  this->_fe_map->get_JxW() = JxW_int;
344 }
virtual bool shapes_need_reinit()
Definition: quadrature.h:286
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:768
ElemType get_type() const
Definition: fe_abstract.h:509
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735
const std::vector< Real > & get_weights() const
Definition: quadrature.h:168
virtual bool shapes_need_reinit() const override
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
This is at the core of this class.
Definition: fe.C:197
libmesh_assert(ctx)
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:762
virtual_for_inffe void determine_calculations()
Determine which values are to be calculated, for both the FE itself and for the FEMap.
Definition: fe_base.C:913
virtual void edge_map(const Elem *elem, const Elem *edge, const unsigned int e, const std::vector< Point > &reference_edge_points, std::vector< Point > &reference_points)
Computes the reference space quadrature points on the side of an element based on the edge quadrature...
Definition: fe_boundary.C:403
const std::vector< Point > & get_points() const
Definition: quadrature.h:156
virtual void init(const Elem &e, unsigned int p_level=invalid_uint)
Initializes the data structures for a quadrature rule for the element e.
Definition: quadrature.C:65
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ edge_reinit() [2/2]

void libMesh::FE< 2, SUBDIVISION >::edge_reinit ( Elem const *  ,
unsigned int  ,
Real  ,
const std::vector< Point > *  const,
const std::vector< Real > *  const 
)
virtualinherited

Reinitializes all the physical element-dependent data based on the edge of the element elem.

The tolerance parameter is passed to the involved call to inverse_map(). By default the element data are computed at the quadrature points specified by the quadrature rule qrule, but any set of points on the reference edge element may be specified in the optional argument pts.

Implements libMesh::FEAbstract.

Definition at line 927 of file fe_subdivision_2D.C.

932 {
933  libmesh_not_implemented();
934 }

◆ enable_print_counter_info()

void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

Definition at line 94 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

95 {
96  _enable_print_counter = true;
97  return;
98 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ get_continuity() [1/82]

FEContinuity libMesh::FE< 0, SCALAR >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 95 of file fe_scalar.C.

◆ get_continuity() [2/82]

FEContinuity libMesh::FE< 1, SCALAR >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 96 of file fe_scalar.C.

◆ get_continuity() [3/82]

FEContinuity libMesh::FE< 2, SCALAR >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 97 of file fe_scalar.C.

◆ get_continuity() [4/82]

FEContinuity libMesh::FE< 3, SCALAR >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 98 of file fe_scalar.C.

◆ get_continuity() [5/82]

FEContinuity libMesh::FE< 0, RATIONAL_BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 160 of file fe_rational.C.

160 { return C_ZERO; }

◆ get_continuity() [6/82]

FEContinuity libMesh::FE< 1, RATIONAL_BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 161 of file fe_rational.C.

161 { return C_ZERO; }

◆ get_continuity() [7/82]

FEContinuity libMesh::FE< 2, RATIONAL_BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 162 of file fe_rational.C.

162 { return C_ZERO; }

◆ get_continuity() [8/82]

FEContinuity libMesh::FE< 3, RATIONAL_BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 163 of file fe_rational.C.

163 { return C_ZERO; }

◆ get_continuity() [9/82]

FEContinuity libMesh::FE< 0, L2_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 188 of file fe_l2_hierarchic.C.

◆ get_continuity() [10/82]

FEContinuity libMesh::FE< 1, L2_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 189 of file fe_l2_hierarchic.C.

◆ get_continuity() [11/82]

FEContinuity libMesh::FE< 2, L2_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 190 of file fe_l2_hierarchic.C.

◆ get_continuity() [12/82]

FEContinuity libMesh::FE< 3, L2_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 191 of file fe_l2_hierarchic.C.

◆ get_continuity() [13/82]

FEContinuity libMesh::FE< 0, L2_LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 256 of file fe_l2_lagrange.C.

◆ get_continuity() [14/82]

FEContinuity libMesh::FE< 1, L2_LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 257 of file fe_l2_lagrange.C.

◆ get_continuity() [15/82]

FEContinuity libMesh::FE< 2, L2_LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 258 of file fe_l2_lagrange.C.

◆ get_continuity() [16/82]

FEContinuity libMesh::FE< 3, L2_LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 259 of file fe_l2_lagrange.C.

◆ get_continuity() [17/82]

FEContinuity libMesh::FE< 1, CLOUGH >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 271 of file fe_clough.C.

271 { return C_ONE; }

◆ get_continuity() [18/82]

FEContinuity libMesh::FE< 2, CLOUGH >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 272 of file fe_clough.C.

272 { return C_ONE; }

◆ get_continuity() [19/82]

FEContinuity libMesh::FE< 3, CLOUGH >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 273 of file fe_clough.C.

273 { return C_ONE; }

◆ get_continuity() [20/82]

FEContinuity libMesh::FE< 0, SIDE_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 299 of file fe_side_hierarchic.C.

◆ get_continuity() [21/82]

FEContinuity libMesh::FE< 1, SIDE_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 300 of file fe_side_hierarchic.C.

◆ get_continuity() [22/82]

FEContinuity libMesh::FE< 2, SIDE_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 301 of file fe_side_hierarchic.C.

◆ get_continuity() [23/82]

FEContinuity libMesh::FE< 3, SIDE_HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 302 of file fe_side_hierarchic.C.

◆ get_continuity() [24/82]

FEContinuity libMesh::FE< 1, HERMITE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 313 of file fe_hermite.C.

313 { return C_ONE; }

◆ get_continuity() [25/82]

FEContinuity libMesh::FE< 2, HERMITE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 314 of file fe_hermite.C.

314 { return C_ONE; }

◆ get_continuity() [26/82]

FEContinuity libMesh::FE< 3, HERMITE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 315 of file fe_hermite.C.

315 { return C_ONE; }

◆ get_continuity() [27/82]

FEContinuity libMesh::FE< 0, XYZ >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 406 of file fe_xyz.C.

◆ get_continuity() [28/82]

FEContinuity libMesh::FE< 1, XYZ >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 407 of file fe_xyz.C.

◆ get_continuity() [29/82]

FEContinuity libMesh::FE< 0, NEDELEC_ONE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 408 of file fe_nedelec_one.C.

408 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [30/82]

FEContinuity libMesh::FE< 2, XYZ >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 408 of file fe_xyz.C.

◆ get_continuity() [31/82]

FEContinuity libMesh::FE< 1, NEDELEC_ONE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 409 of file fe_nedelec_one.C.

409 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [32/82]

FEContinuity libMesh::FE< 3, XYZ >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 409 of file fe_xyz.C.

◆ get_continuity() [33/82]

FEContinuity libMesh::FE< 2, NEDELEC_ONE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 410 of file fe_nedelec_one.C.

410 { return H_CURL; }

◆ get_continuity() [34/82]

FEContinuity libMesh::FE< 3, NEDELEC_ONE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 411 of file fe_nedelec_one.C.

411 { return H_CURL; }

◆ get_continuity() [35/82]

FEContinuity libMesh::FE< 0, MONOMIAL >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 421 of file fe_monomial.C.

◆ get_continuity() [36/82]

FEContinuity libMesh::FE< 1, MONOMIAL >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 422 of file fe_monomial.C.

◆ get_continuity() [37/82]

FEContinuity libMesh::FE< 1, BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 423 of file fe_bernstein.C.

423 { return C_ZERO; }

◆ get_continuity() [38/82]

FEContinuity libMesh::FE< 2, MONOMIAL >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 423 of file fe_monomial.C.

◆ get_continuity() [39/82]

FEContinuity libMesh::FE< 2, BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 424 of file fe_bernstein.C.

424 { return C_ZERO; }

◆ get_continuity() [40/82]

FEContinuity libMesh::FE< 3, MONOMIAL >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 424 of file fe_monomial.C.

◆ get_continuity() [41/82]

FEContinuity libMesh::FE< 3, BERNSTEIN >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 425 of file fe_bernstein.C.

425 { return C_ZERO; }

◆ get_continuity() [42/82]

FEContinuity libMesh::FE< 0, RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 456 of file fe_raviart.C.

456 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [43/82]

FEContinuity libMesh::FE< 1, RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 457 of file fe_raviart.C.

457 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [44/82]

FEContinuity libMesh::FE< 2, RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 458 of file fe_raviart.C.

458 { return H_DIV; }

◆ get_continuity() [45/82]

FEContinuity libMesh::FE< 3, RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 459 of file fe_raviart.C.

459 { return H_DIV; }

◆ get_continuity() [46/82]

FEContinuity libMesh::FE< 0, L2_RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 462 of file fe_raviart.C.

462 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [47/82]

FEContinuity libMesh::FE< 1, L2_RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 463 of file fe_raviart.C.

463 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [48/82]

FEContinuity libMesh::FE< 2, L2_RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 464 of file fe_raviart.C.

◆ get_continuity() [49/82]

FEContinuity libMesh::FE< 3, L2_RAVIART_THOMAS >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 465 of file fe_raviart.C.

◆ get_continuity() [50/82]

FEContinuity libMesh::FE< 1, HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 477 of file fe_hierarchic.C.

477 { return C_ZERO; }

◆ get_continuity() [51/82]

FEContinuity libMesh::FE< 2, HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 478 of file fe_hierarchic.C.

478 { return C_ZERO; }

◆ get_continuity() [52/82]

FEContinuity libMesh::FE< 3, HIERARCHIC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 479 of file fe_hierarchic.C.

479 { return C_ZERO; }

◆ get_continuity() [53/82]

virtual FEContinuity libMesh::FE< Dim, T >::get_continuity ( ) const
overridevirtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

◆ get_continuity() [54/82]

FEContinuity libMesh::FE< 0, MONOMIAL_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 697 of file fe_monomial_vec.C.

698 {
699  return DISCONTINUOUS;
700 }

◆ get_continuity() [55/82]

FEContinuity libMesh::FE< 1, MONOMIAL_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 703 of file fe_monomial_vec.C.

704 {
705  return DISCONTINUOUS;
706 }

◆ get_continuity() [56/82]

FEContinuity libMesh::FE< 2, MONOMIAL_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 709 of file fe_monomial_vec.C.

710 {
711  return DISCONTINUOUS;
712 }

◆ get_continuity() [57/82]

FEContinuity libMesh::FE< 3, MONOMIAL_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 715 of file fe_monomial_vec.C.

716 {
717  return DISCONTINUOUS;
718 }

◆ get_continuity() [58/82]

FEContinuity libMesh::FE< 0, HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 773 of file fe_hierarchic_vec.C.

773 { return C_ZERO; }

◆ get_continuity() [59/82]

FEContinuity libMesh::FE< 1, HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 774 of file fe_hierarchic_vec.C.

774 { return C_ZERO; }

◆ get_continuity() [60/82]

FEContinuity libMesh::FE< 2, HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 775 of file fe_hierarchic_vec.C.

775 { return C_ZERO; }

◆ get_continuity() [61/82]

FEContinuity libMesh::FE< 3, HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 776 of file fe_hierarchic_vec.C.

776 { return C_ZERO; }

◆ get_continuity() [62/82]

FEContinuity libMesh::FE< 0, L2_HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 779 of file fe_hierarchic_vec.C.

◆ get_continuity() [63/82]

FEContinuity libMesh::FE< 1, L2_HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 780 of file fe_hierarchic_vec.C.

◆ get_continuity() [64/82]

FEContinuity libMesh::FE< 2, L2_HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 781 of file fe_hierarchic_vec.C.

◆ get_continuity() [65/82]

FEContinuity libMesh::FE< 3, L2_HIERARCHIC_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 782 of file fe_hierarchic_vec.C.

◆ get_continuity() [66/82]

FEContinuity libMesh::FE< 2, SUBDIVISION >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 974 of file fe_subdivision_2D.C.

974 { return C_ONE; }

◆ get_continuity() [67/82]

FEContinuity libMesh::FE< 0, LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1114 of file fe_lagrange.C.

1114 { return C_ZERO; }

◆ get_continuity() [68/82]

FEContinuity libMesh::FE< 1, LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1115 of file fe_lagrange.C.

1115 { return C_ZERO; }

◆ get_continuity() [69/82]

FEContinuity libMesh::FE< 2, LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1116 of file fe_lagrange.C.

1116 { return C_ZERO; }

◆ get_continuity() [70/82]

FEContinuity libMesh::FE< 3, LAGRANGE >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1117 of file fe_lagrange.C.

1117 { return C_ZERO; }

◆ get_continuity() [71/82]

FEContinuity libMesh::FE< 0, SZABAB >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1325 of file fe_szabab.C.

1325 { return C_ZERO; }

◆ get_continuity() [72/82]

FEContinuity libMesh::FE< 1, SZABAB >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1326 of file fe_szabab.C.

1326 { return C_ZERO; }

◆ get_continuity() [73/82]

FEContinuity libMesh::FE< 2, SZABAB >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1327 of file fe_szabab.C.

1327 { return C_ZERO; }

◆ get_continuity() [74/82]

FEContinuity libMesh::FE< 3, SZABAB >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1328 of file fe_szabab.C.

1328 { return C_ZERO; }

◆ get_continuity() [75/82]

FEContinuity libMesh::FE< 0, LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1342 of file fe_lagrange_vec.C.

1342 { return C_ZERO; }

◆ get_continuity() [76/82]

FEContinuity libMesh::FE< 1, LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1343 of file fe_lagrange_vec.C.

1343 { return C_ZERO; }

◆ get_continuity() [77/82]

FEContinuity libMesh::FE< 2, LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1344 of file fe_lagrange_vec.C.

1344 { return C_ZERO; }

◆ get_continuity() [78/82]

FEContinuity libMesh::FE< 3, LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1345 of file fe_lagrange_vec.C.

1345 { return C_ZERO; }

◆ get_continuity() [79/82]

FEContinuity libMesh::FE< 0, L2_LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1348 of file fe_lagrange_vec.C.

◆ get_continuity() [80/82]

FEContinuity libMesh::FE< 1, L2_LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1349 of file fe_lagrange_vec.C.

◆ get_continuity() [81/82]

FEContinuity libMesh::FE< 2, L2_LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1350 of file fe_lagrange_vec.C.

◆ get_continuity() [82/82]

FEContinuity libMesh::FE< 3, L2_LAGRANGE_VEC >::get_continuity ( ) const
virtualinherited
Returns
The continuity level of the finite element.

Implements libMesh::FEAbstract.

Definition at line 1351 of file fe_lagrange_vec.C.

◆ get_curl_phi()

virtual_for_inffe const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_curl_phi ( ) const
inlineinherited
Returns
The curl of the shape function at the quadrature points.

Definition at line 252 of file fe_base.h.

References libMesh::FEAbstract::calculate_curl_phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::curl_phi, and libMesh::libmesh_assert().

254  calculate_curl_phi = calculate_dphiref = true; return curl_phi; }
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:712
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > curl_phi
Shape function curl values.
Definition: fe_base.h:631
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_curvatures()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_curvatures ( ) const
inlineinherited
Returns
The curvatures for use in face integration.

Definition at line 467 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

468  { calculate_map = true; return this->_fe_map->get_curvatures();}
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_d2phi()

const std::vector<std::vector<OutputTensor> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phi ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 319 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phi, and libMesh::libmesh_assert().

321  calculate_d2phi = calculate_dphiref = true; return d2phi; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
std::vector< std::vector< OutputTensor > > d2phi
Shape function second derivative values.
Definition: fe_base.h:674
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phideta2()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phideta2 ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points, in reference coordinates

Definition at line 403 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phideta2, and libMesh::libmesh_assert().

405  calculate_d2phi = calculate_dphiref = true; return d2phideta2; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phideta2
Shape function second derivatives in the eta direction.
Definition: fe_base.h:695
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidetadzeta()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidetadzeta ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points, in reference coordinates

Definition at line 411 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidetadzeta, and libMesh::libmesh_assert().

bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidetadzeta
Shape function second derivatives in the eta-zeta direction.
Definition: fe_base.h:700
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidx2()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidx2 ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 331 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidx2, and libMesh::libmesh_assert().

333  calculate_d2phi = calculate_dphiref = true; return d2phidx2; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidx2
Shape function second derivatives in the x direction.
Definition: fe_base.h:710
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidxdy()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxdy ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 339 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidxdy, and libMesh::libmesh_assert().

341  calculate_d2phi = calculate_dphiref = true; return d2phidxdy; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidxdy
Shape function second derivatives in the x-y direction.
Definition: fe_base.h:715
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidxdz()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxdz ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 347 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidxdz, and libMesh::libmesh_assert().

349  calculate_d2phi = calculate_dphiref = true; return d2phidxdz; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
std::vector< std::vector< OutputShape > > d2phidxdz
Shape function second derivatives in the x-z direction.
Definition: fe_base.h:720
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidxi2()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxi2 ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points, in reference coordinates

Definition at line 379 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidxi2, and libMesh::libmesh_assert().

381  calculate_d2phi = calculate_dphiref = true; return d2phidxi2; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
std::vector< std::vector< OutputShape > > d2phidxi2
Shape function second derivatives in the xi direction.
Definition: fe_base.h:680

◆ get_d2phidxideta()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxideta ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points, in reference coordinates

Definition at line 387 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidxideta, and libMesh::libmesh_assert().

bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidxideta
Shape function second derivatives in the xi-eta direction.
Definition: fe_base.h:685
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidxidzeta()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxidzeta ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points, in reference coordinates

Definition at line 395 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidxidzeta, and libMesh::libmesh_assert().

bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidxidzeta
Shape function second derivatives in the xi-zeta direction.
Definition: fe_base.h:690
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidy2()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidy2 ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 355 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidy2, and libMesh::libmesh_assert().

357  calculate_d2phi = calculate_dphiref = true; return d2phidy2; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidy2
Shape function second derivatives in the y direction.
Definition: fe_base.h:725
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidydz()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidydz ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 363 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidydz, and libMesh::libmesh_assert().

365  calculate_d2phi = calculate_dphiref = true; return d2phidydz; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > d2phidydz
Shape function second derivatives in the y-z direction.
Definition: fe_base.h:730
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_d2phidz2()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidz2 ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points.

Definition at line 371 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidz2, and libMesh::libmesh_assert().

373  calculate_d2phi = calculate_dphiref = true; return d2phidz2; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
std::vector< std::vector< OutputShape > > d2phidz2
Shape function second derivatives in the z direction.
Definition: fe_base.h:735

◆ get_d2phidzeta2()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidzeta2 ( ) const
inlineinherited
Returns
The shape function second derivatives at the quadrature points, in reference coordinates

Definition at line 419 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::d2phidzeta2, and libMesh::libmesh_assert().

421  calculate_d2phi = calculate_dphiref = true; return d2phidzeta2; }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
std::vector< std::vector< OutputShape > > d2phidzeta2
Shape function second derivatives in the zeta direction.
Definition: fe_base.h:705

◆ get_d2xyzdeta2()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_d2xyzdeta2 ( ) const
inlineinherited
Returns
The second partial derivatives in eta.

Definition at line 343 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

344  { calculate_map = true; return this->_fe_map->get_d2xyzdeta2(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_d2xyzdetadzeta()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_d2xyzdetadzeta ( ) const
inlineinherited
Returns
The second partial derivatives in eta-zeta.

Definition at line 371 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

372  { calculate_map = true; return this->_fe_map->get_d2xyzdetadzeta(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_d2xyzdxi2()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_d2xyzdxi2 ( ) const
inlineinherited
Returns
The second partial derivatives in xi.

Definition at line 336 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

337  { calculate_map = true; return this->_fe_map->get_d2xyzdxi2(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_d2xyzdxideta()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_d2xyzdxideta ( ) const
inlineinherited
Returns
The second partial derivatives in xi-eta.

Definition at line 357 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

358  { calculate_map = true; return this->_fe_map->get_d2xyzdxideta(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_d2xyzdxidzeta()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_d2xyzdxidzeta ( ) const
inlineinherited
Returns
The second partial derivatives in xi-zeta.

Definition at line 364 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

365  { calculate_map = true; return this->_fe_map->get_d2xyzdxidzeta(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_d2xyzdzeta2()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_d2xyzdzeta2 ( ) const
inlineinherited
Returns
The second partial derivatives in zeta.

Definition at line 350 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

351  { calculate_map = true; return this->_fe_map->get_d2xyzdzeta2(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_detadx()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_detadx ( ) const
inlineinherited
Returns
The deta/dx entry in the transformation matrix from physical to local coordinates.

Definition at line 405 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

406  { calculate_map = true; return this->_fe_map->get_detadx(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_detady()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_detady ( ) const
inlineinherited
Returns
The deta/dy entry in the transformation matrix from physical to local coordinates.

Definition at line 413 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

414  { calculate_map = true; return this->_fe_map->get_detady(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_detadz()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_detadz ( ) const
inlineinherited
Returns
The deta/dz entry in the transformation matrix from physical to local coordinates.

Definition at line 421 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

422  { calculate_map = true; return this->_fe_map->get_detadz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dim()

unsigned int libMesh::FEAbstract::get_dim ( ) const
inlineinherited
Returns
the dimension of this FE

Definition at line 258 of file fe_abstract.h.

References libMesh::FEAbstract::dim.

259  { return dim; }
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:660

◆ get_div_phi()

virtual_for_inffe const std::vector<std::vector<OutputDivergence> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_div_phi ( ) const
inlineinherited
Returns
The divergence of the shape function at the quadrature points.

Definition at line 261 of file fe_base.h.

References libMesh::FEAbstract::calculate_div_phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::div_phi, and libMesh::libmesh_assert().

263  calculate_div_phi = calculate_dphiref = true; return div_phi; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
bool calculate_div_phi
Should we calculate shape function divergences?
Definition: fe_abstract.h:717
libmesh_assert(ctx)
std::vector< std::vector< OutputDivergence > > div_phi
Shape function divergence values.
Definition: fe_base.h:636
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_dphase()

const std::vector<OutputGradient>& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphase ( ) const
inlineinherited
Returns
The global first derivative of the phase term which is used in infinite elements, evaluated at the quadrature points.

In case of the general finite element class FE this field is initialized to all zero, so that the variational formulation for an infinite element produces correct element matrices for a mesh using both finite and infinite elements.

Definition at line 437 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::dphase.

438  { return dphase; }
std::vector< OutputGradient > dphase
Used for certain infinite element families: the first derivatives of the phase term in global coordin...
Definition: fe_base.h:753

◆ get_dphi()

const std::vector<std::vector<OutputGradient> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphi ( ) const
inlineinherited
Returns
The shape function derivatives at the quadrature points.

Definition at line 230 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphi, and libMesh::libmesh_assert().

232  calculate_dphi = calculate_dphiref = true; return dphi; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696

◆ get_dphi_over_decay()

virtual const std::vector<std::vector<OutputGradient> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphi_over_decay ( ) const
inlinevirtualinherited
Returns
the gradient of the shape function (see get_dphi()), but in case of InfFE, weighted with 1/decay.

In contrast to the shape function, its gradient stays finite when divided by the decay function.

Definition at line 511 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_dphi().

512  { return get_dphi();}
const std::vector< std::vector< OutputGradient > > & get_dphi() const
Definition: fe_base.h:230

◆ get_dphi_over_decayxR()

virtual const std::vector<std::vector<OutputGradient> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphi_over_decayxR ( ) const
inlinevirtualinherited
Returns
the gradient of the shape function (see get_dphi()), but in case of InfFE, weighted with r/decay. See get_phi_over_decayxR() for details.

Definition at line 501 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_dphi().

502  { return get_dphi();}
const std::vector< std::vector< OutputGradient > > & get_dphi() const
Definition: fe_base.h:230

◆ get_dphideta()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphideta ( ) const
inlineinherited
Returns
The shape function eta-derivative at the quadrature points.

Definition at line 301 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphideta, and libMesh::libmesh_assert().

303  calculate_dphiref = true; return dphideta; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
std::vector< std::vector< OutputShape > > dphideta
Shape function derivatives in the eta direction.
Definition: fe_base.h:646

◆ get_dphidx()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidx ( ) const
inlineinherited
Returns
The shape function x-derivative at the quadrature points.

Definition at line 269 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphidx, and libMesh::libmesh_assert().

271  calculate_dphi = calculate_dphiref = true; return dphidx; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > dphidx
Shape function derivatives in the x direction.
Definition: fe_base.h:656
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696

◆ get_dphidxi()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidxi ( ) const
inlineinherited
Returns
The shape function xi-derivative at the quadrature points.

Definition at line 293 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphidxi, and libMesh::libmesh_assert().

295  calculate_dphiref = true; return dphidxi; }
std::vector< std::vector< OutputShape > > dphidxi
Shape function derivatives in the xi direction.
Definition: fe_base.h:641
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_dphidy()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidy ( ) const
inlineinherited
Returns
The shape function y-derivative at the quadrature points.

Definition at line 277 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphidy, and libMesh::libmesh_assert().

279  calculate_dphi = calculate_dphiref = true; return dphidy; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputShape > > dphidy
Shape function derivatives in the y direction.
Definition: fe_base.h:661
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696

◆ get_dphidz()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidz ( ) const
inlineinherited
Returns
The shape function z-derivative at the quadrature points.

Definition at line 285 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphidz, and libMesh::libmesh_assert().

287  calculate_dphi = calculate_dphiref = true; return dphidz; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
std::vector< std::vector< OutputShape > > dphidz
Shape function derivatives in the z direction.
Definition: fe_base.h:666

◆ get_dphidzeta()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidzeta ( ) const
inlineinherited
Returns
The shape function zeta-derivative at the quadrature points.

Definition at line 309 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dphidzeta, and libMesh::libmesh_assert().

311  calculate_dphiref = true; return dphidzeta; }
std::vector< std::vector< OutputShape > > dphidzeta
Shape function derivatives in the zeta direction.
Definition: fe_base.h:651
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722

◆ get_dual_coeff()

const DenseMatrix<Real>& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_coeff ( ) const
inlineinherited

Definition at line 244 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::dual_coeff.

245  { return dual_coeff; }
DenseMatrix< Real > dual_coeff
Coefficient matrix for the dual basis.
Definition: fe_base.h:626

◆ get_dual_d2phi()

const std::vector<std::vector<OutputTensor> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_d2phi ( ) const
inlineinherited

Definition at line 323 of file fe_base.h.

References libMesh::FEAbstract::calculate_d2phi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculate_dual, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dual_d2phi, and libMesh::libmesh_assert().

bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputTensor > > dual_d2phi
Definition: fe_base.h:675
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:671

◆ get_dual_dphi()

const std::vector<std::vector<OutputGradient> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_dphi ( ) const
inlineinherited

Definition at line 234 of file fe_base.h.

References libMesh::FEAbstract::calculate_dphi, libMesh::FEAbstract::calculate_dphiref, libMesh::FEAbstract::calculate_dual, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dual_dphi, and libMesh::libmesh_assert().

bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
std::vector< std::vector< OutputGradient > > dual_dphi
Definition: fe_base.h:621
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:722
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:671

◆ get_dual_phi()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_phi ( ) const
inlineinherited

Definition at line 211 of file fe_base.h.

References libMesh::FEAbstract::calculate_dual, libMesh::FEAbstract::calculations_started, libMesh::FEGenericBase< OutputType >::dual_phi, libMesh::libmesh_assert(), and libMesh::FEGenericBase< OutputType >::request_phi().

212  {
214  calculate_dual = true;
215  // Dual phi computation relies on primal phi computation
216  this->request_phi();
217  return dual_phi;
218  }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
virtual void request_phi() const override
Definition: fe_base.h:220
std::vector< std::vector< OutputShape > > dual_phi
Definition: fe_base.h:615
libmesh_assert(ctx)
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:671

◆ get_dxidx()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_dxidx ( ) const
inlineinherited
Returns
The dxi/dx entry in the transformation matrix from physical to local coordinates.

Definition at line 381 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

382  { calculate_map = true; return this->_fe_map->get_dxidx(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dxidy()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_dxidy ( ) const
inlineinherited
Returns
The dxi/dy entry in the transformation matrix from physical to local coordinates.

Definition at line 389 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

390  { calculate_map = true; return this->_fe_map->get_dxidy(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dxidz()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_dxidz ( ) const
inlineinherited
Returns
The dxi/dz entry in the transformation matrix from physical to local coordinates.

Definition at line 397 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

398  { calculate_map = true; return this->_fe_map->get_dxidz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dxyzdeta()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_dxyzdeta ( ) const
inlineinherited
Returns
The element tangents in eta-direction at the quadrature points.

Definition at line 319 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

320  { calculate_map = true; return this->_fe_map->get_dxyzdeta(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dxyzdxi()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_dxyzdxi ( ) const
inlineinherited
Returns
The element tangents in xi-direction at the quadrature points.

Definition at line 311 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

312  { calculate_map = true; return this->_fe_map->get_dxyzdxi(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dxyzdzeta()

virtual_for_inffe const std::vector<RealGradient>& libMesh::FEAbstract::get_dxyzdzeta ( ) const
inlineinherited
Returns
The element tangents in zeta-direction at the quadrature points.

Definition at line 327 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map.

328  { return _fe_map->get_dxyzdzeta(); }
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dzetadx()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_dzetadx ( ) const
inlineinherited
Returns
The dzeta/dx entry in the transformation matrix from physical to local coordinates.

Definition at line 429 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

430  { calculate_map = true; return this->_fe_map->get_dzetadx(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dzetady()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_dzetady ( ) const
inlineinherited
Returns
The dzeta/dy entry in the transformation matrix from physical to local coordinates.

Definition at line 437 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

438  { calculate_map = true; return this->_fe_map->get_dzetady(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_dzetadz()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_dzetadz ( ) const
inlineinherited
Returns
The dzeta/dz entry in the transformation matrix from physical to local coordinates.

Definition at line 445 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

446  { calculate_map = true; return this->_fe_map->get_dzetadz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_elem()

const Elem* libMesh::FEAbstract::get_elem ( ) const
inlineinherited
Returns
The element that the current shape functions have been calculated for. Useful in determining when shape functions must be recomputed.

Definition at line 496 of file fe_abstract.h.

References libMesh::FEAbstract::_elem.

496 { return _elem; }
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ get_family()

FEFamily libMesh::FEAbstract::get_family ( ) const
inlineinherited
Returns
The finite element family of this element.

Definition at line 547 of file fe_abstract.h.

References libMesh::FEType::family, and libMesh::FEAbstract::fe_type.

547 { return fe_type.family; }
FEFamily family
The type of finite element.
Definition: fe_type.h:221
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730

◆ get_fe_map() [1/2]

const FEMap& libMesh::FEAbstract::get_fe_map ( ) const
inlineinherited

◆ get_fe_map() [2/2]

FEMap& libMesh::FEAbstract::get_fe_map ( )
inlineinherited

Definition at line 555 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map.

555 { return *_fe_map.get(); }
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_fe_type()

FEType libMesh::FEAbstract::get_fe_type ( ) const
inlineinherited

◆ get_info()

std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().

Referenced by libMesh::ReferenceCounter::print_info().

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (const auto & [name, cd] : _counts)
59  oss << "| " << name << " reference count information:\n"
60  << "| Creations: " << cd.first << '\n'
61  << "| Destructions: " << cd.second << '\n';
62 
63  oss << " ---------------------------------------------------------------------------- \n";
64 
65  return oss.str();
66 
67 #else
68 
69  return "";
70 
71 #endif
72 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
static Counts _counts
Actually holds the data.

◆ get_JxW()

virtual_for_inffe const std::vector<Real>& libMesh::FEAbstract::get_JxW ( ) const
inlineinherited
Returns
The element Jacobian times the quadrature weight for each quadrature point.

For InfFE, use get_JxWxdecay_sq() instead.

Definition at line 303 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

Referenced by libMesh::ExactSolution::_compute_error(), assembly_with_dg_fem_context(), libMesh::DiscontinuityMeasure::boundary_side_integration(), libMesh::KellyErrorEstimator::boundary_side_integration(), compute_enriched_soln(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubProjector::construct_projection(), ElasticitySystem::element_time_derivative(), HeatSystem::element_time_derivative(), libMesh::ExactErrorEstimator::find_squared_element_error(), libMesh::FEAbstract::get_JxWxdecay_sq(), CoupledSystemQoI::init_context(), NavierSystem::init_context(), SolidSystem::init_context(), PoissonSystem::init_context(), LaplaceSystem::init_context(), CurlCurlSystem::init_context(), ElasticitySystem::init_context(), CoupledSystem::init_context(), libMesh::DiscontinuityMeasure::init_context(), HeatSystem::init_context(), ElasticityRBConstruction::init_context(), libMesh::FEMSystem::init_context(), libMesh::LaplacianErrorEstimator::internal_side_integration(), libMesh::DiscontinuityMeasure::internal_side_integration(), libMesh::KellyErrorEstimator::internal_side_integration(), ElasticitySystem::mass_residual(), libMesh::FEMPhysics::mass_residual(), Integrate::operator()(), SolidSystem::side_time_derivative(), ElasticitySystem::side_time_derivative(), and libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::SubFunctor().

304  { calculate_map = true; return this->_fe_map->get_JxW(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_JxWxdecay_sq()

virtual const std::vector<Real>& libMesh::FEAbstract::get_JxWxdecay_sq ( ) const
inlinevirtualinherited

This function is the variant of get_JxW() for InfFE.

Since J diverges there, a respectize decay-function must be applied to obtain well-defined quantities.

For FE, it is equivalent to the common get_JxW().

Reimplemented in libMesh::InfFE< Dim, T_radial, T_map >.

Definition at line 292 of file fe_abstract.h.

References libMesh::FEAbstract::get_JxW().

Referenced by assemble_func(), and assemble_SchroedingerEquation().

293  { return get_JxW();}
virtual_for_inffe const std::vector< Real > & get_JxW() const
Definition: fe_abstract.h:303

◆ get_normals()

virtual_for_inffe const std::vector<Point>& libMesh::FEAbstract::get_normals ( ) const
inlineinherited

◆ get_nothing()

void libMesh::FEAbstract::get_nothing ( ) const
inlineinherited
Returns
nothing, but lets the FE know you're explicitly prerequesting calculations. This is useful when you only want the FE for n_quadrature_points, n_dofs_on_side, or other methods that don't require shape function calculations, but you don't want libMesh "backwards compatibility" mode to assume you've made no prerequests and need to calculate everything.

Definition at line 269 of file fe_abstract.h.

References libMesh::FEAbstract::calculate_nothing.

Referenced by libMesh::ExactSolution::_compute_error(), CoupledSystemQoI::init_context(), NavierSystem::init_context(), ElasticitySystem::init_context(), CoupledSystem::init_context(), libMesh::ParsedFEMFunction< T >::init_context(), libMesh::WrappedFunctor< Output >::init_context(), HeatSystem::init_context(), and Integrate::operator()().

270  { calculate_nothing = true; }
bool calculate_nothing
Are we potentially deliberately calculating nothing?
Definition: fe_abstract.h:681

◆ get_order()

Order libMesh::FEAbstract::get_order ( ) const
inlineinherited
Returns
The approximation order of the finite element.

Definition at line 525 of file fe_abstract.h.

References libMesh::FEAbstract::_p_level, libMesh::FEAbstract::fe_type, and libMesh::FEType::order.

526  { return fe_type.order + _p_level; }
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:757
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730

◆ get_p_level()

unsigned int libMesh::FEAbstract::get_p_level ( ) const
inlineinherited
Returns
The p refinement level that the current shape functions have been calculated for.

Definition at line 515 of file fe_abstract.h.

References libMesh::FEAbstract::_p_level.

515 { return _p_level; }
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:757

◆ get_phi()

const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_phi ( ) const
inlineinherited
Returns
The shape function values at the quadrature points on the element.

Definition at line 207 of file fe_base.h.

References libMesh::FEAbstract::calculate_phi, libMesh::FEAbstract::calculations_started, libMesh::libmesh_assert(), and libMesh::FEGenericBase< OutputType >::phi.

209  calculate_phi = true; return phi; }
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
libmesh_assert(ctx)

◆ get_phi_over_decayxR()

virtual const std::vector<std::vector<OutputShape> >& libMesh::FEGenericBase< FEOutputType< T >::type >::get_phi_over_decayxR ( ) const
inlinevirtualinherited
Returns
The shape function phi (for FE) and phi weighted by r/decay for InfFE.

To compensate for the decay function applied to the Jacobian (see get_JxWxdecay_sq), the wave function phi should be divided by this function.

The factor r must be compensated for by the Sobolev weight. (i.e. by using get_Sobolev_weightxR_sq())

Definition at line 493 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_phi().

494  { return get_phi();}
const std::vector< std::vector< OutputShape > > & get_phi() const
Definition: fe_base.h:207

◆ get_refspace_nodes()

void libMesh::FEAbstract::get_refspace_nodes ( const ElemType  t,
std::vector< Point > &  nodes 
)
staticinherited
Returns
The reference space coordinates of nodes based on the element type.

Definition at line 400 of file fe_abstract.C.

References libMesh::EDGE2, libMesh::EDGE3, libMesh::EDGE4, libMesh::Utility::enum_to_string(), libMesh::HEX20, libMesh::HEX27, libMesh::HEX8, libMesh::invalid_uint, n_nodes, libMesh::NODEELEM, libMesh::PRISM15, libMesh::PRISM18, libMesh::PRISM20, libMesh::PRISM21, libMesh::PRISM6, libMesh::PYRAMID13, libMesh::PYRAMID14, libMesh::PYRAMID18, libMesh::PYRAMID5, libMesh::QUAD4, libMesh::QUAD8, libMesh::QUAD9, libMesh::QUADSHELL4, libMesh::QUADSHELL8, libMesh::QUADSHELL9, libMesh::Real, libMesh::TET10, libMesh::TET14, libMesh::TET4, libMesh::TRI3, libMesh::TRI6, libMesh::TRI7, libMesh::TRISHELL3, and libMesh::Elem::type_to_n_nodes_map.

Referenced by libMesh::LIBMESH_DEFAULT_VECTORIZED_FE().

401 {
402  const unsigned int n_nodes = Elem::type_to_n_nodes_map[itemType];
403  if (n_nodes == invalid_uint)
404  libmesh_error_msg("Number of nodes is not well-defined for " <<
405  Utility::enum_to_string(itemType));
406 
407  nodes.resize(n_nodes);
408  switch(itemType)
409  {
410  case NODEELEM:
411  {
412  nodes[0] = Point (0.,0.,0.);
413  return;
414  }
415  case EDGE3:
416  {
417  nodes[2] = Point (0.,0.,0.);
418  libmesh_fallthrough();
419  }
420  case EDGE2:
421  {
422  nodes[0] = Point (-1.,0.,0.);
423  nodes[1] = Point (1.,0.,0.);
424  return;
425  }
426  case EDGE4: // not nested with EDGE3
427  {
428  nodes[0] = Point (-1.,0.,0.);
429  nodes[1] = Point (1.,0.,0.);
430  nodes[2] = Point (-1./3.,0.,0.);
431  nodes[3] - Point (1./3.,0.,0.);
432  return;
433  }
434  case TRI7:
435  {
436  nodes[6] = Point (1./3.,1./3.,0.);
437  libmesh_fallthrough();
438  }
439  case TRI6:
440  {
441  nodes[3] = Point (.5,0.,0.);
442  nodes[4] = Point (.5,.5,0.);
443  nodes[5] = Point (0.,.5,0.);
444  libmesh_fallthrough();
445  }
446  case TRI3:
447  case TRISHELL3:
448  {
449  nodes[0] = Point (0.,0.,0.);
450  nodes[1] = Point (1.,0.,0.);
451  nodes[2] = Point (0.,1.,0.);
452  return;
453  }
454  case QUAD9:
455  case QUADSHELL9:
456  {
457  nodes[8] = Point (0.,0.,0.);
458  libmesh_fallthrough();
459  }
460  case QUAD8:
461  case QUADSHELL8:
462  {
463  nodes[4] = Point (0.,-1.,0.);
464  nodes[5] = Point (1.,0.,0.);
465  nodes[6] = Point (0.,1.,0.);
466  nodes[7] = Point (-1.,0.,0.);
467  libmesh_fallthrough();
468  }
469  case QUAD4:
470  case QUADSHELL4:
471  {
472  nodes[0] = Point (-1.,-1.,0.);
473  nodes[1] = Point (1.,-1.,0.);
474  nodes[2] = Point (1.,1.,0.);
475  nodes[3] = Point (-1.,1.,0.);
476  return;
477  }
478  case TET14:
479  {
480  nodes[10] = Point (1/Real(3),1/Real(3),0.);
481  nodes[11] = Point (1/Real(3),0.,1/Real(3));
482  nodes[12] = Point (1/Real(3),1/Real(3),1/Real(3));
483  nodes[13] = Point (0.,1/Real(3),1/Real(3));
484  libmesh_fallthrough();
485  }
486  case TET10:
487  {
488  nodes[4] = Point (.5,0.,0.);
489  nodes[5] = Point (.5,.5,0.);
490  nodes[6] = Point (0.,.5,0.);
491  nodes[7] = Point (0.,0.,.5);
492  nodes[8] = Point (.5,0.,.5);
493  nodes[9] = Point (0.,.5,.5);
494  libmesh_fallthrough();
495  }
496  case TET4:
497  {
498  nodes[0] = Point (0.,0.,0.);
499  nodes[1] = Point (1.,0.,0.);
500  nodes[2] = Point (0.,1.,0.);
501  nodes[3] = Point (0.,0.,1.);
502  return;
503  }
504  case HEX27:
505  {
506  nodes[20] = Point (0.,0.,-1.);
507  nodes[21] = Point (0.,-1.,0.);
508  nodes[22] = Point (1.,0.,0.);
509  nodes[23] = Point (0.,1.,0.);
510  nodes[24] = Point (-1.,0.,0.);
511  nodes[25] = Point (0.,0.,1.);
512  nodes[26] = Point (0.,0.,0.);
513  libmesh_fallthrough();
514  }
515  case HEX20:
516  {
517  nodes[8] = Point (0.,-1.,-1.);
518  nodes[9] = Point (1.,0.,-1.);
519  nodes[10] = Point (0.,1.,-1.);
520  nodes[11] = Point (-1.,0.,-1.);
521  nodes[12] = Point (-1.,-1.,0.);
522  nodes[13] = Point (1.,-1.,0.);
523  nodes[14] = Point (1.,1.,0.);
524  nodes[15] = Point (-1.,1.,0.);
525  nodes[16] = Point (0.,-1.,1.);
526  nodes[17] = Point (1.,0.,1.);
527  nodes[18] = Point (0.,1.,1.);
528  nodes[19] = Point (-1.,0.,1.);
529  libmesh_fallthrough();
530  }
531  case HEX8:
532  {
533  nodes[0] = Point (-1.,-1.,-1.);
534  nodes[1] = Point (1.,-1.,-1.);
535  nodes[2] = Point (1.,1.,-1.);
536  nodes[3] = Point (-1.,1.,-1.);
537  nodes[4] = Point (-1.,-1.,1.);
538  nodes[5] = Point (1.,-1.,1.);
539  nodes[6] = Point (1.,1.,1.);
540  nodes[7] = Point (-1.,1.,1.);
541  return;
542  }
543  case PRISM21:
544  {
545  nodes[20] = Point (1/Real(3),1/Real(3),0);
546  libmesh_fallthrough();
547  }
548  case PRISM20:
549  {
550  nodes[18] = Point (1/Real(3),1/Real(3),-1);
551  nodes[19] = Point (1/Real(3),1/Real(3),1);
552  libmesh_fallthrough();
553  }
554  case PRISM18:
555  {
556  nodes[15] = Point (.5,0.,0.);
557  nodes[16] = Point (.5,.5,0.);
558  nodes[17] = Point (0.,.5,0.);
559  libmesh_fallthrough();
560  }
561  case PRISM15:
562  {
563  nodes[6] = Point (.5,0.,-1.);
564  nodes[7] = Point (.5,.5,-1.);
565  nodes[8] = Point (0.,.5,-1.);
566  nodes[9] = Point (0.,0.,0.);
567  nodes[10] = Point (1.,0.,0.);
568  nodes[11] = Point (0.,1.,0.);
569  nodes[12] = Point (.5,0.,1.);
570  nodes[13] = Point (.5,.5,1.);
571  nodes[14] = Point (0.,.5,1.);
572  libmesh_fallthrough();
573  }
574  case PRISM6:
575  {
576  nodes[0] = Point (0.,0.,-1.);
577  nodes[1] = Point (1.,0.,-1.);
578  nodes[2] = Point (0.,1.,-1.);
579  nodes[3] = Point (0.,0.,1.);
580  nodes[4] = Point (1.,0.,1.);
581  nodes[5] = Point (0.,1.,1.);
582  return;
583  }
584  case PYRAMID18:
585  {
586  // triangle centers
587  nodes[14] = Point (-2/Real(3),0.,1/Real(3));
588  nodes[15] = Point (0.,2/Real(3),1/Real(3));
589  nodes[16] = Point (2/Real(3),0.,1/Real(3));
590  nodes[17] = Point (0.,-2/Real(3),1/Real(3));
591 
592  libmesh_fallthrough();
593  }
594  case PYRAMID14:
595  {
596  // base center
597  nodes[13] = Point (0.,0.,0.);
598 
599  libmesh_fallthrough();
600  }
601  case PYRAMID13:
602  {
603  // base midedge
604  nodes[5] = Point (0.,-1.,0.);
605  nodes[6] = Point (1.,0.,0.);
606  nodes[7] = Point (0.,1.,0.);
607  nodes[8] = Point (-1,0.,0.);
608 
609  // lateral midedge
610  nodes[9] = Point (-.5,-.5,.5);
611  nodes[10] = Point (.5,-.5,.5);
612  nodes[11] = Point (.5,.5,.5);
613  nodes[12] = Point (-.5,.5,.5);
614 
615  libmesh_fallthrough();
616  }
617  case PYRAMID5:
618  {
619  // base corners
620  nodes[0] = Point (-1.,-1.,0.);
621  nodes[1] = Point (1.,-1.,0.);
622  nodes[2] = Point (1.,1.,0.);
623  nodes[3] = Point (-1.,1.,0.);
624  // apex
625  nodes[4] = Point (0.,0.,1.);
626  return;
627  }
628 
629  default:
630  libmesh_error_msg("ERROR: Unknown element type " << Utility::enum_to_string(itemType));
631  }
632 }
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
Definition: libmesh.h:310
static const unsigned int type_to_n_nodes_map[INVALID_ELEM]
This array maps the integer representation of the ElemType enum to the number of nodes in the element...
Definition: elem.h:650
const dof_id_type n_nodes
Definition: tecplot_io.C:67
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ get_Sobolev_dweight()

virtual const std::vector<RealGradient>& libMesh::FEGenericBase< FEOutputType< T >::type >::get_Sobolev_dweight ( ) const
inlinevirtualinherited
Returns
The first global derivative of the multiplicative weight at each quadrature point. See get_Sobolev_weight() for details. In case of FE initialized to all zero.

Definition at line 461 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::dweight.

462  { return dweight; }
std::vector< RealGradient > dweight
Used for certain infinite element families: the global derivative of the additional radial weight ...
Definition: fe_base.h:760

◆ get_Sobolev_dweightxR_sq()

virtual const std::vector<RealGradient>& libMesh::FEGenericBase< FEOutputType< T >::type >::get_Sobolev_dweightxR_sq ( ) const
inlinevirtualinherited
Returns
The first global derivative of the multiplicative weight (see dget_Sobolev_weight) but weighted with the square of the radial coordinate.

In finite elements, this is 0.

Definition at line 480 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::dweight.

481  { return dweight; }
std::vector< RealGradient > dweight
Used for certain infinite element families: the global derivative of the additional radial weight ...
Definition: fe_base.h:760

◆ get_Sobolev_weight()

virtual const std::vector<Real>& libMesh::FEGenericBase< FEOutputType< T >::type >::get_Sobolev_weight ( ) const
inlinevirtualinherited
Returns
The multiplicative weight at each quadrature point. This weight is used for certain infinite element weak formulations, so that weighted Sobolev spaces are used for the trial function space. This renders the variational form easily computable.

In case of the general finite element class FE this field is initialized to all ones, so that the variational formulation for an infinite element produces correct element matrices for a mesh using both finite and infinite elements.

Definition at line 453 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::weight.

454  { return weight; }
std::vector< Real > weight
Used for certain infinite element families: the additional radial weight in local coordinates...
Definition: fe_base.h:767

◆ get_Sobolev_weightxR_sq()

virtual const std::vector<Real>& libMesh::FEGenericBase< FEOutputType< T >::type >::get_Sobolev_weightxR_sq ( ) const
inlinevirtualinherited
Returns
The multiplicative weight (see get_Sobolev_weight) but weighted with the radial coordinate square.

In finite elements, this gives just 1, similar to get_Sobolev_Weight()

Definition at line 470 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::weight.

471  { return weight; }
std::vector< Real > weight
Used for certain infinite element families: the additional radial weight in local coordinates...
Definition: fe_base.h:767

◆ get_tangents()

virtual_for_inffe const std::vector<std::vector<Point> >& libMesh::FEAbstract::get_tangents ( ) const
inlineinherited
Returns
The tangent vectors for face integration.

Definition at line 452 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

453  { calculate_map = true; return this->_fe_map->get_tangents(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ get_type()

ElemType libMesh::FEAbstract::get_type ( ) const
inlineinherited
Returns
The element type that the current shape functions have been calculated for, or INVALID_ELEM if no such element exists. Useful in determining when shape functions must be recomputed.

This is generally redundant with _elem->type(), but must be cached separately for cases (such as internal FE use in QComposite) where _elem might be a dangling pointer to a temporary.

Definition at line 509 of file fe_abstract.h.

References libMesh::FEAbstract::_elem_type.

509 { return _elem_type; }
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735

◆ get_xyz()

virtual_for_inffe const std::vector<Point>& libMesh::FEAbstract::get_xyz ( ) const
inlineinherited
Returns
The xyz spatial locations of the quadrature points on the element.

It is overwritten by infinite elements since there FEMap cannot be used to compute xyz.

Definition at line 280 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map, and libMesh::FEAbstract::calculate_map.

Referenced by libMesh::ExactSolution::_compute_error(), assemble_SchroedingerEquation(), libMesh::DiscontinuityMeasure::boundary_side_integration(), libMesh::KellyErrorEstimator::boundary_side_integration(), compute_enriched_soln(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubProjector::construct_projection(), HeatSystem::element_time_derivative(), libMesh::JumpErrorEstimator::estimate_error(), libMesh::ParsedFEMFunction< T >::eval_args(), libMesh::ExactErrorEstimator::find_squared_element_error(), CoupledSystemQoI::init_context(), NavierSystem::init_context(), SolidSystem::init_context(), PoissonSystem::init_context(), CurlCurlSystem::init_context(), CoupledSystem::init_context(), libMesh::ParsedFEMFunction< T >::init_context(), HeatSystem::init_context(), libMesh::DGFEMContext::neighbor_side_fe_reinit(), Integrate::operator()(), SolidSystem::side_time_derivative(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::SubFunctor(), SlitMeshRefinedSystemTest::testRestart(), and SlitMeshRefinedSystemTest::testSystem().

281  { calculate_map = true; return this->_fe_map->get_xyz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:686
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ increment_constructor_count()

void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

Definition at line 183 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

184 {
185  libmesh_try
186  {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189  p.first++;
190  }
191  libmesh_catch (...)
192  {
193  auto stream = libMesh::err.get();
194  stream->exceptions(stream->goodbit); // stream must not throw
195  libMesh::err << "Encountered unrecoverable error while calling "
196  << "ReferenceCounter::increment_constructor_count() "
197  << "for a(n) " << name << " object." << std::endl;
198  std::terminate();
199  }
200 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ increment_destructor_count()

void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

Definition at line 207 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

208 {
209  libmesh_try
210  {
211  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
212  std::pair<unsigned int, unsigned int> & p = _counts[name];
213  p.second++;
214  }
215  libmesh_catch (...)
216  {
217  auto stream = libMesh::err.get();
218  stream->exceptions(stream->goodbit); // stream must not throw
219  libMesh::err << "Encountered unrecoverable error while calling "
220  << "ReferenceCounter::increment_destructor_count() "
221  << "for a(n) " << name << " object." << std::endl;
222  std::terminate();
223  }
224 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ init_base_shape_functions()

void libMesh::FE< Dim, T >::init_base_shape_functions ( const std::vector< Point > &  qp,
const Elem e 
)
overrideprotectedvirtualinherited

Initialize the data fields for the base of an an infinite element.

Implements libMesh::FEGenericBase< FEOutputType< T >::type >.

Definition at line 778 of file fe.C.

780 {
781  this->_elem = e;
782  this->_elem_type = e->type();
783  this->_fe_map->template init_reference_to_physical_map<Dim>(qp, e);
784  init_shape_functions(qp, e);
785 }
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735
virtual void init_shape_functions(const std::vector< Point > &qp, const Elem *e)
Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc.
Definition: fe.C:441
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654
virtual ElemType type() const =0
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ init_dual_shape_functions()

void libMesh::FE< Dim, T >::init_dual_shape_functions ( unsigned int  n_shapes,
unsigned int  n_qp 
)
protectedinherited

Init dual_phi and potentially dual_dphi, dual_d2phi.

Definition at line 411 of file fe.C.

412 {
413  if (!this->calculate_dual)
414  return;
415 
416  libmesh_assert_msg(this->calculate_phi,
417  "dual shape function calculation relies on "
418  "primal shape functions being calculated");
419 
420  this->dual_phi.resize(n_shapes);
421  if (this->calculate_dphi)
422  this->dual_dphi.resize(n_shapes);
423 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
424  if (this->calculate_d2phi)
425  this->dual_d2phi.resize(n_shapes);
426 #endif
427 
428  for (auto i : index_range(this->dual_phi))
429  {
430  this->dual_phi[i].resize(n_qp);
431  if (this->calculate_dphi)
432  this->dual_dphi[i].resize(n_qp);
433 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
434  if (this->calculate_d2phi)
435  this->dual_d2phi[i].resize(n_qp);
436 #endif
437  }
438 }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:702
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
std::vector< std::vector< OutputTensor > > dual_d2phi
Definition: fe_base.h:675
std::vector< std::vector< OutputGradient > > dual_dphi
Definition: fe_base.h:621
std::vector< std::vector< OutputShape > > dual_phi
Definition: fe_base.h:615
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:696
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:671
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ init_shape_functions()

void libMesh::FESubdivision::init_shape_functions ( const std::vector< Point > &  qp,
const Elem elem 
)
overridevirtual

Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc.

for the current element. These data will be computed at the points qp, which are generally (but need not be) the quadrature points.

Reimplemented from libMesh::FE< 2, SUBDIVISION >.

Definition at line 410 of file fe_subdivision_2D.C.

References libMesh::libmesh_assert(), libMesh::Utility::pow(), libMesh::Real, libMesh::DenseMatrix< T >::right_multiply(), libMesh::TRI3SUBDIVISION, and libMesh::Elem::type().

412 {
413  libmesh_assert(elem);
414  libmesh_assert_equal_to(elem->type(), TRI3SUBDIVISION);
415  const Tri3Subdivision * sd_elem = static_cast<const Tri3Subdivision *>(elem);
416 
417  LOG_SCOPE("init_shape_functions()", "FESubdivision");
418 
419  calculations_started = true;
420 
421  const unsigned int valence = sd_elem->get_ordered_valence(0);
422  const unsigned int n_qp = cast_int<unsigned int>(qp.size());
423  const unsigned int n_approx_shape_functions = valence + 6;
424 
425  // resize the vectors to hold current data
426  phi.resize (n_approx_shape_functions);
427  dphi.resize (n_approx_shape_functions);
428  dphidxi.resize (n_approx_shape_functions);
429  dphideta.resize (n_approx_shape_functions);
430 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
431  d2phi.resize (n_approx_shape_functions);
432  d2phidxi2.resize (n_approx_shape_functions);
433  d2phidxideta.resize(n_approx_shape_functions);
434  d2phideta2.resize (n_approx_shape_functions);
435 #endif
436 
437  for (unsigned int i = 0; i < n_approx_shape_functions; ++i)
438  {
439  phi[i].resize (n_qp);
440  dphi[i].resize (n_qp);
441  dphidxi[i].resize (n_qp);
442  dphideta[i].resize (n_qp);
443 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
444  d2phi[i].resize (n_qp);
445  d2phidxi2[i].resize (n_qp);
446  d2phidxideta[i].resize(n_qp);
447  d2phideta2[i].resize (n_qp);
448 #endif
449  }
450 
451  // Renumbering of the shape functions
452  static const unsigned int cvi[12] = {3,6,2,0,1,4,7,10,9,5,11,8};
453 
454  if (valence == 6) // This means that all vertices are regular, i.e. we have 12 shape functions
455  {
456  for (unsigned int i = 0; i < n_approx_shape_functions; ++i)
457  {
458  for (unsigned int p = 0; p < n_qp; ++p)
459  {
460  phi[i][p] = FE<2,SUBDIVISION>::shape (elem, fe_type.order, cvi[i], qp[p]);
461  dphidxi[i][p] = FE<2,SUBDIVISION>::shape_deriv (elem, fe_type.order, cvi[i], 0, qp[p]);
462  dphideta[i][p] = FE<2,SUBDIVISION>::shape_deriv (elem, fe_type.order, cvi[i], 1, qp[p]);
463  dphi[i][p](0) = dphidxi[i][p];
464  dphi[i][p](1) = dphideta[i][p];
465 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
466  d2phidxi2[i][p] = FE<2,SUBDIVISION>::shape_second_deriv(elem, fe_type.order, cvi[i], 0, qp[p]);
467  d2phidxideta[i][p] = FE<2,SUBDIVISION>::shape_second_deriv(elem, fe_type.order, cvi[i], 1, qp[p]);
468  d2phideta2[i][p] = FE<2,SUBDIVISION>::shape_second_deriv(elem, fe_type.order, cvi[i], 2, qp[p]);
469  d2phi[i][p](0,0) = d2phidxi2[i][p];
470  d2phi[i][p](0,1) = d2phi[i][p](1,0) = d2phidxideta[i][p];
471  d2phi[i][p](1,1) = d2phideta2[i][p];
472 #endif
473  }
474  }
475  }
476  else // vertex 0 is irregular by construction of the mesh
477  {
478  static const Real eps = 1e-10;
479 
480  // temporary values
481  std::vector<Real> tphi(12);
482  std::vector<Real> tdphidxi(12);
483  std::vector<Real> tdphideta(12);
484 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
485  std::vector<Real> td2phidxi2(12);
486  std::vector<Real> td2phidxideta(12);
487  std::vector<Real> td2phideta2(12);
488 #endif
489 
490  for (unsigned int p = 0; p < n_qp; ++p)
491  {
492  // evaluate the number of the required subdivisions
493  Real v = qp[p](0);
494  Real w = qp[p](1);
495  Real u = 1 - v - w;
496  Real min = 0, max = 0.5;
497  int n = 0;
498  while (!(u > min-eps && u < max+eps))
499  {
500  ++n;
501  min = max;
502  max += std::pow((Real)(2), -n-1);
503  }
504 
505  // transform u, v and w according to the number of subdivisions required.
506  const Real pow2 = std::pow((Real)(2), n);
507  v *= pow2;
508  w *= pow2;
509  u = 1 - v - w;
510  libmesh_assert_less(u, 0.5 + eps);
511  libmesh_assert_greater(u, -eps);
512 
513  // find out in which subdivided patch we are and setup the "selection matrix" P and the transformation Jacobian
514  // (see Int. J. Numer. Meth. Engng. 2000; 47:2039-2072, Appendix A.2.)
515  const int k = n+1;
516  Real jfac; // the additional factor per derivative order
517  DenseMatrix<Real> P(12, valence+12);
518  if (v > 0.5 - eps)
519  {
520  v = 2*v - 1;
521  w = 2*w;
522  jfac = std::pow((Real)(2), k);
523  P( 0,2 ) = 1;
524  P( 1,0 ) = 1;
525  P( 2,valence+3) = 1;
526  P( 3,1 ) = 1;
527  P( 4,valence ) = 1;
528  P( 5,valence+8) = 1;
529  P( 6,valence+2) = 1;
530  P( 7,valence+1) = 1;
531  P( 8,valence+4) = 1;
532  P( 9,valence+7) = 1;
533  P(10,valence+6) = 1;
534  P(11,valence+9) = 1;
535  }
536  else if (w > 0.5 - eps)
537  {
538  v = 2*v;
539  w = 2*w - 1;
540  jfac = std::pow((Real)(2), k);
541  P( 0,0 ) = 1;
542  P( 1,valence- 1) = 1;
543  P( 2,1 ) = 1;
544  P( 3,valence ) = 1;
545  P( 4,valence+ 5) = 1;
546  P( 5,valence+ 2) = 1;
547  P( 6,valence+ 1) = 1;
548  P( 7,valence+ 4) = 1;
549  P( 8,valence+11) = 1;
550  P( 9,valence+ 6) = 1;
551  P(10,valence+ 9) = 1;
552  P(11,valence+10) = 1;
553  }
554  else
555  {
556  v = 1 - 2*v;
557  w = 1 - 2*w;
558  jfac = std::pow((Real)(-2), k);
559  P( 0,valence+9) = 1;
560  P( 1,valence+6) = 1;
561  P( 2,valence+4) = 1;
562  P( 3,valence+1) = 1;
563  P( 4,valence+2) = 1;
564  P( 5,valence+5) = 1;
565  P( 6,valence ) = 1;
566  P( 7,1 ) = 1;
567  P( 8,valence+3) = 1;
568  P( 9,valence-1) = 1;
569  P(10,0 ) = 1;
570  P(11,2 ) = 1;
571  }
572 
573  u = 1 - v - w;
574  libmesh_error_msg_if((u > 1 + eps) || (u < -eps), "SUBDIVISION irregular patch: u is outside valid range!");
575 
577  init_subdivision_matrix(A, valence);
578 
579  // compute P*A^k
580  if (k > 1)
581  {
582  DenseMatrix<Real> Acopy(A);
583  for (int e = 1; e < k; ++e)
584  A.right_multiply(Acopy);
585  }
586  P.right_multiply(A);
587 
588  const Point transformed_p(v,w);
589 
590  for (unsigned int i = 0; i < 12; ++i)
591  {
592  tphi[i] = FE<2,SUBDIVISION>::shape (elem, fe_type.order, i, transformed_p);
593  tdphidxi[i] = FE<2,SUBDIVISION>::shape_deriv (elem, fe_type.order, i, 0, transformed_p);
594  tdphideta[i] = FE<2,SUBDIVISION>::shape_deriv (elem, fe_type.order, i, 1, transformed_p);
595 
596 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
597  td2phidxi2[i] = FE<2,SUBDIVISION>::shape_second_deriv(elem, fe_type.order, i, 0, transformed_p);
598  td2phidxideta[i] = FE<2,SUBDIVISION>::shape_second_deriv(elem, fe_type.order, i, 1, transformed_p);
599  td2phideta2[i] = FE<2,SUBDIVISION>::shape_second_deriv(elem, fe_type.order, i, 2, transformed_p);
600 #endif
601  }
602 
603  // Finally, we can compute the irregular shape functions as the product of P
604  // and the regular shape functions:
605  Real sum1, sum2, sum3, sum4, sum5, sum6;
606  for (unsigned int j = 0; j < n_approx_shape_functions; ++j)
607  {
608  sum1 = sum2 = sum3 = sum4 = sum5 = sum6 = 0;
609  for (unsigned int i = 0; i < 12; ++i)
610  {
611  sum1 += P(i,j) * tphi[i];
612  sum2 += P(i,j) * tdphidxi[i];
613  sum3 += P(i,j) * tdphideta[i];
614 
615 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
616  sum4 += P(i,j) * td2phidxi2[i];
617  sum5 += P(i,j) * td2phidxideta[i];
618  sum6 += P(i,j) * td2phideta2[i];
619 #endif
620  }
621  phi[j][p] = sum1;
622  dphidxi[j][p] = sum2 * jfac;
623  dphideta[j][p] = sum3 * jfac;
624  dphi[j][p](0) = dphidxi[j][p];
625  dphi[j][p](1) = dphideta[j][p];
626 
627 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
628  d2phidxi2[j][p] = sum4 * jfac * jfac;
629  d2phidxideta[j][p] = sum5 * jfac * jfac;
630  d2phideta2[j][p] = sum6 * jfac * jfac;
631  d2phi[j][p](0,0) = d2phidxi2[j][p];
632  d2phi[j][p](0,1) = d2phi[j][p](1,0) = d2phidxideta[j][p];
633  d2phi[j][p](1,1) = d2phideta2[j][p];
634 #endif
635  }
636  } // end quadrature loop
637  } // end irregular vertex
638 
639  // Let the FEMap use the same initialized shape functions
640  this->_fe_map->get_phi_map() = phi;
641  this->_fe_map->get_dphidxi_map() = dphidxi;
642  this->_fe_map->get_dphideta_map() = dphideta;
643 
644 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
645  this->_fe_map->get_d2phidxi2_map() = d2phidxi2;
646  this->_fe_map->get_d2phideta2_map() = d2phideta2;
647  this->_fe_map->get_d2phidxideta_map() = d2phidxideta;
648 #endif
649 
650  if (this->calculate_dual)
651  this->init_dual_shape_functions(n_approx_shape_functions, n_qp);
652 }
std::vector< std::vector< OutputTensor > > d2phi
Shape function second derivative values.
Definition: fe_base.h:674
std::vector< std::vector< OutputShape > > dphidxi
Shape function derivatives in the xi direction.
Definition: fe_base.h:641
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:666
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
static void init_subdivision_matrix(DenseMatrix< Real > &A, unsigned int valence)
Builds the subdivision matrix A for the Loop scheme.
void init_dual_shape_functions(unsigned int n_shapes, unsigned int n_qp)
Init dual_phi and potentially dual_dphi, dual_d2phi.
Definition: fe.C:411
std::vector< std::vector< OutputShape > > d2phidxideta
Shape function second derivatives in the xi-eta direction.
Definition: fe_base.h:685
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
T pow(const T &x)
Definition: utility.h:328
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
std::vector< std::vector< OutputShape > > d2phideta2
Shape function second derivatives in the eta direction.
Definition: fe_base.h:695
libmesh_assert(ctx)
template class LIBMESH_EXPORT DenseMatrix< Real >
Definition: dense_matrix.C:35
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< std::vector< OutputShape > > d2phidxi2
Shape function second derivatives in the xi direction.
Definition: fe_base.h:680
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:671
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
std::vector< std::vector< OutputShape > > dphideta
Shape function derivatives in the eta direction.
Definition: fe_base.h:646

◆ init_subdivision_matrix()

void libMesh::FESubdivision::init_subdivision_matrix ( DenseMatrix< Real > &  A,
unsigned int  valence 
)
static

Builds the subdivision matrix A for the Loop scheme.

The size depends on the element's valence.

Definition at line 46 of file fe_subdivision_2D.C.

References libMesh::DenseMatrix< T >::resize().

48 {
49  A.resize(valence + 12, valence + 12);
50 
51  // A = (S11 0; S21 S22), see Cirak et al.,
52  // Int. J. Numer. Meth. Engng. 2000; 47:2039-2072, Appendix A.2.
53 
54  // First, set the static S21 part
55  A(valence+ 1,0 ) = 0.125;
56  A(valence+ 1,1 ) = 0.375;
57  A(valence+ 1,valence ) = 0.375;
58  A(valence+ 2,0 ) = 0.0625;
59  A(valence+ 2,1 ) = 0.625;
60  A(valence+ 2,2 ) = 0.0625;
61  A(valence+ 2,valence ) = 0.0625;
62  A(valence+ 3,0 ) = 0.125;
63  A(valence+ 3,1 ) = 0.375;
64  A(valence+ 3,2 ) = 0.375;
65  A(valence+ 4,0 ) = 0.0625;
66  A(valence+ 4,1 ) = 0.0625;
67  A(valence+ 4,valence-1) = 0.0625;
68  A(valence+ 4,valence ) = 0.625;
69  A(valence+ 5,0 ) = 0.125;
70  A(valence+ 5,valence-1) = 0.375;
71  A(valence+ 5,valence ) = 0.375;
72  A(valence+ 6,1 ) = 0.375;
73  A(valence+ 6,valence ) = 0.125;
74  A(valence+ 7,1 ) = 0.375;
75  A(valence+ 8,1 ) = 0.375;
76  A(valence+ 8,2 ) = 0.125;
77  A(valence+ 9,1 ) = 0.125;
78  A(valence+ 9,valence ) = 0.375;
79  A(valence+10,valence ) = 0.375;
80  A(valence+11,valence-1) = 0.125;
81  A(valence+11,valence ) = 0.375;
82 
83  // Next, set the static S22 part
84  A(valence+ 1,valence+1) = 0.125;
85  A(valence+ 2,valence+1) = 0.0625;
86  A(valence+ 2,valence+2) = 0.0625;
87  A(valence+ 2,valence+3) = 0.0625;
88  A(valence+ 3,valence+3) = 0.125;
89  A(valence+ 4,valence+1) = 0.0625;
90  A(valence+ 4,valence+4) = 0.0625;
91  A(valence+ 4,valence+5) = 0.0625;
92  A(valence+ 5,valence+5) = 0.125;
93  A(valence+ 6,valence+1) = 0.375;
94  A(valence+ 6,valence+2) = 0.125;
95  A(valence+ 7,valence+1) = 0.125;
96  A(valence+ 7,valence+2) = 0.375;
97  A(valence+ 7,valence+3) = 0.125;
98  A(valence+ 8,valence+2) = 0.125;
99  A(valence+ 8,valence+3) = 0.375;
100  A(valence+ 9,valence+1) = 0.375;
101  A(valence+ 9,valence+4) = 0.125;
102  A(valence+10,valence+1) = 0.125;
103  A(valence+10,valence+4) = 0.375;
104  A(valence+10,valence+5) = 0.125;
105  A(valence+11,valence+4) = 0.125;
106  A(valence+11,valence+5) = 0.375;
107 
108  // Last, set the S11 part: first row
109  std::vector<Real> weights;
110  loop_subdivision_mask(weights, valence);
111  for (unsigned int i = 0; i <= valence; ++i)
112  A(0,i) = weights[i];
113 
114  // second row
115  A(1,0) = 0.375;
116  A(1,1) = 0.375;
117  A(1,2) = 0.125;
118  A(1,valence) = 0.125;
119 
120  // third to second-to-last rows
121  for (unsigned int i = 2; i < valence; ++i)
122  {
123  A(i,0 ) = 0.375;
124  A(i,i-1) = 0.125;
125  A(i,i ) = 0.375;
126  A(i,i+1) = 0.125;
127  }
128 
129  // last row
130  A(valence,0) = 0.375;
131  A(valence,1) = 0.125;
132  A(valence,valence-1) = 0.125;
133  A(valence,valence ) = 0.375;
134 }
static void loop_subdivision_mask(std::vector< Real > &weights, const unsigned int valence)
Fills the vector weights with the weight coefficients of the Loop subdivision mask for evaluating the...
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
Definition: dense_matrix.h:895

◆ inverse_map() [1/4]

static Point libMesh::FE< Dim, T >::inverse_map ( const Elem elem,
const Point p,
const Real  tolerance = TOLERANCE,
const bool  secure = true 
)
inlinestaticinherited

Definition at line 534 of file fe.h.

538  {
539  // libmesh_deprecated(); // soon
540  return FEMap::inverse_map(Dim, elem, p, tolerance, secure, secure);
541  }

◆ inverse_map() [2/4]

static void libMesh::FE< Dim, T >::inverse_map ( const Elem elem,
const std::vector< Point > &  physical_points,
std::vector< Point > &  reference_points,
const Real  tolerance = TOLERANCE,
const bool  secure = true 
)
inlinestaticinherited

Definition at line 543 of file fe.h.

548  {
549  // libmesh_deprecated(); // soon
550  FEMap::inverse_map(Dim, elem, physical_points, reference_points,
551  tolerance, secure, secure);
552  }

◆ inverse_map() [3/4]

Point libMesh::FE< 2, SUBDIVISION >::inverse_map ( const Elem ,
const Point ,
const Real  ,
const bool   
)
inherited

Definition at line 937 of file fe_subdivision_2D.C.

941 {
942  libmesh_not_implemented();
943 }

◆ inverse_map() [4/4]

void libMesh::FE< 2, SUBDIVISION >::inverse_map ( const Elem ,
const std::vector< Point > &  ,
std::vector< Point > &  ,
Real  ,
bool   
)
inherited

Definition at line 946 of file fe_subdivision_2D.C.

951 {
952  libmesh_not_implemented();
953 }

◆ is_hierarchic() [1/86]

bool libMesh::FE< 0, SCALAR >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 101 of file fe_scalar.C.

101 { return false; }

◆ is_hierarchic() [2/86]

bool libMesh::FE< 1, SCALAR >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 102 of file fe_scalar.C.

102 { return false; }

◆ is_hierarchic() [3/86]

bool libMesh::FE< 2, SCALAR >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 103 of file fe_scalar.C.

103 { return false; }

◆ is_hierarchic() [4/86]

bool libMesh::FE< 3, SCALAR >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 104 of file fe_scalar.C.

104 { return false; }

◆ is_hierarchic() [5/86]

bool libMesh::FE< 0, RATIONAL_BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 166 of file fe_rational.C.

166 { return false; }

◆ is_hierarchic() [6/86]

bool libMesh::FE< 1, RATIONAL_BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 167 of file fe_rational.C.

167 { return false; }

◆ is_hierarchic() [7/86]

bool libMesh::FE< 2, RATIONAL_BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 168 of file fe_rational.C.

168 { return false; }

◆ is_hierarchic() [8/86]

bool libMesh::FE< 3, RATIONAL_BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 169 of file fe_rational.C.

169 { return false; }

◆ is_hierarchic() [9/86]

bool libMesh::FE< 0, L2_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 194 of file fe_l2_hierarchic.C.

194 { return true; }

◆ is_hierarchic() [10/86]

bool libMesh::FE< 1, L2_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 195 of file fe_l2_hierarchic.C.

195 { return true; }

◆ is_hierarchic() [11/86]

bool libMesh::FE< 2, L2_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 196 of file fe_l2_hierarchic.C.

196 { return true; }

◆ is_hierarchic() [12/86]

bool libMesh::FE< 3, L2_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 197 of file fe_l2_hierarchic.C.

197 { return true; }

◆ is_hierarchic() [13/86]

bool libMesh::FE< 0, L2_LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 262 of file fe_l2_lagrange.C.

262 { return false; }

◆ is_hierarchic() [14/86]

bool libMesh::FE< 1, L2_LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 263 of file fe_l2_lagrange.C.

263 { return false; }

◆ is_hierarchic() [15/86]

bool libMesh::FE< 2, L2_LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 264 of file fe_l2_lagrange.C.

264 { return false; }

◆ is_hierarchic() [16/86]

bool libMesh::FE< 3, L2_LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 265 of file fe_l2_lagrange.C.

265 { return false; }

◆ is_hierarchic() [17/86]

bool libMesh::FE< 0, CLOUGH >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 276 of file fe_clough.C.

276 { return false; } // FIXME - this will be changed

◆ is_hierarchic() [18/86]

bool libMesh::FE< 1, CLOUGH >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 277 of file fe_clough.C.

277 { return false; } // FIXME - this will be changed

◆ is_hierarchic() [19/86]

bool libMesh::FE< 2, CLOUGH >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 278 of file fe_clough.C.

278 { return false; } // FIXME - this will be changed

◆ is_hierarchic() [20/86]

bool libMesh::FE< 3, CLOUGH >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 279 of file fe_clough.C.

279 { return false; } // FIXME - this will be changed

◆ is_hierarchic() [21/86]

bool libMesh::FE< 0, SIDE_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 305 of file fe_side_hierarchic.C.

305 { return true; }

◆ is_hierarchic() [22/86]

bool libMesh::FE< 1, SIDE_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 306 of file fe_side_hierarchic.C.

306 { return true; }

◆ is_hierarchic() [23/86]

bool libMesh::FE< 2, SIDE_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 307 of file fe_side_hierarchic.C.

307 { return true; }

◆ is_hierarchic() [24/86]

bool libMesh::FE< 3, SIDE_HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 308 of file fe_side_hierarchic.C.

308 { return true; }

◆ is_hierarchic() [25/86]

bool libMesh::FE< 0, HERMITE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 318 of file fe_hermite.C.

318 { return true; }

◆ is_hierarchic() [26/86]

bool libMesh::FE< 1, HERMITE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 319 of file fe_hermite.C.

319 { return true; }

◆ is_hierarchic() [27/86]

bool libMesh::FE< 2, HERMITE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 320 of file fe_hermite.C.

320 { return true; }

◆ is_hierarchic() [28/86]

bool libMesh::FE< 3, HERMITE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 321 of file fe_hermite.C.

321 { return true; }

◆ is_hierarchic() [29/86]

bool libMesh::FE< 0, XYZ >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 413 of file fe_xyz.C.

413 { return true; }

◆ is_hierarchic() [30/86]

bool libMesh::FE< 0, NEDELEC_ONE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 414 of file fe_nedelec_one.C.

414 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [31/86]

bool libMesh::FE< 1, XYZ >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 414 of file fe_xyz.C.

414 { return true; }

◆ is_hierarchic() [32/86]

bool libMesh::FE< 1, NEDELEC_ONE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 415 of file fe_nedelec_one.C.

415 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [33/86]

bool libMesh::FE< 2, XYZ >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 415 of file fe_xyz.C.

415 { return true; }

◆ is_hierarchic() [34/86]

bool libMesh::FE< 2, NEDELEC_ONE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 416 of file fe_nedelec_one.C.

416 { return false; }

◆ is_hierarchic() [35/86]

bool libMesh::FE< 3, XYZ >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 416 of file fe_xyz.C.

416 { return true; }

◆ is_hierarchic() [36/86]

bool libMesh::FE< 3, NEDELEC_ONE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 417 of file fe_nedelec_one.C.

417 { return false; }

◆ is_hierarchic() [37/86]

bool libMesh::FE< 0, BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 428 of file fe_bernstein.C.

428 { return false; }

◆ is_hierarchic() [38/86]

bool libMesh::FE< 0, MONOMIAL >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 428 of file fe_monomial.C.

428 { return true; }

◆ is_hierarchic() [39/86]

bool libMesh::FE< 1, BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 429 of file fe_bernstein.C.

429 { return false; }

◆ is_hierarchic() [40/86]

bool libMesh::FE< 1, MONOMIAL >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 429 of file fe_monomial.C.

429 { return true; }

◆ is_hierarchic() [41/86]

bool libMesh::FE< 2, BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 430 of file fe_bernstein.C.

430 { return false; }

◆ is_hierarchic() [42/86]

bool libMesh::FE< 2, MONOMIAL >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 430 of file fe_monomial.C.

430 { return true; }

◆ is_hierarchic() [43/86]

bool libMesh::FE< 3, BERNSTEIN >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 431 of file fe_bernstein.C.

431 { return false; }

◆ is_hierarchic() [44/86]

bool libMesh::FE< 3, MONOMIAL >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 431 of file fe_monomial.C.

431 { return true; }

◆ is_hierarchic() [45/86]

bool libMesh::FE< 0, RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 468 of file fe_raviart.C.

468 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [46/86]

bool libMesh::FE< 1, RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 469 of file fe_raviart.C.

469 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [47/86]

bool libMesh::FE< 2, RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 470 of file fe_raviart.C.

470 { return false; }

◆ is_hierarchic() [48/86]

bool libMesh::FE< 3, RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 471 of file fe_raviart.C.

471 { return false; }

◆ is_hierarchic() [49/86]

bool libMesh::FE< 0, L2_RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 472 of file fe_raviart.C.

472 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [50/86]

bool libMesh::FE< 1, L2_RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 473 of file fe_raviart.C.

473 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [51/86]

bool libMesh::FE< 2, L2_RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 474 of file fe_raviart.C.

474 { return false; }

◆ is_hierarchic() [52/86]

bool libMesh::FE< 3, L2_RAVIART_THOMAS >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 475 of file fe_raviart.C.

475 { return false; }

◆ is_hierarchic() [53/86]

bool libMesh::FE< 0, HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 482 of file fe_hierarchic.C.

482 { return true; }

◆ is_hierarchic() [54/86]

bool libMesh::FE< 1, HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 483 of file fe_hierarchic.C.

483 { return true; }

◆ is_hierarchic() [55/86]

bool libMesh::FE< 2, HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 484 of file fe_hierarchic.C.

484 { return true; }

◆ is_hierarchic() [56/86]

bool libMesh::FE< 3, HIERARCHIC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 485 of file fe_hierarchic.C.

485 { return true; }

◆ is_hierarchic() [57/86]

virtual bool libMesh::FE< Dim, T >::is_hierarchic ( ) const
overridevirtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

◆ is_hierarchic() [58/86]

bool libMesh::FE< 0, MONOMIAL_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 723 of file fe_monomial_vec.C.

724 {
725  return true;
726 }

◆ is_hierarchic() [59/86]

bool libMesh::FE< 1, MONOMIAL_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 729 of file fe_monomial_vec.C.

730 {
731  return true;
732 }

◆ is_hierarchic() [60/86]

bool libMesh::FE< 2, MONOMIAL_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 735 of file fe_monomial_vec.C.

736 {
737  return true;
738 }

◆ is_hierarchic() [61/86]

bool libMesh::FE< 3, MONOMIAL_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 741 of file fe_monomial_vec.C.

742 {
743  return true;
744 }

◆ is_hierarchic() [62/86]

bool libMesh::FE< 0, HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 785 of file fe_hierarchic_vec.C.

785 { return true; }

◆ is_hierarchic() [63/86]

bool libMesh::FE< 1, HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 786 of file fe_hierarchic_vec.C.

786 { return true; }

◆ is_hierarchic() [64/86]

bool libMesh::FE< 2, HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 787 of file fe_hierarchic_vec.C.

787 { return true; }

◆ is_hierarchic() [65/86]

bool libMesh::FE< 3, HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 788 of file fe_hierarchic_vec.C.

788 { return true; }

◆ is_hierarchic() [66/86]

bool libMesh::FE< 0, L2_HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 789 of file fe_hierarchic_vec.C.

789 { return true; }

◆ is_hierarchic() [67/86]

bool libMesh::FE< 1, L2_HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 790 of file fe_hierarchic_vec.C.

790 { return true; }

◆ is_hierarchic() [68/86]

bool libMesh::FE< 2, L2_HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 791 of file fe_hierarchic_vec.C.

791 { return true; }

◆ is_hierarchic() [69/86]

bool libMesh::FE< 3, L2_HIERARCHIC_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 792 of file fe_hierarchic_vec.C.

792 { return true; }

◆ is_hierarchic() [70/86]

bool libMesh::FE< 2, SUBDIVISION >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 977 of file fe_subdivision_2D.C.

977 { return false; }

◆ is_hierarchic() [71/86]

bool libMesh::FE< 0, LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1120 of file fe_lagrange.C.

1120 { return false; }

◆ is_hierarchic() [72/86]

bool libMesh::FE< 1, LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1121 of file fe_lagrange.C.

1121 { return false; }

◆ is_hierarchic() [73/86]

bool libMesh::FE< 2, LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1122 of file fe_lagrange.C.

1122 { return false; }

◆ is_hierarchic() [74/86]

bool libMesh::FE< 3, LAGRANGE >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1123 of file fe_lagrange.C.

1123 { return false; }

◆ is_hierarchic() [75/86]

bool libMesh::FE< 0, SZABAB >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1331 of file fe_szabab.C.

1331 { return true; }

◆ is_hierarchic() [76/86]

bool libMesh::FE< 1, SZABAB >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1332 of file fe_szabab.C.

1332 { return true; }

◆ is_hierarchic() [77/86]

bool libMesh::FE< 2, SZABAB >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1333 of file fe_szabab.C.

1333 { return true; }

◆ is_hierarchic() [78/86]

bool libMesh::FE< 3, SZABAB >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1334 of file fe_szabab.C.

1334 { return true; }

◆ is_hierarchic() [79/86]

bool libMesh::FE< 0, LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1354 of file fe_lagrange_vec.C.

1354 { return false; }

◆ is_hierarchic() [80/86]

bool libMesh::FE< 1, LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1355 of file fe_lagrange_vec.C.

1355 { return false; }

◆ is_hierarchic() [81/86]

bool libMesh::FE< 2, LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1356 of file fe_lagrange_vec.C.

1356 { return false; }

◆ is_hierarchic() [82/86]

bool libMesh::FE< 3, LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1357 of file fe_lagrange_vec.C.

1357 { return false; }

◆ is_hierarchic() [83/86]

bool libMesh::FE< 0, L2_LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1358 of file fe_lagrange_vec.C.

1358 { return false; }

◆ is_hierarchic() [84/86]

bool libMesh::FE< 1, L2_LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1359 of file fe_lagrange_vec.C.

1359 { return false; }

◆ is_hierarchic() [85/86]

bool libMesh::FE< 2, L2_LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1360 of file fe_lagrange_vec.C.

1360 { return false; }

◆ is_hierarchic() [86/86]

bool libMesh::FE< 3, L2_LAGRANGE_VEC >::is_hierarchic ( ) const
virtualinherited
Returns
true if the finite element's higher order shape functions are hierarchic

Implements libMesh::FEAbstract.

Definition at line 1361 of file fe_lagrange_vec.C.

1361 { return false; }

◆ loop_subdivision_mask()

void libMesh::FESubdivision::loop_subdivision_mask ( std::vector< Real > &  weights,
const unsigned int  valence 
)
static

Fills the vector weights with the weight coefficients of the Loop subdivision mask for evaluating the limit surface at a node explicitly.

The size of weights will be 1 + valence, where valence is the number of neighbor nodes of the node where the limit surface is to be evaluated. The weight for the node itself is the first element of weights.

Definition at line 398 of file fe_subdivision_2D.C.

References libMesh::pi, and libMesh::Real.

400 {
401  libmesh_assert_greater(valence, 0);
402  const Real cs = std::cos(2 * libMesh::pi / valence);
403  const Real nb_weight = (0.625 - Utility::pow<2>(0.375 + 0.25 * cs)) / valence;
404  weights.resize(1 + valence, nb_weight);
405  weights[0] = 1.0 - valence * nb_weight;
406 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real pi
.
Definition: libmesh.h:299

◆ map()

static Point libMesh::FE< Dim, T >::map ( const Elem elem,
const Point reference_point 
)
inlinestaticinherited

Definition at line 660 of file fe.h.

662  {
663  // libmesh_deprecated(); // soon
664  return FEMap::map(Dim, elem, reference_point);
665  }

◆ map_eta()

static Point libMesh::FE< Dim, T >::map_eta ( const Elem elem,
const Point reference_point 
)
inlinestaticinherited

Definition at line 674 of file fe.h.

676  {
677  // libmesh_deprecated(); // soon
678  return FEMap::map_deriv(Dim, elem, 1, reference_point);
679  }

◆ map_xi()

static Point libMesh::FE< Dim, T >::map_xi ( const Elem elem,
const Point reference_point 
)
inlinestaticinherited

Definition at line 667 of file fe.h.

669  {
670  // libmesh_deprecated(); // soon
671  return FEMap::map_deriv(Dim, elem, 0, reference_point);
672  }

◆ map_zeta()

static Point libMesh::FE< Dim, T >::map_zeta ( const Elem elem,
const Point reference_point 
)
inlinestaticinherited

Definition at line 681 of file fe.h.

683  {
684  // libmesh_deprecated(); // soon
685  return FEMap::map_deriv(Dim, elem, 2, reference_point);
686  }

◆ matches_cache()

bool libMesh::FE< Dim, T >::matches_cache ( const Elem elem)
protectedinherited

Check if the node locations, edge and face orientations held in the element cache match those of element elem.

Definition at line 174 of file fe.C.

175 {
176  bool m = cached_nodes.size() == elem->n_nodes();
177  for (unsigned n = 1; m && n < elem->n_nodes(); n++)
178  m = (elem->point(n) - elem->point(0)).relative_fuzzy_equals(cached_nodes[n] - cached_nodes[0]);
179 
180  if (FEInterface::orientation_dependent(T))
181  {
182  m &= cached_edges.size() == elem->n_edges();
183  for (unsigned n = 0; m && n < elem->n_edges(); n++)
184  m = elem->positive_edge_orientation(n) == cached_edges[n];
185 
186  m &= cached_faces.size() == elem->n_faces();
187  for (unsigned n = 0; m && n < elem->n_faces(); n++)
188  m = elem->positive_face_orientation(n) == cached_faces[n];
189  }
190 
191  return m;
192 }
std::vector< bool > cached_faces
Definition: fe.h:797
virtual unsigned int n_nodes() const =0
virtual unsigned int n_edges() const =0
bool positive_edge_orientation(const unsigned int i) const
Definition: elem.C:3589
std::vector< bool > cached_edges
Definition: fe.h:797
bool positive_face_orientation(const unsigned int i) const
Definition: elem.C:3598
bool relative_fuzzy_equals(const T &var1, const T2 &var2, const Real tol=TOLERANCE *TOLERANCE)
Function to check whether two variables are equal within a relative tolerance.
Definition: fuzzy_equals.h:78
virtual unsigned int n_faces() const =0
std::vector< Point > cached_nodes
Vectors holding the node locations, edge and face orientations of the last element we cached...
Definition: fe.h:796
const Point & point(const unsigned int i) const
Definition: elem.h:2453

◆ n_dofs() [1/121]

unsigned int libMesh::FE< 1, SCALAR >::n_dofs ( const ElemType  ,
const Order  o 
)
inherited

Definition at line 61 of file fe_scalar.C.

61 { return o; }

◆ n_dofs() [2/121]

unsigned int libMesh::FE< 2, SCALAR >::n_dofs ( const ElemType  ,
const Order  o 
)
inherited

Definition at line 62 of file fe_scalar.C.

62 { return o; }

◆ n_dofs() [3/121]

unsigned int libMesh::FE< 3, SCALAR >::n_dofs ( const ElemType  ,
const Order  o 
)
inherited

Definition at line 63 of file fe_scalar.C.

63 { return o; }

◆ n_dofs() [4/121]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs ( const Elem ,
const Order  o 
)
inherited

Definition at line 65 of file fe_scalar.C.

65 { return o; }

◆ n_dofs() [5/121]

unsigned int libMesh::FE< 1, SCALAR >::n_dofs ( const Elem ,
const Order  o 
)
inherited

Definition at line 66 of file fe_scalar.C.

66 { return o; }

◆ n_dofs() [6/121]

unsigned int libMesh::FE< 2, SCALAR >::n_dofs ( const Elem ,
const Order  o 
)
inherited

Definition at line 67 of file fe_scalar.C.

67 { return o; }

◆ n_dofs() [7/121]

unsigned int libMesh::FE< 3, SCALAR >::n_dofs ( const Elem ,
const Order  o 
)
inherited

Definition at line 68 of file fe_scalar.C.

68 { return o; }

◆ n_dofs() [8/121]

unsigned int libMesh::FE< 1, RATIONAL_BERNSTEIN >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 128 of file fe_rational.C.

128 { return FE<1,_underlying_fe_family>::n_dofs(t, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [9/121]

unsigned int libMesh::FE< 2, RATIONAL_BERNSTEIN >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 129 of file fe_rational.C.

129 { return FE<2,_underlying_fe_family>::n_dofs(t, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [10/121]

unsigned int libMesh::FE< 3, RATIONAL_BERNSTEIN >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 130 of file fe_rational.C.

130 { return FE<3,_underlying_fe_family>::n_dofs(t, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [11/121]

unsigned int libMesh::FE< 0, RATIONAL_BERNSTEIN >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 132 of file fe_rational.C.

132 { return FE<0,_underlying_fe_family>::n_dofs(e, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [12/121]

unsigned int libMesh::FE< 1, RATIONAL_BERNSTEIN >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 133 of file fe_rational.C.

133 { return FE<1,_underlying_fe_family>::n_dofs(e, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [13/121]

unsigned int libMesh::FE< 2, RATIONAL_BERNSTEIN >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 134 of file fe_rational.C.

134 { return FE<2,_underlying_fe_family>::n_dofs(e, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [14/121]

unsigned int libMesh::FE< 3, RATIONAL_BERNSTEIN >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 135 of file fe_rational.C.

135 { return FE<3,_underlying_fe_family>::n_dofs(e, o); }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs() [15/121]

unsigned int libMesh::FE< 1, L2_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 155 of file fe_l2_hierarchic.C.

155 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs() [16/121]

unsigned int libMesh::FE< 2, L2_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 156 of file fe_l2_hierarchic.C.

156 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs() [17/121]

unsigned int libMesh::FE< 3, L2_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 157 of file fe_l2_hierarchic.C.

157 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs() [18/121]

unsigned int libMesh::FE< 0, L2_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 159 of file fe_l2_hierarchic.C.

159 { return l2_hierarchic_n_dofs(e, o); }

◆ n_dofs() [19/121]

unsigned int libMesh::FE< 1, L2_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 160 of file fe_l2_hierarchic.C.

160 { return l2_hierarchic_n_dofs(e, o); }

◆ n_dofs() [20/121]

unsigned int libMesh::FE< 2, L2_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 161 of file fe_l2_hierarchic.C.

161 { return l2_hierarchic_n_dofs(e, o); }

◆ n_dofs() [21/121]

unsigned int libMesh::FE< 3, L2_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 162 of file fe_l2_hierarchic.C.

162 { return l2_hierarchic_n_dofs(e, o); }

◆ n_dofs() [22/121]

unsigned int libMesh::FE< 1, L2_LAGRANGE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 224 of file fe_l2_lagrange.C.

224 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs() [23/121]

unsigned int libMesh::FE< 2, L2_LAGRANGE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 225 of file fe_l2_lagrange.C.

225 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs() [24/121]

unsigned int libMesh::FE< 3, L2_LAGRANGE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 226 of file fe_l2_lagrange.C.

226 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs() [25/121]

unsigned int libMesh::FE< 0, L2_LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 228 of file fe_l2_lagrange.C.

228 { return l2_lagrange_n_dofs(e, o); }

◆ n_dofs() [26/121]

unsigned int libMesh::FE< 1, L2_LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 229 of file fe_l2_lagrange.C.

229 { return l2_lagrange_n_dofs(e, o); }

◆ n_dofs() [27/121]

unsigned int libMesh::FE< 2, L2_LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 230 of file fe_l2_lagrange.C.

230 { return l2_lagrange_n_dofs(e, o); }

◆ n_dofs() [28/121]

unsigned int libMesh::FE< 3, L2_LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 231 of file fe_l2_lagrange.C.

231 { return l2_lagrange_n_dofs(e, o); }

◆ n_dofs() [29/121]

unsigned int libMesh::FE< 0, SIDE_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 266 of file fe_side_hierarchic.C.

266 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [30/121]

unsigned int libMesh::FE< 1, SIDE_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 267 of file fe_side_hierarchic.C.

267 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [31/121]

unsigned int libMesh::FE< 2, SIDE_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 268 of file fe_side_hierarchic.C.

268 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [32/121]

unsigned int libMesh::FE< 3, SIDE_HIERARCHIC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 269 of file fe_side_hierarchic.C.

269 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [33/121]

unsigned int libMesh::FE< 0, SIDE_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 271 of file fe_side_hierarchic.C.

271 { return side_hierarchic_n_dofs(e, o); }

◆ n_dofs() [34/121]

unsigned int libMesh::FE< 1, SIDE_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 272 of file fe_side_hierarchic.C.

272 { return side_hierarchic_n_dofs(e, o); }

◆ n_dofs() [35/121]

unsigned int libMesh::FE< 2, SIDE_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 273 of file fe_side_hierarchic.C.

273 { return side_hierarchic_n_dofs(e, o); }

◆ n_dofs() [36/121]

unsigned int libMesh::FE< 3, SIDE_HIERARCHIC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 274 of file fe_side_hierarchic.C.

274 { return side_hierarchic_n_dofs(e, o); }

◆ n_dofs() [37/121]

unsigned int libMesh::FE< 1, XYZ >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 373 of file fe_xyz.C.

373 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [38/121]

unsigned int libMesh::FE< 2, XYZ >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 374 of file fe_xyz.C.

374 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [39/121]

unsigned int libMesh::FE< 3, XYZ >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 375 of file fe_xyz.C.

375 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [40/121]

unsigned int libMesh::FE< 0, XYZ >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 377 of file fe_xyz.C.

377 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [41/121]

unsigned int libMesh::FE< 1, NEDELEC_ONE >::n_dofs ( const ElemType  ,
const Order   
)
inherited

Definition at line 378 of file fe_nedelec_one.C.

378 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [42/121]

unsigned int libMesh::FE< 1, XYZ >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 378 of file fe_xyz.C.

378 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [43/121]

unsigned int libMesh::FE< 2, NEDELEC_ONE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 379 of file fe_nedelec_one.C.

379 { return nedelec_one_n_dofs(t, o); }

◆ n_dofs() [44/121]

unsigned int libMesh::FE< 2, XYZ >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 379 of file fe_xyz.C.

379 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [45/121]

unsigned int libMesh::FE< 3, NEDELEC_ONE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 380 of file fe_nedelec_one.C.

380 { return nedelec_one_n_dofs(t, o); }

◆ n_dofs() [46/121]

unsigned int libMesh::FE< 3, XYZ >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 380 of file fe_xyz.C.

380 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [47/121]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 382 of file fe_nedelec_one.C.

382 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [48/121]

unsigned int libMesh::FE< 1, NEDELEC_ONE >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 383 of file fe_nedelec_one.C.

383 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [49/121]

unsigned int libMesh::FE< 2, NEDELEC_ONE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 384 of file fe_nedelec_one.C.

384 { return nedelec_one_n_dofs(e, o); }

◆ n_dofs() [50/121]

unsigned int libMesh::FE< 3, NEDELEC_ONE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 385 of file fe_nedelec_one.C.

385 { return nedelec_one_n_dofs(e, o); }

◆ n_dofs() [51/121]

unsigned int libMesh::FE< 1, MONOMIAL >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 387 of file fe_monomial.C.

387 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [52/121]

unsigned int libMesh::FE< 2, MONOMIAL >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 388 of file fe_monomial.C.

388 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [53/121]

unsigned int libMesh::FE< 3, MONOMIAL >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 389 of file fe_monomial.C.

389 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [54/121]

unsigned int libMesh::FE< 0, MONOMIAL >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 391 of file fe_monomial.C.

391 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [55/121]

unsigned int libMesh::FE< 1, MONOMIAL >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 392 of file fe_monomial.C.

392 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [56/121]

unsigned int libMesh::FE< 2, MONOMIAL >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 393 of file fe_monomial.C.

393 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [57/121]

unsigned int libMesh::FE< 3, MONOMIAL >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 394 of file fe_monomial.C.

394 { return monomial_n_dofs(e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs() [58/121]

unsigned int libMesh::FE< 1, RAVIART_THOMAS >::n_dofs ( const ElemType  ,
const Order   
)
inherited

Definition at line 395 of file fe_raviart.C.

395 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [59/121]

unsigned int libMesh::FE< 2, RAVIART_THOMAS >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 396 of file fe_raviart.C.

396 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [60/121]

unsigned int libMesh::FE< 3, RAVIART_THOMAS >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 397 of file fe_raviart.C.

397 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [61/121]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 399 of file fe_raviart.C.

399 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [62/121]

unsigned int libMesh::FE< 1, RAVIART_THOMAS >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 400 of file fe_raviart.C.

400 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [63/121]

unsigned int libMesh::FE< 2, RAVIART_THOMAS >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 401 of file fe_raviart.C.

401 { return raviart_thomas_n_dofs(e, o); }

◆ n_dofs() [64/121]

unsigned int libMesh::FE< 3, RAVIART_THOMAS >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 402 of file fe_raviart.C.

402 { return raviart_thomas_n_dofs(e, o); }

◆ n_dofs() [65/121]

unsigned int libMesh::FE< 0, L2_RAVIART_THOMAS >::n_dofs ( const ElemType  ,
const Order   
)
inherited

Definition at line 404 of file fe_raviart.C.

404 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [66/121]

unsigned int libMesh::FE< 1, L2_RAVIART_THOMAS >::n_dofs ( const ElemType  ,
const Order   
)
inherited

Definition at line 405 of file fe_raviart.C.

405 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [67/121]

unsigned int libMesh::FE< 2, L2_RAVIART_THOMAS >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 406 of file fe_raviart.C.

406 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [68/121]

unsigned int libMesh::FE< 3, L2_RAVIART_THOMAS >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 407 of file fe_raviart.C.

407 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [69/121]

unsigned int libMesh::FE< 0, L2_RAVIART_THOMAS >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 409 of file fe_raviart.C.

409 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [70/121]

unsigned int libMesh::FE< 1, L2_RAVIART_THOMAS >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 410 of file fe_raviart.C.

410 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [71/121]

unsigned int libMesh::FE< 2, L2_RAVIART_THOMAS >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 411 of file fe_raviart.C.

411 { return raviart_thomas_n_dofs(e, o); }

◆ n_dofs() [72/121]

unsigned int libMesh::FE< 3, L2_RAVIART_THOMAS >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 412 of file fe_raviart.C.

412 { return raviart_thomas_n_dofs(e, o); }

◆ n_dofs() [73/121]

static unsigned int libMesh::FE< Dim, T >::n_dofs ( const ElemType  t,
const Order  o 
)
staticinherited
Returns
The number of shape functions associated with this finite element.

On a p-refined element, o should be the total order of the element.

This method does not support all finite element types; e.g. for an arbitrary polygon or polyhedron type the number of shape functions may depend on an individual element and not just its type.

◆ n_dofs() [74/121]

static unsigned int libMesh::FE< Dim, T >::n_dofs ( const Elem e,
const Order  o 
)
staticinherited
Returns
The number of shape functions associated with this finite element.

On a p-refined element, o should be the total order of the element.

e should only be a null pointer if using a FE family like SCALAR that has degrees of freedom independent of any element.

◆ n_dofs() [75/121]

unsigned int libMesh::FE< 0, MONOMIAL_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 664 of file fe_monomial_vec.C.

664 { return FE<0, MONOMIAL>::n_dofs(t, o); }

◆ n_dofs() [76/121]

unsigned int libMesh::FE< 1, MONOMIAL_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 665 of file fe_monomial_vec.C.

665 { return FE<1, MONOMIAL>::n_dofs(t, o); }

◆ n_dofs() [77/121]

unsigned int libMesh::FE< 2, MONOMIAL_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 666 of file fe_monomial_vec.C.

666 { return 2 * FE<2, MONOMIAL>::n_dofs(t, o); }

◆ n_dofs() [78/121]

unsigned int libMesh::FE< 3, MONOMIAL_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 667 of file fe_monomial_vec.C.

667 { return 3 * FE<3, MONOMIAL>::n_dofs(t, o); }

◆ n_dofs() [79/121]

unsigned int libMesh::FE< 0, MONOMIAL_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 669 of file fe_monomial_vec.C.

669 { return FE<0, MONOMIAL>::n_dofs(e, o); }

◆ n_dofs() [80/121]

unsigned int libMesh::FE< 1, MONOMIAL_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 670 of file fe_monomial_vec.C.

670 { return FE<1, MONOMIAL>::n_dofs(e, o); }

◆ n_dofs() [81/121]

unsigned int libMesh::FE< 2, MONOMIAL_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 671 of file fe_monomial_vec.C.

671 { return 2 * FE<2, MONOMIAL>::n_dofs(e, o); }

◆ n_dofs() [82/121]

unsigned int libMesh::FE< 3, MONOMIAL_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 672 of file fe_monomial_vec.C.

672 { return 3 * FE<3, MONOMIAL>::n_dofs(e, o); }

◆ n_dofs() [83/121]

unsigned int libMesh::FE< 1, L2_HIERARCHIC_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 743 of file fe_hierarchic_vec.C.

743 { return FE<1,L2_HIERARCHIC>::n_dofs(t,o); }

◆ n_dofs() [84/121]

unsigned int libMesh::FE< 2, L2_HIERARCHIC_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 744 of file fe_hierarchic_vec.C.

744 { return 2*FE<2,L2_HIERARCHIC>::n_dofs(t,o); }

◆ n_dofs() [85/121]

unsigned int libMesh::FE< 3, L2_HIERARCHIC_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 745 of file fe_hierarchic_vec.C.

745 { return 3*FE<3,L2_HIERARCHIC>::n_dofs(t,o); }

◆ n_dofs() [86/121]

unsigned int libMesh::FE< 0, L2_HIERARCHIC_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 747 of file fe_hierarchic_vec.C.

747 { return FE<0,L2_HIERARCHIC>::n_dofs(e,o); }

◆ n_dofs() [87/121]

unsigned int libMesh::FE< 1, L2_HIERARCHIC_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 748 of file fe_hierarchic_vec.C.

748 { return FE<1,L2_HIERARCHIC>::n_dofs(e,o); }

◆ n_dofs() [88/121]

unsigned int libMesh::FE< 2, L2_HIERARCHIC_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 749 of file fe_hierarchic_vec.C.

749 { return 2*FE<2,L2_HIERARCHIC>::n_dofs(e,o); }

◆ n_dofs() [89/121]

unsigned int libMesh::FE< 3, L2_HIERARCHIC_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 750 of file fe_hierarchic_vec.C.

750 { return 3*FE<3,L2_HIERARCHIC>::n_dofs(e,o); }

◆ n_dofs() [90/121]

unsigned int libMesh::FE< 2, SUBDIVISION >::n_dofs ( const ElemType  ,
const Order   
)
inherited

Definition at line 958 of file fe_subdivision_2D.C.

958 { libmesh_not_implemented(); return 0; }

◆ n_dofs() [91/121]

unsigned int libMesh::FE< 2, SUBDIVISION >::n_dofs ( const Elem ,
const Order   
)
inherited

Definition at line 959 of file fe_subdivision_2D.C.

959 { libmesh_not_implemented(); return 0; }

◆ n_dofs() [92/121]

unsigned int libMesh::FE< 1, LAGRANGE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1078 of file fe_lagrange.C.

1078 { return lagrange_n_dofs(t, nullptr, o); }

◆ n_dofs() [93/121]

unsigned int libMesh::FE< 2, LAGRANGE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1079 of file fe_lagrange.C.

1079 { return lagrange_n_dofs(t, nullptr, o); }

◆ n_dofs() [94/121]

unsigned int libMesh::FE< 3, LAGRANGE >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1080 of file fe_lagrange.C.

1080 { return lagrange_n_dofs(t, nullptr, o); }

◆ n_dofs() [95/121]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1082 of file fe_lagrange.C.

1082 { return lagrange_n_dofs(e->type(), e, o); }

◆ n_dofs() [96/121]

unsigned int libMesh::FE< 1, LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1083 of file fe_lagrange.C.

1083 { return lagrange_n_dofs(e->type(), e, o); }

◆ n_dofs() [97/121]

unsigned int libMesh::FE< 2, LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1084 of file fe_lagrange.C.

1084 { return lagrange_n_dofs(e->type(), e, o); }

◆ n_dofs() [98/121]

unsigned int libMesh::FE< 3, LAGRANGE >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1085 of file fe_lagrange.C.

1085 { return lagrange_n_dofs(e->type(), e, o); }

◆ n_dofs() [99/121]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1274 of file fe_lagrange_vec.C.

1274 { return FE<0,LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [100/121]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1275 of file fe_lagrange_vec.C.

1275 { return FE<1,LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [101/121]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1276 of file fe_lagrange_vec.C.

1276 { return 2*FE<2,LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [102/121]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1277 of file fe_lagrange_vec.C.

1277 { return 3*FE<3,LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [103/121]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1279 of file fe_lagrange_vec.C.

1279 { return FE<0,LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [104/121]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1280 of file fe_lagrange_vec.C.

1280 { return FE<1,LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [105/121]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1281 of file fe_lagrange_vec.C.

1281 { return 2*FE<2,LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [106/121]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1282 of file fe_lagrange_vec.C.

1282 { return 3*FE<3,LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [107/121]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1284 of file fe_lagrange_vec.C.

1284 { return FE<0,L2_LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [108/121]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1285 of file fe_lagrange_vec.C.

1285 { return FE<1,L2_LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [109/121]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1286 of file fe_lagrange_vec.C.

1286 { return 2*FE<2,L2_LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [110/121]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1287 of file fe_lagrange_vec.C.

1287 { return 3*FE<3,L2_LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [111/121]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1289 of file fe_lagrange_vec.C.

1289 { return FE<0,L2_LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [112/121]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1290 of file fe_lagrange_vec.C.

1290 { return FE<1,L2_LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [113/121]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1291 of file fe_lagrange_vec.C.

1291 { return 2*FE<2,L2_LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [114/121]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1292 of file fe_lagrange_vec.C.

1292 { return 3*FE<3,L2_LAGRANGE>::n_dofs(e,o); }

◆ n_dofs() [115/121]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1293 of file fe_szabab.C.

1293 { return szabab_n_dofs(t, o); }

◆ n_dofs() [116/121]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1294 of file fe_szabab.C.

1294 { return szabab_n_dofs(t, o); }

◆ n_dofs() [117/121]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1295 of file fe_szabab.C.

1295 { return szabab_n_dofs(t, o); }

◆ n_dofs() [118/121]

unsigned int libMesh::FE< 0, SZABAB >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1297 of file fe_szabab.C.

1297 { return szabab_n_dofs(e, o); }

◆ n_dofs() [119/121]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1298 of file fe_szabab.C.

1298 { return szabab_n_dofs(e, o); }

◆ n_dofs() [120/121]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1299 of file fe_szabab.C.

1299 { return szabab_n_dofs(e, o); }

◆ n_dofs() [121/121]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs ( const Elem e,
const Order  o 
)
inherited

Definition at line 1300 of file fe_szabab.C.

1300 { return szabab_n_dofs(e, o); }

◆ n_dofs_at_node() [1/132]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 72 of file fe_scalar.C.

72 { return 0; }

◆ n_dofs_at_node() [2/132]

unsigned int libMesh::FE< 1, SCALAR >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 73 of file fe_scalar.C.

73 { return 0; }

◆ n_dofs_at_node() [3/132]

unsigned int libMesh::FE< 2, SCALAR >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 74 of file fe_scalar.C.

74 { return 0; }

◆ n_dofs_at_node() [4/132]

unsigned int libMesh::FE< 3, SCALAR >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 75 of file fe_scalar.C.

75 { return 0; }

◆ n_dofs_at_node() [5/132]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 77 of file fe_scalar.C.

77 { return 0; }

◆ n_dofs_at_node() [6/132]

unsigned int libMesh::FE< 1, SCALAR >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 78 of file fe_scalar.C.

78 { return 0; }

◆ n_dofs_at_node() [7/132]

unsigned int libMesh::FE< 2, SCALAR >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 79 of file fe_scalar.C.

79 { return 0; }

◆ n_dofs_at_node() [8/132]

unsigned int libMesh::FE< 3, SCALAR >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 80 of file fe_scalar.C.

80 { return 0; }

◆ n_dofs_at_node() [9/132]

unsigned int libMesh::FE< 0, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 138 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [10/132]

unsigned int libMesh::FE< 1, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 139 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [11/132]

unsigned int libMesh::FE< 2, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 140 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [12/132]

unsigned int libMesh::FE< 3, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 141 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [13/132]

unsigned int libMesh::FE< 0, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 143 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [14/132]

unsigned int libMesh::FE< 1, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 144 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [15/132]

unsigned int libMesh::FE< 2, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 145 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [16/132]

unsigned int libMesh::FE< 3, RATIONAL_BERNSTEIN >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 146 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [17/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 166 of file fe_l2_hierarchic.C.

166 { return 0; }

◆ n_dofs_at_node() [18/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 167 of file fe_l2_hierarchic.C.

167 { return 0; }

◆ n_dofs_at_node() [19/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 168 of file fe_l2_hierarchic.C.

168 { return 0; }

◆ n_dofs_at_node() [20/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 169 of file fe_l2_hierarchic.C.

169 { return 0; }

◆ n_dofs_at_node() [21/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 171 of file fe_l2_hierarchic.C.

171 { return 0; }

◆ n_dofs_at_node() [22/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 172 of file fe_l2_hierarchic.C.

172 { return 0; }

◆ n_dofs_at_node() [23/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 173 of file fe_l2_hierarchic.C.

173 { return 0; }

◆ n_dofs_at_node() [24/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 174 of file fe_l2_hierarchic.C.

174 { return 0; }

◆ n_dofs_at_node() [25/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 234 of file fe_l2_lagrange.C.

234 { return 0; }

◆ n_dofs_at_node() [26/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 235 of file fe_l2_lagrange.C.

235 { return 0; }

◆ n_dofs_at_node() [27/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 236 of file fe_l2_lagrange.C.

236 { return 0; }

◆ n_dofs_at_node() [28/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 237 of file fe_l2_lagrange.C.

237 { return 0; }

◆ n_dofs_at_node() [29/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 239 of file fe_l2_lagrange.C.

239 { return 0; }

◆ n_dofs_at_node() [30/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 240 of file fe_l2_lagrange.C.

240 { return 0; }

◆ n_dofs_at_node() [31/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 241 of file fe_l2_lagrange.C.

241 { return 0; }

◆ n_dofs_at_node() [32/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 242 of file fe_l2_lagrange.C.

242 { return 0; }

◆ n_dofs_at_node() [33/132]

unsigned int libMesh::FE< 0, SIDE_HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 277 of file fe_side_hierarchic.C.

277 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [34/132]

unsigned int libMesh::FE< 1, SIDE_HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 278 of file fe_side_hierarchic.C.

278 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [35/132]

unsigned int libMesh::FE< 2, SIDE_HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 279 of file fe_side_hierarchic.C.

279 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [36/132]

unsigned int libMesh::FE< 3, SIDE_HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 280 of file fe_side_hierarchic.C.

280 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [37/132]

unsigned int libMesh::FE< 0, SIDE_HIERARCHIC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 282 of file fe_side_hierarchic.C.

282 { return side_hierarchic_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [38/132]

unsigned int libMesh::FE< 1, SIDE_HIERARCHIC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 283 of file fe_side_hierarchic.C.

283 { return side_hierarchic_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [39/132]

unsigned int libMesh::FE< 2, SIDE_HIERARCHIC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 284 of file fe_side_hierarchic.C.

284 { return side_hierarchic_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [40/132]

unsigned int libMesh::FE< 3, SIDE_HIERARCHIC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 285 of file fe_side_hierarchic.C.

285 { return side_hierarchic_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [41/132]

unsigned int libMesh::FE< 0, XYZ >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 384 of file fe_xyz.C.

384 { return 0; }

◆ n_dofs_at_node() [42/132]

unsigned int libMesh::FE< 1, XYZ >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 385 of file fe_xyz.C.

385 { return 0; }

◆ n_dofs_at_node() [43/132]

unsigned int libMesh::FE< 2, XYZ >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 386 of file fe_xyz.C.

386 { return 0; }

◆ n_dofs_at_node() [44/132]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 387 of file fe_nedelec_one.C.

387 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [45/132]

unsigned int libMesh::FE< 3, XYZ >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 387 of file fe_xyz.C.

387 { return 0; }

◆ n_dofs_at_node() [46/132]

unsigned int libMesh::FE< 1, NEDELEC_ONE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 388 of file fe_nedelec_one.C.

388 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [47/132]

unsigned int libMesh::FE< 2, NEDELEC_ONE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 389 of file fe_nedelec_one.C.

389 { return nedelec_one_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [48/132]

unsigned int libMesh::FE< 0, XYZ >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 389 of file fe_xyz.C.

389 { return 0; }

◆ n_dofs_at_node() [49/132]

unsigned int libMesh::FE< 3, NEDELEC_ONE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 390 of file fe_nedelec_one.C.

390 { return nedelec_one_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [50/132]

unsigned int libMesh::FE< 1, XYZ >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 390 of file fe_xyz.C.

390 { return 0; }

◆ n_dofs_at_node() [51/132]

unsigned int libMesh::FE< 2, XYZ >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 391 of file fe_xyz.C.

391 { return 0; }

◆ n_dofs_at_node() [52/132]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 392 of file fe_nedelec_one.C.

392 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [53/132]

unsigned int libMesh::FE< 3, XYZ >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 392 of file fe_xyz.C.

392 { return 0; }

◆ n_dofs_at_node() [54/132]

unsigned int libMesh::FE< 1, NEDELEC_ONE >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 393 of file fe_nedelec_one.C.

393 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [55/132]

unsigned int libMesh::FE< 2, NEDELEC_ONE >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 394 of file fe_nedelec_one.C.

394 { return nedelec_one_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [56/132]

unsigned int libMesh::FE< 3, NEDELEC_ONE >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 395 of file fe_nedelec_one.C.

395 { return nedelec_one_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [57/132]

unsigned int libMesh::FE< 0, MONOMIAL >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 398 of file fe_monomial.C.

398 { return 0; }

◆ n_dofs_at_node() [58/132]

unsigned int libMesh::FE< 1, MONOMIAL >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 399 of file fe_monomial.C.

399 { return 0; }

◆ n_dofs_at_node() [59/132]

unsigned int libMesh::FE< 2, MONOMIAL >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 400 of file fe_monomial.C.

400 { return 0; }

◆ n_dofs_at_node() [60/132]

unsigned int libMesh::FE< 3, MONOMIAL >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 401 of file fe_monomial.C.

401 { return 0; }

◆ n_dofs_at_node() [61/132]

unsigned int libMesh::FE< 0, MONOMIAL >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 403 of file fe_monomial.C.

403 { return 0; }

◆ n_dofs_at_node() [62/132]

unsigned int libMesh::FE< 1, MONOMIAL >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 404 of file fe_monomial.C.

404 { return 0; }

◆ n_dofs_at_node() [63/132]

unsigned int libMesh::FE< 2, MONOMIAL >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 405 of file fe_monomial.C.

405 { return 0; }

◆ n_dofs_at_node() [64/132]

unsigned int libMesh::FE< 3, MONOMIAL >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 406 of file fe_monomial.C.

406 { return 0; }

◆ n_dofs_at_node() [65/132]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 414 of file fe_raviart.C.

414 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [66/132]

unsigned int libMesh::FE< 1, RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 415 of file fe_raviart.C.

415 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [67/132]

unsigned int libMesh::FE< 2, RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 416 of file fe_raviart.C.

416 { return raviart_thomas_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [68/132]

unsigned int libMesh::FE< 3, RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 417 of file fe_raviart.C.

417 { return raviart_thomas_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [69/132]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 419 of file fe_raviart.C.

419 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [70/132]

unsigned int libMesh::FE< 1, RAVIART_THOMAS >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 420 of file fe_raviart.C.

420 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [71/132]

unsigned int libMesh::FE< 2, RAVIART_THOMAS >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 421 of file fe_raviart.C.

421 { return raviart_thomas_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [72/132]

unsigned int libMesh::FE< 3, RAVIART_THOMAS >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 422 of file fe_raviart.C.

422 { return raviart_thomas_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [73/132]

unsigned int libMesh::FE< 0, L2_RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 424 of file fe_raviart.C.

424 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [74/132]

unsigned int libMesh::FE< 1, L2_RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 425 of file fe_raviart.C.

425 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [75/132]

unsigned int libMesh::FE< 2, L2_RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 426 of file fe_raviart.C.

426 { return 0; }

◆ n_dofs_at_node() [76/132]

unsigned int libMesh::FE< 3, L2_RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 427 of file fe_raviart.C.

427 { return 0; }

◆ n_dofs_at_node() [77/132]

unsigned int libMesh::FE< 0, L2_RAVIART_THOMAS >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 429 of file fe_raviart.C.

429 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [78/132]

unsigned int libMesh::FE< 1, L2_RAVIART_THOMAS >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 430 of file fe_raviart.C.

430 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [79/132]

unsigned int libMesh::FE< 2, L2_RAVIART_THOMAS >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 431 of file fe_raviart.C.

431 { return 0; }

◆ n_dofs_at_node() [80/132]

unsigned int libMesh::FE< 3, L2_RAVIART_THOMAS >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 432 of file fe_raviart.C.

432 { return 0; }

◆ n_dofs_at_node() [81/132]

static unsigned int libMesh::FE< Dim, T >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
staticinherited
Returns
The number of dofs at node n for a finite element of type t and order o.

On a p-refined element, o should be the total order of the element.

This method does not support all finite element types; e.g. for an arbitrary polygon or polyhedron type the meaning of a node index n may depend on an individual element and not just its type.

◆ n_dofs_at_node() [82/132]

static unsigned int libMesh::FE< Dim, T >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
staticinherited
Returns
The number of dofs at node n for a finite element of type t and order o.

On a p-refined element, o should be the total order of the element.

◆ n_dofs_at_node() [83/132]

unsigned int libMesh::FE< 0, MONOMIAL_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 674 of file fe_monomial_vec.C.

674 { return 0; }

◆ n_dofs_at_node() [84/132]

unsigned int libMesh::FE< 1, MONOMIAL_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 675 of file fe_monomial_vec.C.

675 { return 0; }

◆ n_dofs_at_node() [85/132]

unsigned int libMesh::FE< 2, MONOMIAL_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 676 of file fe_monomial_vec.C.

676 { return 0; }

◆ n_dofs_at_node() [86/132]

unsigned int libMesh::FE< 3, MONOMIAL_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 677 of file fe_monomial_vec.C.

677 { return 0; }

◆ n_dofs_at_node() [87/132]

unsigned int libMesh::FE< 0, MONOMIAL_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 679 of file fe_monomial_vec.C.

679 { return 0; }

◆ n_dofs_at_node() [88/132]

unsigned int libMesh::FE< 1, MONOMIAL_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 680 of file fe_monomial_vec.C.

680 { return 0; }

◆ n_dofs_at_node() [89/132]

unsigned int libMesh::FE< 2, MONOMIAL_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 681 of file fe_monomial_vec.C.

681 { return 0; }

◆ n_dofs_at_node() [90/132]

unsigned int libMesh::FE< 3, MONOMIAL_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 682 of file fe_monomial_vec.C.

682 { return 0; }

◆ n_dofs_at_node() [91/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 752 of file fe_hierarchic_vec.C.

752 { return 0; }

◆ n_dofs_at_node() [92/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 753 of file fe_hierarchic_vec.C.

753 { return 0; }

◆ n_dofs_at_node() [93/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 754 of file fe_hierarchic_vec.C.

754 { return 0; }

◆ n_dofs_at_node() [94/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 755 of file fe_hierarchic_vec.C.

755 { return 0; }

◆ n_dofs_at_node() [95/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 757 of file fe_hierarchic_vec.C.

757 { return 0; }

◆ n_dofs_at_node() [96/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 758 of file fe_hierarchic_vec.C.

758 { return 0; }

◆ n_dofs_at_node() [97/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 759 of file fe_hierarchic_vec.C.

759 { return 0; }

◆ n_dofs_at_node() [98/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 760 of file fe_hierarchic_vec.C.

760 { return 0; }

◆ n_dofs_at_node() [99/132]

unsigned int libMesh::FE< 2, SUBDIVISION >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 962 of file fe_subdivision_2D.C.

962 { return 1; }

◆ n_dofs_at_node() [100/132]

unsigned int libMesh::FE< 2, SUBDIVISION >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 963 of file fe_subdivision_2D.C.

963 { return 1; }

◆ n_dofs_at_node() [101/132]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1090 of file fe_lagrange.C.

1090 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [102/132]

unsigned int libMesh::FE< 1, LAGRANGE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1091 of file fe_lagrange.C.

1091 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [103/132]

unsigned int libMesh::FE< 2, LAGRANGE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1092 of file fe_lagrange.C.

1092 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [104/132]

unsigned int libMesh::FE< 3, LAGRANGE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1093 of file fe_lagrange.C.

1093 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [105/132]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1095 of file fe_lagrange.C.

1095 { return lagrange_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [106/132]

unsigned int libMesh::FE< 1, LAGRANGE >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1096 of file fe_lagrange.C.

1096 { return lagrange_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [107/132]

unsigned int libMesh::FE< 2, LAGRANGE >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1097 of file fe_lagrange.C.

1097 { return lagrange_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [108/132]

unsigned int libMesh::FE< 3, LAGRANGE >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1098 of file fe_lagrange.C.

1098 { return lagrange_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [109/132]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1297 of file fe_lagrange_vec.C.

1297 { return FE<0,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [110/132]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1298 of file fe_lagrange_vec.C.

1298 { return FE<1,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [111/132]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1299 of file fe_lagrange_vec.C.

1299 { return 2*FE<2,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [112/132]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1300 of file fe_lagrange_vec.C.

1300 { return 3*FE<3,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [113/132]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1302 of file fe_lagrange_vec.C.

1302 { return FE<0,LAGRANGE>::n_dofs_at_node(e,o,n); }

◆ n_dofs_at_node() [114/132]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1303 of file fe_lagrange_vec.C.

1303 { return FE<1,LAGRANGE>::n_dofs_at_node(e,o,n); }

◆ n_dofs_at_node() [115/132]

unsigned int libMesh::FE< 0, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1303 of file fe_szabab.C.

1303 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [116/132]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1304 of file fe_lagrange_vec.C.

1304 { return 2*FE<2,LAGRANGE>::n_dofs_at_node(e,o,n); }

◆ n_dofs_at_node() [117/132]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1304 of file fe_szabab.C.

1304 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [118/132]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1305 of file fe_lagrange_vec.C.

1305 { return 3*FE<3,LAGRANGE>::n_dofs_at_node(e,o,n); }

◆ n_dofs_at_node() [119/132]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1305 of file fe_szabab.C.

1305 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [120/132]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1306 of file fe_szabab.C.

1306 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [121/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1307 of file fe_lagrange_vec.C.

1307 { return 0; }

◆ n_dofs_at_node() [122/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1308 of file fe_lagrange_vec.C.

1308 { return 0; }

◆ n_dofs_at_node() [123/132]

unsigned int libMesh::FE< 0, SZABAB >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1308 of file fe_szabab.C.

1308 { return szabab_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [124/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1309 of file fe_lagrange_vec.C.

1309 { return 0; }

◆ n_dofs_at_node() [125/132]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1309 of file fe_szabab.C.

1309 { return szabab_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [126/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1310 of file fe_lagrange_vec.C.

1310 { return 0; }

◆ n_dofs_at_node() [127/132]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1310 of file fe_szabab.C.

1310 { return szabab_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [128/132]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs_at_node ( const Elem e,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1311 of file fe_szabab.C.

1311 { return szabab_n_dofs_at_node(e, o, n); }

◆ n_dofs_at_node() [129/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1312 of file fe_lagrange_vec.C.

1312 { return 0; }

◆ n_dofs_at_node() [130/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1313 of file fe_lagrange_vec.C.

1313 { return 0; }

◆ n_dofs_at_node() [131/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1314 of file fe_lagrange_vec.C.

1314 { return 0; }

◆ n_dofs_at_node() [132/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs_at_node ( const Elem ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1315 of file fe_lagrange_vec.C.

1315 { return 0; }

◆ n_dofs_per_elem() [1/132]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 84 of file fe_scalar.C.

84 { return 0; }

◆ n_dofs_per_elem() [2/132]

unsigned int libMesh::FE< 1, SCALAR >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 85 of file fe_scalar.C.

85 { return 0; }

◆ n_dofs_per_elem() [3/132]

unsigned int libMesh::FE< 2, SCALAR >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 86 of file fe_scalar.C.

86 { return 0; }

◆ n_dofs_per_elem() [4/132]

unsigned int libMesh::FE< 3, SCALAR >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 87 of file fe_scalar.C.

87 { return 0; }

◆ n_dofs_per_elem() [5/132]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 89 of file fe_scalar.C.

89 { return 0; }

◆ n_dofs_per_elem() [6/132]

unsigned int libMesh::FE< 1, SCALAR >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 90 of file fe_scalar.C.

90 { return 0; }

◆ n_dofs_per_elem() [7/132]

unsigned int libMesh::FE< 2, SCALAR >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 91 of file fe_scalar.C.

91 { return 0; }

◆ n_dofs_per_elem() [8/132]

unsigned int libMesh::FE< 3, SCALAR >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 92 of file fe_scalar.C.

92 { return 0; }

◆ n_dofs_per_elem() [9/132]

unsigned int libMesh::FE< 0, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 149 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [10/132]

unsigned int libMesh::FE< 1, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 150 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [11/132]

unsigned int libMesh::FE< 2, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 151 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [12/132]

unsigned int libMesh::FE< 3, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 152 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [13/132]

unsigned int libMesh::FE< 0, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 154 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [14/132]

unsigned int libMesh::FE< 1, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 155 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [15/132]

unsigned int libMesh::FE< 2, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 156 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [16/132]

unsigned int libMesh::FE< 3, RATIONAL_BERNSTEIN >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 157 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [17/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 177 of file fe_l2_hierarchic.C.

177 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [18/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 178 of file fe_l2_hierarchic.C.

178 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [19/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 179 of file fe_l2_hierarchic.C.

179 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [20/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 180 of file fe_l2_hierarchic.C.

180 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [21/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 182 of file fe_l2_hierarchic.C.

182 { return l2_hierarchic_n_dofs(&e, o); }

◆ n_dofs_per_elem() [22/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 183 of file fe_l2_hierarchic.C.

183 { return l2_hierarchic_n_dofs(&e, o); }

◆ n_dofs_per_elem() [23/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 184 of file fe_l2_hierarchic.C.

184 { return l2_hierarchic_n_dofs(&e, o); }

◆ n_dofs_per_elem() [24/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 185 of file fe_l2_hierarchic.C.

185 { return l2_hierarchic_n_dofs(&e, o); }

◆ n_dofs_per_elem() [25/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 245 of file fe_l2_lagrange.C.

245 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [26/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 246 of file fe_l2_lagrange.C.

246 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [27/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 247 of file fe_l2_lagrange.C.

247 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [28/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 248 of file fe_l2_lagrange.C.

248 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [29/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 250 of file fe_l2_lagrange.C.

250 { return l2_lagrange_n_dofs(&e, o); }

◆ n_dofs_per_elem() [30/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 251 of file fe_l2_lagrange.C.

251 { return l2_lagrange_n_dofs(&e, o); }

◆ n_dofs_per_elem() [31/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 252 of file fe_l2_lagrange.C.

252 { return l2_lagrange_n_dofs(&e, o); }

◆ n_dofs_per_elem() [32/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 253 of file fe_l2_lagrange.C.

253 { return l2_lagrange_n_dofs(&e, o); }

◆ n_dofs_per_elem() [33/132]

unsigned int libMesh::FE< 0, SIDE_HIERARCHIC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 288 of file fe_side_hierarchic.C.

288 { return 0; }

◆ n_dofs_per_elem() [34/132]

unsigned int libMesh::FE< 1, SIDE_HIERARCHIC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 289 of file fe_side_hierarchic.C.

289 { return 0; }

◆ n_dofs_per_elem() [35/132]

unsigned int libMesh::FE< 2, SIDE_HIERARCHIC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 290 of file fe_side_hierarchic.C.

290 { return 0; }

◆ n_dofs_per_elem() [36/132]

unsigned int libMesh::FE< 3, SIDE_HIERARCHIC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 291 of file fe_side_hierarchic.C.

291 { return 0; }

◆ n_dofs_per_elem() [37/132]

unsigned int libMesh::FE< 0, SIDE_HIERARCHIC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 293 of file fe_side_hierarchic.C.

293 { return 0; }

◆ n_dofs_per_elem() [38/132]

unsigned int libMesh::FE< 1, SIDE_HIERARCHIC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 294 of file fe_side_hierarchic.C.

294 { return 0; }

◆ n_dofs_per_elem() [39/132]

unsigned int libMesh::FE< 2, SIDE_HIERARCHIC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 295 of file fe_side_hierarchic.C.

295 { return 0; }

◆ n_dofs_per_elem() [40/132]

unsigned int libMesh::FE< 3, SIDE_HIERARCHIC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 296 of file fe_side_hierarchic.C.

296 { return 0; }

◆ n_dofs_per_elem() [41/132]

unsigned int libMesh::FE< 0, XYZ >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 395 of file fe_xyz.C.

395 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [42/132]

unsigned int libMesh::FE< 1, XYZ >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 396 of file fe_xyz.C.

396 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [43/132]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 397 of file fe_nedelec_one.C.

397 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [44/132]

unsigned int libMesh::FE< 2, XYZ >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 397 of file fe_xyz.C.

397 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [45/132]

unsigned int libMesh::FE< 1, NEDELEC_ONE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 398 of file fe_nedelec_one.C.

398 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [46/132]

unsigned int libMesh::FE< 3, XYZ >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 398 of file fe_xyz.C.

398 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [47/132]

unsigned int libMesh::FE< 2, NEDELEC_ONE >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 399 of file fe_nedelec_one.C.

399 { return nedelec_one_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [48/132]

unsigned int libMesh::FE< 3, NEDELEC_ONE >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 400 of file fe_nedelec_one.C.

400 { return nedelec_one_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [49/132]

unsigned int libMesh::FE< 0, XYZ >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 400 of file fe_xyz.C.

400 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [50/132]

unsigned int libMesh::FE< 1, XYZ >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 401 of file fe_xyz.C.

401 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [51/132]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 402 of file fe_nedelec_one.C.

402 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [52/132]

unsigned int libMesh::FE< 2, XYZ >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 402 of file fe_xyz.C.

402 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [53/132]

unsigned int libMesh::FE< 1, NEDELEC_ONE >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 403 of file fe_nedelec_one.C.

403 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [54/132]

unsigned int libMesh::FE< 3, XYZ >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 403 of file fe_xyz.C.

403 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [55/132]

unsigned int libMesh::FE< 2, NEDELEC_ONE >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 404 of file fe_nedelec_one.C.

404 { return nedelec_one_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [56/132]

unsigned int libMesh::FE< 3, NEDELEC_ONE >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 405 of file fe_nedelec_one.C.

405 { return nedelec_one_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [57/132]

unsigned int libMesh::FE< 0, MONOMIAL >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 409 of file fe_monomial.C.

409 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [58/132]

unsigned int libMesh::FE< 1, MONOMIAL >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 410 of file fe_monomial.C.

410 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [59/132]

unsigned int libMesh::FE< 2, MONOMIAL >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 411 of file fe_monomial.C.

411 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [60/132]

unsigned int libMesh::FE< 3, MONOMIAL >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 412 of file fe_monomial.C.

412 { return monomial_n_dofs(t, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [61/132]

unsigned int libMesh::FE< 0, MONOMIAL >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 414 of file fe_monomial.C.

414 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [62/132]

unsigned int libMesh::FE< 1, MONOMIAL >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 415 of file fe_monomial.C.

415 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [63/132]

unsigned int libMesh::FE< 2, MONOMIAL >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 416 of file fe_monomial.C.

416 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [64/132]

unsigned int libMesh::FE< 3, MONOMIAL >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 417 of file fe_monomial.C.

417 { return monomial_n_dofs(&e, o); }
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
Definition: fe_monomial.C:37

◆ n_dofs_per_elem() [65/132]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 434 of file fe_raviart.C.

434 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [66/132]

unsigned int libMesh::FE< 1, RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 435 of file fe_raviart.C.

435 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [67/132]

unsigned int libMesh::FE< 2, RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 436 of file fe_raviart.C.

436 { return raviart_thomas_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [68/132]

unsigned int libMesh::FE< 3, RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 437 of file fe_raviart.C.

437 { return raviart_thomas_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [69/132]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 439 of file fe_raviart.C.

439 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [70/132]

unsigned int libMesh::FE< 1, RAVIART_THOMAS >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 440 of file fe_raviart.C.

440 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [71/132]

unsigned int libMesh::FE< 2, RAVIART_THOMAS >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 441 of file fe_raviart.C.

441 { return raviart_thomas_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [72/132]

unsigned int libMesh::FE< 3, RAVIART_THOMAS >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 442 of file fe_raviart.C.

442 { return raviart_thomas_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [73/132]

unsigned int libMesh::FE< 0, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 445 of file fe_raviart.C.

445 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [74/132]

unsigned int libMesh::FE< 1, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 446 of file fe_raviart.C.

446 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [75/132]

unsigned int libMesh::FE< 2, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 447 of file fe_raviart.C.

447 { return n_dofs(t, o); }
static unsigned int n_dofs(const ElemType t, const Order o)

◆ n_dofs_per_elem() [76/132]

unsigned int libMesh::FE< 3, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 448 of file fe_raviart.C.

448 { return n_dofs(t, o); }
static unsigned int n_dofs(const ElemType t, const Order o)

◆ n_dofs_per_elem() [77/132]

unsigned int libMesh::FE< 0, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 450 of file fe_raviart.C.

450 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [78/132]

unsigned int libMesh::FE< 1, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 451 of file fe_raviart.C.

451 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [79/132]

unsigned int libMesh::FE< 2, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 452 of file fe_raviart.C.

452 { return n_dofs(&e, o); }
static unsigned int n_dofs(const ElemType t, const Order o)

◆ n_dofs_per_elem() [80/132]

unsigned int libMesh::FE< 3, L2_RAVIART_THOMAS >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 453 of file fe_raviart.C.

453 { return n_dofs(&e, o); }
static unsigned int n_dofs(const ElemType t, const Order o)

◆ n_dofs_per_elem() [81/132]

static unsigned int libMesh::FE< Dim, T >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
staticinherited
Returns
The number of dofs interior to the element, not associated with any interior nodes.

On a p-refined element, o should be the total order of the element.

This method may not support all finite element types, e.g. higher order polygons or polyhedra may differ from element to element.

◆ n_dofs_per_elem() [82/132]

static unsigned int libMesh::FE< Dim, T >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
staticinherited
Returns
The number of dofs interior to the element, not associated with any interior nodes.

On a p-refined element, o should be the total order of the element.

◆ n_dofs_per_elem() [83/132]

unsigned int libMesh::FE< 0, MONOMIAL_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 684 of file fe_monomial_vec.C.

684 { return FE<0, MONOMIAL>::n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [84/132]

unsigned int libMesh::FE< 1, MONOMIAL_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 685 of file fe_monomial_vec.C.

685 { return FE<1, MONOMIAL>::n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [85/132]

unsigned int libMesh::FE< 2, MONOMIAL_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 686 of file fe_monomial_vec.C.

686 { return 2 * FE<2, MONOMIAL>::n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [86/132]

unsigned int libMesh::FE< 3, MONOMIAL_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 687 of file fe_monomial_vec.C.

687 { return 3 * FE<3, MONOMIAL>::n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [87/132]

unsigned int libMesh::FE< 0, MONOMIAL_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 689 of file fe_monomial_vec.C.

689 { return FE<0, MONOMIAL>::n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [88/132]

unsigned int libMesh::FE< 1, MONOMIAL_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 690 of file fe_monomial_vec.C.

690 { return FE<1, MONOMIAL>::n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [89/132]

unsigned int libMesh::FE< 2, MONOMIAL_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 691 of file fe_monomial_vec.C.

691 { return 2 * FE<2, MONOMIAL>::n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [90/132]

unsigned int libMesh::FE< 3, MONOMIAL_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 692 of file fe_monomial_vec.C.

692 { return 3 * FE<3, MONOMIAL>::n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [91/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 762 of file fe_hierarchic_vec.C.

762 { return FE<0,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [92/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 763 of file fe_hierarchic_vec.C.

763 { return FE<1,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [93/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 764 of file fe_hierarchic_vec.C.

764 { return FE<2,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [94/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 765 of file fe_hierarchic_vec.C.

765 { return FE<3,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [95/132]

unsigned int libMesh::FE< 0, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 767 of file fe_hierarchic_vec.C.

767 { return FE<0,L2_HIERARCHIC_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [96/132]

unsigned int libMesh::FE< 1, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 768 of file fe_hierarchic_vec.C.

768 { return FE<1,L2_HIERARCHIC_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [97/132]

unsigned int libMesh::FE< 2, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 769 of file fe_hierarchic_vec.C.

769 { return FE<2,L2_HIERARCHIC_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [98/132]

unsigned int libMesh::FE< 3, L2_HIERARCHIC_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 770 of file fe_hierarchic_vec.C.

770 { return FE<3,L2_HIERARCHIC_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [99/132]

unsigned int libMesh::FE< 2, SUBDIVISION >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 966 of file fe_subdivision_2D.C.

966 { return 0; }

◆ n_dofs_per_elem() [100/132]

unsigned int libMesh::FE< 2, SUBDIVISION >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 967 of file fe_subdivision_2D.C.

967 { return 0; }

◆ n_dofs_per_elem() [101/132]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1103 of file fe_lagrange.C.

1103 { return 0; }

◆ n_dofs_per_elem() [102/132]

unsigned int libMesh::FE< 1, LAGRANGE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1104 of file fe_lagrange.C.

1104 { return 0; }

◆ n_dofs_per_elem() [103/132]

unsigned int libMesh::FE< 2, LAGRANGE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1105 of file fe_lagrange.C.

1105 { return 0; }

◆ n_dofs_per_elem() [104/132]

unsigned int libMesh::FE< 3, LAGRANGE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1106 of file fe_lagrange.C.

1106 { return 0; }

◆ n_dofs_per_elem() [105/132]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1108 of file fe_lagrange.C.

1108 { return 0; }

◆ n_dofs_per_elem() [106/132]

unsigned int libMesh::FE< 1, LAGRANGE >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1109 of file fe_lagrange.C.

1109 { return 0; }

◆ n_dofs_per_elem() [107/132]

unsigned int libMesh::FE< 2, LAGRANGE >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1110 of file fe_lagrange.C.

1110 { return 0; }

◆ n_dofs_per_elem() [108/132]

unsigned int libMesh::FE< 3, LAGRANGE >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1111 of file fe_lagrange.C.

1111 { return 0; }

◆ n_dofs_per_elem() [109/132]

unsigned int libMesh::FE< 0, SZABAB >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1314 of file fe_szabab.C.

1314 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [110/132]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1315 of file fe_szabab.C.

1315 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [111/132]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1316 of file fe_szabab.C.

1316 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [112/132]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1317 of file fe_szabab.C.

1317 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [113/132]

unsigned int libMesh::FE< 0, SZABAB >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1319 of file fe_szabab.C.

1319 { return szabab_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [114/132]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1320 of file fe_szabab.C.

1320 { return szabab_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [115/132]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1320 of file fe_lagrange_vec.C.

1320 { return 0; }

◆ n_dofs_per_elem() [116/132]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1321 of file fe_szabab.C.

1321 { return szabab_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [117/132]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1321 of file fe_lagrange_vec.C.

1321 { return 0; }

◆ n_dofs_per_elem() [118/132]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1322 of file fe_szabab.C.

1322 { return szabab_n_dofs_per_elem(e, o); }

◆ n_dofs_per_elem() [119/132]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1322 of file fe_lagrange_vec.C.

1322 { return 0; }

◆ n_dofs_per_elem() [120/132]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1323 of file fe_lagrange_vec.C.

1323 { return 0; }

◆ n_dofs_per_elem() [121/132]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1325 of file fe_lagrange_vec.C.

1325 { return 0; }

◆ n_dofs_per_elem() [122/132]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1326 of file fe_lagrange_vec.C.

1326 { return 0; }

◆ n_dofs_per_elem() [123/132]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1327 of file fe_lagrange_vec.C.

1327 { return 0; }

◆ n_dofs_per_elem() [124/132]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs_per_elem ( const Elem ,
const Order   
)
inherited

Definition at line 1328 of file fe_lagrange_vec.C.

1328 { return 0; }

◆ n_dofs_per_elem() [125/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1331 of file fe_lagrange_vec.C.

1331 { return FE<0,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [126/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1332 of file fe_lagrange_vec.C.

1332 { return FE<1,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [127/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1333 of file fe_lagrange_vec.C.

1333 { return FE<2,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [128/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  t,
const Order  o 
)
inherited

Definition at line 1334 of file fe_lagrange_vec.C.

1334 { return FE<3,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [129/132]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1336 of file fe_lagrange_vec.C.

1336 { return FE<0,L2_LAGRANGE_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [130/132]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1337 of file fe_lagrange_vec.C.

1337 { return FE<1,L2_LAGRANGE_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [131/132]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1338 of file fe_lagrange_vec.C.

1338 { return FE<2,L2_LAGRANGE_VEC>::n_dofs(&e, o); }

◆ n_dofs_per_elem() [132/132]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs_per_elem ( const Elem e,
const Order  o 
)
inherited

Definition at line 1339 of file fe_lagrange_vec.C.

1339 { return FE<3,L2_LAGRANGE_VEC>::n_dofs(&e, o); }

◆ n_objects()

static unsigned int libMesh::ReferenceCounter::n_objects ( )
inlinestaticinherited

Prints the number of outstanding (created, but not yet destroyed) objects.

Definition at line 85 of file reference_counter.h.

References libMesh::ReferenceCounter::_n_objects.

Referenced by libMesh::LibMeshInit::~LibMeshInit().

86  { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects
The number of objects.

◆ n_quadrature_points()

unsigned int libMesh::FEAbstract::n_quadrature_points ( ) const
virtualinherited
Returns
The total number of quadrature points with which this was last reinitialized. Useful during matrix assembly.

Reimplemented in libMesh::InfFE< Dim, T_radial, T_map >.

Definition at line 1279 of file fe_abstract.C.

References libMesh::FEAbstract::_n_total_qp, libMesh::libmesh_assert(), libMesh::QBase::n_points(), libMesh::FEAbstract::qrule, and libMesh::FEAbstract::shapes_on_quadrature.

Referenced by assemble_func(), assemble_SchroedingerEquation(), libMesh::DiscontinuityMeasure::boundary_side_integration(), libMesh::KellyErrorEstimator::boundary_side_integration(), libMesh::LaplacianErrorEstimator::internal_side_integration(), libMesh::DiscontinuityMeasure::internal_side_integration(), and libMesh::KellyErrorEstimator::internal_side_integration().

1280 {
1281  if (this->shapes_on_quadrature)
1282  {
1283  libmesh_assert(this->qrule);
1284  libmesh_assert_equal_to(this->qrule->n_points(),
1285  this->_n_total_qp);
1286  }
1287  return this->_n_total_qp;
1288 }
unsigned int _n_total_qp
The total number of quadrature points for the current configuration.
Definition: fe_abstract.h:774
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:768
libmesh_assert(ctx)
unsigned int n_points() const
Definition: quadrature.h:131
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:762

◆ n_shape_functions() [1/2]

unsigned int libMesh::FE< Dim, T >::n_shape_functions ( ) const
overridevirtualinherited
Returns
The number of shape functions associated with this finite element.

Implements libMesh::FEAbstract.

Definition at line 75 of file fe.C.

76 {
77  if (this->_elem)
78  return this->n_dofs (this->_elem,
79  this->fe_type.order + this->_p_level);
80 
81  return this->n_dofs (this->get_type(),
82  this->fe_type.order + this->_p_level);
83 }
static unsigned int n_dofs(const ElemType t, const Order o)
ElemType get_type() const
Definition: fe_abstract.h:509
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ n_shape_functions() [2/2]

static unsigned int libMesh::FE< Dim, T >::n_shape_functions ( const ElemType  t,
const Order  o 
)
inlinestaticinherited
Returns
The number of shape functions associated with a finite element of type t and approximation order o.

On a p-refined element, o should be the total order of the element.

This method does not support all finite element types; e.g. for an arbitrary polygon or polyhedron type the number of shape functions may depend on an individual element and not just its type.

Definition at line 425 of file fe.h.

427  { return FE<Dim,T>::n_dofs (t,o); }

◆ nodal_soln() [1/17]

void libMesh::FE< 3, HIERARCHIC_VEC >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 109 of file fe_hierarchic_vec.C.

115 { hierarchic_vec_nodal_soln(elem, order, elem_soln, 3 /*dim*/, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [2/17]

void libMesh::FE< 3, MONOMIAL_VEC >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 130 of file fe_monomial_vec.C.

136 {
137  monomial_vec_nodal_soln(elem, order, elem_soln, 3 /*dim*/, nodal_soln, add_p_level);
138 }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [3/17]

void libMesh::FE< 0, RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool  ,
const unsigned   
)
inherited

Definition at line 316 of file fe_raviart.C.

322 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [4/17]

void libMesh::FE< 1, RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool  ,
const unsigned   
)
inherited

Definition at line 325 of file fe_raviart.C.

331 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [5/17]

void libMesh::FE< 2, RAVIART_THOMAS >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned  vdim 
)
inherited

Definition at line 334 of file fe_raviart.C.

340 { raviart_thomas_nodal_soln(elem, order, elem_soln, 2 /*dim*/, vdim, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [6/17]

void libMesh::FE< 0, NEDELEC_ONE >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool  ,
const unsigned   
)
inherited

Definition at line 337 of file fe_nedelec_one.C.

343 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [7/17]

void libMesh::FE< 3, RAVIART_THOMAS >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 343 of file fe_raviart.C.

349 { raviart_thomas_nodal_soln(elem, order, elem_soln, 3 /*dim*/, 3 /*vdim*/, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [8/17]

void libMesh::FE< 1, NEDELEC_ONE >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool  ,
const unsigned   
)
inherited

Definition at line 346 of file fe_nedelec_one.C.

352 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [9/17]

void libMesh::FE< 0, L2_RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool  ,
const unsigned   
)
inherited

Definition at line 352 of file fe_raviart.C.

358 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [10/17]

void libMesh::FE< 2, NEDELEC_ONE >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned  vdim 
)
inherited

Definition at line 355 of file fe_nedelec_one.C.

361 { nedelec_one_nodal_soln(elem, order, elem_soln, 2 /*dim*/, vdim, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [11/17]

void libMesh::FE< 1, L2_RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool  ,
const unsigned   
)
inherited

Definition at line 361 of file fe_raviart.C.

367 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [12/17]

void libMesh::FE< 3, NEDELEC_ONE >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 364 of file fe_nedelec_one.C.

370 { nedelec_one_nodal_soln(elem, order, elem_soln, 3 /*dim*/, 3 /*vdim*/, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [13/17]

void libMesh::FE< 2, L2_RAVIART_THOMAS >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned  vdim 
)
inherited

Definition at line 370 of file fe_raviart.C.

376 { raviart_thomas_nodal_soln(elem, order, elem_soln, 2 /*dim*/, vdim, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [14/17]

void libMesh::FE< 3, L2_RAVIART_THOMAS >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 379 of file fe_raviart.C.

385 { raviart_thomas_nodal_soln(elem, order, elem_soln, 3 /*dim*/, 3 /*vdim*/, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [15/17]

static void libMesh::FE< Dim, T >::nodal_soln ( const Elem elem,
const Order  o,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
bool  add_p_level = true,
const unsigned  vdim = 1 
)
staticinherited

Build the nodal soln from the element soln.

This is the solution that will be plotted.

On a p-refined element, o should be the base order of the element.

◆ nodal_soln() [16/17]

void libMesh::FE< 3, LAGRANGE_VEC >::nodal_soln ( const Elem elem,
const Order  order,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 649 of file fe_lagrange_vec.C.

655 { lagrange_vec_nodal_soln(elem, order, elem_soln, 3 /*dim*/, nodal_soln, add_p_level); }
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ nodal_soln() [17/17]

void libMesh::FE< 2, SUBDIVISION >::nodal_soln ( const Elem elem,
const Order  ,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln,
const bool  ,
const unsigned   
)
inherited

Definition at line 877 of file fe_subdivision_2D.C.

883 {
884  libmesh_assert(elem);
885  libmesh_assert_equal_to(elem->type(), TRI3SUBDIVISION);
886  const Tri3Subdivision * sd_elem = static_cast<const Tri3Subdivision *>(elem);
887 
888  nodal_soln.resize(3); // three nodes per element
889 
890  // Ghost nodes are auxiliary.
891  if (sd_elem->is_ghost())
892  {
893  nodal_soln[0] = 0;
894  nodal_soln[1] = 0;
895  nodal_soln[2] = 0;
896  return;
897  }
898 
899  // First node (node 0 in the element patch):
900  unsigned int j = sd_elem->local_node_number(sd_elem->get_ordered_node(0)->id());
901  nodal_soln[j] = elem_soln[0];
902 
903  // Second node (node 1 in the element patch):
904  j = sd_elem->local_node_number(sd_elem->get_ordered_node(1)->id());
905  nodal_soln[j] = elem_soln[1];
906 
907  // Third node (node 'valence' in the element patch):
908  j = sd_elem->local_node_number(sd_elem->get_ordered_node(2)->id());
909  nodal_soln[j] = elem_soln[sd_elem->get_ordered_valence(0)];
910 }
libmesh_assert(ctx)
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.

◆ on_reference_element()

bool libMesh::FEAbstract::on_reference_element ( const Point p,
const ElemType  t,
const Real  eps = TOLERANCE 
)
staticinherited
Returns
true if the point p is located on the reference element for element type t, false otherwise. Since we are doing floating point comparisons here the parameter eps can be specified to indicate a tolerance. For example, \( x \le 1 \) becomes \( x \le 1 + \epsilon \).
Deprecated:
This method overload does not support all finite element types; e.g. the reference element for an arbitrary polygon or polyhedron type may differ from element to element. Use Elem::on_reference_element() instead.

Definition at line 637 of file fe_abstract.C.

References libMesh::EDGE2, libMesh::EDGE3, libMesh::EDGE4, libMesh::Utility::enum_to_string(), libMesh::HEX20, libMesh::HEX27, libMesh::HEX8, libMesh::INFHEX16, libMesh::INFHEX18, libMesh::INFHEX8, libMesh::INFPRISM12, libMesh::INFPRISM6, libMesh::NODEELEM, libMesh::PRISM15, libMesh::PRISM18, libMesh::PRISM20, libMesh::PRISM21, libMesh::PRISM6, libMesh::PYRAMID13, libMesh::PYRAMID14, libMesh::PYRAMID18, libMesh::PYRAMID5, libMesh::QUAD4, libMesh::QUAD8, libMesh::QUAD9, libMesh::QUADSHELL4, libMesh::QUADSHELL8, libMesh::QUADSHELL9, libMesh::Real, libMesh::TET10, libMesh::TET14, libMesh::TET4, libMesh::TRI3, libMesh::TRI6, libMesh::TRI7, and libMesh::TRISHELL3.

Referenced by libMesh::FEInterface::ifem_on_reference_element(), and libMesh::FEInterface::on_reference_element().

638 {
639  // Use Elem::on_reference_element() instead
640  libmesh_deprecated();
641 
642  libmesh_assert_greater_equal (eps, 0.);
643 
644  const Real xi = p(0);
645 #if LIBMESH_DIM > 1
646  const Real eta = p(1);
647 #else
648  const Real eta = 0.;
649 #endif
650 #if LIBMESH_DIM > 2
651  const Real zeta = p(2);
652 #else
653  const Real zeta = 0.;
654 #endif
655 
656  switch (t)
657  {
658  case NODEELEM:
659  {
660  return (!xi && !eta && !zeta);
661  }
662  case EDGE2:
663  case EDGE3:
664  case EDGE4:
665  {
666  // The reference 1D element is [-1,1].
667  if ((xi >= -1.-eps) &&
668  (xi <= 1.+eps))
669  return true;
670 
671  return false;
672  }
673 
674 
675  case TRI3:
676  case TRISHELL3:
677  case TRI6:
678  case TRI7:
679  {
680  // The reference triangle is isosceles
681  // and is bound by xi=0, eta=0, and xi+eta=1.
682  if ((xi >= 0.-eps) &&
683  (eta >= 0.-eps) &&
684  ((xi + eta) <= 1.+eps))
685  return true;
686 
687  return false;
688  }
689 
690 
691  case QUAD4:
692  case QUADSHELL4:
693  case QUAD8:
694  case QUADSHELL8:
695  case QUAD9:
696  case QUADSHELL9:
697  {
698  // The reference quadrilateral element is [-1,1]^2.
699  if ((xi >= -1.-eps) &&
700  (xi <= 1.+eps) &&
701  (eta >= -1.-eps) &&
702  (eta <= 1.+eps))
703  return true;
704 
705  return false;
706  }
707 
708 
709  case TET4:
710  case TET10:
711  case TET14:
712  {
713  // The reference tetrahedral is isosceles
714  // and is bound by xi=0, eta=0, zeta=0,
715  // and xi+eta+zeta=1.
716  if ((xi >= 0.-eps) &&
717  (eta >= 0.-eps) &&
718  (zeta >= 0.-eps) &&
719  ((xi + eta + zeta) <= 1.+eps))
720  return true;
721 
722  return false;
723  }
724 
725 
726  case HEX8:
727  case HEX20:
728  case HEX27:
729  {
730  /*
731  if ((xi >= -1.) &&
732  (xi <= 1.) &&
733  (eta >= -1.) &&
734  (eta <= 1.) &&
735  (zeta >= -1.) &&
736  (zeta <= 1.))
737  return true;
738  */
739 
740  // The reference hexahedral element is [-1,1]^3.
741  if ((xi >= -1.-eps) &&
742  (xi <= 1.+eps) &&
743  (eta >= -1.-eps) &&
744  (eta <= 1.+eps) &&
745  (zeta >= -1.-eps) &&
746  (zeta <= 1.+eps))
747  {
748  // libMesh::out << "Strange Point:\n";
749  // p.print();
750  return true;
751  }
752 
753  return false;
754  }
755 
756  case PRISM6:
757  case PRISM15:
758  case PRISM18:
759  case PRISM20:
760  case PRISM21:
761  {
762  // Figure this one out...
763  // inside the reference triangle with zeta in [-1,1]
764  if ((xi >= 0.-eps) &&
765  (eta >= 0.-eps) &&
766  (zeta >= -1.-eps) &&
767  (zeta <= 1.+eps) &&
768  ((xi + eta) <= 1.+eps))
769  return true;
770 
771  return false;
772  }
773 
774 
775  case PYRAMID5:
776  case PYRAMID13:
777  case PYRAMID14:
778  case PYRAMID18:
779  {
780  // Check that the point is on the same side of all the faces
781  // by testing whether:
782  //
783  // n_i.(x - x_i) <= 0
784  //
785  // for each i, where:
786  // n_i is the outward normal of face i,
787  // x_i is a point on face i.
788  if ((-eta - 1. + zeta <= 0.+eps) &&
789  ( xi - 1. + zeta <= 0.+eps) &&
790  ( eta - 1. + zeta <= 0.+eps) &&
791  ( -xi - 1. + zeta <= 0.+eps) &&
792  ( zeta >= 0.-eps))
793  return true;
794 
795  return false;
796  }
797 
798 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
799  case INFHEX8:
800  case INFHEX16:
801  case INFHEX18:
802  {
803  // The reference infhex8 is a [-1,1]^3.
804  if ((xi >= -1.-eps) &&
805  (xi <= 1.+eps) &&
806  (eta >= -1.-eps) &&
807  (eta <= 1.+eps) &&
808  (zeta >= -1.-eps) &&
809  (zeta <= 1.+eps))
810  {
811  return true;
812  }
813  return false;
814  }
815 
816  case INFPRISM6:
817  case INFPRISM12:
818  {
819  // inside the reference triangle with zeta in [-1,1]
820  if ((xi >= 0.-eps) &&
821  (eta >= 0.-eps) &&
822  (zeta >= -1.-eps) &&
823  (zeta <= 1.+eps) &&
824  ((xi + eta) <= 1.+eps))
825  {
826  return true;
827  }
828 
829  return false;
830  }
831 #endif
832 
833  default:
834  libmesh_error_msg("ERROR: Unknown element type " << Utility::enum_to_string(t));
835  }
836 
837  // If we get here then the point is _not_ in the
838  // reference element. Better return false.
839 
840  return false;
841 }
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ print_d2phi()

void libMesh::FEGenericBase< FEOutputType< T >::type >::print_d2phi ( std::ostream &  os) const
overridevirtualinherited

Prints the value of each shape function's second derivatives at each quadrature point.

Implements libMesh::FEAbstract.

Definition at line 989 of file fe_base.C.

References libMesh::index_range().

990 {
991  for (auto i : index_range(dphi))
992  for (auto j : index_range(dphi[i]))
993  os << " d2phi[" << i << "][" << j << "]=" << d2phi[i][j];
994 }
std::vector< std::vector< OutputTensor > > d2phi
Shape function second derivative values.
Definition: fe_base.h:674
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ print_dphi()

void libMesh::FEGenericBase< FEOutputType< T >::type >::print_dphi ( std::ostream &  os) const
overridevirtualinherited

Prints the value of each shape function's derivative at each quadrature point.

Implements libMesh::FEAbstract.

Definition at line 895 of file fe_base.C.

References libMesh::index_range().

896 {
897  for (auto i : index_range(dphi))
898  for (auto j : index_range(dphi[i]))
899  os << " dphi[" << i << "][" << j << "]=" << dphi[i][j];
900 }
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ print_dual_d2phi()

void libMesh::FEGenericBase< FEOutputType< T >::type >::print_dual_d2phi ( std::ostream &  os) const
overridevirtualinherited

Implements libMesh::FEAbstract.

Definition at line 997 of file fe_base.C.

References libMesh::index_range().

998 {
999  for (auto i : index_range(dual_d2phi))
1000  for (auto j : index_range(dual_d2phi[i]))
1001  os << " dual_d2phi[" << i << "][" << j << "]=" << dual_d2phi[i][j];
1002 }
std::vector< std::vector< OutputTensor > > dual_d2phi
Definition: fe_base.h:675
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ print_dual_dphi()

void libMesh::FEGenericBase< FEOutputType< T >::type >::print_dual_dphi ( std::ostream &  os) const
overridevirtualinherited

Implements libMesh::FEAbstract.

Definition at line 903 of file fe_base.C.

References libMesh::index_range().

904 {
905  for (auto i : index_range(dphi))
906  for (auto j : index_range(dphi[i]))
907  os << " dual_dphi[" << i << "][" << j << "]=" << dual_dphi[i][j];
908 }
std::vector< std::vector< OutputGradient > > dual_dphi
Definition: fe_base.h:621
std::vector< std::vector< OutputGradient > > dphi
Shape function derivative values.
Definition: fe_base.h:620
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ print_dual_phi()

void libMesh::FEGenericBase< FEOutputType< T >::type >::print_dual_phi ( std::ostream &  os) const
overridevirtualinherited

Implements libMesh::FEAbstract.

Definition at line 884 of file fe_base.C.

References libMesh::index_range().

885 {
886  for (auto i : index_range(dual_phi))
887  for (auto j : index_range(dual_phi[i]))
888  os << " dual_phi[" << i << "][" << j << "]=" << dual_phi[i][j] << std::endl;
889 }
std::vector< std::vector< OutputShape > > dual_phi
Definition: fe_base.h:615
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ print_info() [1/2]

void libMesh::ReferenceCounter::print_info ( std::ostream &  out_stream = libMesh::out)
staticinherited

Prints the reference information, by default to libMesh::out.

Definition at line 81 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().

Referenced by libMesh::LibMeshInit::~LibMeshInit().

82 {
84  out_stream << ReferenceCounter::get_info();
85 }
static std::string get_info()
Gets a string containing the reference information.
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ print_info() [2/2]

void libMesh::FEAbstract::print_info ( std::ostream &  os) const
inherited

Prints all the relevant information about the current element.

Definition at line 859 of file fe_abstract.C.

References libMesh::FEAbstract::print_dphi(), libMesh::FEAbstract::print_JxW(), libMesh::FEAbstract::print_phi(), and libMesh::FEAbstract::print_xyz().

Referenced by libMesh::operator<<().

860 {
861  os << "phi[i][j]: Shape function i at quadrature pt. j" << std::endl;
862  this->print_phi(os);
863 
864  os << "dphi[i][j]: Shape function i's gradient at quadrature pt. j" << std::endl;
865  this->print_dphi(os);
866 
867  os << "XYZ locations of the quadrature pts." << std::endl;
868  this->print_xyz(os);
869 
870  os << "Values of JxW at the quadrature pts." << std::endl;
871  this->print_JxW(os);
872 }
virtual void print_phi(std::ostream &os) const =0
Prints the value of each shape function at each quadrature point.
virtual void print_dphi(std::ostream &os) const =0
Prints the value of each shape function&#39;s derivative at each quadrature point.
void print_xyz(std::ostream &os) const
Prints the spatial location of each quadrature point (on the physical element).
Definition: fe_abstract.C:853
void print_JxW(std::ostream &os) const
Prints the Jacobian times the weight for each quadrature point.
Definition: fe_abstract.C:846

◆ print_JxW()

void libMesh::FEAbstract::print_JxW ( std::ostream &  os) const
inherited

Prints the Jacobian times the weight for each quadrature point.

Definition at line 846 of file fe_abstract.C.

References libMesh::FEAbstract::_fe_map.

Referenced by libMesh::FEAbstract::print_info().

847 {
848  this->_fe_map->print_JxW(os);
849 }
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ print_phi()

void libMesh::FEGenericBase< FEOutputType< T >::type >::print_phi ( std::ostream &  os) const
overridevirtualinherited

Prints the value of each shape function at each quadrature point.

Implements libMesh::FEAbstract.

Definition at line 876 of file fe_base.C.

References libMesh::index_range().

877 {
878  for (auto i : index_range(phi))
879  for (auto j : index_range(phi[i]))
880  os << " phi[" << i << "][" << j << "]=" << phi[i][j] << std::endl;
881 }
std::vector< std::vector< OutputShape > > phi
Shape function values.
Definition: fe_base.h:614
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ print_xyz()

void libMesh::FEAbstract::print_xyz ( std::ostream &  os) const
inherited

Prints the spatial location of each quadrature point (on the physical element).

Definition at line 853 of file fe_abstract.C.

References libMesh::FEAbstract::_fe_map.

Referenced by libMesh::FEAbstract::print_info().

854 {
855  this->_fe_map->print_xyz(os);
856 }
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654

◆ regular_shape()

Real libMesh::FESubdivision::regular_shape ( const unsigned int  i,
const Real  v,
const Real  w 
)
static
Returns
The value of the \( i^{th} \) of the 12 quartic box splines interpolating a regular Loop subdivision element, evaluated at the barycentric coordinates v, w.

Definition at line 138 of file fe_subdivision_2D.C.

References libMesh::Utility::pow(), and libMesh::Real.

141 {
142  // These are the 12 quartic box splines, see Cirak et al.,
143  // Int. J. Numer. Meth. Engng. 2000; 47:2039-2072, Appendix A.1.
144 
145  const Real u = 1 - v - w;
146  libmesh_assert_less_equal(0, v);
147  libmesh_assert_less_equal(0, w);
148  libmesh_assert_less_equal(0, u);
149 
150  using Utility::pow;
151  const Real factor = 1. / 12;
152 
153  switch (i)
154  {
155  case 0:
156  return factor*(pow<4>(u) + 2*u*u*u*v);
157  case 1:
158  return factor*(pow<4>(u) + 2*u*u*u*w);
159  case 2:
160  return factor*(pow<4>(u) + 2*u*u*u*w + 6*u*u*u*v + 6*u*u*v*w + 12*u*u*v*v + 6*u*v*v*w + 6*u*v*v*v +
161  2*v*v*v*w + pow<4>(v));
162  case 3:
163  return factor*(6*pow<4>(u) + 24*u*u*u*w + 24*u*u*w*w + 8*u*w*w*w + pow<4>(w) + 24*u*u*u*v +
164  60*u*u*v*w + 36*u*v*w*w + 6*v*w*w*w + 24*u*u*v*v + 36*u*v*v*w + 12*v*v*w*w + 8*u*v*v*v +
165  6*v*v*v*w + pow<4>(v));
166  case 4:
167  return factor*(pow<4>(u) + 6*u*u*u*w + 12*u*u*w*w + 6*u*w*w*w + pow<4>(w) + 2*u*u*u*v + 6*u*u*v*w +
168  6*u*v*w*w + 2*v*w*w*w);
169  case 5:
170  return factor*(2*u*v*v*v + pow<4>(v));
171  case 6:
172  return factor*(pow<4>(u) + 6*u*u*u*w + 12*u*u*w*w + 6*u*w*w*w + pow<4>(w) + 8*u*u*u*v + 36*u*u*v*w +
173  36*u*v*w*w + 8*v*w*w*w + 24*u*u*v*v + 60*u*v*v*w + 24*v*v*w*w + 24*u*v*v*v + 24*v*v*v*w + 6*pow<4>(v));
174  case 7:
175  return factor*(pow<4>(u) + 8*u*u*u*w + 24*u*u*w*w + 24*u*w*w*w + 6*pow<4>(w) + 6*u*u*u*v + 36*u*u*v*w +
176  60*u*v*w*w + 24*v*w*w*w + 12*u*u*v*v + 36*u*v*v*w + 24*v*v*w*w + 6*u*v*v*v + 8*v*v*v*w + pow<4>(v));
177  case 8:
178  return factor*(2*u*w*w*w + pow<4>(w));
179  case 9:
180  return factor*(2*v*v*v*w + pow<4>(v));
181  case 10:
182  return factor*(2*u*w*w*w + pow<4>(w) + 6*u*v*w*w + 6*v*w*w*w + 6*u*v*v*w + 12*v*v*w*w + 2*u*v*v*v +
183  6*v*v*v*w + pow<4>(v));
184  case 11:
185  return factor*(pow<4>(w) + 2*v*w*w*w);
186 
187  default:
188  libmesh_error_msg("Invalid i = " << i);
189  }
190 }
T pow(const T &x)
Definition: utility.h:328
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ regular_shape_deriv()

Real libMesh::FESubdivision::regular_shape_deriv ( const unsigned int  i,
const unsigned int  j,
const Real  v,
const Real  w 
)
static
Returns
The \( j^{th} \) derivative of the \( i^{th} \) of the 12 quartic box splines interpolating a regular Loop subdivision element, evaluated at the barycentric coordinates v, w.

Definition at line 194 of file fe_subdivision_2D.C.

References libMesh::Real.

198 {
199  const Real u = 1 - v - w;
200  const Real factor = 1. / 12;
201 
202  switch (j) // j=0: xi-directional derivative, j=1: eta-directional derivative
203  {
204  case 0: // xi derivatives
205  {
206  switch (i) // shape function number
207  {
208  case 0:
209  return factor*(-6*v*u*u - 2*u*u*u);
210  case 1:
211  return factor*(-4*u*u*u - 6*u*u*w);
212  case 2:
213  return factor*(-2*v*v*v - 6*v*v*u + 6*v*u*u + 2*u*u*u);
214  case 3:
215  return factor*(-4*v*v*v - 24*v*v*u - 24*v*u*u - 18*v*v*w - 48*v*u*w - 12*u*u*w -
216  12*v*w*w - 12*u*w*w - 2*w*w*w);
217  case 4:
218  return factor*(-6*v*u*u - 2*u*u*u - 12*v*u*w-12*u*u*w - 6*v*w*w - 18*u*w*w - 4*w*w*w);
219  case 5:
220  return factor*(2*v*v*v + 6*v*v*u);
221  case 6:
222  return factor*(24*v*v*u + 24*v*u*u + 4*u*u*u + 12*v*v*w + 48*v*u*w + 18*u*u*w +
223  12*v*w*w + 12*u*w*w + 2*w*w*w);
224  case 7:
225  return factor*(-2*v*v*v - 6*v*v*u + 6*v*u*u + 2*u*u*u - 12*v*v*w + 12*u*u*w -
226  12*v*w*w + 12*u*w*w);
227  case 8:
228  return -w*w*w/6;
229  case 9:
230  return factor*(4*v*v*v + 6*v*v*w);
231  case 10:
232  return factor*(2*v*v*v + 6*v*v*u + 12*v*v*w + 12*v*u*w + 18*v*w*w + 6*u*w*w + 4*w*w*w);
233  case 11:
234  return w*w*w/6;
235  default:
236  libmesh_error_msg("Invalid i = " << i);
237  }
238  }
239  case 1: // eta derivatives
240  {
241  switch (i) // shape function number
242  {
243  case 0:
244  return factor*(-6*v*u*u - 4*u*u*u);
245  case 1:
246  return factor*(-2*u*u*u - 6*u*u*w);
247  case 2:
248  return factor*(-4*v*v*v - 18*v*v*u - 12*v*u*u - 2*u*u*u - 6*v*v*w - 12*v*u*w -
249  6*u*u*w);
250  case 3:
251  return factor*(-2*v*v*v-12*v*v*u - 12*v*u*u - 12*v*v*w - 48*v*u*w - 24*u*u*w -
252  18*v*w*w - 24*u*w*w - 4*w*w*w);
253  case 4:
254  return factor*(2*u*u*u + 6*u*u*w - 6*u*w*w - 2*w*w*w);
255  case 5:
256  return -v*v*v/6;
257  case 6:
258  return factor*(12*v*v*u + 12*v*u*u + 2*u*u*u - 12*v*v*w + 6*u*u*w - 12*v*w*w -
259  6*u*w*w - 2*w*w*w);
260  case 7:
261  return factor*(2*v*v*v + 12*v*v*u + 18*v*u*u + 4*u*u*u + 12*v*v*w + 48*v*u*w +
262  24*u*u*w + 12*v*w*w + 24*u*w*w);
263  case 8:
264  return factor*(6*u*w*w + 2*w*w*w);
265  case 9:
266  return v*v*v/6;
267  case 10:
268  return factor*(4*v*v*v + 6*v*v*u + 18*v*v*w + 12*v*u*w + 12*v*w*w + 6*u*w*w +
269  2*w*w*w);
270  case 11:
271  return factor*(6*v*w*w + 4*w*w*w);
272  default:
273  libmesh_error_msg("Invalid i = " << i);
274  }
275  }
276  default:
277  libmesh_error_msg("Invalid j = " << j);
278  }
279 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ regular_shape_second_deriv()

Real libMesh::FESubdivision::regular_shape_second_deriv ( const unsigned int  i,
const unsigned int  j,
const Real  v,
const Real  w 
)
static
Returns
The second \( j^{th} \) derivative of the \( i^{th} \) of the 12 quartic box splines interpolating a regular Loop subdivision element, evaluated at the barycentric coordinates v, w.

Definition at line 284 of file fe_subdivision_2D.C.

References libMesh::Real.

288 {
289  const Real u = 1 - v - w;
290  const Real factor = 1. / 12;
291 
292  switch (j)
293  {
294  case 0: // xi-xi derivative
295  {
296  switch (i) // shape function number
297  {
298  case 0:
299  return v*u;
300  case 1:
301  return u*u + u*w;
302  case 2:
303  return -2*v*u;
304  case 3:
305  return v*v - 2*u*u + v*w - 2*u*w;
306  case 4:
307  return v*u + v*w + u*w + w*w;
308  case 5:
309  return v*u;
310  case 6:
311  return factor*(-24*v*v + 12*u*u - 24*v*w + 12*u*w);
312  case 7:
313  return -2*v*u - 2*v*w - 2*u*w - 2*w*w;
314  case 8:
315  return 0.;
316  case 9:
317  return v*v + v*w;
318  case 10:
319  return v*u + v*w + u*w + w*w;
320  case 11:
321  return 0.;
322  default:
323  libmesh_error_msg("Invalid i = " << i);
324  }
325  }
326  case 1: //eta-xi derivative
327  {
328  switch (i)
329  {
330  case 0:
331  return factor*(12*v*u + 6*u*u);
332  case 1:
333  return factor*(6*u*u + 12*u*w);
334  case 2:
335  return factor*(6*v*v - 12*v*u - 6*u*u);
336  case 3:
337  return factor*(6*v*v - 12*u*u + 24*v*w + 6*w*w);
338  case 4:
339  return factor*(-6*u*u - 12*u*w + 6*w*w);
340  case 5:
341  return -v*v/2.;
342  case 6:
343  return factor*(-12*v*v + 6*u*u - 24*v*w - 12*u*w - 6*w*w);
344  case 7:
345  return factor*(-6*v*v - 12*v*u + 6*u*u - 24*v*w - 12*w*w);
346  case 8:
347  return -w*w/2.;
348  case 9:
349  return v*v/2.;
350  case 10:
351  return factor*(6*v*v + 12*v*u + 24*v*w + 12*u*w + 6*w*w);
352  case 11:
353  return w*w/2.;
354  default:
355  libmesh_error_msg("Invalid i = " << i);
356  }
357  }
358  case 2: // eta-eta derivative
359  {
360  switch (i)
361  {
362  case 0:
363  return v*u + u*u;
364  case 1:
365  return u*w;
366  case 2:
367  return v*v + v*u + v*w + u*w;
368  case 3:
369  return -2*v*u - 2*u*u + v*w + w*w;
370  case 4:
371  return -2*u*w;
372  case 5:
373  return 0.;
374  case 6:
375  return -2*v*v - 2*v*u - 2*v*w - 2*u*w;
376  case 7:
377  return v*u + u*u - 2*v*w - 2*w*w;
378  case 8:
379  return u*w;
380  case 9:
381  return 0.;
382  case 10:
383  return v*v + v*u + v*w + u*w;
384  case 11:
385  return v*w + w*w;
386  default:
387  libmesh_error_msg("Invalid i = " << i);
388  }
389  }
390  default:
391  libmesh_error_msg("Invalid j = " << j);
392  }
393 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ reinit() [1/2]

virtual void libMesh::FESubdivision::reinit ( const Elem elem,
const std::vector< Point > *const  pts = nullptr,
const std::vector< Real > *const  weights = nullptr 
)
overridevirtual

This is at the core of this class.

Use this for each new non-ghosted element in the mesh. Reinitializes all the physical element-dependent data based on the current element elem. By default the shape functions and associated data are computed at the quadrature points specified by the quadrature rule qrule, but may be any points specified on the reference element specified in the optional argument pts.

Reimplemented from libMesh::FE< 2, SUBDIVISION >.

◆ reinit() [2/2]

virtual void libMesh::FESubdivision::reinit ( const Elem ,
const unsigned int  ,
const Real  = TOLERANCE,
const std::vector< Point > *  const = nullptr,
const std::vector< Real > *  const = nullptr 
)
inlineoverridevirtual

This prevents some compilers being confused by partially overriding this virtual function.

Reimplemented from libMesh::FE< 2, SUBDIVISION >.

Definition at line 942 of file fe.h.

947  { libmesh_not_implemented(); }

◆ reinit_default_dual_shape_coeffs()

void libMesh::FE< Dim, T >::reinit_default_dual_shape_coeffs ( const Elem elem)
overridevirtualinherited

This computes the default dual shape function coefficients.

The dual shape coefficients are utilized when calculating dual shape functions.

Reimplemented from libMesh::FEAbstract.

Definition at line 394 of file fe.C.

395 {
396  libmesh_assert(elem);
397 
398  FEType default_fe_type(this->get_order(), T);
399  QGauss default_qrule(elem->dim(), default_fe_type.default_quadrature_order());
400  default_qrule.init(*elem);
401  // In preparation of computing dual_coeff, we compute the default shape
402  // function values and use these to compute the dual shape coefficients.
403  // The TRUE dual_phi values are computed in compute_dual_shape_functions()
404  this->reinit_dual_shape_coeffs(elem, default_qrule.get_points(), default_qrule.get_weights());
405  // we do not compute default dual coeff many times as this can be expensive
407 }
Order get_order() const
Definition: fe_abstract.h:525
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
void set_calculate_default_dual_coeff(const bool val)
set calculate_default_dual_coeff as needed
Definition: fe_abstract.h:626
virtual unsigned short dim() const =0
This class implements specific orders of Gauss quadrature.
virtual void init(const Elem &e, unsigned int p_level=invalid_uint)
Initializes the data structures for a quadrature rule for the element e.
Definition: quadrature.C:65
virtual void reinit_dual_shape_coeffs(const Elem *elem, const std::vector< Point > &pts, const std::vector< Real > &JxW) override
This re-computes the dual shape function coefficients.
Definition: fe.C:371

◆ reinit_dual_shape_coeffs()

void libMesh::FE< Dim, T >::reinit_dual_shape_coeffs ( const Elem elem,
const std::vector< Point > &  pts,
const std::vector< Real > &  JxW 
)
overridevirtualinherited

This re-computes the dual shape function coefficients.

The dual shape coefficients are utilized when calculating dual shape functions.

Reimplemented from libMesh::FEAbstract.

Definition at line 371 of file fe.C.

374 {
375  // Set the type and p level for this element
376  this->_elem = elem;
377  this->_elem_type = elem->type();
378  this->_elem_p_level = elem->p_level();
379  this->_p_level = this->_add_p_level_in_reinit * elem->p_level();
380 
381  const unsigned int n_shapes =
382  this->n_dofs(elem, this->get_order());
383 
384  std::vector<std::vector<OutputShape>> phi_vals;
385  phi_vals.resize(n_shapes);
386  for (const auto i : make_range(phi_vals.size()))
387  phi_vals[i].resize(pts.size());
388 
389  all_shapes(elem, this->get_order(), pts, phi_vals);
390  this->compute_dual_shape_coeffs(JxW, phi_vals);
391 }
Order get_order() const
Definition: fe_abstract.h:525
static unsigned int n_dofs(const ElemType t, const Order o)
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:757
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:751
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735
unsigned int p_level() const
Definition: elem.h:3108
void compute_dual_shape_coeffs(const std::vector< Real > &JxW, const std::vector< std::vector< OutputShape >> &phi)
Compute the dual basis coefficients dual_coeff we rely on the JxW (or weights) and the phi values...
Definition: fe_base.h:800
bool _add_p_level_in_reinit
Whether to add p-refinement levels in init/reinit methods.
Definition: fe_abstract.h:787
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
virtual ElemType type() const =0
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740
static void all_shapes(const Elem *elem, const Order o, const std::vector< Point > &p, std::vector< std::vector< OutputShape > > &v, const bool add_p_level=true)
Fills v[i][qp] with the values of the shape functions, evaluated at all points in p...

◆ request_dphi()

virtual void libMesh::FEGenericBase< FEOutputType< T >::type >::request_dphi ( ) const
inlineoverridevirtualinherited

request dphi calculations

Implements libMesh::FEAbstract.

Definition at line 238 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_dphi().

239  { get_dphi(); }
const std::vector< std::vector< OutputGradient > > & get_dphi() const
Definition: fe_base.h:230

◆ request_dual_dphi()

virtual void libMesh::FEGenericBase< FEOutputType< T >::type >::request_dual_dphi ( ) const
inlineoverridevirtualinherited

Implements libMesh::FEAbstract.

Definition at line 241 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_dual_dphi().

242  { get_dual_dphi(); }
const std::vector< std::vector< OutputGradient > > & get_dual_dphi() const
Definition: fe_base.h:234

◆ request_dual_phi()

virtual void libMesh::FEGenericBase< FEOutputType< T >::type >::request_dual_phi ( ) const
inlineoverridevirtualinherited

Implements libMesh::FEAbstract.

Definition at line 223 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_dual_phi().

224  { get_dual_phi(); }
const std::vector< std::vector< OutputShape > > & get_dual_phi() const
Definition: fe_base.h:211

◆ request_phi()

virtual void libMesh::FEGenericBase< FEOutputType< T >::type >::request_phi ( ) const
inlineoverridevirtualinherited

request phi calculations

Implements libMesh::FEAbstract.

Definition at line 220 of file fe_base.h.

References libMesh::FEGenericBase< OutputType >::get_phi().

221  { get_phi(); }
const std::vector< std::vector< OutputShape > > & get_phi() const
Definition: fe_base.h:207

◆ set_calculate_default_dual_coeff()

void libMesh::FEAbstract::set_calculate_default_dual_coeff ( const bool  val)
inlineinherited

set calculate_default_dual_coeff as needed

Definition at line 626 of file fe_abstract.h.

References libMesh::FEAbstract::calculate_default_dual_coeff.

bool calculate_default_dual_coeff
Are we calculating the coefficient for the dual basis using the default qrule?
Definition: fe_abstract.h:676

◆ set_calculate_dual()

void libMesh::FEAbstract::set_calculate_dual ( const bool  val)
inlineinherited

set calculate_dual as needed

Definition at line 621 of file fe_abstract.h.

References libMesh::FEAbstract::calculate_dual.

621 {calculate_dual = val; }
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:671

◆ set_fe_order()

void libMesh::FEAbstract::set_fe_order ( int  new_order)
inlineinherited

Sets the base FE order of the finite element.

Definition at line 531 of file fe_abstract.h.

References libMesh::FEAbstract::fe_type, and libMesh::FEType::order.

531 { fe_type.order = new_order; }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730

◆ shape() [1/195]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 28 of file fe_nedelec_one_shape_3D.C.

33 {
34 #if LIBMESH_DIM == 3
35  libmesh_assert(elem);
36 
37  const Order totalorder = order + add_p_level*elem->p_level();
38  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
39 
40  const char sign = elem->positive_edge_orientation(i) ? 1 : -1;
41 
42  const Real xi = p(0);
43  const Real eta = p(1);
44  const Real zeta = p(2);
45 
46  switch (totalorder)
47  {
48  // linear Nedelec (first kind) shape functions
49  case FIRST:
50  {
51  switch (elem->type())
52  {
53  case HEX20:
54  case HEX27:
55  {
56  // Even with a loose inverse_map tolerance we ought to
57  // be nearly on the element interior in master
58  // coordinates
59  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
60  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
61  libmesh_assert_less_equal ( std::fabs(zeta), 1.0+10*TOLERANCE );
62 
63  switch(i)
64  {
65  case 0:
66  return sign * RealGradient( -0.125*(1.0-eta-zeta+eta*zeta), 0.0, 0.0 );
67  case 1:
68  return sign * RealGradient( 0.0, -0.125*(1.0+xi-zeta-xi*zeta), 0.0 );
69  case 2:
70  return sign * RealGradient( 0.125*(1.0+eta-zeta-eta*zeta), 0.0, 0.0 );
71  case 3:
72  return sign * RealGradient( 0.0, -0.125*(1.0-xi-zeta+xi*zeta), 0.0 );
73  case 4:
74  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0-xi-eta+xi*eta) );
75  case 5:
76  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0+xi-eta-xi*eta) );
77  case 6:
78  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0+xi+eta+xi*eta) );
79  case 7:
80  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0-xi+eta-xi*eta) );
81  case 8:
82  return sign * RealGradient( -0.125*(1.0-eta+zeta-eta*zeta), 0.0, 0.0 );
83  case 9:
84  return sign * RealGradient( 0.0, -0.125*(1.0+xi+zeta+xi*zeta), 0.0 );
85  case 10:
86  return sign * RealGradient( 0.125*(1.0+eta+zeta+eta*zeta), 0.0, 0.0 );
87  case 11:
88  return sign * RealGradient( 0.0, -0.125*(1.0-xi+zeta-xi*zeta), 0.0 );
89 
90  default:
91  libmesh_error_msg("Invalid i = " << i);
92  }
93  }
94 
95  case TET10:
96  case TET14:
97  {
98  switch(i)
99  {
100  case 0:
101  return sign * RealGradient( -1.0+eta+zeta, -xi, -xi );
102  case 1:
103  return sign * RealGradient( eta, -xi, 0.0 );
104  case 2:
105  return sign * RealGradient( -eta, -1.0+xi+zeta, -eta );
106  case 3:
107  return sign * RealGradient( -zeta, -zeta, -1.0+xi+eta );
108  case 4:
109  return sign * RealGradient( zeta, 0.0, -xi );
110  case 5:
111  return sign * RealGradient( 0.0, zeta, -eta );
112 
113  default:
114  libmesh_error_msg("Invalid i = " << i);
115  }
116  }
117 
118  default:
119  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
120  }
121  }
122 
123  // unsupported order
124  default:
125  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
126  }
127 
128 #else // LIBMESH_DIM != 3
129  libmesh_ignore(elem, order, i, p, add_p_level);
130  libmesh_not_implemented();
131 #endif
132 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static constexpr Real TOLERANCE
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape() [2/195]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 28 of file fe_raviart_shape_3D.C.

33 {
34 #if LIBMESH_DIM == 3
35  libmesh_assert(elem);
36 
37  const Order totalorder = order + add_p_level*elem->p_level();
38  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
39 
40  const char sign = elem->positive_face_orientation(i) ? 1 : -1;
41 
42  const Real xi = p(0);
43  const Real eta = p(1);
44  const Real zeta = p(2);
45 
46  switch (totalorder)
47  {
48  // linear Raviart-Thomas shape functions
49  case FIRST:
50  {
51  switch (elem->type())
52  {
53  case HEX27:
54  {
55  // Even with a loose inverse_map tolerance we ought to
56  // be nearly on the element interior in master
57  // coordinates
58  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
59  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
60  libmesh_assert_less_equal ( std::fabs(zeta), 1.0+10*TOLERANCE );
61 
62  switch(i)
63  {
64  case 0:
65  return sign * RealGradient( 0.0, 0.0, 0.125*(zeta-1.0) );
66  case 1:
67  return sign * RealGradient( 0.0, 0.125*(eta-1.0), 0.0 );
68  case 2:
69  return sign * RealGradient( 0.125*(xi+1.0), 0.0, 0.0 );
70  case 3:
71  return sign * RealGradient( 0.0, 0.125*(1.0+eta), 0.0 );
72  case 4:
73  return sign * RealGradient( 0.125*(xi-1.0), 0.0, 0.0 );
74  case 5:
75  return sign * RealGradient( 0.0, 0.0, 0.125*(1.0+zeta) );
76 
77  default:
78  libmesh_error_msg("Invalid i = " << i);
79  }
80  }
81 
82  case TET14:
83  {
84  switch(i)
85  {
86  case 0:
87  return sign * RealGradient( 2.0*xi, 2.0*eta, 2.0*zeta-2.0 );
88  case 1:
89  return sign * RealGradient( 2.0*xi, 2.0*eta-2.0, 2.0*zeta );
90  case 2:
91  return sign * RealGradient( 2.0*xi, 2.0*eta, 2.0*zeta );
92  case 3:
93  return sign * RealGradient( 2.0*xi-2.0, 2.0*eta, 2.0*zeta );
94 
95  default:
96  libmesh_error_msg("Invalid i = " << i);
97  }
98  }
99 
100  default:
101  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
102  }
103  }
104 
105  // unsupported order
106  default:
107  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
108  }
109 
110 #else // LIBMESH_DIM != 3
111  libmesh_ignore(elem, order, i, p, add_p_level);
112  libmesh_not_implemented();
113 #endif
114 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static constexpr Real TOLERANCE
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape() [3/195]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 30 of file fe_raviart_shape_2D.C.

35 {
36  RealGradient ND1 = FE<2,NEDELEC_ONE>::shape(elem, order, i, p, add_p_level);
37  return RealGradient(-ND1(1), ND1(0));
38 }
RealVectorValue RealGradient

◆ shape() [4/195]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 32 of file fe_nedelec_one_shape_2D.C.

37 {
38 #if LIBMESH_DIM > 1
39  libmesh_assert(elem);
40 
41  const Order totalorder = order + add_p_level*elem->p_level();
42  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
43 
44  const char sign = i >= totalorder * elem->n_edges() || elem->positive_edge_orientation(i / totalorder) ? 1 : -1;
45  const unsigned int ii = sign > 0 ? i : (i / totalorder * 2 + 1) * totalorder - 1 - i;
46 
47  const Real xi = p(0);
48  const Real eta = p(1);
49 
50  switch (totalorder)
51  {
52  // linear Nedelec (first kind) shape functions
53  case FIRST:
54  {
55  switch (elem->type())
56  {
57  case QUAD8:
58  case QUAD9:
59  {
60  // Even with a loose inverse_map tolerance we ought to
61  // be nearly on the element interior in master
62  // coordinates
63  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
64  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
65 
66  switch(ii)
67  {
68  case 0:
69  return sign * RealGradient( -0.25*(1.0-eta), 0.0 );
70  case 1:
71  return sign * RealGradient( 0.0, -0.25*(1.0+xi) );
72  case 2:
73  return sign * RealGradient( 0.25*(1.0+eta), 0.0 );
74  case 3:
75  return sign * RealGradient( 0.0, -0.25*(xi-1.0) );
76 
77  default:
78  libmesh_error_msg("Invalid i = " << i);
79  }
80  }
81 
82  case TRI6:
83  case TRI7:
84  {
85  switch(ii)
86  {
87  case 0:
88  return sign * RealGradient( -1.0+eta, -xi );
89  case 1:
90  return sign * RealGradient( eta, -xi );
91  case 2:
92  return sign * RealGradient( eta, -xi+1.0 );
93 
94  default:
95  libmesh_error_msg("Invalid i = " << i);
96  }
97  }
98 
99  default:
100  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
101  }
102  }
103 
104  // quadratic Nedelec (first kind) shape functions
105  case SECOND:
106  {
107  switch (elem->type())
108  {
109  case QUAD8:
110  case QUAD9:
111  {
112  // Even with a loose inverse_map tolerance we ought to
113  // be nearly on the element interior in master
114  // coordinates
115  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
116  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
117 
118  const Real x = 0.5 * (xi + 1.0);
119  const Real y = 0.5 * (eta + 1.0);
120 
121  switch(ii)
122  {
123  case 0:
124  return sign * RealGradient( 0.5*(-18.0*x*y*y+24.0*x*y-6.0*x+12.0*y*y-16.0*y+4.0), 0.0 );
125  case 1:
126  return sign * RealGradient( 0.5*( 18.0*x*y*y-24.0*x*y+6.0*x-6.0*y*y+8.0*y-2.0), 0.0 );
127  case 2:
128  return sign * RealGradient( 0.0, x*(-9.0*x*y+6.0*x+6.0*y-4.0) );
129  case 3:
130  return sign * RealGradient( 0.0, x*( 9.0*x*y-3.0*x-6.0*y+2.0) );
131  case 4:
132  return sign * RealGradient( y*(-9.0*x*y+6.0*x+3.0*y-2.0), 0.0 );
133  case 5:
134  return sign * RealGradient( y*( 9.0*x*y-6.0*x-6.0*y+4.0), 0.0 );
135  case 6:
136  return sign * RealGradient( 0.0, 0.5*(-18.0*x*x*y+6.0*x*x+24.0*x*y-8.0*x-6.0*y+2.0) );
137  case 7:
138  return sign * RealGradient( 0.0, 0.5*( 18.0*x*x*y-12.0*x*x-24.0*x*y+16.0*x+6.0*y-4.0) );
139  case 8:
140  return RealGradient( 0.0, 3.0*x*(3*x*y-2.0*x-3.0*y+2.0) );
141  case 9:
142  return RealGradient( 3.0*y*(-3.0*x*y+3.0*x+2.0*y-2.0), 0.0 );
143  case 10:
144  return RealGradient( 3.0*y*(3.0*x*y-3.0*x-y+1.0), 0.0 );
145  case 11:
146  return RealGradient( 0.0, 3.0*x*(-3.0*x*y+x+3.0*y-1.0) );
147 
148  default:
149  libmesh_error_msg("Invalid i = " << i);
150  }
151  }
152 
153  case TRI6:
154  case TRI7:
155  {
156  switch(ii)
157  {
158  case 0:
159  return sign * RealGradient( 8.0*xi*eta-6.0*xi+8.0*eta*eta-12.0*eta+4.0, 2.0*xi*(-4.0*xi-4.0*eta+3.0) );
160  case 1:
161  return sign * RealGradient( -8.0*xi*eta+6.0*xi+2.0*eta-2.0, 4.0*xi*(2.0*xi-1.0) );
162  case 2:
163  return sign * RealGradient( 2.0*eta*(1.0-4.0*xi), 4.0*xi*(2.0*xi-1.0) );
164  case 3:
165  return sign * RealGradient( 4.0*eta*(1.0-2.0*eta), 2.0*xi*(4.0*eta-1.0) );
166  case 4:
167  return sign * RealGradient( 4.0*eta*(1.0-2.0*eta), 8.0*xi*eta-2.0*xi-6.0*eta+2.0 );
168  case 5:
169  return sign * RealGradient( 2.0*eta*(4.0*xi+4*eta-3.0), -8.0*xi*xi-8.0*xi*eta+12.0*xi+6.0*eta-4.0 );
170  case 6:
171  return RealGradient( 8.0*eta*(-xi-2.0*eta+2.0), 8.0*xi*(xi+2.0*eta-1.0) );
172  case 7:
173  return RealGradient( 8.0*eta*(2.0*xi+eta-1.0), 8.0*xi*(-2.0*xi-eta+2.0) );
174 
175  default:
176  libmesh_error_msg("Invalid i = " << i);
177  }
178  }
179 
180  default:
181  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
182  }
183  }
184 
185  // cubic Nedelec (first kind) shape functions
186  case THIRD:
187  {
188  switch (elem->type())
189  {
190  case QUAD8:
191  case QUAD9:
192  {
193  switch(ii)
194  {
195  case 0:
196  return sign * RealGradient(-81.*eta/4. - 9.*xi + 162.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 135.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 324.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99./4. + 81.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 270.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 45.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
197  case 1:
198  return sign * RealGradient(27.*eta/8. + 15.*xi/4. - 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 135.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 135.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 75.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 51./8. - 27.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 15.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 75.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 15.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2., 0.);
199  case 2:
200  return sign * RealGradient(-27.*eta/4. - 6.*xi + 108.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 135.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 216.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 45./4. + 27.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 270.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 15.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
201  case 3:
202  return sign * RealGradient(0., 27.*xi/4. - 54.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 216.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 45.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 27./4. - 180.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 54.*(xi + 1.)*(xi + 1.)/(2.*2.) + 45.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
203  case 4:
204  return sign * RealGradient(0., -9.*xi/8. + 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 90.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 75.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 45.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 9./8. + 90.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 75.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 9.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 15.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2.);
205  case 5:
206  return sign * RealGradient(0., 9.*xi/4. - 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 144.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 45.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 9./4. - 180.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 18.*(xi + 1.)*(xi + 1.)/(2.*2.) + 15.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
207  case 6:
208  return sign * RealGradient(-9.*eta/4. + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 45.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 144.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 9./4. + 18.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 180.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 15.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
209  case 7:
210  return sign * RealGradient(9.*eta/8. - 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 45.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 90.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 75.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 9./8. - 9.*(eta + 1.)*(eta + 1.)/(2.*2.) - 90.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 75.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 15.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2., 0.);
211  case 8:
212  return sign * RealGradient(-27.*eta/4. + 54.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 45.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 216.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 27./4. + 54.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 180.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 45.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
213  case 9:
214  return sign * RealGradient(0., 6.*eta + 27.*xi/4. - 108.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 216.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 135.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 45./4. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 270.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 27.*(xi + 1.)*(xi + 1.)/(2.*2.) + 15.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
215  case 10:
216  return sign * RealGradient(0., -15.*eta/4. - 27.*xi/8. + 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 135.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 75.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 135.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 51./8. + 15.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 75.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 27.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 15.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2.);
217  case 11:
218  return sign * RealGradient(0., 9.*eta + 81.*xi/4. - 162.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 324.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 135.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 99./4. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 270.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 81.*(xi + 1.)*(xi + 1.)/(2.*2.) + 45.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
219  case 12:
220  return RealGradient(0., 18.*xi - 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 324.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 18. - 270.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 81.*(xi + 1.)*(xi + 1.)/(2.*2.) + 45.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
221  case 13:
222  return RealGradient(0., -9.*xi/2. + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 216.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 30.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 9./2. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 54.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 45.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
223  case 14:
224  return RealGradient(-18.*eta + 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 324.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18. + 81.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 270.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 45.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
225  case 15:
226  return RealGradient(9.*eta/2. - 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 30.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 216.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 9./2. - 54.*(eta + 1.)*(eta + 1.)/(2.*2.) - 180.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 45.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
227  case 16:
228  return RealGradient(-6.*eta + 96.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 216.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 6. + 27.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 270.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 15.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
229  case 17:
230  return RealGradient(3.*eta/2. - 24.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 30.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 144.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3./2. - 18.*(eta + 1.)*(eta + 1.)/(2.*2.) - 180.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 15.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
231  case 18:
232  return RealGradient(0., 6.*xi - 96.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 216.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 6. - 270.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 27.*(xi + 1.)*(xi + 1.)/(2.*2.) + 15.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
233  case 19:
234  return RealGradient(0., -3.*xi/2. + 24.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 144.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 120.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 30.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 3./2. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 15.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
235  case 20:
236  return RealGradient(2.*eta + 2. - 9.*(eta + 1.)*(eta + 1.)/(2.*2.) + 5.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
237  case 21:
238  return RealGradient(0., 2.*xi + 2. - 9.*(xi + 1.)*(xi + 1.)/(2.*2.) + 5.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
239  case 22:
240  return RealGradient(0., -xi/2. - 1./2. + 6.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
241  case 23:
242  return RealGradient(-eta/2. - 1./2. + 6.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 5.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
243  default:
244  libmesh_error_msg("Invalid i = " << i);
245  }
246  }
247 
248  case TRI6:
249  case TRI7:
250  {
251  switch(ii)
252  {
253  case 0:
254  return sign * RealGradient(120.*eta*xi - 54.*eta - 45.*eta*xi*xi - 36.*xi - 90.*xi*eta*eta + 9. + 90.*(eta*eta) + 30.*(xi*xi) - 45.*eta*eta*eta, -60.*eta*xi + 90.*eta*(xi*xi) + 18.*xi + 45.*xi*(eta*eta) - 60.*xi*xi + 45.*(xi*xi*xi));
255  case 1:
256  return sign * RealGradient(-75.*eta*xi/2. - 9.*eta/4. + 45.*eta*(xi*xi)/2. + 15.*xi + 45.*xi*(eta*eta)/2. - 3./2. + 15.*(eta*eta) - 15.*xi*xi - 45.*eta*eta*eta/4., -45.*eta*xi*xi/2. - 21.*xi/4. + 45.*xi*(eta*eta)/4. + 105.*(xi*xi)/4. - 45.*xi*xi*xi/2.);
257  case 2:
258  return sign * RealGradient(30.*eta*xi - 3.*eta - 45.*eta*xi*xi - 24.*xi + 3. + 30.*(xi*xi), 9.*xi - 45.*xi*xi + 45.*(xi*xi*xi));
259  case 3:
260  return sign * RealGradient(30.*eta*xi - 3.*eta - 45.*eta*xi*xi, 9.*xi - 45.*xi*xi + 45.*(xi*xi*xi));
261  case 4:
262  return sign * RealGradient(45.*eta*xi/2. - 6.*eta - 45.*eta*xi*xi/4. - 45.*xi*eta*eta + 75.*(eta*eta)/4. - 45.*eta*eta*eta/4., -45.*eta*xi/2. + 45.*eta*(xi*xi) + 6.*xi + 45.*xi*(eta*eta)/4. - 75.*xi*xi/4. + 45.*(xi*xi*xi)/4.);
263  case 5:
264  return sign * RealGradient(-9.*eta + 45.*(eta*eta) - 45.*eta*eta*eta, -30.*eta*xi + 3.*xi + 45.*xi*(eta*eta));
265  case 6:
266  return sign * RealGradient(-9.*eta + 45.*(eta*eta) - 45.*eta*eta*eta, -30.*eta*xi + 24.*eta + 3.*xi + 45.*xi*(eta*eta) - 3. - 30.*eta*eta);
267  case 7:
268  return sign * RealGradient(21.*eta/4. - 45.*eta*xi*xi/4. + 45.*xi*(eta*eta)/2. - 105.*eta*eta/4. + 45.*(eta*eta*eta)/2., 75.*eta*xi/2. - 15.*eta - 45.*eta*xi*xi/2. + 9.*xi/4. - 45.*xi*eta*eta/2. + 3./2. + 15.*(eta*eta) - 15.*xi*xi + 45.*(xi*xi*xi)/4.);
269  case 8:
270  return sign * RealGradient(60.*eta*xi - 18.*eta - 45.*eta*xi*xi - 90.*xi*eta*eta + 60.*(eta*eta) - 45.*eta*eta*eta, -120.*eta*xi + 36.*eta + 90.*eta*(xi*xi) + 54.*xi + 45.*xi*(eta*eta) - 9. - 30.*eta*eta - 90.*xi*xi + 45.*(xi*xi*xi));
271  case 9:
272  return RealGradient(-300.*eta*xi + 180.*eta + 90.*eta*(xi*xi) + 360.*xi*(eta*eta) - 450.*eta*eta + 270.*(eta*eta*eta), 300.*eta*xi - 360.*eta*xi*xi - 60.*xi - 270.*xi*eta*eta + 150.*(xi*xi) - 90.*xi*xi*xi);
273  case 10:
274  return RealGradient(300.*eta*xi - 60.*eta - 270.*eta*xi*xi - 360.*xi*eta*eta + 150.*(eta*eta) - 90.*eta*eta*eta, -300.*eta*xi + 360.*eta*(xi*xi) + 180.*xi + 90.*xi*(eta*eta) - 450.*xi*xi + 270.*(xi*xi*xi));
275  case 11:
276  return RealGradient(360.*eta*xi - 60.*eta - 180.*eta*xi*xi - 360.*xi*eta*eta + 60.*(eta*eta), -120.*eta*xi + 360.*eta*(xi*xi) + 60.*xi - 240.*xi*xi + 180.*(xi*xi*xi));
277  case 12:
278  return RealGradient(-240.*eta*xi + 30.*eta + 270.*eta*(xi*xi) + 180.*xi*(eta*eta) - 30.*eta*eta, 60.*eta*xi - 180.*eta*xi*xi - 90.*xi + 360.*(xi*xi) - 270.*xi*xi*xi);
279  case 13:
280  return RealGradient(60.*eta*xi - 90.*eta - 180.*xi*eta*eta + 360.*(eta*eta) - 270.*eta*eta*eta, -240.*eta*xi + 180.*eta*(xi*xi) + 30.*xi + 270.*xi*(eta*eta) - 30.*xi*xi);
281  case 14:
282  return RealGradient(-120.*eta*xi + 60.*eta + 360.*xi*(eta*eta) - 240.*eta*eta + 180.*(eta*eta*eta), 360.*eta*xi - 360.*eta*xi*xi - 60.*xi - 180.*xi*eta*eta + 60.*(xi*xi));
283  default:
284  libmesh_error_msg("Invalid i = " << i);
285  }
286  }
287 
288  default:
289  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
290  } // end switch (type)
291  } // end case THIRD
292 
293  // quartic Nedelec (first kind) shape functions
294  case FOURTH:
295  {
296  switch (elem->type())
297  {
298  case QUAD8:
299  case QUAD9:
300  {
301  switch(ii)
302  {
303  case 0:
304  return sign * RealGradient(-64.*eta - 30.*xi + 960.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1920.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1120.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 4800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 86. + 480.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 7200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 120.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 9600.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 640.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 70.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 2450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 280.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
305  case 1:
306  return sign * RealGradient(272.*eta/27. + 95.*xi/9. - 3040.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 6880.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 12320.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 3800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 15200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 6650.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. + 523./27. - 680.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 8600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 15400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 430.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 34400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 15050.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. + 2720.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 61600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 770.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. + 26950.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/27. - 1190.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/27., 0.);
307  case 2:
308  return sign * RealGradient(-128.*eta/27. - 50.*xi/9. + 1600.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 5440.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 12320.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 2000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 8000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 3500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. - 262./27. + 320.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 6800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 15400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 340.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 27200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 11900.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. - 1280.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 61600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 770.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. - 26950.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/27. + 560.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/27., 0.);
309  case 3:
310  return sign * RealGradient(16.*eta + 15.*xi - 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1440.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1050.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 29. - 120.*(eta + 1.)*(eta + 1.)/(2.*2.) - 5400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 90.*(xi + 1.)*(xi + 1.)/(2.*2.) + 7200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 160.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 70.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 2450.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 70.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
311  case 4:
312  return sign * RealGradient(0., -16.*xi + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 480.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 280.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 16. + 3600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 240.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 480.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 280.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
313  case 5:
314  return sign * RealGradient(0., 68.*xi/27. - 760.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 1900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 3800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/3. + 6650.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 1720.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/9. - 3080.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 68./27. - 4300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 8600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/3. - 15050.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 340.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 7700.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 15400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 26950.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/27. + 680.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 1190.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/27.);
315  case 6:
316  return sign * RealGradient(0., -32.*xi/27. + 400.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 1000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 2000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/3. - 3500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 1360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/9. + 3080.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 32./27. + 3400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 6800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/3. + 11900.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 160.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 7700.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 15400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 26950.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/27. - 320.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 560.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/27.);
317  case 7:
318  return sign * RealGradient(0., 4.*xi - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1050.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 280.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4. - 2700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 120.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 70.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
319  case 8:
320  return sign * RealGradient(-4.*eta + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 280.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 1800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1050.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 4. + 60.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 2700.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 5400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3150.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 120.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 70.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
321  case 9:
322  return sign * RealGradient(32.*eta/27. - 400.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 1360.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 3080.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 1000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 2000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/3. + 3500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. + 32./27. - 160.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 3400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7700.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. + 6800.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/3. - 11900.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. + 320.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 15400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 26950.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/27. - 560.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/27., 0.);
323  case 10:
324  return sign * RealGradient(-68.*eta/27. + 760.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 1720.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 3080.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 1900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 3800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/3. - 6650.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. - 68./27. + 340.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 4300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 7700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. - 8600.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/3. + 15050.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. - 680.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 15400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 26950.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/27. + 1190.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/27., 0.);
325  case 11:
326  return sign * RealGradient(16.*eta - 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 480.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 280.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 3600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 16. - 240.*(eta + 1.)*(eta + 1.)/(2.*2.) - 3600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 7200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 480.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 280.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
327  case 12:
328  return sign * RealGradient(0., -15.*eta - 16.*xi + 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1050.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1440.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 1120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 29. + 90.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 5400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 120.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 70.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 160.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 70.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
329  case 13:
330  return sign * RealGradient(0., 50.*eta/9. + 128.*xi/27. - 1600.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 2000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 8000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 3500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 5440.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/9. - 12320.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 262./27. - 340.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 6800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 27200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 11900.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 320.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 15400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. + 770.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 61600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 26950.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/27. + 1280.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 560.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/27.);
331  case 14:
332  return sign * RealGradient(0., -95.*eta/9. - 272.*xi/27. + 3040.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 3800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 15200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 6650.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 6880.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/9. + 12320.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 523./27. + 430.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 8600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 34400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 15050.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 680.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 15400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. - 770.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 61600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 26950.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/27. - 2720.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 1190.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/27.);
333  case 15:
334  return sign * RealGradient(0., 30.*eta + 64.*xi - 960.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1920.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 1120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 86. - 120.*(eta + 1.)*(eta + 1.)/(2.*2.) - 7200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 9600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 480.*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 70.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 640.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 280.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
335  case 16:
336  return RealGradient(0., 52.*xi - 780.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3480.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1560.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 910.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 52. - 6960.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 9600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 464.*(xi + 1.)*(xi + 1.)/(2.*2.) + 4060.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 640.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 280.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
337  case 17:
338  return RealGradient(0., 12.*xi - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1680.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 210.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 12. - 3360.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 224.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1960.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 480.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 280.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
339  case 18:
340  return RealGradient(0., 16.*xi - 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 240.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 480.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 280.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 16. - 480.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 32.*(xi + 1.)*(xi + 1.)/(2.*2.) + 280.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)));
341  case 19:
342  return RealGradient(-52.*eta + 780.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1560.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 910.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3480.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 4800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 52. + 464.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 6960.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4060.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 9600.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 640.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 280.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
343  case 20:
344  return RealGradient(-12.*eta + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 210.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1680.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 3600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 12. + 224.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 3360.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1960.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 7200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 480.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 280.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
345  case 21:
346  return RealGradient(-16.*eta + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 480.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 280.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 240.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 16. + 32.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 480.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 280.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
347  case 22:
348  return RealGradient(13.*eta - 390.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1170.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 910.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1740.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1050.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 13. - 116.*(eta + 1.)*(eta + 1.)/(2.*2.) - 5220.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4060.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 7200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 160.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 70.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
349  case 23:
350  return RealGradient(3.*eta - 90.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 210.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 840.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 1800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1050.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 3. - 56.*(eta + 1.)*(eta + 1.)/(2.*2.) - 2520.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1960.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 5400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 120.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2450.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 70.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
351  case 24:
352  return RealGradient(4.*eta - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 360.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 280.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 4. - 8.*(eta + 1.)*(eta + 1.)/(2.*2.) - 360.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 280.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
353  case 25:
354  return RealGradient(0., -13.*xi + 390.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1740.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1050.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1170.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 910.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 13. + 5220.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 116.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4060.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 160.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 70.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
355  case 26:
356  return RealGradient(0., -3.*xi + 90.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 840.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1050.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 210.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3. + 2520.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 56.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1960.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 120.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 70.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
357  case 27:
358  return RealGradient(0., -4.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 280.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4. + 360.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 8.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 280.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.));
359  case 28:
360  return RealGradient(12.*eta - 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 171.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 240.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 105.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 12. - 114.*(eta + 1.)*(eta + 1.)/(2.*2.) + 160.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 70.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
361  case 29:
362  return RealGradient(-6.*eta + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 171.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 240.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 105.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 6. + 57.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 80.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 35.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
363  case 30:
364  return RealGradient(0., 12.*xi - 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 171.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 240.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 105.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 12. - 114.*(xi + 1.)*(xi + 1.)/(2.*2.) + 160.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 70.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
365  case 31:
366  return RealGradient(0., -6.*xi + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 171.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 240.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 105.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 6. + 57.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 80.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 35.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
367  case 32:
368  return RealGradient(0., 2.*xi - 6.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 81.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 105.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 2. - 54.*(xi + 1.)*(xi + 1.)/(2.*2.) + 120.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 70.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
369  case 33:
370  return RealGradient(0., -xi + 6.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 81.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 105.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1. + 27.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 60.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 35.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
371  case 34:
372  return RealGradient(2.*eta - 6.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 81.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 105.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 2. - 54.*(eta + 1.)*(eta + 1.)/(2.*2.) + 120.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 70.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
373  case 35:
374  return RealGradient(-eta + 6.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 81.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 105.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 1. + 27.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 60.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 35.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
375  case 36:
376  return RealGradient(0., 6.*xi - 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 18.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 6. - 12.*(xi + 1.)*(xi + 1.)/(2.*2.));
377  case 37:
378  return RealGradient(-6.*eta + 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 18.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 6. + 12.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
379  case 38:
380  return RealGradient(3.*eta - 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 18.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 3. - 6.*(eta + 1.)*(eta + 1.)/(2.*2.), 0.);
381  case 39:
382  return RealGradient(0., -3.*xi + 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 18.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 3. + 6.*((xi + 1.)*(xi + 1.)/(2.*2.)));
383  default:
384  libmesh_error_msg("Invalid i = " << i);
385  }
386  }
387 
388  case TRI6:
389  case TRI7:
390  {
391  switch(ii)
392  {
393  case 0:
394  return sign * RealGradient(720.*eta*xi - 160.*eta - 840.*eta*xi*xi + 224.*eta*(xi*xi*xi) - 120.*xi - 1260.*xi*eta*eta + 672.*xi*(eta*eta*eta) + 16. + 480.*(eta*eta) + 672.*(eta*eta)*(xi*xi) + 240.*(xi*xi) - 560.*eta*eta*eta - 140.*xi*xi*xi + 224.*(eta*eta*eta*eta), -240.*eta*xi + 840.*eta*(xi*xi) - 672.*eta*xi*xi*xi + 40.*xi + 420.*xi*(eta*eta) - 224.*xi*eta*eta*eta - 672.*eta*eta*xi*xi - 240.*xi*xi + 420.*(xi*xi*xi) - 224.*xi*xi*xi*xi);
395  case 1:
396  return sign * RealGradient(-200.*eta*xi - 76.*eta/27. + 2884.*eta*(xi*xi)/9. - 2464.*eta*xi*xi*xi/27. + 380.*xi/9. + 784.*xi*(eta*eta)/3. - 896.*xi*eta*eta*eta/9. - 68./27. + 608.*(eta*eta)/9. - 2240.*eta*eta*xi*xi/9. - 860.*xi*xi/9. - 3472.*eta*eta*eta/27. + 1540.*(xi*xi*xi)/27. + 1792.*(eta*eta*eta*eta)/27., 176.*eta*xi/9. - 2128.*eta*xi*xi/9. + 2240.*eta*(xi*xi*xi)/9. - 296.*xi/27. + 448.*xi*(eta*eta)/9. - 1792.*xi*eta*eta*eta/27. + 896.*(eta*eta)*(xi*xi)/9. + 800.*(xi*xi)/9. - 168.*xi*xi*xi + 2464.*(xi*xi*xi*xi)/27.);
397  case 2:
398  return sign * RealGradient(-16.*eta*xi + 112.*eta/27. - 1120.*eta*xi*xi/9. + 2464.*eta*(xi*xi*xi)/27. - 200.*xi/9. + 476.*xi*(eta*eta)/3. - 1120.*xi*eta*eta*eta/9. + 32./27. - 104.*eta*eta/9. + 224.*(eta*eta)*(xi*xi)/9. + 680.*(xi*xi)/9. - 56.*eta*eta*eta/27. - 1540.*xi*xi*xi/27. + 224.*(eta*eta*eta*eta)/27., 112.*eta*xi/9. - 392.*eta*xi*xi/9. - 224.*eta*xi*xi*xi/9. + 152.*xi/27. - 196.*xi*eta*eta/9. - 224.*xi*eta*eta*eta/27. + 1120.*(eta*eta)*(xi*xi)/9. - 512.*xi*xi/9. + 140.*(xi*xi*xi) - 2464.*xi*xi*xi*xi/27.);
399  case 3:
400  return sign * RealGradient(-72.*eta*xi + 4.*eta + 252.*eta*(xi*xi) - 224.*eta*xi*xi*xi + 60.*xi - 4. - 180.*xi*xi + 140.*(xi*xi*xi), -16.*xi + 144.*(xi*xi) - 336.*xi*xi*xi + 224.*(xi*xi*xi*xi));
401  case 4:
402  return sign * RealGradient(-72.*eta*xi + 4.*eta + 252.*eta*(xi*xi) - 224.*eta*xi*xi*xi, -16.*xi + 144.*(xi*xi) - 336.*xi*xi*xi + 224.*(xi*xi*xi*xi));
403  case 5:
404  return sign * RealGradient(-80.*eta*xi + 8.*eta + 448.*eta*(xi*xi)/3. - 1792.*eta*xi*xi*xi/27. + 784.*xi*(eta*eta)/3. - 448.*xi*eta*eta*eta/3. - 32.*eta*eta - 896.*eta*eta*xi*xi/3. + 280.*(eta*eta*eta)/9. - 224.*eta*eta*eta*eta/27., 56.*eta*xi - 896.*eta*xi*xi/3. + 896.*eta*(xi*xi*xi)/3. - 12.*xi - 140.*xi*eta*eta/3. + 224.*xi*(eta*eta*eta)/27. + 448.*(eta*eta)*(xi*xi)/3. + 80.*(xi*xi) - 1232.*xi*xi*xi/9. + 1792.*(xi*xi*xi*xi)/27.);
405  case 6:
406  return sign * RealGradient(-56.*eta*xi + 12.*eta + 140.*eta*(xi*xi)/3. - 224.*eta*xi*xi*xi/27. + 896.*xi*(eta*eta)/3. - 896.*xi*eta*eta*eta/3. - 80.*eta*eta - 448.*eta*eta*xi*xi/3. + 1232.*(eta*eta*eta)/9. - 1792.*eta*eta*eta*eta/27., 80.*eta*xi - 784.*eta*xi*xi/3. + 448.*eta*(xi*xi*xi)/3. - 8.*xi - 448.*xi*eta*eta/3. + 1792.*xi*(eta*eta*eta)/27. + 896.*(eta*eta)*(xi*xi)/3. + 32.*(xi*xi) - 280.*xi*xi*xi/9. + 224.*(xi*xi*xi*xi)/27.);
407  case 7:
408  return sign * RealGradient(16.*eta - 144.*eta*eta + 336.*(eta*eta*eta) - 224.*eta*eta*eta*eta, 72.*eta*xi - 4.*xi - 252.*xi*eta*eta + 224.*xi*(eta*eta*eta));
409  case 8:
410  return sign * RealGradient(16.*eta - 144.*eta*eta + 336.*(eta*eta*eta) - 224.*eta*eta*eta*eta, 72.*eta*xi - 60.*eta - 4.*xi - 252.*xi*eta*eta + 224.*xi*(eta*eta*eta) + 4. + 180.*(eta*eta) - 140.*eta*eta*eta);
411  case 9:
412  return sign * RealGradient(-112.*eta*xi/9. - 152.*eta/27. + 196.*eta*(xi*xi)/9. + 224.*eta*(xi*xi*xi)/27. + 392.*xi*(eta*eta)/9. + 224.*xi*(eta*eta*eta)/9. + 512.*(eta*eta)/9. - 1120.*eta*eta*xi*xi/9. - 140.*eta*eta*eta + 2464.*(eta*eta*eta*eta)/27., 16.*eta*xi + 200.*eta/9. - 476.*eta*xi*xi/3. + 1120.*eta*(xi*xi*xi)/9. - 112.*xi/27. + 1120.*xi*(eta*eta)/9. - 2464.*xi*eta*eta*eta/27. - 32./27. - 680.*eta*eta/9. - 224.*eta*eta*xi*xi/9. + 104.*(xi*xi)/9. + 1540.*(eta*eta*eta)/27. + 56.*(xi*xi*xi)/27. - 224.*xi*xi*xi*xi/27.);
413  case 10:
414  return sign * RealGradient(-176.*eta*xi/9. + 296.*eta/27. - 448.*eta*xi*xi/9. + 1792.*eta*(xi*xi*xi)/27. + 2128.*xi*(eta*eta)/9. - 2240.*xi*eta*eta*eta/9. - 800.*eta*eta/9. - 896.*eta*eta*xi*xi/9. + 168.*(eta*eta*eta) - 2464.*eta*eta*eta*eta/27., 200.*eta*xi - 380.*eta/9. - 784.*eta*xi*xi/3. + 896.*eta*(xi*xi*xi)/9. + 76.*xi/27. - 2884.*xi*eta*eta/9. + 2464.*xi*(eta*eta*eta)/27. + 68./27. + 860.*(eta*eta)/9. + 2240.*(eta*eta)*(xi*xi)/9. - 608.*xi*xi/9. - 1540.*eta*eta*eta/27. + 3472.*(xi*xi*xi)/27. - 1792.*xi*xi*xi*xi/27.);
415  case 11:
416  return sign * RealGradient(240.*eta*xi - 40.*eta - 420.*eta*xi*xi + 224.*eta*(xi*xi*xi) - 840.*xi*eta*eta + 672.*xi*(eta*eta*eta) + 240.*(eta*eta) + 672.*(eta*eta)*(xi*xi) - 420.*eta*eta*eta + 224.*(eta*eta*eta*eta), -720.*eta*xi + 120.*eta + 1260.*eta*(xi*xi) - 672.*eta*xi*xi*xi + 160.*xi + 840.*xi*(eta*eta) - 224.*xi*eta*eta*eta - 16. - 240.*eta*eta - 672.*eta*eta*xi*xi - 480.*xi*xi + 140.*(eta*eta*eta) + 560.*(xi*xi*xi) - 224.*xi*xi*xi*xi);
417  case 12:
418  return RealGradient(-3240.*eta*xi + 960.*eta + 3024.*eta*(xi*xi) - 672.*eta*xi*xi*xi + 9072.*xi*(eta*eta) - 6048.*xi*eta*eta*eta - 4320.*eta*eta - 4032.*eta*eta*xi*xi + 6048.*(eta*eta*eta) - 2688.*eta*eta*eta*eta, 2160.*eta*xi - 6048.*eta*xi*xi + 4032.*eta*(xi*xi*xi) - 240.*xi - 4536.*xi*eta*eta + 2688.*xi*(eta*eta*eta) + 6048.*(eta*eta)*(xi*xi) + 1080.*(xi*xi) - 1512.*xi*xi*xi + 672.*(xi*xi*xi*xi));
419  case 13:
420  return RealGradient(2160.*eta*xi - 240.*eta - 4536.*eta*xi*xi + 2688.*eta*(xi*xi*xi) - 6048.*xi*eta*eta + 4032.*xi*(eta*eta*eta) + 1080.*(eta*eta) + 6048.*(eta*eta)*(xi*xi) - 1512.*eta*eta*eta + 672.*(eta*eta*eta*eta), -3240.*eta*xi + 9072.*eta*(xi*xi) - 6048.*eta*xi*xi*xi + 960.*xi + 3024.*xi*(eta*eta) - 672.*xi*eta*eta*eta - 4032.*eta*eta*xi*xi - 4320.*xi*xi + 6048.*(xi*xi*xi) - 2688.*xi*xi*xi*xi);
421  case 14:
422  return RealGradient(-1944.*eta*xi + 144.*eta + 4536.*eta*(xi*xi) - 2016.*eta*xi*xi*xi + 2016.*xi*(eta*eta) - 144.*eta*eta - 4032.*eta*eta*xi*xi, 432.*eta*xi - 3024.*eta*xi*xi + 4032.*eta*(xi*xi*xi) - 216.*xi + 1728.*(xi*xi) - 3528.*xi*xi*xi + 2016.*(xi*xi*xi*xi));
423  case 15:
424  return RealGradient(1152.*eta*xi - 72.*eta - 3528.*eta*xi*xi + 2688.*eta*(xi*xi*xi) - 1008.*xi*eta*eta + 72.*(eta*eta) + 2016.*(eta*eta)*(xi*xi), -216.*eta*xi + 1512.*eta*(xi*xi) - 2016.*eta*xi*xi*xi + 288.*xi - 2304.*xi*xi + 4704.*(xi*xi*xi) - 2688.*xi*xi*xi*xi);
425  case 16:
426  return RealGradient(-216.*eta*xi + 288.*eta + 1512.*xi*(eta*eta) - 2016.*xi*eta*eta*eta - 2304.*eta*eta + 4704.*(eta*eta*eta) - 2688.*eta*eta*eta*eta, 1152.*eta*xi - 1008.*eta*xi*xi - 72.*xi - 3528.*xi*eta*eta + 2688.*xi*(eta*eta*eta) + 2016.*(eta*eta)*(xi*xi) + 72.*(xi*xi));
427  case 17:
428  return RealGradient(432.*eta*xi - 216.*eta - 3024.*xi*eta*eta + 4032.*xi*(eta*eta*eta) + 1728.*(eta*eta) - 3528.*eta*eta*eta + 2016.*(eta*eta*eta*eta), -1944.*eta*xi + 2016.*eta*(xi*xi) + 144.*xi + 4536.*xi*(eta*eta) - 2016.*xi*eta*eta*eta - 4032.*eta*eta*xi*xi - 144.*xi*xi);
429  case 18:
430  return RealGradient(-1332.*eta*xi + 216.*eta + 1638.*eta*(xi*xi) - 504.*eta*xi*xi*xi + 4788.*xi*(eta*eta) - 3528.*xi*eta*eta*eta - 1098.*eta*eta - 3024.*eta*eta*xi*xi + 1554.*(eta*eta*eta) - 672.*eta*eta*eta*eta, 1044.*eta*xi - 4032.*eta*xi*xi + 3024.*eta*(xi*xi*xi) - 144.*xi - 1638.*xi*eta*eta + 672.*xi*(eta*eta*eta) + 3528.*(eta*eta)*(xi*xi) + 774.*(xi*xi) - 1134.*xi*xi*xi + 504.*(xi*xi*xi*xi));
431  case 19:
432  return RealGradient(1044.*eta*xi - 144.*eta - 1638.*eta*xi*xi + 672.*eta*(xi*xi*xi) - 4032.*xi*eta*eta + 3024.*xi*(eta*eta*eta) + 774.*(eta*eta) + 3528.*(eta*eta)*(xi*xi) - 1134.*eta*eta*eta + 504.*(eta*eta*eta*eta), -1332.*eta*xi + 4788.*eta*(xi*xi) - 3528.*eta*xi*xi*xi + 216.*xi + 1638.*xi*(eta*eta) - 504.*xi*eta*eta*eta - 3024.*eta*eta*xi*xi - 1098.*xi*xi + 1554.*(xi*xi*xi) - 672.*xi*xi*xi*xi);
433  case 20:
434  return RealGradient(-216.*eta*xi - 48.*eta + 504.*eta*(xi*xi) - 168.*eta*xi*xi*xi - 756.*xi*eta*eta + 1008.*xi*(eta*eta*eta) + 720.*(eta*eta) - 1344.*eta*eta*eta + 672.*(eta*eta*eta*eta), -360.*eta*xi + 504.*eta*(xi*xi) + 12.*xi + 1008.*xi*(eta*eta) - 672.*xi*eta*eta*eta - 1008.*eta*eta*xi*xi + 72.*(xi*xi) - 252.*xi*xi*xi + 168.*(xi*xi*xi*xi));
435  case 21:
436  return RealGradient(-216.*eta*xi + 66.*eta - 378.*eta*xi*xi + 672.*eta*(xi*xi*xi) + 2268.*xi*(eta*eta) - 2016.*xi*eta*eta*eta - 486.*eta*eta - 1512.*eta*eta*xi*xi + 756.*(eta*eta*eta) - 336.*eta*eta*eta*eta, 1188.*eta*xi - 2772.*eta*xi*xi + 1512.*eta*(xi*xi*xi) + 6.*xi - 1512.*xi*eta*eta + 336.*xi*(eta*eta*eta) + 2016.*(eta*eta)*(xi*xi) - 468.*xi*xi + 1134.*(xi*xi*xi) - 672.*xi*xi*xi*xi);
437  case 22:
438  return RealGradient(1188.*eta*xi + 6.*eta - 1512.*eta*xi*xi + 336.*eta*(xi*xi*xi) - 2772.*xi*eta*eta + 1512.*xi*(eta*eta*eta) - 468.*eta*eta + 2016.*(eta*eta)*(xi*xi) + 1134.*(eta*eta*eta) - 672.*eta*eta*eta*eta, -216.*eta*xi + 2268.*eta*(xi*xi) - 2016.*eta*xi*xi*xi + 66.*xi - 378.*xi*eta*eta + 672.*xi*(eta*eta*eta) - 1512.*eta*eta*xi*xi - 486.*xi*xi + 756.*(xi*xi*xi) - 336.*xi*xi*xi*xi);
439  case 23:
440  return RealGradient(-360.*eta*xi + 12.*eta + 1008.*eta*(xi*xi) - 672.*eta*xi*xi*xi + 504.*xi*(eta*eta) + 72.*(eta*eta) - 1008.*eta*eta*xi*xi - 252.*eta*eta*eta + 168.*(eta*eta*eta*eta), -216.*eta*xi - 756.*eta*xi*xi + 1008.*eta*(xi*xi*xi) - 48.*xi + 504.*xi*(eta*eta) - 168.*xi*eta*eta*eta + 720.*(xi*xi) - 1344.*xi*xi*xi + 672.*(xi*xi*xi*xi));
441  default:
442  libmesh_error_msg("Invalid i = " << i);
443  }
444  }
445 
446  default:
447  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
448  } // end switch (type)
449  } // end case FOURTH
450 
451  // quintic Nedelec (first kind) shape functions
452  case FIFTH:
453  {
454  switch (elem->type())
455  {
456  case QUAD8:
457  case QUAD9:
458  {
459  switch(ii)
460  {
461  case 0:
462  return sign * RealGradient(-625.*eta/4. - 75.*xi + 3750.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 13125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 17500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 7875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 22500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 52500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 52500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 875./4. + 1875.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 78750.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 105000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 47250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 525.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 183750.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 183750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 66150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 4375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 245000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 110250.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 700.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 245000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 88200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 4375.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 110250.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 315.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
463  case 1:
464  return sign * RealGradient(12125.*eta/512. + 2865.*xi/128. - 71625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. + 527625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 340375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 291375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 214875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/32. - 501375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 501375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. - 180495.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. + 22615./512. - 36375.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 1582875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 1021125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 874125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 21105.*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 3693375.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 3693375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 1329615.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 84875.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 2382625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 13615.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. + 2382625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. - 857745.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. - 84875.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 11655.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 30555.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/128., 0.);
465  case 2:
466  return sign * RealGradient(-375.*eta/32. - 105.*xi/8. + 2625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/4. - 28875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 23625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 23625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 7875.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 18375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 18375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 6615.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/2. - 765./32. + 1125.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 86625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 70875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 70875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 1155.*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 202125.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 202125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 72765.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/4. - 2625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. - 165375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 59535.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/2. + 2625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. - 59535.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/4. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/8., 0.);
467  case 3:
468  return sign * RealGradient(2125.*eta/512. + 705.*xi/128. - 17625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. + 233625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 242375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 291375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 52875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/32. - 123375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 123375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. - 44415.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. + 4775./512. - 6375.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 700875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 727125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 874125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 9345.*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 1635375.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 1635375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 588735.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 14875.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 1696625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 9695.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. + 1696625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. - 610785.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. - 14875.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 11655.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 5355.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/128., 0.);
469  case 4:
470  return sign * RealGradient(-125.*eta/4. - 30.*xi + 1500.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 7875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 14000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 7875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 9000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 21000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 21000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7560.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 235./4. + 375.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 47250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 84000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 47250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 315.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 110250.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 110250.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 196000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 110250.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 560.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 196000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 70560.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 110250.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 315.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 315.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
471  case 5:
472  return sign * RealGradient(0., 125.*xi/4. - 750.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 9000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 31500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 42000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 2625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 3500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1575.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 125./4. - 31500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 110250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 147000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 66150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 750.*(xi + 1.)*(xi + 1.)/(2.*2.) + 42000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18900.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 147000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 196000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 2625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 66150.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 3500.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
473  case 6:
474  return sign * RealGradient(0., -2425.*xi/512. + 14325.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. - 42975.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/16. + 300825.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 100275.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. + 180495.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 105525.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/128. + 68075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 58275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. - 2425./512. + 316575.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 2216025.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 738675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16. - 1329615.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 7275.*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 204225.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/16. + 174825.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. + 1429575.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 476525.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. + 857745.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 50925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 1223775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 407925.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 16975.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/32. - 30555.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/128.);
475  case 7:
476  return sign * RealGradient(0., 75.*xi/32. - 525.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/4. + 1575.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 11025.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 7350.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 6615.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/2. + 5775.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/8. - 4725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. + 75./32. - 17325.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 121275.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 40425.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 72765.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/4. - 225.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 14175.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 66150.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 59535.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/2. + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 33075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 59535.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/4. - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/8.);
477  case 8:
478  return sign * RealGradient(0., -425.*xi/512. + 3525.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. - 10575.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/16. + 74025.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 24675.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. + 44415.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 46725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/128. + 48475.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 58275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. - 425./512. + 140175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 981225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 327075.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16. - 588735.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 1275.*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 145425.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/16. + 174825.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. + 1017975.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 339325.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. + 610785.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 8925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 1223775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 407925.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 2975.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/32. - 5355.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/128.);
479  case 9:
480  return sign * RealGradient(0., 25.*xi/4. - 300.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 12600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 16800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 7560.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 1575.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1575.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 25./4. - 18900.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 66150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 88200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.) + 33600.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18900.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 117600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 156800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 70560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 66150.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 700.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 315.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
481  case 10:
482  return sign * RealGradient(-25.*eta/4. + 300.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1575.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1575.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 3600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 12600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 16800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7560.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 25./4. + 150.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 18900.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 33600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18900.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 66150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 88200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 117600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 66150.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 156800.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 70560.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 700.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 88200.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 315.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
483  case 11:
484  return sign * RealGradient(425.*eta/512. - 3525.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. + 46725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 48475.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 58275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 10575.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/16. - 74025.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 24675.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 44415.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. + 425./512. - 1275.*(eta + 1.)*(eta + 1.)/(2.*2.)/64. - 140175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 145425.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 174825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. + 981225.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 327075.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/16. + 588735.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 8925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 1017975.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 1223775.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 339325.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 610785.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. - 2975.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/32. - 407925.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 5355.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/128., 0.);
485  case 12:
486  return sign * RealGradient(-75.*eta/32. + 525.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/4. - 5775.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 4725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 1575.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 11025.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 7350.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 6615.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/2. - 75./32. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 17325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 14175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. - 121275.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 40425.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 72765.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/4. - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 66150.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 59535.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/2. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 33075.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 59535.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/4. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/8., 0.);
487  case 13:
488  return sign * RealGradient(2425.*eta/512. - 14325.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. + 105525.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 68075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 58275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 42975.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/16. - 300825.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 100275.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 180495.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. + 2425./512. - 7275.*(eta + 1.)*(eta + 1.)/(2.*2.)/64. - 316575.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 204225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 174825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. + 2216025.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 738675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/16. + 1329615.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 50925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 1429575.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 1223775.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 476525.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 857745.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/32. - 16975.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/32. - 407925.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. + 30555.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/128., 0.);
489  case 14:
490  return sign * RealGradient(-125.*eta/4. + 750.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 3500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1575.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 9000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 31500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 42000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 125./4. + 750.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 31500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 42000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18900.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 110250.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 147000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 66150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 2625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 147000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 66150.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 196000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 88200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 3500.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 88200.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
491  case 15:
492  return sign * RealGradient(0., 30.*eta + 125.*xi/4. - 1500.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 9000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 21000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 21000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 7560.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 7875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 14000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 7875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 235./4. - 315.*(eta + 1.)*(eta + 1.)/(2.*2.) - 47250.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 110250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 110250.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 375.*(xi + 1.)*(xi + 1.)/(2.*2.) + 84000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 47250.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 196000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 196000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 70560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 875.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 110250.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 315.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 110250.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 315.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
493  case 16:
494  return sign * RealGradient(0., -705.*eta/128. - 2125.*xi/512. + 17625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. - 52875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 123375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 123375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. + 44415.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 233625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/128. + 242375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 291375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. - 4775./512. + 9345.*((eta + 1.)*(eta + 1.)/(2.*2.))/128. + 700875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 1635375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 1635375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. - 588735.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 6375.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 727125.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 874125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 9695.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 1696625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 1696625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. + 610785.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 14875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 2039625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 11655.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 14875.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. - 5355.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/128.);
495  case 17:
496  return sign * RealGradient(0., 105.*eta/8. + 375.*xi/32. - 2625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/4. + 7875.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 18375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 18375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. - 6615.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/2. + 28875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/8. - 23625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 23625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. + 765./32. - 1155.*(eta + 1.)*(eta + 1.)/(2.*2.)/8. - 86625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 202125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 202125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. + 72765.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/4. - 1125.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 70875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 70875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. - 59535.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/2. + 2625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. + 165375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. + 59535.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/4. - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/8.);
497  case 18:
498  return sign * RealGradient(0., -2865.*eta/128. - 12125.*xi/512. + 71625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. - 214875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 501375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 501375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. + 180495.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 527625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/128. + 340375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 291375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. - 22615./512. + 21105.*((eta + 1.)*(eta + 1.)/(2.*2.))/128. + 1582875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 3693375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 3693375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. - 1329615.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 36375.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 1021125.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 874125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 13615.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 2382625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 2382625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. + 857745.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/32. - 84875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 2039625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 11655.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 84875.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. - 30555.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/128.);
499  case 19:
500  return sign * RealGradient(0., 75.*eta + 625.*xi/4. - 3750.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 22500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 52500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 52500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 13125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 17500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 7875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 875./4. - 525.*(eta + 1.)*(eta + 1.)/(2.*2.) - 78750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 183750.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 183750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 66150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 1875.*(xi + 1.)*(xi + 1.)/(2.*2.) + 105000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 47250.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 700.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 245000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 245000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 4375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 110250.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 315.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 110250.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 4375.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
501  case 20:
502  return RealGradient(0., 975.*xi/8. - 2925.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 21150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 51825.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 52500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 20475.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 13650.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 12285.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 975./8. - 74025.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 362775.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 183750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 66150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 3525.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 98700.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 44415.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 241850.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 245000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 17275.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. + 217665.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. - 110250.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 4375.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
503  case 21:
504  return RealGradient(0., -25.*xi + 600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 8325.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 30825.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 42000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 18900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1260.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 25. + 58275.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 215775.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 147000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 66150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 2775.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 38850.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 34965.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 143850.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 196000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 88200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 10275.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. - 129465.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 88200.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 3500.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
505  case 22:
506  return RealGradient(0., 225.*xi/4. - 1350.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2025.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 6300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2835.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 225./4. - 23625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 1125.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 15750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 9450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 675.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. + 8505.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2.);
507  case 23:
508  return RealGradient(0., -225.*xi/8. + 675.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2700.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2025.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 3150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2835.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 225./8. + 9450.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 14175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 225.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 12600.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5670.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 675.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. - 8505.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2.);
509  case 24:
510  return RealGradient(-975.*eta/8. + 2925.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 20475.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 13650.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 12285.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 21150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 51825.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 52500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 975./8. + 3525.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 74025.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 98700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 44415.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 362775.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 183750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 66150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 17275.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 241850.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 217665.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 245000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 88200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 4375.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 110250.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
511  case 25:
512  return RealGradient(25.*eta - 600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1260.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 8325.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 30825.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 42000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 18900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 25. - 2775.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 58275.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 38850.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 34965.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. + 215775.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 147000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 66150.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 10275.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 143850.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 129465.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 196000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 88200.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 3500.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
513  case 26:
514  return RealGradient(-225.*eta/4. + 1350.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 3375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2025.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 225./4. + 1125.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 23625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 15750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 675.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
515  case 27:
516  return RealGradient(225.*eta/8. - 675.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 4725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 3150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 2700.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2025.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 225./8. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.) - 9450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 12600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5670.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 14175.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. + 675.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 9450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2., 0.);
517  case 28:
518  return RealGradient(-195.*eta/8. + 1170.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 12285.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 10920.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 12285.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 8460.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 20730.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 21000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7560.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 195./8. + 705.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 44415.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 78960.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 44415.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 217665.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 110250.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 3455.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 193480.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 217665.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 196000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 70560.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 110250.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 315.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
519  case 29:
520  return RealGradient(5.*eta - 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1260.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2240.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1260.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 3330.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 12330.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 16800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 7560.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 5. - 555.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 34965.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 31080.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 34965.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. + 129465.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 88200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 39690.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 2055.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 115080.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 129465.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 156800.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 70560.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 700.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 88200.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 315.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
521  case 30:
522  return RealGradient(-45.*eta/4. + 540.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2835.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5040.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1350.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 810.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 45./4. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 12600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. - 8505.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 135.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 7560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
523  case 31:
524  return RealGradient(45.*eta/8. - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2835.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 2520.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 1080.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 810.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 45./8. - 45.*(eta + 1.)*(eta + 1.)/(2.*2.) - 5670.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 10080.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5670.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 8505.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. + 135.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 7560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2., 0.);
525  case 32:
526  return RealGradient(0., 195.*xi/8. - 1170.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 8460.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 20730.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 21000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 7560.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 12285.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 10920.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 12285.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 195./8. - 44415.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 217665.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 110250.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 705.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 78960.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 44415.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 193480.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 196000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 70560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 3455.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. + 217665.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. - 110250.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 315.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
527  case 33:
528  return RealGradient(0., -5.*xi + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3330.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 12330.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 16800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 7560.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 1260.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2240.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1260.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 5. + 34965.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 129465.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 88200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 555.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 31080.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 34965.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 115080.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 156800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 70560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 2055.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. - 129465.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 88200.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 700.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 315.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
529  case 34:
530  return RealGradient(0., 45.*xi/4. - 540.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1350.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 810.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 5040.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2835.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 45./4. - 14175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 8505.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 225.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 12600.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 7560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 135.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. + 8505.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2.);
531  case 35:
532  return RealGradient(0., -45.*xi/8. + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1080.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 810.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 2520.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2835.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 45./8. + 5670.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8505.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 45.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10080.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5670.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 7560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 135.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. - 8505.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2.);
533  case 36:
534  return RealGradient(36.*eta - 288.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 240.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 2376.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 6120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 6300.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 2268.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 36. - 594.*(eta + 1.)*(eta + 1.)/(2.*2.) - 1980.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5100.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5250.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1890.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 1530.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 567.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
535  case 37:
536  return RealGradient(12.*eta - 192.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 240.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 1584.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4080.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1512.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 12. - 198.*(eta + 1.)*(eta + 1.)/(2.*2.) - 1980.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5100.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5250.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1890.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 510.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 189.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
537  case 38:
538  return RealGradient(-6.*eta + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 990.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2550.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 945.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 6. + 99.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 990.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2550.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2625.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 945.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 255.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. - 189.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/2., 0.);
539  case 39:
540  return RealGradient(0., 36.*xi - 288.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2376.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 6300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 2268.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 240.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 36. - 1980.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5100.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5250.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1890.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 594.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1530.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 567.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
541  case 40:
542  return RealGradient(0., 12.*xi - 192.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1584.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4080.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1512.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 240.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 12. - 1980.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5100.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5250.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1890.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 198.*(xi + 1.)*(xi + 1.)/(2.*2.) + 510.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 189.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
543  case 41:
544  return RealGradient(0., -6.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 990.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2550.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 945.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 6. + 990.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2550.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 945.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 99.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 255.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. - 189.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/2.);
545  case 42:
546  return RealGradient(0., -9.*xi/2. + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 864.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5040.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 2268.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 30.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 9./2. + 720.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1890.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 216.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 900.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1260.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 567.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
547  case 43:
548  return RealGradient(0., -3.*xi/2. + 24.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 576.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1512.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 30.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 3./2. + 720.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1890.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 72.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 300.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 420.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 189.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
549  case 44:
550  return RealGradient(0., 3.*xi/4. - 15.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 360.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 945.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 15.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 3./4. - 360.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2100.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 945.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 36.*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 210.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 189.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/2.);
551  case 45:
552  return RealGradient(-9.*eta/2. + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 30.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 864.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 3600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5040.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 2268.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 9./2. + 216.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 720.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1890.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1260.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 567.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
553  case 46:
554  return RealGradient(-3.*eta/2. + 24.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 30.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 576.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1512.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 3./2. + 72.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 720.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1890.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 300.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 420.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 189.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
555  case 47:
556  return RealGradient(3.*eta/4. - 15.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 15.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 1500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 945.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 3./4. - 36.*(eta + 1.)*(eta + 1.)/(2.*2.) - 360.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2100.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 945.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 150.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 210.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 189.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/2., 0.);
557  case 48:
558  return RealGradient(0., 18.*xi - 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 324.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 18. - 270.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 81.*(xi + 1.)*(xi + 1.)/(2.*2.) + 45.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
559  case 49:
560  return RealGradient(0., -9.*xi/2. + 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 216.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 30.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 9./2. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 54.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 45.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
561  case 50:
562  return RealGradient(-18.*eta + 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 324.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18. + 81.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 270.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 45.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
563  case 51:
564  return RealGradient(9.*eta/2. - 36.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 30.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 216.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 9./2. - 54.*(eta + 1.)*(eta + 1.)/(2.*2.) - 180.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 45.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
565  case 52:
566  return RealGradient(-6.*eta + 96.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 216.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 6. + 27.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 270.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 15.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
567  case 53:
568  return RealGradient(3.*eta/2. - 24.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 30.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 144.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3./2. - 18.*(eta + 1.)*(eta + 1.)/(2.*2.) - 180.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 15.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
569  case 54:
570  return RealGradient(0., 6.*xi - 96.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 216.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 120.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 6. - 270.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 27.*(xi + 1.)*(xi + 1.)/(2.*2.) + 15.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
571  case 55:
572  return RealGradient(0., -3.*xi/2. + 24.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 144.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 120.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 30.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 3./2. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 15.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
573  case 56:
574  return RealGradient(2.*eta + 2. - 9.*(eta + 1.)*(eta + 1.)/(2.*2.) + 5.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
575  case 57:
576  return RealGradient(0., 2.*xi + 2. - 9.*(xi + 1.)*(xi + 1.)/(2.*2.) + 5.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
577  case 58:
578  return RealGradient(0., -xi/2. - 1./2. + 6.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
579  case 59:
580  return RealGradient(-eta/2. - 1./2. + 6.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 5.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
581  default:
582  libmesh_error_msg("Invalid i = " << i);
583  }
584  }
585 
586  case TRI6:
587  case TRI7:
588  {
589  switch(ii)
590  {
591  case 0:
592  return sign * RealGradient(2800.*eta*xi - 375.*eta - 6300.*eta*xi*xi + 5040.*eta*(xi*xi*xi) - 1050.*eta*xi*xi*xi*xi - 300.*xi - 8400.*xi*eta*eta + 10080.*xi*(eta*eta*eta) - 4200.*xi*eta*eta*eta*eta + 25. + 1750.*(eta*eta) + 11340.*(eta*eta)*(xi*xi) - 4200.*eta*eta*xi*xi*xi + 1050.*(xi*xi) - 6300.*xi*xi*eta*eta*eta - 3500.*eta*eta*eta - 1400.*xi*xi*xi + 3150.*(eta*eta*eta*eta) + 630.*(xi*xi*xi*xi) - 1050.*eta*eta*eta*eta*eta, -700.*eta*xi + 4200.*eta*(xi*xi) - 7560.*eta*xi*xi*xi + 4200.*eta*(xi*xi*xi*xi) + 75.*xi + 2100.*xi*(eta*eta) - 2520.*xi*eta*eta*eta + 1050.*xi*(eta*eta*eta*eta) - 7560.*eta*eta*xi*xi + 6300.*(eta*eta)*(xi*xi*xi) - 700.*xi*xi + 4200.*(xi*xi)*(eta*eta*eta) + 2100.*(xi*xi*xi) - 2520.*xi*xi*xi*xi + 1050.*(xi*xi*xi*xi*xi));
593  case 1:
594  return sign * RealGradient(-12145.*eta*xi/16. + 695.*eta/128. + 136185.*eta*(xi*xi)/64. - 6825.*eta*xi*xi*xi/4. + 19425.*eta*(xi*xi*xi*xi)/64. + 2865.*xi/32. + 7245.*xi*(eta*eta)/4. - 25515.*xi*eta*eta*eta/16. + 14175.*xi*(eta*eta*eta*eta)/32. - 485./128. + 11235.*(eta*eta)/64. - 240975.*eta*eta*xi*xi/64. + 48825.*(eta*eta)*(xi*xi*xi)/32. - 21105.*xi*xi/64. + 127575.*(xi*xi)*(eta*eta*eta)/64. - 42525.*eta*eta*eta/64. + 13615.*(xi*xi*xi)/32. + 104895.*(eta*eta*eta*eta)/128. - 11655.*xi*xi*xi*xi/64. - 42525.*eta*eta*eta*eta*eta/128., 3045.*eta*xi/32. - 39375.*eta*xi*xi/32. + 84105.*eta*(xi*xi*xi)/32. - 48825.*eta*xi*xi*xi*xi/32. - 2395.*xi/128. + 2835.*xi*(eta*eta)/64. - 14175.*xi*eta*eta*eta/32. + 42525.*xi*(eta*eta*eta*eta)/128. + 25515.*(eta*eta)*(xi*xi)/16. - 127575.*eta*eta*xi*xi*xi/64. + 1715.*(xi*xi)/8. - 14175.*xi*xi*eta*eta*eta/32. - 41755.*xi*xi*xi/64. + 48615.*(xi*xi*xi*xi)/64. - 19425.*xi*xi*xi*xi*xi/64.);
595  case 2:
596  return sign * RealGradient(55.*eta/8. - 3255.*eta*xi*xi/4. + 1260.*eta*(xi*xi*xi) - 1575.*eta*xi*xi*xi*xi/4. - 105.*xi/2. + 840.*xi*(eta*eta) - 1575.*xi*eta*eta*eta + 1575.*xi*(eta*eta*eta*eta)/2. + 15./8. - 175.*eta*eta/4. + 945.*(eta*eta)*(xi*xi)/4. - 1575.*eta*eta*xi*xi*xi/2. + 1155.*(xi*xi)/4. + 1575.*(xi*xi)*(eta*eta*eta)/4. + 35.*(eta*eta*eta)/4. - 945.*xi*xi*xi/2. + 735.*(eta*eta*eta*eta)/8. + 945.*(xi*xi*xi*xi)/4. - 525.*eta*eta*eta*eta*eta/8., 35.*eta*xi/2. + 105.*eta*(xi*xi)/2. - 1575.*eta*xi*xi*xi/2. + 1575.*eta*(xi*xi*xi*xi)/2. + 85.*xi/8. - 525.*xi*eta*eta/4. + 105.*xi*(eta*eta*eta)/2. + 525.*xi*(eta*eta*eta*eta)/8. + 945.*(eta*eta)*(xi*xi) - 1575.*eta*eta*xi*xi*xi/4. - 315.*xi*xi/2. - 1575.*xi*xi*eta*eta*eta/2. + 2485.*(xi*xi*xi)/4. - 3465.*xi*xi*xi*xi/4. + 1575.*(xi*xi*xi*xi*xi)/4.);
597  case 3:
598  return sign * RealGradient(1855.*eta*xi/16. - 825.*eta/128. - 16695.*eta*xi*xi/64. - 945.*eta*xi*xi*xi/4. + 19425.*eta*(xi*xi*xi*xi)/64. + 705.*xi/32. - 1155.*xi*eta*eta/4. - 315.*xi*eta*eta*eta/16. + 5775.*xi*(eta*eta*eta*eta)/32. - 85./128. + 595.*(eta*eta)/64. + 76545.*(eta*eta)*(xi*xi)/64. - 9975.*eta*eta*xi*xi*xi/32. - 9345.*xi*xi/64. - 48825.*xi*xi*eta*eta*eta/64. + 595.*(eta*eta*eta)/64. + 9695.*(xi*xi*xi)/32. - 945.*eta*eta*eta*eta/128. - 11655.*xi*xi*xi*xi/64. - 525.*eta*eta*eta*eta*eta/128., -875.*eta*xi/32. + 9345.*eta*(xi*xi)/32. - 21735.*eta*xi*xi*xi/32. + 9975.*eta*(xi*xi*xi*xi)/32. - 555.*xi/128. + 1155.*xi*(eta*eta)/64. + 945.*xi*(eta*eta*eta)/32. + 525.*xi*(eta*eta*eta*eta)/128. - 4725.*eta*eta*xi*xi/16. + 48825.*(eta*eta)*(xi*xi*xi)/64. + 595.*(xi*xi)/8. - 5775.*xi*xi*eta*eta*eta/32. - 22155.*xi*xi*xi/64. + 36855.*(xi*xi*xi*xi)/64. - 19425.*xi*xi*xi*xi*xi/64.);
599  case 4:
600  return sign * RealGradient(140.*eta*xi - 5.*eta - 840.*eta*xi*xi + 1680.*eta*(xi*xi*xi) - 1050.*eta*xi*xi*xi*xi - 120.*xi + 5. + 630.*(xi*xi) - 1120.*xi*xi*xi + 630.*(xi*xi*xi*xi), 25.*xi - 350.*xi*xi + 1400.*(xi*xi*xi) - 2100.*xi*xi*xi*xi + 1050.*(xi*xi*xi*xi*xi));
601  case 5:
602  return sign * RealGradient(140.*eta*xi - 5.*eta - 840.*eta*xi*xi + 1680.*eta*(xi*xi*xi) - 1050.*eta*xi*xi*xi*xi, 25.*xi - 350.*xi*xi + 1400.*(xi*xi*xi) - 2100.*xi*xi*xi*xi + 1050.*(xi*xi*xi*xi*xi));
603  case 6:
604  return sign * RealGradient(735.*eta*xi/4. - 10.*eta - 2835.*eta*xi*xi/4. + 14175.*eta*(xi*xi*xi)/16. - 42525.*eta*xi*xi*xi*xi/128. - 1575.*xi*eta*eta/2. + 12285.*xi*(eta*eta*eta)/16. - 1575.*xi*eta*eta*eta*eta/8. + 385.*(eta*eta)/8. + 76545.*(eta*eta)*(xi*xi)/32. - 14175.*eta*eta*xi*xi*xi/8. - 42525.*xi*xi*eta*eta*eta/32. - 245.*eta*eta*eta/4. + 1785.*(eta*eta*eta*eta)/64. - 525.*eta*eta*eta*eta*eta/128., -455.*eta*xi/4. + 2205.*eta*(xi*xi)/2. - 42525.*eta*xi*xi*xi/16. + 14175.*eta*(xi*xi*xi*xi)/8. + 20.*xi + 525.*xi*(eta*eta)/4. - 735.*xi*eta*eta*eta/16. + 525.*xi*(eta*eta*eta*eta)/128. - 31185.*eta*eta*xi*xi/32. + 42525.*(eta*eta)*(xi*xi*xi)/32. - 1785.*xi*xi/8. + 1575.*(xi*xi)*(eta*eta*eta)/8. + 2835.*(xi*xi*xi)/4. - 53865.*xi*xi*xi*xi/64. + 42525.*(xi*xi*xi*xi*xi)/128.);
605  case 7:
606  return sign * RealGradient(175.*eta*xi - 15.*eta - 420.*eta*xi*xi + 315.*eta*(xi*xi*xi) - 525.*eta*xi*xi*xi*xi/8. - 1260.*xi*eta*eta + 2205.*xi*(eta*eta*eta) - 1050.*xi*eta*eta*eta*eta + 245.*(eta*eta)/2. + 4725.*(eta*eta)*(xi*xi)/2. - 1050.*eta*eta*xi*xi*xi - 4725.*xi*xi*eta*eta*eta/2. - 280.*eta*eta*eta + 945.*(eta*eta*eta*eta)/4. - 525.*eta*eta*eta*eta*eta/8., -175.*eta*xi + 1260.*eta*(xi*xi) - 2205.*eta*xi*xi*xi + 1050.*eta*(xi*xi*xi*xi) + 15.*xi + 420.*xi*(eta*eta) - 315.*xi*eta*eta*eta + 525.*xi*(eta*eta*eta*eta)/8. - 4725.*eta*eta*xi*xi/2. + 4725.*(eta*eta)*(xi*xi*xi)/2. - 245.*xi*xi/2. + 1050.*(xi*xi)*(eta*eta*eta) + 280.*(xi*xi*xi) - 945.*xi*xi*xi*xi/4. + 525.*(xi*xi*xi*xi*xi)/8.);
607  case 8:
608  return sign * RealGradient(455.*eta*xi/4. - 20.*eta - 525.*eta*xi*xi/4. + 735.*eta*(xi*xi*xi)/16. - 525.*eta*xi*xi*xi*xi/128. - 2205.*xi*eta*eta/2. + 42525.*xi*(eta*eta*eta)/16. - 14175.*xi*eta*eta*eta*eta/8. + 1785.*(eta*eta)/8. + 31185.*(eta*eta)*(xi*xi)/32. - 1575.*eta*eta*xi*xi*xi/8. - 42525.*xi*xi*eta*eta*eta/32. - 2835.*eta*eta*eta/4. + 53865.*(eta*eta*eta*eta)/64. - 42525.*eta*eta*eta*eta*eta/128., -735.*eta*xi/4. + 1575.*eta*(xi*xi)/2. - 12285.*eta*xi*xi*xi/16. + 1575.*eta*(xi*xi*xi*xi)/8. + 10.*xi + 2835.*xi*(eta*eta)/4. - 14175.*xi*eta*eta*eta/16. + 42525.*xi*(eta*eta*eta*eta)/128. - 76545.*eta*eta*xi*xi/32. + 42525.*(eta*eta)*(xi*xi*xi)/32. - 385.*xi*xi/8. + 14175.*(xi*xi)*(eta*eta*eta)/8. + 245.*(xi*xi*xi)/4. - 1785.*xi*xi*xi*xi/64. + 525.*(xi*xi*xi*xi*xi)/128.);
609  case 9:
610  return sign * RealGradient(-25.*eta + 350.*(eta*eta) - 1400.*eta*eta*eta + 2100.*(eta*eta*eta*eta) - 1050.*eta*eta*eta*eta*eta, -140.*eta*xi + 5.*xi + 840.*xi*(eta*eta) - 1680.*xi*eta*eta*eta + 1050.*xi*(eta*eta*eta*eta));
611  case 10:
612  return sign * RealGradient(-25.*eta + 350.*(eta*eta) - 1400.*eta*eta*eta + 2100.*(eta*eta*eta*eta) - 1050.*eta*eta*eta*eta*eta, -140.*eta*xi + 120.*eta + 5.*xi + 840.*xi*(eta*eta) - 1680.*xi*eta*eta*eta + 1050.*xi*(eta*eta*eta*eta) - 5. - 630.*eta*eta + 1120.*(eta*eta*eta) - 630.*eta*eta*eta*eta);
613  case 11:
614  return sign * RealGradient(875.*eta*xi/32. + 555.*eta/128. - 1155.*eta*xi*xi/64. - 945.*eta*xi*xi*xi/32. - 525.*eta*xi*xi*xi*xi/128. - 9345.*xi*eta*eta/32. + 21735.*xi*(eta*eta*eta)/32. - 9975.*xi*eta*eta*eta*eta/32. - 595.*eta*eta/8. + 4725.*(eta*eta)*(xi*xi)/16. + 5775.*(eta*eta)*(xi*xi*xi)/32. - 48825.*xi*xi*eta*eta*eta/64. + 22155.*(eta*eta*eta)/64. - 36855.*eta*eta*eta*eta/64. + 19425.*(eta*eta*eta*eta*eta)/64., -1855.*eta*xi/16. - 705.*eta/32. + 1155.*eta*(xi*xi)/4. + 315.*eta*(xi*xi*xi)/16. - 5775.*eta*xi*xi*xi*xi/32. + 825.*xi/128. + 16695.*xi*(eta*eta)/64. + 945.*xi*(eta*eta*eta)/4. - 19425.*xi*eta*eta*eta*eta/64. + 85./128. + 9345.*(eta*eta)/64. - 76545.*eta*eta*xi*xi/64. + 48825.*(eta*eta)*(xi*xi*xi)/64. - 595.*xi*xi/64. + 9975.*(xi*xi)*(eta*eta*eta)/32. - 9695.*eta*eta*eta/32. - 595.*xi*xi*xi/64. + 11655.*(eta*eta*eta*eta)/64. + 945.*(xi*xi*xi*xi)/128. + 525.*(xi*xi*xi*xi*xi)/128.);
615  case 12:
616  return sign * RealGradient(-35.*eta*xi/2. - 85.*eta/8. + 525.*eta*(xi*xi)/4. - 105.*eta*xi*xi*xi/2. - 525.*eta*xi*xi*xi*xi/8. - 105.*xi*eta*eta/2. + 1575.*xi*(eta*eta*eta)/2. - 1575.*xi*eta*eta*eta*eta/2. + 315.*(eta*eta)/2. - 945.*eta*eta*xi*xi + 1575.*(eta*eta)*(xi*xi*xi)/2. + 1575.*(xi*xi)*(eta*eta*eta)/4. - 2485.*eta*eta*eta/4. + 3465.*(eta*eta*eta*eta)/4. - 1575.*eta*eta*eta*eta*eta/4., 105.*eta/2. - 840.*eta*xi*xi + 1575.*eta*(xi*xi*xi) - 1575.*eta*xi*xi*xi*xi/2. - 55.*xi/8. + 3255.*xi*(eta*eta)/4. - 1260.*xi*eta*eta*eta + 1575.*xi*(eta*eta*eta*eta)/4. - 15./8. - 1155.*eta*eta/4. - 945.*eta*eta*xi*xi/4. - 1575.*eta*eta*xi*xi*xi/4. + 175.*(xi*xi)/4. + 1575.*(xi*xi)*(eta*eta*eta)/2. + 945.*(eta*eta*eta)/2. - 35.*xi*xi*xi/4. - 945.*eta*eta*eta*eta/4. - 735.*xi*xi*xi*xi/8. + 525.*(xi*xi*xi*xi*xi)/8.);
617  case 13:
618  return sign * RealGradient(-3045.*eta*xi/32. + 2395.*eta/128. - 2835.*eta*xi*xi/64. + 14175.*eta*(xi*xi*xi)/32. - 42525.*eta*xi*xi*xi*xi/128. + 39375.*xi*(eta*eta)/32. - 84105.*xi*eta*eta*eta/32. + 48825.*xi*(eta*eta*eta*eta)/32. - 1715.*eta*eta/8. - 25515.*eta*eta*xi*xi/16. + 14175.*(eta*eta)*(xi*xi*xi)/32. + 127575.*(xi*xi)*(eta*eta*eta)/64. + 41755.*(eta*eta*eta)/64. - 48615.*eta*eta*eta*eta/64. + 19425.*(eta*eta*eta*eta*eta)/64., 12145.*eta*xi/16. - 2865.*eta/32. - 7245.*eta*xi*xi/4. + 25515.*eta*(xi*xi*xi)/16. - 14175.*eta*xi*xi*xi*xi/32. - 695.*xi/128. - 136185.*xi*eta*eta/64. + 6825.*xi*(eta*eta*eta)/4. - 19425.*xi*eta*eta*eta*eta/64. + 485./128. + 21105.*(eta*eta)/64. + 240975.*(eta*eta)*(xi*xi)/64. - 127575.*eta*eta*xi*xi*xi/64. - 11235.*xi*xi/64. - 48825.*xi*xi*eta*eta*eta/32. - 13615.*eta*eta*eta/32. + 42525.*(xi*xi*xi)/64. + 11655.*(eta*eta*eta*eta)/64. - 104895.*xi*xi*xi*xi/128. + 42525.*(xi*xi*xi*xi*xi)/128.);
619  case 14:
620  return sign * RealGradient(700.*eta*xi - 75.*eta - 2100.*eta*xi*xi + 2520.*eta*(xi*xi*xi) - 1050.*eta*xi*xi*xi*xi - 4200.*xi*eta*eta + 7560.*xi*(eta*eta*eta) - 4200.*xi*eta*eta*eta*eta + 700.*(eta*eta) + 7560.*(eta*eta)*(xi*xi) - 4200.*eta*eta*xi*xi*xi - 6300.*xi*xi*eta*eta*eta - 2100.*eta*eta*eta + 2520.*(eta*eta*eta*eta) - 1050.*eta*eta*eta*eta*eta, -2800.*eta*xi + 300.*eta + 8400.*eta*(xi*xi) - 10080.*eta*xi*xi*xi + 4200.*eta*(xi*xi*xi*xi) + 375.*xi + 6300.*xi*(eta*eta) - 5040.*xi*eta*eta*eta + 1050.*xi*(eta*eta*eta*eta) - 25. - 1050.*eta*eta - 11340.*eta*eta*xi*xi + 6300.*(eta*eta)*(xi*xi*xi) - 1750.*xi*xi + 4200.*(xi*xi)*(eta*eta*eta) + 1400.*(eta*eta*eta) + 3500.*(xi*xi*xi) - 630.*eta*eta*eta*eta - 3150.*xi*xi*xi*xi + 1050.*(xi*xi*xi*xi*xi));
621  case 15:
622  return RealGradient(-19600.*eta*xi + 3500.*eta + 35280.*eta*(xi*xi) - 23520.*eta*xi*xi*xi + 4200.*eta*(xi*xi*xi*xi) + 94080.*xi*(eta*eta) - 141120.*xi*eta*eta*eta + 67200.*xi*(eta*eta*eta*eta) - 24500.*eta*eta - 105840.*eta*eta*xi*xi + 33600.*(eta*eta)*(xi*xi*xi) + 75600.*(xi*xi)*(eta*eta*eta) + 58800.*(eta*eta*eta) - 58800.*eta*eta*eta*eta + 21000.*(eta*eta*eta*eta*eta), 9800.*eta*xi - 47040.*eta*xi*xi + 70560.*eta*(xi*xi*xi) - 33600.*eta*xi*xi*xi*xi - 700.*xi - 35280.*xi*eta*eta + 47040.*xi*(eta*eta*eta) - 21000.*xi*eta*eta*eta*eta + 105840.*(eta*eta)*(xi*xi) - 75600.*eta*eta*xi*xi*xi + 4900.*(xi*xi) - 67200.*xi*xi*eta*eta*eta - 11760.*xi*xi*xi + 11760.*(xi*xi*xi*xi) - 4200.*xi*xi*xi*xi*xi);
623  case 16:
624  return RealGradient(9800.*eta*xi - 700.*eta - 35280.*eta*xi*xi + 47040.*eta*(xi*xi*xi) - 21000.*eta*xi*xi*xi*xi - 47040.*xi*eta*eta + 70560.*xi*(eta*eta*eta) - 33600.*xi*eta*eta*eta*eta + 4900.*(eta*eta) + 105840.*(eta*eta)*(xi*xi) - 67200.*eta*eta*xi*xi*xi - 75600.*xi*xi*eta*eta*eta - 11760.*eta*eta*eta + 11760.*(eta*eta*eta*eta) - 4200.*eta*eta*eta*eta*eta, -19600.*eta*xi + 94080.*eta*(xi*xi) - 141120.*eta*xi*xi*xi + 67200.*eta*(xi*xi*xi*xi) + 3500.*xi + 35280.*xi*(eta*eta) - 23520.*xi*eta*eta*eta + 4200.*xi*(eta*eta*eta*eta) - 105840.*eta*eta*xi*xi + 75600.*(eta*eta)*(xi*xi*xi) - 24500.*xi*xi + 33600.*(xi*xi)*(eta*eta*eta) + 58800.*(xi*xi*xi) - 58800.*xi*xi*xi*xi + 21000.*(xi*xi*xi*xi*xi));
625  case 17:
626  return RealGradient(6440.*eta*xi - 280.*eta - 30240.*eta*xi*xi + 43680.*eta*(xi*xi*xi) - 16800.*eta*xi*xi*xi*xi - 6720.*xi*eta*eta + 280.*(eta*eta) + 30240.*(eta*eta)*(xi*xi) - 33600.*eta*eta*xi*xi*xi, -1120.*eta*xi + 13440.*eta*(xi*xi) - 40320.*eta*xi*xi*xi + 33600.*eta*(xi*xi*xi*xi) + 560.*xi - 7280.*xi*xi + 26880.*(xi*xi*xi) - 36960.*xi*xi*xi*xi + 16800.*(xi*xi*xi*xi*xi));
627  case 18:
628  return RealGradient(-3640.*eta*xi + 140.*eta + 20160.*eta*(xi*xi) - 36960.*eta*xi*xi*xi + 21000.*eta*(xi*xi*xi*xi) + 3360.*xi*(eta*eta) - 140.*eta*eta - 15120.*eta*eta*xi*xi + 16800.*(eta*eta)*(xi*xi*xi), 560.*eta*xi - 6720.*eta*xi*xi + 20160.*eta*(xi*xi*xi) - 16800.*eta*xi*xi*xi*xi - 700.*xi + 9100.*(xi*xi) - 33600.*xi*xi*xi + 46200.*(xi*xi*xi*xi) - 21000.*xi*xi*xi*xi*xi);
629  case 19:
630  return RealGradient(560.*eta*xi - 700.*eta - 6720.*xi*eta*eta + 20160.*xi*(eta*eta*eta) - 16800.*xi*eta*eta*eta*eta + 9100.*(eta*eta) - 33600.*eta*eta*eta + 46200.*(eta*eta*eta*eta) - 21000.*eta*eta*eta*eta*eta, -3640.*eta*xi + 3360.*eta*(xi*xi) + 140.*xi + 20160.*xi*(eta*eta) - 36960.*xi*eta*eta*eta + 21000.*xi*(eta*eta*eta*eta) - 15120.*eta*eta*xi*xi - 140.*xi*xi + 16800.*(xi*xi)*(eta*eta*eta));
631  case 20:
632  return RealGradient(-1120.*eta*xi + 560.*eta + 13440.*xi*(eta*eta) - 40320.*xi*eta*eta*eta + 33600.*xi*(eta*eta*eta*eta) - 7280.*eta*eta + 26880.*(eta*eta*eta) - 36960.*eta*eta*eta*eta + 16800.*(eta*eta*eta*eta*eta), 6440.*eta*xi - 6720.*eta*xi*xi - 280.*xi - 30240.*xi*eta*eta + 43680.*xi*(eta*eta*eta) - 16800.*xi*eta*eta*eta*eta + 30240.*(eta*eta)*(xi*xi) + 280.*(xi*xi) - 33600.*xi*xi*eta*eta*eta);
633  case 21:
634  return RealGradient(17920.*eta*xi/3. - 420.*eta - 17920.*eta*xi*xi + 156800.*eta*(xi*xi*xi)/9. - 44800.*eta*xi*xi*xi*xi/9. - 29120.*xi*eta*eta + 116480.*xi*(eta*eta*eta)/3. - 140000.*xi*eta*eta*eta*eta/9. + 7420.*(eta*eta)/3. + 62720.*(eta*eta)*(xi*xi) - 291200.*eta*eta*xi*xi*xi/9. - 44800.*xi*xi*eta*eta*eta - 4480.*eta*eta*eta + 28840.*(eta*eta*eta*eta)/9. - 7000.*eta*eta*eta*eta*eta/9., -10360.*eta*xi/3. + 28000.*eta*(xi*xi) - 170240.*eta*xi*xi*xi/3. + 291200.*eta*(xi*xi*xi*xi)/9. + 420.*xi + 6720.*xi*(eta*eta) - 39200.*xi*eta*eta*eta/9. + 7000.*xi*(eta*eta*eta*eta)/9. - 40880.*eta*eta*xi*xi + 44800.*(eta*eta)*(xi*xi*xi) - 12460.*xi*xi/3. + 140000.*(xi*xi)*(eta*eta*eta)/9. + 35840.*(xi*xi*xi)/3. - 118720.*xi*xi*xi*xi/9. + 44800.*(xi*xi*xi*xi*xi)/9.);
635  case 22:
636  return RealGradient(-12880.*eta*xi/3. + 280.*eta + 14560.*eta*(xi*xi) - 152320.*eta*xi*xi*xi/9. + 56000.*eta*(xi*xi*xi*xi)/9. + 22400.*xi*(eta*eta) - 91840.*xi*eta*eta*eta/3. + 112000.*xi*(eta*eta*eta*eta)/9. - 5320.*eta*eta/3. - 54880.*eta*eta*xi*xi + 313600.*(eta*eta)*(xi*xi*xi)/9. + 39200.*(xi*xi)*(eta*eta*eta) + 3360.*(eta*eta*eta) - 22400.*eta*eta*eta*eta/9. + 5600.*(eta*eta*eta*eta*eta)/9., 12040.*eta*xi/3. - 31360.*eta*xi*xi + 185920.*eta*(xi*xi*xi)/3. - 313600.*eta*xi*xi*xi*xi/9. - 560.*xi - 6720.*xi*eta*eta + 34720.*xi*(eta*eta*eta)/9. - 5600.*xi*eta*eta*eta*eta/9. + 38080.*(eta*eta)*(xi*xi) - 39200.*eta*eta*xi*xi*xi + 16240.*(xi*xi)/3. - 112000.*xi*xi*eta*eta*eta/9. - 45920.*xi*xi*xi/3. + 150080.*(xi*xi*xi*xi)/9. - 56000.*xi*xi*xi*xi*xi/9.);
637  case 23:
638  return RealGradient(12040.*eta*xi/3. - 560.*eta - 6720.*eta*xi*xi + 34720.*eta*(xi*xi*xi)/9. - 5600.*eta*xi*xi*xi*xi/9. - 31360.*xi*eta*eta + 185920.*xi*(eta*eta*eta)/3. - 313600.*xi*eta*eta*eta*eta/9. + 16240.*(eta*eta)/3. + 38080.*(eta*eta)*(xi*xi) - 112000.*eta*eta*xi*xi*xi/9. - 39200.*xi*xi*eta*eta*eta - 45920.*eta*eta*eta/3. + 150080.*(eta*eta*eta*eta)/9. - 56000.*eta*eta*eta*eta*eta/9., -12880.*eta*xi/3. + 22400.*eta*(xi*xi) - 91840.*eta*xi*xi*xi/3. + 112000.*eta*(xi*xi*xi*xi)/9. + 280.*xi + 14560.*xi*(eta*eta) - 152320.*xi*eta*eta*eta/9. + 56000.*xi*(eta*eta*eta*eta)/9. - 54880.*eta*eta*xi*xi + 39200.*(eta*eta)*(xi*xi*xi) - 5320.*xi*xi/3. + 313600.*(xi*xi)*(eta*eta*eta)/9. + 3360.*(xi*xi*xi) - 22400.*xi*xi*xi*xi/9. + 5600.*(xi*xi*xi*xi*xi)/9.);
639  case 24:
640  return RealGradient(-10360.*eta*xi/3. + 420.*eta + 6720.*eta*(xi*xi) - 39200.*eta*xi*xi*xi/9. + 7000.*eta*(xi*xi*xi*xi)/9. + 28000.*xi*(eta*eta) - 170240.*xi*eta*eta*eta/3. + 291200.*xi*(eta*eta*eta*eta)/9. - 12460.*eta*eta/3. - 40880.*eta*eta*xi*xi + 140000.*(eta*eta)*(xi*xi*xi)/9. + 44800.*(xi*xi)*(eta*eta*eta) + 35840.*(eta*eta*eta)/3. - 118720.*eta*eta*eta*eta/9. + 44800.*(eta*eta*eta*eta*eta)/9., 17920.*eta*xi/3. - 29120.*eta*xi*xi + 116480.*eta*(xi*xi*xi)/3. - 140000.*eta*xi*xi*xi*xi/9. - 420.*xi - 17920.*xi*eta*eta + 156800.*xi*(eta*eta*eta)/9. - 44800.*xi*eta*eta*eta*eta/9. + 62720.*(eta*eta)*(xi*xi) - 44800.*eta*eta*xi*xi*xi + 7420.*(xi*xi)/3. - 291200.*xi*xi*eta*eta*eta/9. - 4480.*xi*xi*xi + 28840.*(xi*xi*xi*xi)/9. - 7000.*xi*xi*xi*xi*xi/9.);
641  case 25:
642  return RealGradient(-12880.*eta*xi/9. - 700.*eta/9. + 5600.*eta*(xi*xi) - 49280.*eta*xi*xi*xi/9. + 11200.*eta*(xi*xi*xi*xi)/9. - 15680.*xi*eta*eta/3. + 51520.*xi*(eta*eta*eta)/3. - 95200.*xi*eta*eta*eta*eta/9. + 25900.*(eta*eta)/9. - 1120.*eta*eta*xi*xi + 22400.*(eta*eta)*(xi*xi*xi)/9. - 5600.*xi*xi*eta*eta*eta - 28000.*eta*eta*eta/3. + 93800.*(eta*eta*eta*eta)/9. - 35000.*eta*eta*eta*eta*eta/9., -10360.*eta*xi/9. + 7840.*eta*(xi*xi)/3. + 2240.*eta*(xi*xi*xi)/3. - 22400.*eta*xi*xi*xi*xi/9. + 140.*xi/9. + 5600.*xi*(eta*eta) - 75040.*xi*eta*eta*eta/9. + 35000.*xi*(eta*eta*eta*eta)/9. - 12880.*eta*eta*xi*xi + 5600.*(eta*eta)*(xi*xi*xi) + 3220.*(xi*xi)/9. + 95200.*(xi*xi)*(eta*eta*eta)/9. - 5600.*xi*xi*xi/3. + 24640.*(xi*xi*xi*xi)/9. - 11200.*xi*xi*xi*xi*xi/9.);
643  case 26:
644  return RealGradient(-9520.*eta*xi/9. + 1400.*eta/9. - 1120.*eta*xi*xi + 71680.*eta*(xi*xi*xi)/9. - 56000.*eta*xi*xi*xi*xi/9. + 44800.*xi*(eta*eta)/3. - 82880.*xi*eta*eta*eta/3. + 123200.*xi*(eta*eta*eta*eta)/9. - 14840.*eta*eta/9. - 25760.*eta*eta*xi*xi + 89600.*(eta*eta)*(xi*xi*xi)/9. + 28000.*(xi*xi)*(eta*eta*eta) + 12320.*(eta*eta*eta)/3. - 34720.*eta*eta*eta*eta/9. + 11200.*(eta*eta*eta*eta*eta)/9., 51800.*eta*xi/9. - 69440.*eta*xi*xi/3. + 82880.*eta*(xi*xi*xi)/3. - 89600.*eta*xi*xi*xi*xi/9. + 560.*xi/9. - 13440.*xi*eta*eta + 79520.*xi*(eta*eta*eta)/9. - 11200.*xi*eta*eta*eta*eta/9. + 40320.*(eta*eta)*(xi*xi) - 28000.*eta*eta*xi*xi*xi - 24080.*xi*xi/9. - 123200.*xi*xi*eta*eta*eta/9. + 32480.*(xi*xi*xi)/3. - 129920.*xi*xi*xi*xi/9. + 56000.*(xi*xi*xi*xi*xi)/9.);
645  case 27:
646  return RealGradient(2800.*eta*xi/9. + 700.*eta/9. - 560.*eta*xi*xi - 1120.*eta*xi*xi*xi/9. + 1400.*eta*(xi*xi*xi*xi)/9. - 4480.*xi*eta*eta/3. - 11200.*xi*eta*eta*eta/3. + 44800.*xi*(eta*eta*eta*eta)/9. - 13300.*eta*eta/9. + 6160.*(eta*eta)*(xi*xi) - 22400.*eta*eta*xi*xi*xi/9. - 2800.*xi*xi*eta*eta*eta + 19600.*(eta*eta*eta)/3. - 81200.*eta*eta*eta*eta/9. + 35000.*(eta*eta*eta*eta*eta)/9., 5320.*eta*xi/9. + 2240.*eta*(xi*xi)/3. - 12320.*eta*xi*xi*xi/3. + 22400.*eta*(xi*xi*xi*xi)/9. - 140.*xi/9. - 3920.*xi*eta*eta + 64960.*xi*(eta*eta*eta)/9. - 35000.*xi*eta*eta*eta*eta/9. + 2800.*(eta*eta)*(xi*xi) + 2800.*(eta*eta)*(xi*xi*xi) - 700.*xi*xi/9. - 44800.*xi*xi*eta*eta*eta/9. + 560.*(xi*xi*xi)/3. + 560.*(xi*xi*xi*xi)/9. - 1400.*xi*xi*xi*xi*xi/9.);
647  case 28:
648  return RealGradient(280.*eta*xi/9. - 980.*eta/9. + 1680.*eta*(xi*xi) - 11200.*eta*xi*xi*xi/9. - 7000.*eta*xi*xi*xi*xi/9. - 11200.*xi*eta*eta/3. + 52640.*xi*(eta*eta*eta)/3. - 123200.*xi*eta*eta*eta*eta/9. + 13580.*(eta*eta)/9. - 9520.*eta*eta*xi*xi + 112000.*(eta*eta)*(xi*xi*xi)/9. - 2800.*xi*xi*eta*eta*eta - 16240.*eta*eta*eta/3. + 59920.*(eta*eta*eta*eta)/9. - 23800.*eta*eta*eta*eta*eta/9., -8960.*eta*xi/9. - 17920.*eta*xi*xi/3. + 58240.*eta*(xi*xi*xi)/3. - 112000.*eta*xi*xi*xi*xi/9. - 140.*xi/9. + 9520.*xi*(eta*eta) - 99680.*xi*eta*eta*eta/9. + 23800.*xi*(eta*eta*eta*eta)/9. - 15120.*eta*eta*xi*xi + 2800.*(eta*eta)*(xi*xi*xi) + 4340.*(xi*xi)/9. + 123200.*(xi*xi)*(eta*eta*eta)/9. - 560.*xi*xi*xi - 6160.*xi*xi*xi*xi/9. + 7000.*(xi*xi*xi*xi*xi)/9.);
649  case 29:
650  return RealGradient(51800.*eta*xi/9. + 560.*eta/9. - 13440.*eta*xi*xi + 79520.*eta*(xi*xi*xi)/9. - 11200.*eta*xi*xi*xi*xi/9. - 69440.*xi*eta*eta/3. + 82880.*xi*(eta*eta*eta)/3. - 89600.*xi*eta*eta*eta*eta/9. - 24080.*eta*eta/9. + 40320.*(eta*eta)*(xi*xi) - 123200.*eta*eta*xi*xi*xi/9. - 28000.*xi*xi*eta*eta*eta + 32480.*(eta*eta*eta)/3. - 129920.*eta*eta*eta*eta/9. + 56000.*(eta*eta*eta*eta*eta)/9., -9520.*eta*xi/9. + 44800.*eta*(xi*xi)/3. - 82880.*eta*xi*xi*xi/3. + 123200.*eta*(xi*xi*xi*xi)/9. + 1400.*xi/9. - 1120.*xi*eta*eta + 71680.*xi*(eta*eta*eta)/9. - 56000.*xi*eta*eta*eta*eta/9. - 25760.*eta*eta*xi*xi + 28000.*(eta*eta)*(xi*xi*xi) - 14840.*xi*xi/9. + 89600.*(xi*xi)*(eta*eta*eta)/9. + 12320.*(xi*xi*xi)/3. - 34720.*xi*xi*xi*xi/9. + 11200.*(xi*xi*xi*xi*xi)/9.);
651  case 30:
652  return RealGradient(-10360.*eta*xi/9. + 140.*eta/9. + 5600.*eta*(xi*xi) - 75040.*eta*xi*xi*xi/9. + 35000.*eta*(xi*xi*xi*xi)/9. + 7840.*xi*(eta*eta)/3. + 2240.*xi*(eta*eta*eta)/3. - 22400.*xi*eta*eta*eta*eta/9. + 3220.*(eta*eta)/9. - 12880.*eta*eta*xi*xi + 95200.*(eta*eta)*(xi*xi*xi)/9. + 5600.*(xi*xi)*(eta*eta*eta) - 5600.*eta*eta*eta/3. + 24640.*(eta*eta*eta*eta)/9. - 11200.*eta*eta*eta*eta*eta/9., -12880.*eta*xi/9. - 15680.*eta*xi*xi/3. + 51520.*eta*(xi*xi*xi)/3. - 95200.*eta*xi*xi*xi*xi/9. - 700.*xi/9. + 5600.*xi*(eta*eta) - 49280.*xi*eta*eta*eta/9. + 11200.*xi*(eta*eta*eta*eta)/9. - 1120.*eta*eta*xi*xi - 5600.*eta*eta*xi*xi*xi + 25900.*(xi*xi)/9. + 22400.*(xi*xi)*(eta*eta*eta)/9. - 28000.*xi*xi*xi/3. + 93800.*(xi*xi*xi*xi)/9. - 35000.*xi*xi*xi*xi*xi/9.);
653  case 31:
654  return RealGradient(-8960.*eta*xi/9. - 140.*eta/9. + 9520.*eta*(xi*xi) - 99680.*eta*xi*xi*xi/9. + 23800.*eta*(xi*xi*xi*xi)/9. - 17920.*xi*eta*eta/3. + 58240.*xi*(eta*eta*eta)/3. - 112000.*xi*eta*eta*eta*eta/9. + 4340.*(eta*eta)/9. - 15120.*eta*eta*xi*xi + 123200.*(eta*eta)*(xi*xi*xi)/9. + 2800.*(xi*xi)*(eta*eta*eta) - 560.*eta*eta*eta - 6160.*eta*eta*eta*eta/9. + 7000.*(eta*eta*eta*eta*eta)/9., 280.*eta*xi/9. - 11200.*eta*xi*xi/3. + 52640.*eta*(xi*xi*xi)/3. - 123200.*eta*xi*xi*xi*xi/9. - 980.*xi/9. + 1680.*xi*(eta*eta) - 11200.*xi*eta*eta*eta/9. - 7000.*xi*eta*eta*eta*eta/9. - 9520.*eta*eta*xi*xi - 2800.*eta*eta*xi*xi*xi + 13580.*(xi*xi)/9. + 112000.*(xi*xi)*(eta*eta*eta)/9. - 16240.*xi*xi*xi/3. + 59920.*(xi*xi*xi*xi)/9. - 23800.*xi*xi*xi*xi*xi/9.);
655  case 32:
656  return RealGradient(5320.*eta*xi/9. - 140.*eta/9. - 3920.*eta*xi*xi + 64960.*eta*(xi*xi*xi)/9. - 35000.*eta*xi*xi*xi*xi/9. + 2240.*xi*(eta*eta)/3. - 12320.*xi*eta*eta*eta/3. + 22400.*xi*(eta*eta*eta*eta)/9. - 700.*eta*eta/9. + 2800.*(eta*eta)*(xi*xi) - 44800.*eta*eta*xi*xi*xi/9. + 2800.*(xi*xi)*(eta*eta*eta) + 560.*(eta*eta*eta)/3. + 560.*(eta*eta*eta*eta)/9. - 1400.*eta*eta*eta*eta*eta/9., 2800.*eta*xi/9. - 4480.*eta*xi*xi/3. - 11200.*eta*xi*xi*xi/3. + 44800.*eta*(xi*xi*xi*xi)/9. + 700.*xi/9. - 560.*xi*eta*eta - 1120.*xi*eta*eta*eta/9. + 1400.*xi*(eta*eta*eta*eta)/9. + 6160.*(eta*eta)*(xi*xi) - 2800.*eta*eta*xi*xi*xi - 13300.*xi*xi/9. - 22400.*xi*xi*eta*eta*eta/9. + 19600.*(xi*xi*xi)/3. - 81200.*xi*xi*xi*xi/9. + 35000.*(xi*xi*xi*xi*xi)/9.);
657  case 33:
658  return RealGradient(-6440.*eta*xi/9. + 280.*eta/9. + 1680.*eta*(xi*xi) - 4480.*eta*xi*xi*xi/3. + 1400.*eta*(xi*xi*xi*xi)/3. + 19040.*xi*(eta*eta)/3. - 11200.*xi*eta*eta*eta + 5600.*xi*(eta*eta*eta*eta) - 2800.*eta*eta/9. - 9520.*eta*eta*xi*xi + 11200.*(eta*eta)*(xi*xi*xi)/3. + 8400.*(xi*xi)*(eta*eta*eta) + 560.*(eta*eta*eta) - 280.*eta*eta*eta*eta, 6160.*eta*xi/9. - 14560.*eta*xi*xi/3. + 7840.*eta*(xi*xi*xi) - 11200.*eta*xi*xi*xi*xi/3. - 560.*xi/9. - 1680.*xi*eta*eta + 1120.*xi*(eta*eta*eta) + 10080.*(eta*eta)*(xi*xi) - 8400.*eta*eta*xi*xi*xi + 4760.*(xi*xi)/9. - 5600.*xi*xi*eta*eta*eta - 3920.*xi*xi*xi/3. + 3920.*(xi*xi*xi*xi)/3. - 1400.*xi*xi*xi*xi*xi/3.);
659  case 34:
660  return RealGradient(6160.*eta*xi/9. - 560.*eta/9. - 1680.*eta*xi*xi + 1120.*eta*(xi*xi*xi) - 14560.*xi*eta*eta/3. + 7840.*xi*(eta*eta*eta) - 11200.*xi*eta*eta*eta*eta/3. + 4760.*(eta*eta)/9. + 10080.*(eta*eta)*(xi*xi) - 5600.*eta*eta*xi*xi*xi - 8400.*xi*xi*eta*eta*eta - 3920.*eta*eta*eta/3. + 3920.*(eta*eta*eta*eta)/3. - 1400.*eta*eta*eta*eta*eta/3., -6440.*eta*xi/9. + 19040.*eta*(xi*xi)/3. - 11200.*eta*xi*xi*xi + 5600.*eta*(xi*xi*xi*xi) + 280.*xi/9. + 1680.*xi*(eta*eta) - 4480.*xi*eta*eta*eta/3. + 1400.*xi*(eta*eta*eta*eta)/3. - 9520.*eta*eta*xi*xi + 8400.*(eta*eta)*(xi*xi*xi) - 2800.*xi*xi/9. + 11200.*(xi*xi)*(eta*eta*eta)/3. + 560.*(xi*xi*xi) - 280.*xi*xi*xi*xi);
661  default:
662  libmesh_error_msg("Invalid i = " << i);
663  }
664  }
665 
666  default:
667  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
668  } // end switch (type)
669  } // end case FIFTH
670 
671  // unsupported order
672  default:
673  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << totalorder);
674  }
675 #else // LIBMESH_DIM > 1
676  libmesh_ignore(elem, order, i, p, add_p_level);
677  libmesh_not_implemented();
678 #endif
679 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static constexpr Real TOLERANCE
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape() [5/195]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 41 of file fe_raviart_shape_2D.C.

46 {
47  return FE<2,RAVIART_THOMAS>::shape(elem, order, i, p, add_p_level);
48 }

◆ shape() [6/195]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 42 of file fe_rational_shape_2D.C.

47 {
48  libmesh_assert(elem);
49 
50  // FEType object for the non-rational basis underlying this one
51  FEType fe_type(order, _underlying_fe_family);
52 
53  return rational_fe_shape(*elem, fe_type, i, p, add_p_level);
54 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const Point &p, const bool add_p_level)
Definition: fe.C:1119
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730

◆ shape() [7/195]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 42 of file fe_rational_shape_3D.C.

47 {
48  libmesh_assert(elem);
49 
50  // FEType object for the non-rational basis underlying this one
51  FEType fe_type(order, _underlying_fe_family);
52 
53  return rational_fe_shape(*elem, fe_type, i, p, add_p_level);
54 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const Point &p, const bool add_p_level)
Definition: fe.C:1119
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730

◆ shape() [8/195]

Real libMesh::FE< 1, SCALAR >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 43 of file fe_scalar_shape_1D.C.

48 {
49  return 1.;
50 }

◆ shape() [9/195]

Real libMesh::FE< 2, SCALAR >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 43 of file fe_scalar_shape_2D.C.

48 {
49  return 1.;
50 }

◆ shape() [10/195]

Real libMesh::FE< 0, SCALAR >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 43 of file fe_scalar_shape_0D.C.

48 {
49  return 1.;
50 }

◆ shape() [11/195]

Real libMesh::FE< 1, L2_LAGRANGE >::shape ( const ElemType  ,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 43 of file fe_lagrange_shape_1D.C.

47 {
48  return fe_lagrange_1D_shape(order, i, p(0));
49 }
Real fe_lagrange_1D_shape(const Order order, const unsigned int i, const Real xi)

◆ shape() [12/195]

Real libMesh::FE< 3, SCALAR >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 43 of file fe_scalar_shape_3D.C.

48 {
49  return 1.;
50 }

◆ shape() [13/195]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 44 of file fe_rational_shape_1D.C.

49 {
50  libmesh_assert(elem);
51 
52  // FEType object for the non-rational basis underlying this one
53  FEType fe_type(order, _underlying_fe_family);
54 
55  return rational_fe_shape(*elem, fe_type, i, p, add_p_level);
56 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const Point &p, const bool add_p_level)
Definition: fe.C:1119
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:730

◆ shape() [14/195]

Real libMesh::FE< 0, LAGRANGE >::shape ( const ElemType  ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point  
)
inherited

Definition at line 44 of file fe_lagrange_shape_0D.C.

48 {
49  libmesh_assert_less (i, 1);
50  return 1.;
51 }

◆ shape() [15/195]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_rational_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [16/195]

Real libMesh::FE< 0, SZABAB >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_szabab_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [17/195]

Real libMesh::FE< 0, CLOUGH >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_clough_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [18/195]

Real libMesh::FE< 0, XYZ >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_xyz_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [19/195]

Real libMesh::FE< 0, BERNSTEIN >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_bernstein_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [20/195]

Real libMesh::FE< 0, HERMITE >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_hermite_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [21/195]

Real libMesh::FE< 0, MONOMIAL >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 46 of file fe_monomial_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [22/195]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point  
)
inherited

Definition at line 47 of file fe_hierarchic_shape_0D.C.

51 {
52  libmesh_assert_less (i, 1);
53  return 1.;
54 }

◆ shape() [23/195]

Real libMesh::FE< 3, CLOUGH >::shape ( const Elem libmesh_dbg_varelem,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 48 of file fe_clough_shape_3D.C.

53 {
54  libmesh_assert(elem);
55 
56  libmesh_not_implemented();
57  return 0.;
58 }
libmesh_assert(ctx)

◆ shape() [24/195]

Real libMesh::FE< 3, SZABAB >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 48 of file fe_szabab_shape_3D.C.

53 {
54  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
55  return 0.;
56 }

◆ shape() [25/195]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 51 of file fe_raviart_shape_2D.C.

55 {
56  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
57  return RealGradient();
58 }
RealVectorValue RealGradient

◆ shape() [26/195]

Real libMesh::FE< 0, SCALAR >::shape ( const FEType  ,
const Elem ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 53 of file fe_scalar_shape_0D.C.

58 {
59  return 1.;
60 }

◆ shape() [27/195]

Real libMesh::FE< 1, LAGRANGE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 53 of file fe_lagrange_shape_1D.C.

58 {
59  libmesh_assert(elem);
60 
61  return fe_lagrange_1D_shape(order + add_p_level*elem->p_level(), i, p(0));
62 }
libmesh_assert(ctx)
Real fe_lagrange_1D_shape(const Order order, const unsigned int i, const Real xi)

◆ shape() [28/195]

Real libMesh::FE< 2, SCALAR >::shape ( const FEType  ,
const Elem ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 54 of file fe_scalar_shape_2D.C.

59 {
60  return 1.;
61 }

◆ shape() [29/195]

Real libMesh::FE< 3, SCALAR >::shape ( const FEType  ,
const Elem ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 54 of file fe_scalar_shape_3D.C.

59 {
60  return 1.;
61 }

◆ shape() [30/195]

Real libMesh::FE< 1, SCALAR >::shape ( const FEType  ,
const Elem ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 55 of file fe_scalar_shape_1D.C.

60 {
61  return 0.;
62 }

◆ shape() [31/195]

Real libMesh::FE< 0, L2_LAGRANGE >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 56 of file fe_lagrange_shape_0D.C.

61 {
62  libmesh_assert_less (i, 1);
63  return 1.;
64 }

◆ shape() [32/195]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 57 of file fe_rational_shape_0D.C.

62 {
63  libmesh_assert_less (i, 1);
64  return 1.;
65 }

◆ shape() [33/195]

Real libMesh::FE< 0, BERNSTEIN >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 57 of file fe_bernstein_shape_0D.C.

62 {
63  libmesh_assert_less (i, 1);
64  return 1.;
65 }

◆ shape() [34/195]

Real libMesh::FE< 0, HERMITE >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 57 of file fe_hermite_shape_0D.C.

62 {
63  libmesh_assert_less (i, 1);
64  return 1.;
65 }

◆ shape() [35/195]

Real libMesh::FE< 0, CLOUGH >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 58 of file fe_clough_shape_0D.C.

63 {
64  libmesh_assert_less (i, 1);
65  return 1.;
66 }

◆ shape() [36/195]

Real libMesh::FE< 0, SZABAB >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 58 of file fe_szabab_shape_0D.C.

63 {
64  libmesh_assert_less (i, 1);
65  return 1.;
66 }

◆ shape() [37/195]

Real libMesh::FE< 0, MONOMIAL >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 58 of file fe_monomial_shape_0D.C.

63 {
64  libmesh_assert_less (i, 1);
65  return 1.;
66 }

◆ shape() [38/195]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 59 of file fe_rational_shape_2D.C.

63 {
64  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
65  return 0.;
66 }

◆ shape() [39/195]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 59 of file fe_rational_shape_3D.C.

63 {
64  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
65  return 0.;
66 }

◆ shape() [40/195]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 59 of file fe_hierarchic_shape_0D.C.

63 {
64  libmesh_error_msg("No side variables in 0D!");
65  return 1.;
66 }

◆ shape() [41/195]

Real libMesh::FE< 0, XYZ >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 59 of file fe_xyz_shape_0D.C.

64 {
65  libmesh_assert_less (i, 1);
66  return 1.;
67 }

◆ shape() [42/195]

Real libMesh::FE< 3, SZABAB >::shape ( const FEType  ,
const Elem ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 60 of file fe_szabab_shape_3D.C.

65 {
66  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
67  return 0;
68 }

◆ shape() [43/195]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 61 of file fe_rational_shape_1D.C.

65 {
66  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
67  return 0.;
68 }

◆ shape() [44/195]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 61 of file fe_raviart_shape_2D.C.

65 {
66  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
67  return RealGradient();
68 }
RealVectorValue RealGradient

◆ shape() [45/195]

Real libMesh::FE< 3, CLOUGH >::shape ( const FEType  ,
const Elem libmesh_dbg_varelem,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 62 of file fe_clough_shape_3D.C.

67 {
68  libmesh_assert(elem);
69 
70  libmesh_not_implemented();
71  return 0.;
72 }
libmesh_assert(ctx)

◆ shape() [46/195]

Real libMesh::FE< 1, LAGRANGE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 67 of file fe_lagrange_shape_1D.C.

72 {
73  libmesh_assert(elem);
74  return fe_lagrange_1D_shape(fet.order + add_p_level*elem->p_level(), i, p(0));
75 }
libmesh_assert(ctx)
Real fe_lagrange_1D_shape(const Order order, const unsigned int i, const Real xi)

◆ shape() [47/195]

Real libMesh::FE< 0, LAGRANGE >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 68 of file fe_lagrange_shape_0D.C.

73 {
74  libmesh_assert_less (i, 1);
75  return 1.;
76 }

◆ shape() [48/195]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 69 of file fe_rational_shape_3D.C.

74 {
76  (elem, fet.order, i, p, add_p_level);
77 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [49/195]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 71 of file fe_rational_shape_2D.C.

76 {
78  (elem, fet.order, i, p, add_p_level);
79 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [50/195]

Real libMesh::FE< 0, HIERARCHIC >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 71 of file fe_hierarchic_shape_0D.C.

76 {
77  libmesh_assert_less (i, 1);
78  return 1.;
79 }

◆ shape() [51/195]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 71 of file fe_raviart_shape_2D.C.

76 {
77  return FE<2,RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
78 }

◆ shape() [52/195]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 72 of file fe_rational_shape_1D.C.

77 {
78  libmesh_assert(elem);
79  return FE<1,RATIONAL_BERNSTEIN>::shape(elem, fet.order, i, p, add_p_level);
80 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape() [53/195]

Real libMesh::FE< 1, MONOMIAL >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 72 of file fe_monomial_shape_1D.C.

77 {
78  libmesh_assert(elem);
79 
80  return FE<1,MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
81 }
libmesh_assert(ctx)

◆ shape() [54/195]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape ( const ElemType  elem_type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 78 of file fe_hierarchic_shape_1D.C.

82 {
83  return fe_hierarchic_1D_shape(elem_type, order, i, p);
84 }

◆ shape() [55/195]

Real libMesh::FE< 1, L2_LAGRANGE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 78 of file fe_lagrange_shape_1D.C.

83 {
84  libmesh_assert(elem);
85 
86  return fe_lagrange_1D_shape(order + add_p_level*elem->p_level(), i, p(0));
87 }
libmesh_assert(ctx)
Real fe_lagrange_1D_shape(const Order order, const unsigned int i, const Real xi)

◆ shape() [56/195]

Real libMesh::FE< 0, L2_LAGRANGE >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 81 of file fe_lagrange_shape_0D.C.

86 {
87  libmesh_assert_less (i, 1);
88  return 1.;
89 }

◆ shape() [57/195]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 81 of file fe_raviart_shape_2D.C.

86 {
87  return FE<2,L2_RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
88 }

◆ shape() [58/195]

Real libMesh::FE< 1, SZABAB >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 83 of file fe_szabab_shape_1D.C.

88 {
89  libmesh_assert(elem);
90 
91  return FE<1,SZABAB>::shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
92 }
libmesh_assert(ctx)

◆ shape() [59/195]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape ( const Elem ,
const Order  ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 84 of file fe_hierarchic_shape_0D.C.

89 {
90  libmesh_assert_less (i, 1);
91  return 1.;
92 }

◆ shape() [60/195]

Real libMesh::FE< 2, L2_LAGRANGE >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 84 of file fe_lagrange_shape_2D.C.

88 {
89  return fe_lagrange_2D_shape<L2_LAGRANGE>(type, nullptr, order, i, p);
90 }

◆ shape() [61/195]

Real libMesh::FE< 1, XYZ >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 84 of file fe_xyz_shape_1D.C.

88 {
89  libmesh_error_msg("XYZ polynomials require the element.");
90  return 0.;
91 }

◆ shape() [62/195]

Real libMesh::FE< 1, MONOMIAL >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 85 of file fe_monomial_shape_1D.C.

90 {
91  libmesh_assert(elem);
92  return FE<1,MONOMIAL>::shape(elem->type(), fet.order + add_p_level*elem->p_level(), i, p);
93 }
libmesh_assert(ctx)

◆ shape() [63/195]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 89 of file fe_hierarchic_shape_1D.C.

93 {
94  unsigned int right_side = p(0) > 0; // 0 false, 1 true
95  return (right_side == i);
96 }

◆ shape() [64/195]

Real libMesh::FE< 1, L2_LAGRANGE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 90 of file fe_lagrange_shape_1D.C.

95 {
96  libmesh_assert(elem);
97  return fe_lagrange_1D_shape(fet.order + add_p_level*elem->p_level(), i, p(0));
98 }
libmesh_assert(ctx)
Real fe_lagrange_1D_shape(const Order order, const unsigned int i, const Real xi)

◆ shape() [65/195]

Real libMesh::FE< 0, LAGRANGE >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 93 of file fe_lagrange_shape_0D.C.

98 {
99  libmesh_assert_less (i, 1);
100  return 1.;
101 }

◆ shape() [66/195]

Real libMesh::FE< 2, LAGRANGE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 94 of file fe_lagrange_shape_2D.C.

99 {
100  libmesh_assert(elem);
101 
102  // call the orientation-independent shape functions
103  return fe_lagrange_2D_shape<LAGRANGE>(elem->type(), elem, order + add_p_level*elem->p_level(), i, p);
104 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [67/195]

Real libMesh::FE< 1, SZABAB >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 96 of file fe_szabab_shape_1D.C.

101 {
102  libmesh_assert(elem);
103 
104  return FE<1,SZABAB>::shape(elem->type(), fet.order + add_p_level*elem->p_level(), i, p);
105 }
libmesh_assert(ctx)

◆ shape() [68/195]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 97 of file fe_hierarchic_shape_0D.C.

102 {
103  libmesh_error_msg("No side variables in 0D!");
104  return 1.;
105 }

◆ shape() [69/195]

Real libMesh::FE< 1, XYZ >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 97 of file fe_xyz_shape_1D.C.

102 {
103  return FE<1,XYZ>::shape(elem, fet.order, i, p, add_p_level);
104 }

◆ shape() [70/195]

Real libMesh::FE< 1, HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 101 of file fe_hierarchic_shape_1D.C.

106 {
107  libmesh_assert(elem);
108 
109  return fe_hierarchic_1D_shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
110 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [71/195]

Real libMesh::FE< 2, L2_LAGRANGE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 109 of file fe_lagrange_shape_2D.C.

114 {
115  libmesh_assert(elem);
116 
117  // call the orientation-independent shape functions
118  return fe_lagrange_2D_shape<L2_LAGRANGE>(elem->type(), elem, order + add_p_level*elem->p_level(), i, p);
119 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [72/195]

Real libMesh::FE< 0, HIERARCHIC >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 110 of file fe_hierarchic_shape_0D.C.

115 {
116  libmesh_assert_less (i, 1);
117  return 1.;
118 }

◆ shape() [73/195]

Real libMesh::FE< 1, HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 115 of file fe_hierarchic_shape_1D.C.

120 {
121  libmesh_assert(elem);
122  return fe_hierarchic_1D_shape(elem->type(), fet.order + add_p_level*elem->p_level(), i, p);
123 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [74/195]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 118 of file fe_raviart_shape_3D.C.

123 {
124  return FE<3,RAVIART_THOMAS>::shape(elem, order, i, p, add_p_level);
125 }

◆ shape() [75/195]

Real libMesh::FE< 2, MONOMIAL >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 122 of file fe_monomial_shape_2D.C.

127 {
128  libmesh_assert(elem);
129 
130  // by default call the orientation-independent shape functions
131  return FE<2,MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
132 }
libmesh_assert(ctx)

◆ shape() [76/195]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape ( const FEType  ,
const Elem ,
const unsigned int  libmesh_dbg_vari,
const Point ,
const bool   
)
inherited

Definition at line 123 of file fe_hierarchic_shape_0D.C.

128 {
129  libmesh_assert_less (i, 1);
130  return 1.;
131 }

◆ shape() [77/195]

Real libMesh::FE< 2, LAGRANGE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 123 of file fe_lagrange_shape_2D.C.

128 {
129  libmesh_assert(elem);
130  return fe_lagrange_2D_shape<LAGRANGE>(elem->type(), elem, fet.order + add_p_level*elem->p_level(), i, p);
131 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [78/195]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 129 of file fe_raviart_shape_3D.C.

133 {
134  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
135  return RealGradient();
136 }
RealVectorValue RealGradient

◆ shape() [79/195]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 130 of file fe_hierarchic_shape_1D.C.

135 {
136  libmesh_assert(elem);
137 
138  return fe_hierarchic_1D_shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
139 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [80/195]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 136 of file fe_nedelec_one_shape_3D.C.

140 {
141  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
142  return RealGradient();
143 }
RealVectorValue RealGradient

◆ shape() [81/195]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape ( const FEType  ,
const Elem ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 136 of file fe_hierarchic_shape_0D.C.

141 {
142  libmesh_error_msg("No side variables in 0D!");
143  return 1.;
144 }

◆ shape() [82/195]

Real libMesh::FE< 2, L2_LAGRANGE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 136 of file fe_lagrange_shape_2D.C.

141 {
142  libmesh_assert(elem);
143  return fe_lagrange_2D_shape<L2_LAGRANGE>(elem->type(), elem, fet.order + add_p_level*elem->p_level(), i, p);
144 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [83/195]

Real libMesh::FE< 2, MONOMIAL >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 136 of file fe_monomial_shape_2D.C.

141 {
142  libmesh_assert(elem);
143  // by default call the orientation-independent shape functions
144  return FE<2,MONOMIAL>::shape(elem->type(), fet.order + add_p_level*elem->p_level(), i, p);
145 }
libmesh_assert(ctx)

◆ shape() [84/195]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 140 of file fe_raviart_shape_3D.C.

144 {
145  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
146  return RealGradient();
147 }
RealVectorValue RealGradient

◆ shape() [85/195]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 142 of file fe_hierarchic_shape_1D.C.

147 {
148  libmesh_assert(elem);
149  return fe_hierarchic_1D_shape(elem->type(), fet.order + add_p_level*elem->p_level(), i, p);
150 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [86/195]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 147 of file fe_nedelec_one_shape_3D.C.

152 {
153  return FE<3,NEDELEC_ONE>::shape(elem, fet.order, i, p, add_p_level);
154 }

◆ shape() [87/195]

Real libMesh::FE< 2, XYZ >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 148 of file fe_xyz_shape_2D.C.

152 {
153  libmesh_error_msg("XYZ polynomials require the element.");
154  return 0.;
155 }

◆ shape() [88/195]

static OutputShape libMesh::FE< Dim, T >::shape ( const ElemType  t,
const Order  o,
const unsigned int  i,
const Point p 
)
staticinherited
Returns
The value of the \( i^{th} \) shape function at point p. This method allows you to specify the dimension, element type, and order directly. This allows the method to be static.

On a p-refined element, o should be the total order of the element.

◆ shape() [89/195]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 149 of file fe_hierarchic_shape_2D.C.

153 {
154  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
155  return 0.;
156 }

◆ shape() [90/195]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 151 of file fe_raviart_shape_3D.C.

156 {
157  return FE<3,RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
158 }

◆ shape() [91/195]

RealGradient libMesh::FE< 0, L2_HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 155 of file fe_hierarchic_vec.C.

157 {
158  return FE<0,HIERARCHIC_VEC>::shape(type, order, i, p);
159 }

◆ shape() [92/195]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape ( const Elem ,
const Order  ,
const unsigned int  i,
const Point p,
const bool   
)
inherited

Definition at line 155 of file fe_hierarchic_shape_1D.C.

160 {
161  unsigned int right_side = p(0) > 0; // 0 false, 1 true
162  return (right_side == i);
163 }

◆ shape() [93/195]

Real libMesh::FE< 2, XYZ >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 160 of file fe_xyz_shape_2D.C.

165 {
166  return FE<2,XYZ>::shape(elem, fet.order, i, p, add_p_level);
167 }

◆ shape() [94/195]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 161 of file fe_hierarchic_shape_2D.C.

165 {
166  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
167  return 0.;
168 }

◆ shape() [95/195]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 162 of file fe_raviart_shape_3D.C.

167 {
168  return FE<3,L2_RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
169 }

◆ shape() [96/195]

static OutputShape libMesh::FE< Dim, T >::shape ( const Elem elem,
const Order  o,
const unsigned int  i,
const Point p,
const bool  add_p_level = true 
)
staticinherited
Returns
The value of the \( i^{th} \) shape function at point p. This method allows you to specify the dimension, element type, and order directly. This allows the method to be static.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shape() [97/195]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape ( const FEType  ,
const Elem ,
const unsigned int  i,
const Point p,
const bool   
)
inherited

Definition at line 166 of file fe_hierarchic_shape_1D.C.

171 {
172  unsigned int right_side = p(0) > 0; // 0 false, 1 true
173  return (right_side == i);
174 }

◆ shape() [98/195]

Real libMesh::FE< 2, HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 173 of file fe_hierarchic_shape_2D.C.

178 {
179  return fe_hierarchic_2D_shape<HIERARCHIC>(elem, order, i, p, add_p_level);
180 }

◆ shape() [99/195]

RealGradient libMesh::FE< 1, HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 178 of file fe_hierarchic_vec.C.

180 {
181  Real value = FE<1,HIERARCHIC>::shape( type, order, i, p );
182  return libMesh::RealGradient( value );
183 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [100/195]

static OutputShape libMesh::FE< Dim, T >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level = true 
)
staticinherited
Returns
The value of the \( i^{th} \) shape function at point p. This method allows you to specify the dimension and element type directly. The order is given by the FEType. This allows the method to be static.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shape() [101/195]

Real libMesh::FE< 1, HERMITE >::shape ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const Point p,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 182 of file fe_hermite_shape_1D.C.

187 {
188  libmesh_assert(elem);
189 
190  // Coefficient naming: d(1)d(2n) is the coefficient of the
191  // global shape function corresponding to value 1 in terms of the
192  // local shape function corresponding to normal derivative 2
193  Real d1xd1x, d2xd2x;
194 
195  hermite_compute_coefs(elem, d1xd1x, d2xd2x);
196 
197  const ElemType type = elem->type();
198 
199 #ifndef NDEBUG
200  const unsigned int totalorder =
201  order + add_p_level * elem->p_level();
202 #endif
203 
204  switch (type)
205  {
206  // C1 functions on the C1 cubic edge
207  case EDGE2:
208  case EDGE3:
209  {
210  libmesh_assert_less (i, totalorder+1);
211 
212  switch (i)
213  {
214  case 0:
215  return FEHermite<1>::hermite_raw_shape(0, p(0));
216  case 1:
217  return d1xd1x * FEHermite<1>::hermite_raw_shape(2, p(0));
218  case 2:
219  return FEHermite<1>::hermite_raw_shape(1, p(0));
220  case 3:
221  return d2xd2x * FEHermite<1>::hermite_raw_shape(3, p(0));
222  default:
223  return FEHermite<1>::hermite_raw_shape(i, p(0));
224  }
225  }
226  default:
227  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
228  }
229 }
ElemType
Defines an enum for geometric element types.
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape() [102/195]

Real libMesh::FE< 2, HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 185 of file fe_hierarchic_shape_2D.C.

190 {
191  return fe_hierarchic_2D_shape<HIERARCHIC>(elem, fet.order, i, p, add_p_level);
192 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape() [103/195]

RealVectorValue libMesh::FE< 1, MONOMIAL_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 186 of file fe_monomial_vec.C.

190 {
191  Real value = FE<1, MONOMIAL>::shape(type, order, i, p);
193 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [104/195]

Real libMesh::FE< 3, MONOMIAL >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 190 of file fe_monomial_shape_3D.C.

195 {
196  libmesh_assert(elem);
197 
198  // call the orientation-independent shape functions
199  return FE<3,MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
200 }
libmesh_assert(ctx)

◆ shape() [105/195]

Real libMesh::FE< 1, BERNSTEIN >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 193 of file fe_bernstein_shape_1D.C.

198 {
199  libmesh_assert(elem);
200 
201  return FE<1,BERNSTEIN>::shape
202  (elem->type(),
203  order + add_p_level*elem->p_level(), i, p);
204 }
libmesh_assert(ctx)

◆ shape() [106/195]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 196 of file fe_hierarchic_shape_2D.C.

201 {
202  return fe_hierarchic_2D_shape<L2_HIERARCHIC>(elem, order, i, p, add_p_level);
203 }

◆ shape() [107/195]

RealGradient libMesh::FE< 1, L2_HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 202 of file fe_hierarchic_vec.C.

204 {
205  return FE<1,HIERARCHIC_VEC>::shape(type, order, i, p);
206 }

◆ shape() [108/195]

Real libMesh::FE< 3, MONOMIAL >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 205 of file fe_monomial_shape_3D.C.

210 {
211  libmesh_assert(elem);
212  // by default call the orientation-independent shape functions
213  return FE<3,MONOMIAL>::shape(elem->type(), fet.order + add_p_level*elem->p_level(), i, p);
214 }
libmesh_assert(ctx)

◆ shape() [109/195]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 207 of file fe_hierarchic_shape_2D.C.

212 {
213  return fe_hierarchic_2D_shape<L2_HIERARCHIC>(elem, fet.order, i, p, add_p_level);
214 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape() [110/195]

Real libMesh::FE< 1, BERNSTEIN >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 208 of file fe_bernstein_shape_1D.C.

213 {
214  libmesh_assert(elem);
215  return FE<1,BERNSTEIN>::shape
216  (elem->type(),
217  fet.order + add_p_level*elem->p_level(), i, p);
218 }
libmesh_assert(ctx)

◆ shape() [111/195]

Real libMesh::FE< 3, XYZ >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 216 of file fe_xyz_shape_3D.C.

220 {
221  libmesh_error_msg("XYZ polynomials require the element.");
222  return 0.;
223 }

◆ shape() [112/195]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 218 of file fe_hierarchic_shape_2D.C.

223 {
224  libmesh_assert(elem);
225  const ElemType type = elem->type();
226 
227  const Order totalorder = order + add_p_level*elem->p_level();
228 
229  const unsigned int dofs_per_side = totalorder+1u;
230 
231  switch (type)
232  {
233  case TRI6:
234  case TRI7:
235  {
236  libmesh_assert_less(i, 3*dofs_per_side);
237 
238  // Flip odd degree of freedom values if necessary
239  // to keep continuity on sides. We'll flip xi/eta rather than
240  // flipping phi, so that we can use this to handle the "nodal"
241  // degrees of freedom too.
242  Real f = 1.;
243 
244  const Real zeta1 = p(0);
245  const Real zeta2 = p(1);
246  const Real zeta0 = 1. - zeta1 - zeta2;
247 
248  if (zeta1 > zeta2 && zeta0 > zeta2) // side 0
249  {
250  if (i >= dofs_per_side)
251  return 0;
252 
253  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
254  return 1;
255 
256  if ((i < 2 || i % 2) &&
257  elem->positive_edge_orientation(0))
258  f = -1;
259 
260  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, i, f*(zeta1-zeta0));
261  }
262  else if (zeta1 > zeta0 && zeta2 > zeta0) // side 1
263  {
264  if (i < dofs_per_side ||
265  i >= 2*dofs_per_side)
266  return 0;
267 
268  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
269  return 1;
270 
271  const unsigned int side_i = i - dofs_per_side;
272 
273  if ((side_i < 2 || side_i % 2) &&
274  elem->positive_edge_orientation(1))
275  f = -1;
276 
277  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*(zeta2-zeta1));
278  }
279  else // side 2
280  {
281  libmesh_assert (zeta2 >= zeta1 && zeta0 >= zeta1); // On a corner???
282 
283  if (i < 2*dofs_per_side)
284  return 0;
285 
286  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
287  return 1;
288 
289  const unsigned int side_i = i - 2*dofs_per_side;
290 
291  if ((side_i < 2 || side_i % 2) &&
292  elem->positive_edge_orientation(2))
293  f = -1;
294 
295  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*(zeta0-zeta2));
296  }
297  }
298  case QUAD8:
299  case QUADSHELL8:
300  case QUAD9:
301  case QUADSHELL9:
302  {
303  libmesh_assert_less(i, 4*dofs_per_side);
304 
305  // Flip odd degree of freedom values if necessary
306  // to keep continuity on sides. We'll flip xi/eta rather than
307  // flipping phi, so that we can use this to handle the "nodal"
308  // degrees of freedom too.
309  Real f = 1.;
310 
311  const Real xi = p(0), eta = p(1);
312  if (eta < xi)
313  {
314  if (eta < -xi) // side 0
315  {
316  if (i >= dofs_per_side)
317  return 0;
318 
319  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
320  return 1;
321 
322  if ((i < 2 || i % 2) &&
323  elem->positive_edge_orientation(0))
324  f = -1;
325 
326  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, i, f*xi);
327  }
328  else // side 1
329  {
330  if (i < dofs_per_side ||
331  i >= 2*dofs_per_side)
332  return 0;
333 
334  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
335  return 1;
336 
337  const unsigned int side_i = i - dofs_per_side;
338 
339  if ((side_i < 2 || side_i % 2) &&
340  elem->positive_edge_orientation(1))
341  f = -1;
342 
343  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*eta);
344  }
345  }
346  else // xi < eta
347  {
348  if (eta > -xi) // side 2
349  {
350  if (i < 2*dofs_per_side ||
351  i >= 3*dofs_per_side)
352  return 0;
353 
354  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
355  return 1;
356 
357  const unsigned int side_i = i - 2*dofs_per_side;
358 
359  if ((side_i < 2 || side_i % 2) &&
360  !elem->positive_edge_orientation(2))
361  f = -1;
362 
363  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*xi);
364  }
365  else // side 3
366  {
367  if (i < 3*dofs_per_side)
368  return 0;
369 
370  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
371  return 1;
372 
373  const unsigned int side_i = i - 3*dofs_per_side;
374 
375  if ((side_i < 2 || side_i % 2) &&
376  !elem->positive_edge_orientation(3))
377  f = -1;
378 
379  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*eta);
380  }
381  }
382  }
383  default:
384  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(elem->type()));
385  }
386  return 0;
387 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)
bool positive_edge_orientation(const unsigned int i) const
Definition: elem.C:3589
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0

◆ shape() [113/195]

RealVectorValue libMesh::FE< 2, MONOMIAL_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 223 of file fe_monomial_vec.C.

227 {
228  Real value = FE<2, MONOMIAL>::shape(type, order, i / 2, p);
229 
230  switch (i % 2)
231  {
232  case 0:
234 
235  case 1:
236  return libMesh::RealVectorValue(Real(0), value);
237 
238  default:
239  libmesh_error_msg("i%2 must be either 0 or 1!");
240  }
241 
242  // dummy
243  return libMesh::RealVectorValue();
244 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [114/195]

RealGradient libMesh::FE< 2, HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 225 of file fe_hierarchic_vec.C.

227 {
228  Real value = FE<2,HIERARCHIC>::shape( type, order, i/2, p );
229 
230  switch( i%2 )
231  {
232  case 0:
233  return libMesh::RealGradient( value );
234 
235  case 1:
236  return libMesh::RealGradient( Real(0), value );
237 
238  default:
239  libmesh_error_msg("i%2 must be either 0 or 1!");
240  }
241 
242  //dummy
243  return libMesh::RealGradient();
244 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [115/195]

Real libMesh::FE< 3, XYZ >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 228 of file fe_xyz_shape_3D.C.

233 {
234  return FE<3,XYZ>::shape(elem, fet.order, i, p, add_p_level);
235 }

◆ shape() [116/195]

Real libMesh::FE< 1, HERMITE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 234 of file fe_hermite_shape_1D.C.

238 {
239  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
240  return 0.;
241 }

◆ shape() [117/195]

Real libMesh::FE< 1, HERMITE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 245 of file fe_hermite_shape_1D.C.

250 {
251  return FE<1,HERMITE>::shape(elem, fet.order, i, p, add_p_level);
252 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [118/195]

Real libMesh::FE< 2, HERMITE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 248 of file fe_hermite_shape_2D.C.

252 {
253  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
254  return 0.;
255 }

◆ shape() [119/195]

Real libMesh::FE< 2, HERMITE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 259 of file fe_hermite_shape_2D.C.

264 {
265  return FE<2,HERMITE>::shape(elem, fet.order, i, p, add_p_level);
266 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [120/195]

Real libMesh::FE< 1, CLOUGH >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 281 of file fe_clough_shape_1D.C.

285 {
286  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
287  return 0.;
288 }

◆ shape() [121/195]

Real libMesh::FE< 1, CLOUGH >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 291 of file fe_clough_shape_1D.C.

296 {
297  return FE<1,CLOUGH>::shape(elem, fet.order, i, p, add_p_level);
298 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [122/195]

RealGradient libMesh::FE< 2, L2_HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 292 of file fe_hierarchic_vec.C.

294 {
295  return FE<2,HIERARCHIC_VEC>::shape(type, order, i, p);
296 }

◆ shape() [123/195]

RealVectorValue libMesh::FE< 3, MONOMIAL_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 303 of file fe_monomial_vec.C.

307 {
308  Real value = FE<3, MONOMIAL>::shape(type, order, i / 3, p);
309 
310  switch (i % 3)
311  {
312  case 0:
314 
315  case 1:
316  return libMesh::RealVectorValue(Real(0), value);
317 
318  case 2:
319  return libMesh::RealVectorValue(Real(0), Real(0), value);
320 
321  default:
322  libmesh_error_msg("i%3 must be 0, 1, or 2!");
323  }
324 
325  // dummy
326  return libMesh::RealVectorValue();
327 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [124/195]

RealGradient libMesh::FE< 3, HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 316 of file fe_hierarchic_vec.C.

318 {
319  Real value = FE<3,HIERARCHIC>::shape( type, order, i/3, p );
320 
321  switch( i%3 )
322  {
323  case 0:
324  return libMesh::RealGradient( value );
325 
326  case 1:
327  return libMesh::RealGradient( Real(0), value );
328 
329  case 2:
330  return libMesh::RealGradient( Real(0), Real(0), value );
331 
332  default:
333  libmesh_error_msg("i%3 must be 0, 1, or 2!");
334  }
335 
336  //dummy
337  return libMesh::RealGradient();
338 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [125/195]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 391 of file fe_hierarchic_shape_2D.C.

396 {
397  return FE<2,SIDE_HIERARCHIC>::shape(elem, fet.order, i, p, add_p_level);
398 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [126/195]

RealVectorValue libMesh::FE< 0, MONOMIAL_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 393 of file fe_monomial_vec.C.

398 {
399  Real value =
400  FE<0, MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
402 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [127/195]

Real libMesh::FE< 2, BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 393 of file fe_bernstein_shape_2D.C.

397 {
398  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge orientation is needed.");
399  return 0.;
400 }

◆ shape() [128/195]

RealGradient libMesh::FE< 3, L2_HIERARCHIC_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 393 of file fe_hierarchic_vec.C.

395 {
396  return FE<3,HIERARCHIC_VEC>::shape(type, order, i, p);
397 }

◆ shape() [129/195]

Real libMesh::FE< 2, BERNSTEIN >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 404 of file fe_bernstein_shape_2D.C.

409 {
410  return FE<2,BERNSTEIN>::shape(elem, fet.order, i, p, add_p_level);
411 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [130/195]

RealGradient libMesh::FE< 0, HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 418 of file fe_hierarchic_vec.C.

421 {
422  const Real value = FE<0,HIERARCHIC>::shape(elem, order, i, p, add_p_level);
423  return libMesh::RealGradient( value );
424 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [131/195]

Real libMesh::FE< 3, LAGRANGE >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 419 of file fe_lagrange_shape_3D.C.

423 {
424  return fe_lagrange_3D_shape<LAGRANGE>(type, order, nullptr, i, p);
425 }

◆ shape() [132/195]

Real libMesh::FE< 3, L2_LAGRANGE >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 430 of file fe_lagrange_shape_3D.C.

434 {
435  return fe_lagrange_3D_shape<L2_LAGRANGE>(type, order, nullptr, i, p);
436 }

◆ shape() [133/195]

RealVectorValue libMesh::FE< 1, MONOMIAL_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 438 of file fe_monomial_vec.C.

443 {
444  Real value =
445  FE<1, MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i, p);
447 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [134/195]

Real libMesh::FE< 3, LAGRANGE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 441 of file fe_lagrange_shape_3D.C.

446 {
447  libmesh_assert(elem);
448 
449  // call the orientation-independent shape functions
450  return fe_lagrange_3D_shape<LAGRANGE>(elem->type(), order + add_p_level*elem->p_level(), elem, i, p);
451 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [135/195]

Real libMesh::FE< 3, HERMITE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 443 of file fe_hermite_shape_3D.C.

447 {
448  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
449  return 0.;
450 }

◆ shape() [136/195]

RealGradient libMesh::FE< 0, L2_HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 447 of file fe_hierarchic_vec.C.

450 {
451  return FE<0,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
452 }

◆ shape() [137/195]

Real libMesh::FE< 3, HERMITE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 453 of file fe_hermite_shape_3D.C.

458 {
459  return FE<3,HERMITE>::shape(elem, fet.order, i, p, add_p_level);
460 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [138/195]

Real libMesh::FE< 3, L2_LAGRANGE >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 456 of file fe_lagrange_shape_3D.C.

461 {
462  libmesh_assert(elem);
463 
464  // call the orientation-independent shape functions
465  return fe_lagrange_3D_shape<L2_LAGRANGE>(elem->type(), order + add_p_level*elem->p_level(), elem, i, p);
466 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [139/195]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 457 of file fe_nedelec_one.C.

458 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [140/195]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 460 of file fe_nedelec_one.C.

461 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [141/195]

Real libMesh::FE< 3, LAGRANGE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 471 of file fe_lagrange_shape_3D.C.

476 {
477  libmesh_assert(elem);
478  return fe_lagrange_3D_shape<LAGRANGE>(elem->type(), fet.order + add_p_level*elem->p_level(), elem, i, p);
479 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [142/195]

RealGradient libMesh::FE< 1, HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 475 of file fe_hierarchic_vec.C.

478 {
479  Real value = FE<1,HIERARCHIC>::shape(elem, order, i, p, add_p_level);
480  return libMesh::RealGradient( value );
481 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [143/195]

RealVectorValue libMesh::FE< 2, MONOMIAL_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 482 of file fe_monomial_vec.C.

487 {
488  Real value =
489  FE<2, MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i / 2, p);
490 
491  switch (i % 2)
492  {
493  case 0:
495 
496  case 1:
497  return libMesh::RealVectorValue(Real(0), value);
498 
499  default:
500  libmesh_error_msg("i%2 must be either 0 or 1!");
501  }
502 
503  // dummy
504  return libMesh::RealVectorValue();
505 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [144/195]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 484 of file fe_nedelec_one.C.

485 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [145/195]

Real libMesh::FE< 3, L2_LAGRANGE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 484 of file fe_lagrange_shape_3D.C.

489 {
490  libmesh_assert(elem);
491  return fe_lagrange_3D_shape<L2_LAGRANGE>(elem->type(), fet.order + add_p_level*elem->p_level(), elem, i, p);
492 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [146/195]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 487 of file fe_nedelec_one.C.

488 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [147/195]

RealGradient libMesh::FE< 1, L2_HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 503 of file fe_hierarchic_vec.C.

506 {
507  return FE<1,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
508 }

◆ shape() [148/195]

RealGradient libMesh::FE< 2, HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 531 of file fe_hierarchic_vec.C.

534 {
535  const Real value = FE<2,HIERARCHIC>::shape(elem, order, i/2, p, add_p_level);
536 
537  switch( i%2 )
538  {
539  case 0:
540  return libMesh::RealGradient( value );
541 
542  case 1:
543  return libMesh::RealGradient( Real(0), value );
544 
545  default:
546  libmesh_error_msg("i%2 must be either 0 or 1!");
547  }
548 
549  //dummy
550  return libMesh::RealGradient();
551 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [149/195]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 549 of file fe_raviart.C.

550 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [150/195]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 552 of file fe_raviart.C.

553 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [151/195]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 555 of file fe_raviart.C.

556 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [152/195]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 558 of file fe_raviart.C.

559 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [153/195]

RealVectorValue libMesh::FE< 3, MONOMIAL_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 568 of file fe_monomial_vec.C.

573 {
574  Real value =
575  FE<3, MONOMIAL>::shape(elem->type(), order + add_p_level*elem->p_level(), i / 3, p);
576 
577  switch (i % 3)
578  {
579  case 0:
581 
582  case 1:
583  return libMesh::RealVectorValue(Real(0), value);
584 
585  case 2:
586  return libMesh::RealVectorValue(Real(0), Real(0), value);
587 
588  default:
589  libmesh_error_msg("i%3 must be 0, 1, or 2!");
590  }
591 
592  // dummy
593  return libMesh::RealVectorValue();
594 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [154/195]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 598 of file fe_raviart.C.

599 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [155/195]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 601 of file fe_raviart.C.

602 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [156/195]

RealGradient libMesh::FE< 2, L2_HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 601 of file fe_hierarchic_vec.C.

604 {
605  return FE<2,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
606 }

◆ shape() [157/195]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 604 of file fe_raviart.C.

605 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [158/195]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 607 of file fe_raviart.C.

608 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [159/195]

RealGradient libMesh::FE< 3, HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 628 of file fe_hierarchic_vec.C.

631 {
632  const Real value = FE<3,HIERARCHIC>::shape(elem, order, i/3, p, add_p_level);
633 
634  switch( i%3 )
635  {
636  case 0:
637  return libMesh::RealGradient( value );
638 
639  case 1:
640  return libMesh::RealGradient( Real(0), value );
641 
642  case 2:
643  return libMesh::RealGradient( Real(0), Real(0), value );
644 
645  default:
646  libmesh_error_msg("i%3 must be 0, 1, or 2!");
647  }
648 
649  //dummy
650  return libMesh::RealGradient();
651 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [160/195]

Real libMesh::FE< 2, SZABAB >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 644 of file fe_szabab_shape_2D.C.

648 {
649  libmesh_error_msg("Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
650  return 0.;
651 }

◆ shape() [161/195]

Real libMesh::FE< 2, SZABAB >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 656 of file fe_szabab_shape_2D.C.

661 {
662  return FE<2,SZABAB>::shape(elem, fet.order, i, p, add_p_level);
663 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [162/195]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 685 of file fe_nedelec_one_shape_2D.C.

689 {
690  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
691  return RealGradient();
692 }
RealVectorValue RealGradient

◆ shape() [163/195]

RealGradient libMesh::FE< 0, L2_LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 695 of file fe_lagrange_vec.C.

697 {
698  return FE<0,LAGRANGE_VEC>::shape(type, order, i, p);
699 }

◆ shape() [164/195]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 696 of file fe_nedelec_one_shape_2D.C.

701 {
702  return FE<2,NEDELEC_ONE>::shape(elem, fet.order, i, p, add_p_level);
703 }

◆ shape() [165/195]

Real libMesh::FE< 2, SUBDIVISION >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 709 of file fe_subdivision_2D.C.

713 {
714  switch (order)
715  {
716  case FOURTH:
717  {
718  switch (type)
719  {
720  case TRI3SUBDIVISION:
721  libmesh_assert_less(i, 12);
722  return FESubdivision::regular_shape(i,p(0),p(1));
723  default:
724  libmesh_error_msg("ERROR: Unsupported element type == " << Utility::enum_to_string(type));
725  }
726  }
727  default:
728  libmesh_error_msg("ERROR: Unsupported polynomial order == " << order);
729  }
730 }
std::string enum_to_string(const T e)

◆ shape() [166/195]

RealGradient libMesh::FE< 3, L2_HIERARCHIC_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 709 of file fe_hierarchic_vec.C.

712 {
713  return FE<3,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
714 }

◆ shape() [167/195]

RealGradient libMesh::FE< 1, LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 718 of file fe_lagrange_vec.C.

720 {
721  Real value = FE<1,LAGRANGE>::shape( type, order, i, p );
722  return libMesh::RealGradient( value );
723 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [168/195]

Real libMesh::FE< 2, SUBDIVISION >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 735 of file fe_subdivision_2D.C.

740 {
741  libmesh_assert(elem);
742  const Order totalorder = order + add_p_level*elem->p_level();
743  return FE<2,SUBDIVISION>::shape(elem->type(), totalorder, i, p);
744 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
libmesh_assert(ctx)

◆ shape() [169/195]

RealGradient libMesh::FE< 1, L2_LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 742 of file fe_lagrange_vec.C.

744 {
745  return FE<1,LAGRANGE_VEC>::shape(type, order, i, p);
746 }

◆ shape() [170/195]

Real libMesh::FE< 2, SUBDIVISION >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 748 of file fe_subdivision_2D.C.

753 {
754  libmesh_assert(elem);
755  const Order totalorder = fet.order + add_p_level*elem->p_level();
756  return FE<2,SUBDIVISION>::shape(elem->type(), totalorder, i, p);
757 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
libmesh_assert(ctx)

◆ shape() [171/195]

RealGradient libMesh::FE< 2, LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 765 of file fe_lagrange_vec.C.

767 {
768  Real value = FE<2,LAGRANGE>::shape( type, order, i/2, p );
769 
770  switch( i%2 )
771  {
772  case 0:
773  return libMesh::RealGradient( value );
774 
775  case 1:
776  return libMesh::RealGradient( Real(0), value );
777 
778  default:
779  libmesh_error_msg("i%2 must be either 0 or 1!");
780  }
781 
782  //dummy
783  return libMesh::RealGradient();
784 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [172/195]

RealGradient libMesh::FE< 2, L2_LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 832 of file fe_lagrange_vec.C.

834 {
835  return FE<2,LAGRANGE_VEC>::shape(type, order, i, p);
836 }

◆ shape() [173/195]

RealGradient libMesh::FE< 3, LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 856 of file fe_lagrange_vec.C.

858 {
859  Real value = FE<3,LAGRANGE>::shape( type, order, i/3, p );
860 
861  switch( i%3 )
862  {
863  case 0:
864  return libMesh::RealGradient( value );
865 
866  case 1:
867  return libMesh::RealGradient( Real(0), value );
868 
869  case 2:
870  return libMesh::RealGradient( Real(0), Real(0), value );
871 
872  default:
873  libmesh_error_msg("i%3 must be 0, 1, or 2!");
874  }
875 
876  //dummy
877  return libMesh::RealGradient();
878 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [174/195]

Real libMesh::FE< 2, SUBDIVISION >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Subdivision finite elements.

Template specialization prototypes are needed for calling from inside FESubdivision::init_shape_functions

◆ shape() [175/195]

Real libMesh::FE< 3, BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 894 of file fe_bernstein_shape_3D.C.

898 {
899  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge and face orientation is needed.");
900  return 0.;
901 }

◆ shape() [176/195]

Real libMesh::FE< 3, BERNSTEIN >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 905 of file fe_bernstein_shape_3D.C.

910 {
911  return FE<3,BERNSTEIN>::shape(elem, fet.order, i, p, add_p_level);
912 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [177/195]

RealGradient libMesh::FE< 3, L2_LAGRANGE_VEC >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 933 of file fe_lagrange_vec.C.

935 {
936  return FE<3,LAGRANGE_VEC>::shape(type, order, i, p);
937 }

◆ shape() [178/195]

RealGradient libMesh::FE< 0, LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 958 of file fe_lagrange_vec.C.

961 {
962  Real value = FE<0,LAGRANGE>::shape( elem->type(), order + add_p_level*elem->p_level(), i, p);
963  return libMesh::RealGradient( value );
964 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [179/195]

RealGradient libMesh::FE< 0, L2_LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 987 of file fe_lagrange_vec.C.

990 {
991  return FE<0,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
992 }

◆ shape() [180/195]

RealGradient libMesh::FE< 1, LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1014 of file fe_lagrange_vec.C.

1017 {
1018  Real value = FE<1,LAGRANGE>::shape( elem->type(), order + add_p_level*elem->p_level(), i, p);
1019  return libMesh::RealGradient( value );
1020 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [181/195]

RealGradient libMesh::FE< 1, L2_LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1042 of file fe_lagrange_vec.C.

1045 {
1046  return FE<1,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1047 }

◆ shape() [182/195]

RealGradient libMesh::FE< 2, LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1069 of file fe_lagrange_vec.C.

1072 {
1073  Real value = FE<2,LAGRANGE>::shape( elem->type(), order + add_p_level*elem->p_level(), i/2, p );
1074 
1075  switch( i%2 )
1076  {
1077  case 0:
1078  return libMesh::RealGradient( value );
1079 
1080  case 1:
1081  return libMesh::RealGradient( Real(0), value );
1082 
1083  default:
1084  libmesh_error_msg("i%2 must be either 0 or 1!");
1085  }
1086 
1087  //dummy
1088  return libMesh::RealGradient();
1089 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [183/195]

RealGradient libMesh::FE< 2, L2_LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1139 of file fe_lagrange_vec.C.

1142 {
1143  return FE<2,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1144 }

◆ shape() [184/195]

RealGradient libMesh::FE< 3, LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1166 of file fe_lagrange_vec.C.

1169 {
1170  Real value = FE<3,LAGRANGE>::shape( elem->type(), order + add_p_level*elem->p_level(), i/3, p );
1171 
1172  switch( i%3 )
1173  {
1174  case 0:
1175  return libMesh::RealGradient( value );
1176 
1177  case 1:
1178  return libMesh::RealGradient( Real(0), value );
1179 
1180  case 2:
1181  return libMesh::RealGradient( Real(0), Real(0), value );
1182 
1183  default:
1184  libmesh_error_msg("i%3 must be 0, 1, or 2!");
1185  }
1186 
1187  //dummy
1188  return libMesh::RealGradient();
1189 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape() [185/195]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 1177 of file fe_hierarchic_shape_3D.C.

1181 {
1182  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1183  return 0.;
1184 }

◆ shape() [186/195]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 1189 of file fe_hierarchic_shape_3D.C.

1193 {
1194  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1195  return 0.;
1196 }

◆ shape() [187/195]

Real libMesh::FE< 3, HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1201 of file fe_hierarchic_shape_3D.C.

1206 {
1207  return fe_hierarchic_3D_shape<HIERARCHIC>(elem, order, i, p, add_p_level);
1208 }

◆ shape() [188/195]

Real libMesh::FE< 3, HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1212 of file fe_hierarchic_shape_3D.C.

1217 {
1218  return fe_hierarchic_3D_shape<HIERARCHIC>(elem, fet.order, i, p, add_p_level);
1219 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape() [189/195]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1225 of file fe_hierarchic_shape_3D.C.

1230 {
1231  return fe_hierarchic_3D_shape<L2_HIERARCHIC>(elem, order, i, p, add_p_level);
1232 }

◆ shape() [190/195]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1236 of file fe_hierarchic_shape_3D.C.

1241 {
1242  return fe_hierarchic_3D_shape<L2_HIERARCHIC>(elem, fet.order, i, p, add_p_level);
1243 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape() [191/195]

RealGradient libMesh::FE< 3, L2_LAGRANGE_VEC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1246 of file fe_lagrange_vec.C.

1249 {
1250  return FE<3,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1251 }

◆ shape() [192/195]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape ( const Elem elem,
const Order  order,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1248 of file fe_hierarchic_shape_3D.C.

1253 {
1254 #if LIBMESH_DIM == 3
1255  libmesh_assert(elem);
1256  const ElemType type = elem->type();
1257 
1258  const Order totalorder = order + add_p_level*elem->p_level();
1259 
1260  switch (type)
1261  {
1262  case HEX27:
1263  {
1264  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+1u);
1265  libmesh_assert_less(i, 6*dofs_per_side);
1266 
1267  const unsigned int sidenum = cube_side(p);
1268  if (sidenum > 5)
1269  return std::numeric_limits<Real>::quiet_NaN();
1270 
1271  const unsigned int dof_offset = sidenum * dofs_per_side;
1272 
1273  if (i < dof_offset) // i is on a previous side
1274  return 0;
1275 
1276  if (i >= dof_offset + dofs_per_side) // i is on a later side
1277  return 0;
1278 
1279  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
1280  return 1;
1281 
1282  unsigned int side_i = i - dof_offset;
1283 
1284  std::unique_ptr<const Elem> side = elem->build_side_ptr(sidenum);
1285 
1286  Point sidep = cube_side_point(sidenum, p);
1287 
1288  cube_remap(side_i, *side, totalorder, sidep);
1289 
1290  return FE<2,HIERARCHIC>::shape(side.get(), order, side_i, sidep, add_p_level);
1291  }
1292 
1293  case TET14:
1294  {
1295  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+2u)/2u;
1296  libmesh_assert_less(i, 4*dofs_per_side);
1297 
1298  const Real zeta[4] = { Real(1.) - p(0) - p(1) - p(2), p(0), p(1), p(2) };
1299 
1300  unsigned int face_num = 0;
1301  if (zeta[0] > zeta[3] &&
1302  zeta[1] > zeta[3] &&
1303  zeta[2] > zeta[3])
1304  {
1305  face_num = 0;
1306  }
1307  else if (zeta[0] > zeta[2] &&
1308  zeta[1] > zeta[2] &&
1309  zeta[3] > zeta[2])
1310  {
1311  face_num = 1;
1312  }
1313  else if (zeta[1] > zeta[0] &&
1314  zeta[2] > zeta[0] &&
1315  zeta[3] > zeta[0])
1316  {
1317  face_num = 2;
1318  }
1319  else
1320  {
1321  // We'd better not be right between two faces
1322  libmesh_assert (zeta[0] > zeta[1] &&
1323  zeta[2] > zeta[1] &&
1324  zeta[3] > zeta[1]);
1325  face_num = 3;
1326  }
1327 
1328  if (i < face_num * dofs_per_side ||
1329  i >= (face_num+1) * dofs_per_side)
1330  return 0;
1331 
1332  if (totalorder == 0)
1333  return 1;
1334 
1335  const std::array<unsigned int, 3> face_vertex =
1336  oriented_tet_nodes(*elem, face_num);
1337 
1338  // We only need a Tri3 to evaluate L2_HIERARCHIC on the affine
1339  // master element
1340  Tri3 side;
1341 
1342  // We pinky swear not to modify these nodes
1343  Elem & e = const_cast<Elem &>(*elem);
1344  side.set_node(0, e.node_ptr(face_vertex[0]));
1345  side.set_node(1, e.node_ptr(face_vertex[1]));
1346  side.set_node(2, e.node_ptr(face_vertex[2]));
1347 
1348  const unsigned int basisnum = i - face_num*dofs_per_side;
1349 
1350  Point sidep {zeta[face_vertex[1]], zeta[face_vertex[2]]};
1351 
1352  return FE<2,L2_HIERARCHIC>::shape(&side, totalorder,
1353  basisnum, sidep, false);
1354  }
1355 
1356  case PRISM20:
1357  case PRISM21:
1358  {
1359  const unsigned int dofs_per_quad = (totalorder+1u)*(totalorder+1u);
1360  const unsigned int dofs_per_tri = (totalorder+1u)*(totalorder+2u)/2u;
1361  libmesh_assert_less(i, 3*dofs_per_quad + 2*dofs_per_tri);
1362 
1363  // We only need a Tri3 or Quad4 to evaluate L2_HIERARCHIC on
1364  // the affine master element
1365  Tri3 tri;
1366  Quad4 quad;
1367  Elem * side = &quad;
1368  unsigned int dofs_on_side = dofs_per_quad;
1369 
1370  // We pinky swear not to modify the nodes we'll point to
1371  Elem & e = const_cast<Elem &>(*elem);
1372 
1373  Point sidep;
1374 
1375  // Face number calculation is tricky - the ordering of side
1376  // nodes on Prisms does *not* match the ordering of sides!
1377  // (the mid-triangle side nodes were added "later")
1378  // Here face_num will be the numbering that matches the side
1379  // number, but i_offset will have to consider the nodal
1380  // ordering.
1381  unsigned int face_num = 0;
1382  unsigned int i_offset = 0;
1383 
1384  // Triangular coordinates
1385  const Real zeta[3] = { Real(1.) - p(0) - p(1), p(0), p(1) };
1386 
1387  // Closeness to midplane
1388  const Real zmid = 1 - std::abs(p(2));
1389 
1390  if (zeta[1] > zeta[2] && zeta[0] > zeta[2] &&
1391  zmid > 3*zeta[2]) // face 1, quad
1392  {
1393  face_num = 1;
1394  i_offset = 0;
1395  }
1396  else if (zeta[1] > zeta[0] && zeta[2] > zeta[0] &&
1397  zmid > 3*zeta[0]) // face 2, quad
1398  {
1399  face_num = 2;
1400  i_offset = dofs_per_quad;
1401  }
1402  else if (zeta[0] > zeta[1] && zeta[2] > zeta[1] &&
1403  zmid > 3*zeta[1]) // face 3, quad
1404  {
1405  face_num = 3;
1406  i_offset = 2*dofs_per_quad;
1407  }
1408  else if (p(2) + 1 < 3*zeta[0] &&
1409  p(2) + 1 < 3*zeta[1] &&
1410  p(2) + 1 < 3*zeta[2]) // face 0, tri
1411  {
1412  face_num = 0;
1413  i_offset = 3*dofs_per_quad;
1414  dofs_on_side = dofs_per_tri;
1415  side = &tri;
1416  }
1417  else if (1 - p(2) < 3*zeta[0] &&
1418  1 - p(2) < 3*zeta[1] &&
1419  1 - p(2) < 3*zeta[2]) // face 4, tri
1420  {
1421  face_num = 4;
1422  i_offset = dofs_per_tri + 3*dofs_per_quad;
1423  dofs_on_side = dofs_per_tri;
1424  side = &tri;
1425  }
1426  else
1427  {
1428  libmesh_error_msg("Evaluating SIDE_HIERARCHIC right between two Prism faces?");
1429  }
1430 
1431  if (i < i_offset ||
1432  i >= i_offset + dofs_on_side)
1433  return 0;
1434 
1435  if (totalorder == 0)
1436  return 1;
1437 
1438  const std::array<unsigned int, 4> face_vertex =
1439  oriented_prism_nodes(*elem, face_num);
1440 
1441  side->set_node(0, e.node_ptr(face_vertex[0]));
1442  side->set_node(1, e.node_ptr(face_vertex[1]));
1443  side->set_node(2, e.node_ptr(face_vertex[2]));
1444  if (face_vertex[3] < 21)
1445  side->set_node(3, e.node_ptr(face_vertex[3]));
1446 
1447  if (face_num == 0 || face_num == 4)
1448  sidep = {zeta[face_vertex[1]%3], zeta[face_vertex[2]%3]};
1449  else
1450  {
1451  // Transform a coordinate from the master prism to the
1452  // master quad, based on two vertex indices defining the
1453  // coordinate's direction
1454  auto coord_val = [p](int v1, int v2){
1455  if (v2-v1 == 3)
1456  return p(2);
1457  else if (v2-v1 == -3)
1458  return -p(2);
1459  else if (v1%3 == 0 && v2%3 == 1)
1460  return 2*p(0)-1;
1461  else if (v2%3 == 0 && v1%3 == 1)
1462  return 1-2*p(0);
1463  else if (v1%3 == 1 && v2%3 == 2)
1464  return p(1)-p(0);
1465  else if (v2%3 == 1 && v1%3 == 2)
1466  return p(0)-p(1);
1467  else if (v1%3 == 2 && v2%3 == 0)
1468  return 1-2*p(1);
1469  else if (v2%3 == 2 && v1%3 == 0)
1470  return 2*p(1)-1;
1471  else
1472  libmesh_error();
1473  };
1474 
1475  sidep = {coord_val(face_vertex[0], face_vertex[1]),
1476  coord_val(face_vertex[0], face_vertex[3])};
1477  }
1478 
1479  const unsigned int basisnum = i - i_offset;
1480 
1481  return FE<2,L2_HIERARCHIC>::shape(side, totalorder,
1482  basisnum, sidep, false);
1483  }
1484 
1485 
1486  default:
1487  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1488  }
1489 
1490 #else // LIBMESH_DIM != 3
1491  libmesh_ignore(elem, order, i, p, add_p_level);
1492  libmesh_not_implemented();
1493 #endif
1494 }
The Tri3 is an element in 2D composed of 3 nodes.
Definition: face_tri3.h:61
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
virtual Node *& set_node(const unsigned int i)
Definition: elem.h:2558
The QUAD4 is an element in 2D composed of 4 nodes.
Definition: face_quad4.h:53
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
unsigned int p_level() const
Definition: elem.h:3108
A specific instantiation of the FEBase class.
Definition: fe.h:127
void libmesh_ignore(const Args &...)
static void dofs_on_side(const Elem *const elem, const Order o, unsigned int s, std::vector< unsigned int > &di, bool add_p_level=true)
Fills the vector di with the local degree of freedom indices associated with side s of element elem...
Definition: fe.C:99
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Node * node_ptr(const unsigned int i) const
Definition: elem.h:2507
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39

◆ shape() [193/195]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1498 of file fe_hierarchic_shape_3D.C.

1503 {
1504  return FE<3,SIDE_HIERARCHIC>::shape(elem,fet.order, i, p, add_p_level);
1505 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [194/195]

Real libMesh::FE< 2, CLOUGH >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 1946 of file fe_clough_shape_2D.C.

1950 {
1951  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
1952  return 0.;
1953 }

◆ shape() [195/195]

Real libMesh::FE< 2, CLOUGH >::shape ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1957 of file fe_clough_shape_2D.C.

1962 {
1963  return FE<2,CLOUGH>::shape(elem, fet.order, i, p, add_p_level);
1964 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [1/233]

Real libMesh::FE< 0, SCALAR >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 63 of file fe_scalar_shape_0D.C.

68 {
69  return 0.;
70 }

◆ shape_deriv() [2/233]

Real libMesh::FE< 3, SCALAR >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 64 of file fe_scalar_shape_3D.C.

69 {
70  return 0.;
71 }

◆ shape_deriv() [3/233]

Real libMesh::FE< 2, SCALAR >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 65 of file fe_scalar_shape_2D.C.

70 {
71  return 0.;
72 }

◆ shape_deriv() [4/233]

Real libMesh::FE< 1, SCALAR >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 66 of file fe_scalar_shape_1D.C.

71 {
72  return 0.;
73 }

◆ shape_deriv() [5/233]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 69 of file fe_rational_shape_0D.C.

74 {
75  libmesh_error_msg("No spatial derivatives in 0D!");
76  return 0.;
77 }

◆ shape_deriv() [6/233]

Real libMesh::FE< 0, BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 70 of file fe_bernstein_shape_0D.C.

75 {
76  libmesh_error_msg("No spatial derivatives in 0D!");
77  return 0.;
78 }

◆ shape_deriv() [7/233]

Real libMesh::FE< 0, HERMITE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 71 of file fe_hermite_shape_0D.C.

76 {
77  libmesh_error_msg("No spatial derivatives in 0D!");
78  return 0.;
79 }

◆ shape_deriv() [8/233]

Real libMesh::FE< 0, CLOUGH >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 71 of file fe_clough_shape_0D.C.

76 {
77  libmesh_error_msg("No spatial derivatives in 0D!");
78  return 0.;
79 }

◆ shape_deriv() [9/233]

Real libMesh::FE< 0, MONOMIAL >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 72 of file fe_monomial_shape_0D.C.

77 {
78  libmesh_error_msg("No spatial derivatives in 0D!");
79  return 0.;
80 }

◆ shape_deriv() [10/233]

Real libMesh::FE< 0, SZABAB >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 72 of file fe_szabab_shape_0D.C.

77 {
78  libmesh_error_msg("No spatial derivatives in 0D!");
79  return 0.;
80 }

◆ shape_deriv() [11/233]

Real libMesh::FE< 3, SZABAB >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 72 of file fe_szabab_shape_3D.C.

77 {
78  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
79  return 0.;
80 }

◆ shape_deriv() [12/233]

Real libMesh::FE< 0, XYZ >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 72 of file fe_xyz_shape_0D.C.

77 {
78  libmesh_error_msg("No spatial derivatives in 0D!");
79  return 0.;
80 }

◆ shape_deriv() [13/233]

Real libMesh::FE< 0, SCALAR >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 73 of file fe_scalar_shape_0D.C.

79 {
80  return 0.;
81 }

◆ shape_deriv() [14/233]

Real libMesh::FE< 3, SCALAR >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 74 of file fe_scalar_shape_3D.C.

80 {
81  return 0.;
82 }

◆ shape_deriv() [15/233]

Real libMesh::FE< 2, SCALAR >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 75 of file fe_scalar_shape_2D.C.

81 {
82  return 0.;
83 }

◆ shape_deriv() [16/233]

Real libMesh::FE< 1, SCALAR >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 76 of file fe_scalar_shape_1D.C.

82 {
83  return 0.;
84 }

◆ shape_deriv() [17/233]

Real libMesh::FE< 3, CLOUGH >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 77 of file fe_clough_shape_3D.C.

82 {
83  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
84  return 0.;
85 }

◆ shape_deriv() [18/233]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 81 of file fe_rational_shape_3D.C.

87 {
88  libmesh_assert(elem);
89 
90  FEType underlying_fe_type(order, _underlying_fe_family);
91 
92  return rational_fe_shape_deriv(*elem, underlying_fe_type, i, j, p,
93  add_p_level);
94 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape_deriv(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Definition: fe.C:1153

◆ shape_deriv() [19/233]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 82 of file fe_rational_shape_0D.C.

88 {
89  libmesh_error_msg("No spatial derivatives in 0D!");
90  return 0.;
91 }

◆ shape_deriv() [20/233]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 83 of file fe_rational_shape_2D.C.

89 {
90  libmesh_assert(elem);
91 
92  FEType underlying_fe_type(order, _underlying_fe_family);
93 
94  return rational_fe_shape_deriv(*elem, underlying_fe_type, i, j, p,
95  add_p_level);
96 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape_deriv(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Definition: fe.C:1153

◆ shape_deriv() [21/233]

Real libMesh::FE< 0, BERNSTEIN >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 83 of file fe_bernstein_shape_0D.C.

89 {
90  libmesh_error_msg("No spatial derivatives in 0D!");
91  return 0.;
92 }

◆ shape_deriv() [22/233]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 84 of file fe_rational_shape_1D.C.

90 {
91  libmesh_assert(elem);
92 
93  FEType underlying_fe_type(order, _underlying_fe_family);
94 
95  return rational_fe_shape_deriv(*elem, underlying_fe_type, i, j, p,
96  add_p_level);
97 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape_deriv(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Definition: fe.C:1153

◆ shape_deriv() [23/233]

Real libMesh::FE< 0, HERMITE >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 84 of file fe_hermite_shape_0D.C.

90 {
91  libmesh_error_msg("No spatial derivatives in 0D!");
92  return 0.;
93 }

◆ shape_deriv() [24/233]

Real libMesh::FE< 0, CLOUGH >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 84 of file fe_clough_shape_0D.C.

90 {
91  libmesh_error_msg("No spatial derivatives in 0D!");
92  return 0.;
93 }

◆ shape_deriv() [25/233]

Real libMesh::FE< 3, SZABAB >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 85 of file fe_szabab_shape_3D.C.

91 {
92  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
93  return 0.;
94 }

◆ shape_deriv() [26/233]

Real libMesh::FE< 0, XYZ >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 85 of file fe_xyz_shape_0D.C.

91 {
92  libmesh_error_msg("No spatial derivatives in 0D!");
93  return 0.;
94 }

◆ shape_deriv() [27/233]

Real libMesh::FE< 0, MONOMIAL >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 85 of file fe_monomial_shape_0D.C.

91 {
92  libmesh_error_msg("No spatial derivatives in 0D!");
93  return 0.;
94 }

◆ shape_deriv() [28/233]

Real libMesh::FE< 0, SCALAR >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 85 of file fe_scalar_shape_0D.C.

91 {
92  return 0.;
93 }

◆ shape_deriv() [29/233]

Real libMesh::FE< 0, SZABAB >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 85 of file fe_szabab_shape_0D.C.

91 {
92  libmesh_error_msg("No spatial derivatives in 0D!");
93  return 0.;
94 }

◆ shape_deriv() [30/233]

Real libMesh::FE< 3, SCALAR >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 86 of file fe_scalar_shape_3D.C.

92 {
93  return 0.;
94 }

◆ shape_deriv() [31/233]

Real libMesh::FE< 2, SCALAR >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 87 of file fe_scalar_shape_2D.C.

93 {
94  return 0.;
95 }

◆ shape_deriv() [32/233]

Real libMesh::FE< 1, SCALAR >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 88 of file fe_scalar_shape_1D.C.

94 {
95  return 0.;
96 }

◆ shape_deriv() [33/233]

Real libMesh::FE< 3, CLOUGH >::shape_deriv ( const Elem libmesh_dbg_varelem,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 90 of file fe_clough_shape_3D.C.

96 {
97  libmesh_assert(elem);
98  libmesh_not_implemented();
99  return 0.;
100 }
libmesh_assert(ctx)

◆ shape_deriv() [34/233]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 91 of file fe_raviart_shape_2D.C.

97 {
98  RealGradient ND1 = FE<2,NEDELEC_ONE>::shape_deriv(elem, order, i, j, p, add_p_level);
99  return RealGradient(-ND1(1), ND1(0));
100 }
RealVectorValue RealGradient

◆ shape_deriv() [35/233]

Real libMesh::FE< 0, BERNSTEIN >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 95 of file fe_bernstein_shape_0D.C.

101 {
102  libmesh_error_msg("No spatial derivatives in 0D!");
103  return 0.;
104 }

◆ shape_deriv() [36/233]

Real libMesh::FE< 0, CLOUGH >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 96 of file fe_clough_shape_0D.C.

102 {
103  libmesh_error_msg("No spatial derivatives in 0D!");
104  return 0.;
105 }

◆ shape_deriv() [37/233]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 96 of file fe_rational_shape_0D.C.

102 {
103  libmesh_error_msg("No spatial derivatives in 0D!");
104  return 0.;
105 }

◆ shape_deriv() [38/233]

Real libMesh::FE< 1, MONOMIAL >::shape_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point p 
)
inherited

Definition at line 97 of file fe_monomial_shape_1D.C.

102 {
103  // only d()/dxi in 1D!
104 
105  libmesh_assert_equal_to (j, 0);
106 
107  const Real xi = p(0);
108 
109  libmesh_assert_less_equal (i, static_cast<unsigned int>(order));
110 
111  // monomials. since they are hierarchic we only need one case block.
112  switch (i)
113  {
114  case 0:
115  return 0.;
116 
117  case 1:
118  return 1.;
119 
120  case 2:
121  return 2.*xi;
122 
123  case 3:
124  return 3.*xi*xi;
125 
126  case 4:
127  return 4.*xi*xi*xi;
128 
129  default:
130  Real val = i;
131  for (unsigned int index = 1; index != i; ++index)
132  val *= xi;
133  return val;
134  }
135 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [39/233]

Real libMesh::FE< 0, HERMITE >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 97 of file fe_hermite_shape_0D.C.

103 {
104  libmesh_error_msg("No spatial derivatives in 0D!");
105  return 0.;
106 }

◆ shape_deriv() [40/233]

Real libMesh::FE< 0, MONOMIAL >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 98 of file fe_monomial_shape_0D.C.

104 {
105  libmesh_error_msg("No spatial derivatives in 0D!");
106  return 0.;
107 }

◆ shape_deriv() [41/233]

Real libMesh::FE< 0, SZABAB >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 98 of file fe_szabab_shape_0D.C.

104 {
105  libmesh_error_msg("No spatial derivatives in 0D!");
106  return 0.;
107 }

◆ shape_deriv() [42/233]

Real libMesh::FE< 3, SZABAB >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 98 of file fe_szabab_shape_3D.C.

104 {
105  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
106  return 0;
107 }

◆ shape_deriv() [43/233]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 98 of file fe_rational_shape_3D.C.

103 {
104  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
105  return 0.;
106 }

◆ shape_deriv() [44/233]

Real libMesh::FE< 0, XYZ >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 99 of file fe_xyz_shape_0D.C.

105 {
106  libmesh_error_msg("No spatial derivatives in 0D!");
107  return 0.;
108 }

◆ shape_deriv() [45/233]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 100 of file fe_rational_shape_2D.C.

105 {
106  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
107  return 0.;
108 }

◆ shape_deriv() [46/233]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 101 of file fe_rational_shape_1D.C.

106 {
107  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
108  return 0.;
109 }

◆ shape_deriv() [47/233]

Real libMesh::FE< 1, LAGRANGE >::shape_deriv ( const ElemType  ,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 103 of file fe_lagrange_shape_1D.C.

108 {
109  return fe_lagrange_1D_shape_deriv(order, i, j, p(0));
110 }
Real fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)

◆ shape_deriv() [48/233]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 103 of file fe_raviart_shape_2D.C.

109 {
110  return FE<2,RAVIART_THOMAS>::shape_deriv(elem, order, i, j, p, add_p_level);
111 }

◆ shape_deriv() [49/233]

Real libMesh::FE< 3, CLOUGH >::shape_deriv ( const FEType  ,
const Elem libmesh_dbg_varelem,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 104 of file fe_clough_shape_3D.C.

110 {
111  libmesh_assert(elem);
112  libmesh_not_implemented();
113  return 0.;
114 }
libmesh_assert(ctx)

◆ shape_deriv() [50/233]

Real libMesh::FE< 0, L2_LAGRANGE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 105 of file fe_lagrange_shape_0D.C.

110 {
111  libmesh_error_msg("No spatial derivatives in 0D!");
112  return 0.;
113 }

◆ shape_deriv() [51/233]

Real libMesh::FE< 1, XYZ >::shape_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point point_in,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 108 of file fe_xyz_shape_1D.C.

114 {
115  libmesh_assert(elem);
116  libmesh_assert_less_equal (i, order + add_p_level * elem->p_level());
117 
118  // only d()/dxi in 1D!
119 
120  libmesh_assert_equal_to (j, 0);
121 
122  Point avg = elem->vertex_average();
123  Real max_distance = 0.;
124  for (const Point & p : elem->node_ref_range())
125  {
126  const Real distance = std::abs(avg(0) - p(0));
127  max_distance = std::max(distance, max_distance);
128  }
129 
130  const Real x = point_in(0);
131  const Real xc = avg(0);
132  const Real dx = (x - xc)/max_distance;
133 
134  // monomials. since they are hierarchic we only need one case block.
135  switch (i)
136  {
137  case 0:
138  return 0.;
139 
140  case 1:
141  return 1./max_distance;
142 
143  case 2:
144  return 2.*dx/max_distance;
145 
146  case 3:
147  return 3.*dx*dx/max_distance;
148 
149  case 4:
150  return 4.*dx*dx*dx/max_distance;
151 
152  default:
153  Real val = i;
154  for (unsigned int index = 1; index != i; ++index)
155  val *= dx;
156  return val/max_distance;
157  }
158 }
Real distance(const Point &p)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [52/233]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 110 of file fe_rational_shape_3D.C.

116 {
118  (elem, fet.order, i, j, p, add_p_level);
119 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [53/233]

Real libMesh::FE< 1, SZABAB >::shape_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point p 
)
inherited

Definition at line 110 of file fe_szabab_shape_1D.C.

115 {
116  // only d()/dxi in 1D!
117  libmesh_assert_equal_to (j, 0);
118 
119  const Real xi = p(0);
120  const Real xi2 = xi*xi;
121 
122  // Use this libmesh_assert rather than a switch with a single entry...
123  // It will go away in optimized mode, essentially has the same effect.
124  libmesh_assert_less_equal (order, SEVENTH);
125 
126  // switch (order)
127  // {
128  // case FIRST:
129  // case SECOND:
130  // case THIRD:
131  // case FOURTH:
132  // case FIFTH:
133  // case SIXTH:
134  // case SEVENTH:
135 
136  switch(i)
137  {
138  case 0:return -1./2.;
139  case 1: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;
147 
148  default:
149  libmesh_error_msg("Invalid shape function index!");
150  }
151 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [54/233]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 113 of file fe_rational_shape_1D.C.

119 {
120  libmesh_assert(elem);
121  return FE<1,RATIONAL_BERNSTEIN>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
122 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape_deriv() [55/233]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 113 of file fe_rational_shape_2D.C.

119 {
121  (elem, fet.order, i, j, p, add_p_level);
122 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [56/233]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 114 of file fe_raviart_shape_2D.C.

119 {
120  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
121  return RealGradient();
122 }
RealVectorValue RealGradient

◆ shape_deriv() [57/233]

Real libMesh::FE< 1, L2_LAGRANGE >::shape_deriv ( const ElemType  ,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 115 of file fe_lagrange_shape_1D.C.

120 {
121  return fe_lagrange_1D_shape_deriv(order, i, j, p(0));
122 }
Real fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)

◆ shape_deriv() [58/233]

Real libMesh::FE< 0, L2_LAGRANGE >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 118 of file fe_lagrange_shape_0D.C.

124 {
125  libmesh_error_msg("No spatial derivatives in 0D!");
126  return 0.;
127 }

◆ shape_deriv() [59/233]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 125 of file fe_raviart_shape_2D.C.

130 {
131  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
132  return RealGradient();
133 }
RealVectorValue RealGradient

◆ shape_deriv() [60/233]

Real libMesh::FE< 1, LAGRANGE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 127 of file fe_lagrange_shape_1D.C.

133 {
134  libmesh_assert(elem);
135 
136  return fe_lagrange_1D_shape_deriv(order + add_p_level*elem->p_level(), i, j, p(0));
137 }
Real fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_deriv() [61/233]

Real libMesh::FE< 0, LAGRANGE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 132 of file fe_lagrange_shape_0D.C.

137 {
138  libmesh_error_msg("No spatial derivatives in 0D!");
139  return 0.;
140 }

◆ shape_deriv() [62/233]

RealGradient libMesh::FE< 0, HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 136 of file fe_hierarchic_vec.C.

139 {
140  Real value = FE<0,HIERARCHIC>::shape_deriv( type, order, i, j, p );
141  return libMesh::RealGradient( value );
142 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [63/233]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 136 of file fe_raviart_shape_2D.C.

142 {
143  return FE<2,RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
144 }

◆ shape_deriv() [64/233]

Real libMesh::FE< 1, MONOMIAL >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 140 of file fe_monomial_shape_1D.C.

146 {
147  libmesh_assert(elem);
148 
149  return FE<1,MONOMIAL>::shape_deriv(elem->type(),
150  order + add_p_level*elem->p_level(), i, j, p);
151 }
libmesh_assert(ctx)

◆ shape_deriv() [65/233]

Real libMesh::FE< 1, L2_LAGRANGE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 142 of file fe_lagrange_shape_1D.C.

148 {
149  libmesh_assert(elem);
150 
151  return fe_lagrange_1D_shape_deriv(order + add_p_level*elem->p_level(), i, j, p(0));
152 }
Real fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_deriv() [66/233]

Real libMesh::FE< 0, LAGRANGE >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 145 of file fe_lagrange_shape_0D.C.

151 {
152  libmesh_error_msg("No spatial derivatives in 0D!");
153  return 0.;
154 }

◆ shape_deriv() [67/233]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 147 of file fe_raviart_shape_2D.C.

153 {
154  return FE<2,L2_RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
155 }

◆ shape_deriv() [68/233]

Real libMesh::FE< 2, LAGRANGE >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 148 of file fe_lagrange_shape_2D.C.

153 {
154  return fe_lagrange_2D_shape_deriv<LAGRANGE>(type, nullptr, order, i, j, p);
155 }

◆ shape_deriv() [69/233]

Real libMesh::FE< 0, HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 149 of file fe_hierarchic_shape_0D.C.

154 {
155  libmesh_error_msg("No spatial derivatives in 0D!");
156  return 0.;
157 }

◆ shape_deriv() [70/233]

Real libMesh::FE< 2, MONOMIAL >::shape_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 150 of file fe_monomial_shape_2D.C.

155 {
156 #if LIBMESH_DIM > 1
157 
158 
159  libmesh_assert_less (j, 2);
160 
161  libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
162  (static_cast<unsigned int>(order)+2)/2);
163 
164  const Real xi = p(0);
165  const Real eta = p(1);
166 
167  // monomials. since they are hierarchic we only need one case block.
168 
169  switch (j)
170  {
171  // d()/dxi
172  case 0:
173  {
174  switch (i)
175  {
176  // constants
177  case 0:
178  return 0.;
179 
180  // linears
181  case 1:
182  return 1.;
183 
184  case 2:
185  return 0.;
186 
187  // quadratics
188  case 3:
189  return 2.*xi;
190 
191  case 4:
192  return eta;
193 
194  case 5:
195  return 0.;
196 
197  // cubics
198  case 6:
199  return 3.*xi*xi;
200 
201  case 7:
202  return 2.*xi*eta;
203 
204  case 8:
205  return eta*eta;
206 
207  case 9:
208  return 0.;
209 
210  // quartics
211  case 10:
212  return 4.*xi*xi*xi;
213 
214  case 11:
215  return 3.*xi*xi*eta;
216 
217  case 12:
218  return 2.*xi*eta*eta;
219 
220  case 13:
221  return eta*eta*eta;
222 
223  case 14:
224  return 0.;
225 
226  default:
227  unsigned int o = 0;
228  for (; i >= (o+1)*(o+2)/2; o++) { }
229  const int ny = i - (o*(o+1)/2);
230  const int nx = o - ny;
231  Real val = nx;
232  for (int index=1; index < nx; index++)
233  val *= xi;
234  for (int index=0; index != ny; index++)
235  val *= eta;
236  return val;
237  }
238  }
239 
240 
241  // d()/deta
242  case 1:
243  {
244  switch (i)
245  {
246  // constants
247  case 0:
248  return 0.;
249 
250  // linears
251  case 1:
252  return 0.;
253 
254  case 2:
255  return 1.;
256 
257  // quadratics
258  case 3:
259  return 0.;
260 
261  case 4:
262  return xi;
263 
264  case 5:
265  return 2.*eta;
266 
267  // cubics
268  case 6:
269  return 0.;
270 
271  case 7:
272  return xi*xi;
273 
274  case 8:
275  return 2.*xi*eta;
276 
277  case 9:
278  return 3.*eta*eta;
279 
280  // quartics
281  case 10:
282  return 0.;
283 
284  case 11:
285  return xi*xi*xi;
286 
287  case 12:
288  return 2.*xi*xi*eta;
289 
290  case 13:
291  return 3.*xi*eta*eta;
292 
293  case 14:
294  return 4.*eta*eta*eta;
295 
296  default:
297  unsigned int o = 0;
298  for (; i >= (o+1)*(o+2)/2; o++) { }
299  const int ny = i - (o*(o+1)/2);
300  const int nx = o - ny;
301  Real val = ny;
302  for (int index=0; index != nx; index++)
303  val *= xi;
304  for (int index=1; index < ny; index++)
305  val *= eta;
306  return val;
307  }
308  }
309 
310  default:
311  libmesh_error_msg("Invalid shape function derivative j = " << j);
312  }
313 
314 #else // LIBMESH_DIM == 1
315  libmesh_ignore(i, j, p);
316  libmesh_assert(order);
317  libmesh_not_implemented();
318 #endif
319 }
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [71/233]

Real libMesh::FE< 1, MONOMIAL >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 155 of file fe_monomial_shape_1D.C.

161 {
162  libmesh_assert(elem);
163  return FE<1,MONOMIAL>::shape_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
164 
165 
166 }
libmesh_assert(ctx)

◆ shape_deriv() [72/233]

Real libMesh::FE< 1, LAGRANGE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 156 of file fe_lagrange_shape_1D.C.

162 {
163  libmesh_assert(elem);
164  return fe_lagrange_1D_shape_deriv(fet.order + add_p_level*elem->p_level(), i, j, p(0));
165 }
Real fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_deriv() [73/233]

Real libMesh::FE< 1, SZABAB >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 156 of file fe_szabab_shape_1D.C.

162 {
163  libmesh_assert(elem);
164 
165  return FE<1,SZABAB>::shape_deriv(elem->type(),
166  order + add_p_level*elem->p_level(), i, j, p);
167 }
libmesh_assert(ctx)

◆ shape_deriv() [74/233]

RealVectorValue libMesh::FE< 0, MONOMIAL_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 158 of file fe_monomial_vec.C.

163 {
164  Real value = FE<0, MONOMIAL>::shape_deriv(type, order, i, j, p);
166 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [75/233]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 158 of file fe_nedelec_one_shape_3D.C.

164 {
165 #if LIBMESH_DIM == 3
166  libmesh_assert(elem);
167  libmesh_assert_less (j, 3);
168 
169  const Order totalorder = order + add_p_level*elem->p_level();
170  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
171 
172  const char sign = elem->positive_edge_orientation(i) ? 1 : -1;
173 
174  const Real xi = p(0);
175  const Real eta = p(1);
176  const Real zeta = p(2);
177 
178  switch (totalorder)
179  {
180  // linear Nedelec (first kind) shape function first derivatives
181  case FIRST:
182  {
183  switch (elem->type())
184  {
185  case HEX20:
186  case HEX27:
187  {
188  // Even with a loose inverse_map tolerance we ought to
189  // be nearly on the element interior in master
190  // coordinates
191  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
192  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
193  libmesh_assert_less_equal ( std::fabs(zeta), 1.0+10*TOLERANCE );
194 
195  switch (j)
196  {
197  // d()/dxi
198  case 0:
199  {
200  switch(i)
201  {
202  case 0:
203  case 2:
204  case 8:
205  case 10:
206  return RealGradient();
207  case 1:
208  return sign * RealGradient( 0.0, -0.125*(1.0-zeta) );
209  case 3:
210  return sign * RealGradient( 0.0, -0.125*(-1.0+zeta) );
211  case 4:
212  return sign * RealGradient( 0.0, 0.0, -0.125*(-1.0+eta) );
213  case 5:
214  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0-eta) );
215  case 6:
216  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0+eta) );
217  case 7:
218  return sign * RealGradient( 0.0, 0.0, -0.125*(-1.0-eta) );
219  case 9:
220  return sign * RealGradient( 0.0, -0.125*(1.0+zeta), 0.0 );
221  case 11:
222  return sign * RealGradient( 0.0, -0.125*(-1.0-zeta), 0.0 );
223 
224  default:
225  libmesh_error_msg("Invalid i = " << i);
226  } // switch(i)
227 
228  } // j = 0
229 
230  // d()/deta
231  case 1:
232  {
233  switch(i)
234  {
235  case 1:
236  case 3:
237  case 9:
238  case 11:
239  return RealGradient();
240  case 0:
241  return sign * RealGradient( -0.125*(-1.0+zeta), 0.0, 0.0 );
242  case 2:
243  return sign * RealGradient( 0.125*(1.0-zeta), 0.0, 0.0 );
244  case 4:
245  return sign * RealGradient( 0.0, 0.0, -0.125*(-1.0+xi) );
246  case 5:
247  return sign * RealGradient( 0.0, 0.0, -0.125*(-1.0-xi) );
248  case 6:
249  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0+xi) );
250  case 7:
251  return sign * RealGradient( 0.0, 0.0, -0.125*(1.0-xi) );
252  case 8:
253  return sign * RealGradient( -0.125*(-1.0-zeta), 0.0, 0.0 );
254  case 10:
255  return sign * RealGradient( 0.125*(1.0+zeta), 0.0, 0.0 );
256 
257  default:
258  libmesh_error_msg("Invalid i = " << i);
259  } // switch(i)
260 
261  } // j = 1
262 
263  // d()/dzeta
264  case 2:
265  {
266  switch(i)
267  {
268  case 4:
269  case 5:
270  case 6:
271  case 7:
272  return RealGradient();
273  case 0:
274  return sign * RealGradient( -0.125*(-1.0+eta), 0.0, 0.0 );
275  case 1:
276  return sign * RealGradient( 0.0, -0.125*(-1.0-xi), 0.0 );
277  case 2:
278  return sign * RealGradient( 0.125*(-1.0-eta), 0.0, 0.0 );
279  case 3:
280  return sign * RealGradient( 0.0, -0.125*(-1.0+xi), 0.0 );
281  case 8:
282  return sign * RealGradient( -0.125*(1.0-eta), 0.0, 0.0 );
283  case 9:
284  return sign * RealGradient( 0.0, -0.125*(1.0+xi), 0.0 );
285  case 10:
286  return sign * RealGradient( 0.125*(1.0+eta), 0.0, 0.0 );
287  case 11:
288  return sign * RealGradient( 0.0, -0.125*(1.0-xi), 0.0 );
289 
290  default:
291  libmesh_error_msg("Invalid i = " << i);
292  } // switch(i)
293 
294  } // j = 2
295 
296  default:
297  libmesh_error_msg("Invalid j = " << j);
298  }
299  }
300 
301  case TET10:
302  case TET14:
303  {
304  switch (j)
305  {
306  // d()/dxi
307  case 0:
308  {
309  switch(i)
310  {
311  case 0:
312  return sign * RealGradient( 0.0, -1.0, -1.0 );
313  case 1:
314  return sign * RealGradient( 0.0, -1.0, 0.0 );
315  case 2:
316  return sign * RealGradient( 0.0, 1.0, 0.0 );
317  case 3:
318  return sign * RealGradient( 0.0, 0.0, 1.0 );
319  case 4:
320  return sign * RealGradient( 0.0, 0.0, -1.0 );
321  case 5:
322  return RealGradient();
323 
324  default:
325  libmesh_error_msg("Invalid i = " << i);
326  } // switch(i)
327 
328  } // j = 0
329 
330  // d()/deta
331  case 1:
332  {
333  switch(i)
334  {
335  case 0:
336  case 1:
337  return sign * RealGradient( 1.0, 0.0, 0.0 );
338  case 2:
339  return sign * RealGradient( -1.0, 0.0, -1.0 );
340  case 3:
341  return sign * RealGradient( 0.0, 0.0, 1.0 );
342  case 4:
343  return RealGradient();
344  case 5:
345  return sign * RealGradient( 0.0, 0.0, -1.0 );
346 
347  default:
348  libmesh_error_msg("Invalid i = " << i);
349  } // switch(i)
350 
351  } // j = 1
352 
353  // d()/dzeta
354  case 2:
355  {
356  switch(i)
357  {
358  case 0:
359  return sign * RealGradient( 1.0, 0.0, 0.0 );
360  case 1:
361  return RealGradient();
362  case 2:
363  case 5:
364  return sign * RealGradient( 0.0, 1.0, 0.0 );
365  case 3:
366  return sign * RealGradient( -1.0, -1.0, 0.0 );
367  case 4:
368  return sign * RealGradient( 1.0, 0.0, 0.0 );
369 
370  default:
371  libmesh_error_msg("Invalid i = " << i);
372  } // switch(i)
373 
374  } // j = 2
375 
376  default:
377  libmesh_error_msg("Invalid j = " << j);
378  }
379  }
380 
381  default:
382  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
383  }
384  }
385  // unsupported order
386  default:
387  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
388  }
389 
390 #else // LIBMESH_DIM != 3
391  libmesh_ignore(elem, order, i, j, p, add_p_level);
392  libmesh_not_implemented();
393 #endif
394 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static constexpr Real TOLERANCE
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [76/233]

Real libMesh::FE< 0, L2_LAGRANGE >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 159 of file fe_lagrange_shape_0D.C.

165 {
166  libmesh_error_msg("No spatial derivatives in 0D!");
167  return 0.;
168 }

◆ shape_deriv() [77/233]

RealGradient libMesh::FE< 0, L2_HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 160 of file fe_hierarchic_vec.C.

163 {
164  return FE<0,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
165 }

◆ shape_deriv() [78/233]

Real libMesh::FE< 2, L2_LAGRANGE >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 160 of file fe_lagrange_shape_2D.C.

165 {
166  return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(type, nullptr, order, i, j, p);
167 }

◆ shape_deriv() [79/233]

Real libMesh::FE< 0, HIERARCHIC >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 162 of file fe_hierarchic_shape_0D.C.

168 {
169  libmesh_error_msg("No spatial derivatives in 0D!");
170  return 0.;
171 }

◆ shape_deriv() [80/233]

Real libMesh::FE< 1, XYZ >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 163 of file fe_xyz_shape_1D.C.

168 {
169  libmesh_error_msg("XYZ polynomials require the element.");
170  return 0.;
171 }

◆ shape_deriv() [81/233]

Real libMesh::FE< 1, L2_LAGRANGE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 169 of file fe_lagrange_shape_1D.C.

175 {
176  libmesh_assert(elem);
177  return fe_lagrange_1D_shape_deriv(fet.order + add_p_level*elem->p_level(), i, j, p(0));
178 }
Real fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_deriv() [82/233]

Real libMesh::FE< 2, LAGRANGE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 172 of file fe_lagrange_shape_2D.C.

178 {
179  libmesh_assert(elem);
180 
181  // call the orientation-independent shape functions
182  return fe_lagrange_2D_shape_deriv<LAGRANGE>(elem->type(), elem, order + add_p_level*elem->p_level(), i, j, p);
183 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [83/233]

Real libMesh::FE< 0, LAGRANGE >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 172 of file fe_lagrange_shape_0D.C.

178 {
179  libmesh_error_msg("No spatial derivatives in 0D!");
180  return 0.;
181 }

◆ shape_deriv() [84/233]

Real libMesh::FE< 1, SZABAB >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 172 of file fe_szabab_shape_1D.C.

178 {
179  libmesh_assert(elem);
180 
181  return FE<1,SZABAB>::shape_deriv(elem->type(),
182  fet.order + add_p_level*elem->p_level(),
183  i,
184  j,
185  p);
186 }
libmesh_assert(ctx)

◆ shape_deriv() [85/233]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point ,
const bool  add_p_level 
)
inherited

Definition at line 173 of file fe_raviart_shape_3D.C.

179 {
180 #if LIBMESH_DIM == 3
181  libmesh_assert(elem);
182  libmesh_assert_less (j, 3);
183 
184  const Order totalorder = order + add_p_level*elem->p_level();
185  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
186 
187  const char sign = elem->positive_face_orientation(i) ? 1 : -1;
188 
189  switch (totalorder)
190  {
191  // linear Raviart-Thomas shape function first derivatives
192  case FIRST:
193  {
194  switch (elem->type())
195  {
196  case HEX27:
197  {
198  switch (j)
199  {
200  // d()/dxi
201  case 0:
202  {
203  switch(i)
204  {
205  case 0:
206  case 1:
207  case 3:
208  case 5:
209  return RealGradient();
210  case 2:
211  case 4:
212  return sign * RealGradient( 0.125, 0.0, 0.0 );
213 
214  default:
215  libmesh_error_msg("Invalid i = " << i);
216  } // switch(i)
217 
218  } // j = 0
219 
220  // d()/deta
221  case 1:
222  {
223  switch(i)
224  {
225  case 0:
226  case 2:
227  case 4:
228  case 5:
229  return RealGradient();
230  case 1:
231  case 3:
232  return sign * RealGradient( 0.0, 0.125, 0.0 );
233 
234  default:
235  libmesh_error_msg("Invalid i = " << i);
236  } // switch(i)
237 
238  } // j = 1
239 
240  // d()/dzeta
241  case 2:
242  {
243  switch(i)
244  {
245  case 1:
246  case 2:
247  case 3:
248  case 4:
249  return RealGradient();
250  case 0:
251  case 5:
252  return sign * RealGradient( 0.0, 0.0, 0.125 );
253 
254  default:
255  libmesh_error_msg("Invalid i = " << i);
256  } // switch(i)
257 
258  } // j = 2
259 
260  default:
261  libmesh_error_msg("Invalid j = " << j);
262  }
263  }
264 
265  case TET14:
266  {
267  switch (j)
268  {
269  // d()/dxi
270  case 0:
271  {
272  switch(i)
273  {
274  case 0:
275  case 1:
276  case 2:
277  case 3:
278  return sign * RealGradient( 2.0, 0.0, 0.0 );
279 
280  default:
281  libmesh_error_msg("Invalid i = " << i);
282  } // switch(i)
283 
284  } // j = 0
285 
286  // d()/deta
287  case 1:
288  {
289  switch(i)
290  {
291  case 0:
292  case 1:
293  case 2:
294  case 3:
295  return sign * RealGradient( 0.0, 2.0, 0.0 );
296 
297  default:
298  libmesh_error_msg("Invalid i = " << i);
299  } // switch(i)
300 
301  } // j = 1
302 
303  // d()/dzeta
304  case 2:
305  {
306  switch(i)
307  {
308  case 0:
309  case 1:
310  case 2:
311  case 3:
312  return sign * RealGradient( 0.0, 0.0, 2.0 );
313 
314  default:
315  libmesh_error_msg("Invalid i = " << i);
316  } // switch(i)
317 
318  } // j = 2
319 
320  default:
321  libmesh_error_msg("Invalid j = " << j);
322  }
323  }
324 
325  default:
326  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
327  }
328  }
329  // unsupported order
330  default:
331  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
332  }
333 
334 #else // LIBMESH_DIM != 3
335  libmesh_ignore(elem, order, i, j, p, add_p_level);
336  libmesh_not_implemented();
337 #endif
338 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)

◆ shape_deriv() [86/233]

Real libMesh::FE< 2, XYZ >::shape_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point point_in,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 174 of file fe_xyz_shape_2D.C.

180 {
181 #if LIBMESH_DIM > 1
182 
183 
184  libmesh_assert_less (j, 2);
185  libmesh_assert(elem);
186 
187  Point avg = elem->vertex_average();
188  Point max_distance = Point(0.,0.,0.);
189  for (const Point & p : elem->node_ref_range())
190  for (unsigned int d = 0; d < 2; d++)
191  {
192  const Real distance = std::abs(avg(d) - p(d));
193  max_distance(d) = std::max(distance, max_distance(d));
194  }
195 
196  const Real x = point_in(0);
197  const Real y = point_in(1);
198  const Real xc = avg(0);
199  const Real yc = avg(1);
200  const Real distx = max_distance(0);
201  const Real disty = max_distance(1);
202  const Real dx = (x - xc)/distx;
203  const Real dy = (y - yc)/disty;
204 
205 #ifndef NDEBUG
206  // totalorder is only used in the assertion below, so
207  // we avoid declaring it when asserts are not active.
208  const unsigned int totalorder = order + add_p_level * elem->p_level();
209 #endif
210  libmesh_assert_less (i, (totalorder+1)*(totalorder+2)/2);
211 
212  // monomials. since they are hierarchic we only need one case block.
213 
214  switch (j)
215  {
216  // d()/dx
217  case 0:
218  {
219  switch (i)
220  {
221  // constants
222  case 0:
223  return 0.;
224 
225  // linears
226  case 1:
227  return 1./distx;
228 
229  case 2:
230  return 0.;
231 
232  // quadratics
233  case 3:
234  return 2.*dx/distx;
235 
236  case 4:
237  return dy/distx;
238 
239  case 5:
240  return 0.;
241 
242  // cubics
243  case 6:
244  return 3.*dx*dx/distx;
245 
246  case 7:
247  return 2.*dx*dy/distx;
248 
249  case 8:
250  return dy*dy/distx;
251 
252  case 9:
253  return 0.;
254 
255  // quartics
256  case 10:
257  return 4.*dx*dx*dx/distx;
258 
259  case 11:
260  return 3.*dx*dx*dy/distx;
261 
262  case 12:
263  return 2.*dx*dy*dy/distx;
264 
265  case 13:
266  return dy*dy*dy/distx;
267 
268  case 14:
269  return 0.;
270 
271  default:
272  unsigned int o = 0;
273  for (; i >= (o+1)*(o+2)/2; o++) { }
274  unsigned int i2 = i - (o*(o+1)/2);
275  Real val = o - i2;
276  for (unsigned int index=i2+1; index < o; index++)
277  val *= dx;
278  for (unsigned int index=0; index != i2; index++)
279  val *= dy;
280  return val/distx;
281  }
282  }
283 
284 
285  // d()/dy
286  case 1:
287  {
288  switch (i)
289  {
290  // constants
291  case 0:
292  return 0.;
293 
294  // linears
295  case 1:
296  return 0.;
297 
298  case 2:
299  return 1./disty;
300 
301  // quadratics
302  case 3:
303  return 0.;
304 
305  case 4:
306  return dx/disty;
307 
308  case 5:
309  return 2.*dy/disty;
310 
311  // cubics
312  case 6:
313  return 0.;
314 
315  case 7:
316  return dx*dx/disty;
317 
318  case 8:
319  return 2.*dx*dy/disty;
320 
321  case 9:
322  return 3.*dy*dy/disty;
323 
324  // quartics
325  case 10:
326  return 0.;
327 
328  case 11:
329  return dx*dx*dx/disty;
330 
331  case 12:
332  return 2.*dx*dx*dy/disty;
333 
334  case 13:
335  return 3.*dx*dy*dy/disty;
336 
337  case 14:
338  return 4.*dy*dy*dy/disty;
339 
340  default:
341  unsigned int o = 0;
342  for (; i >= (o+1)*(o+2)/2; o++) { }
343  unsigned int i2 = i - (o*(o+1)/2);
344  Real val = i2;
345  for (unsigned int index=i2; index != o; index++)
346  val *= dx;
347  for (unsigned int index=1; index <= i2; index++)
348  val *= dy;
349  return val/disty;
350  }
351  }
352 
353 
354  default:
355  libmesh_error_msg("Invalid j = " << j);
356  }
357 
358 #else // LIBMESH_DIM <= 1
359  libmesh_assert(true || order || add_p_level);
360  libmesh_ignore(elem, i, j, point_in);
361  libmesh_not_implemented();
362 #endif
363 }
Real distance(const Point &p)
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [87/233]

Real libMesh::FE< 1, XYZ >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 175 of file fe_xyz_shape_1D.C.

181 {
182  return FE<1,XYZ>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
183 }

◆ shape_deriv() [88/233]

Real libMesh::FE< 0, HIERARCHIC >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 176 of file fe_hierarchic_shape_0D.C.

182 {
183  libmesh_error_msg("No spatial derivatives in 0D!");
184  return 0.;
185 }

◆ shape_deriv() [89/233]

Real libMesh::FE< 1, HIERARCHIC >::shape_deriv ( const ElemType  elem_type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 178 of file fe_hierarchic_shape_1D.C.

183 {
184  return fe_hierarchic_1D_shape_deriv(elem_type, order, i, j, p);
185 }

◆ shape_deriv() [90/233]

RealGradient libMesh::FE< 1, HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 184 of file fe_hierarchic_vec.C.

187 {
188  Real value = FE<1,HIERARCHIC>::shape_deriv( type, order, i, j, p );
189  return libMesh::RealGradient( value );
190 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [91/233]

Real libMesh::FE< 2, L2_LAGRANGE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 188 of file fe_lagrange_shape_2D.C.

194 {
195  libmesh_assert(elem);
196 
197  // call the orientation-independent shape functions
198  return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(elem->type(), elem, order + add_p_level*elem->p_level(), i, j, p);
199 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [92/233]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape_deriv ( const ElemType  elem_type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 190 of file fe_hierarchic_shape_1D.C.

195 {
196  return fe_hierarchic_1D_shape_deriv(elem_type, order, i, j, p);
197 }

◆ shape_deriv() [93/233]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 190 of file fe_hierarchic_shape_0D.C.

195 {
196  libmesh_error_msg("No spatial derivatives in 0D!");
197  return 0.;
198 }

◆ shape_deriv() [94/233]

RealVectorValue libMesh::FE< 1, MONOMIAL_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 196 of file fe_monomial_vec.C.

201 {
202  Real value = FE<1, MONOMIAL>::shape_deriv(type, order, i, j, p);
204 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [95/233]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 202 of file fe_hierarchic_shape_1D.C.

207 {
208  return 0;
209 }

◆ shape_deriv() [96/233]

Real libMesh::FE< 2, LAGRANGE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 203 of file fe_lagrange_shape_2D.C.

209 {
210  libmesh_assert(elem);
211  return fe_lagrange_2D_shape_deriv<LAGRANGE>(elem->type(), elem, fet.order + add_p_level*elem->p_level(), i, j, p);
212 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [97/233]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 203 of file fe_hierarchic_shape_0D.C.

209 {
210  libmesh_error_msg("No spatial derivatives in 0D!");
211  return 0.;
212 }

◆ shape_deriv() [98/233]

RealGradient libMesh::FE< 1, L2_HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 207 of file fe_hierarchic_vec.C.

210 {
211  return FE<1,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
212 }

◆ shape_deriv() [99/233]

Real libMesh::FE< 1, HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 214 of file fe_hierarchic_shape_1D.C.

220 {
221  libmesh_assert(elem);
222 
223  return fe_hierarchic_1D_shape_deriv(elem->type(),
224  order + add_p_level*elem->p_level(), i, j, p);
225 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [100/233]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 216 of file fe_hierarchic_shape_0D.C.

222 {
223  libmesh_error_msg("No spatial derivatives in 0D!");
224  return 0.;
225 }

◆ shape_deriv() [101/233]

Real libMesh::FE< 2, L2_LAGRANGE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 217 of file fe_lagrange_shape_2D.C.

223 {
224  libmesh_assert(elem);
225  return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(elem->type(), elem, fet.order + add_p_level*elem->p_level(), i, j, p);
226 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [102/233]

Real libMesh::FE< 3, MONOMIAL >::shape_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 219 of file fe_monomial_shape_3D.C.

224 {
225 #if LIBMESH_DIM == 3
226 
227  libmesh_assert_less (j, 3);
228 
229  libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
230  (static_cast<unsigned int>(order)+2)*
231  (static_cast<unsigned int>(order)+3)/6);
232 
233 
234  const Real xi = p(0);
235  const Real eta = p(1);
236  const Real zeta = p(2);
237 
238  // monomials. since they are hierarchic we only need one case block.
239  switch (j)
240  {
241  // d()/dxi
242  case 0:
243  {
244  switch (i)
245  {
246  // constant
247  case 0:
248  return 0.;
249 
250  // linear
251  case 1:
252  return 1.;
253 
254  case 2:
255  return 0.;
256 
257  case 3:
258  return 0.;
259 
260  // quadratic
261  case 4:
262  return 2.*xi;
263 
264  case 5:
265  return eta;
266 
267  case 6:
268  return 0.;
269 
270  case 7:
271  return zeta;
272 
273  case 8:
274  return 0.;
275 
276  case 9:
277  return 0.;
278 
279  // cubic
280  case 10:
281  return 3.*xi*xi;
282 
283  case 11:
284  return 2.*xi*eta;
285 
286  case 12:
287  return eta*eta;
288 
289  case 13:
290  return 0.;
291 
292  case 14:
293  return 2.*xi*zeta;
294 
295  case 15:
296  return eta*zeta;
297 
298  case 16:
299  return 0.;
300 
301  case 17:
302  return zeta*zeta;
303 
304  case 18:
305  return 0.;
306 
307  case 19:
308  return 0.;
309 
310  // quartics
311  case 20:
312  return 4.*xi*xi*xi;
313 
314  case 21:
315  return 3.*xi*xi*eta;
316 
317  case 22:
318  return 2.*xi*eta*eta;
319 
320  case 23:
321  return eta*eta*eta;
322 
323  case 24:
324  return 0.;
325 
326  case 25:
327  return 3.*xi*xi*zeta;
328 
329  case 26:
330  return 2.*xi*eta*zeta;
331 
332  case 27:
333  return eta*eta*zeta;
334 
335  case 28:
336  return 0.;
337 
338  case 29:
339  return 2.*xi*zeta*zeta;
340 
341  case 30:
342  return eta*zeta*zeta;
343 
344  case 31:
345  return 0.;
346 
347  case 32:
348  return zeta*zeta*zeta;
349 
350  case 33:
351  return 0.;
352 
353  case 34:
354  return 0.;
355 
356  default:
357  unsigned int o = 0;
358  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
359  const int i2 = i - (o*(o+1)*(o+2)/6);
360  int block=o, nz = 0;
361  for (; block < i2; block += (o-nz+1)) { nz++; }
362  const int nx = block - i2;
363  const int ny = o - nx - nz;
364  Real val = nx;
365  for (int index=1; index < nx; index++)
366  val *= xi;
367  for (int index=0; index != ny; index++)
368  val *= eta;
369  for (int index=0; index != nz; index++)
370  val *= zeta;
371  return val;
372  }
373  }
374 
375 
376  // d()/deta
377  case 1:
378  {
379  switch (i)
380  {
381  // constant
382  case 0:
383  return 0.;
384 
385  // linear
386  case 1:
387  return 0.;
388 
389  case 2:
390  return 1.;
391 
392  case 3:
393  return 0.;
394 
395  // quadratic
396  case 4:
397  return 0.;
398 
399  case 5:
400  return xi;
401 
402  case 6:
403  return 2.*eta;
404 
405  case 7:
406  return 0.;
407 
408  case 8:
409  return zeta;
410 
411  case 9:
412  return 0.;
413 
414  // cubic
415  case 10:
416  return 0.;
417 
418  case 11:
419  return xi*xi;
420 
421  case 12:
422  return 2.*xi*eta;
423 
424  case 13:
425  return 3.*eta*eta;
426 
427  case 14:
428  return 0.;
429 
430  case 15:
431  return xi*zeta;
432 
433  case 16:
434  return 2.*eta*zeta;
435 
436  case 17:
437  return 0.;
438 
439  case 18:
440  return zeta*zeta;
441 
442  case 19:
443  return 0.;
444 
445  // quartics
446  case 20:
447  return 0.;
448 
449  case 21:
450  return xi*xi*xi;
451 
452  case 22:
453  return 2.*xi*xi*eta;
454 
455  case 23:
456  return 3.*xi*eta*eta;
457 
458  case 24:
459  return 4.*eta*eta*eta;
460 
461  case 25:
462  return 0.;
463 
464  case 26:
465  return xi*xi*zeta;
466 
467  case 27:
468  return 2.*xi*eta*zeta;
469 
470  case 28:
471  return 3.*eta*eta*zeta;
472 
473  case 29:
474  return 0.;
475 
476  case 30:
477  return xi*zeta*zeta;
478 
479  case 31:
480  return 2.*eta*zeta*zeta;
481 
482  case 32:
483  return 0.;
484 
485  case 33:
486  return zeta*zeta*zeta;
487 
488  case 34:
489  return 0.;
490 
491  default:
492  unsigned int o = 0;
493  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
494  const int i2 = i - (o*(o+1)*(o+2)/6);
495  int block=o, nz = 0;
496  for (; block < i2; block += (o-nz+1)) { nz++; }
497  const int nx = block - i2;
498  const int ny = o - nx - nz;
499  Real val = ny;
500  for (int index=0; index != nx; index++)
501  val *= xi;
502  for (int index=1; index < ny; index++)
503  val *= eta;
504  for (int index=0; index != nz; index++)
505  val *= zeta;
506  return val;
507  }
508  }
509 
510 
511  // d()/dzeta
512  case 2:
513  {
514  switch (i)
515  {
516  // constant
517  case 0:
518  return 0.;
519 
520  // linear
521  case 1:
522  return 0.;
523 
524  case 2:
525  return 0.;
526 
527  case 3:
528  return 1.;
529 
530  // quadratic
531  case 4:
532  return 0.;
533 
534  case 5:
535  return 0.;
536 
537  case 6:
538  return 0.;
539 
540  case 7:
541  return xi;
542 
543  case 8:
544  return eta;
545 
546  case 9:
547  return 2.*zeta;
548 
549  // cubic
550  case 10:
551  return 0.;
552 
553  case 11:
554  return 0.;
555 
556  case 12:
557  return 0.;
558 
559  case 13:
560  return 0.;
561 
562  case 14:
563  return xi*xi;
564 
565  case 15:
566  return xi*eta;
567 
568  case 16:
569  return eta*eta;
570 
571  case 17:
572  return 2.*xi*zeta;
573 
574  case 18:
575  return 2.*eta*zeta;
576 
577  case 19:
578  return 3.*zeta*zeta;
579 
580  // quartics
581  case 20:
582  return 0.;
583 
584  case 21:
585  return 0.;
586 
587  case 22:
588  return 0.;
589 
590  case 23:
591  return 0.;
592 
593  case 24:
594  return 0.;
595 
596  case 25:
597  return xi*xi*xi;
598 
599  case 26:
600  return xi*xi*eta;
601 
602  case 27:
603  return xi*eta*eta;
604 
605  case 28:
606  return eta*eta*eta;
607 
608  case 29:
609  return 2.*xi*xi*zeta;
610 
611  case 30:
612  return 2.*xi*eta*zeta;
613 
614  case 31:
615  return 2.*eta*eta*zeta;
616 
617  case 32:
618  return 3.*xi*zeta*zeta;
619 
620  case 33:
621  return 3.*eta*zeta*zeta;
622 
623  case 34:
624  return 4.*zeta*zeta*zeta;
625 
626  default:
627  unsigned int o = 0;
628  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
629  const int i2 = i - (o*(o+1)*(o+2)/6);
630  int block=o, nz = 0;
631  for (; block < i2; block += (o-nz+1)) { nz++; }
632  const int nx = block - i2;
633  const int ny = o - nx - nz;
634  Real val = nz;
635  for (int index=0; index != nx; index++)
636  val *= xi;
637  for (int index=0; index != ny; index++)
638  val *= eta;
639  for (int index=1; index < nz; index++)
640  val *= zeta;
641  return val;
642  }
643  }
644 
645  default:
646  libmesh_error_msg("Invalid shape function derivative j = " << j);
647  }
648 
649 #else // LIBMESH_DIM != 3
650  libmesh_assert(order);
651  libmesh_ignore(i, j, p);
652  libmesh_not_implemented();
653 #endif
654 }
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [103/233]

Real libMesh::FE< 1, BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  order,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point p 
)
inherited

Definition at line 222 of file fe_bernstein_shape_1D.C.

227 {
228  // only d()/dxi in 1D!
229 
230  libmesh_assert_equal_to (j, 0);
231 
232  const Real xi = p(0);
233 
234  using Utility::pow;
235 
236  switch (order)
237  {
238  case FIRST:
239 
240  switch(i)
241  {
242  case 0:
243  return -.5;
244  case 1:
245  return .5;
246  default:
247  libmesh_error_msg("Invalid shape function index i = " << i);
248  }
249 
250  case SECOND:
251 
252  switch(i)
253  {
254  case 0:
255  return (xi-1.)*.5;
256  case 1:
257  return (xi+1.)*.5;
258  case 2:
259  return -xi;
260  default:
261  libmesh_error_msg("Invalid shape function index i = " << i);
262  }
263 
264  case THIRD:
265 
266  switch(i)
267  {
268  case 0:
269  return -0.375*pow<2>(1.-xi);
270  case 1:
271  return 0.375*pow<2>(1.+xi);
272  case 2:
273  return -0.375 -.75*xi +1.125*pow<2>(xi);
274  case 3:
275  return 0.375 -.75*xi -1.125*pow<2>(xi);
276  default:
277  libmesh_error_msg("Invalid shape function index i = " << i);
278  }
279 
280  case FOURTH:
281 
282  switch(i)
283  {
284  case 0:
285  return -0.25*pow<3>(1.-xi);
286  case 1:
287  return 0.25*pow<3>(1.+xi);
288  case 2:
289  return -0.5 +1.5*pow<2>(xi)-pow<3>(xi);
290  case 3:
291  return 1.5*(pow<3>(xi)-xi);
292  case 4:
293  return 0.5 -1.5*pow<2>(xi)-pow<3>(xi);
294  default:
295  libmesh_error_msg("Invalid shape function index i = " << i);
296  }
297 
298  case FIFTH:
299 
300  switch(i)
301  {
302  case 0:
303  return -(5./32.)*pow<4>(xi-1.);
304  case 1:
305  return (5./32.)*pow<4>(xi+1.);
306  case 2:
307  return (5./32.)*pow<4>(1.-xi) -(5./8.)*(1.+xi)*pow<3>(1.-xi);
308  case 3:
309  return (5./ 8.)*(1.+xi)*pow<3>(1.-xi) -(15./16.)*pow<2>(1.+xi)*pow<2>(1.-xi);
310  case 4:
311  return -(5./ 8.)*pow<3>(1.+xi)*(1.-xi) +(15./16.)*pow<2>(1.+xi)*pow<2>(1.-xi);
312  case 5:
313  return (5./ 8.)*pow<3>(1.+xi)*(1.-xi) -(5./32.)*pow<4>(1.+xi);
314  default:
315  libmesh_error_msg("Invalid shape function index i = " << i);
316  }
317 
318  case SIXTH:
319 
320  switch(i)
321  {
322  case 0:
323  return -( 3./32.)*pow<5>(1.-xi);
324  case 1:
325  return ( 3./32.)*pow<5>(1.+xi);
326  case 2:
327  return ( 3./32.)*pow<5>(1.-xi)-(15./32.)*(1.+xi)*pow<4>(1.-xi);
328  case 3:
329  return (15./32.)*(1.+xi)*pow<4>(1.-xi)-(15./16.)*pow<2>(1.+xi)*pow<3>(1.-xi);
330  case 4:
331  return -(15./ 8.)*xi +(15./4.)*pow<3>(xi)-(15./8.)*pow<5>(xi);
332  case 5:
333  return -(15./32.)*(1.-xi)*pow<4>(1.+xi)+(15./16.)*pow<2>(1.-xi)*pow<3>(1.+xi);
334  case 6:
335  return (15./32.)*pow<4>(1.+xi)*(1.-xi)-(3./32.)*pow<5>(1.+xi);
336  default:
337  libmesh_error_msg("Invalid shape function index i = " << i);
338  }
339 
340 
341  default:
342  {
343  libmesh_assert (order>6);
344 
345  // Use this for arbitrary orders
346  const int p_order = static_cast<int>(order);
347  const int m = p_order-(i-1);
348  const int n = (i-1);
349 
350  Real binomial_p_i = 1;
351 
352  // the binomial coefficient (p choose n)
353  // Using an unsigned long here will work for any of the orders we support.
354  // Explicitly construct a Real to prevent conversion warnings
355  if (i>1)
356  binomial_p_i = Real(Utility::binomial(static_cast<unsigned long>(p_order),
357  static_cast<unsigned long>(n)));
358 
359  switch(i)
360  {
361  case 0:
362  return binomial_p_i * (-1./2.) * p_order * std::pow((1-xi)/2, p_order-1);
363  case 1:
364  return binomial_p_i * ( 1./2.) * p_order * std::pow((1+xi)/2, p_order-1);
365 
366  default:
367  {
368  return binomial_p_i * (1./2. * n * std::pow((1+xi)/2,n-1) * std::pow((1-xi)/2,m)
369  - 1./2. * m * std::pow((1+xi)/2,n) * std::pow((1-xi)/2,m-1));
370  }
371  }
372  }
373 
374  }
375 }
T pow(const T &x)
Definition: utility.h:328
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
T binomial(T n, T k)
Definition: utility.h:354

◆ shape_deriv() [104/233]

static OutputShape libMesh::FE< Dim, T >::shape_deriv ( const ElemType  t,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
staticinherited
Returns
The \( j^{th} \) derivative of the \( i^{th} \) shape function at point p. This method allows you to specify the dimension, element type, and order directly.

On a p-refined element, o should be the total order of the element.

◆ shape_deriv() [105/233]

Real libMesh::FE< 1, HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 230 of file fe_hierarchic_shape_1D.C.

236 {
237  libmesh_assert(elem);
238  return fe_hierarchic_1D_shape_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
239 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [106/233]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 230 of file fe_hierarchic_shape_0D.C.

235 {
236  libmesh_error_msg("No spatial derivatives in 0D!");
237  return 0.;
238 }

◆ shape_deriv() [107/233]

static OutputShape libMesh::FE< Dim, T >::shape_deriv ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level = true 
)
staticinherited
Returns
The \( j^{th} \) derivative of the \( i^{th} \) shape function. You must specify element type, and order directly.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shape_deriv() [108/233]

Real libMesh::FE< 3, XYZ >::shape_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point point_in,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 242 of file fe_xyz_shape_3D.C.

248 {
249 #if LIBMESH_DIM == 3
250 
251  libmesh_assert(elem);
252  libmesh_assert_less (j, 3);
253 
254  Point avg = elem->vertex_average();
255  Point max_distance = Point(0.,0.,0.);
256  for (auto p : make_range(elem->n_nodes()))
257  for (unsigned int d = 0; d < 3; d++)
258  {
259  const Real distance = std::abs(avg(d) - elem->point(p)(d));
260  max_distance(d) = std::max(distance, max_distance(d));
261  }
262 
263  const Real x = point_in(0);
264  const Real y = point_in(1);
265  const Real z = point_in(2);
266  const Real xc = avg(0);
267  const Real yc = avg(1);
268  const Real zc = avg(2);
269  const Real distx = max_distance(0);
270  const Real disty = max_distance(1);
271  const Real distz = max_distance(2);
272  const Real dx = (x - xc)/distx;
273  const Real dy = (y - yc)/disty;
274  const Real dz = (z - zc)/distz;
275 
276 #ifndef NDEBUG
277  // totalorder is only used in the assertion below, so
278  // we avoid declaring it when asserts are not active.
279  const unsigned int totalorder = order + add_p_level*elem->p_level();
280 #endif
281  libmesh_assert_less (i, (totalorder+1) * (totalorder+2) *
282  (totalorder+3)/6);
283 
284  switch (j)
285  {
286  // d()/dx
287  case 0:
288  {
289  switch (i)
290  {
291  // constant
292  case 0:
293  return 0.;
294 
295  // linear
296  case 1:
297  return 1./distx;
298 
299  case 2:
300  return 0.;
301 
302  case 3:
303  return 0.;
304 
305  // quadratic
306  case 4:
307  return 2.*dx/distx;
308 
309  case 5:
310  return dy/distx;
311 
312  case 6:
313  return 0.;
314 
315  case 7:
316  return dz/distx;
317 
318  case 8:
319  return 0.;
320 
321  case 9:
322  return 0.;
323 
324  // cubic
325  case 10:
326  return 3.*dx*dx/distx;
327 
328  case 11:
329  return 2.*dx*dy/distx;
330 
331  case 12:
332  return dy*dy/distx;
333 
334  case 13:
335  return 0.;
336 
337  case 14:
338  return 2.*dx*dz/distx;
339 
340  case 15:
341  return dy*dz/distx;
342 
343  case 16:
344  return 0.;
345 
346  case 17:
347  return dz*dz/distx;
348 
349  case 18:
350  return 0.;
351 
352  case 19:
353  return 0.;
354 
355  // quartics
356  case 20:
357  return 4.*dx*dx*dx/distx;
358 
359  case 21:
360  return 3.*dx*dx*dy/distx;
361 
362  case 22:
363  return 2.*dx*dy*dy/distx;
364 
365  case 23:
366  return dy*dy*dy/distx;
367 
368  case 24:
369  return 0.;
370 
371  case 25:
372  return 3.*dx*dx*dz/distx;
373 
374  case 26:
375  return 2.*dx*dy*dz/distx;
376 
377  case 27:
378  return dy*dy*dz/distx;
379 
380  case 28:
381  return 0.;
382 
383  case 29:
384  return 2.*dx*dz*dz/distx;
385 
386  case 30:
387  return dy*dz*dz/distx;
388 
389  case 31:
390  return 0.;
391 
392  case 32:
393  return dz*dz*dz/distx;
394 
395  case 33:
396  return 0.;
397 
398  case 34:
399  return 0.;
400 
401  default:
402  unsigned int o = 0;
403  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
404  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
405  unsigned int block=o, nz = 0;
406  for (; block < i2; block += (o-nz+1)) { nz++; }
407  const unsigned int nx = block - i2;
408  const unsigned int ny = o - nx - nz;
409  Real val = nx;
410  for (unsigned int index=1; index < nx; index++)
411  val *= dx;
412  for (unsigned int index=0; index != ny; index++)
413  val *= dy;
414  for (unsigned int index=0; index != nz; index++)
415  val *= dz;
416  return val/distx;
417  }
418  }
419 
420 
421  // d()/dy
422  case 1:
423  {
424  switch (i)
425  {
426  // constant
427  case 0:
428  return 0.;
429 
430  // linear
431  case 1:
432  return 0.;
433 
434  case 2:
435  return 1./disty;
436 
437  case 3:
438  return 0.;
439 
440  // quadratic
441  case 4:
442  return 0.;
443 
444  case 5:
445  return dx/disty;
446 
447  case 6:
448  return 2.*dy/disty;
449 
450  case 7:
451  return 0.;
452 
453  case 8:
454  return dz/disty;
455 
456  case 9:
457  return 0.;
458 
459  // cubic
460  case 10:
461  return 0.;
462 
463  case 11:
464  return dx*dx/disty;
465 
466  case 12:
467  return 2.*dx*dy/disty;
468 
469  case 13:
470  return 3.*dy*dy/disty;
471 
472  case 14:
473  return 0.;
474 
475  case 15:
476  return dx*dz/disty;
477 
478  case 16:
479  return 2.*dy*dz/disty;
480 
481  case 17:
482  return 0.;
483 
484  case 18:
485  return dz*dz/disty;
486 
487  case 19:
488  return 0.;
489 
490  // quartics
491  case 20:
492  return 0.;
493 
494  case 21:
495  return dx*dx*dx/disty;
496 
497  case 22:
498  return 2.*dx*dx*dy/disty;
499 
500  case 23:
501  return 3.*dx*dy*dy/disty;
502 
503  case 24:
504  return 4.*dy*dy*dy/disty;
505 
506  case 25:
507  return 0.;
508 
509  case 26:
510  return dx*dx*dz/disty;
511 
512  case 27:
513  return 2.*dx*dy*dz/disty;
514 
515  case 28:
516  return 3.*dy*dy*dz/disty;
517 
518  case 29:
519  return 0.;
520 
521  case 30:
522  return dx*dz*dz/disty;
523 
524  case 31:
525  return 2.*dy*dz*dz/disty;
526 
527  case 32:
528  return 0.;
529 
530  case 33:
531  return dz*dz*dz/disty;
532 
533  case 34:
534  return 0.;
535 
536  default:
537  unsigned int o = 0;
538  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
539  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
540  unsigned int block=o, nz = 0;
541  for (; block < i2; block += (o-nz+1)) { nz++; }
542  const unsigned int nx = block - i2;
543  const unsigned int ny = o - nx - nz;
544  Real val = ny;
545  for (unsigned int index=0; index != nx; index++)
546  val *= dx;
547  for (unsigned int index=1; index < ny; index++)
548  val *= dy;
549  for (unsigned int index=0; index != nz; index++)
550  val *= dz;
551  return val/disty;
552  }
553  }
554 
555 
556  // d()/dz
557  case 2:
558  {
559  switch (i)
560  {
561  // constant
562  case 0:
563  return 0.;
564 
565  // linear
566  case 1:
567  return 0.;
568 
569  case 2:
570  return 0.;
571 
572  case 3:
573  return 1./distz;
574 
575  // quadratic
576  case 4:
577  return 0.;
578 
579  case 5:
580  return 0.;
581 
582  case 6:
583  return 0.;
584 
585  case 7:
586  return dx/distz;
587 
588  case 8:
589  return dy/distz;
590 
591  case 9:
592  return 2.*dz/distz;
593 
594  // cubic
595  case 10:
596  return 0.;
597 
598  case 11:
599  return 0.;
600 
601  case 12:
602  return 0.;
603 
604  case 13:
605  return 0.;
606 
607  case 14:
608  return dx*dx/distz;
609 
610  case 15:
611  return dx*dy/distz;
612 
613  case 16:
614  return dy*dy/distz;
615 
616  case 17:
617  return 2.*dx*dz/distz;
618 
619  case 18:
620  return 2.*dy*dz/distz;
621 
622  case 19:
623  return 3.*dz*dz/distz;
624 
625  // quartics
626  case 20:
627  return 0.;
628 
629  case 21:
630  return 0.;
631 
632  case 22:
633  return 0.;
634 
635  case 23:
636  return 0.;
637 
638  case 24:
639  return 0.;
640 
641  case 25:
642  return dx*dx*dx/distz;
643 
644  case 26:
645  return dx*dx*dy/distz;
646 
647  case 27:
648  return dx*dy*dy/distz;
649 
650  case 28:
651  return dy*dy*dy/distz;
652 
653  case 29:
654  return 2.*dx*dx*dz/distz;
655 
656  case 30:
657  return 2.*dx*dy*dz/distz;
658 
659  case 31:
660  return 2.*dy*dy*dz/distz;
661 
662  case 32:
663  return 3.*dx*dz*dz/distz;
664 
665  case 33:
666  return 3.*dy*dz*dz/distz;
667 
668  case 34:
669  return 4.*dz*dz*dz/distz;
670 
671  default:
672  unsigned int o = 0;
673  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
674  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
675  unsigned int block=o, nz = 0;
676  for (; block < i2; block += (o-nz+1)) { nz++; }
677  const unsigned int nx = block - i2;
678  const unsigned int ny = o - nx - nz;
679  Real val = nz;
680  for (unsigned int index=0; index != nx; index++)
681  val *= dx;
682  for (unsigned int index=0; index != ny; index++)
683  val *= dy;
684  for (unsigned int index=1; index < nz; index++)
685  val *= dz;
686  return val/distz;
687  }
688  }
689 
690 
691  default:
692  libmesh_error_msg("Invalid j = " << j);
693  }
694 
695 #else // LIBMESH_DIM != 3
696  libmesh_assert(true || order || add_p_level);
697  libmesh_ignore(elem, i, j, point_in);
698  libmesh_not_implemented();
699 #endif
700 }
Real distance(const Point &p)
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140

◆ shape_deriv() [109/233]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 243 of file fe_hierarchic_shape_0D.C.

249 {
250  libmesh_error_msg("No spatial derivatives in 0D!");
251  return 0.;
252 }

◆ shape_deriv() [110/233]

RealGradient libMesh::FE< 2, HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 245 of file fe_hierarchic_vec.C.

248 {
249  Real value = FE<2,HIERARCHIC>::shape_deriv( type, order, i/2, j, p );
250 
251  switch( i%2 )
252  {
253  case 0:
254  return libMesh::RealGradient( value );
255 
256  case 1:
257  return libMesh::RealGradient( Real(0), value );
258 
259  default:
260  libmesh_error_msg("i%2 must be either 0 or 1!");
261  }
262 
263  //dummy
264  return libMesh::RealGradient();
265 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [111/233]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 245 of file fe_hierarchic_shape_1D.C.

251 {
252  libmesh_assert(elem);
253 
254  return fe_hierarchic_1D_shape_deriv(elem->type(),
255  order + add_p_level*elem->p_level(), i, j, p);
256 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [112/233]

RealVectorValue libMesh::FE< 2, MONOMIAL_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 247 of file fe_monomial_vec.C.

252 {
253  Real value = FE<2, MONOMIAL>::shape_deriv(type, order, i / 2, j, p);
254 
255  switch (i % 2)
256  {
257  case 0:
259 
260  case 1:
261  return libMesh::RealVectorValue(Real(0), value);
262 
263  default:
264  libmesh_error_msg("i%2 must be either 0 or 1!");
265  }
266 
267  // dummy
268  return libMesh::RealVectorValue();
269 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [113/233]

Real libMesh::FE< 1, HERMITE >::shape_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned  int,
const Point p,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 256 of file fe_hermite_shape_1D.C.

262 {
263  libmesh_assert(elem);
264 
265  // Coefficient naming: d(1)d(2n) is the coefficient of the
266  // global shape function corresponding to value 1 in terms of the
267  // local shape function corresponding to normal derivative 2
268  Real d1xd1x, d2xd2x;
269 
270  hermite_compute_coefs(elem, d1xd1x, d2xd2x);
271 
272  const ElemType type = elem->type();
273 
274 #ifndef NDEBUG
275  const unsigned int totalorder =
276  order + add_p_level * elem->p_level();
277 #endif
278 
279  switch (type)
280  {
281  // C1 functions on the C1 cubic edge
282  case EDGE2:
283  case EDGE3:
284  {
285  libmesh_assert_less (i, totalorder+1);
286 
287  switch (i)
288  {
289  case 0:
291  case 1:
292  return d1xd1x * FEHermite<1>::hermite_raw_shape_deriv(2, p(0));
293  case 2:
295  case 3:
296  return d2xd2x * FEHermite<1>::hermite_raw_shape_deriv(3, p(0));
297  default:
299  }
300  }
301  default:
302  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
303  }
304 }
ElemType
Defines an enum for geometric element types.
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape_deriv() [114/233]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 256 of file fe_hierarchic_shape_0D.C.

262 {
263  libmesh_error_msg("No spatial derivatives in 0D!");
264  return 0.;
265 }

◆ shape_deriv() [115/233]

static OutputShape libMesh::FE< Dim, T >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level = true 
)
staticinherited
Returns
The \( j^{th} \) derivative of the \( i^{th} \) shape function. You must specify element type, and order (via FEType) directly.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shape_deriv() [116/233]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 261 of file fe_hierarchic_shape_1D.C.

267 {
268  libmesh_assert(elem);
269  return fe_hierarchic_1D_shape_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
270 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [117/233]

Real libMesh::FE< 2, HERMITE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 270 of file fe_hermite_shape_2D.C.

276 {
277  libmesh_assert(elem);
278  libmesh_assert (j == 0 || j == 1);
279 
280  std::vector<std::vector<Real>> dxdxi(2, std::vector<Real>(2, 0));
281 
282 #ifdef DEBUG
283  std::vector<Real> dxdeta(2), dydxi(2);
284 #endif
285 
286  hermite_compute_coefs(elem,dxdxi
287 #ifdef DEBUG
288  ,dxdeta,dydxi
289 #endif
290  );
291 
292  const ElemType type = elem->type();
293 
294  const Order totalorder =
295  order + add_p_level*elem->p_level();
296 
297  switch (type)
298  {
299  case QUAD4:
300  case QUADSHELL4:
301  libmesh_assert_less (totalorder, 4);
302  libmesh_fallthrough();
303  case QUAD8:
304  case QUADSHELL8:
305  case QUAD9:
306  case QUADSHELL9:
307  {
308  libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u));
309 
310  std::vector<unsigned int> bases1D;
311 
312  Real coef = hermite_bases_2D(bases1D, dxdxi, totalorder, i);
313 
314  switch (j)
315  {
316  case 0:
317  return coef *
318  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
319  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1));
320  case 1:
321  return coef *
322  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
323  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1));
324  default:
325  libmesh_error_msg("Invalid derivative index j = " << j);
326  }
327  }
328  default:
329  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
330  }
331 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape_deriv() [118/233]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 275 of file fe_hierarchic_shape_1D.C.

281 {
282  return 0;
283 }

◆ shape_deriv() [119/233]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 288 of file fe_hierarchic_shape_1D.C.

294 {
295  return 0;
296 }

◆ shape_deriv() [120/233]

RealGradient libMesh::FE< 2, L2_HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 298 of file fe_hierarchic_vec.C.

301 {
302  return FE<2,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
303 }

◆ shape_deriv() [121/233]

Real libMesh::FE< 1, CLOUGH >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 304 of file fe_clough_shape_1D.C.

309 {
310  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
311  return 0.;
312 }

◆ shape_deriv() [122/233]

Real libMesh::FE< 1, HERMITE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 308 of file fe_hermite_shape_1D.C.

313 {
314  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
315  return 0.;
316 }

◆ shape_deriv() [123/233]

Real libMesh::FE< 1, CLOUGH >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 317 of file fe_clough_shape_1D.C.

323 {
324  libmesh_assert(elem);
325 
326  clough_compute_coefs(elem);
327 
328  const ElemType type = elem->type();
329 
330  const Order totalorder =
331  order + add_p_level*elem->p_level();
332 
333  switch (totalorder)
334  {
335  // 3rd-order C1 cubic element
336  case THIRD:
337  {
338  switch (type)
339  {
340  // C1 functions on the C1 cubic edge
341  case EDGE2:
342  case EDGE3:
343  {
344  switch (i)
345  {
346  case 0:
347  return clough_raw_shape_deriv(0, j, p);
348  case 1:
349  return clough_raw_shape_deriv(1, j, p);
350  case 2:
351  return d1xd1x * clough_raw_shape_deriv(2, j, p);
352  case 3:
353  return d2xd2x * clough_raw_shape_deriv(3, j, p);
354  default:
355  libmesh_error_msg("Invalid shape function index i = " << i);
356  }
357  }
358  default:
359  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
360  }
361  }
362  // by default throw an error
363  default:
364  libmesh_error_msg("ERROR: Unsupported polynomial order = " << totalorder);
365  }
366 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_deriv() [124/233]

Real libMesh::FE< 1, HERMITE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 319 of file fe_hermite_shape_1D.C.

325 {
326  return FE<1,HERMITE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
327 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [125/233]

Real libMesh::FE< 2, MONOMIAL >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 324 of file fe_monomial_shape_2D.C.

330 {
331  libmesh_assert(elem);
332 
333  // by default call the orientation-independent shape functions
334  return FE<2,MONOMIAL>::shape_deriv(elem->type(), order + add_p_level*elem->p_level(), i, j, p);
335 }
libmesh_assert(ctx)

◆ shape_deriv() [126/233]

RealVectorValue libMesh::FE< 3, MONOMIAL_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 330 of file fe_monomial_vec.C.

335 {
336  Real value = FE<3, MONOMIAL>::shape_deriv(type, order, i / 3, j, p);
337 
338  switch (i % 3)
339  {
340  case 0:
342 
343  case 1:
344  return libMesh::RealVectorValue(Real(0), value);
345 
346  case 2:
347  return libMesh::RealVectorValue(Real(0), Real(0), value);
348 
349  default:
350  libmesh_error_msg("i%3 must be 0, 1, or 2!");
351  }
352 
353  // dummy
354  return libMesh::RealVectorValue();
355 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [127/233]

Real libMesh::FE< 2, HERMITE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 335 of file fe_hermite_shape_2D.C.

340 {
341  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
342  return 0.;
343 }

◆ shape_deriv() [128/233]

RealGradient libMesh::FE< 3, HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 339 of file fe_hierarchic_vec.C.

342 {
343  Real value = FE<3,HIERARCHIC>::shape_deriv( type, order, i/3, j, p );
344 
345  switch( i%3 )
346  {
347  case 0:
348  return libMesh::RealGradient( value );
349 
350  case 1:
351  return libMesh::RealGradient( Real(0), value );
352 
353  case 2:
354  return libMesh::RealGradient( Real(0), Real(0), value );
355 
356  default:
357  libmesh_error_msg("i%3 must be 0, 1, or 2!");
358  }
359 
360  //dummy
361  return libMesh::RealGradient();
362 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [129/233]

Real libMesh::FE< 2, MONOMIAL >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 340 of file fe_monomial_shape_2D.C.

346 {
347  libmesh_assert(elem);
348  // by default call the orientation-independent shape functions
349  return FE<2,MONOMIAL>::shape_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
350 }
libmesh_assert(ctx)

◆ shape_deriv() [130/233]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 342 of file fe_raviart_shape_3D.C.

348 {
349  return FE<3,RAVIART_THOMAS>::shape_deriv(elem, order, i, j, p, add_p_level);
350 }

◆ shape_deriv() [131/233]

Real libMesh::FE< 2, HERMITE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 347 of file fe_hermite_shape_2D.C.

353 {
354  return FE<2,HERMITE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
355 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [132/233]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 354 of file fe_raviart_shape_3D.C.

359 {
360  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
361  return RealGradient();
362 }
RealVectorValue RealGradient

◆ shape_deriv() [133/233]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 366 of file fe_raviart_shape_3D.C.

371 {
372  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
373  return RealGradient();
374 }
RealVectorValue RealGradient

◆ shape_deriv() [134/233]

Real libMesh::FE< 2, XYZ >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 367 of file fe_xyz_shape_2D.C.

372 {
373  libmesh_error_msg("XYZ polynomials require the element.");
374  return 0.;
375 }

◆ shape_deriv() [135/233]

Real libMesh::FE< 1, CLOUGH >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 370 of file fe_clough_shape_1D.C.

376 {
377  return FE<1,CLOUGH>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
378 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [136/233]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 378 of file fe_raviart_shape_3D.C.

384 {
385  return FE<3,RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
386 }

◆ shape_deriv() [137/233]

Real libMesh::FE< 2, XYZ >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 379 of file fe_xyz_shape_2D.C.

385 {
386  return FE<2,XYZ>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
387 }

◆ shape_deriv() [138/233]

Real libMesh::FE< 1, BERNSTEIN >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 380 of file fe_bernstein_shape_1D.C.

386 {
387  libmesh_assert(elem);
388 
389  return FE<1,BERNSTEIN>::shape_deriv
390  (elem->type(),
391  order + add_p_level*elem->p_level(), i, j, p);
392 }
libmesh_assert(ctx)

◆ shape_deriv() [139/233]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 390 of file fe_raviart_shape_3D.C.

396 {
397  return FE<3,L2_RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
398 }

◆ shape_deriv() [140/233]

Real libMesh::FE< 1, BERNSTEIN >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 395 of file fe_bernstein_shape_1D.C.

401 {
402  libmesh_assert(elem);
403  return FE<1,BERNSTEIN>::shape_deriv
404  (elem->type(),
405  fet.order + add_p_level*elem->p_level(), i, j, p);
406 }
libmesh_assert(ctx)

◆ shape_deriv() [141/233]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 398 of file fe_nedelec_one_shape_3D.C.

403 {
404  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
405  return RealGradient();
406 }
RealVectorValue RealGradient

◆ shape_deriv() [142/233]

RealGradient libMesh::FE< 3, L2_HIERARCHIC_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 399 of file fe_hierarchic_vec.C.

402 {
403  return FE<3,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
404 }

◆ shape_deriv() [143/233]

Real libMesh::FE< 2, HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 402 of file fe_hierarchic_shape_2D.C.

407 {
408  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
409  return 0.;
410 }

◆ shape_deriv() [144/233]

RealVectorValue libMesh::FE< 0, MONOMIAL_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 405 of file fe_monomial_vec.C.

411 {
412  Real value = FE<0, MONOMIAL>::shape_deriv(
413  elem->type(), order + add_p_level*elem->p_level(), i, j, p);
415 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [145/233]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 410 of file fe_nedelec_one_shape_3D.C.

416 {
417  return FE<3,NEDELEC_ONE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
418 }

◆ shape_deriv() [146/233]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 415 of file fe_hierarchic_shape_2D.C.

420 {
421  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
422  return 0.;
423 }

◆ shape_deriv() [147/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 416 of file fe_bernstein_shape_2D.C.

422 {
423  libmesh_assert(elem);
424 
425  const ElemType type = elem->type();
426 
427  const Order totalorder =
428  order + add_p_level*elem->p_level();
429 
430  switch (type)
431  {
432  // Hierarchic shape functions on the quadrilateral.
433  case QUAD4:
434  case QUAD9:
435  case QUADSHELL9:
436  {
437  // Compute quad shape functions as a tensor-product
438  auto [i0, i1] = quad_i0_i1(i, totalorder, *elem);
439 
440  switch (j)
441  {
442  // d()/dxi
443  case 0:
444  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0, 0, p(0))*
445  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1, p(1)));
446 
447  // d()/deta
448  case 1:
449  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0, p(0))*
450  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1, 0, p(1)));
451 
452  default:
453  libmesh_error_msg("Invalid shape function derivative j = " << j);
454  }
455  }
456 
457  // Bernstein shape functions on the 8-noded quadrilateral
458  // is handled separately.
459  case QUAD8:
460  case QUADSHELL8:
461  {
462  libmesh_assert_less (totalorder, 3);
463 
464  const Real xi = p(0);
465  const Real eta = p(1);
466 
467  libmesh_assert_less (i, 8);
468 
469  // 0 1 2 3 4 5 6 7 8
470  static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
471  static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
472  static const Real scal[] = {-0.25, -0.25, -0.25, -0.25, 0.5, 0.5, 0.5, 0.5};
473  switch (j)
474  {
475  // d()/dxi
476  case 0:
477  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
478  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)
479  +scal[i]*
480  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[8], 0, xi)*
481  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[8], eta));
482 
483  // d()/deta
484  case 1:
485  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
486  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta)
487  +scal[i]*
488  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[8], xi)*
489  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[8], 0, eta));
490 
491  default:
492  libmesh_error_msg("Invalid shape function derivative j = " << j);
493  }
494  }
495 
496  case TRI3:
497  case TRISHELL3:
498  libmesh_assert_less (totalorder, 2);
499  libmesh_fallthrough();
500  case TRI6:
501  case TRI7:
502  {
503  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,BERNSTEIN>::shape);
504  }
505 
506  default:
507  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
508  }
509 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven&#39;t be...
Definition: fe.C:911
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0

◆ shape_deriv() [148/233]

RealGradient libMesh::FE< 0, HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 425 of file fe_hierarchic_vec.C.

429 {
430  const Real value = FE<0,HIERARCHIC>::shape_deriv(elem, order, i, j, p, add_p_level);
431  return libMesh::RealGradient( value );
432 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [149/233]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 428 of file fe_hierarchic_shape_2D.C.

433 {
434  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
435  return 0.;
436 }

◆ shape_deriv() [150/233]

Real libMesh::FE< 2, HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 441 of file fe_hierarchic_shape_2D.C.

447 {
448  return fe_hierarchic_2D_shape_deriv<HIERARCHIC>(elem, order, i, j, p, add_p_level);
449 }

◆ shape_deriv() [151/233]

RealVectorValue libMesh::FE< 1, MONOMIAL_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 450 of file fe_monomial_vec.C.

456 {
457  Real value = FE<1, MONOMIAL>::shape_deriv(
458  elem->type(), order + add_p_level*elem->p_level(), i, j, p);
460 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [152/233]

Real libMesh::FE< 2, HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 453 of file fe_hierarchic_shape_2D.C.

459 {
460  return fe_hierarchic_2D_shape_deriv<HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
461 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_deriv() [153/233]

RealGradient libMesh::FE< 0, L2_HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 454 of file fe_hierarchic_vec.C.

458 {
459  return FE<0,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
460 }

◆ shape_deriv() [154/233]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 463 of file fe_nedelec_one.C.

465 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [155/233]

Real libMesh::FE< 3, HERMITE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 465 of file fe_hermite_shape_3D.C.

471 {
472  libmesh_assert(elem);
473  libmesh_assert (j == 0 || j == 1 || j == 2);
474 
475  std::vector<std::vector<Real>> dxdxi(3, std::vector<Real>(2, 0));
476 
477 #ifdef DEBUG
478  std::vector<Real> dydxi(2), dzdeta(2), dxdzeta(2);
479  std::vector<Real> dzdxi(2), dxdeta(2), dydzeta(2);
480 #endif //DEBUG
481 
482  hermite_compute_coefs(elem, dxdxi
483 #ifdef DEBUG
484  , dydxi, dzdeta, dxdzeta, dzdxi, dxdeta, dydzeta
485 #endif
486  );
487 
488  const ElemType type = elem->type();
489 
490  const Order totalorder =
491  order + add_p_level*elem->p_level();
492 
493  switch (totalorder)
494  {
495  // 3rd-order tricubic Hermite functions
496  case THIRD:
497  {
498  switch (type)
499  {
500  case HEX8:
501  case HEX20:
502  case HEX27:
503  {
504  libmesh_assert_less (i, 64);
505 
506  std::vector<unsigned int> bases1D;
507 
508  Real coef = hermite_bases_3D(bases1D, dxdxi, totalorder, i);
509 
510  switch (j) // Derivative type
511  {
512  case 0:
513  return coef *
514  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
515  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1)) *
516  FEHermite<1>::hermite_raw_shape(bases1D[2],p(2));
517  break;
518  case 1:
519  return coef *
520  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
521  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1)) *
522  FEHermite<1>::hermite_raw_shape(bases1D[2],p(2));
523  break;
524  case 2:
525  return coef *
526  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
527  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1)) *
528  FEHermite<1>::hermite_raw_shape_deriv(bases1D[2],p(2));
529  break;
530  default:
531  libmesh_error_msg("Invalid shape function derivative j = " << j);
532  }
533 
534  }
535  default:
536  libmesh_error_msg("ERROR: Unsupported element type " << Utility::enum_to_string(type));
537  }
538  }
539  // by default throw an error
540  default:
541  libmesh_error_msg("ERROR: Unsupported polynomial order " << totalorder);
542  }
543 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape_deriv() [156/233]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 467 of file fe_hierarchic_shape_2D.C.

473 {
474  return fe_hierarchic_2D_shape_deriv<L2_HIERARCHIC>(elem, order, i, j, p, add_p_level);
475 }

◆ shape_deriv() [157/233]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 467 of file fe_nedelec_one.C.

469 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [158/233]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 479 of file fe_hierarchic_shape_2D.C.

485 {
486  return fe_hierarchic_2D_shape_deriv<L2_HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
487 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_deriv() [159/233]

RealGradient libMesh::FE< 1, HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 482 of file fe_hierarchic_vec.C.

486 {
487  Real value = FE<1,HIERARCHIC>::shape_deriv(elem, order, i, j, p, add_p_level);
488  return libMesh::RealGradient( value );
489 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [160/233]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 490 of file fe_nedelec_one.C.

492 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [161/233]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 492 of file fe_hierarchic_shape_2D.C.

498 {
499  libmesh_assert(elem);
500 
501  const ElemType type = elem->type();
502 
503  const Order totalorder = order + add_p_level*elem->p_level();
504 
505  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
506  return 0;
507 
508  const unsigned int dofs_per_side = totalorder+1u;
509 
510  switch (type)
511  {
512  case TRI6:
513  case TRI7:
514  {
515  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SIDE_HIERARCHIC>::shape);
516  }
517 #if 0
518  {
519  libmesh_assert_less(i, 3*dofs_per_side);
520  libmesh_assert_less (j, 2);
521 
522  // Flip odd degree of freedom values if necessary
523  // to keep continuity on sides. We'll flip xi/eta rather than
524  // flipping phi, so that we can use this to handle the "nodal"
525  // degrees of freedom too.
526  Real f = 1.;
527 
528  const Real zeta1 = p(0);
529  const Real zeta2 = p(1);
530  const Real zeta0 = 1. - zeta1 - zeta2;
531 
532  if (zeta1 > zeta2 && zeta0 > zeta2) // side 0
533  {
534  if (j == 1) // d/deta is perpendicular here
535  return 0;
536 
537  if (i >= dofs_per_side)
538  return 0;
539 
540  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
541  return 0;
542 
543  if ((i < 2 || i % 2) &&
544  elem->positive_edge_orientation(0))
545  f = -1;
546 
547  return f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, i, 0, f*(zeta1-zeta0));
548  }
549  else if (zeta1 > zeta0 && zeta2 > zeta0) // side 1
550  {
551  if (i < dofs_per_side ||
552  i >= 2*dofs_per_side)
553  return 0;
554 
555  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
556  return 0;
557 
558  const unsigned int side_i = i - dofs_per_side;
559 
560  if ((side_i < 2 || side_i % 2) &&
561  elem->positive_edge_orientation(1))
562  f = -1;
563 
564  Real g = 1;
565  if (j == 0) // 2D d/dxi is in the opposite direction on this edge
566  g = -1;
567 
568  return f*g*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*(zeta2-zeta1));
569  }
570  else // side 2
571  {
572  libmesh_assert (zeta2 >= zeta1 && zeta0 >= zeta1); // On a corner???
573 
574  if (j == 0) // d/dxi is perpendicular here
575  return 0;
576 
577  if (i < 2*dofs_per_side)
578  return 0;
579 
580  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
581  return 0;
582 
583  const unsigned int side_i = i - 2*dofs_per_side;
584 
585  if ((side_i < 2 || side_i % 2) &&
586  elem->positive_edge_orientation(2))
587  f = -1;
588 
589  return -f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*(zeta0-zeta2));
590  }
591  }
592 #endif
593  case QUAD8:
594  case QUADSHELL8:
595  case QUAD9:
596  case QUADSHELL9:
597  {
598  libmesh_assert_less(i, 4*dofs_per_side);
599 
600  // Flip odd degree of freedom values if necessary
601  // to keep continuity on sides. We'll flip xi/eta rather than
602  // flipping phi, so that we can use this to handle the "nodal"
603  // degrees of freedom too.
604  Real f = 1.;
605 
606  const Real xi = p(0), eta = p(1);
607  if (eta < xi)
608  {
609  if (eta < -xi) // side 0
610  {
611  if (i >= dofs_per_side)
612  return 0;
613  if (j != 0)
614  return 0;
615  if ((i < 2 || i % 2) &&
616  elem->positive_edge_orientation(0))
617  f = -1;
618 
619  return f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, i, 0, f*xi);
620  }
621  else // side 1
622  {
623  if (i < dofs_per_side ||
624  i >= 2*dofs_per_side)
625  return 0;
626  if (j != 1)
627  return 0;
628 
629  const unsigned int side_i = i - dofs_per_side;
630 
631  if ((side_i < 2 || side_i % 2) &&
632  elem->positive_edge_orientation(1))
633  f = -1;
634 
635  return f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*eta);
636  }
637  }
638  else // xi < eta
639  {
640  if (eta > -xi) // side 2
641  {
642  if (i < 2*dofs_per_side ||
643  i >= 3*dofs_per_side)
644  return 0;
645  if (j != 0)
646  return 0;
647 
648  const unsigned int side_i = i - 2*dofs_per_side;
649 
650  if ((side_i < 2 || side_i % 2) &&
651  !elem->positive_edge_orientation(2))
652  f = -1;
653 
654  return f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*xi);
655  }
656  else // side 3
657  {
658  if (i < 3*dofs_per_side)
659  return 0;
660  if (j != 1)
661  return 0;
662 
663  const unsigned int side_i = i - 3*dofs_per_side;
664 
665  if ((side_i < 2 || side_i % 2) &&
666  !elem->positive_edge_orientation(3))
667  f = -1;
668 
669  return f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*eta);
670  }
671  }
672  }
673  default:
674  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(elem->type()));
675  }
676  return 0;
677 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven&#39;t be...
Definition: fe.C:911
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)
bool positive_edge_orientation(const unsigned int i) const
Definition: elem.C:3589
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0

◆ shape_deriv() [162/233]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 494 of file fe_nedelec_one.C.

496 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [163/233]

Real libMesh::FE< 3, LAGRANGE >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 495 of file fe_lagrange_shape_3D.C.

500 {
501  return fe_lagrange_3D_shape_deriv<LAGRANGE>(type, order, nullptr, i, j, p);
502 }

◆ shape_deriv() [164/233]

Real libMesh::FE< 3, L2_LAGRANGE >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 507 of file fe_lagrange_shape_3D.C.

512 {
513  return fe_lagrange_3D_shape_deriv<L2_LAGRANGE>(type, order, nullptr, i, j, p);
514 }

◆ shape_deriv() [165/233]

RealVectorValue libMesh::FE< 2, MONOMIAL_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 508 of file fe_monomial_vec.C.

514 {
515  Real value = FE<2, MONOMIAL>::shape_deriv(
516  elem->type(), order + add_p_level*elem->p_level(), i / 2, j, p);
517 
518  switch (i % 2)
519  {
520  case 0:
522 
523  case 1:
524  return libMesh::RealVectorValue(Real(0), value);
525 
526  default:
527  libmesh_error_msg("i%2 must be either 0 or 1!");
528  }
529 
530  // dummy
531  return libMesh::RealVectorValue();
532 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [166/233]

RealGradient libMesh::FE< 1, L2_HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 510 of file fe_hierarchic_vec.C.

514 {
515  return FE<1,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
516 }

◆ shape_deriv() [167/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 515 of file fe_bernstein_shape_2D.C.

520 {
521  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge orientation is needed.");
522  return 0.;
523 }

◆ shape_deriv() [168/233]

Real libMesh::FE< 3, LAGRANGE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 519 of file fe_lagrange_shape_3D.C.

525 {
526  libmesh_assert(elem);
527 
528  // call the orientation-independent shape function derivatives
529  return fe_lagrange_3D_shape_deriv<LAGRANGE>(elem->type(), order + add_p_level*elem->p_level(), elem, i, j, p);
530 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [169/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 526 of file fe_bernstein_shape_2D.C.

532 {
533  return FE<2,BERNSTEIN>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
534 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [170/233]

Real libMesh::FE< 3, L2_LAGRANGE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 534 of file fe_lagrange_shape_3D.C.

540 {
541  libmesh_assert(elem);
542 
543  // call the orientation-independent shape function derivatives
544  return fe_lagrange_3D_shape_deriv<L2_LAGRANGE>(elem->type(), order + add_p_level*elem->p_level(), elem, i, j, p);
545 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [171/233]

Real libMesh::FE< 3, HERMITE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 547 of file fe_hermite_shape_3D.C.

552 {
553  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
554  return 0.;
555 }

◆ shape_deriv() [172/233]

Real libMesh::FE< 3, LAGRANGE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 549 of file fe_lagrange_shape_3D.C.

555 {
556  libmesh_assert(elem);
557  return fe_lagrange_3D_shape_deriv<LAGRANGE>(elem->type(), fet.order + add_p_level*elem->p_level(), elem, i, j, p);
558 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [173/233]

RealGradient libMesh::FE< 2, HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 552 of file fe_hierarchic_vec.C.

556 {
557  const Real value = FE<2,HIERARCHIC>::shape_deriv(elem, order, i/2, j, p, add_p_level);
558 
559  switch( i%2 )
560  {
561  case 0:
562  return libMesh::RealGradient( value );
563 
564  case 1:
565  return libMesh::RealGradient( Real(0), value );
566 
567  default:
568  libmesh_error_msg("i%2 must be either 0 or 1!");
569  }
570 
571  //dummy
572  return libMesh::RealGradient();
573 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [174/233]

Real libMesh::FE< 3, HERMITE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 559 of file fe_hermite_shape_3D.C.

565 {
566  return FE<3,HERMITE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
567 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [175/233]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 561 of file fe_raviart.C.

563 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [176/233]

Real libMesh::FE< 3, L2_LAGRANGE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 562 of file fe_lagrange_shape_3D.C.

568 {
569  libmesh_assert(elem);
570  return fe_lagrange_3D_shape_deriv<L2_LAGRANGE>(elem->type(), fet.order + add_p_level*elem->p_level(), elem, i, j, p);
571 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [177/233]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 565 of file fe_raviart.C.

567 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [178/233]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 569 of file fe_raviart.C.

571 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [179/233]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 573 of file fe_raviart.C.

575 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [180/233]

RealVectorValue libMesh::FE< 3, MONOMIAL_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 597 of file fe_monomial_vec.C.

603 {
604  Real value = FE<3, MONOMIAL>::shape_deriv(
605  elem->type(), order + add_p_level*elem->p_level(), i / 3, j, p);
606 
607  switch (i % 3)
608  {
609  case 0:
611 
612  case 1:
613  return libMesh::RealVectorValue(Real(0), value);
614 
615  case 2:
616  return libMesh::RealVectorValue(Real(0), Real(0), value);
617 
618  default:
619  libmesh_error_msg("i%3 must be 0, 1, or 2!");
620  }
621 
622  // dummy
623  return libMesh::RealVectorValue();
624 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [181/233]

RealGradient libMesh::FE< 2, L2_HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 607 of file fe_hierarchic_vec.C.

611 {
612  return FE<2,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
613 }

◆ shape_deriv() [182/233]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 610 of file fe_raviart.C.

612 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [183/233]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 614 of file fe_raviart.C.

616 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [184/233]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 618 of file fe_raviart.C.

620 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [185/233]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 622 of file fe_raviart.C.

624 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [186/233]

RealGradient libMesh::FE< 3, HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 653 of file fe_hierarchic_vec.C.

657 {
658  const Real value = FE<3,HIERARCHIC>::shape_deriv(elem, order, i/3, j, p, add_p_level);
659 
660  switch( i%3 )
661  {
662  case 0:
663  return libMesh::RealGradient( value );
664 
665  case 1:
666  return libMesh::RealGradient( Real(0), value );
667 
668  case 2:
669  return libMesh::RealGradient( Real(0), Real(0), value );
670 
671  default:
672  libmesh_error_msg("i%3 must be 0, 1, or 2!");
673  }
674 
675  //dummy
676  return libMesh::RealGradient();
677 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [187/233]

Real libMesh::FE< 3, MONOMIAL >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 659 of file fe_monomial_shape_3D.C.

665 {
666  libmesh_assert(elem);
667 
668  // call the orientation-independent shape function derivatives
669  return FE<3,MONOMIAL>::shape_deriv(elem->type(), order + add_p_level*elem->p_level(), i, j, p);
670 }
libmesh_assert(ctx)

◆ shape_deriv() [188/233]

Real libMesh::FE< 2, SZABAB >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 670 of file fe_szabab_shape_2D.C.

676 {
677  libmesh_assert(elem);
678 
679  const ElemType type = elem->type();
680 
681  const Order totalorder = order + add_p_level*elem->p_level();
682 
683  switch (totalorder)
684  {
685 
686  // 1st & 2nd-order Szabo-Babuska.
687  case FIRST:
688  case SECOND:
689  {
690  switch (type)
691  {
692 
693  // Szabo-Babuska shape functions on the triangle.
694  case TRI3:
695  case TRI6:
696  case TRI7:
697  {
698  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
699  }
700 
701 
702  // Szabo-Babuska shape functions on the quadrilateral.
703  case QUAD4:
704  case QUAD8:
705  case QUAD9:
706  {
707  // Compute quad shape functions as a tensor-product
708  const Real xi = p(0);
709  const Real eta = p(1);
710 
711  libmesh_assert_less (i, 9);
712 
713  // 0 1 2 3 4 5 6 7 8
714  static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
715  static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
716 
717  switch (j)
718  {
719  // d()/dxi
720  case 0:
721  return (FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
722  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
723 
724  // d()/deta
725  case 1:
726  return (FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
727  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
728 
729  default:
730  libmesh_error_msg("Invalid j = " << j);
731  }
732  }
733 
734  default:
735  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
736  }
737  }
738 
739 
740 
741  // 3rd-order Szabo-Babuska.
742  case THIRD:
743  {
744  switch (type)
745  {
746  // Szabo-Babuska shape functions on the triangle.
747  case TRI6:
748  case TRI7:
749  {
750  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
751  }
752 
753 
754  // Szabo-Babuska shape functions on the quadrilateral.
755  case QUAD8:
756  case QUAD9:
757  {
758  // Compute quad shape functions as a tensor-product
759  const Real xi = p(0);
760  const Real eta = p(1);
761 
762  libmesh_assert_less (i, 16);
763 
764  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
765  static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
766  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
767 
768  const Real f = quad_flip(elem, totalorder, i);
769 
770  switch (j)
771  {
772  // d()/dxi
773  case 0:
774  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
775  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
776 
777  // d()/deta
778  case 1:
779  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
780  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
781 
782  default:
783  libmesh_error_msg("Invalid j = " << j);
784  }
785  }
786 
787  default:
788  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
789  }
790  }
791 
792 
793 
794 
795  // 4th-order Szabo-Babuska.
796  case FOURTH:
797  {
798  switch (type)
799  {
800 
801  // Szabo-Babuska shape functions on the triangle.
802  case TRI6:
803  case TRI7:
804  {
805  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
806  }
807 
808 
809  // Szabo-Babuska shape functions on the quadrilateral.
810  case QUAD8:
811  case QUAD9:
812  {
813  // Compute quad shape functions as a tensor-product
814  const Real xi = p(0);
815  const Real eta = p(1);
816 
817  libmesh_assert_less (i, 25);
818 
819  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
820  static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4};
821  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4};
822 
823  const Real f = quad_flip(elem, totalorder, i);
824 
825  switch (j)
826  {
827  // d()/dxi
828  case 0:
829  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
830  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
831 
832  // d()/deta
833  case 1:
834  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
835  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
836 
837  default:
838  libmesh_error_msg("Invalid j = " << j);
839  }
840  }
841 
842  default:
843  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
844  }
845  }
846 
847 
848 
849 
850  // 5th-order Szabo-Babuska.
851  case FIFTH:
852  {
853  // Szabo-Babuska shape functions on the quadrilateral.
854  switch (type)
855  {
856 
857  // Szabo-Babuska shape functions on the triangle.
858  case TRI6:
859  case TRI7:
860  {
861  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
862  }
863 
864 
865  case QUAD8:
866  case QUAD9:
867  {
868  // Compute quad shape functions as a tensor-product
869  const Real xi = p(0);
870  const Real eta = p(1);
871 
872  libmesh_assert_less (i, 36);
873 
874  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
875  static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5};
876  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5};
877 
878  const Real f = quad_flip(elem, totalorder, i);
879 
880  switch (j)
881  {
882  // d()/dxi
883  case 0:
884  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
885  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
886 
887  // d()/deta
888  case 1:
889  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
890  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
891 
892  default:
893  libmesh_error_msg("Invalid j = " << j);
894  }
895  }
896 
897  default:
898  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
899  }
900  }
901 
902 
903  // 6th-order Szabo-Babuska.
904  case SIXTH:
905  {
906  // Szabo-Babuska shape functions on the quadrilateral.
907  switch (type)
908  {
909 
910  // Szabo-Babuska shape functions on the triangle.
911  case TRI6:
912  case TRI7:
913  {
914  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
915  }
916 
917 
918  case QUAD8:
919  case QUAD9:
920  {
921  // Compute quad shape functions as a tensor-product
922  const Real xi = p(0);
923  const Real eta = p(1);
924 
925  libmesh_assert_less (i, 49);
926 
927  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
928  static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6};
929  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6};
930 
931  const Real f = quad_flip(elem, totalorder, i);
932 
933  switch (j)
934  {
935  // d()/dxi
936  case 0:
937  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
938  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
939 
940  // d()/deta
941  case 1:
942  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
943  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
944 
945  default:
946  libmesh_error_msg("Invalid j = " << j);
947  }
948  }
949 
950  default:
951  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
952  }
953  }
954 
955 
956  // 7th-order Szabo-Babuska.
957  case SEVENTH:
958  {
959  // Szabo-Babuska shape functions on the quadrilateral.
960  switch (type)
961  {
962 
963  // Szabo-Babuska shape functions on the triangle.
964  case TRI6:
965  case TRI7:
966  {
967  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
968  }
969 
970 
971  case QUAD8:
972  case QUAD9:
973  {
974  // Compute quad shape functions as a tensor-product
975  const Real xi = p(0);
976  const Real eta = p(1);
977 
978  libmesh_assert_less (i, 64);
979 
980  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
981  static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7};
982  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7};
983 
984  const Real f = quad_flip(elem, totalorder, i);
985 
986  switch (j)
987  {
988  // d()/dxi
989  case 0:
990  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
991  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
992 
993  // d()/deta
994  case 1:
995  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
996  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
997 
998  default:
999  libmesh_error_msg("Invalid j = " << j);
1000  }
1001  }
1002 
1003  default:
1004  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1005  }
1006  }
1007 
1008 
1009 
1010  // by default throw an error;call the orientation-independent shape functions
1011  default:
1012  libmesh_error_msg("ERROR: Unsupported polynomial order!");
1013  }
1014 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven&#39;t be...
Definition: fe.C:911
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0

◆ shape_deriv() [189/233]

Real libMesh::FE< 3, MONOMIAL >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 674 of file fe_monomial_shape_3D.C.

680 {
681  libmesh_assert(elem);
682  // by default call the orientation-independent shape functions
683  return FE<3,MONOMIAL>::shape_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
684 }
libmesh_assert(ctx)

◆ shape_deriv() [190/233]

RealGradient libMesh::FE< 0, LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 676 of file fe_lagrange_vec.C.

679 {
680  Real value = FE<0,LAGRANGE>::shape_deriv( type, order, i, j, p );
681  return libMesh::RealGradient( value );
682 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [191/233]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 681 of file fe_hierarchic_shape_2D.C.

687 {
688  return FE<2,SIDE_HIERARCHIC>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
689 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [192/233]

RealGradient libMesh::FE< 0, L2_LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 700 of file fe_lagrange_vec.C.

703 {
704  return FE<0,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
705 }

◆ shape_deriv() [193/233]

Real libMesh::FE< 3, XYZ >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 704 of file fe_xyz_shape_3D.C.

709 {
710  libmesh_error_msg("XYZ polynomials require the element.");
711  return 0.;
712 }

◆ shape_deriv() [194/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 706 of file fe_nedelec_one_shape_2D.C.

712 {
713 #if LIBMESH_DIM > 1
714  libmesh_assert(elem);
715  libmesh_assert_less (j, 2);
716 
717  const Order totalorder = order + add_p_level*elem->p_level();
718  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
719 
720  const char sign = i >= totalorder * elem->n_edges() || elem->positive_edge_orientation(i / totalorder) ? 1 : -1;
721  const unsigned int ii = sign > 0 ? i : (i / totalorder * 2 + 1) * totalorder - 1 - i;
722 
723  const Real xi = p(0);
724  const Real eta = p(1);
725 
726  switch (totalorder)
727  {
728  // linear Nedelec (first kind) shape function first derivatives
729  case FIRST:
730  {
731  switch (elem->type())
732  {
733  case QUAD8:
734  case QUAD9:
735  {
736  switch (j)
737  {
738  // d()/dxi
739  case 0:
740  {
741  switch(ii)
742  {
743  case 0:
744  case 2:
745  return RealGradient();
746  case 1:
747  case 3:
748  return sign * RealGradient( 0.0, -0.25 );
749 
750  default:
751  libmesh_error_msg("Invalid i = " << i);
752  }
753  } // j = 0
754 
755  // d()/deta
756  case 1:
757  {
758  switch(ii)
759  {
760  case 1:
761  case 3:
762  return RealGradient();
763  case 0:
764  case 2:
765  return sign * RealGradient( 0.25 );
766 
767  default:
768  libmesh_error_msg("Invalid i = " << i);
769  }
770  } // j = 1
771 
772  default:
773  libmesh_error_msg("Invalid j = " << j);
774  }
775  }
776 
777  case TRI6:
778  case TRI7:
779  {
780  switch (j)
781  {
782  // d()/dxi
783  case 0:
784  return sign * RealGradient( 0.0, -1.0 );
785 
786  // d()/deta
787  case 1:
788  return sign * RealGradient( 1.0 );
789 
790  default:
791  libmesh_error_msg("Invalid j = " << j);
792  }
793  }
794 
795  default:
796  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
797  }
798  }
799 
800  // quadratic Nedelec (first kind) shape function first derivatives
801  case SECOND:
802  {
803  switch (elem->type())
804  {
805  case QUAD8:
806  case QUAD9:
807  {
808  // Even with a loose inverse_map tolerance we ought to
809  // be nearly on the element interior in master
810  // coordinates
811  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
812  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
813 
814  const Real x = 0.5 * (xi + 1.0);
815  const Real y = 0.5 * (eta + 1.0);
816 
817  switch (j)
818  {
819  // d()/dxi
820  case 0:
821  {
822  switch(ii)
823  {
824  case 0:
825  return sign * RealGradient( 0.25*(-18.0*y*y+24.0*y-6.0), 0.0 );
826  case 1:
827  return sign * RealGradient( 0.25*( 18.0*y*y-24.0*y+6.0), 0.0 );
828  case 2:
829  return sign * RealGradient( 0.0, 0.25*(-36.0*x*y+24.0*x+12.0*y-8.0) );
830  case 3:
831  return sign * RealGradient( 0.0, 0.25*( 36.0*x*y-12.0*x-12.0*y+4.0) );
832  case 4:
833  return sign * RealGradient( 0.25*(-18.0*y*y+12.0*y), 0.0 );
834  case 5:
835  return sign * RealGradient( 0.25*( 18.0*y*y-12.0*y), 0.0 );
836  case 6:
837  return sign * RealGradient( 0.0, 0.25*(-36.0*x*y+12.0*x+24.0*y-8.0) );
838  case 7:
839  return sign * RealGradient( 0.0, 0.25*( 36.0*x*y-24.0*x-24.0*y+16.0) );
840  case 8:
841  return RealGradient( 0.0, 1.5*(6.0*x*y-4.0*x-3.0*y+2.0) );
842  case 9:
843  return RealGradient( 1.5*y*(-3.0*y+3.0), 0.0 );
844  case 10:
845  return RealGradient( 1.5*y*(3.0*y-3.0), 0.0 );
846  case 11:
847  return RealGradient( 0.0, 1.5*(-6.0*x*y+2.0*x+3.0*y-1.0) );
848 
849  default:
850  libmesh_error_msg("Invalid i = " << i);
851  }
852  } // j = 0
853 
854  // d()/deta
855  case 1:
856  {
857  switch(ii)
858  {
859  case 0:
860  return sign * RealGradient( 0.25*(-36.0*x*y+24.0*x+24.0*y-16.0), 0.0 );
861  case 1:
862  return sign * RealGradient( 0.25*( 36.0*x*y-24.0*x-12.0*y+8.0), 0.0 );
863  case 2:
864  return sign * RealGradient( 0.0, 0.25*x*(-18.0*x+12.0) );
865  case 3:
866  return sign * RealGradient( 0.0, 0.25*x*( 18.0*x-12.0) );
867  case 4:
868  return sign * RealGradient( 0.25*(-36.0*x*y+12.0*x+12.0*y-4.0), 0.0 );
869  case 5:
870  return sign * RealGradient( 0.25*( 36.0*x*y-12.0*x-24.0*y+8.0), 0.0 );
871  case 6:
872  return sign * RealGradient( 0.0, 0.25*(-18.0*x*x+24.0*x-6.0) );
873  case 7:
874  return sign * RealGradient( 0.0, 0.25*( 18.0*x*x-24.0*x+6.0) );
875  case 8:
876  return RealGradient( 0.0, 1.5*x*(3.0*x-3.0) );
877  case 9:
878  return RealGradient( 1.5*(-6.0*x*y+3.0*x+4.0*y-2.0), 0.0 );
879  case 10:
880  return RealGradient( 1.5*(6.0*x*y-3.0*x-2.0*y+1.0), 0.0 );
881  case 11:
882  return RealGradient( 0.0, 1.5*x*(-3.0*x+3.0) );
883 
884  default:
885  libmesh_error_msg("Invalid i = " << i);
886  }
887  } // j = 1
888 
889  default:
890  libmesh_error_msg("Invalid j = " << j);
891  }
892  }
893 
894  case TRI6:
895  case TRI7:
896  {
897  switch (j)
898  {
899  // d()/dxi
900  case 0:
901  {
902  switch(ii)
903  {
904  case 0:
905  return sign * RealGradient( 8.0*eta-6.0, -16.0*xi-8.0*eta+6.0 );
906  case 1:
907  return sign * RealGradient( -8.0*eta+6.0, 16.0*xi-4.0 );
908  case 2:
909  return sign * RealGradient( -8.0*eta, 16.0*xi-4.0 );
910  case 3:
911  return sign * RealGradient( 0.0, 8.0*eta-2.0 );
912  case 4:
913  return sign * RealGradient( 0.0, 8.0*eta-2.0 );
914  case 5:
915  return sign * RealGradient( 8.0*eta, -16.0*xi-8.0*eta+12.0 );
916  case 6:
917  return RealGradient( -8.0*eta, 16.0*xi+16.0*eta-8.0 );
918  case 7:
919  return RealGradient( 16.0*eta, -32.0*xi-8.0*eta+16.0 );
920 
921  default:
922  libmesh_error_msg("Invalid i = " << i);
923  }
924  } // j = 0
925 
926  // d()/deta
927  case 1:
928  {
929  switch(ii)
930  {
931  case 0:
932  return sign * RealGradient( 8.0*xi+16.0*eta-12.0, -8.0*xi );
933  case 1:
934  return sign * RealGradient( -8.0*xi+2.0, 0.0 );
935  case 2:
936  return sign * RealGradient( 2.0-8.0*xi, 0.0 );
937  case 3:
938  return sign * RealGradient( 4.0-16.0*eta, 8.0*xi );
939  case 4:
940  return sign * RealGradient( 4.0-16.0*eta,8.0*xi-6.0 );
941  case 5:
942  return sign * RealGradient( 8.0*xi+16*eta-6.0,-8.0*xi+6.0 );
943  case 6:
944  return RealGradient( -8.0*xi-32.0*eta+16.0, 16.0*xi );
945  case 7:
946  return RealGradient( 16.0*xi+16.0*eta-8.0,-8.0*xi );
947 
948  default:
949  libmesh_error_msg("Invalid i = " << i);
950  }
951  } // j = 1
952 
953  default:
954  libmesh_error_msg("Invalid j = " << j);
955  }
956  }
957 
958  default:
959  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
960  }
961  }
962 
963  // cubic Nedelec (first kind) shape function first derivatives
964  case THIRD:
965  {
966  switch (elem->type())
967  {
968  case QUAD8:
969  case QUAD9:
970  {
971  switch (j)
972  {
973  // d()/dxi
974  case 0:
975  {
976  switch(ii)
977  {
978  case 0:
979  return sign * RealGradient(81.*eta/2. + 15.*xi/2. - 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 39. - 162.*(eta + 1.)*(eta + 1.)/(2.*2.) + 90.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
980  case 1:
981  return sign * RealGradient(-135.*eta/8. - 15.*xi/4. + 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 135.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 75.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 135./8. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2., 0.);
982  case 2:
983  return sign * RealGradient(27.*eta + 15.*xi/2. - 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 57./2. - 108.*(eta + 1.)*(eta + 1.)/(2.*2.) + 60.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
984  case 3:
985  return sign * RealGradient(0., -27.*eta/2. - 27.*xi + 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 135./4. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 135.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
986  case 4:
987  return sign * RealGradient(0., 45.*eta/8. + 9.*xi/2. - 90.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 90.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 9. - 45.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. - 45.*(xi + 1.)*(xi + 1.)/(2.*2.)/4.);
988  case 5:
989  return sign * RealGradient(0., -9.*eta - 9.*xi + 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 63./4. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 45.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
990  case 6:
991  return sign * RealGradient(9.*eta - 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 9. - 72.*(eta + 1.)*(eta + 1.)/(2.*2.) + 60.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
992  case 7:
993  return sign * RealGradient(-45.*eta/8. + 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 90.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 75.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 45./8. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2., 0.);
994  case 8:
995  return sign * RealGradient(27.*eta/2. - 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 27./2. - 108.*(eta + 1.)*(eta + 1.)/(2.*2.) + 90.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
996  case 9:
997  return sign * RealGradient(0., -27.*eta - 27.*xi/2. + 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 135./4. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 45.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
998  case 10:
999  return sign * RealGradient(0., 135.*eta/8. + 27.*xi/4. - 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 135.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 81./4. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. - 45.*(xi + 1.)*(xi + 1.)/(2.*2.)/4.);
1000  case 11:
1001  return sign * RealGradient(0., -81.*eta/2. - 81.*xi/2. + 324.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 243./4. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 135.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1002  case 12:
1003  return RealGradient(0., -36.*eta - 81.*xi/2. + 324.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 117./2. + 60.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 135.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1004  case 13:
1005  return RealGradient(0., 9.*eta + 27.*xi - 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 63./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 135.*(xi + 1.)*(xi + 1.)/(2.*2.)/2.);
1006  case 14:
1007  return RealGradient(36.*eta - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 36. - 162.*(eta + 1.)*(eta + 1.)/(2.*2.) + 90.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
1008  case 15:
1009  return RealGradient(-9.*eta + 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 9. + 108.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 90.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
1010  case 16:
1011  return RealGradient(24.*eta - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 24. - 108.*(eta + 1.)*(eta + 1.)/(2.*2.) + 60.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
1012  case 17:
1013  return RealGradient(-6.*eta + 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 6. + 72.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 60.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
1014  case 18:
1015  return RealGradient(0., -24.*eta - 27.*xi/2. + 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 63./2. + 60.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 45.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1016  case 19:
1017  return RealGradient(0., 6.*eta + 9.*xi - 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 27./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 45.*(xi + 1.)*(xi + 1.)/(2.*2.)/2.);
1018  case 20:
1019  return RealGradient(0., 0.);
1020  case 21:
1021  return RealGradient(0., -9.*xi/2. - 5./2. + 15.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1022  case 22:
1023  return RealGradient(0., 3.*xi + 5./2. - 15.*(xi + 1.)*(xi + 1.)/(2.*2.)/2.);
1024  case 23:
1025  return RealGradient(0., 0.);
1026  default:
1027  libmesh_error_msg("Invalid i = " << i);
1028  }
1029  } // j = 0
1030 
1031  // d()/deta
1032  case 1:
1033  {
1034  switch(ii)
1035  {
1036  case 0:
1037  return sign * RealGradient(81.*eta/2. + 81.*xi/2. - 324.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 243./4. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 135.*(xi + 1.)*(xi + 1.)/(2.*2.)/2., 0.);
1038  case 1:
1039  return sign * RealGradient(-27.*eta/4. - 135.*xi/8. + 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 135.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 81./4. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 135.*((xi + 1.)*(xi + 1.)/(2.*2.))/4., 0.);
1040  case 2:
1041  return sign * RealGradient(27.*eta/2. + 27.*xi - 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 135./4. - 45.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 135.*(xi + 1.)*(xi + 1.)/(2.*2.)/2., 0.);
1042  case 3:
1043  return sign * RealGradient(0., -27.*xi/2. + 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 27./2. + 108.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 90.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1044  case 4:
1045  return sign * RealGradient(0., 45.*xi/8. - 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 90.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 75.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 45./8. - 45.*(xi + 1.)*(xi + 1.)/(2.*2.) + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2.);
1046  case 5:
1047  return sign * RealGradient(0., -9.*xi + 45.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 9. + 72.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 60.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1048  case 6:
1049  return sign * RealGradient(9.*eta + 9.*xi - 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 63./4. - 45.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 45.*(xi + 1.)*(xi + 1.)/(2.*2.)/2., 0.);
1050  case 7:
1051  return sign * RealGradient(-9.*eta/2. - 45.*xi/8. + 90.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 90.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 9. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 45.*((xi + 1.)*(xi + 1.)/(2.*2.))/4., 0.);
1052  case 8:
1053  return sign * RealGradient(27.*eta + 27.*xi/2. - 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 135./4. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 45.*(xi + 1.)*(xi + 1.)/(2.*2.)/2., 0.);
1054  case 9:
1055  return sign * RealGradient(0., -15.*eta/2. - 27.*xi + 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 57./2. + 108.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 60.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1056  case 10:
1057  return sign * RealGradient(0., 15.*eta/4. + 135.*xi/8. - 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 135.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 75.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 135./8. - 135.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2.);
1058  case 11:
1059  return sign * RealGradient(0., -15.*eta/2. - 81.*xi/2. + 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 39. + 162.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 90.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1060  case 12:
1061  return RealGradient(0., -36.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 36. + 162.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 90.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1062  case 13:
1063  return RealGradient(0., 9.*xi - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 9. - 108.*(xi + 1.)*(xi + 1.)/(2.*2.) + 90.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1064  case 14:
1065  return RealGradient(81.*eta/2. + 36.*xi - 324.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 117./2. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.), 0.);
1066  case 15:
1067  return RealGradient(-27.*eta - 9.*xi + 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 63./2. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.)), 0.);
1068  case 16:
1069  return RealGradient(27.*eta/2. + 24.*xi - 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 63./2. - 45.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.), 0.);
1070  case 17:
1071  return RealGradient(-9.*eta - 6.*xi + 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 27./2. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.)), 0.);
1072  case 18:
1073  return RealGradient(0., -24.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 24. + 108.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 60.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1074  case 19:
1075  return RealGradient(0., 6.*xi - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 6. - 72.*(xi + 1.)*(xi + 1.)/(2.*2.) + 60.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1076  case 20:
1077  return RealGradient(-9.*eta/2. - 5./2. + 15.*((eta + 1.)*(eta + 1.)/(2.*2.))/2., 0.);
1078  case 21:
1079  return RealGradient(0., 0.);
1080  case 22:
1081  return RealGradient(0., 0.);
1082  case 23:
1083  return RealGradient(3.*eta + 5./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.)/2., 0.);
1084  default:
1085  libmesh_error_msg("Invalid i = " << i);
1086  }
1087  } // j = 1
1088 
1089  default:
1090  libmesh_error_msg("Invalid j = " << j);
1091  }
1092  }
1093 
1094  case TRI6:
1095  case TRI7:
1096  {
1097  switch (j)
1098  {
1099  // d()/dxi
1100  case 0:
1101  {
1102  switch(ii)
1103  {
1104  case 0:
1105  return sign * RealGradient(-90.*eta*xi + 120.*eta + 60.*xi - 36. - 90.*eta*eta, 180.*eta*xi - 60.*eta - 120.*xi + 18. + 45.*(eta*eta) + 135.*(xi*xi));
1106  case 1:
1107  return sign * RealGradient(45.*eta*xi - 75.*eta/2. - 30.*xi + 15. + 45.*(eta*eta)/2., -45.*eta*xi + 105.*xi/2. - 21./4. + 45.*(eta*eta)/4. - 135.*xi*xi/2.);
1108  case 2:
1109  return sign * RealGradient(-90.*eta*xi + 30.*eta + 60.*xi - 24., -90.*xi + 9. + 135.*(xi*xi));
1110  case 3:
1111  return sign * RealGradient(-90.*eta*xi + 30.*eta, -90.*xi + 9. + 135.*(xi*xi));
1112  case 4:
1113  return sign * RealGradient(-45.*eta*xi/2. + 45.*eta/2. - 45.*eta*eta, 90.*eta*xi - 45.*eta/2. - 75.*xi/2. + 6. + 45.*(eta*eta)/4. + 135.*(xi*xi)/4.);
1114  case 5:
1115  return sign * RealGradient(0., -30.*eta + 3. + 45.*(eta*eta));
1116  case 6:
1117  return sign * RealGradient(0., -30.*eta + 3. + 45.*(eta*eta));
1118  case 7:
1119  return sign * RealGradient(-45.*eta*xi/2. + 45.*(eta*eta)/2., -45.*eta*xi + 75.*eta/2. - 30.*xi + 9./4. - 45.*eta*eta/2. + 135.*(xi*xi)/4.);
1120  case 8:
1121  return sign * RealGradient(-90.*eta*xi + 60.*eta - 90.*eta*eta, 180.*eta*xi - 120.*eta - 180.*xi + 54. + 45.*(eta*eta) + 135.*(xi*xi));
1122  case 9:
1123  return RealGradient(180.*eta*xi - 300.*eta + 360.*(eta*eta), -720.*eta*xi + 300.*eta + 300.*xi - 60. - 270.*eta*eta - 270.*xi*xi);
1124  case 10:
1125  return RealGradient(-540.*eta*xi + 300.*eta - 360.*eta*eta, 720.*eta*xi - 300.*eta - 900.*xi + 180. + 90.*(eta*eta) + 810.*(xi*xi));
1126  case 11:
1127  return RealGradient(-360.*eta*xi + 360.*eta - 360.*eta*eta, 720.*eta*xi - 120.*eta - 480.*xi + 60. + 540.*(xi*xi));
1128  case 12:
1129  return RealGradient(540.*eta*xi - 240.*eta + 180.*(eta*eta), -360.*eta*xi + 60.*eta + 720.*xi - 90. - 810.*xi*xi);
1130  case 13:
1131  return RealGradient(60.*eta - 180.*eta*eta, 360.*eta*xi - 240.*eta - 60.*xi + 30. + 270.*(eta*eta));
1132  case 14:
1133  return RealGradient(-120.*eta + 360.*(eta*eta), -720.*eta*xi + 360.*eta + 120.*xi - 60. - 180.*eta*eta);
1134  default:
1135  libmesh_error_msg("Invalid i = " << i);
1136  }
1137  } // j = 0
1138 
1139  // d()/deta
1140  case 1:
1141  {
1142  switch(ii)
1143  {
1144  case 0:
1145  return sign * RealGradient(-180.*eta*xi + 180.*eta + 120.*xi - 54. - 135.*eta*eta - 45.*xi*xi, 90.*eta*xi - 60.*xi + 90.*(xi*xi));
1146  case 1:
1147  return sign * RealGradient(45.*eta*xi + 30.*eta - 75.*xi/2. - 9./4. - 135.*eta*eta/4. + 45.*(xi*xi)/2., 45.*eta*xi/2. - 45.*xi*xi/2.);
1148  case 2:
1149  return sign * RealGradient(30.*xi - 3. - 45.*xi*xi, 0.);
1150  case 3:
1151  return sign * RealGradient(30.*xi - 3. - 45.*xi*xi, 0.);
1152  case 4:
1153  return sign * RealGradient(-90.*eta*xi + 75.*eta/2. + 45.*xi/2. - 6. - 135.*eta*eta/4. - 45.*xi*xi/4., 45.*eta*xi/2. - 45.*xi/2. + 45.*(xi*xi));
1154  case 5:
1155  return sign * RealGradient(90.*eta - 9. - 135.*eta*eta, 90.*eta*xi - 30.*xi);
1156  case 6:
1157  return sign * RealGradient(90.*eta - 9. - 135.*eta*eta, 90.*eta*xi - 60.*eta - 30.*xi + 24.);
1158  case 7:
1159  return sign * RealGradient(45.*eta*xi - 105.*eta/2. + 21./4. + 135.*(eta*eta)/2. - 45.*xi*xi/4., -45.*eta*xi + 30.*eta + 75.*xi/2. - 15. - 45.*xi*xi/2.);
1160  case 8:
1161  return sign * RealGradient(-180.*eta*xi + 120.*eta + 60.*xi - 18. - 135.*eta*eta - 45.*xi*xi, 90.*eta*xi - 60.*eta - 120.*xi + 36. + 90.*(xi*xi));
1162  case 9:
1163  return RealGradient(720.*eta*xi - 900.*eta - 300.*xi + 180. + 810.*(eta*eta) + 90.*(xi*xi), -540.*eta*xi + 300.*xi - 360.*xi*xi);
1164  case 10:
1165  return RealGradient(-720.*eta*xi + 300.*eta + 300.*xi - 60. - 270.*eta*eta - 270.*xi*xi, 180.*eta*xi - 300.*xi + 360.*(xi*xi));
1166  case 11:
1167  return RealGradient(-720.*eta*xi + 120.*eta + 360.*xi - 60. - 180.*xi*xi, -120.*xi + 360.*(xi*xi));
1168  case 12:
1169  return RealGradient(360.*eta*xi - 60.*eta - 240.*xi + 30. + 270.*(xi*xi), 60.*xi - 180.*xi*xi);
1170  case 13:
1171  return RealGradient(-360.*eta*xi + 720.*eta + 60.*xi - 90. - 810.*eta*eta, 540.*eta*xi - 240.*xi + 180.*(xi*xi));
1172  case 14:
1173  return RealGradient(720.*eta*xi - 480.*eta - 120.*xi + 60. + 540.*(eta*eta), -360.*eta*xi + 360.*xi - 360.*xi*xi);
1174  default:
1175  libmesh_error_msg("Invalid i = " << i);
1176  }
1177  } // j = 1
1178 
1179  default:
1180  libmesh_error_msg("Invalid j = " << j);
1181  }
1182  }
1183 
1184  default:
1185  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
1186  } // end switch (type)
1187  } // end case THIRD
1188 
1189  // quartic Nedelec (first kind) shape function first derivatives
1190  case FOURTH:
1191  {
1192  switch (elem->type())
1193  {
1194  case QUAD8:
1195  case QUAD9:
1196  {
1197  switch (j)
1198  {
1199  // d()/dxi
1200  case 0:
1201  {
1202  switch(ii)
1203  {
1204  case 0:
1205  return sign * RealGradient(240.*eta + 60.*xi - 1920.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1680.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 7200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 9600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 270. - 1800.*(eta + 1.)*(eta + 1.)/(2.*2.) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 105.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 2400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1050.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
1206  case 1:
1207  return sign * RealGradient(-760.*eta/9. - 215.*xi/9. + 6880.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 6160.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/9. - 8600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 34400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 15050.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. - 880./9. + 1900.*((eta + 1.)*(eta + 1.)/(2.*2.))/3. + 7700.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. + 385.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 30800.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 13475.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. - 7600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 3325.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9., 0.);
1208  case 2:
1209  return sign * RealGradient(400.*eta/9. + 170.*xi/9. - 5440.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 6160.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/9. + 6800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 27200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 11900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. + 520./9. - 1000.*(eta + 1.)*(eta + 1.)/(2.*2.)/3. - 7700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. - 385.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 30800.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 13475.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. + 4000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 1750.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9., 0.);
1210  case 3:
1211  return sign * RealGradient(-120.*eta - 45.*xi + 1440.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1680.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 5400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 7200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 150. + 900.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 105.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
1212  case 4:
1213  return sign * RealGradient(0., 60.*eta + 120.*xi - 1800.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 5400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 164. - 240.*(eta + 1.)*(eta + 1.)/(2.*2.) - 10800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 720.*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 140.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 560.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1214  case 5:
1215  return sign * RealGradient(0., -190.*eta/9. - 170.*xi/9. + 1900.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 1900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 13300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 4300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 7700.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 1012./27. + 860.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 4300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 30100.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 340.*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 7700.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/3. - 1540.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 53900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 2380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27.);
1216  case 6:
1217  return sign * RealGradient(0., 100.*eta/9. + 80.*xi/9. - 1000.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 1000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 3400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 7700.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 508./27. - 680.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 3400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 23800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 160.*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7700.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/3. + 1540.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 53900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 1120.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27.);
1218  case 7:
1219  return sign * RealGradient(0., -30.*eta - 30.*xi + 900.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2700.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2700.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 56. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 8100.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 180.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 140.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1220  case 8:
1221  return sign * RealGradient(30.*eta - 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 420.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 2700.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 5400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 30. - 450.*(eta + 1.)*(eta + 1.)/(2.*2.) - 3150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
1222  case 9:
1223  return sign * RealGradient(-100.*eta/9. + 1360.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 1540.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/9. - 3400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 6800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/3. - 11900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. - 100./9. + 500.*((eta + 1.)*(eta + 1.)/(2.*2.))/3. + 3850.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 7700.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/3. + 13475.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. - 1000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/3. + 1750.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9., 0.);
1224  case 10:
1225  return sign * RealGradient(190.*eta/9. - 1720.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 1540.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/9. + 4300.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 8600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/3. + 15050.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/9. + 190./9. - 950.*(eta + 1.)*(eta + 1.)/(2.*2.)/3. - 3850.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7700.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/3. - 13475.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9. + 1900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/3. - 3325.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/9., 0.);
1226  case 11:
1227  return sign * RealGradient(-60.*eta + 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 420.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 3600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 7200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 60. + 900.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 3150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1050.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
1228  case 12:
1229  return sign * RealGradient(0., 120.*eta + 60.*xi - 1800.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 5400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 164. - 720.*(eta + 1.)*(eta + 1.)/(2.*2.) - 10800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 240.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 140.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1230  case 13:
1231  return sign * RealGradient(0., -400.*eta/9. - 160.*xi/9. + 2000.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 4000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 6800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 15400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 1552./27. + 2720.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 13600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 23800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 640.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 30800.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. - 6160.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 53900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 1120.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27.);
1232  case 14:
1233  return sign * RealGradient(0., 760.*eta/9. + 340.*xi/9. - 3800.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 7600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 13300.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 8600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 15400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 3028./27. - 3440.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 17200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 30100.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 1360.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 30800.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. + 6160.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 53900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 2380.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27.);
1234  case 15:
1235  return sign * RealGradient(0., -240.*eta - 240.*xi + 3600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 7200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 7200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 416. + 960.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 14400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 960.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 560.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1236  case 16:
1237  return RealGradient(0., -195.*eta - 232.*xi + 3480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 7200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 6960.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 4060.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 375. + 780.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 14400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 960.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 455.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 560.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1238  case 17:
1239  return RealGradient(0., -45.*eta - 112.*xi + 1680.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 5400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 1960.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 145. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 10800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 720.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 105.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 560.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1240  case 18:
1241  return RealGradient(0., -60.*eta - 16.*xi + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 480.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 280.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 60. + 240.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.));
1242  case 19:
1243  return RealGradient(195.*eta - 1560.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1365.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 6960.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 9600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 195. - 1740.*(eta + 1.)*(eta + 1.)/(2.*2.) - 6090.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 2400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1050.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
1244  case 20:
1245  return RealGradient(45.*eta - 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 315.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 3360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 7200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 45. - 840.*(eta + 1.)*(eta + 1.)/(2.*2.) - 2940.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1050.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
1246  case 21:
1247  return RealGradient(60.*eta - 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 420.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 480.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 60. - 120.*(eta + 1.)*(eta + 1.)/(2.*2.) - 420.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.), 0.);
1248  case 22:
1249  return RealGradient(-195.*eta/2. + 1170.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1365.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 5220.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 7200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 195./2. + 870.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 6090.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1200.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
1250  case 23:
1251  return RealGradient(-45.*eta/2. + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 315.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 2520.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 5400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 45./2. + 420.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 2940.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
1252  case 24:
1253  return RealGradient(-30.*eta + 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 420.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 30. + 60.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 420.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)), 0.);
1254  case 25:
1255  return RealGradient(0., 195.*eta/2. + 58.*xi - 1740.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 5220.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4060.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 285./2. - 585.*(eta + 1.)*(eta + 1.)/(2.*2.) - 10800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 240.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 455.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 140.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1256  case 26:
1257  return RealGradient(0., 45.*eta/2. + 28.*xi - 840.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2700.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2520.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 1960.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 95./2. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.) - 8100.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 180.*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 105.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 140.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1258  case 27:
1259  return RealGradient(0., 30.*eta + 4.*xi - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 280.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 30. - 180.*(eta + 1.)*(eta + 1.)/(2.*2.) + 140.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)));
1260  case 28:
1261  return RealGradient(-9.*eta - 9. + 171.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 120.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 105.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2., 0.);
1262  case 29:
1263  return RealGradient(9.*eta + 9. - 171.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 120.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 105.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2., 0.);
1264  case 30:
1265  return RealGradient(0., -9.*eta - 57.*xi + 171.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 210.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 54. + 240.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 140.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1266  case 31:
1267  return RealGradient(0., 9.*eta + 57.*xi/2. - 171.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 360.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 210.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 63./2. - 120.*(xi + 1.)*(xi + 1.)/(2.*2.) + 70.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1268  case 32:
1269  return RealGradient(0., -3.*eta/2. - 27.*xi + 81.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 210.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 53./2. + 180.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 140.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1270  case 33:
1271  return RealGradient(0., 3.*eta/2. + 27.*xi/2. - 81.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 210.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14. - 90.*(xi + 1.)*(xi + 1.)/(2.*2.) + 70.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1272  case 34:
1273  return RealGradient(-3.*eta/2. - 3./2. + 81.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 90.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 105.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2., 0.);
1274  case 35:
1275  return RealGradient(3.*eta/2. + 3./2. - 81.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 90.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 105.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2., 0.);
1276  case 36:
1277  return RealGradient(0., -9.*eta/2. - 6.*xi + 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 9./2.);
1278  case 37:
1279  return RealGradient(9.*eta/2. + 9./2. - 9.*(eta + 1.)*(eta + 1.)/(2.*2.), 0.);
1280  case 38:
1281  return RealGradient(-9.*eta/2. - 9./2. + 9.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
1282  case 39:
1283  return RealGradient(0., 9.*eta/2. + 3.*xi - 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 9./2.);
1284  default:
1285  libmesh_error_msg("Invalid i = " << i);
1286  }
1287  } // j = 0
1288 
1289  // d()/deta
1290  case 1:
1291  {
1292  switch(ii)
1293  {
1294  case 0:
1295  return sign * RealGradient(240.*eta + 240.*xi - 3600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 7200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 7200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 416. - 960.*(eta + 1.)*(eta + 1.)/(2.*2.) - 14400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 960.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 560.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1296  case 1:
1297  return sign * RealGradient(-340.*eta/9. - 760.*xi/9. + 3800.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 8600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 15400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 7600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 13300.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 3028./27. + 1360.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 17200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 30800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 3440.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 30100.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. - 2380.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 53900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 6160.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27., 0.);
1298  case 2:
1299  return sign * RealGradient(160.*eta/9. + 400.*xi/9. - 2000.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 6800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 15400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 4000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 7000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 1552./27. - 640.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 13600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 30800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 2720.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 23800.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. + 1120.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 53900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 6160.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27., 0.);
1300  case 3:
1301  return sign * RealGradient(-60.*eta - 120.*xi + 1800.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 5400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 164. + 240.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 10800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 720.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 560.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1302  case 4:
1303  return sign * RealGradient(0., 60.*xi - 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 420.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 60. - 3150.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 900.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1800.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1050.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
1304  case 5:
1305  return sign * RealGradient(0., -190.*xi/9. + 1720.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 4300.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 8600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/3. - 15050.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 1540.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 190./9. + 3850.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 7700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/3. + 13475.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 950.*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 1900.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/3. + 3325.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9.);
1306  case 6:
1307  return sign * RealGradient(0., 100.*xi/9. - 1360.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 3400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 6800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/3. + 11900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 1540.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 100./9. - 3850.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7700.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/3. - 13475.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 500.*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 1000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/3. - 1750.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9.);
1308  case 7:
1309  return sign * RealGradient(0., -30.*xi + 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2700.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 420.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 30. + 3150.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 450.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 900.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
1310  case 8:
1311  return sign * RealGradient(30.*eta + 30.*xi - 900.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2700.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2700.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 56. - 180.*(eta + 1.)*(eta + 1.)/(2.*2.) - 8100.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 180.*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 140.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 140.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1312  case 9:
1313  return sign * RealGradient(-80.*eta/9. - 100.*xi/9. + 1000.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 3400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7700.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 1000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 7000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 508./27. + 160.*((eta + 1.)*(eta + 1.)/(2.*2.))/3. + 3400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/3. + 680.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 23800.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. - 1120.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/27. + 53900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27. - 1540.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27., 0.);
1314  case 10:
1315  return sign * RealGradient(170.*eta/9. + 190.*xi/9. - 1900.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 4300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 7700.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 1900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 13300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 1012./27. - 340.*(eta + 1.)*(eta + 1.)/(2.*2.)/3. - 4300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7700.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/3. - 860.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 30100.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. + 2380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/27. - 53900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/27. + 1540.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/27., 0.);
1316  case 11:
1317  return sign * RealGradient(-120.*eta - 60.*xi + 1800.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 164. + 720.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 10800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 240.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 560.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 140.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1318  case 12:
1319  return sign * RealGradient(0., 45.*eta + 120.*xi - 1440.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 5400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1680.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 150. - 105.*(eta + 1.)*(eta + 1.)/(2.*2.) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 900.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
1320  case 13:
1321  return sign * RealGradient(0., -170.*eta/9. - 400.*xi/9. + 5440.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. - 6800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 27200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 11900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 6160.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 520./9. + 385.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 7700.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 30800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 13475.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 1000.*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 4000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 1750.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9.);
1322  case 14:
1323  return sign * RealGradient(0., 215.*eta/9. + 760.*xi/9. - 6880.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/9. + 8600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 34400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 15050.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/9. + 6160.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 880./9. - 385.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 7700.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 30800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 13475.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9. - 1900.*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 7600.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 3325.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/9.);
1324  case 15:
1325  return sign * RealGradient(0., -60.*eta - 240.*xi + 1920.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 7200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 9600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1680.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 270. + 105.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1800.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1050.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
1326  case 16:
1327  return RealGradient(0., -195.*xi + 1560.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 6960.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 9600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1365.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 195. + 6090.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1740.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1050.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
1328  case 17:
1329  return RealGradient(0., -45.*xi + 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 315.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 45. + 2940.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 840.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1800.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1050.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
1330  case 18:
1331  return RealGradient(0., -60.*xi + 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 480.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 420.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 60. + 420.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 120.*((xi + 1.)*(xi + 1.)/(2.*2.)));
1332  case 19:
1333  return RealGradient(232.*eta + 195.*xi - 3480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 6960.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4060.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 7200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 375. - 960.*(eta + 1.)*(eta + 1.)/(2.*2.) - 14400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 780.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 455.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1334  case 20:
1335  return RealGradient(112.*eta + 45.*xi - 1680.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3360.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1960.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 5400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 145. - 720.*(eta + 1.)*(eta + 1.)/(2.*2.) - 10800.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 180.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 560.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4900.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 105.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1336  case 21:
1337  return RealGradient(16.*eta + 60.*xi - 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 480.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 280.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 60. - 240.*(xi + 1.)*(xi + 1.)/(2.*2.) + 140.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1338  case 22:
1339  return RealGradient(-58.*eta - 195.*xi/2. + 1740.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 5220.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4060.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 285./2. + 240.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 10800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 585.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 455.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1340  case 23:
1341  return RealGradient(-28.*eta - 45.*xi/2. + 840.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2520.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1960.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2700.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 2100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 95./2. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 8100.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 135.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4900.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 105.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1342  case 24:
1343  return RealGradient(-4.*eta - 30.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 280.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 30. + 180.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 140.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1344  case 25:
1345  return RealGradient(0., 195.*xi/2. - 1170.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 5220.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1365.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 195./2. - 6090.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 870.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
1346  case 26:
1347  return RealGradient(0., 45.*xi/2. - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2520.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 315.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 45./2. - 2940.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 420.*(xi + 1.)*(xi + 1.)/(2.*2.) + 900.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
1348  case 27:
1349  return RealGradient(0., 30.*xi - 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 360.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 420.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 30. - 420.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.));
1350  case 28:
1351  return RealGradient(-57.*eta - 9.*xi + 171.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 210.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 54. + 240.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
1352  case 29:
1353  return RealGradient(57.*eta/2. + 9.*xi - 171.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 210.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 63./2. - 120.*(eta + 1.)*(eta + 1.)/(2.*2.) + 70.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
1354  case 30:
1355  return RealGradient(0., -9.*xi - 9. + 171.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 120.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 105.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1356  case 31:
1357  return RealGradient(0., 9.*xi + 9. - 171.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 120.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 105.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2.);
1358  case 32:
1359  return RealGradient(0., -3.*xi/2. - 3./2. + 81.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 90.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 105.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1360  case 33:
1361  return RealGradient(0., 3.*xi/2. + 3./2. - 81.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 90.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 105.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2.);
1362  case 34:
1363  return RealGradient(-27.*eta - 3.*xi/2. + 81.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 210.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 53./2. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 140.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
1364  case 35:
1365  return RealGradient(27.*eta/2. + 3.*xi/2. - 81.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 210.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 14. - 90.*(eta + 1.)*(eta + 1.)/(2.*2.) + 70.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
1366  case 36:
1367  return RealGradient(0., -9.*xi/2. - 9./2. + 9.*((xi + 1.)*(xi + 1.)/(2.*2.)));
1368  case 37:
1369  return RealGradient(6.*eta + 9.*xi/2. - 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 9./2., 0.);
1370  case 38:
1371  return RealGradient(-3.*eta - 9.*xi/2. + 18.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 9./2., 0.);
1372  case 39:
1373  return RealGradient(0., 9.*xi/2. + 9./2. - 9.*(xi + 1.)*(xi + 1.)/(2.*2.));
1374  default:
1375  libmesh_error_msg("Invalid i = " << i);
1376  }
1377  } // j = 1
1378 
1379  default:
1380  libmesh_error_msg("Invalid j = " << j);
1381  }
1382  }
1383 
1384  case TRI6:
1385  case TRI7:
1386  {
1387  switch (j)
1388  {
1389  // d()/dxi
1390  case 0:
1391  {
1392  switch(ii)
1393  {
1394  case 0:
1395  return sign * RealGradient(-1680.*eta*xi + 720.*eta + 672.*eta*(xi*xi) + 480.*xi + 1344.*xi*(eta*eta) - 120. - 1260.*eta*eta - 420.*xi*xi + 672.*(eta*eta*eta), 1680.*eta*xi - 240.*eta - 2016.*eta*xi*xi - 480.*xi - 1344.*xi*eta*eta + 40. + 420.*(eta*eta) + 1260.*(xi*xi) - 224.*eta*eta*eta - 896.*xi*xi*xi);
1396  case 1:
1397  return sign * RealGradient(5768.*eta*xi/9. - 200.*eta - 2464.*eta*xi*xi/9. - 1720.*xi/9. - 4480.*xi*eta*eta/9. + 380./9. + 784.*(eta*eta)/3. + 1540.*(xi*xi)/9. - 896.*eta*eta*eta/9., -4256.*eta*xi/9. + 176.*eta/9. + 2240.*eta*(xi*xi)/3. + 1600.*xi/9. + 1792.*xi*(eta*eta)/9. - 296./27. + 448.*(eta*eta)/9. - 504.*xi*xi - 1792.*eta*eta*eta/27. + 9856.*(xi*xi*xi)/27.);
1398  case 2:
1399  return sign * RealGradient(-2240.*eta*xi/9. - 16.*eta + 2464.*eta*(xi*xi)/9. + 1360.*xi/9. + 448.*xi*(eta*eta)/9. - 200./9. + 476.*(eta*eta)/3. - 1540.*xi*xi/9. - 1120.*eta*eta*eta/9., -784.*eta*xi/9. + 112.*eta/9. - 224.*eta*xi*xi/3. - 1024.*xi/9. + 2240.*xi*(eta*eta)/9. + 152./27. - 196.*eta*eta/9. + 420.*(xi*xi) - 224.*eta*eta*eta/27. - 9856.*xi*xi*xi/27.);
1400  case 3:
1401  return sign * RealGradient(504.*eta*xi - 72.*eta - 672.*eta*xi*xi - 360.*xi + 60. + 420.*(xi*xi), 288.*xi - 16. - 1008.*xi*xi + 896.*(xi*xi*xi));
1402  case 4:
1403  return sign * RealGradient(504.*eta*xi - 72.*eta - 672.*eta*xi*xi, 288.*xi - 16. - 1008.*xi*xi + 896.*(xi*xi*xi));
1404  case 5:
1405  return sign * RealGradient(896.*eta*xi/3. - 80.*eta - 1792.*eta*xi*xi/9. - 1792.*xi*eta*eta/3. + 784.*(eta*eta)/3. - 448.*eta*eta*eta/3., -1792.*eta*xi/3. + 56.*eta + 896.*eta*(xi*xi) + 160.*xi + 896.*xi*(eta*eta)/3. - 12. - 140.*eta*eta/3. - 1232.*xi*xi/3. + 224.*(eta*eta*eta)/27. + 7168.*(xi*xi*xi)/27.);
1406  case 6:
1407  return sign * RealGradient(280.*eta*xi/3. - 56.*eta - 224.*eta*xi*xi/9. - 896.*xi*eta*eta/3. + 896.*(eta*eta)/3. - 896.*eta*eta*eta/3., -1568.*eta*xi/3. + 80.*eta + 448.*eta*(xi*xi) + 64.*xi + 1792.*xi*(eta*eta)/3. - 8. - 448.*eta*eta/3. - 280.*xi*xi/3. + 1792.*(eta*eta*eta)/27. + 896.*(xi*xi*xi)/27.);
1408  case 7:
1409  return sign * RealGradient(0., 72.*eta - 4. - 252.*eta*eta + 224.*(eta*eta*eta));
1410  case 8:
1411  return sign * RealGradient(0., 72.*eta - 4. - 252.*eta*eta + 224.*(eta*eta*eta));
1412  case 9:
1413  return sign * RealGradient(392.*eta*xi/9. - 112.*eta/9. + 224.*eta*(xi*xi)/9. - 2240.*xi*eta*eta/9. + 392.*(eta*eta)/9. + 224.*(eta*eta*eta)/9., -952.*eta*xi/3. + 16.*eta + 1120.*eta*(xi*xi)/3. + 208.*xi/9. - 448.*xi*eta*eta/9. - 112./27. + 1120.*(eta*eta)/9. + 56.*(xi*xi)/9. - 2464.*eta*eta*eta/27. - 896.*xi*xi*xi/27.);
1414  case 10:
1415  return sign * RealGradient(-896.*eta*xi/9. - 176.*eta/9. + 1792.*eta*(xi*xi)/9. - 1792.*xi*eta*eta/9. + 2128.*(eta*eta)/9. - 2240.*eta*eta*eta/9., -1568.*eta*xi/3. + 200.*eta + 896.*eta*(xi*xi)/3. - 1216.*xi/9. + 4480.*xi*(eta*eta)/9. + 76./27. - 2884.*eta*eta/9. + 3472.*(xi*xi)/9. + 2464.*(eta*eta*eta)/27. - 7168.*xi*xi*xi/27.);
1416  case 11:
1417  return sign * RealGradient(-840.*eta*xi + 240.*eta + 672.*eta*(xi*xi) + 1344.*xi*(eta*eta) - 840.*eta*eta + 672.*(eta*eta*eta), 2520.*eta*xi - 720.*eta - 2016.*eta*xi*xi - 960.*xi - 1344.*xi*eta*eta + 160. + 840.*(eta*eta) + 1680.*(xi*xi) - 224.*eta*eta*eta - 896.*xi*xi*xi);
1418  case 12:
1419  return RealGradient(6048.*eta*xi - 3240.*eta - 2016.*eta*xi*xi - 8064.*xi*eta*eta + 9072.*(eta*eta) - 6048.*eta*eta*eta, -12096.*eta*xi + 2160.*eta + 12096.*eta*(xi*xi) + 2160.*xi + 12096.*xi*(eta*eta) - 240. - 4536.*eta*eta - 4536.*xi*xi + 2688.*(eta*eta*eta) + 2688.*(xi*xi*xi));
1420  case 13:
1421  return RealGradient(-9072.*eta*xi + 2160.*eta + 8064.*eta*(xi*xi) + 12096.*xi*(eta*eta) - 6048.*eta*eta + 4032.*(eta*eta*eta), 18144.*eta*xi - 3240.*eta - 18144.*eta*xi*xi - 8640.*xi - 8064.*xi*eta*eta + 960. + 3024.*(eta*eta) + 18144.*(xi*xi) - 672.*eta*eta*eta - 10752.*xi*xi*xi);
1422  case 14:
1423  return RealGradient(9072.*eta*xi - 1944.*eta - 6048.*eta*xi*xi - 8064.*xi*eta*eta + 2016.*(eta*eta), -6048.*eta*xi + 432.*eta + 12096.*eta*(xi*xi) + 3456.*xi - 216. - 10584.*xi*xi + 8064.*(xi*xi*xi));
1424  case 15:
1425  return RealGradient(-7056.*eta*xi + 1152.*eta + 8064.*eta*(xi*xi) + 4032.*xi*(eta*eta) - 1008.*eta*eta, 3024.*eta*xi - 216.*eta - 6048.*eta*xi*xi - 4608.*xi + 288. + 14112.*(xi*xi) - 10752.*xi*xi*xi);
1426  case 16:
1427  return RealGradient(-216.*eta + 1512.*(eta*eta) - 2016.*eta*eta*eta, -2016.*eta*xi + 1152.*eta + 144.*xi + 4032.*xi*(eta*eta) - 72. - 3528.*eta*eta + 2688.*(eta*eta*eta));
1428  case 17:
1429  return RealGradient(432.*eta - 3024.*eta*eta + 4032.*(eta*eta*eta), 4032.*eta*xi - 1944.*eta - 288.*xi - 8064.*xi*eta*eta + 144. + 4536.*(eta*eta) - 2016.*eta*eta*eta);
1430  case 18:
1431  return RealGradient(3276.*eta*xi - 1332.*eta - 1512.*eta*xi*xi - 6048.*xi*eta*eta + 4788.*(eta*eta) - 3528.*eta*eta*eta, -8064.*eta*xi + 1044.*eta + 9072.*eta*(xi*xi) + 1548.*xi + 7056.*xi*(eta*eta) - 144. - 1638.*eta*eta - 3402.*xi*xi + 672.*(eta*eta*eta) + 2016.*(xi*xi*xi));
1432  case 19:
1433  return RealGradient(-3276.*eta*xi + 1044.*eta + 2016.*eta*(xi*xi) + 7056.*xi*(eta*eta) - 4032.*eta*eta + 3024.*(eta*eta*eta), 9576.*eta*xi - 1332.*eta - 10584.*eta*xi*xi - 2196.*xi - 6048.*xi*eta*eta + 216. + 1638.*(eta*eta) + 4662.*(xi*xi) - 504.*eta*eta*eta - 2688.*xi*xi*xi);
1434  case 20:
1435  return RealGradient(1008.*eta*xi - 216.*eta - 504.*eta*xi*xi - 756.*eta*eta + 1008.*(eta*eta*eta), 1008.*eta*xi - 360.*eta + 144.*xi - 2016.*xi*eta*eta + 12. + 1008.*(eta*eta) - 756.*xi*xi - 672.*eta*eta*eta + 672.*(xi*xi*xi));
1436  case 21:
1437  return RealGradient(-756.*eta*xi - 216.*eta + 2016.*eta*(xi*xi) - 3024.*xi*eta*eta + 2268.*(eta*eta) - 2016.*eta*eta*eta, -5544.*eta*xi + 1188.*eta + 4536.*eta*(xi*xi) - 936.*xi + 4032.*xi*(eta*eta) + 6. - 1512.*eta*eta + 3402.*(xi*xi) + 336.*(eta*eta*eta) - 2688.*xi*xi*xi);
1438  case 22:
1439  return RealGradient(-3024.*eta*xi + 1188.*eta + 1008.*eta*(xi*xi) + 4032.*xi*(eta*eta) - 2772.*eta*eta + 1512.*(eta*eta*eta), 4536.*eta*xi - 216.*eta - 6048.*eta*xi*xi - 972.*xi - 3024.*xi*eta*eta + 66. - 378.*eta*eta + 2268.*(xi*xi) + 672.*(eta*eta*eta) - 1344.*xi*xi*xi);
1440  case 23:
1441  return RealGradient(2016.*eta*xi - 360.*eta - 2016.*eta*xi*xi - 2016.*xi*eta*eta + 504.*(eta*eta), -1512.*eta*xi - 216.*eta + 3024.*eta*(xi*xi) + 1440.*xi - 48. + 504.*(eta*eta) - 4032.*xi*xi - 168.*eta*eta*eta + 2688.*(xi*xi*xi));
1442  default:
1443  libmesh_error_msg("Invalid i = " << i);
1444  }
1445  } // j = 0
1446 
1447  // d()/deta
1448  case 1:
1449  {
1450  switch(ii)
1451  {
1452  case 0:
1453  return sign * RealGradient(-2520.*eta*xi + 960.*eta + 1344.*eta*(xi*xi) + 720.*xi + 2016.*xi*(eta*eta) - 160. - 1680.*eta*eta - 840.*xi*xi + 896.*(eta*eta*eta) + 224.*(xi*xi*xi), 840.*eta*xi - 1344.*eta*xi*xi - 240.*xi - 672.*xi*eta*eta + 840.*(xi*xi) - 672.*xi*xi*xi);
1454  case 1:
1455  return sign * RealGradient(1568.*eta*xi/3. + 1216.*eta/9. - 4480.*eta*xi*xi/9. - 200.*xi - 896.*xi*eta*eta/3. - 76./27. - 3472.*eta*eta/9. + 2884.*(xi*xi)/9. + 7168.*(eta*eta*eta)/27. - 2464.*xi*xi*xi/27., 896.*eta*xi/9. + 1792.*eta*(xi*xi)/9. + 176.*xi/9. - 1792.*xi*eta*eta/9. - 2128.*xi*xi/9. + 2240.*(xi*xi*xi)/9.);
1456  case 2:
1457  return sign * RealGradient(952.*eta*xi/3. - 208.*eta/9. + 448.*eta*(xi*xi)/9. - 16.*xi - 1120.*xi*eta*eta/3. + 112./27. - 56.*eta*eta/9. - 1120.*xi*xi/9. + 896.*(eta*eta*eta)/27. + 2464.*(xi*xi*xi)/27., -392.*eta*xi/9. + 2240.*eta*(xi*xi)/9. + 112.*xi/9. - 224.*xi*eta*eta/9. - 392.*xi*xi/9. - 224.*xi*xi*xi/9.);
1458  case 3:
1459  return sign * RealGradient(-72.*xi + 4. + 252.*(xi*xi) - 224.*xi*xi*xi, 0.);
1460  case 4:
1461  return sign * RealGradient(-72.*xi + 4. + 252.*(xi*xi) - 224.*xi*xi*xi, 0.);
1462  case 5:
1463  return sign * RealGradient(1568.*eta*xi/3. - 64.*eta - 1792.*eta*xi*xi/3. - 80.*xi - 448.*xi*eta*eta + 8. + 280.*(eta*eta)/3. + 448.*(xi*xi)/3. - 896.*eta*eta*eta/27. - 1792.*xi*xi*xi/27., -280.*eta*xi/3. + 896.*eta*(xi*xi)/3. + 56.*xi + 224.*xi*(eta*eta)/9. - 896.*xi*xi/3. + 896.*(xi*xi*xi)/3.);
1464  case 6:
1465  return sign * RealGradient(1792.*eta*xi/3. - 160.*eta - 896.*eta*xi*xi/3. - 56.*xi - 896.*xi*eta*eta + 12. + 1232.*(eta*eta)/3. + 140.*(xi*xi)/3. - 7168.*eta*eta*eta/27. - 224.*xi*xi*xi/27., -896.*eta*xi/3. + 1792.*eta*(xi*xi)/3. + 80.*xi + 1792.*xi*(eta*eta)/9. - 784.*xi*xi/3. + 448.*(xi*xi*xi)/3.);
1466  case 7:
1467  return sign * RealGradient(-288.*eta + 16. + 1008.*(eta*eta) - 896.*eta*eta*eta, -504.*eta*xi + 72.*xi + 672.*xi*(eta*eta));
1468  case 8:
1469  return sign * RealGradient(-288.*eta + 16. + 1008.*(eta*eta) - 896.*eta*eta*eta, -504.*eta*xi + 360.*eta + 72.*xi + 672.*xi*(eta*eta) - 60. - 420.*eta*eta);
1470  case 9:
1471  return sign * RealGradient(784.*eta*xi/9. + 1024.*eta/9. - 2240.*eta*xi*xi/9. - 112.*xi/9. + 224.*xi*(eta*eta)/3. - 152./27. - 420.*eta*eta + 196.*(xi*xi)/9. + 9856.*(eta*eta*eta)/27. + 224.*(xi*xi*xi)/27., 2240.*eta*xi/9. - 1360.*eta/9. - 448.*eta*xi*xi/9. + 16.*xi - 2464.*xi*eta*eta/9. + 200./9. + 1540.*(eta*eta)/9. - 476.*xi*xi/3. + 1120.*(xi*xi*xi)/9.);
1472  case 10:
1473  return sign * RealGradient(4256.*eta*xi/9. - 1600.*eta/9. - 1792.*eta*xi*xi/9. - 176.*xi/9. - 2240.*xi*eta*eta/3. + 296./27. + 504.*(eta*eta) - 448.*xi*xi/9. - 9856.*eta*eta*eta/27. + 1792.*(xi*xi*xi)/27., -5768.*eta*xi/9. + 1720.*eta/9. + 4480.*eta*(xi*xi)/9. + 200.*xi + 2464.*xi*(eta*eta)/9. - 380./9. - 1540.*eta*eta/9. - 784.*xi*xi/3. + 896.*(xi*xi*xi)/9.);
1474  case 11:
1475  return sign * RealGradient(-1680.*eta*xi + 480.*eta + 1344.*eta*(xi*xi) + 240.*xi + 2016.*xi*(eta*eta) - 40. - 1260.*eta*eta - 420.*xi*xi + 896.*(eta*eta*eta) + 224.*(xi*xi*xi), 1680.*eta*xi - 480.*eta - 1344.*eta*xi*xi - 720.*xi - 672.*xi*eta*eta + 120. + 420.*(eta*eta) + 1260.*(xi*xi) - 672.*xi*xi*xi);
1476  case 12:
1477  return RealGradient(18144.*eta*xi - 8640.*eta - 8064.*eta*xi*xi - 3240.*xi - 18144.*xi*eta*eta + 960. + 18144.*(eta*eta) + 3024.*(xi*xi) - 10752.*eta*eta*eta - 672.*xi*xi*xi, -9072.*eta*xi + 12096.*eta*(xi*xi) + 2160.*xi + 8064.*xi*(eta*eta) - 6048.*xi*xi + 4032.*(xi*xi*xi));
1478  case 13:
1479  return RealGradient(-12096.*eta*xi + 2160.*eta + 12096.*eta*(xi*xi) + 2160.*xi + 12096.*xi*(eta*eta) - 240. - 4536.*eta*eta - 4536.*xi*xi + 2688.*(eta*eta*eta) + 2688.*(xi*xi*xi), 6048.*eta*xi - 8064.*eta*xi*xi - 3240.*xi - 2016.*xi*eta*eta + 9072.*(xi*xi) - 6048.*xi*xi*xi);
1480  case 14:
1481  return RealGradient(4032.*eta*xi - 288.*eta - 8064.*eta*xi*xi - 1944.*xi + 144. + 4536.*(xi*xi) - 2016.*xi*xi*xi, 432.*xi - 3024.*xi*xi + 4032.*(xi*xi*xi));
1482  case 15:
1483  return RealGradient(-2016.*eta*xi + 144.*eta + 4032.*eta*(xi*xi) + 1152.*xi - 72. - 3528.*xi*xi + 2688.*(xi*xi*xi), -216.*xi + 1512.*(xi*xi) - 2016.*xi*xi*xi);
1484  case 16:
1485  return RealGradient(3024.*eta*xi - 4608.*eta - 216.*xi - 6048.*xi*eta*eta + 288. + 14112.*(eta*eta) - 10752.*eta*eta*eta, -7056.*eta*xi + 4032.*eta*(xi*xi) + 1152.*xi + 8064.*xi*(eta*eta) - 1008.*xi*xi);
1486  case 17:
1487  return RealGradient(-6048.*eta*xi + 3456.*eta + 432.*xi + 12096.*xi*(eta*eta) - 216. - 10584.*eta*eta + 8064.*(eta*eta*eta), 9072.*eta*xi - 8064.*eta*xi*xi - 1944.*xi - 6048.*xi*eta*eta + 2016.*(xi*xi));
1488  case 18:
1489  return RealGradient(9576.*eta*xi - 2196.*eta - 6048.*eta*xi*xi - 1332.*xi - 10584.*xi*eta*eta + 216. + 4662.*(eta*eta) + 1638.*(xi*xi) - 2688.*eta*eta*eta - 504.*xi*xi*xi, -3276.*eta*xi + 7056.*eta*(xi*xi) + 1044.*xi + 2016.*xi*(eta*eta) - 4032.*xi*xi + 3024.*(xi*xi*xi));
1490  case 19:
1491  return RealGradient(-8064.*eta*xi + 1548.*eta + 7056.*eta*(xi*xi) + 1044.*xi + 9072.*xi*(eta*eta) - 144. - 3402.*eta*eta - 1638.*xi*xi + 2016.*(eta*eta*eta) + 672.*(xi*xi*xi), 3276.*eta*xi - 6048.*eta*xi*xi - 1332.*xi - 1512.*xi*eta*eta + 4788.*(xi*xi) - 3528.*xi*xi*xi);
1492  case 20:
1493  return RealGradient(-1512.*eta*xi + 1440.*eta - 216.*xi + 3024.*xi*(eta*eta) - 48. - 4032.*eta*eta + 504.*(xi*xi) + 2688.*(eta*eta*eta) - 168.*xi*xi*xi, 2016.*eta*xi - 2016.*eta*xi*xi - 360.*xi - 2016.*xi*eta*eta + 504.*(xi*xi));
1494  case 21:
1495  return RealGradient(4536.*eta*xi - 972.*eta - 3024.*eta*xi*xi - 216.*xi - 6048.*xi*eta*eta + 66. + 2268.*(eta*eta) - 378.*xi*xi - 1344.*eta*eta*eta + 672.*(xi*xi*xi), -3024.*eta*xi + 4032.*eta*(xi*xi) + 1188.*xi + 1008.*xi*(eta*eta) - 2772.*xi*xi + 1512.*(xi*xi*xi));
1496  case 22:
1497  return RealGradient(-5544.*eta*xi - 936.*eta + 4032.*eta*(xi*xi) + 1188.*xi + 4536.*xi*(eta*eta) + 6. + 3402.*(eta*eta) - 1512.*xi*xi - 2688.*eta*eta*eta + 336.*(xi*xi*xi), -756.*eta*xi - 3024.*eta*xi*xi - 216.*xi + 2016.*xi*(eta*eta) + 2268.*(xi*xi) - 2016.*xi*xi*xi);
1498  case 23:
1499  return RealGradient(1008.*eta*xi + 144.*eta - 2016.*eta*xi*xi - 360.*xi + 12. - 756.*eta*eta + 1008.*(xi*xi) + 672.*(eta*eta*eta) - 672.*xi*xi*xi, 1008.*eta*xi - 216.*xi - 504.*xi*eta*eta - 756.*xi*xi + 1008.*(xi*xi*xi));
1500  default:
1501  libmesh_error_msg("Invalid i = " << i);
1502  }
1503  } // j = 1
1504 
1505  default:
1506  libmesh_error_msg("Invalid j = " << j);
1507  }
1508  }
1509 
1510  default:
1511  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
1512  } // end switch (type)
1513  } // end case FOURTH
1514 
1515  // quintic Nedelec (first kind) shape function first derivatives
1516  case FIFTH:
1517  {
1518  switch (elem->type())
1519  {
1520  case QUAD8:
1521  case QUAD9:
1522  {
1523  switch (j)
1524  {
1525  // d()/dxi
1526  case 0:
1527  {
1528  switch(ii)
1529  {
1530  case 0:
1531  return sign * RealGradient(1875.*eta/2. + 525.*xi/2. - 13125.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 26250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 15750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 78750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 183750.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 183750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 66150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 1125. - 11250.*(eta + 1.)*(eta + 1.)/(2.*2.) - 157500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 94500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1050.*(xi + 1.)*(xi + 1.)/(2.*2.) + 367500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 367500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 132300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 26250.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 630.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 79380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 26250.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1532  case 1:
1533  return sign * RealGradient(-71625.*eta/256. - 21105.*xi/256. + 527625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. - 1021125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 291375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 1582875.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 3693375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 3693375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 1329615.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. - 10875./32. + 214875.*((eta + 1.)*(eta + 1.)/(2.*2.))/64. + 3063375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 874125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 40845.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 7147875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 7147875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 2573235.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64. - 501375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 11655.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. - 2039625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/32. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/32. + 501375.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 180495.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64., 0.);
1534  case 2:
1535  return sign * RealGradient(2625.*eta/16. + 1155.*xi/16. - 28875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/8. + 70875.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 23625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 86625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. - 202125.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 202125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 72765.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/4. + 1785./8. - 7875.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 212625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 70875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 2835.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 496125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 496125.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 178605.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/4. + 18375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. + 165375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. - 59535.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/2. - 18375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 6615.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/4., 0.);
1536  case 3:
1537  return sign * RealGradient(-17625.*eta/256. - 9345.*xi/256. + 233625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. - 727125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 291375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 700875.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 1635375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 1635375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 588735.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. - 3195./32. + 52875.*((eta + 1.)*(eta + 1.)/(2.*2.))/64. + 2181375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 874125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 29085.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 5089875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 5089875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 1832355.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64. - 123375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 11655.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. - 2039625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/32. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/32. + 123375.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 44415.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64., 0.);
1538  case 4:
1539  return sign * RealGradient(375.*eta + 315.*xi/2. - 7875.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 21000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 15750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 47250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 110250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 110250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 39690.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 1005./2. - 4500.*(eta + 1.)*(eta + 1.)/(2.*2.) - 126000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 94500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 840.*(xi + 1.)*(xi + 1.)/(2.*2.) + 294000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 294000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 105840.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 10500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 630.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 79380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 10500.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 3780.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1540  case 5:
1541  return sign * RealGradient(0., -375.*eta/2. - 375.*xi + 9000.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 47250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 84000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 47250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 31500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 42000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 2125./4. + 2625.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 165375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 294000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 7875.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 220500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 99225.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1750.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 392000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 7000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 176400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 7875.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1542  case 6:
1543  return sign * RealGradient(0., 14325.*eta/256. + 7275.*xi/128. - 42975.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/16. + 902475.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 100275.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 902475.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 316575.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/32. - 204225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/16. + 174825.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. + 55325./512. - 105525.*(eta + 1.)*(eta + 1.)/(2.*2.)/256. - 6648075.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 738675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. - 6648075.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 152775.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 4288725.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 3671325.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 68075.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 476525.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 4288725.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 16975.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. + 407925.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 58275.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/256. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 152775.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/256.);
1544  case 7:
1545  return sign * RealGradient(0., -525.*eta/16. - 225.*xi/8. + 1575.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 33075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 14700.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 33075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 17325.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 14175.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 1875./32. + 5775.*((eta + 1.)*(eta + 1.)/(2.*2.))/16. + 363825.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 80850.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 363825.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. + 4725.*((xi + 1.)*(xi + 1.)/(2.*2.))/16. - 297675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 297675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 132300.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 66150.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 4725.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/16. + 297675.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16.);
1546  case 8:
1547  return sign * RealGradient(0., 3525.*eta/256. + 1275.*xi/128. - 10575.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/16. + 222075.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 24675.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 222075.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 140175.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/32. - 145425.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/16. + 174825.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. + 11725./512. - 46725.*(eta + 1.)*(eta + 1.)/(2.*2.)/256. - 2943675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 327075.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. - 2943675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 26775.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 3053925.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 3671325.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 48475.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 339325.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 3053925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 2975.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. + 407925.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 58275.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/256. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 26775.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/256.);
1548  case 9:
1549  return sign * RealGradient(0., -75.*eta - 75.*xi + 3600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 33600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 18900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 33600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 575./4. + 1575.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 99225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1575.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 176400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 99225.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 313600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 176400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1550  case 10:
1551  return sign * RealGradient(75.*eta - 1575.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 66150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 88200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 39690.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 75. - 1800.*(eta + 1.)*(eta + 1.)/(2.*2.) - 50400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 37800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 176400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 235200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 105840.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 6300.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 132300.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 79380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 8400.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 3780.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1552  case 11:
1553  return sign * RealGradient(-3525.*eta/256. + 46725.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. - 145425.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 58275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 140175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/32. + 981225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 327075.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/16. + 588735.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. - 3525./256. + 10575.*((eta + 1.)*(eta + 1.)/(2.*2.))/32. + 436275.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 174825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. - 3053925.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 1017975.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/16. - 1832355.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64. - 74025.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 1223775.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 407925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/32. + 24675.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/16. - 44415.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64., 0.);
1554  case 12:
1555  return sign * RealGradient(525.*eta/16. - 5775.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/8. + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 17325.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 121275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 40425.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 72765.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/4. + 525./16. - 1575.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 42525.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 297675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 99225.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 178605.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/4. + 11025.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 66150.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 59535.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/2. - 3675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 6615.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/4., 0.);
1556  case 13:
1557  return sign * RealGradient(-14325.*eta/256. + 105525.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. - 204225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 58275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 316575.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/32. + 2216025.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 738675.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/16. + 1329615.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/64. - 14325./256. + 42975.*((eta + 1.)*(eta + 1.)/(2.*2.))/32. + 612675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 174825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. - 4288725.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 1429575.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/16. - 2573235.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64. - 300825.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 1223775.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 407925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. + 734265.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/32. + 100275.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/16. - 180495.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/64., 0.);
1558  case 14:
1559  return sign * RealGradient(375.*eta/2. - 2625.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 5250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 31500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 110250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 147000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 66150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 375./2. - 4500.*(eta + 1.)*(eta + 1.)/(2.*2.) - 63000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 37800.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 220500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 294000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 132300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 15750.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 132300.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 79380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 21000.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1560  case 15:
1561  return sign * RealGradient(0., -375.*eta - 375.*xi/2. + 9000.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 31500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 42000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 47250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 84000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 47250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 2125./4. + 7875.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 165375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 99225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 2625.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 294000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 165375.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 7000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 392000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1750.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 220500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1562  case 16:
1563  return sign * RealGradient(0., 17625.*eta/256. + 6375.*xi/256. - 52875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. + 370125.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 123375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 222075.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 700875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/64. - 727125.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 874125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. + 45875./512. - 233625.*(eta + 1.)*(eta + 1.)/(2.*2.)/256. - 4906125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 1635375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 2943675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 44625.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 5089875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 6118875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 242375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 1696625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 3053925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 14875.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. + 2039625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. - 291375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/256. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 26775.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/256.);
1564  case 17:
1565  return sign * RealGradient(0., -2625.*eta/16. - 1125.*xi/16. + 7875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 55125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 18375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 33075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 86625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/4. + 70875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 70875.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. - 7125./32. + 28875.*((eta + 1.)*(eta + 1.)/(2.*2.))/16. + 606375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 202125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 363825.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. + 7875.*((xi + 1.)*(xi + 1.)/(2.*2.))/16. - 496125.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 496125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 23625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. - 165375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 23625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/16. + 297675.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16.);
1566  case 18:
1567  return sign * RealGradient(0., 71625.*eta/256. + 36375.*xi/256. - 214875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. + 1504125.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 501375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 902475.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 1582875.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/64. - 1021125.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 874125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. + 203875./512. - 527625.*(eta + 1.)*(eta + 1.)/(2.*2.)/256. - 11080125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 3693375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 6648075.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 254625.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 7147875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 6118875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 340375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/128. - 2382625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 4288725.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. + 84875.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. + 2039625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/32. - 291375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/256. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 152775.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/256.);
1568  case 19:
1569  return sign * RealGradient(0., -1875.*eta/2. - 1875.*xi/2. + 22500.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 78750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 105000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 47250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 78750.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 105000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 47250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 6875./4. + 13125.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 275625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 367500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 13125.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 367500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 165375.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 8750.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 490000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 8750.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 220500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 7875.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1570  case 20:
1571  return RealGradient(0., -2925.*eta/4. - 3525.*xi/4. + 21150.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 155475.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 105000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 47250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 74025.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 98700.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 44415.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 11925./8. + 20475.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 1088325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 367500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 51825.*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 362775.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 652995.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 6825.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 490000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 8750.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 220500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 12285.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 7875.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1572  case 21:
1573  return RealGradient(0., 150.*eta + 2775.*xi/8. - 8325.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 92475.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 84000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 47250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 58275.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 38850.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 34965.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 3775./8. - 1050.*(eta + 1.)*(eta + 1.)/(2.*2.) - 647325.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 294000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 165375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 30825.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 215775.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 388395.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 1400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 392000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 7000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 630.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2.);
1574  case 22:
1575  return RealGradient(0., -675.*eta/2. - 1125.*xi/8. + 3375.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 6075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. - 23625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 15750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 3375./8. + 4725.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 42525.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. + 2025.*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 25515.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 3150.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2.);
1576  case 23:
1577  return RealGradient(0., 675.*eta/4. + 225.*xi/2. - 2700.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 6075.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 9450.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 12600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5670.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 2025./8. - 4725.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 42525.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. - 2025.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 14175.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 25515.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4.);
1578  case 24:
1579  return RealGradient(2925.*eta/4. - 20475.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 20475.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 12285.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 74025.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 362775.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 183750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 66150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 2925./4. - 10575.*(eta + 1.)*(eta + 1.)/(2.*2.) - 148050.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 88830.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 362775.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 367500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 132300.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 51825.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 217665.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 79380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 26250.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1580  case 25:
1581  return RealGradient(-150.*eta + 2100.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2520.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 58275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 215775.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 147000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 66150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 150. + 8325.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 58275.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 34965.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 215775.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 294000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 132300.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 30825.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 129465.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 79380.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 21000.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 9450.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
1582  case 26:
1583  return RealGradient(675.*eta/2. - 4725.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 9450.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5670.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 23625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 675./2. - 3375.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 23625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 14175.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 2025.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1584  case 27:
1585  return RealGradient(-675.*eta/4. + 4725.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2835.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 9450.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 14175.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 675./4. + 1350.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 18900.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 11340.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 2025.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1586  case 28:
1587  return RealGradient(585.*eta/2. - 12285.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 16380.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 12285.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 44415.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 217665.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 110250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 39690.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 585./2. - 4230.*(eta + 1.)*(eta + 1.)/(2.*2.) - 118440.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 88830.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 290220.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 294000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 105840.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 10365.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 217665.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 79380.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 10500.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 3780.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1588  case 29:
1589  return RealGradient(-60.*eta + 1260.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2520.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 34965.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 129465.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 88200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 39690.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 60. + 1665.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 46620.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 34965.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 172620.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 235200.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 105840.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) - 6165.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 129465.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 79380.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) + 8400.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 3780.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
1590  case 30:
1591  return RealGradient(135.*eta - 2835.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 7560.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5670.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 8505.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 135. - 675.*(eta + 1.)*(eta + 1.)/(2.*2.) - 18900.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 11340.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 405.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
1592  case 31:
1593  return RealGradient(-135.*eta/2. + 2835.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 3780.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 2835.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5670.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8505.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 135./2. + 540.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 15120.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 11340.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 11340.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 405.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)), 0.);
1594  case 32:
1595  return RealGradient(0., -585.*eta/2. - 705.*xi/4. + 8460.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 31095.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 42000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 44415.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 78960.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 44415.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 3555./8. + 12285.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 652995.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 220500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 99225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 10365.*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 290220.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 652995.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 5460.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 392000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1750.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 220500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 12285.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1596  case 33:
1597  return RealGradient(0., 60.*eta + 555.*xi/8. - 3330.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 18495.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 33600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 34965.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 31080.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 34965.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 995./8. - 630.*(eta + 1.)*(eta + 1.)/(2.*2.) - 388395.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 176400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 99225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 6165.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 172620.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 388395.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 1120.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 313600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 630.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2.);
1598  case 34:
1599  return RealGradient(0., -135.*eta - 225.*xi/8. + 1350.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1215.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 12600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 1215./8. + 2835.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 25515.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. + 405.*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 11340.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 25515.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 2520.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2.);
1600  case 35:
1601  return RealGradient(0., 135.*eta/2. + 45.*xi/2. - 1080.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1215.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 5670.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 10080.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5670.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 675./8. - 2835.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 25515.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. - 405.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 11340.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 25515.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 1260.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4.);
1602  case 36:
1603  return RealGradient(-72.*eta + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1980.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 5100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1890.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 72. + 1188.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 3060.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3150.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1134.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
1604  case 37:
1605  return RealGradient(-48.*eta + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1980.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 5100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1890.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 48. + 792.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2040.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2100.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 756.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.), 0.);
1606  case 38:
1607  return RealGradient(30.*eta - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 990.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2550.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 945.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 30. - 495.*(eta + 1.)*(eta + 1.)/(2.*2.) + 1275.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.))/2., 0.);
1608  case 39:
1609  return RealGradient(0., -72.*eta - 297.*xi + 2376.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 9180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 12600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5670.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1980.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 333. + 120.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 7650.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 2295.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3150.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1610  case 40:
1611  return RealGradient(0., -48.*eta - 99.*xi + 1584.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 6120.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3780.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1980.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 135. + 120.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 7650.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 765.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1050.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2.);
1612  case 41:
1613  return RealGradient(0., 30.*eta + 99.*xi/2. - 990.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3825.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 990.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 147./2. - 60.*(eta + 1.)*(eta + 1.)/(2.*2.) - 3825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 765.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4.);
1614  case 42:
1615  return RealGradient(0., 9.*eta + 108.*xi - 864.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 5400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10080.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 5670.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 720.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 225./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 4500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1350.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2520.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2.);
1616  case 43:
1617  return RealGradient(0., 6.*eta + 36.*xi - 576.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6720.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3780.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 720.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 81./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 4500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 450.*(xi + 1.)*(xi + 1.)/(2.*2.) + 840.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2.);
1618  case 44:
1619  return RealGradient(0., -15.*eta/4. - 18.*xi + 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 21. + 15.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 2250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 225.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 420.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4.);
1620  case 45:
1621  return RealGradient(9.*eta - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 720.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 3000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1890.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 9. - 432.*(eta + 1.)*(eta + 1.)/(2.*2.) + 1800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2520.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1134.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1622  case 46:
1623  return RealGradient(6.*eta - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 720.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 3000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1890.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.) + 6. - 288.*(eta + 1.)*(eta + 1.)/(2.*2.) + 1200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1680.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 756.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)), 0.);
1624  case 47:
1625  return RealGradient(-15.*eta/4. + 15.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 1500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 945.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)) - 15./4. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 750.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1050.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.*2.)/2., 0.);
1626  case 48:
1627  return RealGradient(0., -36.*eta - 81.*xi/2. + 324.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 117./2. + 60.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 135.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1628  case 49:
1629  return RealGradient(0., 9.*eta + 27.*xi - 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 63./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 135.*(xi + 1.)*(xi + 1.)/(2.*2.)/2.);
1630  case 50:
1631  return RealGradient(36.*eta - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 36. - 162.*(eta + 1.)*(eta + 1.)/(2.*2.) + 90.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
1632  case 51:
1633  return RealGradient(-9.*eta + 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 9. + 108.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 90.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
1634  case 52:
1635  return RealGradient(24.*eta - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 24. - 108.*(eta + 1.)*(eta + 1.)/(2.*2.) + 60.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
1636  case 53:
1637  return RealGradient(-6.*eta + 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 6. + 72.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 60.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
1638  case 54:
1639  return RealGradient(0., -24.*eta - 27.*xi/2. + 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 63./2. + 60.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 45.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1640  case 55:
1641  return RealGradient(0., 6.*eta + 9.*xi - 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 27./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.) - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 45.*(xi + 1.)*(xi + 1.)/(2.*2.)/2.);
1642  case 56:
1643  return RealGradient(0., 0.);
1644  case 57:
1645  return RealGradient(0., -9.*xi/2. - 5./2. + 15.*((xi + 1.)*(xi + 1.)/(2.*2.))/2.);
1646  case 58:
1647  return RealGradient(0., 3.*xi + 5./2. - 15.*(xi + 1.)*(xi + 1.)/(2.*2.)/2.);
1648  case 59:
1649  return RealGradient(0., 0.);
1650  default:
1651  libmesh_error_msg("Invalid i = " << i);
1652  }
1653  } // j = 0
1654 
1655  // d()/deta
1656  case 1:
1657  {
1658  switch(ii)
1659  {
1660  case 0:
1661  return sign * RealGradient(1875.*eta/2. + 1875.*xi/2. - 22500.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 78750.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 105000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 47250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 78750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 105000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 47250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 6875./4. - 13125.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 275625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 367500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 165375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 13125.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 367500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 165375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 8750.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 490000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 8750.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 7875.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
1662  case 1:
1663  return sign * RealGradient(-36375.*eta/256. - 71625.*xi/256. + 214875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. - 1582875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 1021125.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 874125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 1504125.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 501375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/16. - 902475.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. - 203875./512. + 254625.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 11080125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 7147875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 6118875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 527625.*((xi + 1.)*(xi + 1.)/(2.*2.))/256. - 3693375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 6648075.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. - 84875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 2382625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. - 340375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 4288725.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 152775.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/256. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 291375.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/256., 0.);
1664  case 2:
1665  return sign * RealGradient(1125.*eta/16. + 2625.*xi/16. - 7875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 86625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 70875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 70875.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 55125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. - 18375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 33075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. + 7125./32. - 7875.*(eta + 1.)*(eta + 1.)/(2.*2.)/16. - 606375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 496125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 496125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 28875.*(xi + 1.)*(xi + 1.)/(2.*2.)/16. + 202125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 363825.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. + 2625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 23625.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. + 297675.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/16. - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 23625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16., 0.);
1666  case 3:
1667  return sign * RealGradient(-6375.*eta/256. - 17625.*xi/256. + 52875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. - 700875.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 727125.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 874125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 370125.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 123375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/16. - 222075.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. - 45875./512. + 44625.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 4906125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 5089875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 6118875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 233625.*((xi + 1.)*(xi + 1.)/(2.*2.))/256. - 1635375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 2943675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. - 14875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 1696625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. - 242375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 3053925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 26775.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/256. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 291375.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/256., 0.);
1668  case 4:
1669  return sign * RealGradient(375.*eta/2. + 375.*xi - 9000.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 47250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 84000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 47250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 31500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 42000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 2125./4. - 2625.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 165375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 294000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 165375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 7875.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 220500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99225.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1750.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 392000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 7000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
1670  case 5:
1671  return sign * RealGradient(0., -375.*xi/2. + 2625.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 31500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 110250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 147000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 66150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 5250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 3150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 375./2. + 63000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 294000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 132300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 4500.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 37800.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 132300.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 79380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 15750.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 21000.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 9450.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1672  case 6:
1673  return sign * RealGradient(0., 14325.*xi/256. - 105525.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. + 316575.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 2216025.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 738675.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16. - 1329615.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 204225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 58275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 14325./256. - 612675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 4288725.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 1429575.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16. + 2573235.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64. - 42975.*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 174825.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/16. - 1223775.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 407925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/32. + 300825.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 100275.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16. + 180495.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64.);
1674  case 7:
1675  return sign * RealGradient(0., -525.*xi/16. + 5775.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/8. - 17325.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 121275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 40425.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 72765.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/4. - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/8. + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 525./16. + 42525.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 297675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 99225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 178605.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/4. + 1575.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 66150.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 59535.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/2. - 11025.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 3675.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 6615.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/4.);
1676  case 8:
1677  return sign * RealGradient(0., 3525.*xi/256. - 46725.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. + 140175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 981225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 327075.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/16. - 588735.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 145425.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 58275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 3525./256. - 436275.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 3053925.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 1017975.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16. + 1832355.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64. - 10575.*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 174825.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/16. - 1223775.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 407925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/32. + 74025.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 24675.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16. + 44415.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64.);
1678  case 9:
1679  return sign * RealGradient(0., -75.*xi + 1575.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 66150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 88200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 3150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 75. + 50400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 235200.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 105840.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 1800.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 37800.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 132300.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 79380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 6300.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 8400.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 3780.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1680  case 10:
1681  return sign * RealGradient(75.*eta + 75.*xi - 3600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 18900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 33600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 33600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 575./4. - 1575.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 176400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 99225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1575.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 176400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99225.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 313600.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
1682  case 11:
1683  return sign * RealGradient(-1275.*eta/128. - 3525.*xi/256. + 10575.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/16. - 140175.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 145425.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 174825.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. - 222075.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 24675.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 222075.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. - 11725./512. + 26775.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 2943675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 3053925.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 3671325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 46725.*((xi + 1.)*(xi + 1.)/(2.*2.))/256. - 327075.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 2943675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. - 2975.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/16. + 339325.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 407925.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 48475.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 3053925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 26775.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/256. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 58275.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/256., 0.);
1684  case 12:
1685  return sign * RealGradient(225.*eta/8. + 525.*xi/16. - 1575.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 17325.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 14175.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 33075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. - 14700.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 33075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. + 1875./32. - 4725.*(eta + 1.)*(eta + 1.)/(2.*2.)/16. - 363825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 297675.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 297675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 5775.*(xi + 1.)*(xi + 1.)/(2.*2.)/16. + 80850.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 363825.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 132300.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 66150.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. + 297675.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/16. - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 4725.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/16., 0.);
1686  case 13:
1687  return sign * RealGradient(-7275.*eta/128. - 14325.*xi/256. + 42975.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/16. - 316575.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/32. + 204225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 174825.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/32. - 902475.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 100275.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 902475.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. - 55325./512. + 152775.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 6648075.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 4288725.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 3671325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 105525.*((xi + 1.)*(xi + 1.)/(2.*2.))/256. - 738675.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 6648075.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. - 16975.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/16. + 476525.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 407925.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 68075.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/128. - 4288725.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/64. + 152775.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/256. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 58275.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/256., 0.);
1688  case 14:
1689  return sign * RealGradient(375.*eta + 375.*xi/2. - 9000.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 31500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 42000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 18900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 47250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 84000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 47250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 2125./4. - 7875.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 165375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 220500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 99225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 2625.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 294000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 165375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 392000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 1750.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 7875.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
1690  case 15:
1691  return sign * RealGradient(0., -315.*eta/2. - 375.*xi + 7875.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 47250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 110250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 110250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 21000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 15750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1005./2. + 840.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 126000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 294000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 294000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 105840.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 4500.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 94500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 630.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 79380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 10500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 10500.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 3780.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1692  case 16:
1693  return sign * RealGradient(0., 9345.*eta/256. + 17625.*xi/256. - 233625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. + 700875.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 1635375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 1635375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. - 588735.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 727125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 291375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 3195./32. - 29085.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 2181375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 5089875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 5089875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. + 1832355.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64. - 52875.*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 874125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. + 11655.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/32. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/32. + 123375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 123375.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. + 44415.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64.);
1694  case 17:
1695  return sign * RealGradient(0., -1155.*eta/16. - 2625.*xi/16. + 28875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/8. - 86625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 202125.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 202125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. + 72765.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/4. - 70875.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/8. + 23625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. - 1785./8. + 2835.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 212625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 496125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 496125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. - 178605.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/4. + 7875.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 70875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/4. + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. + 59535.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/2. - 18375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 18375.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. - 6615.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/4.);
1696  case 18:
1697  return sign * RealGradient(0., 21105.*eta/256. + 71625.*xi/256. - 527625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/128. + 1582875.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 3693375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/64. + 3693375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/64. - 1329615.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/64. + 1021125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 291375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. + 10875./32. - 40845.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 3063375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 7147875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 7147875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. + 2573235.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64. - 214875.*(xi + 1.)*(xi + 1.)/(2.*2.)/64. + 874125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. + 11655.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/64. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/32. - 734265.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/32. + 501375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 501375.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. + 180495.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/64.);
1698  case 19:
1699  return sign * RealGradient(0., -525.*eta/2. - 1875.*xi/2. + 13125.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 78750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 183750.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 183750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 66150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 26250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 15750.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1125. + 1050.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 157500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 367500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 367500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 132300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 11250.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 94500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 630.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 79380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 26250.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 26250.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 9450.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1700  case 20:
1701  return RealGradient(0., -2925.*xi/4. + 20475.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 74025.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 362775.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 183750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 66150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 20475.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 12285.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2925./4. + 148050.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 362775.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 367500.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 132300.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 10575.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 88830.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 217665.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 79380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 51825.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 26250.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 9450.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1702  case 21:
1703  return RealGradient(0., 150.*xi - 2100.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 58275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 215775.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 147000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 66150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2520.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 150. - 58275.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 215775.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 294000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 132300.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 8325.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 34965.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 129465.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 79380.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 30825.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 21000.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 9450.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
1704  case 22:
1705  return RealGradient(0., -675.*xi/2. + 4725.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 23625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 9450.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 5670.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 675./2. + 23625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 14175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3375.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2025.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2.);
1706  case 23:
1707  return RealGradient(0., 675.*xi/4. - 4725.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 9450.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 14175.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2835.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 675./4. - 18900.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1350.*(xi + 1.)*(xi + 1.)/(2.*2.) + 11340.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2025.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2.);
1708  case 24:
1709  return RealGradient(3525.*eta/4. + 2925.*xi/4. - 21150.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 74025.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 98700.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 44415.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 155475.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 105000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 47250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 11925./8. - 51825.*(eta + 1.)*(eta + 1.)/(2.*2.)/8. - 1088325.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 362775.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 652995.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 20475.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 367500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 165375.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 8750.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 490000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 6825.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 220500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 7875.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 12285.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4., 0.);
1710  case 25:
1711  return RealGradient(-2775.*eta/8. - 150.*xi + 8325.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 58275.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 38850.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 34965.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 92475.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. + 84000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 47250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 3775./8. + 30825.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 647325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 215775.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 388395.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 1050.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 294000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 165375.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 7000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 392000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 220500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 630.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)), 0.);
1712  case 26:
1713  return RealGradient(1125.*eta/8. + 675.*xi/2. - 3375.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 23625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 15750.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 6075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 3375./8. - 2025.*(eta + 1.)*(eta + 1.)/(2.*2.)/8. - 42525.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 14175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 25515.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 4725.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 3150.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
1714  case 27:
1715  return RealGradient(-225.*eta/2. - 675.*xi/4. + 2700.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 9450.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 12600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5670.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 6075.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 2025./8. + 2025.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 42525.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 14175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 25515.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 4725.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4., 0.);
1716  case 28:
1717  return RealGradient(705.*eta/4. + 585.*xi/2. - 8460.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 44415.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 78960.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 44415.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 31095.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 42000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 3555./8. - 10365.*(eta + 1.)*(eta + 1.)/(2.*2.)/8. - 652995.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 290220.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 652995.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 12285.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 220500.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99225.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1750.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 392000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 220500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 5460.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 176400.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 12285.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4., 0.);
1718  case 29:
1719  return RealGradient(-555.*eta/8. - 60.*xi + 3330.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 34965.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 31080.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 34965.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 18495.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 33600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 18900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 995./8. + 6165.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 388395.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 172620.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 388395.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 630.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 176400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 99225.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 313600.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 176400.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1120.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 176400.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 630.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)), 0.);
1720  case 30:
1721  return RealGradient(225.*eta/8. + 135.*xi - 1350.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 12600.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 1215.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 1215./8. - 405.*(eta + 1.)*(eta + 1.)/(2.*2.)/8. - 25515.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 11340.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 25515.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4. - 2835.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 2520.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2., 0.);
1722  case 31:
1723  return RealGradient(-45.*eta/2. - 135.*xi/2. + 1080.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 5670.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 10080.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5670.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 1215.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 675./8. + 405.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 25515.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 11340.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 25515.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 2835.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 1260.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4., 0.);
1724  case 32:
1725  return RealGradient(0., -585.*xi/2. + 12285.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 44415.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 217665.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 110250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 39690.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 16380.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 12285.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 585./2. + 118440.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 290220.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 294000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 105840.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 4230.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 88830.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 217665.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 220500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 79380.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 10365.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 10500.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 3780.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1726  case 33:
1727  return RealGradient(0., 60.*xi - 1260.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 34965.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 129465.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 88200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 39690.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 3360.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2520.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 60. - 46620.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 172620.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 235200.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 105840.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 1665.*(xi + 1.)*(xi + 1.)/(2.*2.) + 34965.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 129465.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 176400.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 79380.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 6165.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 8400.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 3780.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
1728  case 34:
1729  return RealGradient(0., -135.*xi + 2835.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 14175.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 8505.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 7560.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 5670.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 135. + 18900.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 11340.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 675.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 14175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 405.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1730  case 35:
1731  return RealGradient(0., 135.*xi/2. - 2835.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 5670.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8505.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 3780.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 2835.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 135./2. - 15120.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 11340.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 540.*(xi + 1.)*(xi + 1.)/(2.*2.) + 11340.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 405.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1732  case 36:
1733  return RealGradient(-297.*eta - 72.*xi + 2376.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1980.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 9180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 12600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 5670.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 333. + 2295.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 7650.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 120.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 3150.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2., 0.);
1734  case 37:
1735  return RealGradient(-99.*eta - 48.*xi + 1584.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1980.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 6120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 3780.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 135. + 765.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 7650.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 120.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10500.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 1050.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2., 0.);
1736  case 38:
1737  return RealGradient(99.*eta/2. + 30.*xi - 990.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 990.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 3825.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 5250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 147./2. - 765.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 3825.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.) + 5250.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4., 0.);
1738  case 39:
1739  return RealGradient(0., -72.*xi + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1980.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1890.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 72. + 1188.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3060.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1134.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1740  case 40:
1741  return RealGradient(0., -48.*xi + 240.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 1980.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 5250.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1890.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 48. + 792.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2040.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2100.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 756.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.));
1742  case 41:
1743  return RealGradient(0., 30.*xi - 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 990.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2550.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 945.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 30. - 495.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1275.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.))/2.);
1744  case 42:
1745  return RealGradient(0., 9.*xi - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 720.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1890.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 9. - 432.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1800.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2520.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 1134.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
1746  case 43:
1747  return RealGradient(0., 6.*xi - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 720.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4200.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 1890.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.) + 6. - 288.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1680.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 756.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)));
1748  case 44:
1749  return RealGradient(0., -15.*xi/4. + 15.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 1500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) + 945.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)) - 15./4. + 180.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 750.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1050.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.*2.)/2.);
1750  case 45:
1751  return RealGradient(108.*eta + 9.*xi - 864.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 720.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 5400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 10080.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 5670.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 225./2. - 1350.*(eta + 1.)*(eta + 1.)/(2.*2.) - 4500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 15.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 2520.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2., 0.);
1752  case 46:
1753  return RealGradient(36.*eta + 6.*xi - 576.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 720.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 3600.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 6720.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3780.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 81./2. - 450.*(eta + 1.)*(eta + 1.)/(2.*2.) - 4500.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 15.*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 840.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2., 0.);
1754  case 47:
1755  return RealGradient(-18.*eta - 15.*xi/4. + 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 360.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 2250.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 4200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 21. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 2250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 4200.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. - 420.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4., 0.);
1756  case 48:
1757  return RealGradient(0., -36.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 36. + 162.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 90.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1758  case 49:
1759  return RealGradient(0., 9.*xi - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 9. - 108.*(xi + 1.)*(xi + 1.)/(2.*2.) + 90.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1760  case 50:
1761  return RealGradient(81.*eta/2. + 36.*xi - 324.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 270.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 117./2. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.), 0.);
1762  case 51:
1763  return RealGradient(-27.*eta - 9.*xi + 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 270.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 63./2. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.)), 0.);
1764  case 52:
1765  return RealGradient(27.*eta/2. + 24.*xi - 216.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 270.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 180.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 63./2. - 45.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 60.*(xi + 1.)*(xi + 1.)/(2.*2.), 0.);
1766  case 53:
1767  return RealGradient(-9.*eta - 6.*xi + 144.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 180.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 180.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 27./2. + 45.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 225.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 15.*((xi + 1.)*(xi + 1.)/(2.*2.)), 0.);
1768  case 54:
1769  return RealGradient(0., -24.*xi + 120.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 270.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 24. + 108.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 60.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
1770  case 55:
1771  return RealGradient(0., 6.*xi - 30.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 180.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 6. - 72.*(xi + 1.)*(xi + 1.)/(2.*2.) + 60.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
1772  case 56:
1773  return RealGradient(-9.*eta/2. - 5./2. + 15.*((eta + 1.)*(eta + 1.)/(2.*2.))/2., 0.);
1774  case 57:
1775  return RealGradient(0., 0.);
1776  case 58:
1777  return RealGradient(0., 0.);
1778  case 59:
1779  return RealGradient(3.*eta + 5./2. - 15.*(eta + 1.)*(eta + 1.)/(2.*2.)/2., 0.);
1780  default:
1781  libmesh_error_msg("Invalid i = " << i);
1782  }
1783  } // j = 1
1784 
1785  default:
1786  libmesh_error_msg("Invalid j = " << j);
1787  }
1788  }
1789 
1790  case TRI6:
1791  case TRI7:
1792  {
1793  switch (j)
1794  {
1795  // d()/dxi
1796  case 0:
1797  {
1798  switch(ii)
1799  {
1800  case 0:
1801  return sign * RealGradient(-12600.*eta*xi + 2800.*eta + 15120.*eta*(xi*xi) - 4200.*eta*xi*xi*xi + 2100.*xi + 22680.*xi*(eta*eta) - 12600.*xi*eta*eta*eta - 300. - 8400.*eta*eta - 12600.*eta*eta*xi*xi - 4200.*xi*xi + 10080.*(eta*eta*eta) + 2520.*(xi*xi*xi) - 4200.*eta*eta*eta*eta, 8400.*eta*xi - 700.*eta - 22680.*eta*xi*xi + 16800.*eta*(xi*xi*xi) - 1400.*xi - 15120.*xi*eta*eta + 8400.*xi*(eta*eta*eta) + 75. + 2100.*(eta*eta) + 18900.*(eta*eta)*(xi*xi) + 6300.*(xi*xi) - 2520.*eta*eta*eta - 10080.*xi*xi*xi + 1050.*(eta*eta*eta*eta) + 5250.*(xi*xi*xi*xi));
1802  case 1:
1803  return sign * RealGradient(136185.*eta*xi/32. - 12145.*eta/16. - 20475.*eta*xi*xi/4. + 19425.*eta*(xi*xi*xi)/16. - 21105.*xi/32. - 240975.*xi*eta*eta/32. + 127575.*xi*(eta*eta*eta)/32. + 2865./32. + 7245.*(eta*eta)/4. + 146475.*(eta*eta)*(xi*xi)/32. + 40845.*(xi*xi)/32. - 25515.*eta*eta*eta/16. - 11655.*xi*xi*xi/16. + 14175.*(eta*eta*eta*eta)/32., -39375.*eta*xi/16. + 3045.*eta/32. + 252315.*eta*(xi*xi)/32. - 48825.*eta*xi*xi*xi/8. + 1715.*xi/4. + 25515.*xi*(eta*eta)/8. - 14175.*xi*eta*eta*eta/16. - 2395./128. + 2835.*(eta*eta)/64. - 382725.*eta*eta*xi*xi/64. - 125265.*xi*xi/64. - 14175.*eta*eta*eta/32. + 48615.*(xi*xi*xi)/16. + 42525.*(eta*eta*eta*eta)/128. - 97125.*xi*xi*xi*xi/64.);
1804  case 2:
1805  return sign * RealGradient(-3255.*eta*xi/2. + 3780.*eta*(xi*xi) - 1575.*eta*xi*xi*xi + 1155.*xi/2. + 945.*xi*(eta*eta)/2. + 1575.*xi*(eta*eta*eta)/2. - 105./2. + 840.*(eta*eta) - 4725.*eta*eta*xi*xi/2. - 2835.*xi*xi/2. - 1575.*eta*eta*eta + 945.*(xi*xi*xi) + 1575.*(eta*eta*eta*eta)/2., 105.*eta*xi + 35.*eta/2. - 4725.*eta*xi*xi/2. + 3150.*eta*(xi*xi*xi) - 315.*xi + 1890.*xi*(eta*eta) - 1575.*xi*eta*eta*eta + 85./8. - 525.*eta*eta/4. - 4725.*eta*eta*xi*xi/4. + 7455.*(xi*xi)/4. + 105.*(eta*eta*eta)/2. - 3465.*xi*xi*xi + 525.*(eta*eta*eta*eta)/8. + 7875.*(xi*xi*xi*xi)/4.);
1806  case 3:
1807  return sign * RealGradient(-16695.*eta*xi/32. + 1855.*eta/16. - 2835.*eta*xi*xi/4. + 19425.*eta*(xi*xi*xi)/16. - 9345.*xi/32. + 76545.*xi*(eta*eta)/32. - 48825.*xi*eta*eta*eta/32. + 705./32. - 1155.*eta*eta/4. - 29925.*eta*eta*xi*xi/32. + 29085.*(xi*xi)/32. - 315.*eta*eta*eta/16. - 11655.*xi*xi*xi/16. + 5775.*(eta*eta*eta*eta)/32., 9345.*eta*xi/16. - 875.*eta/32. - 65205.*eta*xi*xi/32. + 9975.*eta*(xi*xi*xi)/8. + 595.*xi/4. - 4725.*xi*eta*eta/8. - 5775.*xi*eta*eta*eta/16. - 555./128. + 1155.*(eta*eta)/64. + 146475.*(eta*eta)*(xi*xi)/64. - 66465.*xi*xi/64. + 945.*(eta*eta*eta)/32. + 36855.*(xi*xi*xi)/16. + 525.*(eta*eta*eta*eta)/128. - 97125.*xi*xi*xi*xi/64.);
1808  case 4:
1809  return sign * RealGradient(-1680.*eta*xi + 140.*eta + 5040.*eta*(xi*xi) - 4200.*eta*xi*xi*xi + 1260.*xi - 120. - 3360.*xi*xi + 2520.*(xi*xi*xi), -700.*xi + 25. + 4200.*(xi*xi) - 8400.*xi*xi*xi + 5250.*(xi*xi*xi*xi));
1810  case 5:
1811  return sign * RealGradient(-1680.*eta*xi + 140.*eta + 5040.*eta*(xi*xi) - 4200.*eta*xi*xi*xi, -700.*xi + 25. + 4200.*(xi*xi) - 8400.*xi*xi*xi + 5250.*(xi*xi*xi*xi));
1812  case 6:
1813  return sign * RealGradient(-2835.*eta*xi/2. + 735.*eta/4. + 42525.*eta*(xi*xi)/16. - 42525.*eta*xi*xi*xi/32. + 76545.*xi*(eta*eta)/16. - 42525.*xi*eta*eta*eta/16. - 1575.*eta*eta/2. - 42525.*eta*eta*xi*xi/8. + 12285.*(eta*eta*eta)/16. - 1575.*eta*eta*eta*eta/8., 2205.*eta*xi - 455.*eta/4. - 127575.*eta*xi*xi/16. + 14175.*eta*(xi*xi*xi)/2. - 1785.*xi/4. - 31185.*xi*eta*eta/16. + 1575.*xi*(eta*eta*eta)/4. + 20. + 525.*(eta*eta)/4. + 127575.*(eta*eta)*(xi*xi)/32. + 8505.*(xi*xi)/4. - 735.*eta*eta*eta/16. - 53865.*xi*xi*xi/16. + 525.*(eta*eta*eta*eta)/128. + 212625.*(xi*xi*xi*xi)/128.);
1814  case 7:
1815  return sign * RealGradient(-840.*eta*xi + 175.*eta + 945.*eta*(xi*xi) - 525.*eta*xi*xi*xi/2. + 4725.*xi*(eta*eta) - 4725.*xi*eta*eta*eta - 1260.*eta*eta - 3150.*eta*eta*xi*xi + 2205.*(eta*eta*eta) - 1050.*eta*eta*eta*eta, 2520.*eta*xi - 175.*eta - 6615.*eta*xi*xi + 4200.*eta*(xi*xi*xi) - 245.*xi - 4725.*xi*eta*eta + 2100.*xi*(eta*eta*eta) + 15. + 420.*(eta*eta) + 14175.*(eta*eta)*(xi*xi)/2. + 840.*(xi*xi) - 315.*eta*eta*eta - 945.*xi*xi*xi + 525.*(eta*eta*eta*eta)/8. + 2625.*(xi*xi*xi*xi)/8.);
1816  case 8:
1817  return sign * RealGradient(-525.*eta*xi/2. + 455.*eta/4. + 2205.*eta*(xi*xi)/16. - 525.*eta*xi*xi*xi/32. + 31185.*xi*(eta*eta)/16. - 42525.*xi*eta*eta*eta/16. - 2205.*eta*eta/2. - 4725.*eta*eta*xi*xi/8. + 42525.*(eta*eta*eta)/16. - 14175.*eta*eta*eta*eta/8., 1575.*eta*xi - 735.*eta/4. - 36855.*eta*xi*xi/16. + 1575.*eta*(xi*xi*xi)/2. - 385.*xi/4. - 76545.*xi*eta*eta/16. + 14175.*xi*(eta*eta*eta)/4. + 10. + 2835.*(eta*eta)/4. + 127575.*(eta*eta)*(xi*xi)/32. + 735.*(xi*xi)/4. - 14175.*eta*eta*eta/16. - 1785.*xi*xi*xi/16. + 42525.*(eta*eta*eta*eta)/128. + 2625.*(xi*xi*xi*xi)/128.);
1818  case 9:
1819  return sign * RealGradient(0., -140.*eta + 5. + 840.*(eta*eta) - 1680.*eta*eta*eta + 1050.*(eta*eta*eta*eta));
1820  case 10:
1821  return sign * RealGradient(0., -140.*eta + 5. + 840.*(eta*eta) - 1680.*eta*eta*eta + 1050.*(eta*eta*eta*eta));
1822  case 11:
1823  return sign * RealGradient(-1155.*eta*xi/32. + 875.*eta/32. - 2835.*eta*xi*xi/32. - 525.*eta*xi*xi*xi/32. + 4725.*xi*(eta*eta)/8. - 48825.*xi*eta*eta*eta/32. - 9345.*eta*eta/32. + 17325.*(eta*eta)*(xi*xi)/32. + 21735.*(eta*eta*eta)/32. - 9975.*eta*eta*eta*eta/32., 1155.*eta*xi/2. - 1855.*eta/16. + 945.*eta*(xi*xi)/16. - 5775.*eta*xi*xi*xi/8. - 595.*xi/32. - 76545.*xi*eta*eta/32. + 9975.*xi*(eta*eta*eta)/16. + 825./128. + 16695.*(eta*eta)/64. + 146475.*(eta*eta)*(xi*xi)/64. - 1785.*xi*xi/64. + 945.*(eta*eta*eta)/4. + 945.*(xi*xi*xi)/32. - 19425.*eta*eta*eta*eta/64. + 2625.*(xi*xi*xi*xi)/128.);
1824  case 12:
1825  return sign * RealGradient(525.*eta*xi/2. - 35.*eta/2. - 315.*eta*xi*xi/2. - 525.*eta*xi*xi*xi/2. - 1890.*xi*eta*eta + 1575.*xi*(eta*eta*eta)/2. - 105.*eta*eta/2. + 4725.*(eta*eta)*(xi*xi)/2. + 1575.*(eta*eta*eta)/2. - 1575.*eta*eta*eta*eta/2., -1680.*eta*xi + 4725.*eta*(xi*xi) - 3150.*eta*xi*xi*xi + 175.*xi/2. - 945.*xi*eta*eta/2. + 1575.*xi*(eta*eta*eta) - 55./8. + 3255.*(eta*eta)/4. - 4725.*eta*eta*xi*xi/4. - 105.*xi*xi/4. - 1260.*eta*eta*eta - 735.*xi*xi*xi/2. + 1575.*(eta*eta*eta*eta)/4. + 2625.*(xi*xi*xi*xi)/8.);
1826  case 13:
1827  return sign * RealGradient(-2835.*eta*xi/32. - 3045.*eta/32. + 42525.*eta*(xi*xi)/32. - 42525.*eta*xi*xi*xi/32. - 25515.*xi*eta*eta/8. + 127575.*xi*(eta*eta*eta)/32. + 39375.*(eta*eta)/32. + 42525.*(eta*eta)*(xi*xi)/32. - 84105.*eta*eta*eta/32. + 48825.*(eta*eta*eta*eta)/32., -7245.*eta*xi/2. + 12145.*eta/16. + 76545.*eta*(xi*xi)/16. - 14175.*eta*xi*xi*xi/8. - 11235.*xi/32. + 240975.*xi*(eta*eta)/32. - 48825.*xi*eta*eta*eta/16. - 695./128. - 136185.*eta*eta/64. - 382725.*eta*eta*xi*xi/64. + 127575.*(xi*xi)/64. + 6825.*(eta*eta*eta)/4. - 104895.*xi*xi*xi/32. - 19425.*eta*eta*eta*eta/64. + 212625.*(xi*xi*xi*xi)/128.);
1828  case 14:
1829  return sign * RealGradient(-4200.*eta*xi + 700.*eta + 7560.*eta*(xi*xi) - 4200.*eta*xi*xi*xi + 15120.*xi*(eta*eta) - 12600.*xi*eta*eta*eta - 4200.*eta*eta - 12600.*eta*eta*xi*xi + 7560.*(eta*eta*eta) - 4200.*eta*eta*eta*eta, 16800.*eta*xi - 2800.*eta - 30240.*eta*xi*xi + 16800.*eta*(xi*xi*xi) - 3500.*xi - 22680.*xi*eta*eta + 8400.*xi*(eta*eta*eta) + 375. + 6300.*(eta*eta) + 18900.*(eta*eta)*(xi*xi) + 10500.*(xi*xi) - 5040.*eta*eta*eta - 12600.*xi*xi*xi + 1050.*(eta*eta*eta*eta) + 5250.*(xi*xi*xi*xi));
1830  case 15:
1831  return RealGradient(70560.*eta*xi - 19600.*eta - 70560.*eta*xi*xi + 16800.*eta*(xi*xi*xi) - 211680.*xi*eta*eta + 151200.*xi*(eta*eta*eta) + 94080.*(eta*eta) + 100800.*(eta*eta)*(xi*xi) - 141120.*eta*eta*eta + 67200.*(eta*eta*eta*eta), -94080.*eta*xi + 9800.*eta + 211680.*eta*(xi*xi) - 134400.*eta*xi*xi*xi + 9800.*xi + 211680.*xi*(eta*eta) - 134400.*xi*eta*eta*eta - 700. - 35280.*eta*eta - 226800.*eta*eta*xi*xi - 35280.*xi*xi + 47040.*(eta*eta*eta) + 47040.*(xi*xi*xi) - 21000.*eta*eta*eta*eta - 21000.*xi*xi*xi*xi);
1832  case 16:
1833  return RealGradient(-70560.*eta*xi + 9800.*eta + 141120.*eta*(xi*xi) - 84000.*eta*xi*xi*xi + 211680.*xi*(eta*eta) - 151200.*xi*eta*eta*eta - 47040.*eta*eta - 201600.*eta*eta*xi*xi + 70560.*(eta*eta*eta) - 33600.*eta*eta*eta*eta, 188160.*eta*xi - 19600.*eta - 423360.*eta*xi*xi + 268800.*eta*(xi*xi*xi) - 49000.*xi - 211680.*xi*eta*eta + 67200.*xi*(eta*eta*eta) + 3500. + 35280.*(eta*eta) + 226800.*(eta*eta)*(xi*xi) + 176400.*(xi*xi) - 23520.*eta*eta*eta - 235200.*xi*xi*xi + 4200.*(eta*eta*eta*eta) + 105000.*(xi*xi*xi*xi));
1834  case 17:
1835  return RealGradient(-60480.*eta*xi + 6440.*eta + 131040.*eta*(xi*xi) - 67200.*eta*xi*xi*xi + 60480.*xi*(eta*eta) - 6720.*eta*eta - 100800.*eta*eta*xi*xi, 26880.*eta*xi - 1120.*eta - 120960.*eta*xi*xi + 134400.*eta*(xi*xi*xi) - 14560.*xi + 560. + 80640.*(xi*xi) - 147840.*xi*xi*xi + 84000.*(xi*xi*xi*xi));
1836  case 18:
1837  return RealGradient(40320.*eta*xi - 3640.*eta - 110880.*eta*xi*xi + 84000.*eta*(xi*xi*xi) - 30240.*xi*eta*eta + 3360.*(eta*eta) + 50400.*(eta*eta)*(xi*xi), -13440.*eta*xi + 560.*eta + 60480.*eta*(xi*xi) - 67200.*eta*xi*xi*xi + 18200.*xi - 700. - 100800.*xi*xi + 184800.*(xi*xi*xi) - 105000.*xi*xi*xi*xi);
1838  case 19:
1839  return RealGradient(560.*eta - 6720.*eta*eta + 20160.*(eta*eta*eta) - 16800.*eta*eta*eta*eta, 6720.*eta*xi - 3640.*eta - 280.*xi - 30240.*xi*eta*eta + 33600.*xi*(eta*eta*eta) + 140. + 20160.*(eta*eta) - 36960.*eta*eta*eta + 21000.*(eta*eta*eta*eta));
1840  case 20:
1841  return RealGradient(-1120.*eta + 13440.*(eta*eta) - 40320.*eta*eta*eta + 33600.*(eta*eta*eta*eta), -13440.*eta*xi + 6440.*eta + 560.*xi + 60480.*xi*(eta*eta) - 67200.*xi*eta*eta*eta - 280. - 30240.*eta*eta + 43680.*(eta*eta*eta) - 16800.*eta*eta*eta*eta);
1842  case 21:
1843  return RealGradient(-35840.*eta*xi + 17920.*eta/3. + 156800.*eta*(xi*xi)/3. - 179200.*eta*xi*xi*xi/9. + 125440.*xi*(eta*eta) - 89600.*xi*eta*eta*eta - 29120.*eta*eta - 291200.*eta*eta*xi*xi/3. + 116480.*(eta*eta*eta)/3. - 140000.*eta*eta*eta*eta/9., 56000.*eta*xi - 10360.*eta/3. - 170240.*eta*xi*xi + 1164800.*eta*(xi*xi*xi)/9. - 24920.*xi/3. - 81760.*xi*eta*eta + 280000.*xi*(eta*eta*eta)/9. + 420. + 6720.*(eta*eta) + 134400.*(eta*eta)*(xi*xi) + 35840.*(xi*xi) - 39200.*eta*eta*eta/9. - 474880.*xi*xi*xi/9. + 7000.*(eta*eta*eta*eta)/9. + 224000.*(xi*xi*xi*xi)/9.);
1844  case 22:
1845  return RealGradient(29120.*eta*xi - 12880.*eta/3. - 152320.*eta*xi*xi/3. + 224000.*eta*(xi*xi*xi)/9. - 109760.*xi*eta*eta + 78400.*xi*(eta*eta*eta) + 22400.*(eta*eta) + 313600.*(eta*eta)*(xi*xi)/3. - 91840.*eta*eta*eta/3. + 112000.*(eta*eta*eta*eta)/9., -62720.*eta*xi + 12040.*eta/3. + 185920.*eta*(xi*xi) - 1254400.*eta*xi*xi*xi/9. + 32480.*xi/3. + 76160.*xi*(eta*eta) - 224000.*xi*eta*eta*eta/9. - 560. - 6720.*eta*eta - 117600.*eta*eta*xi*xi - 45920.*xi*xi + 34720.*(eta*eta*eta)/9. + 600320.*(xi*xi*xi)/9. - 5600.*eta*eta*eta*eta/9. - 280000.*xi*xi*xi*xi/9.);
1846  case 23:
1847  return RealGradient(-13440.*eta*xi + 12040.*eta/3. + 34720.*eta*(xi*xi)/3. - 22400.*eta*xi*xi*xi/9. + 76160.*xi*(eta*eta) - 78400.*xi*eta*eta*eta - 31360.*eta*eta - 112000.*eta*eta*xi*xi/3. + 185920.*(eta*eta*eta)/3. - 313600.*eta*eta*eta*eta/9., 44800.*eta*xi - 12880.*eta/3. - 91840.*eta*xi*xi + 448000.*eta*(xi*xi*xi)/9. - 10640.*xi/3. - 109760.*xi*eta*eta + 627200.*xi*(eta*eta*eta)/9. + 280. + 14560.*(eta*eta) + 117600.*(eta*eta)*(xi*xi) + 10080.*(xi*xi) - 152320.*eta*eta*eta/9. - 89600.*xi*xi*xi/9. + 56000.*(eta*eta*eta*eta)/9. + 28000.*(xi*xi*xi*xi)/9.);
1848  case 24:
1849  return RealGradient(13440.*eta*xi - 10360.*eta/3. - 39200.*eta*xi*xi/3. + 28000.*eta*(xi*xi*xi)/9. - 81760.*xi*eta*eta + 89600.*xi*(eta*eta*eta) + 28000.*(eta*eta) + 140000.*(eta*eta)*(xi*xi)/3. - 170240.*eta*eta*eta/3. + 291200.*(eta*eta*eta*eta)/9., -58240.*eta*xi + 17920.*eta/3. + 116480.*eta*(xi*xi) - 560000.*eta*xi*xi*xi/9. + 14840.*xi/3. + 125440.*xi*(eta*eta) - 582400.*xi*eta*eta*eta/9. - 420. - 17920.*eta*eta - 134400.*eta*eta*xi*xi - 13440.*xi*xi + 156800.*(eta*eta*eta)/9. + 115360.*(xi*xi*xi)/9. - 44800.*eta*eta*eta*eta/9. - 35000.*xi*xi*xi*xi/9.);
1850  case 25:
1851  return RealGradient(11200.*eta*xi - 12880.*eta/9. - 49280.*eta*xi*xi/3. + 44800.*eta*(xi*xi*xi)/9. - 2240.*xi*eta*eta - 11200.*xi*eta*eta*eta - 15680.*eta*eta/3. + 22400.*(eta*eta)*(xi*xi)/3. + 51520.*(eta*eta*eta)/3. - 95200.*eta*eta*eta*eta/9., 15680.*eta*xi/3. - 10360.*eta/9. + 2240.*eta*(xi*xi) - 89600.*eta*xi*xi*xi/9. + 6440.*xi/9. - 25760.*xi*eta*eta + 190400.*xi*(eta*eta*eta)/9. + 140./9. + 5600.*(eta*eta) + 16800.*(eta*eta)*(xi*xi) - 5600.*xi*xi - 75040.*eta*eta*eta/9. + 98560.*(xi*xi*xi)/9. + 35000.*(eta*eta*eta*eta)/9. - 56000.*xi*xi*xi*xi/9.);
1852  case 26:
1853  return RealGradient(-2240.*eta*xi - 9520.*eta/9. + 71680.*eta*(xi*xi)/3. - 224000.*eta*xi*xi*xi/9. - 51520.*xi*eta*eta + 56000.*xi*(eta*eta*eta) + 44800.*(eta*eta)/3. + 89600.*(eta*eta)*(xi*xi)/3. - 82880.*eta*eta*eta/3. + 123200.*(eta*eta*eta*eta)/9., -138880.*eta*xi/3. + 51800.*eta/9. + 82880.*eta*(xi*xi) - 358400.*eta*xi*xi*xi/9. - 48160.*xi/9. + 80640.*xi*(eta*eta) - 246400.*xi*eta*eta*eta/9. + 560./9. - 13440.*eta*eta - 84000.*eta*eta*xi*xi + 32480.*(xi*xi) + 79520.*(eta*eta*eta)/9. - 519680.*xi*xi*xi/9. - 11200.*eta*eta*eta*eta/9. + 280000.*(xi*xi*xi*xi)/9.);
1854  case 27:
1855  return RealGradient(-1120.*eta*xi + 2800.*eta/9. - 1120.*eta*xi*xi/3. + 5600.*eta*(xi*xi*xi)/9. + 12320.*xi*(eta*eta) - 5600.*xi*eta*eta*eta - 4480.*eta*eta/3. - 22400.*eta*eta*xi*xi/3. - 11200.*eta*eta*eta/3. + 44800.*(eta*eta*eta*eta)/9., 4480.*eta*xi/3. + 5320.*eta/9. - 12320.*eta*xi*xi + 89600.*eta*(xi*xi*xi)/9. - 1400.*xi/9. + 5600.*xi*(eta*eta) - 89600.*xi*eta*eta*eta/9. - 140./9. - 3920.*eta*eta + 8400.*(eta*eta)*(xi*xi) + 560.*(xi*xi) + 64960.*(eta*eta*eta)/9. + 2240.*(xi*xi*xi)/9. - 35000.*eta*eta*eta*eta/9. - 7000.*xi*xi*xi*xi/9.);
1856  case 28:
1857  return RealGradient(3360.*eta*xi + 280.*eta/9. - 11200.*eta*xi*xi/3. - 28000.*eta*xi*xi*xi/9. - 19040.*xi*eta*eta - 5600.*xi*eta*eta*eta - 11200.*eta*eta/3. + 112000.*(eta*eta)*(xi*xi)/3. + 52640.*(eta*eta*eta)/3. - 123200.*eta*eta*eta*eta/9., -35840.*eta*xi/3. - 8960.*eta/9. + 58240.*eta*(xi*xi) - 448000.*eta*xi*xi*xi/9. + 8680.*xi/9. - 30240.*xi*eta*eta + 246400.*xi*(eta*eta*eta)/9. - 140./9. + 9520.*(eta*eta) + 8400.*(eta*eta)*(xi*xi) - 1680.*xi*xi - 99680.*eta*eta*eta/9. - 24640.*xi*xi*xi/9. + 23800.*(eta*eta*eta*eta)/9. + 35000.*(xi*xi*xi*xi)/9.);
1858  case 29:
1859  return RealGradient(-26880.*eta*xi + 51800.*eta/9. + 79520.*eta*(xi*xi)/3. - 44800.*eta*xi*xi*xi/9. + 80640.*xi*(eta*eta) - 56000.*xi*eta*eta*eta - 69440.*eta*eta/3. - 123200.*eta*eta*xi*xi/3. + 82880.*(eta*eta*eta)/3. - 89600.*eta*eta*eta*eta/9., 89600.*eta*xi/3. - 9520.*eta/9. - 82880.*eta*xi*xi + 492800.*eta*(xi*xi*xi)/9. - 29680.*xi/9. - 51520.*xi*eta*eta + 179200.*xi*(eta*eta*eta)/9. + 1400./9. - 1120.*eta*eta + 84000.*(eta*eta)*(xi*xi) + 12320.*(xi*xi) + 71680.*(eta*eta*eta)/9. - 138880.*xi*xi*xi/9. - 56000.*eta*eta*eta*eta/9. + 56000.*(xi*xi*xi*xi)/9.);
1860  case 30:
1861  return RealGradient(11200.*eta*xi - 10360.*eta/9. - 75040.*eta*xi*xi/3. + 140000.*eta*(xi*xi*xi)/9. - 25760.*xi*eta*eta + 11200.*xi*(eta*eta*eta) + 7840.*(eta*eta)/3. + 95200.*(eta*eta)*(xi*xi)/3. + 2240.*(eta*eta*eta)/3. - 22400.*eta*eta*eta*eta/9., -31360.*eta*xi/3. - 12880.*eta/9. + 51520.*eta*(xi*xi) - 380800.*eta*xi*xi*xi/9. + 51800.*xi/9. - 2240.*xi*eta*eta + 44800.*xi*(eta*eta*eta)/9. - 700./9. + 5600.*(eta*eta) - 16800.*eta*eta*xi*xi - 28000.*xi*xi - 49280.*eta*eta*eta/9. + 375200.*(xi*xi*xi)/9. + 11200.*(eta*eta*eta*eta)/9. - 175000.*xi*xi*xi*xi/9.);
1862  case 31:
1863  return RealGradient(19040.*eta*xi - 8960.*eta/9. - 99680.*eta*xi*xi/3. + 95200.*eta*(xi*xi*xi)/9. - 30240.*xi*eta*eta + 5600.*xi*(eta*eta*eta) - 17920.*eta*eta/3. + 123200.*(eta*eta)*(xi*xi)/3. + 58240.*(eta*eta*eta)/3. - 112000.*eta*eta*eta*eta/9., -22400.*eta*xi/3. + 280.*eta/9. + 52640.*eta*(xi*xi) - 492800.*eta*xi*xi*xi/9. + 27160.*xi/9. - 19040.*xi*eta*eta + 224000.*xi*(eta*eta*eta)/9. - 980./9. + 1680.*(eta*eta) - 8400.*eta*eta*xi*xi - 16240.*xi*xi - 11200.*eta*eta*eta/9. + 239680.*(xi*xi*xi)/9. - 7000.*eta*eta*eta*eta/9. - 119000.*xi*xi*xi*xi/9.);
1864  case 32:
1865  return RealGradient(-7840.*eta*xi + 5320.*eta/9. + 64960.*eta*(xi*xi)/3. - 140000.*eta*xi*xi*xi/9. + 5600.*xi*(eta*eta) + 5600.*xi*(eta*eta*eta) + 2240.*(eta*eta)/3. - 44800.*eta*eta*xi*xi/3. - 12320.*eta*eta*eta/3. + 22400.*(eta*eta*eta*eta)/9., -8960.*eta*xi/3. + 2800.*eta/9. - 11200.*eta*xi*xi + 179200.*eta*(xi*xi*xi)/9. - 26600.*xi/9. + 12320.*xi*(eta*eta) - 44800.*xi*eta*eta*eta/9. + 700./9. - 560.*eta*eta - 8400.*eta*eta*xi*xi + 19600.*(xi*xi) - 1120.*eta*eta*eta/9. - 324800.*xi*xi*xi/9. + 1400.*(eta*eta*eta*eta)/9. + 175000.*(xi*xi*xi*xi)/9.);
1866  case 33:
1867  return RealGradient(3360.*eta*xi - 6440.*eta/9. - 4480.*eta*xi*xi + 5600.*eta*(xi*xi*xi)/3. - 19040.*xi*eta*eta + 16800.*xi*(eta*eta*eta) + 19040.*(eta*eta)/3. + 11200.*(eta*eta)*(xi*xi) - 11200.*eta*eta*eta + 5600.*(eta*eta*eta*eta), -29120.*eta*xi/3. + 6160.*eta/9. + 23520.*eta*(xi*xi) - 44800.*eta*xi*xi*xi/3. + 9520.*xi/9. + 20160.*xi*(eta*eta) - 11200.*xi*eta*eta*eta - 560./9. - 1680.*eta*eta - 25200.*eta*eta*xi*xi - 3920.*xi*xi + 1120.*(eta*eta*eta) + 15680.*(xi*xi*xi)/3. - 7000.*xi*xi*xi*xi/3.);
1868  case 34:
1869  return RealGradient(-3360.*eta*xi + 6160.*eta/9. + 3360.*eta*(xi*xi) + 20160.*xi*(eta*eta) - 16800.*xi*eta*eta*eta - 14560.*eta*eta/3. - 16800.*eta*eta*xi*xi + 7840.*(eta*eta*eta) - 11200.*eta*eta*eta*eta/3., 38080.*eta*xi/3. - 6440.*eta/9. - 33600.*eta*xi*xi + 22400.*eta*(xi*xi*xi) - 5600.*xi/9. - 19040.*xi*eta*eta + 22400.*xi*(eta*eta*eta)/3. + 280./9. + 1680.*(eta*eta) + 25200.*(eta*eta)*(xi*xi) + 1680.*(xi*xi) - 4480.*eta*eta*eta/3. - 1120.*xi*xi*xi + 1400.*(eta*eta*eta*eta)/3.);
1870  default:
1871  libmesh_error_msg("Invalid i = " << i);
1872  }
1873  } // j = 0
1874 
1875  // d()/deta
1876  case 1:
1877  {
1878  switch(ii)
1879  {
1880  case 0:
1881  return sign * RealGradient(-16800.*eta*xi + 3500.*eta + 22680.*eta*(xi*xi) - 8400.*eta*xi*xi*xi + 2800.*xi + 30240.*xi*(eta*eta) - 16800.*xi*eta*eta*eta - 375. - 10500.*eta*eta - 18900.*eta*eta*xi*xi - 6300.*xi*xi + 12600.*(eta*eta*eta) + 5040.*(xi*xi*xi) - 5250.*eta*eta*eta*eta - 1050.*xi*xi*xi*xi, 4200.*eta*xi - 15120.*eta*xi*xi + 12600.*eta*(xi*xi*xi) - 700.*xi - 7560.*xi*eta*eta + 4200.*xi*(eta*eta*eta) + 12600.*(eta*eta)*(xi*xi) + 4200.*(xi*xi) - 7560.*xi*xi*xi + 4200.*(xi*xi*xi*xi));
1882  case 1:
1883  return sign * RealGradient(7245.*eta*xi/2. + 11235.*eta/32. - 240975.*eta*xi*xi/32. + 48825.*eta*(xi*xi*xi)/16. - 12145.*xi/16. - 76545.*xi*eta*eta/16. + 14175.*xi*(eta*eta*eta)/8. + 695./128. - 127575.*eta*eta/64. + 382725.*(eta*eta)*(xi*xi)/64. + 136185.*(xi*xi)/64. + 104895.*(eta*eta*eta)/32. - 6825.*xi*xi*xi/4. - 212625.*eta*eta*eta*eta/128. + 19425.*(xi*xi*xi*xi)/64., 2835.*eta*xi/32. + 25515.*eta*(xi*xi)/8. - 127575.*eta*xi*xi*xi/32. + 3045.*xi/32. - 42525.*xi*eta*eta/32. + 42525.*xi*(eta*eta*eta)/32. - 42525.*eta*eta*xi*xi/32. - 39375.*xi*xi/32. + 84105.*(xi*xi*xi)/32. - 48825.*xi*xi*xi*xi/32.);
1884  case 2:
1885  return sign * RealGradient(1680.*eta*xi - 175.*eta/2. + 945.*eta*(xi*xi)/2. - 1575.*eta*xi*xi*xi - 4725.*xi*eta*eta + 3150.*xi*(eta*eta*eta) + 55./8. + 105.*(eta*eta)/4. + 4725.*(eta*eta)*(xi*xi)/4. - 3255.*xi*xi/4. + 735.*(eta*eta*eta)/2. + 1260.*(xi*xi*xi) - 2625.*eta*eta*eta*eta/8. - 1575.*xi*xi*xi*xi/4., -525.*eta*xi/2. + 1890.*eta*(xi*xi) - 1575.*eta*xi*xi*xi/2. + 35.*xi/2. + 315.*xi*(eta*eta)/2. + 525.*xi*(eta*eta*eta)/2. - 4725.*eta*eta*xi*xi/2. + 105.*(xi*xi)/2. - 1575.*xi*xi*xi/2. + 1575.*(xi*xi*xi*xi)/2.);
1886  case 3:
1887  return sign * RealGradient(-1155.*eta*xi/2. + 595.*eta/32. + 76545.*eta*(xi*xi)/32. - 9975.*eta*xi*xi*xi/16. + 1855.*xi/16. - 945.*xi*eta*eta/16. + 5775.*xi*(eta*eta*eta)/8. - 825./128. + 1785.*(eta*eta)/64. - 146475.*eta*eta*xi*xi/64. - 16695.*xi*xi/64. - 945.*eta*eta*eta/32. - 945.*xi*xi*xi/4. - 2625.*eta*eta*eta*eta/128. + 19425.*(xi*xi*xi*xi)/64., 1155.*eta*xi/32. - 4725.*eta*xi*xi/8. + 48825.*eta*(xi*xi*xi)/32. - 875.*xi/32. + 2835.*xi*(eta*eta)/32. + 525.*xi*(eta*eta*eta)/32. - 17325.*eta*eta*xi*xi/32. + 9345.*(xi*xi)/32. - 21735.*xi*xi*xi/32. + 9975.*(xi*xi*xi*xi)/32.);
1888  case 4:
1889  return sign * RealGradient(140.*xi - 5. - 840.*xi*xi + 1680.*(xi*xi*xi) - 1050.*xi*xi*xi*xi, 0.);
1890  case 5:
1891  return sign * RealGradient(140.*xi - 5. - 840.*xi*xi + 1680.*(xi*xi*xi) - 1050.*xi*xi*xi*xi, 0.);
1892  case 6:
1893  return sign * RealGradient(-1575.*eta*xi + 385.*eta/4. + 76545.*eta*(xi*xi)/16. - 14175.*eta*xi*xi*xi/4. + 735.*xi/4. + 36855.*xi*(eta*eta)/16. - 1575.*xi*eta*eta*eta/2. - 10. - 735.*eta*eta/4. - 127575.*eta*eta*xi*xi/32. - 2835.*xi*xi/4. + 1785.*(eta*eta*eta)/16. + 14175.*(xi*xi*xi)/16. - 2625.*eta*eta*eta*eta/128. - 42525.*xi*xi*xi*xi/128., 525.*eta*xi/2. - 31185.*eta*xi*xi/16. + 42525.*eta*(xi*xi*xi)/16. - 455.*xi/4. - 2205.*xi*eta*eta/16. + 525.*xi*(eta*eta*eta)/32. + 4725.*(eta*eta)*(xi*xi)/8. + 2205.*(xi*xi)/2. - 42525.*xi*xi*xi/16. + 14175.*(xi*xi*xi*xi)/8.);
1894  case 7:
1895  return sign * RealGradient(-2520.*eta*xi + 245.*eta + 4725.*eta*(xi*xi) - 2100.*eta*xi*xi*xi + 175.*xi + 6615.*xi*(eta*eta) - 4200.*xi*eta*eta*eta - 15. - 840.*eta*eta - 14175.*eta*eta*xi*xi/2. - 420.*xi*xi + 945.*(eta*eta*eta) + 315.*(xi*xi*xi) - 2625.*eta*eta*eta*eta/8. - 525.*xi*xi*xi*xi/8., 840.*eta*xi - 4725.*eta*xi*xi + 4725.*eta*(xi*xi*xi) - 175.*xi - 945.*xi*eta*eta + 525.*xi*(eta*eta*eta)/2. + 3150.*(eta*eta)*(xi*xi) + 1260.*(xi*xi) - 2205.*xi*xi*xi + 1050.*(xi*xi*xi*xi));
1896  case 8:
1897  return sign * RealGradient(-2205.*eta*xi + 1785.*eta/4. + 31185.*eta*(xi*xi)/16. - 1575.*eta*xi*xi*xi/4. + 455.*xi/4. + 127575.*xi*(eta*eta)/16. - 14175.*xi*eta*eta*eta/2. - 20. - 8505.*eta*eta/4. - 127575.*eta*eta*xi*xi/32. - 525.*xi*xi/4. + 53865.*(eta*eta*eta)/16. + 735.*(xi*xi*xi)/16. - 212625.*eta*eta*eta*eta/128. - 525.*xi*xi*xi*xi/128., 2835.*eta*xi/2. - 76545.*eta*xi*xi/16. + 42525.*eta*(xi*xi*xi)/16. - 735.*xi/4. - 42525.*xi*eta*eta/16. + 42525.*xi*(eta*eta*eta)/32. + 42525.*(eta*eta)*(xi*xi)/8. + 1575.*(xi*xi)/2. - 12285.*xi*xi*xi/16. + 1575.*(xi*xi*xi*xi)/8.);
1898  case 9:
1899  return sign * RealGradient(700.*eta - 25. - 4200.*eta*eta + 8400.*(eta*eta*eta) - 5250.*eta*eta*eta*eta, 1680.*eta*xi - 140.*xi - 5040.*xi*eta*eta + 4200.*xi*(eta*eta*eta));
1900  case 10:
1901  return sign * RealGradient(700.*eta - 25. - 4200.*eta*eta + 8400.*(eta*eta*eta) - 5250.*eta*eta*eta*eta, 1680.*eta*xi - 1260.*eta - 140.*xi - 5040.*xi*eta*eta + 4200.*xi*(eta*eta*eta) + 120. + 3360.*(eta*eta) - 2520.*eta*eta*eta);
1902  case 11:
1903  return sign * RealGradient(-9345.*eta*xi/16. - 595.*eta/4. + 4725.*eta*(xi*xi)/8. + 5775.*eta*(xi*xi*xi)/16. + 875.*xi/32. + 65205.*xi*(eta*eta)/32. - 9975.*xi*eta*eta*eta/8. + 555./128. + 66465.*(eta*eta)/64. - 146475.*eta*eta*xi*xi/64. - 1155.*xi*xi/64. - 36855.*eta*eta*eta/16. - 945.*xi*xi*xi/32. + 97125.*(eta*eta*eta*eta)/64. - 525.*xi*xi*xi*xi/128., 16695.*eta*xi/32. + 9345.*eta/32. - 76545.*eta*xi*xi/32. + 48825.*eta*(xi*xi*xi)/32. - 1855.*xi/16. + 2835.*xi*(eta*eta)/4. - 19425.*xi*eta*eta*eta/16. - 705./32. - 29085.*eta*eta/32. + 29925.*(eta*eta)*(xi*xi)/32. + 1155.*(xi*xi)/4. + 11655.*(eta*eta*eta)/16. + 315.*(xi*xi*xi)/16. - 5775.*xi*xi*xi*xi/32.);
1904  case 12:
1905  return sign * RealGradient(-105.*eta*xi + 315.*eta - 1890.*eta*xi*xi + 1575.*eta*(xi*xi*xi) - 35.*xi/2. + 4725.*xi*(eta*eta)/2. - 3150.*xi*eta*eta*eta - 85./8. - 7455.*eta*eta/4. + 4725.*(eta*eta)*(xi*xi)/4. + 525.*(xi*xi)/4. + 3465.*(eta*eta*eta) - 105.*xi*xi*xi/2. - 7875.*eta*eta*eta*eta/4. - 525.*xi*xi*xi*xi/8., 3255.*eta*xi/2. - 1155.*eta/2. - 945.*eta*xi*xi/2. - 1575.*eta*xi*xi*xi/2. - 3780.*xi*eta*eta + 1575.*xi*(eta*eta*eta) + 105./2. + 2835.*(eta*eta)/2. + 4725.*(eta*eta)*(xi*xi)/2. - 840.*xi*xi - 945.*eta*eta*eta + 1575.*(xi*xi*xi) - 1575.*xi*xi*xi*xi/2.);
1906  case 13:
1907  return sign * RealGradient(39375.*eta*xi/16. - 1715.*eta/4. - 25515.*eta*xi*xi/8. + 14175.*eta*(xi*xi*xi)/16. - 3045.*xi/32. - 252315.*xi*eta*eta/32. + 48825.*xi*(eta*eta*eta)/8. + 2395./128. + 125265.*(eta*eta)/64. + 382725.*(eta*eta)*(xi*xi)/64. - 2835.*xi*xi/64. - 48615.*eta*eta*eta/16. + 14175.*(xi*xi*xi)/32. + 97125.*(eta*eta*eta*eta)/64. - 42525.*xi*xi*xi*xi/128., -136185.*eta*xi/32. + 21105.*eta/32. + 240975.*eta*(xi*xi)/32. - 127575.*eta*xi*xi*xi/32. + 12145.*xi/16. + 20475.*xi*(eta*eta)/4. - 19425.*xi*eta*eta*eta/16. - 2865./32. - 40845.*eta*eta/32. - 146475.*eta*eta*xi*xi/32. - 7245.*xi*xi/4. + 11655.*(eta*eta*eta)/16. + 25515.*(xi*xi*xi)/16. - 14175.*xi*xi*xi*xi/32.);
1908  case 14:
1909  return sign * RealGradient(-8400.*eta*xi + 1400.*eta + 15120.*eta*(xi*xi) - 8400.*eta*xi*xi*xi + 700.*xi + 22680.*xi*(eta*eta) - 16800.*xi*eta*eta*eta - 75. - 6300.*eta*eta - 18900.*eta*eta*xi*xi - 2100.*xi*xi + 10080.*(eta*eta*eta) + 2520.*(xi*xi*xi) - 5250.*eta*eta*eta*eta - 1050.*xi*xi*xi*xi, 12600.*eta*xi - 2100.*eta - 22680.*eta*xi*xi + 12600.*eta*(xi*xi*xi) - 2800.*xi - 15120.*xi*eta*eta + 4200.*xi*(eta*eta*eta) + 300. + 4200.*(eta*eta) + 12600.*(eta*eta)*(xi*xi) + 8400.*(xi*xi) - 2520.*eta*eta*eta - 10080.*xi*xi*xi + 4200.*(xi*xi*xi*xi));
1910  case 15:
1911  return RealGradient(188160.*eta*xi - 49000.*eta - 211680.*eta*xi*xi + 67200.*eta*(xi*xi*xi) - 19600.*xi - 423360.*xi*eta*eta + 268800.*xi*(eta*eta*eta) + 3500. + 176400.*(eta*eta) + 226800.*(eta*eta)*(xi*xi) + 35280.*(xi*xi) - 235200.*eta*eta*eta - 23520.*xi*xi*xi + 105000.*(eta*eta*eta*eta) + 4200.*(xi*xi*xi*xi), -70560.*eta*xi + 211680.*eta*(xi*xi) - 151200.*eta*xi*xi*xi + 9800.*xi + 141120.*xi*(eta*eta) - 84000.*xi*eta*eta*eta - 201600.*eta*eta*xi*xi - 47040.*xi*xi + 70560.*(xi*xi*xi) - 33600.*xi*xi*xi*xi);
1912  case 16:
1913  return RealGradient(-94080.*eta*xi + 9800.*eta + 211680.*eta*(xi*xi) - 134400.*eta*xi*xi*xi + 9800.*xi + 211680.*xi*(eta*eta) - 134400.*xi*eta*eta*eta - 700. - 35280.*eta*eta - 226800.*eta*eta*xi*xi - 35280.*xi*xi + 47040.*(eta*eta*eta) + 47040.*(xi*xi*xi) - 21000.*eta*eta*eta*eta - 21000.*xi*xi*xi*xi, 70560.*eta*xi - 211680.*eta*xi*xi + 151200.*eta*(xi*xi*xi) - 19600.*xi - 70560.*xi*eta*eta + 16800.*xi*(eta*eta*eta) + 100800.*(eta*eta)*(xi*xi) + 94080.*(xi*xi) - 141120.*xi*xi*xi + 67200.*(xi*xi*xi*xi));
1914  case 17:
1915  return RealGradient(-13440.*eta*xi + 560.*eta + 60480.*eta*(xi*xi) - 67200.*eta*xi*xi*xi + 6440.*xi - 280. - 30240.*xi*xi + 43680.*(xi*xi*xi) - 16800.*xi*xi*xi*xi, -1120.*xi + 13440.*(xi*xi) - 40320.*xi*xi*xi + 33600.*(xi*xi*xi*xi));
1916  case 18:
1917  return RealGradient(6720.*eta*xi - 280.*eta - 30240.*eta*xi*xi + 33600.*eta*(xi*xi*xi) - 3640.*xi + 140. + 20160.*(xi*xi) - 36960.*xi*xi*xi + 21000.*(xi*xi*xi*xi), 560.*xi - 6720.*xi*xi + 20160.*(xi*xi*xi) - 16800.*xi*xi*xi*xi);
1918  case 19:
1919  return RealGradient(-13440.*eta*xi + 18200.*eta + 560.*xi + 60480.*xi*(eta*eta) - 67200.*xi*eta*eta*eta - 700. - 100800.*eta*eta + 184800.*(eta*eta*eta) - 105000.*eta*eta*eta*eta, 40320.*eta*xi - 30240.*eta*xi*xi - 3640.*xi - 110880.*xi*eta*eta + 84000.*xi*(eta*eta*eta) + 50400.*(eta*eta)*(xi*xi) + 3360.*(xi*xi));
1920  case 20:
1921  return RealGradient(26880.*eta*xi - 14560.*eta - 1120.*xi - 120960.*xi*eta*eta + 134400.*xi*(eta*eta*eta) + 560. + 80640.*(eta*eta) - 147840.*eta*eta*eta + 84000.*(eta*eta*eta*eta), -60480.*eta*xi + 60480.*eta*(xi*xi) + 6440.*xi + 131040.*xi*(eta*eta) - 67200.*xi*eta*eta*eta - 100800.*eta*eta*xi*xi - 6720.*xi*xi);
1922  case 21:
1923  return RealGradient(-58240.*eta*xi + 14840.*eta/3. + 125440.*eta*(xi*xi) - 582400.*eta*xi*xi*xi/9. + 17920.*xi/3. + 116480.*xi*(eta*eta) - 560000.*xi*eta*eta*eta/9. - 420. - 13440.*eta*eta - 134400.*eta*eta*xi*xi - 17920.*xi*xi + 115360.*(eta*eta*eta)/9. + 156800.*(xi*xi*xi)/9. - 35000.*eta*eta*eta*eta/9. - 44800.*xi*xi*xi*xi/9., 13440.*eta*xi - 81760.*eta*xi*xi + 89600.*eta*(xi*xi*xi) - 10360.*xi/3. - 39200.*xi*eta*eta/3. + 28000.*xi*(eta*eta*eta)/9. + 140000.*(eta*eta)*(xi*xi)/3. + 28000.*(xi*xi) - 170240.*xi*xi*xi/3. + 291200.*(xi*xi*xi*xi)/9.);
1924  case 22:
1925  return RealGradient(44800.*eta*xi - 10640.*eta/3. - 109760.*eta*xi*xi + 627200.*eta*(xi*xi*xi)/9. - 12880.*xi/3. - 91840.*xi*eta*eta + 448000.*xi*(eta*eta*eta)/9. + 280. + 10080.*(eta*eta) + 117600.*(eta*eta)*(xi*xi) + 14560.*(xi*xi) - 89600.*eta*eta*eta/9. - 152320.*xi*xi*xi/9. + 28000.*(eta*eta*eta*eta)/9. + 56000.*(xi*xi*xi*xi)/9., -13440.*eta*xi + 76160.*eta*(xi*xi) - 78400.*eta*xi*xi*xi + 12040.*xi/3. + 34720.*xi*(eta*eta)/3. - 22400.*xi*eta*eta*eta/9. - 112000.*eta*eta*xi*xi/3. - 31360.*xi*xi + 185920.*(xi*xi*xi)/3. - 313600.*xi*xi*xi*xi/9.);
1926  case 23:
1927  return RealGradient(-62720.*eta*xi + 32480.*eta/3. + 76160.*eta*(xi*xi) - 224000.*eta*xi*xi*xi/9. + 12040.*xi/3. + 185920.*xi*(eta*eta) - 1254400.*xi*eta*eta*eta/9. - 560. - 45920.*eta*eta - 117600.*eta*eta*xi*xi - 6720.*xi*xi + 600320.*(eta*eta*eta)/9. + 34720.*(xi*xi*xi)/9. - 280000.*eta*eta*eta*eta/9. - 5600.*xi*xi*xi*xi/9., 29120.*eta*xi - 109760.*eta*xi*xi + 78400.*eta*(xi*xi*xi) - 12880.*xi/3. - 152320.*xi*eta*eta/3. + 224000.*xi*(eta*eta*eta)/9. + 313600.*(eta*eta)*(xi*xi)/3. + 22400.*(xi*xi) - 91840.*xi*xi*xi/3. + 112000.*(xi*xi*xi*xi)/9.);
1928  case 24:
1929  return RealGradient(56000.*eta*xi - 24920.*eta/3. - 81760.*eta*xi*xi + 280000.*eta*(xi*xi*xi)/9. - 10360.*xi/3. - 170240.*xi*eta*eta + 1164800.*xi*(eta*eta*eta)/9. + 420. + 35840.*(eta*eta) + 134400.*(eta*eta)*(xi*xi) + 6720.*(xi*xi) - 474880.*eta*eta*eta/9. - 39200.*xi*xi*xi/9. + 224000.*(eta*eta*eta*eta)/9. + 7000.*(xi*xi*xi*xi)/9., -35840.*eta*xi + 125440.*eta*(xi*xi) - 89600.*eta*xi*xi*xi + 17920.*xi/3. + 156800.*xi*(eta*eta)/3. - 179200.*xi*eta*eta*eta/9. - 291200.*eta*eta*xi*xi/3. - 29120.*xi*xi + 116480.*(xi*xi*xi)/3. - 140000.*xi*xi*xi*xi/9.);
1930  case 25:
1931  return RealGradient(-31360.*eta*xi/3. + 51800.*eta/9. - 2240.*eta*xi*xi + 44800.*eta*(xi*xi*xi)/9. - 12880.*xi/9. + 51520.*xi*(eta*eta) - 380800.*xi*eta*eta*eta/9. - 700./9. - 28000.*eta*eta - 16800.*eta*eta*xi*xi + 5600.*(xi*xi) + 375200.*(eta*eta*eta)/9. - 49280.*xi*xi*xi/9. - 175000.*eta*eta*eta*eta/9. + 11200.*(xi*xi*xi*xi)/9., 11200.*eta*xi - 25760.*eta*xi*xi + 11200.*eta*(xi*xi*xi) - 10360.*xi/9. - 75040.*xi*eta*eta/3. + 140000.*xi*(eta*eta*eta)/9. + 95200.*(eta*eta)*(xi*xi)/3. + 7840.*(xi*xi)/3. + 2240.*(xi*xi*xi)/3. - 22400.*xi*xi*xi*xi/9.);
1932  case 26:
1933  return RealGradient(89600.*eta*xi/3. - 29680.*eta/9. - 51520.*eta*xi*xi + 179200.*eta*(xi*xi*xi)/9. - 9520.*xi/9. - 82880.*xi*eta*eta + 492800.*xi*(eta*eta*eta)/9. + 1400./9. + 12320.*(eta*eta) + 84000.*(eta*eta)*(xi*xi) - 1120.*xi*xi - 138880.*eta*eta*eta/9. + 71680.*(xi*xi*xi)/9. + 56000.*(eta*eta*eta*eta)/9. - 56000.*xi*xi*xi*xi/9., -26880.*eta*xi + 80640.*eta*(xi*xi) - 56000.*eta*xi*xi*xi + 51800.*xi/9. + 79520.*xi*(eta*eta)/3. - 44800.*xi*eta*eta*eta/9. - 123200.*eta*eta*xi*xi/3. - 69440.*xi*xi/3. + 82880.*(xi*xi*xi)/3. - 89600.*xi*xi*xi*xi/9.);
1934  case 27:
1935  return RealGradient(-8960.*eta*xi/3. - 26600.*eta/9. + 12320.*eta*(xi*xi) - 44800.*eta*xi*xi*xi/9. + 2800.*xi/9. - 11200.*xi*eta*eta + 179200.*xi*(eta*eta*eta)/9. + 700./9. + 19600.*(eta*eta) - 8400.*eta*eta*xi*xi - 560.*xi*xi - 324800.*eta*eta*eta/9. - 1120.*xi*xi*xi/9. + 175000.*(eta*eta*eta*eta)/9. + 1400.*(xi*xi*xi*xi)/9., -7840.*eta*xi + 5600.*eta*(xi*xi) + 5600.*eta*(xi*xi*xi) + 5320.*xi/9. + 64960.*xi*(eta*eta)/3. - 140000.*xi*eta*eta*eta/9. - 44800.*eta*eta*xi*xi/3. + 2240.*(xi*xi)/3. - 12320.*xi*xi*xi/3. + 22400.*(xi*xi*xi*xi)/9.);
1936  case 28:
1937  return RealGradient(-22400.*eta*xi/3. + 27160.*eta/9. - 19040.*eta*xi*xi + 224000.*eta*(xi*xi*xi)/9. + 280.*xi/9. + 52640.*xi*(eta*eta) - 492800.*xi*eta*eta*eta/9. - 980./9. - 16240.*eta*eta - 8400.*eta*eta*xi*xi + 1680.*(xi*xi) + 239680.*(eta*eta*eta)/9. - 11200.*xi*xi*xi/9. - 119000.*eta*eta*eta*eta/9. - 7000.*xi*xi*xi*xi/9., 19040.*eta*xi - 30240.*eta*xi*xi + 5600.*eta*(xi*xi*xi) - 8960.*xi/9. - 99680.*xi*eta*eta/3. + 95200.*xi*(eta*eta*eta)/9. + 123200.*(eta*eta)*(xi*xi)/3. - 17920.*xi*xi/3. + 58240.*(xi*xi*xi)/3. - 112000.*xi*xi*xi*xi/9.);
1938  case 29:
1939  return RealGradient(-138880.*eta*xi/3. - 48160.*eta/9. + 80640.*eta*(xi*xi) - 246400.*eta*xi*xi*xi/9. + 51800.*xi/9. + 82880.*xi*(eta*eta) - 358400.*xi*eta*eta*eta/9. + 560./9. + 32480.*(eta*eta) - 84000.*eta*eta*xi*xi - 13440.*xi*xi - 519680.*eta*eta*eta/9. + 79520.*(xi*xi*xi)/9. + 280000.*(eta*eta*eta*eta)/9. - 11200.*xi*xi*xi*xi/9., -2240.*eta*xi - 51520.*eta*xi*xi + 56000.*eta*(xi*xi*xi) - 9520.*xi/9. + 71680.*xi*(eta*eta)/3. - 224000.*xi*eta*eta*eta/9. + 89600.*(eta*eta)*(xi*xi)/3. + 44800.*(xi*xi)/3. - 82880.*xi*xi*xi/3. + 123200.*(xi*xi*xi*xi)/9.);
1940  case 30:
1941  return RealGradient(15680.*eta*xi/3. + 6440.*eta/9. - 25760.*eta*xi*xi + 190400.*eta*(xi*xi*xi)/9. - 10360.*xi/9. + 2240.*xi*(eta*eta) - 89600.*xi*eta*eta*eta/9. + 140./9. - 5600.*eta*eta + 16800.*(eta*eta)*(xi*xi) + 5600.*(xi*xi) + 98560.*(eta*eta*eta)/9. - 75040.*xi*xi*xi/9. - 56000.*eta*eta*eta*eta/9. + 35000.*(xi*xi*xi*xi)/9., 11200.*eta*xi - 2240.*eta*xi*xi - 11200.*eta*xi*xi*xi - 12880.*xi/9. - 49280.*xi*eta*eta/3. + 44800.*xi*(eta*eta*eta)/9. + 22400.*(eta*eta)*(xi*xi)/3. - 15680.*xi*xi/3. + 51520.*(xi*xi*xi)/3. - 95200.*xi*xi*xi*xi/9.);
1942  case 31:
1943  return RealGradient(-35840.*eta*xi/3. + 8680.*eta/9. - 30240.*eta*xi*xi + 246400.*eta*(xi*xi*xi)/9. - 8960.*xi/9. + 58240.*xi*(eta*eta) - 448000.*xi*eta*eta*eta/9. - 140./9. - 1680.*eta*eta + 8400.*(eta*eta)*(xi*xi) + 9520.*(xi*xi) - 24640.*eta*eta*eta/9. - 99680.*xi*xi*xi/9. + 35000.*(eta*eta*eta*eta)/9. + 23800.*(xi*xi*xi*xi)/9., 3360.*eta*xi - 19040.*eta*xi*xi - 5600.*eta*xi*xi*xi + 280.*xi/9. - 11200.*xi*eta*eta/3. - 28000.*xi*eta*eta*eta/9. + 112000.*(eta*eta)*(xi*xi)/3. - 11200.*xi*xi/3. + 52640.*(xi*xi*xi)/3. - 123200.*xi*xi*xi*xi/9.);
1944  case 32:
1945  return RealGradient(4480.*eta*xi/3. - 1400.*eta/9. + 5600.*eta*(xi*xi) - 89600.*eta*xi*xi*xi/9. + 5320.*xi/9. - 12320.*xi*eta*eta + 89600.*xi*(eta*eta*eta)/9. - 140./9. + 560.*(eta*eta) + 8400.*(eta*eta)*(xi*xi) - 3920.*xi*xi + 2240.*(eta*eta*eta)/9. + 64960.*(xi*xi*xi)/9. - 7000.*eta*eta*eta*eta/9. - 35000.*xi*xi*xi*xi/9., -1120.*eta*xi + 12320.*eta*(xi*xi) - 5600.*eta*xi*xi*xi + 2800.*xi/9. - 1120.*xi*eta*eta/3. + 5600.*xi*(eta*eta*eta)/9. - 22400.*eta*eta*xi*xi/3. - 4480.*xi*xi/3. - 11200.*xi*xi*xi/3. + 44800.*(xi*xi*xi*xi)/9.);
1946  case 33:
1947  return RealGradient(38080.*eta*xi/3. - 5600.*eta/9. - 19040.*eta*xi*xi + 22400.*eta*(xi*xi*xi)/3. - 6440.*xi/9. - 33600.*xi*eta*eta + 22400.*xi*(eta*eta*eta) + 280./9. + 1680.*(eta*eta) + 25200.*(eta*eta)*(xi*xi) + 1680.*(xi*xi) - 1120.*eta*eta*eta - 4480.*xi*xi*xi/3. + 1400.*(xi*xi*xi*xi)/3., -3360.*eta*xi + 20160.*eta*(xi*xi) - 16800.*eta*xi*xi*xi + 6160.*xi/9. + 3360.*xi*(eta*eta) - 16800.*eta*eta*xi*xi - 14560.*xi*xi/3. + 7840.*(xi*xi*xi) - 11200.*xi*xi*xi*xi/3.);
1948  case 34:
1949  return RealGradient(-29120.*eta*xi/3. + 9520.*eta/9. + 20160.*eta*(xi*xi) - 11200.*eta*xi*xi*xi + 6160.*xi/9. + 23520.*xi*(eta*eta) - 44800.*xi*eta*eta*eta/3. - 560./9. - 3920.*eta*eta - 25200.*eta*eta*xi*xi - 1680.*xi*xi + 15680.*(eta*eta*eta)/3. + 1120.*(xi*xi*xi) - 7000.*eta*eta*eta*eta/3., 3360.*eta*xi - 19040.*eta*xi*xi + 16800.*eta*(xi*xi*xi) - 6440.*xi/9. - 4480.*xi*eta*eta + 5600.*xi*(eta*eta*eta)/3. + 11200.*(eta*eta)*(xi*xi) + 19040.*(xi*xi)/3. - 11200.*xi*xi*xi + 5600.*(xi*xi*xi*xi));
1950  default:
1951  libmesh_error_msg("Invalid i = " << i);
1952  }
1953  } // j = 1
1954 
1955  default:
1956  libmesh_error_msg("Invalid j = " << j);
1957  }
1958  }
1959 
1960  default:
1961  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
1962  } // end switch (type)
1963  } // end case FIFTH
1964 
1965  // unsupported order
1966  default:
1967  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << totalorder);
1968  }
1969 #else // LIBMESH_DIM > 1
1970  libmesh_ignore(elem, order, i, j, add_p_level);
1971  libmesh_not_implemented();
1972 #endif
1973 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static constexpr Real TOLERANCE
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [195/233]

RealGradient libMesh::FE< 3, L2_HIERARCHIC_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 716 of file fe_hierarchic_vec.C.

720 {
721  return FE<3,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
722 }

◆ shape_deriv() [196/233]

Real libMesh::FE< 3, XYZ >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 717 of file fe_xyz_shape_3D.C.

723 {
724  return FE<3,XYZ>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
725 }

◆ shape_deriv() [197/233]

RealGradient libMesh::FE< 1, LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 724 of file fe_lagrange_vec.C.

727 {
728  Real value = FE<1,LAGRANGE>::shape_deriv( type, order, i, j, p );
729  return libMesh::RealGradient( value );
730 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [198/233]

RealGradient libMesh::FE< 1, L2_LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 747 of file fe_lagrange_vec.C.

750 {
751  return FE<1,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
752 }

◆ shape_deriv() [199/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 762 of file fe_subdivision_2D.C.

767 {
768  switch (order)
769  {
770  case FOURTH:
771  {
772  switch (type)
773  {
774  case TRI3SUBDIVISION:
775  libmesh_assert_less(i, 12);
776  return FESubdivision::regular_shape_deriv(i,j,p(0),p(1));
777  default:
778  libmesh_error_msg("ERROR: Unsupported element type == " << Utility::enum_to_string(type));
779  }
780  }
781  default:
782  libmesh_error_msg("ERROR: Unsupported polynomial order == " << order);
783  }
784 }
std::string enum_to_string(const T e)

◆ shape_deriv() [200/233]

RealGradient libMesh::FE< 2, LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 785 of file fe_lagrange_vec.C.

788 {
789  Real value = FE<2,LAGRANGE>::shape_deriv( type, order, i/2, j, p );
790 
791  switch( i%2 )
792  {
793  case 0:
794  return libMesh::RealGradient( value );
795 
796  case 1:
797  return libMesh::RealGradient( Real(0), value );
798 
799  default:
800  libmesh_error_msg("i%2 must be either 0 or 1!");
801  }
802 
803  //dummy
804  return libMesh::RealGradient();
805 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [201/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 789 of file fe_subdivision_2D.C.

795 {
796  libmesh_assert(elem);
797  const Order totalorder = order + add_p_level*elem->p_level();
798  return FE<2,SUBDIVISION>::shape_deriv(elem->type(), totalorder, i, j, p);
799 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
libmesh_assert(ctx)

◆ shape_deriv() [202/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 803 of file fe_subdivision_2D.C.

809 {
810  libmesh_assert(elem);
811  const Order totalorder = fet.order + add_p_level*elem->p_level();
812  return FE<2,SUBDIVISION>::shape_deriv(elem->type(), totalorder, i, j, p);
813 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
libmesh_assert(ctx)

◆ shape_deriv() [203/233]

RealGradient libMesh::FE< 2, L2_LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 838 of file fe_lagrange_vec.C.

841 {
842  return FE<2,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
843 }

◆ shape_deriv() [204/233]

RealGradient libMesh::FE< 3, LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 879 of file fe_lagrange_vec.C.

882 {
883  Real value = FE<3,LAGRANGE>::shape_deriv( type, order, i/3, j, p );
884 
885  switch( i%3 )
886  {
887  case 0:
888  return libMesh::RealGradient( value );
889 
890  case 1:
891  return libMesh::RealGradient( Real(0), value );
892 
893  case 2:
894  return libMesh::RealGradient( Real(0), Real(0), value );
895 
896  default:
897  libmesh_error_msg("i%3 must be 0, 1, or 2!");
898  }
899 
900  //dummy
901  return libMesh::RealGradient();
902 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [205/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

◆ shape_deriv() [206/233]

Real libMesh::FE< 3, BERNSTEIN >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 915 of file fe_bernstein_shape_3D.C.

921 {
922 
923 #if LIBMESH_DIM == 3
924  libmesh_assert(elem);
925  const ElemType type = elem->type();
926 
927  const Order totalorder =
928  order + add_p_level*elem->p_level();
929 
930  libmesh_assert_less (j, 3);
931 
932  switch (totalorder)
933  {
934  // 1st order Bernstein.
935  case FIRST:
936  {
937  switch (type)
938  {
939  // Bernstein shape functions on the tetrahedron.
940  case TET4:
941  case TET10:
942  case TET14:
943  {
944  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
945  }
946 
947 
948  // Bernstein shape functions on the hexahedral.
949  case HEX8:
950  case HEX20:
951  case HEX27:
952  {
953  libmesh_assert_less (i, 8);
954 
955  // Compute hex shape functions as a tensor-product
956  const Real xi = p(0);
957  const Real eta = p(1);
958  const Real zeta = p(2);
959 
960  // The only way to make any sense of this
961  // is to look at the mgflo/mg2/mgf documentation
962  // and make the cut-out cube!
963  // 0 1 2 3 4 5 6 7
964  static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
965  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
966  static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
967 
968  switch (j)
969  {
970  // d()/dxi
971  case 0:
972  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
973  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
974  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
975 
976  // d()/deta
977  case 1:
978  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
979  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta)*
980  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
981 
982  // d()/dzeta
983  case 2:
984  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
985  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
986  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta));
987 
988  default:
989  libmesh_error_msg("Invalid derivative index j = " << j);
990  }
991  }
992 
993  default:
994  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
995  }
996  }
997 
998 
999 
1000 
1001  case SECOND:
1002  {
1003  switch (type)
1004  {
1005  // Bernstein shape functions on the tetrahedron.
1006  case TET10:
1007  case TET14:
1008  {
1009  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
1010  }
1011 
1012  // Bernstein shape functions on the hexahedral.
1013  case HEX20:
1014  {
1015  libmesh_assert_less (i, 20);
1016 
1017  // Compute hex shape functions as a tensor-product
1018  const Real xi = p(0);
1019  const Real eta = p(1);
1020  const Real zeta = p(2);
1021 
1022  switch (j)
1023  {
1024  // d()/dxi
1025  case 0:
1026  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[i], 0, xi)*
1027  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[i], eta)*
1028  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[i], zeta)
1029  +hex20_scal20[i]*
1030  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[20], 0, xi)*
1031  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[20], eta)*
1032  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[20], zeta)
1033  +hex20_scal21[i]*
1034  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[21], 0, xi)*
1035  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[21], eta)*
1036  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[21], zeta)
1037  +hex20_scal22[i]*
1038  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[22], 0, xi)*
1039  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[22], eta)*
1040  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[22], zeta)
1041  +hex20_scal23[i]*
1042  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[23], 0, xi)*
1043  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[23], eta)*
1044  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[23], zeta)
1045  +hex20_scal24[i]*
1046  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[24], 0, xi)*
1047  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[24], eta)*
1048  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[24], zeta)
1049  +hex20_scal25[i]*
1050  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[25], 0, xi)*
1051  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[25], eta)*
1052  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[25], zeta)
1053  +hex20_scal26[i]*
1054  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[26], 0, xi)*
1055  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[26], eta)*
1056  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[26], zeta));
1057 
1058  // d()/deta
1059  case 1:
1060  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[i], xi)*
1061  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[i], 0, eta)*
1062  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[i], zeta)
1063  +hex20_scal20[i]*
1064  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[20], xi)*
1065  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[20], 0, eta)*
1066  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[20], zeta)
1067  +hex20_scal21[i]*
1068  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[21], xi)*
1069  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[21], 0, eta)*
1070  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[21], zeta)
1071  +hex20_scal22[i]*
1072  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[22], xi)*
1073  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[22], 0, eta)*
1074  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[22], zeta)
1075  +hex20_scal23[i]*
1076  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[23], xi)*
1077  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[23], 0, eta)*
1078  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[23], zeta)
1079  +hex20_scal24[i]*
1080  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[24], xi)*
1081  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[24], 0, eta)*
1082  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[24], zeta)
1083  +hex20_scal25[i]*
1084  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[25], xi)*
1085  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[25], 0, eta)*
1086  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[25], zeta)
1087  +hex20_scal26[i]*
1088  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[26], xi)*
1089  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[26], 0, eta)*
1090  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[26], zeta));
1091 
1092  // d()/dzeta
1093  case 2:
1094  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[i], xi)*
1095  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[i], eta)*
1096  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[i], 0, zeta)
1097  +hex20_scal20[i]*
1098  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[20], xi)*
1099  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[20], eta)*
1100  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[20], 0, zeta)
1101  +hex20_scal21[i]*
1102  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[21], xi)*
1103  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[21], eta)*
1104  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[21], 0, zeta)
1105  +hex20_scal22[i]*
1106  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[22], xi)*
1107  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[22], eta)*
1108  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[22], 0, zeta)
1109  +hex20_scal23[i]*
1110  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[23], xi)*
1111  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[23], eta)*
1112  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[23], 0, zeta)
1113  +hex20_scal24[i]*
1114  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[24], xi)*
1115  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[24], eta)*
1116  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[24], 0, zeta)
1117  +hex20_scal25[i]*
1118  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[25], xi)*
1119  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[25], eta)*
1120  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[25], 0, zeta)
1121  +hex20_scal26[i]*
1122  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[26], xi)*
1123  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[26], eta)*
1124  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[26], 0, zeta));
1125 
1126  default:
1127  libmesh_error_msg("Invalid derivative index j = " << j);
1128  }
1129  }
1130 
1131  // Bernstein shape functions on the hexahedral.
1132  case HEX27:
1133  {
1134  libmesh_assert_less (i, 27);
1135 
1136  // Compute hex shape functions as a tensor-product
1137  const Real xi = p(0);
1138  const Real eta = p(1);
1139  const Real zeta = p(2);
1140 
1141  // The only way to make any sense of this
1142  // is to look at the mgflo/mg2/mgf documentation
1143  // and make the cut-out cube!
1144  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
1145  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};
1146  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};
1147  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};
1148 
1149  switch (j)
1150  {
1151  // d()/dxi
1152  case 0:
1153  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
1154  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
1155  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
1156 
1157  // d()/deta
1158  case 1:
1159  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
1160  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta)*
1161  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
1162 
1163  // d()/dzeta
1164  case 2:
1165  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
1166  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
1167  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta));
1168 
1169  default:
1170  libmesh_error_msg("Invalid derivative index j = " << j);
1171  }
1172  }
1173 
1174 
1175  default:
1176  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1177  }
1178  }
1179 
1180 
1181 
1182  // 3rd-order Bernstein.
1183  case THIRD:
1184  {
1185  switch (type)
1186  {
1187 
1188  // // Bernstein shape functions derivatives.
1189  // case TET10:
1190  // {
1191  // // I have been lazy here and am using finite differences
1192  // // to compute the derivatives!
1193  // const Real eps = 1.e-4;
1194 
1195  // libmesh_assert_less (i, 20);
1196  // libmesh_assert_less (j, 3);
1197 
1198  // switch (j)
1199  // {
1200  // // d()/dxi
1201  // case 0:
1202  // {
1203  // const Point pp(p(0)+eps, p(1), p(2));
1204  // const Point pm(p(0)-eps, p(1), p(2));
1205 
1206  // return (FE<3,BERNSTEIN>::shape(elem, order, i, pp) -
1207  // FE<3,BERNSTEIN>::shape(elem, order, i, pm))/2./eps;
1208  // }
1209 
1210  // // d()/deta
1211  // case 1:
1212  // {
1213  // const Point pp(p(0), p(1)+eps, p(2));
1214  // const Point pm(p(0), p(1)-eps, p(2));
1215 
1216  // return (FE<3,BERNSTEIN>::shape(elem, order, i, pp) -
1217  // FE<3,BERNSTEIN>::shape(elem, order, i, pm))/2./eps;
1218  // }
1219  // // d()/dzeta
1220  // case 2:
1221  // {
1222  // const Point pp(p(0), p(1), p(2)+eps);
1223  // const Point pm(p(0), p(1), p(2)-eps);
1224 
1225  // return (FE<3,BERNSTEIN>::shape(elem, order, i, pp) -
1226  // FE<3,BERNSTEIN>::shape(elem, order, i, pm))/2./eps;
1227  // }
1228  // default:
1229  // libmesh_error_msg("Invalid derivative index j = " << j);
1230  // }
1231 
1232 
1233  // }
1234 
1235 
1236  // Bernstein shape functions on the hexahedral.
1237  case HEX27:
1238  {
1239  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
1240  }
1241 
1242  // // Compute hex shape functions as a tensor-product
1243  // const Real xi = p(0);
1244  // const Real eta = p(1);
1245  // const Real zeta = p(2);
1246  // Real xi_mapped = p(0);
1247  // Real eta_mapped = p(1);
1248  // Real zeta_mapped = p(2);
1249 
1250  // // The only way to make any sense of this
1251  // // is to look at the mgflo/mg2/mgf documentation
1252  // // and make the cut-out cube!
1253  // // Nodes 0 1 2 3 4 5 6 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 24 24 25 25 25 25 26 26 26 26 26 26 26 26
1254  // // DOFS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 18 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 60 62 63
1255  // static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3, 2, 3, 2, 3, 1, 1, 1, 1, 2, 3, 2, 3, 0, 0, 0, 0, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3};
1256  // static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3, 0, 0, 0, 0, 2, 3, 2, 3, 1, 1, 1, 1, 2, 3, 2, 3, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3};
1257  // static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 2, 3, 2, 3, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3};
1258 
1259 
1260 
1261  // // handle the edge orientation
1262  // {
1263  // // Edge 0
1264  // if ((i1[i] == 0) && (i2[i] == 0))
1265  // {
1266  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(1)))
1267  // xi_mapped = -xi;
1268  // }
1269  // // Edge 1
1270  // else if ((i0[i] == 1) && (i2[i] == 0))
1271  // {
1272  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(2)))
1273  // eta_mapped = -eta;
1274  // }
1275  // // Edge 2
1276  // else if ((i1[i] == 1) && (i2[i] == 0))
1277  // {
1278  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(2)))
1279  // xi_mapped = -xi;
1280  // }
1281  // // Edge 3
1282  // else if ((i0[i] == 0) && (i2[i] == 0))
1283  // {
1284  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(3)))
1285  // eta_mapped = -eta;
1286  // }
1287  // // Edge 4
1288  // else if ((i0[i] == 0) && (i1[i] == 0))
1289  // {
1290  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(4)))
1291  // zeta_mapped = -zeta;
1292  // }
1293  // // Edge 5
1294  // else if ((i0[i] == 1) && (i1[i] == 0))
1295  // {
1296  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(5)))
1297  // zeta_mapped = -zeta;
1298  // }
1299  // // Edge 6
1300  // else if ((i0[i] == 1) && (i1[i] == 1))
1301  // {
1302  // if (elem->node_id(2) != std::min(elem->node_id(2), elem->node_id(6)))
1303  // zeta_mapped = -zeta;
1304  // }
1305  // // Edge 7
1306  // else if ((i0[i] == 0) && (i1[i] == 1))
1307  // {
1308  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(7)))
1309  // zeta_mapped = -zeta;
1310  // }
1311  // // Edge 8
1312  // else if ((i1[i] == 0) && (i2[i] == 1))
1313  // {
1314  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(5)))
1315  // xi_mapped = -xi;
1316  // }
1317  // // Edge 9
1318  // else if ((i0[i] == 1) && (i2[i] == 1))
1319  // {
1320  // if (elem->node_id(5) != std::min(elem->node_id(5), elem->node_id(6)))
1321  // eta_mapped = -eta;
1322  // }
1323  // // Edge 10
1324  // else if ((i1[i] == 1) && (i2[i] == 1))
1325  // {
1326  // if (elem->node_id(7) != std::min(elem->node_id(7), elem->node_id(6)))
1327  // xi_mapped = -xi;
1328  // }
1329  // // Edge 11
1330  // else if ((i0[i] == 0) && (i2[i] == 1))
1331  // {
1332  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(7)))
1333  // eta_mapped = -eta;
1334  // }
1335  // }
1336 
1337 
1338  // // handle the face orientation
1339  // {
1340  // // Face 0
1341  // if ((i2[i] == 0) && (i0[i] >= 2) && (i1[i] >= 2))
1342  // {
1343  // const unsigned int min_node = std::min(elem->node_id(1),
1344  // std::min(elem->node_id(2),
1345  // std::min(elem->node_id(0),
1346  // elem->node_id(3))));
1347  // if (elem->node_id(0) == min_node)
1348  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(3)))
1349  // {
1350  // // Case 1
1351  // xi_mapped = xi;
1352  // eta_mapped = eta;
1353  // }
1354  // else
1355  // {
1356  // // Case 2
1357  // xi_mapped = eta;
1358  // eta_mapped = xi;
1359  // }
1360 
1361  // else if (elem->node_id(3) == min_node)
1362  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(2)))
1363  // {
1364  // // Case 3
1365  // xi_mapped = -eta;
1366  // eta_mapped = xi;
1367  // }
1368  // else
1369  // {
1370  // // Case 4
1371  // xi_mapped = xi;
1372  // eta_mapped = -eta;
1373  // }
1374 
1375  // else if (elem->node_id(2) == min_node)
1376  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(1)))
1377  // {
1378  // // Case 5
1379  // xi_mapped = -xi;
1380  // eta_mapped = -eta;
1381  // }
1382  // else
1383  // {
1384  // // Case 6
1385  // xi_mapped = -eta;
1386  // eta_mapped = -xi;
1387  // }
1388 
1389  // else if (elem->node_id(1) == min_node)
1390  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(0)))
1391  // {
1392  // // Case 7
1393  // xi_mapped = eta;
1394  // eta_mapped = -xi;
1395  // }
1396  // else
1397  // {
1398  // // Case 8
1399  // xi_mapped = -xi;
1400  // eta_mapped = eta;
1401  // }
1402  // }
1403 
1404 
1405  // // Face 1
1406  // else if ((i1[i] == 0) && (i0[i] >= 2) && (i2[i] >= 2))
1407  // {
1408  // const unsigned int min_node = std::min(elem->node_id(0),
1409  // std::min(elem->node_id(1),
1410  // std::min(elem->node_id(5),
1411  // elem->node_id(4))));
1412  // if (elem->node_id(0) == min_node)
1413  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(4)))
1414  // {
1415  // // Case 1
1416  // xi_mapped = xi;
1417  // zeta_mapped = zeta;
1418  // }
1419  // else
1420  // {
1421  // // Case 2
1422  // xi_mapped = zeta;
1423  // zeta_mapped = xi;
1424  // }
1425 
1426  // else if (elem->node_id(1) == min_node)
1427  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(0)))
1428  // {
1429  // // Case 3
1430  // xi_mapped = zeta;
1431  // zeta_mapped = -xi;
1432  // }
1433  // else
1434  // {
1435  // // Case 4
1436  // xi_mapped = -xi;
1437  // zeta_mapped = zeta;
1438  // }
1439 
1440  // else if (elem->node_id(5) == min_node)
1441  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(1)))
1442  // {
1443  // // Case 5
1444  // xi_mapped = -xi;
1445  // zeta_mapped = -zeta;
1446  // }
1447  // else
1448  // {
1449  // // Case 6
1450  // xi_mapped = -zeta;
1451  // zeta_mapped = -xi;
1452  // }
1453 
1454  // else if (elem->node_id(4) == min_node)
1455  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(5)))
1456  // {
1457  // // Case 7
1458  // xi_mapped = -xi;
1459  // zeta_mapped = zeta;
1460  // }
1461  // else
1462  // {
1463  // // Case 8
1464  // xi_mapped = xi;
1465  // zeta_mapped = -zeta;
1466  // }
1467  // }
1468 
1469 
1470  // // Face 2
1471  // else if ((i0[i] == 1) && (i1[i] >= 2) && (i2[i] >= 2))
1472  // {
1473  // const unsigned int min_node = std::min(elem->node_id(1),
1474  // std::min(elem->node_id(2),
1475  // std::min(elem->node_id(6),
1476  // elem->node_id(5))));
1477  // if (elem->node_id(1) == min_node)
1478  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(5)))
1479  // {
1480  // // Case 1
1481  // eta_mapped = eta;
1482  // zeta_mapped = zeta;
1483  // }
1484  // else
1485  // {
1486  // // Case 2
1487  // eta_mapped = zeta;
1488  // zeta_mapped = eta;
1489  // }
1490 
1491  // else if (elem->node_id(2) == min_node)
1492  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(1)))
1493  // {
1494  // // Case 3
1495  // eta_mapped = zeta;
1496  // zeta_mapped = -eta;
1497  // }
1498  // else
1499  // {
1500  // // Case 4
1501  // eta_mapped = -eta;
1502  // zeta_mapped = zeta;
1503  // }
1504 
1505  // else if (elem->node_id(6) == min_node)
1506  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(2)))
1507  // {
1508  // // Case 5
1509  // eta_mapped = -eta;
1510  // zeta_mapped = -zeta;
1511  // }
1512  // else
1513  // {
1514  // // Case 6
1515  // eta_mapped = -zeta;
1516  // zeta_mapped = -eta;
1517  // }
1518 
1519  // else if (elem->node_id(5) == min_node)
1520  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(6)))
1521  // {
1522  // // Case 7
1523  // eta_mapped = -zeta;
1524  // zeta_mapped = eta;
1525  // }
1526  // else
1527  // {
1528  // // Case 8
1529  // eta_mapped = eta;
1530  // zeta_mapped = -zeta;
1531  // }
1532  // }
1533 
1534 
1535  // // Face 3
1536  // else if ((i1[i] == 1) && (i0[i] >= 2) && (i2[i] >= 2))
1537  // {
1538  // const unsigned int min_node = std::min(elem->node_id(2),
1539  // std::min(elem->node_id(3),
1540  // std::min(elem->node_id(7),
1541  // elem->node_id(6))));
1542  // if (elem->node_id(3) == min_node)
1543  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(7)))
1544  // {
1545  // // Case 1
1546  // xi_mapped = xi;
1547  // zeta_mapped = zeta;
1548  // }
1549  // else
1550  // {
1551  // // Case 2
1552  // xi_mapped = zeta;
1553  // zeta_mapped = xi;
1554  // }
1555 
1556  // else if (elem->node_id(7) == min_node)
1557  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(6)))
1558  // {
1559  // // Case 3
1560  // xi_mapped = -zeta;
1561  // zeta_mapped = xi;
1562  // }
1563  // else
1564  // {
1565  // // Case 4
1566  // xi_mapped = xi;
1567  // zeta_mapped = -zeta;
1568  // }
1569 
1570  // else if (elem->node_id(6) == min_node)
1571  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(2)))
1572  // {
1573  // // Case 5
1574  // xi_mapped = -xi;
1575  // zeta_mapped = -zeta;
1576  // }
1577  // else
1578  // {
1579  // // Case 6
1580  // xi_mapped = -zeta;
1581  // zeta_mapped = -xi;
1582  // }
1583 
1584  // else if (elem->node_id(2) == min_node)
1585  // if (elem->node_id(6) == std::min(elem->node_id(3), elem->node_id(6)))
1586  // {
1587  // // Case 7
1588  // xi_mapped = zeta;
1589  // zeta_mapped = -xi;
1590  // }
1591  // else
1592  // {
1593  // // Case 8
1594  // xi_mapped = -xi;
1595  // zeta_mapped = zeta;
1596  // }
1597  // }
1598 
1599 
1600  // // Face 4
1601  // else if ((i0[i] == 0) && (i1[i] >= 2) && (i2[i] >= 2))
1602  // {
1603  // const unsigned int min_node = std::min(elem->node_id(3),
1604  // std::min(elem->node_id(0),
1605  // std::min(elem->node_id(4),
1606  // elem->node_id(7))));
1607  // if (elem->node_id(0) == min_node)
1608  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(4)))
1609  // {
1610  // // Case 1
1611  // eta_mapped = eta;
1612  // zeta_mapped = zeta;
1613  // }
1614  // else
1615  // {
1616  // // Case 2
1617  // eta_mapped = zeta;
1618  // zeta_mapped = eta;
1619  // }
1620 
1621  // else if (elem->node_id(4) == min_node)
1622  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(7)))
1623  // {
1624  // // Case 3
1625  // eta_mapped = -zeta;
1626  // zeta_mapped = eta;
1627  // }
1628  // else
1629  // {
1630  // // Case 4
1631  // eta_mapped = eta;
1632  // zeta_mapped = -zeta;
1633  // }
1634 
1635  // else if (elem->node_id(7) == min_node)
1636  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(3)))
1637  // {
1638  // // Case 5
1639  // eta_mapped = -eta;
1640  // zeta_mapped = -zeta;
1641  // }
1642  // else
1643  // {
1644  // // Case 6
1645  // eta_mapped = -zeta;
1646  // zeta_mapped = -eta;
1647  // }
1648 
1649  // else if (elem->node_id(3) == min_node)
1650  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(0)))
1651  // {
1652  // // Case 7
1653  // eta_mapped = zeta;
1654  // zeta_mapped = -eta;
1655  // }
1656  // else
1657  // {
1658  // // Case 8
1659  // eta_mapped = -eta;
1660  // zeta_mapped = zeta;
1661  // }
1662  // }
1663 
1664 
1665  // // Face 5
1666  // else if ((i2[i] == 1) && (i0[i] >= 2) && (i1[i] >= 2))
1667  // {
1668  // const unsigned int min_node = std::min(elem->node_id(4),
1669  // std::min(elem->node_id(5),
1670  // std::min(elem->node_id(6),
1671  // elem->node_id(7))));
1672  // if (elem->node_id(4) == min_node)
1673  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(7)))
1674  // {
1675  // // Case 1
1676  // xi_mapped = xi;
1677  // eta_mapped = eta;
1678  // }
1679  // else
1680  // {
1681  // // Case 2
1682  // xi_mapped = eta;
1683  // eta_mapped = xi;
1684  // }
1685 
1686  // else if (elem->node_id(5) == min_node)
1687  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(4)))
1688  // {
1689  // // Case 3
1690  // xi_mapped = eta;
1691  // eta_mapped = -xi;
1692  // }
1693  // else
1694  // {
1695  // // Case 4
1696  // xi_mapped = -xi;
1697  // eta_mapped = eta;
1698  // }
1699 
1700  // else if (elem->node_id(6) == min_node)
1701  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(5)))
1702  // {
1703  // // Case 5
1704  // xi_mapped = -xi;
1705  // eta_mapped = -eta;
1706  // }
1707  // else
1708  // {
1709  // // Case 6
1710  // xi_mapped = -eta;
1711  // eta_mapped = -xi;
1712  // }
1713 
1714  // else if (elem->node_id(7) == min_node)
1715  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(6)))
1716  // {
1717  // // Case 7
1718  // xi_mapped = -eta;
1719  // eta_mapped = xi;
1720  // }
1721  // else
1722  // {
1723  // // Case 8
1724  // xi_mapped = xi;
1725  // eta_mapped = eta;
1726  // }
1727  // }
1728 
1729 
1730  // }
1731 
1732 
1733 
1734  // libmesh_assert_less (j, 3);
1735 
1736  // switch (j)
1737  // {
1738  // // d()/dxi
1739  // case 0:
1740  // return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi_mapped)*
1741  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
1742  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
1743 
1744  // // d()/deta
1745  // case 1:
1746  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
1747  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta_mapped)*
1748  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
1749 
1750  // // d()/dzeta
1751  // case 2:
1752  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
1753  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
1754  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta_mapped));
1755 
1756  // default:
1757  // libmesh_error_msg("Invalid derivative index j = " << j);
1758  // }
1759 
1760 
1761  default:
1762  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1763  }
1764  }
1765 
1766  // 4th-order Bernstein.
1767  case FOURTH:
1768  {
1769  switch (type)
1770  {
1771 
1772  // Bernstein shape functions derivatives on the hexahedral.
1773  case HEX27:
1774  {
1775  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
1776  }
1777 
1778  // // Compute hex shape functions as a tensor-product
1779  // const Real xi = p(0);
1780  // const Real eta = p(1);
1781  // const Real zeta = p(2);
1782  // Real xi_mapped = p(0);
1783  // Real eta_mapped = p(1);
1784  // Real zeta_mapped = p(2);
1785 
1786  // // The only way to make any sense of this
1787  // // is to look at the mgflo/mg2/mgf documentation
1788  // // and make the cut-out cube!
1789  // // Nodes 0 1 2 3 4 5 6 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 24 24 24 24 25 25 25 25 26 26 26 26 26 26 26 26
1790  // // DOFS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 18 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1791  // static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4};
1792  // static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4};
1793  // static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4};
1794 
1795 
1796 
1797  // // handle the edge orientation
1798  // {
1799  // // Edge 0
1800  // if ((i1[i] == 0) && (i2[i] == 0))
1801  // {
1802  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(1)))
1803  // xi_mapped = -xi;
1804  // }
1805  // // Edge 1
1806  // else if ((i0[i] == 1) && (i2[i] == 0))
1807  // {
1808  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(2)))
1809  // eta_mapped = -eta;
1810  // }
1811  // // Edge 2
1812  // else if ((i1[i] == 1) && (i2[i] == 0))
1813  // {
1814  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(2)))
1815  // xi_mapped = -xi;
1816  // }
1817  // // Edge 3
1818  // else if ((i0[i] == 0) && (i2[i] == 0))
1819  // {
1820  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(3)))
1821  // eta_mapped = -eta;
1822  // }
1823  // // Edge 4
1824  // else if ((i0[i] == 0) && (i1[i] == 0))
1825  // {
1826  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(4)))
1827  // zeta_mapped = -zeta;
1828  // }
1829  // // Edge 5
1830  // else if ((i0[i] == 1) && (i1[i] == 0))
1831  // {
1832  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(5)))
1833  // zeta_mapped = -zeta;
1834  // }
1835  // // Edge 6
1836  // else if ((i0[i] == 1) && (i1[i] == 1))
1837  // {
1838  // if (elem->node_id(2) != std::min(elem->node_id(2), elem->node_id(6)))
1839  // zeta_mapped = -zeta;
1840  // }
1841  // // Edge 7
1842  // else if ((i0[i] == 0) && (i1[i] == 1))
1843  // {
1844  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(7)))
1845  // zeta_mapped = -zeta;
1846  // }
1847  // // Edge 8
1848  // else if ((i1[i] == 0) && (i2[i] == 1))
1849  // {
1850  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(5)))
1851  // xi_mapped = -xi;
1852  // }
1853  // // Edge 9
1854  // else if ((i0[i] == 1) && (i2[i] == 1))
1855  // {
1856  // if (elem->node_id(5) != std::min(elem->node_id(5), elem->node_id(6)))
1857  // eta_mapped = -eta;
1858  // }
1859  // // Edge 10
1860  // else if ((i1[i] == 1) && (i2[i] == 1))
1861  // {
1862  // if (elem->node_id(7) != std::min(elem->node_id(7), elem->node_id(6)))
1863  // xi_mapped = -xi;
1864  // }
1865  // // Edge 11
1866  // else if ((i0[i] == 0) && (i2[i] == 1))
1867  // {
1868  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(7)))
1869  // eta_mapped = -eta;
1870  // }
1871  // }
1872 
1873 
1874  // // handle the face orientation
1875  // {
1876  // // Face 0
1877  // if ((i2[i] == 0) && (i0[i] >= 2) && (i1[i] >= 2))
1878  // {
1879  // const unsigned int min_node = std::min(elem->node_id(1),
1880  // std::min(elem->node_id(2),
1881  // std::min(elem->node_id(0),
1882  // elem->node_id(3))));
1883  // if (elem->node_id(0) == min_node)
1884  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(3)))
1885  // {
1886  // // Case 1
1887  // xi_mapped = xi;
1888  // eta_mapped = eta;
1889  // }
1890  // else
1891  // {
1892  // // Case 2
1893  // xi_mapped = eta;
1894  // eta_mapped = xi;
1895  // }
1896 
1897  // else if (elem->node_id(3) == min_node)
1898  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(2)))
1899  // {
1900  // // Case 3
1901  // xi_mapped = -eta;
1902  // eta_mapped = xi;
1903  // }
1904  // else
1905  // {
1906  // // Case 4
1907  // xi_mapped = xi;
1908  // eta_mapped = -eta;
1909  // }
1910 
1911  // else if (elem->node_id(2) == min_node)
1912  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(1)))
1913  // {
1914  // // Case 5
1915  // xi_mapped = -xi;
1916  // eta_mapped = -eta;
1917  // }
1918  // else
1919  // {
1920  // // Case 6
1921  // xi_mapped = -eta;
1922  // eta_mapped = -xi;
1923  // }
1924 
1925  // else if (elem->node_id(1) == min_node)
1926  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(0)))
1927  // {
1928  // // Case 7
1929  // xi_mapped = eta;
1930  // eta_mapped = -xi;
1931  // }
1932  // else
1933  // {
1934  // // Case 8
1935  // xi_mapped = -xi;
1936  // eta_mapped = eta;
1937  // }
1938  // }
1939 
1940 
1941  // // Face 1
1942  // else if ((i1[i] == 0) && (i0[i] >= 2) && (i2[i] >= 2))
1943  // {
1944  // const unsigned int min_node = std::min(elem->node_id(0),
1945  // std::min(elem->node_id(1),
1946  // std::min(elem->node_id(5),
1947  // elem->node_id(4))));
1948  // if (elem->node_id(0) == min_node)
1949  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(4)))
1950  // {
1951  // // Case 1
1952  // xi_mapped = xi;
1953  // zeta_mapped = zeta;
1954  // }
1955  // else
1956  // {
1957  // // Case 2
1958  // xi_mapped = zeta;
1959  // zeta_mapped = xi;
1960  // }
1961 
1962  // else if (elem->node_id(1) == min_node)
1963  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(0)))
1964  // {
1965  // // Case 3
1966  // xi_mapped = zeta;
1967  // zeta_mapped = -xi;
1968  // }
1969  // else
1970  // {
1971  // // Case 4
1972  // xi_mapped = -xi;
1973  // zeta_mapped = zeta;
1974  // }
1975 
1976  // else if (elem->node_id(5) == min_node)
1977  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(1)))
1978  // {
1979  // // Case 5
1980  // xi_mapped = -xi;
1981  // zeta_mapped = -zeta;
1982  // }
1983  // else
1984  // {
1985  // // Case 6
1986  // xi_mapped = -zeta;
1987  // zeta_mapped = -xi;
1988  // }
1989 
1990  // else if (elem->node_id(4) == min_node)
1991  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(5)))
1992  // {
1993  // // Case 7
1994  // xi_mapped = -xi;
1995  // zeta_mapped = zeta;
1996  // }
1997  // else
1998  // {
1999  // // Case 8
2000  // xi_mapped = xi;
2001  // zeta_mapped = -zeta;
2002  // }
2003  // }
2004 
2005 
2006  // // Face 2
2007  // else if ((i0[i] == 1) && (i1[i] >= 2) && (i2[i] >= 2))
2008  // {
2009  // const unsigned int min_node = std::min(elem->node_id(1),
2010  // std::min(elem->node_id(2),
2011  // std::min(elem->node_id(6),
2012  // elem->node_id(5))));
2013  // if (elem->node_id(1) == min_node)
2014  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(5)))
2015  // {
2016  // // Case 1
2017  // eta_mapped = eta;
2018  // zeta_mapped = zeta;
2019  // }
2020  // else
2021  // {
2022  // // Case 2
2023  // eta_mapped = zeta;
2024  // zeta_mapped = eta;
2025  // }
2026 
2027  // else if (elem->node_id(2) == min_node)
2028  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(1)))
2029  // {
2030  // // Case 3
2031  // eta_mapped = zeta;
2032  // zeta_mapped = -eta;
2033  // }
2034  // else
2035  // {
2036  // // Case 4
2037  // eta_mapped = -eta;
2038  // zeta_mapped = zeta;
2039  // }
2040 
2041  // else if (elem->node_id(6) == min_node)
2042  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(2)))
2043  // {
2044  // // Case 5
2045  // eta_mapped = -eta;
2046  // zeta_mapped = -zeta;
2047  // }
2048  // else
2049  // {
2050  // // Case 6
2051  // eta_mapped = -zeta;
2052  // zeta_mapped = -eta;
2053  // }
2054 
2055  // else if (elem->node_id(5) == min_node)
2056  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(6)))
2057  // {
2058  // // Case 7
2059  // eta_mapped = -zeta;
2060  // zeta_mapped = eta;
2061  // }
2062  // else
2063  // {
2064  // // Case 8
2065  // eta_mapped = eta;
2066  // zeta_mapped = -zeta;
2067  // }
2068  // }
2069 
2070 
2071  // // Face 3
2072  // else if ((i1[i] == 1) && (i0[i] >= 2) && (i2[i] >= 2))
2073  // {
2074  // const unsigned int min_node = std::min(elem->node_id(2),
2075  // std::min(elem->node_id(3),
2076  // std::min(elem->node_id(7),
2077  // elem->node_id(6))));
2078  // if (elem->node_id(3) == min_node)
2079  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(7)))
2080  // {
2081  // // Case 1
2082  // xi_mapped = xi;
2083  // zeta_mapped = zeta;
2084  // }
2085  // else
2086  // {
2087  // // Case 2
2088  // xi_mapped = zeta;
2089  // zeta_mapped = xi;
2090  // }
2091 
2092  // else if (elem->node_id(7) == min_node)
2093  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(6)))
2094  // {
2095  // // Case 3
2096  // xi_mapped = -zeta;
2097  // zeta_mapped = xi;
2098  // }
2099  // else
2100  // {
2101  // // Case 4
2102  // xi_mapped = xi;
2103  // zeta_mapped = -zeta;
2104  // }
2105 
2106  // else if (elem->node_id(6) == min_node)
2107  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(2)))
2108  // {
2109  // // Case 5
2110  // xi_mapped = -xi;
2111  // zeta_mapped = -zeta;
2112  // }
2113  // else
2114  // {
2115  // // Case 6
2116  // xi_mapped = -zeta;
2117  // zeta_mapped = -xi;
2118  // }
2119 
2120  // else if (elem->node_id(2) == min_node)
2121  // if (elem->node_id(6) == std::min(elem->node_id(3), elem->node_id(6)))
2122  // {
2123  // // Case 7
2124  // xi_mapped = zeta;
2125  // zeta_mapped = -xi;
2126  // }
2127  // else
2128  // {
2129  // // Case 8
2130  // xi_mapped = -xi;
2131  // zeta_mapped = zeta;
2132  // }
2133  // }
2134 
2135 
2136  // // Face 4
2137  // else if ((i0[i] == 0) && (i1[i] >= 2) && (i2[i] >= 2))
2138  // {
2139  // const unsigned int min_node = std::min(elem->node_id(3),
2140  // std::min(elem->node_id(0),
2141  // std::min(elem->node_id(4),
2142  // elem->node_id(7))));
2143  // if (elem->node_id(0) == min_node)
2144  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(4)))
2145  // {
2146  // // Case 1
2147  // eta_mapped = eta;
2148  // zeta_mapped = zeta;
2149  // }
2150  // else
2151  // {
2152  // // Case 2
2153  // eta_mapped = zeta;
2154  // zeta_mapped = eta;
2155  // }
2156 
2157  // else if (elem->node_id(4) == min_node)
2158  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(7)))
2159  // {
2160  // // Case 3
2161  // eta_mapped = -zeta;
2162  // zeta_mapped = eta;
2163  // }
2164  // else
2165  // {
2166  // // Case 4
2167  // eta_mapped = eta;
2168  // zeta_mapped = -zeta;
2169  // }
2170 
2171  // else if (elem->node_id(7) == min_node)
2172  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(3)))
2173  // {
2174  // // Case 5
2175  // eta_mapped = -eta;
2176  // zeta_mapped = -zeta;
2177  // }
2178  // else
2179  // {
2180  // // Case 6
2181  // eta_mapped = -zeta;
2182  // zeta_mapped = -eta;
2183  // }
2184 
2185  // else if (elem->node_id(3) == min_node)
2186  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(0)))
2187  // {
2188  // // Case 7
2189  // eta_mapped = zeta;
2190  // zeta_mapped = -eta;
2191  // }
2192  // else
2193  // {
2194  // // Case 8
2195  // eta_mapped = -eta;
2196  // zeta_mapped = zeta;
2197  // }
2198  // }
2199 
2200 
2201  // // Face 5
2202  // else if ((i2[i] == 1) && (i0[i] >= 2) && (i1[i] >= 2))
2203  // {
2204  // const unsigned int min_node = std::min(elem->node_id(4),
2205  // std::min(elem->node_id(5),
2206  // std::min(elem->node_id(6),
2207  // elem->node_id(7))));
2208  // if (elem->node_id(4) == min_node)
2209  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(7)))
2210  // {
2211  // // Case 1
2212  // xi_mapped = xi;
2213  // eta_mapped = eta;
2214  // }
2215  // else
2216  // {
2217  // // Case 2
2218  // xi_mapped = eta;
2219  // eta_mapped = xi;
2220  // }
2221 
2222  // else if (elem->node_id(5) == min_node)
2223  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(4)))
2224  // {
2225  // // Case 3
2226  // xi_mapped = eta;
2227  // eta_mapped = -xi;
2228  // }
2229  // else
2230  // {
2231  // // Case 4
2232  // xi_mapped = -xi;
2233  // eta_mapped = eta;
2234  // }
2235 
2236  // else if (elem->node_id(6) == min_node)
2237  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(5)))
2238  // {
2239  // // Case 5
2240  // xi_mapped = -xi;
2241  // eta_mapped = -eta;
2242  // }
2243  // else
2244  // {
2245  // // Case 6
2246  // xi_mapped = -eta;
2247  // eta_mapped = -xi;
2248  // }
2249 
2250  // else if (elem->node_id(7) == min_node)
2251  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(6)))
2252  // {
2253  // // Case 7
2254  // xi_mapped = -eta;
2255  // eta_mapped = xi;
2256  // }
2257  // else
2258  // {
2259  // // Case 8
2260  // xi_mapped = xi;
2261  // eta_mapped = eta;
2262  // }
2263  // }
2264 
2265 
2266  // }
2267 
2268 
2269 
2270  // libmesh_assert_less (j, 3);
2271 
2272  // switch (j)
2273  // {
2274  // // d()/dxi
2275  // case 0:
2276  // return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi_mapped)*
2277  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
2278  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
2279 
2280  // // d()/deta
2281  // case 1:
2282  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
2283  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta_mapped)*
2284  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
2285 
2286  // // d()/dzeta
2287  // case 2:
2288  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
2289  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
2290  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta_mapped));
2291 
2292  // default:
2293  // libmesh_error_msg("Invalid derivative index j = " << j);
2294  // }
2295 
2296 
2297  default:
2298  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
2299  }
2300  }
2301 
2302 
2303  default:
2304  libmesh_error_msg("Invalid totalorder = " << totalorder);
2305  }
2306 
2307 #else // LIBMESH_DIM != 3
2308  libmesh_ignore(elem, order, i, j, p, add_p_level);
2309  libmesh_not_implemented();
2310 #endif
2311 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven&#39;t be...
Definition: fe.C:911
A specific instantiation of the FEBase class.
Definition: fe.h:127
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0

◆ shape_deriv() [207/233]

RealGradient libMesh::FE< 3, L2_LAGRANGE_VEC >::shape_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 939 of file fe_lagrange_vec.C.

942 {
943  return FE<3,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
944 }

◆ shape_deriv() [208/233]

RealGradient libMesh::FE< 0, LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 965 of file fe_lagrange_vec.C.

969 {
970  Real value = FE<0,LAGRANGE>::shape_deriv( elem->type(), order + add_p_level*elem->p_level(), i, j, p);
971  return libMesh::RealGradient( value );
972 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [209/233]

RealGradient libMesh::FE< 0, L2_LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 993 of file fe_lagrange_vec.C.

997 {
998  return FE<0,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
999 }

◆ shape_deriv() [210/233]

RealGradient libMesh::FE< 1, LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1021 of file fe_lagrange_vec.C.

1025 {
1026  Real value = FE<1,LAGRANGE>::shape_deriv( elem->type(), order + add_p_level*elem->p_level(), i, j, p);
1027  return libMesh::RealGradient( value );
1028 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [211/233]

Real libMesh::FE< 2, SZABAB >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1021 of file fe_szabab_shape_2D.C.

1026 {
1027  libmesh_error_msg("Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
1028  return 0.;
1029 }

◆ shape_deriv() [212/233]

Real libMesh::FE< 2, SZABAB >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1033 of file fe_szabab_shape_2D.C.

1039 {
1040  return FE<2,SZABAB>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
1041 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [213/233]

RealGradient libMesh::FE< 1, L2_LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1048 of file fe_lagrange_vec.C.

1052 {
1053  return FE<1,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1054 }

◆ shape_deriv() [214/233]

RealGradient libMesh::FE< 2, LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1090 of file fe_lagrange_vec.C.

1094 {
1095  Real value = FE<2,LAGRANGE>::shape_deriv( elem->type(), order + add_p_level*elem->p_level(), i/2, j, p );
1096 
1097  switch( i%2 )
1098  {
1099  case 0:
1100  return libMesh::RealGradient( value );
1101 
1102  case 1:
1103  return libMesh::RealGradient( Real(0), value );
1104 
1105  default:
1106  libmesh_error_msg("i%2 must be either 0 or 1!");
1107  }
1108 
1109  //dummy
1110  return libMesh::RealGradient();
1111 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [215/233]

RealGradient libMesh::FE< 2, L2_LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1145 of file fe_lagrange_vec.C.

1149 {
1150  return FE<2,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1151 }

◆ shape_deriv() [216/233]

RealGradient libMesh::FE< 3, LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1190 of file fe_lagrange_vec.C.

1194 {
1195  Real value = FE<3,LAGRANGE>::shape_deriv( elem->type(), order + add_p_level*elem->p_level(), i/3, j, p );
1196 
1197  switch( i%3 )
1198  {
1199  case 0:
1200  return libMesh::RealGradient( value );
1201 
1202  case 1:
1203  return libMesh::RealGradient( Real(0), value );
1204 
1205  case 2:
1206  return libMesh::RealGradient( Real(0), Real(0), value );
1207 
1208  default:
1209  libmesh_error_msg("i%3 must be 0, 1, or 2!");
1210  }
1211 
1212  //dummy
1213  return libMesh::RealGradient();
1214 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_deriv() [217/233]

RealGradient libMesh::FE< 3, L2_LAGRANGE_VEC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1252 of file fe_lagrange_vec.C.

1256 {
1257  return FE<3,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1258 }

◆ shape_deriv() [218/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1509 of file fe_hierarchic_shape_3D.C.

1514 {
1515  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1516  return 0.;
1517 }

◆ shape_deriv() [219/233]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1522 of file fe_hierarchic_shape_3D.C.

1527 {
1528  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1529  return 0.;
1530 }

◆ shape_deriv() [220/233]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1535 of file fe_hierarchic_shape_3D.C.

1540 {
1541  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1542  return 0.;
1543 }

◆ shape_deriv() [221/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1548 of file fe_hierarchic_shape_3D.C.

1554 {
1555  return fe_hierarchic_3D_shape_deriv<HIERARCHIC>(elem, order, i, j, p, add_p_level);
1556 }

◆ shape_deriv() [222/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1560 of file fe_hierarchic_shape_3D.C.

1566 {
1567  return fe_hierarchic_3D_shape_deriv<HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1568 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_deriv() [223/233]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1573 of file fe_hierarchic_shape_3D.C.

1579 {
1580  return fe_hierarchic_3D_shape_deriv<L2_HIERARCHIC>(elem, order, i, j, p, add_p_level);
1581 }

◆ shape_deriv() [224/233]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1585 of file fe_hierarchic_shape_3D.C.

1591 {
1592  return fe_hierarchic_3D_shape_deriv<L2_HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1593 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_deriv() [225/233]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1598 of file fe_hierarchic_shape_3D.C.

1604 {
1605 #if LIBMESH_DIM == 3
1606  libmesh_assert(elem);
1607  const ElemType type = elem->type();
1608 
1609  const Order totalorder = order + add_p_level*elem->p_level();
1610 
1611  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
1612  return 0; // constants have zero derivative
1613 
1614  switch (type)
1615  {
1616  case HEX27:
1617  {
1618  // I need to debug the p>2 case here...
1619  if (totalorder > 2)
1620  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,SIDE_HIERARCHIC>::shape);
1621 
1622  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+1u);
1623  libmesh_assert_less(i, 6*dofs_per_side);
1624 
1625  const unsigned int sidenum = cube_side(p);
1626  if (sidenum > 5)
1627  return std::numeric_limits<Real>::quiet_NaN();
1628 
1629  const unsigned int dof_offset = sidenum * dofs_per_side;
1630 
1631  if (i < dof_offset) // i is on a previous side
1632  return 0;
1633 
1634  if (i >= dof_offset + dofs_per_side) // i is on a later side
1635  return 0;
1636 
1637  unsigned int side_i = i - dof_offset;
1638 
1639  std::unique_ptr<const Elem> side = elem->build_side_ptr(sidenum);
1640 
1641  Point sidep = cube_side_point(sidenum, p);
1642 
1643  cube_remap(side_i, *side, totalorder, sidep);
1644 
1645  // What direction on the side corresponds to the derivative
1646  // direction we want?
1647  unsigned int sidej = 100;
1648 
1649  // Do we need a -1 here to flip that direction?
1650  Real f = 1.;
1651 
1652  switch (j)
1653  {
1654  case 0: // d()/dxi
1655  {
1656  switch (sidenum)
1657  {
1658  case 0:
1659  sidej = 1;
1660  break;
1661  case 1:
1662  sidej = 0;
1663  break;
1664  case 2:
1665  return 0;
1666  case 3:
1667  sidej = 0;
1668  f = -1;
1669  break;
1670  case 4:
1671  return 0;
1672  case 5:
1673  sidej = 0;
1674  break;
1675  default:
1676  libmesh_error();
1677  }
1678  break;
1679  }
1680  case 1: // d()/deta
1681  {
1682  switch (sidenum)
1683  {
1684  case 0:
1685  sidej = 0;
1686  break;
1687  case 1:
1688  return 0;
1689  case 2:
1690  sidej = 0;
1691  break;
1692  case 3:
1693  return 0;
1694  case 4:
1695  sidej = 0;
1696  f = -1;
1697  break;
1698  case 5:
1699  sidej = 1;
1700  break;
1701  default:
1702  libmesh_error();
1703  }
1704  break;
1705  }
1706  case 2: // d()/dzeta
1707  {
1708  switch (sidenum)
1709  {
1710  case 0:
1711  return 0;
1712  case 1:
1713  case 2:
1714  case 3:
1715  case 4:
1716  sidej = 1;
1717  break;
1718  case 5:
1719  return 0;
1720  default:
1721  libmesh_error();
1722  }
1723  break;
1724  }
1725 
1726  default:
1727  libmesh_error_msg("Invalid derivative index j = " << j);
1728  }
1729 
1730  return f * FE<2,HIERARCHIC>::shape_deriv(side.get(), order,
1731  side_i, sidej, sidep,
1732  add_p_level);
1733  }
1734 
1735  case TET14:
1736  case PRISM20:
1737  case PRISM21:
1738  {
1739  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,SIDE_HIERARCHIC>::shape);
1740  }
1741 
1742  default:
1743  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1744  }
1745 
1746 #else // LIBMESH_DIM != 3
1747  libmesh_ignore(elem, order, i, j, p, add_p_level);
1748  libmesh_not_implemented();
1749 #endif
1750 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
unsigned int p_level() const
Definition: elem.h:3108
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven&#39;t be...
Definition: fe.C:911
A specific instantiation of the FEBase class.
Definition: fe.h:127
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
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.
Definition: point.h:39

◆ shape_deriv() [226/233]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1754 of file fe_hierarchic_shape_3D.C.

1760 {
1761  return FE<3,SIDE_HIERARCHIC>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
1762 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [227/233]

Real libMesh::FE< 2, CLOUGH >::shape_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1970 of file fe_clough_shape_2D.C.

1976 {
1977  libmesh_assert(elem);
1978 
1979  CloughCoefs coefs;
1980  clough_compute_coefs(elem, coefs);
1981 
1982  const ElemType type = elem->type();
1983 
1984  const Order totalorder =
1985  order + add_p_level*elem->p_level();
1986 
1987  switch (totalorder)
1988  {
1989  // 2nd-order restricted Clough-Tocher element
1990  case SECOND:
1991  {
1992  // There may be a bug in the 2nd order case; the 3rd order
1993  // Clough-Tocher elements are pretty uniformly better anyways
1994  // so use those instead.
1995  libmesh_experimental();
1996  switch (type)
1997  {
1998  // C1 functions on the Clough-Tocher triangle.
1999  case TRI6:
2000  case TRI7:
2001  {
2002  libmesh_assert_less (i, 9);
2003  // FIXME: it would be nice to calculate (and cache)
2004  // clough_raw_shape(j,p) only once per triangle, not 1-7
2005  // times
2006  switch (i)
2007  {
2008  // Note: these DoF numbers are "scrambled" because my
2009  // initial numbering conventions didn't match libMesh
2010  case 0:
2011  return clough_raw_shape_deriv(0, j, p)
2012  + coefs.d1d2n * clough_raw_shape_deriv(10, j, p)
2013  + coefs.d1d3n * clough_raw_shape_deriv(11, j, p);
2014  case 3:
2015  return clough_raw_shape_deriv(1, j, p)
2016  + coefs.d2d3n * clough_raw_shape_deriv(11, j, p)
2017  + coefs.d2d1n * clough_raw_shape_deriv(9, j, p);
2018  case 6:
2019  return clough_raw_shape_deriv(2, j, p)
2020  + coefs.d3d1n * clough_raw_shape_deriv(9, j, p)
2021  + coefs.d3d2n * clough_raw_shape_deriv(10, j, p);
2022  case 1:
2023  return coefs.d1xd1x * clough_raw_shape_deriv(3, j, p)
2024  + coefs.d1xd1y * clough_raw_shape_deriv(4, j, p)
2025  + coefs.d1xd2n * clough_raw_shape_deriv(10, j, p)
2026  + coefs.d1xd3n * clough_raw_shape_deriv(11, j, p)
2027  + 0.5 * coefs.N01x * coefs.d3nd3n * clough_raw_shape_deriv(11, j, p)
2028  + 0.5 * coefs.N02x * coefs.d2nd2n * clough_raw_shape_deriv(10, j, p);
2029  case 2:
2030  return coefs.d1yd1y * clough_raw_shape_deriv(4, j, p)
2031  + coefs.d1yd1x * clough_raw_shape_deriv(3, j, p)
2032  + coefs.d1yd2n * clough_raw_shape_deriv(10, j, p)
2033  + coefs.d1yd3n * clough_raw_shape_deriv(11, j, p)
2034  + 0.5 * coefs.N01y * coefs.d3nd3n * clough_raw_shape_deriv(11, j, p)
2035  + 0.5 * coefs.N02y * coefs.d2nd2n * clough_raw_shape_deriv(10, j, p);
2036  case 4:
2037  return coefs.d2xd2x * clough_raw_shape_deriv(5, j, p)
2038  + coefs.d2xd2y * clough_raw_shape_deriv(6, j, p)
2039  + coefs.d2xd3n * clough_raw_shape_deriv(11, j, p)
2040  + coefs.d2xd1n * clough_raw_shape_deriv(9, j, p)
2041  + 0.5 * coefs.N10x * coefs.d3nd3n * clough_raw_shape_deriv(11, j, p)
2042  + 0.5 * coefs.N12x * coefs.d1nd1n * clough_raw_shape_deriv(9, j, p);
2043  case 5:
2044  return coefs.d2yd2y * clough_raw_shape_deriv(6, j, p)
2045  + coefs.d2yd2x * clough_raw_shape_deriv(5, j, p)
2046  + coefs.d2yd3n * clough_raw_shape_deriv(11, j, p)
2047  + coefs.d2yd1n * clough_raw_shape_deriv(9, j, p)
2048  + 0.5 * coefs.N10y * coefs.d3nd3n * clough_raw_shape_deriv(11, j, p)
2049  + 0.5 * coefs.N12y * coefs.d1nd1n * clough_raw_shape_deriv(9, j, p);
2050  case 7:
2051  return coefs.d3xd3x * clough_raw_shape_deriv(7, j, p)
2052  + coefs.d3xd3y * clough_raw_shape_deriv(8, j, p)
2053  + coefs.d3xd1n * clough_raw_shape_deriv(9, j, p)
2054  + coefs.d3xd2n * clough_raw_shape_deriv(10, j, p)
2055  + 0.5 * coefs.N20x * coefs.d2nd2n * clough_raw_shape_deriv(10, j, p)
2056  + 0.5 * coefs.N21x * coefs.d1nd1n * clough_raw_shape_deriv(9, j, p);
2057  case 8:
2058  return coefs.d3yd3y * clough_raw_shape_deriv(8, j, p)
2059  + coefs.d3yd3x * clough_raw_shape_deriv(7, j, p)
2060  + coefs.d3yd1n * clough_raw_shape_deriv(9, j, p)
2061  + coefs.d3yd2n * clough_raw_shape_deriv(10, j, p)
2062  + 0.5 * coefs.N20y * coefs.d2nd2n * clough_raw_shape_deriv(10, j, p)
2063  + 0.5 * coefs.N21y * coefs.d1nd1n * clough_raw_shape_deriv(9, j, p);
2064  default:
2065  libmesh_error_msg("Invalid shape function index i = " << i);
2066  }
2067  }
2068  default:
2069  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
2070  }
2071  }
2072  // 3rd-order Clough-Tocher element
2073  case THIRD:
2074  {
2075  switch (type)
2076  {
2077  // C1 functions on the Clough-Tocher triangle.
2078  case TRI6:
2079  case TRI7:
2080  {
2081  libmesh_assert_less (i, 12);
2082 
2083  // FIXME: it would be nice to calculate (and cache)
2084  // clough_raw_shape(j,p) only once per triangle, not 1-7
2085  // times
2086  switch (i)
2087  {
2088  // Note: these DoF numbers are "scrambled" because my
2089  // initial numbering conventions didn't match libMesh
2090  case 0:
2091  return clough_raw_shape_deriv(0, j, p)
2092  + coefs.d1d2n * clough_raw_shape_deriv(10, j, p)
2093  + coefs.d1d3n * clough_raw_shape_deriv(11, j, p);
2094  case 3:
2095  return clough_raw_shape_deriv(1, j, p)
2096  + coefs.d2d3n * clough_raw_shape_deriv(11, j, p)
2097  + coefs.d2d1n * clough_raw_shape_deriv(9, j, p);
2098  case 6:
2099  return clough_raw_shape_deriv(2, j, p)
2100  + coefs.d3d1n * clough_raw_shape_deriv(9, j, p)
2101  + coefs.d3d2n * clough_raw_shape_deriv(10, j, p);
2102  case 1:
2103  return coefs.d1xd1x * clough_raw_shape_deriv(3, j, p)
2104  + coefs.d1xd1y * clough_raw_shape_deriv(4, j, p)
2105  + coefs.d1xd2n * clough_raw_shape_deriv(10, j, p)
2106  + coefs.d1xd3n * clough_raw_shape_deriv(11, j, p);
2107  case 2:
2108  return coefs.d1yd1y * clough_raw_shape_deriv(4, j, p)
2109  + coefs.d1yd1x * clough_raw_shape_deriv(3, j, p)
2110  + coefs.d1yd2n * clough_raw_shape_deriv(10, j, p)
2111  + coefs.d1yd3n * clough_raw_shape_deriv(11, j, p);
2112  case 4:
2113  return coefs.d2xd2x * clough_raw_shape_deriv(5, j, p)
2114  + coefs.d2xd2y * clough_raw_shape_deriv(6, j, p)
2115  + coefs.d2xd3n * clough_raw_shape_deriv(11, j, p)
2116  + coefs.d2xd1n * clough_raw_shape_deriv(9, j, p);
2117  case 5:
2118  return coefs.d2yd2y * clough_raw_shape_deriv(6, j, p)
2119  + coefs.d2yd2x * clough_raw_shape_deriv(5, j, p)
2120  + coefs.d2yd3n * clough_raw_shape_deriv(11, j, p)
2121  + coefs.d2yd1n * clough_raw_shape_deriv(9, j, p);
2122  case 7:
2123  return coefs.d3xd3x * clough_raw_shape_deriv(7, j, p)
2124  + coefs.d3xd3y * clough_raw_shape_deriv(8, j, p)
2125  + coefs.d3xd1n * clough_raw_shape_deriv(9, j, p)
2126  + coefs.d3xd2n * clough_raw_shape_deriv(10, j, p);
2127  case 8:
2128  return coefs.d3yd3y * clough_raw_shape_deriv(8, j, p)
2129  + coefs.d3yd3x * clough_raw_shape_deriv(7, j, p)
2130  + coefs.d3yd1n * clough_raw_shape_deriv(9, j, p)
2131  + coefs.d3yd2n * clough_raw_shape_deriv(10, j, p);
2132  case 10:
2133  return coefs.d1nd1n * clough_raw_shape_deriv(9, j, p);
2134  case 11:
2135  return coefs.d2nd2n * clough_raw_shape_deriv(10, j, p);
2136  case 9:
2137  return coefs.d3nd3n * clough_raw_shape_deriv(11, j, p);
2138 
2139  default:
2140  libmesh_error_msg("Invalid shape function index i = " << i);
2141  }
2142  }
2143  default:
2144  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
2145  }
2146  }
2147  // by default throw an error
2148  default:
2149  libmesh_error_msg("ERROR: Unsupported polynomial order = " << order);
2150  }
2151 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_deriv() [228/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1978 of file fe_nedelec_one_shape_2D.C.

1983 {
1984  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
1985  return RealGradient();
1986 }
RealVectorValue RealGradient

◆ shape_deriv() [229/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1989 of file fe_nedelec_one_shape_2D.C.

1995 {
1996  return FE<2,NEDELEC_ONE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
1997 }

◆ shape_deriv() [230/233]

Real libMesh::FE< 2, CLOUGH >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 2155 of file fe_clough_shape_2D.C.

2160 {
2161  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
2162  return 0.;
2163 }

◆ shape_deriv() [231/233]

Real libMesh::FE< 2, CLOUGH >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2167 of file fe_clough_shape_2D.C.

2173 {
2174  return FE<2,CLOUGH>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
2175 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [232/233]

Real libMesh::FE< 3, BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 2315 of file fe_bernstein_shape_3D.C.

2320 {
2321  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge and face orientation is needed.");
2322  return 0.;
2323 }

◆ shape_deriv() [233/233]

Real libMesh::FE< 3, BERNSTEIN >::shape_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2326 of file fe_bernstein_shape_3D.C.

2332 {
2333  return FE<3,BERNSTEIN>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
2334 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_derivs() [1/5]

void libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_derivs ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level 
)
inherited

Definition at line 202 of file fe_rational_shape_3D.C.

209 {
210  libmesh_assert_equal_to(p.size(), v.size());
211  for (auto vi : index_range(v))
212  v[vi] = FE<3,RATIONAL_BERNSTEIN>::shape_deriv (elem, o, i, j, p[vi], add_p_level);
213 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ shape_derivs() [2/5]

void libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_derivs ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level 
)
inherited

Definition at line 206 of file fe_rational_shape_2D.C.

213 {
214  libmesh_assert_equal_to(p.size(), v.size());
215  for (auto vi : index_range(v))
216  v[vi] = FE<2,RATIONAL_BERNSTEIN>::shape_deriv (elem, o, i, j, p[vi], add_p_level);
217 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ shape_derivs() [3/5]

void libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_derivs ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level 
)
inherited

Definition at line 208 of file fe_rational_shape_1D.C.

215 {
216  libmesh_assert_equal_to(p.size(), v.size());
217  for (auto vi : index_range(v))
218  v[vi] = FE<1,RATIONAL_BERNSTEIN>::shape_deriv (elem, o, i, j, p[vi], add_p_level);
219 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ shape_derivs() [4/5]

void libMesh::FE< 3, LAGRANGE >::shape_derivs ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level 
)
inherited

Definition at line 225 of file fe_lagrange_shape_3D.C.

232 {
234  (elem,o,i,j,p,v,add_p_level);
235 }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_derivs() [5/5]

static void libMesh::FE< Dim, T >::shape_derivs ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level = true 
)
staticinherited

Fills v with the \( j^{th} \) derivative of the \( i^{th} \) shape function, evaluated at all points p.

You must specify element order directly. v should already be the appropriate size.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shape_second_deriv() [1/233]

Real libMesh::FE< 0, SCALAR >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 99 of file fe_scalar_shape_0D.C.

104 {
105  return 0.;
106 }

◆ shape_second_deriv() [2/233]

Real libMesh::FE< 3, SCALAR >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 100 of file fe_scalar_shape_3D.C.

105 {
106  return 0.;
107 }

◆ shape_second_deriv() [3/233]

Real libMesh::FE< 2, SCALAR >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 101 of file fe_scalar_shape_2D.C.

106 {
107  return 0.;
108 }

◆ shape_second_deriv() [4/233]

Real libMesh::FE< 1, SCALAR >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 103 of file fe_scalar_shape_1D.C.

108 {
109  return 0.;
110 }

◆ shape_second_deriv() [5/233]

Real libMesh::FE< 0, SCALAR >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 109 of file fe_scalar_shape_0D.C.

115 {
116  return 0.;
117 }

◆ shape_second_deriv() [6/233]

Real libMesh::FE< 3, SCALAR >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 110 of file fe_scalar_shape_3D.C.

116 {
117  return 0.;
118 }

◆ shape_second_deriv() [7/233]

Real libMesh::FE< 0, BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 110 of file fe_bernstein_shape_0D.C.

115 {
116  libmesh_error_msg("No spatial derivatives in 0D!");
117  return 0.;
118 }

◆ shape_second_deriv() [8/233]

Real libMesh::FE< 2, SCALAR >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 111 of file fe_scalar_shape_2D.C.

117 {
118  return 0.;
119 }

◆ shape_second_deriv() [9/233]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 111 of file fe_rational_shape_0D.C.

116 {
117  libmesh_error_msg("No spatial derivatives in 0D!");
118  return 0.;
119 }

◆ shape_second_deriv() [10/233]

Real libMesh::FE< 3, SZABAB >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 113 of file fe_szabab_shape_3D.C.

118 {
119  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
120  return 0.;
121 }

◆ shape_second_deriv() [11/233]

Real libMesh::FE< 1, SCALAR >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 113 of file fe_scalar_shape_1D.C.

119 {
120  return 0.;
121 }

◆ shape_second_deriv() [12/233]

Real libMesh::FE< 0, CLOUGH >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 113 of file fe_clough_shape_0D.C.

118 {
119  libmesh_error_msg("No spatial derivatives in 0D!");
120  return 0.;
121 }

◆ shape_second_deriv() [13/233]

Real libMesh::FE< 0, SZABAB >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 114 of file fe_szabab_shape_0D.C.

119 {
120  libmesh_error_msg("No spatial derivatives in 0D!");
121  return 0.;
122 }

◆ shape_second_deriv() [14/233]

Real libMesh::FE< 0, HERMITE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 114 of file fe_hermite_shape_0D.C.

119 {
120  libmesh_error_msg("No spatial derivatives in 0D!");
121  return 0.;
122 }

◆ shape_second_deriv() [15/233]

Real libMesh::FE< 0, MONOMIAL >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 115 of file fe_monomial_shape_0D.C.

120 {
121  libmesh_error_msg("No spatial derivatives in 0D!");
122  return 0.;
123 }

◆ shape_second_deriv() [16/233]

Real libMesh::FE< 0, XYZ >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 115 of file fe_xyz_shape_0D.C.

120 {
121  libmesh_error_msg("No spatial derivatives in 0D!");
122  return 0.;
123 }

◆ shape_second_deriv() [17/233]

Real libMesh::FE< 3, CLOUGH >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 120 of file fe_clough_shape_3D.C.

125 {
126  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
127  return 0.;
128 }

◆ shape_second_deriv() [18/233]

Real libMesh::FE< 0, SCALAR >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 120 of file fe_scalar_shape_0D.C.

126 {
127  return 0.;
128 }

◆ shape_second_deriv() [19/233]

Real libMesh::FE< 2, SCALAR >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 122 of file fe_scalar_shape_2D.C.

128 {
129  return 0.;
130 }

◆ shape_second_deriv() [20/233]

Real libMesh::FE< 3, SCALAR >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 122 of file fe_scalar_shape_3D.C.

128 {
129  return 0.;
130 }

◆ shape_second_deriv() [21/233]

Real libMesh::FE< 0, BERNSTEIN >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 123 of file fe_bernstein_shape_0D.C.

129 {
130  libmesh_error_msg("No spatial derivatives in 0D!");
131  return 0.;
132 }

◆ shape_second_deriv() [22/233]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 124 of file fe_rational_shape_0D.C.

130 {
131  libmesh_error_msg("No spatial derivatives in 0D!");
132  return 0.;
133 }

◆ shape_second_deriv() [23/233]

Real libMesh::FE< 1, SCALAR >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 125 of file fe_scalar_shape_1D.C.

131 {
132  return 0.;
133 }

◆ shape_second_deriv() [24/233]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 126 of file fe_rational_shape_3D.C.

132 {
133  libmesh_assert(elem);
134 
135  // FEType object to be passed to various FEInterface functions below.
136  FEType underlying_fe_type(order, _underlying_fe_family);
137 
138  return rational_fe_shape_second_deriv(*elem, underlying_fe_type, i,
139  j, p, add_p_level);
140 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape_second_deriv(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Definition: fe.C:1202

◆ shape_second_deriv() [25/233]

Real libMesh::FE< 3, SZABAB >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 126 of file fe_szabab_shape_3D.C.

132 {
133  libmesh_error_msg("Szabo-Babuska polynomials are not defined in 3D");
134  return 0.;
135 }

◆ shape_second_deriv() [26/233]

Real libMesh::FE< 0, CLOUGH >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 126 of file fe_clough_shape_0D.C.

132 {
133  libmesh_error_msg("No spatial derivatives in 0D!");
134  return 0.;
135 }

◆ shape_second_deriv() [27/233]

Real libMesh::FE< 0, SZABAB >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 127 of file fe_szabab_shape_0D.C.

133 {
134  libmesh_error_msg("No spatial derivatives in 0D!");
135  return 0.;
136 }

◆ shape_second_deriv() [28/233]

Real libMesh::FE< 0, HERMITE >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 127 of file fe_hermite_shape_0D.C.

133 {
134  libmesh_error_msg("No spatial derivatives in 0D!");
135  return 0.;
136 }

◆ shape_second_deriv() [29/233]

Real libMesh::FE< 0, MONOMIAL >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 128 of file fe_monomial_shape_0D.C.

134 {
135  libmesh_error_msg("No spatial derivatives in 0D!");
136  return 0.;
137 }

◆ shape_second_deriv() [30/233]

Real libMesh::FE< 0, XYZ >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 128 of file fe_xyz_shape_0D.C.

134 {
135  libmesh_error_msg("No spatial derivatives in 0D!");
136  return 0.;
137 }

◆ shape_second_deriv() [31/233]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 130 of file fe_rational_shape_2D.C.

136 {
137  libmesh_assert(elem);
138 
139  // FEType object to be passed to various FEInterface functions below.
140  FEType underlying_fe_type(order, _underlying_fe_family);
141 
142  return rational_fe_shape_second_deriv(*elem, underlying_fe_type, i,
143  j, p, add_p_level);
144 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape_second_deriv(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Definition: fe.C:1202

◆ shape_second_deriv() [32/233]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 131 of file fe_rational_shape_1D.C.

137 {
138  libmesh_assert(elem);
139 
140  // FEType object to be passed to various FEInterface functions below.
141  FEType underlying_fe_type(order, _underlying_fe_family);
142 
143  return rational_fe_shape_second_deriv(*elem, underlying_fe_type, i,
144  j, p, add_p_level);
145 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
libmesh_assert(ctx)
Real rational_fe_shape_second_deriv(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Definition: fe.C:1202

◆ shape_second_deriv() [33/233]

Real libMesh::FE< 3, CLOUGH >::shape_second_deriv ( const Elem libmesh_dbg_varelem,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 132 of file fe_clough_shape_3D.C.

138 {
139  libmesh_assert(elem);
140  libmesh_not_implemented();
141  return 0.;
142 }
libmesh_assert(ctx)

◆ shape_second_deriv() [34/233]

Real libMesh::FE< 0, BERNSTEIN >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 136 of file fe_bernstein_shape_0D.C.

142 {
143  libmesh_error_msg("No spatial derivatives in 0D!");
144  return 0.;
145 }

◆ shape_second_deriv() [35/233]

Real libMesh::FE< 0, RATIONAL_BERNSTEIN >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 138 of file fe_rational_shape_0D.C.

144 {
145  libmesh_error_msg("No spatial derivatives in 0D!");
146  return 0.;
147 }

◆ shape_second_deriv() [36/233]

Real libMesh::FE< 0, CLOUGH >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 138 of file fe_clough_shape_0D.C.

144 {
145  libmesh_error_msg("No spatial derivatives in 0D!");
146  return 0.;
147 }

◆ shape_second_deriv() [37/233]

Real libMesh::FE< 3, SZABAB >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 139 of file fe_szabab_shape_3D.C.

145 {
146  static bool warning_given = false;
147 
148  if (!warning_given)
149  libMesh::err << "Second derivatives for Szabab elements "
150  << " are not yet implemented!"
151  << std::endl;
152 
153  warning_given = true;
154  return 0.;
155 }
OStreamProxy err

◆ shape_second_deriv() [38/233]

Real libMesh::FE< 0, HERMITE >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 140 of file fe_hermite_shape_0D.C.

146 {
147  libmesh_error_msg("No spatial derivatives in 0D!");
148  return 0.;
149 }

◆ shape_second_deriv() [39/233]

Real libMesh::FE< 0, SZABAB >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 141 of file fe_szabab_shape_0D.C.

147 {
148  libmesh_error_msg("No spatial derivatives in 0D!");
149  return 0.;
150 }

◆ shape_second_deriv() [40/233]

Real libMesh::FE< 0, MONOMIAL >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 141 of file fe_monomial_shape_0D.C.

147 {
148  libmesh_error_msg("No spatial derivatives in 0D!");
149  return 0.;
150 }

◆ shape_second_deriv() [41/233]

Real libMesh::FE< 0, XYZ >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 142 of file fe_xyz_shape_0D.C.

148 {
149  libmesh_error_msg("No spatial derivatives in 0D!");
150  return 0.;
151 }

◆ shape_second_deriv() [42/233]

Real libMesh::FE< 3, CLOUGH >::shape_second_deriv ( const FEType  ,
const Elem libmesh_dbg_varelem,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 145 of file fe_clough_shape_3D.C.

151 {
152  libmesh_assert(elem);
153  libmesh_not_implemented();
154  return 0.;
155 }
libmesh_assert(ctx)

◆ shape_second_deriv() [43/233]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 145 of file fe_rational_shape_3D.C.

150 {
151  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
152  return 0.;
153 }

◆ shape_second_deriv() [44/233]

RealGradient libMesh::FE< 0, HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 146 of file fe_hierarchic_vec.C.

149 {
150  Real value = FE<0,HIERARCHIC>::shape_second_deriv( type, order, i, j, p );
151  return libMesh::RealGradient( value );
152 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [45/233]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 149 of file fe_rational_shape_1D.C.

154 {
155  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
156  return 0.;
157 }

◆ shape_second_deriv() [46/233]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 149 of file fe_rational_shape_2D.C.

154 {
155  libmesh_error_msg("Rational bases require the real element \nto query nodal weighting.");
156  return 0.;
157 }

◆ shape_second_deriv() [47/233]

Real libMesh::FE< 3, RATIONAL_BERNSTEIN >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 157 of file fe_rational_shape_3D.C.

163 {
165  (elem, fet.order, i, j, p, add_p_level);
166 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [48/233]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 160 of file fe_raviart_shape_2D.C.

166 {
167  RealGradient ND1 = FE<2,NEDELEC_ONE>::shape_second_deriv(elem, order, i, j, p, add_p_level);
168  return RealGradient(-ND1(1), ND1(0));
169 }
RealVectorValue RealGradient

◆ shape_second_deriv() [49/233]

Real libMesh::FE< 2, RATIONAL_BERNSTEIN >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 161 of file fe_rational_shape_2D.C.

167 {
169  (elem, fet.order, i, j, p, add_p_level);
170 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [50/233]

Real libMesh::FE< 1, RATIONAL_BERNSTEIN >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 163 of file fe_rational_shape_1D.C.

169 {
170  libmesh_assert(elem);
171  return FE<1,RATIONAL_BERNSTEIN>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
172 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape_second_deriv() [51/233]

RealGradient libMesh::FE< 0, L2_HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 169 of file fe_hierarchic_vec.C.

172 {
173  return FE<0,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
174 }

◆ shape_second_deriv() [52/233]

Real libMesh::FE< 1, MONOMIAL >::shape_second_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point p 
)
inherited

Definition at line 171 of file fe_monomial_shape_1D.C.

176 {
177  // only d()/dxi in 1D!
178 
179  libmesh_assert_equal_to (j, 0);
180 
181  const Real xi = p(0);
182 
183  libmesh_assert_less_equal (i, static_cast<unsigned int>(order));
184 
185  switch (i)
186  {
187  case 0:
188  case 1:
189  return 0.;
190 
191  case 2:
192  return 2.;
193 
194  case 3:
195  return 6.*xi;
196 
197  case 4:
198  return 12.*xi*xi;
199 
200  default:
201  Real val = 2.;
202  for (unsigned int index = 2; index != i; ++index)
203  val *= (index+1) * xi;
204  return val;
205  }
206 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_second_deriv() [53/233]

RealVectorValue libMesh::FE< 0, MONOMIAL_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 172 of file fe_monomial_vec.C.

177 {
178  Real value = FE<0, MONOMIAL>::shape_second_deriv(type, order, i, j, p);
180 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [54/233]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 172 of file fe_raviart_shape_2D.C.

178 {
179  return FE<2,RAVIART_THOMAS>::shape_second_deriv(elem, order, i, j, p, add_p_level);
180 }

◆ shape_second_deriv() [55/233]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 183 of file fe_raviart_shape_2D.C.

188 {
189  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
190  return RealGradient();
191 }
RealVectorValue RealGradient

◆ shape_second_deriv() [56/233]

Real libMesh::FE< 1, LAGRANGE >::shape_second_deriv ( const ElemType  ,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 184 of file fe_lagrange_shape_1D.C.

189 {
190  return fe_lagrange_1D_shape_second_deriv(order, i, j, p(0));
191 }
Real fe_lagrange_1D_shape_second_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)

◆ shape_second_deriv() [57/233]

Real libMesh::FE< 0, L2_LAGRANGE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 188 of file fe_lagrange_shape_0D.C.

193 {
194  libmesh_error_msg("No spatial derivatives in 0D!");
195  return 0.;
196 }

◆ shape_second_deriv() [58/233]

Real libMesh::FE< 1, SZABAB >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 191 of file fe_szabab_shape_1D.C.

196 {
197  static bool warning_given = false;
198 
199  if (!warning_given)
200  libMesh::err << "Second derivatives for Szabab elements "
201  << " are not yet implemented!"
202  << std::endl;
203 
204  warning_given = true;
205  return 0.;
206 }
OStreamProxy err

◆ shape_second_deriv() [59/233]

RealGradient libMesh::FE< 1, HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 192 of file fe_hierarchic_vec.C.

195 {
196  Real value = FE<1,HIERARCHIC>::shape_second_deriv( type, order, i, j, p );
197  return libMesh::RealGradient( value );
198 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [60/233]

Real libMesh::FE< 1, XYZ >::shape_second_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point point_in,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 194 of file fe_xyz_shape_1D.C.

200 {
201  libmesh_assert(elem);
202  libmesh_assert_less_equal (i, order + add_p_level * elem->p_level());
203 
204  // only d2()/dxi2 in 1D!
205 
206  libmesh_assert_equal_to (j, 0);
207 
208  Point avg = elem->vertex_average();
209  Real max_distance = 0.;
210  for (const Point & p : elem->node_ref_range())
211  {
212  const Real distance = std::abs(avg(0) - p(0));
213  max_distance = std::max(distance, max_distance);
214  }
215 
216  const Real x = point_in(0);
217  const Real xc = avg(0);
218  const Real dx = (x - xc)/max_distance;
219  const Real dist2 = pow(max_distance,2.);
220 
221  // monomials. since they are hierarchic we only need one case block.
222  switch (i)
223  {
224  case 0:
225  case 1:
226  return 0.;
227 
228  case 2:
229  return 2./dist2;
230 
231  case 3:
232  return 6.*dx/dist2;
233 
234  case 4:
235  return 12.*dx*dx/dist2;
236 
237  default:
238  Real val = 2.;
239  for (unsigned int index = 2; index != i; ++index)
240  val *= (index+1) * dx;
241  return val/dist2;
242  }
243 }
Real distance(const Point &p)
T pow(const T &x)
Definition: utility.h:328
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_second_deriv() [61/233]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 194 of file fe_raviart_shape_2D.C.

199 {
200  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
201  return RealGradient();
202 }
RealVectorValue RealGradient

◆ shape_second_deriv() [62/233]

Real libMesh::FE< 1, L2_LAGRANGE >::shape_second_deriv ( const ElemType  ,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 196 of file fe_lagrange_shape_1D.C.

201 {
202  return fe_lagrange_1D_shape_second_deriv(order, i, j, p(0));
203 }
Real fe_lagrange_1D_shape_second_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)

◆ shape_second_deriv() [63/233]

Real libMesh::FE< 0, L2_LAGRANGE >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 201 of file fe_lagrange_shape_0D.C.

207 {
208  libmesh_error_msg("No spatial derivatives in 0D!");
209  return 0.;
210 }

◆ shape_second_deriv() [64/233]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 205 of file fe_raviart_shape_2D.C.

211 {
212  return FE<2,RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
213 }

◆ shape_second_deriv() [65/233]

Real libMesh::FE< 1, LAGRANGE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 208 of file fe_lagrange_shape_1D.C.

214 {
215  libmesh_assert(elem);
216 
217  return fe_lagrange_1D_shape_second_deriv(order + add_p_level*elem->p_level(), i, j, p(0));
218 }
Real fe_lagrange_1D_shape_second_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_second_deriv() [66/233]

RealVectorValue libMesh::FE< 1, MONOMIAL_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 208 of file fe_monomial_vec.C.

213 {
214  Real value = FE<1, MONOMIAL>::shape_second_deriv(type, order, i, j, p);
216 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [67/233]

Real libMesh::FE< 1, SZABAB >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 211 of file fe_szabab_shape_1D.C.

217 {
218  static bool warning_given = false;
219 
220  if (!warning_given)
221  libMesh::err << "Second derivatives for Szabab elements "
222  << " are not yet implemented!"
223  << std::endl;
224 
225  warning_given = true;
226  return 0.;
227 }
OStreamProxy err

◆ shape_second_deriv() [68/233]

Real libMesh::FE< 1, MONOMIAL >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 211 of file fe_monomial_shape_1D.C.

217 {
218  libmesh_assert(elem);
219 
220  return FE<1,MONOMIAL>::shape_second_deriv(elem->type(),
221  order + add_p_level*elem->p_level(), i, j, p);
222 }
libmesh_assert(ctx)

◆ shape_second_deriv() [69/233]

Real libMesh::FE< 0, LAGRANGE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 213 of file fe_lagrange_shape_0D.C.

218 {
219  libmesh_error_msg("No spatial derivatives in 0D!");
220  return 0.;
221 }

◆ shape_second_deriv() [70/233]

RealGradient libMesh::FE< 1, L2_HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 216 of file fe_hierarchic_vec.C.

219 {
220  return FE<1,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
221 }

◆ shape_second_deriv() [71/233]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 216 of file fe_raviart_shape_2D.C.

222 {
223  return FE<2,L2_RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
224 }

◆ shape_second_deriv() [72/233]

Real libMesh::FE< 1, L2_LAGRANGE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 223 of file fe_lagrange_shape_1D.C.

229 {
230  libmesh_assert(elem);
231 
232  return fe_lagrange_1D_shape_second_deriv(order + add_p_level*elem->p_level(), i, j, p(0));
233 }
Real fe_lagrange_1D_shape_second_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_second_deriv() [73/233]

Real libMesh::FE< 1, MONOMIAL >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 225 of file fe_monomial_shape_1D.C.

231 {
232  libmesh_assert(elem);
233  return FE<1,MONOMIAL>::shape_second_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
234 }
libmesh_assert(ctx)

◆ shape_second_deriv() [74/233]

Real libMesh::FE< 0, LAGRANGE >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 226 of file fe_lagrange_shape_0D.C.

232 {
233  libmesh_error_msg("No spatial derivatives in 0D!");
234  return 0.;
235 }

◆ shape_second_deriv() [75/233]

Real libMesh::FE< 1, SZABAB >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 231 of file fe_szabab_shape_1D.C.

237 {
238  libmesh_assert(elem);
239 
240  return FE<1,SZABAB>::shape_second_deriv(elem->type(),
241  fet.order + add_p_level*elem->p_level(),
242  i,
243  j,
244  p);
245 }
libmesh_assert(ctx)

◆ shape_second_deriv() [76/233]

Real libMesh::FE< 2, LAGRANGE >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 233 of file fe_lagrange_shape_2D.C.

238 {
239  return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(type, nullptr, order, i, j, p);
240 }

◆ shape_second_deriv() [77/233]

Real libMesh::FE< 1, LAGRANGE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 237 of file fe_lagrange_shape_1D.C.

243 {
244  libmesh_assert(elem);
245  return fe_lagrange_1D_shape_second_deriv(fet.order + add_p_level*elem->p_level(), i, j, p(0));
246 }
Real fe_lagrange_1D_shape_second_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_second_deriv() [78/233]

Real libMesh::FE< 0, L2_LAGRANGE >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 239 of file fe_lagrange_shape_0D.C.

245 {
246  libmesh_error_msg("No spatial derivatives in 0D!");
247  return 0.;
248 }

◆ shape_second_deriv() [79/233]

Real libMesh::FE< 2, L2_LAGRANGE >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 245 of file fe_lagrange_shape_2D.C.

250 {
251  return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(type, nullptr, order, i, j, p);
252 }

◆ shape_second_deriv() [80/233]

Real libMesh::FE< 1, XYZ >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 247 of file fe_xyz_shape_1D.C.

252 {
253  libmesh_error_msg("XYZ polynomials require the element.");
254  return 0.;
255 }

◆ shape_second_deriv() [81/233]

Real libMesh::FE< 1, L2_LAGRANGE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 250 of file fe_lagrange_shape_1D.C.

256 {
257  libmesh_assert(elem);
258  return fe_lagrange_1D_shape_second_deriv(fet.order + add_p_level*elem->p_level(), i, j, p(0));
259 }
Real fe_lagrange_1D_shape_second_deriv(const Order order, const unsigned int i, const unsigned int j, const Real xi)
libmesh_assert(ctx)

◆ shape_second_deriv() [82/233]

Real libMesh::FE< 0, LAGRANGE >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 252 of file fe_lagrange_shape_0D.C.

258 {
259  libmesh_error_msg("No spatial derivatives in 0D!");
260  return 0.;
261 }

◆ shape_second_deriv() [83/233]

Real libMesh::FE< 2, LAGRANGE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 257 of file fe_lagrange_shape_2D.C.

263 {
264  libmesh_assert(elem);
265 
266  // call the orientation-independent shape functions
267  return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(elem->type(), elem, order + add_p_level*elem->p_level(), i, j, p);
268 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [84/233]

Real libMesh::FE< 1, XYZ >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 260 of file fe_xyz_shape_1D.C.

266 {
267  return FE<1,XYZ>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
268 }

◆ shape_second_deriv() [85/233]

RealGradient libMesh::FE< 2, HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 268 of file fe_hierarchic_vec.C.

271 {
272  Real value = FE<2,HIERARCHIC>::shape_second_deriv( type, order, i/2, j, p );
273 
274  switch( i%2 )
275  {
276  case 0:
277  return libMesh::RealGradient( value );
278 
279  case 1:
280  return libMesh::RealGradient( Real(0), value );
281 
282  default:
283  libmesh_error_msg("i%2 must be either 0 or 1!");
284  }
285 
286  //dummy
287  return libMesh::RealGradient();
288 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [86/233]

Real libMesh::FE< 0, HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 271 of file fe_hierarchic_shape_0D.C.

276 {
277  libmesh_error_msg("No spatial derivatives in 0D!");
278  return 0.;
279 }

◆ shape_second_deriv() [87/233]

Real libMesh::FE< 2, L2_LAGRANGE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 273 of file fe_lagrange_shape_2D.C.

279 {
280  libmesh_assert(elem);
281 
282  // call the orientation-independent shape functions
283  return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(elem->type(), elem, order + add_p_level*elem->p_level(), i, j, p);
284 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [88/233]

RealVectorValue libMesh::FE< 2, MONOMIAL_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 274 of file fe_monomial_vec.C.

279 {
280  Real value = FE<2, MONOMIAL>::shape_second_deriv(type, order, i / 2, j, p);
281 
282  switch (i % 2)
283  {
284  case 0:
286 
287  case 1:
288  return libMesh::RealVectorValue(Real(0), value);
289 
290  default:
291  libmesh_error_msg("i%2 must be either 0 or 1!");
292  }
293 
294  // dummy
295  return libMesh::RealVectorValue();
296 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [89/233]

Real libMesh::FE< 0, HIERARCHIC >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 284 of file fe_hierarchic_shape_0D.C.

290 {
291  libmesh_error_msg("No spatial derivatives in 0D!");
292  return 0.;
293 }

◆ shape_second_deriv() [90/233]

Real libMesh::FE< 2, LAGRANGE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 288 of file fe_lagrange_shape_2D.C.

294 {
295  libmesh_assert(elem);
296  return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(elem->type(), elem, fet.order + add_p_level*elem->p_level(), i, j, p);
297 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [91/233]

Real libMesh::FE< 0, HIERARCHIC >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 297 of file fe_hierarchic_shape_0D.C.

303 {
304  libmesh_error_msg("No spatial derivatives in 0D!");
305  return 0.;
306 }

◆ shape_second_deriv() [92/233]

Real libMesh::FE< 1, HIERARCHIC >::shape_second_deriv ( const ElemType  elem_type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 302 of file fe_hierarchic_shape_1D.C.

307 {
308  return fe_hierarchic_1D_shape_second_deriv(elem_type, order, i, j, p);
309 }

◆ shape_second_deriv() [93/233]

Real libMesh::FE< 2, L2_LAGRANGE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 302 of file fe_lagrange_shape_2D.C.

308 {
309  libmesh_assert(elem);
310  return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(elem->type(), elem, fet.order + add_p_level*elem->p_level(), i, j, p);
311 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [94/233]

RealGradient libMesh::FE< 2, L2_HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 306 of file fe_hierarchic_vec.C.

309 {
310  return FE<2,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
311 }

◆ shape_second_deriv() [95/233]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 310 of file fe_hierarchic_shape_0D.C.

315 {
316  libmesh_error_msg("No spatial derivatives in 0D!");
317  return 0.;
318 }

◆ shape_second_deriv() [96/233]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape_second_deriv ( const ElemType  elem_type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 315 of file fe_hierarchic_shape_1D.C.

320 {
321  return fe_hierarchic_1D_shape_second_deriv(elem_type, order, i, j, p);
322 }

◆ shape_second_deriv() [97/233]

static OutputShape libMesh::FE< Dim, T >::shape_second_deriv ( const ElemType  t,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
staticinherited
Returns
The second \( j^{th} \) derivative of the \( i^{th} \) shape function at the point p.
Note
Cross-derivatives are indexed according to: j = 0 ==> d^2 phi / dxi^2 j = 1 ==> d^2 phi / dxi deta j = 2 ==> d^2 phi / deta^2 j = 3 ==> d^2 phi / dxi dzeta j = 4 ==> d^2 phi / deta dzeta j = 5 ==> d^2 phi / dzeta^2
Computing second derivatives is not currently supported for all element types: \( C^1 \) (Clough, Hermite and Subdivision), Lagrange, Hierarchic, L2_Hierarchic, and Monomial are supported. All other element types return an error when asked for second derivatives.

On a p-refined element, o should be the total order of the element.

◆ shape_second_deriv() [98/233]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 323 of file fe_hierarchic_shape_0D.C.

329 {
330  libmesh_error_msg("No spatial derivatives in 0D!");
331  return 0.;
332 }

◆ shape_second_deriv() [99/233]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 327 of file fe_hierarchic_shape_1D.C.

332 {
333  return 0;
334 }

◆ shape_second_deriv() [100/233]

Real libMesh::FE< 1, HERMITE >::shape_second_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned  int,
const Point p,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 333 of file fe_hermite_shape_1D.C.

339 {
340  libmesh_assert(elem);
341 
342  // Coefficient naming: d(1)d(2n) is the coefficient of the
343  // global shape function corresponding to value 1 in terms of the
344  // local shape function corresponding to normal derivative 2
345  Real d1xd1x, d2xd2x;
346 
347  hermite_compute_coefs(elem, d1xd1x, d2xd2x);
348 
349  const ElemType type = elem->type();
350 
351 #ifndef NDEBUG
352  const unsigned int totalorder =
353  order + add_p_level * elem->p_level();
354 #endif
355 
356  switch (type)
357  {
358  // C1 functions on the C1 cubic edge
359  case EDGE2:
360  case EDGE3:
361  {
362  libmesh_assert_less (i, totalorder+1);
363 
364  switch (i)
365  {
366  case 0:
368  case 1:
369  return d1xd1x * FEHermite<1>::hermite_raw_shape_second_deriv(2, p(0));
370  case 2:
372  case 3:
373  return d2xd2x * FEHermite<1>::hermite_raw_shape_second_deriv(3, p(0));
374  default:
376  }
377  }
378  default:
379  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
380  }
381 }
ElemType
Defines an enum for geometric element types.
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape_second_deriv() [101/233]

Real libMesh::FE< 0, L2_HIERARCHIC >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 336 of file fe_hierarchic_shape_0D.C.

342 {
343  libmesh_error_msg("No spatial derivatives in 0D!");
344  return 0.;
345 }

◆ shape_second_deriv() [102/233]

Real libMesh::FE< 1, HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 339 of file fe_hierarchic_shape_1D.C.

345 {
346  libmesh_assert(elem);
347 
348  return fe_hierarchic_1D_shape_second_deriv(elem->type(),
349  order + add_p_level*elem->p_level(), i, j, p);
350 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [103/233]

static OutputShape libMesh::FE< Dim, T >::shape_second_deriv ( const Elem elem,
const Order  o,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level = true 
)
staticinherited
Returns
The second \( j^{th} \) derivative of the \( i^{th} \) shape function at the point p.
Note
Cross-derivatives are indexed according to: j = 0 ==> d^2 phi / dxi^2 j = 1 ==> d^2 phi / dxi deta j = 2 ==> d^2 phi / deta^2 j = 3 ==> d^2 phi / dxi dzeta j = 4 ==> d^2 phi / deta dzeta j = 5 ==> d^2 phi / dzeta^2
Computing second derivatives is not currently supported for all element types: \( C^1 \) (Clough, Hermite and Subdivision), Lagrange, Hierarchic, L2_Hierarchic, and Monomial are supported. All other element types return an error when asked for second derivatives.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shape_second_deriv() [104/233]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 350 of file fe_hierarchic_shape_0D.C.

355 {
356  libmesh_error_msg("No spatial derivatives in 0D!");
357  return 0.;
358 }

◆ shape_second_deriv() [105/233]

Real libMesh::FE< 1, HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 355 of file fe_hierarchic_shape_1D.C.

361 {
362  libmesh_assert(elem);
363  return fe_hierarchic_1D_shape_second_deriv(elem->type(),
364  fet.order + add_p_level*elem->p_level(), i, j, p);
365 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [106/233]

Real libMesh::FE< 2, MONOMIAL >::shape_second_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 356 of file fe_monomial_shape_2D.C.

361 {
362 #if LIBMESH_DIM > 1
363 
364 
365  libmesh_assert_less_equal (j, 2);
366 
367  libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
368  (static_cast<unsigned int>(order)+2)/2);
369 
370  const Real xi = p(0);
371  const Real eta = p(1);
372 
373  // monomials. since they are hierarchic we only need one case block.
374 
375  switch (j)
376  {
377  // d^2()/dxi^2
378  case 0:
379  {
380  switch (i)
381  {
382  // constants
383  case 0:
384  // linears
385  case 1:
386  case 2:
387  return 0.;
388 
389  // quadratics
390  case 3:
391  return 2.;
392 
393  case 4:
394  case 5:
395  return 0.;
396 
397  // cubics
398  case 6:
399  return 6.*xi;
400 
401  case 7:
402  return 2.*eta;
403 
404  case 8:
405  case 9:
406  return 0.;
407 
408  // quartics
409  case 10:
410  return 12.*xi*xi;
411 
412  case 11:
413  return 6.*xi*eta;
414 
415  case 12:
416  return 2.*eta*eta;
417 
418  case 13:
419  case 14:
420  return 0.;
421 
422  default:
423  unsigned int o = 0;
424  for (; i >= (o+1)*(o+2)/2; o++) { }
425  const int ny = i - (o*(o+1)/2);
426  const int nx = o - ny;
427  Real val = nx * (nx - 1);
428  for (int index=2; index < nx; index++)
429  val *= xi;
430  for (int index=0; index != ny; index++)
431  val *= eta;
432  return val;
433  }
434  }
435 
436  // d^2()/dxideta
437  case 1:
438  {
439  switch (i)
440  {
441  // constants
442  case 0:
443 
444  // linears
445  case 1:
446  case 2:
447  return 0.;
448 
449  // quadratics
450  case 3:
451  return 0.;
452 
453  case 4:
454  return 1.;
455 
456  case 5:
457  return 0.;
458 
459  // cubics
460  case 6:
461  return 0.;
462  case 7:
463  return 2.*xi;
464 
465  case 8:
466  return 2.*eta;
467 
468  case 9:
469  return 0.;
470 
471  // quartics
472  case 10:
473  return 0.;
474 
475  case 11:
476  return 3.*xi*xi;
477 
478  case 12:
479  return 4.*xi*eta;
480 
481  case 13:
482  return 3.*eta*eta;
483 
484  case 14:
485  return 0.;
486 
487  default:
488  unsigned int o = 0;
489  for (; i >= (o+1)*(o+2)/2; o++) { }
490  const int ny = i - (o*(o+1)/2);
491  const int nx = o - ny;
492  Real val = nx * ny;
493  for (int index=1; index < nx; index++)
494  val *= xi;
495  for (int index=1; index < ny; index++)
496  val *= eta;
497  return val;
498  }
499  }
500 
501  // d^2()/deta^2
502  case 2:
503  {
504  switch (i)
505  {
506  // constants
507  case 0:
508 
509  // linears
510  case 1:
511  case 2:
512  return 0.;
513 
514  // quadratics
515  case 3:
516  case 4:
517  return 0.;
518 
519  case 5:
520  return 2.;
521 
522  // cubics
523  case 6:
524  return 0.;
525 
526  case 7:
527  return 0.;
528 
529  case 8:
530  return 2.*xi;
531 
532  case 9:
533  return 6.*eta;
534 
535  // quartics
536  case 10:
537  case 11:
538  return 0.;
539 
540  case 12:
541  return 2.*xi*xi;
542 
543  case 13:
544  return 6.*xi*eta;
545 
546  case 14:
547  return 12.*eta*eta;
548 
549  default:
550  unsigned int o = 0;
551  for (; i >= (o+1)*(o+2)/2; o++) { }
552  const int ny = i - (o*(o+1)/2);
553  const int nx = o - ny;
554  Real val = ny * (ny - 1);
555  for (int index=0; index != nx; index++)
556  val *= xi;
557  for (int index=2; index < ny; index++)
558  val *= eta;
559  return val;
560  }
561  }
562 
563  default:
564  libmesh_error_msg("Invalid shape function derivative j = " << j);
565  }
566 
567 #else // LIBMESH_DIM == 1
568  libmesh_assert(order);
569  libmesh_ignore(i, j, p);
570  libmesh_not_implemented();
571 #endif
572 }
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_second_deriv() [107/233]

RealVectorValue libMesh::FE< 3, MONOMIAL_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 361 of file fe_monomial_vec.C.

366 {
367  Real value = FE<3, MONOMIAL>::shape_second_deriv(type, order, i / 3, j, p);
368 
369  switch (i % 3)
370  {
371  case 0:
373 
374  case 1:
375  return libMesh::RealVectorValue(Real(0), value);
376 
377  case 2:
378  return libMesh::RealVectorValue(Real(0), Real(0), value);
379 
380  default:
381  libmesh_error_msg("i%3 must be 0, 1, or 2!");
382  }
383 
384  // dummy
385  return libMesh::RealVectorValue();
386 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [108/233]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 363 of file fe_hierarchic_shape_0D.C.

369 {
370  libmesh_error_msg("No spatial derivatives in 0D!");
371  return 0.;
372 }

◆ shape_second_deriv() [109/233]

Real libMesh::FE< 2, HERMITE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 364 of file fe_hermite_shape_2D.C.

370 {
371  libmesh_assert(elem);
372  libmesh_assert (j == 0 || j == 1 || j == 2);
373 
374  std::vector<std::vector<Real>> dxdxi(2, std::vector<Real>(2, 0));
375 
376 #ifdef DEBUG
377  std::vector<Real> dxdeta(2), dydxi(2);
378 #endif
379 
380  hermite_compute_coefs(elem,dxdxi
381 #ifdef DEBUG
382  ,dxdeta,dydxi
383 #endif
384  );
385 
386  const ElemType type = elem->type();
387 
388  const Order totalorder =
389  order + add_p_level*elem->p_level();
390 
391  switch (type)
392  {
393  case QUAD4:
394  case QUADSHELL4:
395  libmesh_assert_less (totalorder, 4);
396  libmesh_fallthrough();
397  case QUAD8:
398  case QUADSHELL8:
399  case QUAD9:
400  case QUADSHELL9:
401  {
402  libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u));
403 
404  std::vector<unsigned int> bases1D;
405 
406  Real coef = hermite_bases_2D(bases1D, dxdxi, totalorder, i);
407 
408  switch (j)
409  {
410  case 0:
411  return coef *
413  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1));
414  case 1:
415  return coef *
416  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
417  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1));
418  case 2:
419  return coef *
420  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
422  default:
423  libmesh_error_msg("Invalid derivative index j = " << j);
424  }
425  }
426  default:
427  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
428  }
429 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape_second_deriv() [110/233]

RealGradient libMesh::FE< 3, HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 366 of file fe_hierarchic_vec.C.

369 {
370  Real value = FE<3,HIERARCHIC>::shape_second_deriv( type, order, i/3, j, p );
371 
372  switch( i%3 )
373  {
374  case 0:
375  return libMesh::RealGradient( value );
376 
377  case 1:
378  return libMesh::RealGradient( Real(0), value );
379 
380  case 2:
381  return libMesh::RealGradient( Real(0), Real(0), value );
382 
383  default:
384  libmesh_error_msg("i%3 must be 0, 1, or 2!");
385  }
386 
387  //dummy
388  return libMesh::RealGradient();
389 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [111/233]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 369 of file fe_hierarchic_shape_1D.C.

375 {
376  libmesh_assert(elem);
377 
378  return fe_hierarchic_1D_shape_second_deriv(elem->type(),
379  order + add_p_level*elem->p_level(), i, j, p);
380 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [112/233]

static OutputShape libMesh::FE< Dim, T >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level = true 
)
staticinherited
Returns
The second \( j^{th} \) derivative of the \( i^{th} \) shape function at the point p.
Note
Cross-derivatives are indexed according to: j = 0 ==> d^2 phi / dxi^2 j = 1 ==> d^2 phi / dxi deta j = 2 ==> d^2 phi / deta^2 j = 3 ==> d^2 phi / dxi dzeta j = 4 ==> d^2 phi / deta dzeta j = 5 ==> d^2 phi / dzeta^2
Computing second derivatives is not currently supported for all element types: \( C^1 \) (Clough, Hermite and Subdivision), Lagrange, Hierarchic, L2_Hierarchic, and Monomial are supported. All other element types return an error when asked for second derivatives.

On a p-refined element, o should be the total order of the element.

◆ shape_second_deriv() [113/233]

Real libMesh::FE< 0, SIDE_HIERARCHIC >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 377 of file fe_hierarchic_shape_0D.C.

383 {
384  libmesh_error_msg("No spatial derivatives in 0D!");
385  return 0.;
386 }

◆ shape_second_deriv() [114/233]

Real libMesh::FE< 1, L2_HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 384 of file fe_hierarchic_shape_1D.C.

390 {
391  libmesh_assert(elem);
392  return fe_hierarchic_1D_shape_second_deriv(elem->type(),
393  fet.order + add_p_level*elem->p_level(), i, j, p);
394 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [115/233]

Real libMesh::FE< 1, HERMITE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 385 of file fe_hermite_shape_1D.C.

390 {
391  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
392  return 0.;
393 }

◆ shape_second_deriv() [116/233]

Real libMesh::FE< 1, CLOUGH >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 385 of file fe_clough_shape_1D.C.

391 {
392  libmesh_assert(elem);
393 
394  clough_compute_coefs(elem);
395 
396  const ElemType type = elem->type();
397 
398  const Order totalorder =
399  order + add_p_level*elem->p_level();
400 
401  switch (totalorder)
402  {
403  // 3rd-order C1 cubic element
404  case THIRD:
405  {
406  switch (type)
407  {
408  // C1 functions on the C1 cubic edge
409  case EDGE2:
410  case EDGE3:
411  {
412  switch (i)
413  {
414  case 0:
415  return clough_raw_shape_second_deriv(0, j, p);
416  case 1:
417  return clough_raw_shape_second_deriv(1, j, p);
418  case 2:
419  return d1xd1x * clough_raw_shape_second_deriv(2, j, p);
420  case 3:
421  return d2xd2x * clough_raw_shape_second_deriv(3, j, p);
422  default:
423  libmesh_error_msg("Invalid shape function index i = " << i);
424  }
425  }
426  default:
427  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
428  }
429  }
430  // by default throw an error
431  default:
432  libmesh_error_msg("ERROR: Unsupported polynomial order = " << totalorder);
433  }
434 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_second_deriv() [117/233]

Real libMesh::FE< 2, XYZ >::shape_second_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point point_in,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 394 of file fe_xyz_shape_2D.C.

400 {
401 #if LIBMESH_DIM > 1
402 
403  libmesh_assert_less_equal (j, 2);
404  libmesh_assert(elem);
405 
406  Point avg = elem->vertex_average();
407  Point max_distance = Point(0.,0.,0.);
408  for (auto p : make_range(elem->n_nodes()))
409  for (unsigned int d = 0; d < 2; d++)
410  {
411  const Real distance = std::abs(avg(d) - elem->point(p)(d));
412  max_distance(d) = std::max(distance, max_distance(d));
413  }
414 
415  const Real x = point_in(0);
416  const Real y = point_in(1);
417  const Real xc = avg(0);
418  const Real yc = avg(1);
419  const Real distx = max_distance(0);
420  const Real disty = max_distance(1);
421  const Real dx = (x - xc)/distx;
422  const Real dy = (y - yc)/disty;
423  const Real dist2x = pow(distx,2.);
424  const Real dist2y = pow(disty,2.);
425  const Real distxy = distx * disty;
426 
427 #ifndef NDEBUG
428  // totalorder is only used in the assertion below, so
429  // we avoid declaring it when asserts are not active.
430  const unsigned int totalorder = order + add_p_level * elem->p_level();
431 #endif
432  libmesh_assert_less (i, (totalorder+1)*(totalorder+2)/2);
433 
434  // monomials. since they are hierarchic we only need one case block.
435 
436  switch (j)
437  {
438  // d^2()/dx^2
439  case 0:
440  {
441  switch (i)
442  {
443  // constants
444  case 0:
445  // linears
446  case 1:
447  case 2:
448  return 0.;
449 
450  // quadratics
451  case 3:
452  return 2./dist2x;
453 
454  case 4:
455  case 5:
456  return 0.;
457 
458  // cubics
459  case 6:
460  return 6.*dx/dist2x;
461 
462  case 7:
463  return 2.*dy/dist2x;
464 
465  case 8:
466  case 9:
467  return 0.;
468 
469  // quartics
470  case 10:
471  return 12.*dx*dx/dist2x;
472 
473  case 11:
474  return 6.*dx*dy/dist2x;
475 
476  case 12:
477  return 2.*dy*dy/dist2x;
478 
479  case 13:
480  case 14:
481  return 0.;
482 
483  default:
484  unsigned int o = 0;
485  for (; i >= (o+1)*(o+2)/2; o++) { }
486  unsigned int i2 = i - (o*(o+1)/2);
487  Real val = (o - i2) * (o - i2 - 1);
488  for (unsigned int index=i2+2; index < o; index++)
489  val *= dx;
490  for (unsigned int index=0; index != i2; index++)
491  val *= dy;
492  return val/dist2x;
493  }
494  }
495 
496  // d^2()/dxdy
497  case 1:
498  {
499  switch (i)
500  {
501  // constants
502  case 0:
503 
504  // linears
505  case 1:
506  case 2:
507  return 0.;
508 
509  // quadratics
510  case 3:
511  return 0.;
512 
513  case 4:
514  return 1./distxy;
515 
516  case 5:
517  return 0.;
518 
519  // cubics
520  case 6:
521  return 0.;
522  case 7:
523  return 2.*dx/distxy;
524 
525  case 8:
526  return 2.*dy/distxy;
527 
528  case 9:
529  return 0.;
530 
531  // quartics
532  case 10:
533  return 0.;
534 
535  case 11:
536  return 3.*dx*dx/distxy;
537 
538  case 12:
539  return 4.*dx*dy/distxy;
540 
541  case 13:
542  return 3.*dy*dy/distxy;
543 
544  case 14:
545  return 0.;
546 
547  default:
548  unsigned int o = 0;
549  for (; i >= (o+1)*(o+2)/2; o++) { }
550  unsigned int i2 = i - (o*(o+1)/2);
551  Real val = (o - i2) * i2;
552  for (unsigned int index=i2+1; index < o; index++)
553  val *= dx;
554  for (unsigned int index=1; index < i2; index++)
555  val *= dy;
556  return val/distxy;
557  }
558  }
559 
560  // d^2()/dy^2
561  case 2:
562  {
563  switch (i)
564  {
565  // constants
566  case 0:
567 
568  // linears
569  case 1:
570  case 2:
571  return 0.;
572 
573  // quadratics
574  case 3:
575  case 4:
576  return 0.;
577 
578  case 5:
579  return 2./dist2y;
580 
581  // cubics
582  case 6:
583  return 0.;
584 
585  case 7:
586  return 0.;
587 
588  case 8:
589  return 2.*dx/dist2y;
590 
591  case 9:
592  return 6.*dy/dist2y;
593 
594  // quartics
595  case 10:
596  case 11:
597  return 0.;
598 
599  case 12:
600  return 2.*dx*dx/dist2y;
601 
602  case 13:
603  return 6.*dx*dy/dist2y;
604 
605  case 14:
606  return 12.*dy*dy/dist2y;
607 
608  default:
609  unsigned int o = 0;
610  for (; i >= (o+1)*(o+2)/2; o++) { }
611  unsigned int i2 = i - (o*(o+1)/2);
612  Real val = i2 * (i2 - 1);
613  for (unsigned int index=i2; index != o; index++)
614  val *= dx;
615  for (unsigned int index=2; index < i2; index++)
616  val *= dy;
617  return val/dist2y;
618  }
619  }
620 
621  default:
622  libmesh_error_msg("Invalid shape function derivative j = " << j);
623  }
624 
625 #else // LIBMESH_DIM <= 1
626  libmesh_assert(true || order || add_p_level);
627  libmesh_ignore(elem, i, j, point_in);
628  libmesh_not_implemented();
629 #endif
630 }
Real distance(const Point &p)
void libmesh_ignore(const Args &...)
T pow(const T &x)
Definition: utility.h:328
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140

◆ shape_second_deriv() [118/233]

Real libMesh::FE< 1, HERMITE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 396 of file fe_hermite_shape_1D.C.

402 {
403  return FE<1,HERMITE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
404 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [119/233]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 398 of file fe_hierarchic_shape_1D.C.

404 {
405  return 0.;
406 }

◆ shape_second_deriv() [120/233]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  libmesh_dbg_vari,
const unsigned int  libmesh_dbg_varj,
const Point ,
const bool  add_p_level 
)
inherited

Definition at line 404 of file fe_raviart_shape_3D.C.

410 {
411 #if LIBMESH_DIM == 3
412 
413  libmesh_assert(elem);
414 
415  // j = 0 ==> d^2 phi / dxi^2
416  // j = 1 ==> d^2 phi / dxi deta
417  // j = 2 ==> d^2 phi / deta^2
418  // j = 3 ==> d^2 phi / dxi dzeta
419  // j = 4 ==> d^2 phi / deta dzeta
420  // j = 5 ==> d^2 phi / dzeta^2
421  libmesh_assert_less (j, 6);
422 
423  const Order totalorder = order + add_p_level*elem->p_level();
424  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
425 
426  switch (totalorder)
427  {
428  // linear Raviart-Thomas shape function second derivatives
429  case FIRST:
430  {
431  switch (elem->type())
432  {
433  // All second derivatives for linear hexes and tets are zero.
434  case HEX27:
435  case TET14:
436  return RealGradient();
437 
438  default:
439  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
440 
441  } //switch(type)
442  }
443 
444  // unsupported order
445  default:
446  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
447  }
448 
449 #else // LIBMESH_DIM != 3
450  libmesh_assert(true || p(0));
451  libmesh_ignore(elem, order, i, j, add_p_level);
452  libmesh_not_implemented();
453 #endif
454 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)

◆ shape_second_deriv() [121/233]

RealGradient libMesh::FE< 3, L2_HIERARCHIC_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 407 of file fe_hierarchic_vec.C.

410 {
411  return FE<3,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
412 }

◆ shape_second_deriv() [122/233]

Real libMesh::FE< 1, SIDE_HIERARCHIC >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 410 of file fe_hierarchic_shape_1D.C.

416 {
417  return 0.;
418 }

◆ shape_second_deriv() [123/233]

Real libMesh::FE< 1, BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  order,
const unsigned int  i,
const unsigned int  libmesh_dbg_varj,
const Point p 
)
inherited

Definition at line 412 of file fe_bernstein_shape_1D.C.

417 {
418  // only d^2()/dxi^2 in 1D!
419 
420  libmesh_assert_equal_to (j, 0);
421 
422  const Real xi = p(0);
423 
424  using Utility::pow;
425 
426  switch (order)
427  {
428  case FIRST:
429 
430  switch(i)
431  {
432  case 0:
433  case 1:
434  return 0;
435  default:
436  libmesh_error_msg("Invalid shape function index i = " << i);
437  }
438 
439  case SECOND:
440 
441  switch(i)
442  {
443  case 0:
444  case 1:
445  return .5;
446  case 2:
447  return -1;
448  default:
449  libmesh_error_msg("Invalid shape function index i = " << i);
450  }
451 
452  case THIRD:
453 
454  switch(i)
455  {
456  case 0:
457  return 0.75*(1.-xi);
458  case 1:
459  return 0.75*(1.+xi);
460  case 2:
461  return -.75 + 2.25*xi;
462  case 3:
463  return -.75 - 2.25*xi;
464  default:
465  libmesh_error_msg("Invalid shape function index i = " << i);
466  }
467 
468  case FOURTH:
469 
470  switch(i)
471  {
472  case 0:
473  return 0.75*pow<2>(1.-xi);
474  case 1:
475  return 0.75*pow<2>(1.+xi);
476  case 2:
477  return 3*(xi - pow<2>(xi));
478  case 3:
479  return 1.5*(3*pow<2>(xi)-1);
480  case 4:
481  return -3*xi-3*pow<2>(xi);
482  default:
483  libmesh_error_msg("Invalid shape function index i = " << i);
484  }
485 
486  case FIFTH:
487 
488  switch(i)
489  {
490  case 0:
491  return -(5./8.)*pow<3>(xi-1.);
492  case 1:
493  return (5./8.)*pow<3>(xi+1.);
494  case 2:
495  return -(5./4.)*pow<3>(1.-xi) + (15./8.)*(1.+xi)*pow<2>(1.-xi);
496  case 3:
497  return -(15./ 4.)*(1.+xi)*pow<2>(1.-xi) + (5./ 8.)*pow<3>(1.-xi)
498  + (15./8.)*pow<2>(1.+xi)*(1.-xi);
499  case 4:
500  return (5./ 8.)*pow<3>(1.+xi) - (15./ 4.)*pow<2>(1.+xi)*(1.-xi)
501  +(15./8.)*(1.+xi)*pow<2>(1.-xi);
502  case 5:
503  return -(5./ 8.)*pow<3>(1.+xi) + (15./ 8.)*pow<2>(1.+xi)*(1.-xi)
504  -(5./8.)*pow<3>(1.+xi);
505  default:
506  libmesh_error_msg("Invalid shape function index i = " << i);
507  }
508 
509  case SIXTH:
510 
511  switch(i)
512  {
513  case 0:
514  return ( 15./32.)*pow<4>(1.-xi);
515  case 1:
516  return ( 15./32.)*pow<4>(1.+xi);
517  case 2:
518  return -( 15./8.)*pow<4>(1.-xi) +
519  ( 15./8.)*(1.+xi)*pow<3>(1.-xi);
520  case 3:
521  return -(15./4.)*(1.+xi)*pow<3>(1.-xi)
522  + (15./32.)*pow<4>(1.-xi)
523  + (45./16.)*pow<2>(1.+xi)*pow<2>(1.-xi);
524  case 4:
525  return -(15./ 8.) +(45./4.)*pow<2>(xi) - (75./8.)*pow<4>(xi);
526  case 5:
527  return -(15./4.)*(1.-xi)*pow<3>(1.+xi)
528  + (15./32.)*pow<4>(1.+xi)
529  + (45./16.)*pow<2>(1.-xi)*pow<2>(1.+xi);
530  case 6:
531  return -(15./16.)*pow<4>(1.+xi)
532  + (15./8.)*pow<3>(1.+xi)*(1.-xi);
533  default:
534  libmesh_error_msg("Invalid shape function index i = " << i);
535  }
536 
537 
538  default:
539  {
540  libmesh_assert (order>6);
541 
542  // Use this for arbitrary orders
543  const int p_order = static_cast<int>(order);
544  const int m = p_order-(i-1);
545  const int n = (i-1);
546 
547  Real binomial_p_i = 1;
548 
549  // the binomial coefficient (p choose n)
550  // Using an unsigned long here will work for any of the orders we support.
551  // Explicitly construct a Real to prevent conversion warnings
552  if (i>1)
553  binomial_p_i = Real(Utility::binomial(static_cast<unsigned long>(p_order),
554  static_cast<unsigned long>(n)));
555 
556  switch(i)
557  {
558  case 0:
559  return binomial_p_i * (1./4.) * p_order * (p_order-1) * std::pow((1-xi)/2, p_order-2);
560  case 1:
561  return binomial_p_i * (1./4.) * p_order * (p_order-1) * std::pow((1+xi)/2, p_order-2);
562 
563  default:
564  {
565  Real val = 0;
566 
567  if (n == 1)
568  val +=
569  binomial_p_i * (-1./4. * m * std::pow((1-xi)/2,m-1));
570  else
571  val +=
572  binomial_p_i * (-1./4. * n * m * std::pow((1+xi)/2,n-1) * std::pow((1-xi)/2,m-1) +
573  1./4. * n * (n-1) * std::pow((1+xi)/2,n-2) * std::pow((1-xi)/2,m));
574 
575  if (m == 1)
576  val += binomial_p_i * (-1./4. * n * std::pow((1+xi)/2,n-1));
577  else
578  val +=
579  binomial_p_i * (1./4. * m * (m-1) * std::pow((1+xi)/2,n) * std::pow((1-xi)/2,m-2)
580  - 1./4. * m * n * std::pow((1+xi)/2,n-1) * std::pow((1-xi)/2,m-1));
581 
582  return val;
583  }
584  }
585  }
586 
587  }
588 }
T pow(const T &x)
Definition: utility.h:328
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
T binomial(T n, T k)
Definition: utility.h:354

◆ shape_second_deriv() [124/233]

RealVectorValue libMesh::FE< 0, MONOMIAL_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 421 of file fe_monomial_vec.C.

427 {
428  Real value = FE<0, MONOMIAL>::shape_second_deriv(
429  elem->type(), order + add_p_level*elem->p_level(), i, j, p);
431 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [125/233]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point ,
const bool  add_p_level 
)
inherited

Definition at line 424 of file fe_nedelec_one_shape_3D.C.

430 {
431 #if LIBMESH_DIM == 3
432 
433  libmesh_assert(elem);
434 
435  // j = 0 ==> d^2 phi / dxi^2
436  // j = 1 ==> d^2 phi / dxi deta
437  // j = 2 ==> d^2 phi / deta^2
438  // j = 3 ==> d^2 phi / dxi dzeta
439  // j = 4 ==> d^2 phi / deta dzeta
440  // j = 5 ==> d^2 phi / dzeta^2
441  libmesh_assert_less (j, 6);
442 
443  const Order totalorder = order + add_p_level*elem->p_level();
444  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
445 
446  const char sign = elem->positive_edge_orientation(i) ? 1 : -1;
447 
448  switch (totalorder)
449  {
450  // linear Nedelec (first kind) shape function second derivatives
451  case FIRST:
452  {
453  switch (elem->type())
454  {
455  case HEX20:
456  case HEX27:
457  {
458  switch (j)
459  {
460  // d^2()/dxi^2, d^2()/deta^2, d^2()/dzeta^2
461  case 0:
462  case 2:
463  case 5:
464  return RealGradient();
465 
466  // d^2()/dxideta
467  case 1:
468  {
469  switch(i)
470  {
471  case 0:
472  case 1:
473  case 2:
474  case 3:
475  case 8:
476  case 9:
477  case 10:
478  case 11:
479  return RealGradient();
480  case 4:
481  case 6:
482  return sign * RealGradient( 0.0, 0.0, -0.125 );
483  case 5:
484  case 7:
485  return sign * RealGradient( 0.0, 0.0, 0.125 );
486 
487  default:
488  libmesh_error_msg("Invalid i = " << i);
489  } // switch(i)
490 
491  } // j = 1
492 
493  // d^2()/dxidzeta
494  case 3:
495  {
496  switch(i)
497  {
498  case 0:
499  case 2:
500  case 4:
501  case 5:
502  case 6:
503  case 7:
504  case 8:
505  case 10:
506  return RealGradient();
507  case 1:
508  case 3:
509  case 11:
510  return sign * RealGradient( 0.0, 0.125 );
511  case 9:
512  return sign * RealGradient( 0.0, -0.125, 0.0 );
513 
514  default:
515  libmesh_error_msg("Invalid i = " << i);
516  } // switch(i)
517 
518  } // j = 3
519 
520  // d^2()/detadzeta
521  case 4:
522  {
523  switch(i)
524  {
525  case 0:
526  return sign * RealGradient( -0.125, 0.0, 0.0 );
527  case 1:
528  case 3:
529  case 4:
530  case 5:
531  case 6:
532  case 7:
533  case 9:
534  case 11:
535  return RealGradient();
536  case 2:
537  case 8:
538  case 10:
539  return sign * RealGradient( 0.125, 0.0, 0.0 );
540 
541  default:
542  libmesh_error_msg("Invalid i = " << i);
543  } // switch(i)
544 
545  } // j = 4
546 
547  default:
548  libmesh_error_msg("Invalid j = " << j);
549  }
550  }
551 
552  // All second derivatives for linear tets are zero.
553  case TET10:
554  case TET14:
555  return RealGradient();
556 
557  default:
558  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
559 
560  } //switch(type)
561 
562  }
563 
564  // unsupported order
565  default:
566  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
567  }
568 
569 #else // LIBMESH_DIM != 3
570  libmesh_assert(true || p(0));
571  libmesh_ignore(elem, order, i, j, add_p_level);
572  libmesh_not_implemented();
573 #endif
574 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)

◆ shape_second_deriv() [126/233]

Real libMesh::FE< 2, HERMITE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 433 of file fe_hermite_shape_2D.C.

438 {
439  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
440  return 0.;
441 }

◆ shape_second_deriv() [127/233]

RealGradient libMesh::FE< 0, HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 436 of file fe_hierarchic_vec.C.

440 {
441  Real value = FE<0,HIERARCHIC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
442  return libMesh::RealGradient( value );
443 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [128/233]

Real libMesh::FE< 1, CLOUGH >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 438 of file fe_clough_shape_1D.C.

443 {
444  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
445  return 0.;
446 }

◆ shape_second_deriv() [129/233]

Real libMesh::FE< 2, HERMITE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 445 of file fe_hermite_shape_2D.C.

451 {
452  return FE<2,HERMITE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
453 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [130/233]

Real libMesh::FE< 1, CLOUGH >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 449 of file fe_clough_shape_1D.C.

455 {
456  return FE<1,CLOUGH>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
457 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [131/233]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 458 of file fe_raviart_shape_3D.C.

464 {
465  return FE<3,RAVIART_THOMAS>::shape_second_deriv(elem, order, i, j, p, add_p_level);
466 }

◆ shape_second_deriv() [132/233]

RealGradient libMesh::FE< 0, L2_HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 464 of file fe_hierarchic_vec.C.

468 {
469  return FE<0,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
470 }

◆ shape_second_deriv() [133/233]

RealVectorValue libMesh::FE< 1, MONOMIAL_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 465 of file fe_monomial_vec.C.

471 {
472  Real value = FE<1, MONOMIAL>::shape_second_deriv(
473  elem->type(), order + add_p_level*elem->p_level(), i, j, p);
475 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [134/233]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 470 of file fe_raviart_shape_3D.C.

475 {
476  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
477  return RealGradient();
478 }
RealVectorValue RealGradient

◆ shape_second_deriv() [135/233]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 473 of file fe_nedelec_one.C.

475 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [136/233]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 477 of file fe_nedelec_one.C.

479 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [137/233]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 482 of file fe_raviart_shape_3D.C.

487 {
488  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
489  return RealGradient();
490 }
RealVectorValue RealGradient

◆ shape_second_deriv() [138/233]

RealGradient libMesh::FE< 1, HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 492 of file fe_hierarchic_vec.C.

496 {
497  Real value = FE<1,HIERARCHIC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
498  return libMesh::RealGradient( value );
499 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [139/233]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 494 of file fe_raviart_shape_3D.C.

500 {
501  return FE<3,RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
502 }

◆ shape_second_deriv() [140/233]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 500 of file fe_nedelec_one.C.

502 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [141/233]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 504 of file fe_nedelec_one.C.

506 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [142/233]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 506 of file fe_raviart_shape_3D.C.

512 {
513  return FE<3,L2_RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
514 }

◆ shape_second_deriv() [143/233]

RealGradient libMesh::FE< 1, L2_HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 520 of file fe_hierarchic_vec.C.

524 {
525  return FE<1,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
526 }

◆ shape_second_deriv() [144/233]

RealVectorValue libMesh::FE< 2, MONOMIAL_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 537 of file fe_monomial_vec.C.

543 {
544  Real value = FE<2, MONOMIAL>::shape_second_deriv(
545  elem->type(), order + add_p_level*elem->p_level(), i / 2, j, p);
546 
547  switch (i % 2)
548  {
549  case 0:
551 
552  case 1:
553  return libMesh::RealVectorValue(Real(0), value);
554 
555  default:
556  libmesh_error_msg("i%2 must be either 0 or 1!");
557  }
558 
559  // dummy
560  return libMesh::RealVectorValue();
561 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [145/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 544 of file fe_bernstein_shape_2D.C.

550 {
551  libmesh_assert(elem);
552 
553  const ElemType type = elem->type();
554 
555  const Order totalorder =
556  order + add_p_level*elem->p_level();
557 
558  switch (type)
559  {
560  // Hierarchic shape functions on the quadrilateral.
561  case QUAD4:
562  case QUAD9:
563  case QUADSHELL9:
564  {
565  // Compute quad shape functions as a tensor-product
566  auto [i0, i1] = quad_i0_i1(i, totalorder, *elem);
567 
568  switch (j)
569  {
570  // d^2() / dxi^2
571  case 0:
572  return (FE<1,BERNSTEIN>::shape_second_deriv(EDGE3, totalorder, i0, 0, p(0))*
573  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1, p(1)));
574 
575  // d^2() / dxi deta
576  case 1:
577  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0, 0, p(0))*
578  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1, 0, p(1)));
579 
580  // d^2() / deta^2
581  case 2:
582  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0, p(0))*
583  FE<1,BERNSTEIN>::shape_second_deriv(EDGE3, totalorder, i1, 0, p(1)));
584 
585  default:
586  libmesh_error_msg("Invalid shape function derivative j = " << j);
587  }
588  }
589 
590  // Going to be lazy again about the hard cases.
591  case TRI3:
592  case TRISHELL3:
593  libmesh_assert_less (totalorder, 2);
594  libmesh_fallthrough();
595  case QUAD8:
596  case QUADSHELL8:
597  case TRI6:
598  case TRI7:
599  {
600  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
602  }
603 
604  default:
605  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
606  }
607 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)
OutputShape fe_fdm_second_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*deriv_func)(const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool))
Definition: fe.C:969
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_second_deriv() [146/233]

Real libMesh::FE< 3, HERMITE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 575 of file fe_hermite_shape_3D.C.

581 {
582  libmesh_assert(elem);
583 
584  std::vector<std::vector<Real>> dxdxi(3, std::vector<Real>(2, 0));
585 
586 #ifdef DEBUG
587  std::vector<Real> dydxi(2), dzdeta(2), dxdzeta(2);
588  std::vector<Real> dzdxi(2), dxdeta(2), dydzeta(2);
589 #endif //DEBUG
590 
591  hermite_compute_coefs(elem, dxdxi
592 #ifdef DEBUG
593  , dydxi, dzdeta, dxdzeta, dzdxi, dxdeta, dydzeta
594 #endif
595  );
596 
597  const ElemType type = elem->type();
598 
599  const Order totalorder =
600  order + add_p_level*elem->p_level();
601 
602  switch (totalorder)
603  {
604  // 3rd-order tricubic Hermite functions
605  case THIRD:
606  {
607  switch (type)
608  {
609  case HEX8:
610  case HEX20:
611  case HEX27:
612  {
613  libmesh_assert_less (i, 64);
614 
615  std::vector<unsigned int> bases1D;
616 
617  Real coef = hermite_bases_3D(bases1D, dxdxi, totalorder, i);
618 
619  switch (j) // Derivative type
620  {
621  case 0:
622  return coef *
624  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1)) *
625  FEHermite<1>::hermite_raw_shape(bases1D[2],p(2));
626  break;
627  case 1:
628  return coef *
629  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
630  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1)) *
631  FEHermite<1>::hermite_raw_shape(bases1D[2],p(2));
632  break;
633  case 2:
634  return coef *
635  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
637  FEHermite<1>::hermite_raw_shape(bases1D[2],p(2));
638  break;
639  case 3:
640  return coef *
641  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
642  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1)) *
643  FEHermite<1>::hermite_raw_shape_deriv(bases1D[2],p(2));
644  break;
645  case 4:
646  return coef *
647  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
648  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1)) *
649  FEHermite<1>::hermite_raw_shape_deriv(bases1D[2],p(2));
650  break;
651  case 5:
652  return coef *
653  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
654  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1)) *
656  break;
657  default:
658  libmesh_error_msg("Invalid shape function derivative j = " << j);
659  }
660 
661  }
662  default:
663  libmesh_error_msg("ERROR: Unsupported element type " << Utility::enum_to_string(type));
664  }
665  }
666  // by default throw an error
667  default:
668  libmesh_error_msg("ERROR: Unsupported polynomial order " << totalorder);
669  }
670 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Hermite finite elements.
Definition: fe.h:853
virtual ElemType type() const =0

◆ shape_second_deriv() [147/233]

RealGradient libMesh::FE< 2, HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 576 of file fe_hierarchic_vec.C.

580 {
581  const Real value = FE<2,HIERARCHIC>::shape_second_deriv(elem, order, i/2, j, p, add_p_level);
582 
583  switch( i%2 )
584  {
585  case 0:
586  return libMesh::RealGradient( value );
587 
588  case 1:
589  return libMesh::RealGradient( Real(0), value );
590 
591  default:
592  libmesh_error_msg("i%2 must be either 0 or 1!");
593  }
594 
595  //dummy
596  return libMesh::RealGradient();
597 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [148/233]

Real libMesh::FE< 3, LAGRANGE >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 576 of file fe_lagrange_shape_3D.C.

581 {
582  return fe_lagrange_3D_shape_second_deriv<LAGRANGE>(type, order, nullptr, i, j, p);
583 }

◆ shape_second_deriv() [149/233]

Real libMesh::FE< 2, MONOMIAL >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 577 of file fe_monomial_shape_2D.C.

583 {
584  libmesh_assert(elem);
585 
586  // by default call the orientation-independent shape functions
587  return FE<2,MONOMIAL>::shape_second_deriv(elem->type(), order + add_p_level*elem->p_level(), i, j, p);
588 }
libmesh_assert(ctx)

◆ shape_second_deriv() [150/233]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 578 of file fe_nedelec_one_shape_3D.C.

583 {
584  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
585  return RealGradient();
586 }
RealVectorValue RealGradient

◆ shape_second_deriv() [151/233]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 579 of file fe_raviart.C.

581 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [152/233]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 583 of file fe_raviart.C.

585 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [153/233]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 587 of file fe_raviart.C.

589 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [154/233]

Real libMesh::FE< 3, L2_LAGRANGE >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 588 of file fe_lagrange_shape_3D.C.

593 {
594  return fe_lagrange_3D_shape_second_deriv<L2_LAGRANGE>(type, order, nullptr, i, j, p);
595 }

◆ shape_second_deriv() [155/233]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 590 of file fe_nedelec_one_shape_3D.C.

596 {
597  return FE<3,NEDELEC_ONE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
598 }

◆ shape_second_deriv() [156/233]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 591 of file fe_raviart.C.

593 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [157/233]

Real libMesh::FE< 2, MONOMIAL >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 592 of file fe_monomial_shape_2D.C.

598 {
599  libmesh_assert(elem);
600  // by default call the orientation-independent shape functions
601  return FE<2,MONOMIAL>::shape_second_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
602 }
libmesh_assert(ctx)

◆ shape_second_deriv() [158/233]

Real libMesh::FE< 1, BERNSTEIN >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 593 of file fe_bernstein_shape_1D.C.

599 {
600  libmesh_assert(elem);
601 
602  return FE<1,BERNSTEIN>::shape_second_deriv
603  (elem->type(),
604  order + add_p_level*elem->p_level(), i, j, p);
605 }
libmesh_assert(ctx)

◆ shape_second_deriv() [159/233]

Real libMesh::FE< 3, LAGRANGE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 600 of file fe_lagrange_shape_3D.C.

606 {
607  libmesh_assert(elem);
608 
609  // call the orientation-independent shape function derivatives
610  return fe_lagrange_3D_shape_second_deriv<LAGRANGE>
611  (elem->type(), order + add_p_level*elem->p_level(), elem, i, j, p);
612 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [160/233]

Real libMesh::FE< 1, BERNSTEIN >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 608 of file fe_bernstein_shape_1D.C.

614 {
615  libmesh_assert(elem);
616  return FE<1,BERNSTEIN>::shape_second_deriv
617  (elem->type(),
618  fet.order + add_p_level*elem->p_level(), i, j, p);
619 }
libmesh_assert(ctx)

◆ shape_second_deriv() [161/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 611 of file fe_bernstein_shape_2D.C.

616 {
617  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge orientation is needed.");
618  return 0.;
619 }

◆ shape_second_deriv() [162/233]

Real libMesh::FE< 3, L2_LAGRANGE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 617 of file fe_lagrange_shape_3D.C.

623 {
624  libmesh_assert(elem);
625 
626  // call the orientation-independent shape function derivatives
627  return fe_lagrange_3D_shape_second_deriv<L2_LAGRANGE>
628  (elem->type(), order + add_p_level*elem->p_level(), elem, i, j, p);
629 }
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [163/233]

RealGradient libMesh::FE< 2, L2_HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 617 of file fe_hierarchic_vec.C.

621 {
622  return FE<2,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
623 }

◆ shape_second_deriv() [164/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 623 of file fe_bernstein_shape_2D.C.

629 {
630  libmesh_assert(elem);
631  return FE<2,BERNSTEIN>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
632 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape_second_deriv() [165/233]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 628 of file fe_raviart.C.

630 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [166/233]

RealVectorValue libMesh::FE< 3, MONOMIAL_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 630 of file fe_monomial_vec.C.

636 {
637  Real value = FE<3, MONOMIAL>::shape_second_deriv(
638  elem->type(), order + add_p_level*elem->p_level(), i / 3, j, p);
639 
640  switch (i % 3)
641  {
642  case 0:
644 
645  case 1:
646  return libMesh::RealVectorValue(Real(0), value);
647 
648  case 2:
649  return libMesh::RealVectorValue(Real(0), Real(0), value);
650 
651  default:
652  libmesh_error_msg("i%3 must be 0, 1, or 2!");
653  }
654 
655  // dummy
656  return libMesh::RealVectorValue();
657 }
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [167/233]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 632 of file fe_raviart.C.

634 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [168/233]

Real libMesh::FE< 3, LAGRANGE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 633 of file fe_lagrange_shape_3D.C.

639 {
640  libmesh_assert(elem);
641  return fe_lagrange_3D_shape_second_deriv<LAGRANGE>
642  (elem->type(), fet.order + add_p_level*elem->p_level(), elem, i, j, p);
643 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [169/233]

Real libMesh::FE< 2, XYZ >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 634 of file fe_xyz_shape_2D.C.

639 {
640  libmesh_error_msg("XYZ polynomials require the element.");
641  return 0.;
642 }

◆ shape_second_deriv() [170/233]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 636 of file fe_raviart.C.

638 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [171/233]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 640 of file fe_raviart.C.

642 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [172/233]

Real libMesh::FE< 2, XYZ >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 647 of file fe_xyz_shape_2D.C.

653 {
654  return FE<2,XYZ>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
655 }

◆ shape_second_deriv() [173/233]

Real libMesh::FE< 3, L2_LAGRANGE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 648 of file fe_lagrange_shape_3D.C.

654 {
655  libmesh_assert(elem);
656  return fe_lagrange_3D_shape_second_deriv<L2_LAGRANGE>
657  (elem->type(), fet.order + add_p_level*elem->p_level(), elem, i, j, p);
658 }
unsigned int p_level() const
Definition: elem.h:3108
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [174/233]

Real libMesh::FE< 3, HERMITE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 674 of file fe_hermite_shape_3D.C.

679 {
680  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
681  return 0.;
682 }

◆ shape_second_deriv() [175/233]

RealGradient libMesh::FE< 3, HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 681 of file fe_hierarchic_vec.C.

685 {
686  const Real value = FE<3,HIERARCHIC>::shape_second_deriv(elem, order, i/3, j, p, add_p_level);
687 
688  switch( i%3 )
689  {
690  case 0:
691  return libMesh::RealGradient( value );
692 
693  case 1:
694  return libMesh::RealGradient( Real(0), value );
695 
696  case 2:
697  return libMesh::RealGradient( Real(0), Real(0), value );
698 
699  default:
700  libmesh_error_msg("i%3 must be 0, 1, or 2!");
701  }
702 
703  //dummy
704  return libMesh::RealGradient();
705 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [176/233]

Real libMesh::FE< 3, HERMITE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 685 of file fe_hermite_shape_3D.C.

691 {
692  return FE<3,HERMITE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
693 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [177/233]

RealGradient libMesh::FE< 0, LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 686 of file fe_lagrange_vec.C.

689 {
690  Real value = FE<0,LAGRANGE>::shape_second_deriv( type, order, i, j, p );
691  return libMesh::RealGradient( value );
692 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [178/233]

Real libMesh::FE< 3, MONOMIAL >::shape_second_deriv ( const ElemType  ,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 690 of file fe_monomial_shape_3D.C.

695 {
696 #if LIBMESH_DIM == 3
697 
698  libmesh_assert_less (j, 6);
699 
700  libmesh_assert_less (i, (static_cast<unsigned int>(order)+1)*
701  (static_cast<unsigned int>(order)+2)*
702  (static_cast<unsigned int>(order)+3)/6);
703 
704  const Real xi = p(0);
705  const Real eta = p(1);
706  const Real zeta = p(2);
707 
708  // monomials. since they are hierarchic we only need one case block.
709  switch (j)
710  {
711  // d^2()/dxi^2
712  case 0:
713  {
714  switch (i)
715  {
716  // constant
717  case 0:
718 
719  // linear
720  case 1:
721  case 2:
722  case 3:
723  return 0.;
724 
725  // quadratic
726  case 4:
727  return 2.;
728 
729  case 5:
730  case 6:
731  case 7:
732  case 8:
733  case 9:
734  return 0.;
735 
736  // cubic
737  case 10:
738  return 6.*xi;
739 
740  case 11:
741  return 2.*eta;
742 
743  case 12:
744  case 13:
745  return 0.;
746 
747  case 14:
748  return 2.*zeta;
749 
750  case 15:
751  case 16:
752  case 17:
753  case 18:
754  case 19:
755  return 0.;
756 
757  // quartics
758  case 20:
759  return 12.*xi*xi;
760 
761  case 21:
762  return 6.*xi*eta;
763 
764  case 22:
765  return 2.*eta*eta;
766 
767  case 23:
768  case 24:
769  return 0.;
770 
771  case 25:
772  return 6.*xi*zeta;
773 
774  case 26:
775  return 2.*eta*zeta;
776 
777  case 27:
778  case 28:
779  return 0.;
780 
781  case 29:
782  return 2.*zeta*zeta;
783 
784  case 30:
785  case 31:
786  case 32:
787  case 33:
788  case 34:
789  return 0.;
790 
791  default:
792  unsigned int o = 0;
793  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
794  const int i2 = i - (o*(o+1)*(o+2)/6);
795  int block=o, nz = 0;
796  for (; block < i2; block += (o-nz+1)) { nz++; }
797  const int nx = block - i2;
798  const int ny = o - nx - nz;
799  Real val = nx * (nx - 1);
800  for (int index=2; index < nx; index++)
801  val *= xi;
802  for (int index=0; index != ny; index++)
803  val *= eta;
804  for (int index=0; index != nz; index++)
805  val *= zeta;
806  return val;
807  }
808  }
809 
810 
811  // d^2()/dxideta
812  case 1:
813  {
814  switch (i)
815  {
816  // constant
817  case 0:
818 
819  // linear
820  case 1:
821  case 2:
822  case 3:
823  return 0.;
824 
825  // quadratic
826  case 4:
827  return 0.;
828 
829  case 5:
830  return 1.;
831 
832  case 6:
833  case 7:
834  case 8:
835  case 9:
836  return 0.;
837 
838  // cubic
839  case 10:
840  return 0.;
841 
842  case 11:
843  return 2.*xi;
844 
845  case 12:
846  return 2.*eta;
847 
848  case 13:
849  case 14:
850  return 0.;
851 
852  case 15:
853  return zeta;
854 
855  case 16:
856  case 17:
857  case 18:
858  case 19:
859  return 0.;
860 
861  // quartics
862  case 20:
863  return 0.;
864 
865  case 21:
866  return 3.*xi*xi;
867 
868  case 22:
869  return 4.*xi*eta;
870 
871  case 23:
872  return 3.*eta*eta;
873 
874  case 24:
875  case 25:
876  return 0.;
877 
878  case 26:
879  return 2.*xi*zeta;
880 
881  case 27:
882  return 2.*eta*zeta;
883 
884  case 28:
885  case 29:
886  return 0.;
887 
888  case 30:
889  return zeta*zeta;
890 
891  case 31:
892  case 32:
893  case 33:
894  case 34:
895  return 0.;
896 
897  default:
898  unsigned int o = 0;
899  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
900  const int i2 = i - (o*(o+1)*(o+2)/6);
901  int block=o, nz = 0;
902  for (; block < i2; block += (o-nz+1)) { nz++; }
903  const int nx = block - i2;
904  const int ny = o - nx - nz;
905  Real val = nx * ny;
906  for (int index=1; index < nx; index++)
907  val *= xi;
908  for (int index=1; index < ny; index++)
909  val *= eta;
910  for (int index=0; index != nz; index++)
911  val *= zeta;
912  return val;
913  }
914  }
915 
916 
917  // d^2()/deta^2
918  case 2:
919  {
920  switch (i)
921  {
922  // constant
923  case 0:
924 
925  // linear
926  case 1:
927  case 2:
928  case 3:
929  return 0.;
930 
931  // quadratic
932  case 4:
933  case 5:
934  return 0.;
935 
936  case 6:
937  return 2.;
938 
939  case 7:
940  case 8:
941  case 9:
942  return 0.;
943 
944  // cubic
945  case 10:
946  case 11:
947  return 0.;
948 
949  case 12:
950  return 2.*xi;
951  case 13:
952  return 6.*eta;
953 
954  case 14:
955  case 15:
956  return 0.;
957 
958  case 16:
959  return 2.*zeta;
960 
961  case 17:
962  case 18:
963  case 19:
964  return 0.;
965 
966  // quartics
967  case 20:
968  case 21:
969  return 0.;
970 
971  case 22:
972  return 2.*xi*xi;
973 
974  case 23:
975  return 6.*xi*eta;
976 
977  case 24:
978  return 12.*eta*eta;
979 
980  case 25:
981  case 26:
982  return 0.;
983 
984  case 27:
985  return 2.*xi*zeta;
986 
987  case 28:
988  return 6.*eta*zeta;
989 
990  case 29:
991  case 30:
992  return 0.;
993 
994  case 31:
995  return 2.*zeta*zeta;
996 
997  case 32:
998  case 33:
999  case 34:
1000  return 0.;
1001 
1002  default:
1003  unsigned int o = 0;
1004  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1005  const int i2 = i - (o*(o+1)*(o+2)/6);
1006  int block=o, nz = 0;
1007  for (; block < i2; block += (o-nz+1)) { nz++; }
1008  const int nx = block - i2;
1009  const int ny = o - nx - nz;
1010  Real val = ny * (ny - 1);
1011  for (int index=0; index != nx; index++)
1012  val *= xi;
1013  for (int index=2; index < ny; index++)
1014  val *= eta;
1015  for (int index=0; index != nz; index++)
1016  val *= zeta;
1017  return val;
1018  }
1019  }
1020 
1021 
1022  // d^2()/dxidzeta
1023  case 3:
1024  {
1025  switch (i)
1026  {
1027  // constant
1028  case 0:
1029 
1030  // linear
1031  case 1:
1032  case 2:
1033  case 3:
1034  return 0.;
1035 
1036  // quadratic
1037  case 4:
1038  case 5:
1039  case 6:
1040  return 0.;
1041 
1042  case 7:
1043  return 1.;
1044 
1045  case 8:
1046  case 9:
1047  return 0.;
1048 
1049  // cubic
1050  case 10:
1051  case 11:
1052  case 12:
1053  case 13:
1054  return 0.;
1055 
1056  case 14:
1057  return 2.*xi;
1058 
1059  case 15:
1060  return eta;
1061 
1062  case 16:
1063  return 0.;
1064 
1065  case 17:
1066  return 2.*zeta;
1067 
1068  case 18:
1069  case 19:
1070  return 0.;
1071 
1072  // quartics
1073  case 20:
1074  case 21:
1075  case 22:
1076  case 23:
1077  case 24:
1078  return 0.;
1079 
1080  case 25:
1081  return 3.*xi*xi;
1082 
1083  case 26:
1084  return 2.*xi*eta;
1085 
1086  case 27:
1087  return eta*eta;
1088 
1089  case 28:
1090  return 0.;
1091 
1092  case 29:
1093  return 4.*xi*zeta;
1094 
1095  case 30:
1096  return 2.*eta*zeta;
1097 
1098  case 31:
1099  return 0.;
1100 
1101  case 32:
1102  return 3.*zeta*zeta;
1103 
1104  case 33:
1105  case 34:
1106  return 0.;
1107 
1108  default:
1109  unsigned int o = 0;
1110  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1111  const int i2 = i - (o*(o+1)*(o+2)/6);
1112  int block=o, nz = 0;
1113  for (; block < i2; block += (o-nz+1)) { nz++; }
1114  const int nx = block - i2;
1115  const int ny = o - nx - nz;
1116  Real val = nx * nz;
1117  for (int index=1; index < nx; index++)
1118  val *= xi;
1119  for (int index=0; index != ny; index++)
1120  val *= eta;
1121  for (int index=1; index < nz; index++)
1122  val *= zeta;
1123  return val;
1124  }
1125  }
1126 
1127  // d^2()/detadzeta
1128  case 4:
1129  {
1130  switch (i)
1131  {
1132  // constant
1133  case 0:
1134 
1135  // linear
1136  case 1:
1137  case 2:
1138  case 3:
1139  return 0.;
1140 
1141  // quadratic
1142  case 4:
1143  case 5:
1144  case 6:
1145  case 7:
1146  return 0.;
1147 
1148  case 8:
1149  return 1.;
1150 
1151  case 9:
1152  return 0.;
1153 
1154  // cubic
1155  case 10:
1156  case 11:
1157  case 12:
1158  case 13:
1159  case 14:
1160  return 0.;
1161 
1162  case 15:
1163  return xi;
1164 
1165  case 16:
1166  return 2.*eta;
1167 
1168  case 17:
1169  return 0.;
1170 
1171  case 18:
1172  return 2.*zeta;
1173 
1174  case 19:
1175  return 0.;
1176 
1177  // quartics
1178  case 20:
1179  case 21:
1180  case 22:
1181  case 23:
1182  case 24:
1183  case 25:
1184  return 0.;
1185 
1186  case 26:
1187  return xi*xi;
1188 
1189  case 27:
1190  return 2.*xi*eta;
1191 
1192  case 28:
1193  return 3.*eta*eta;
1194 
1195  case 29:
1196  return 0.;
1197 
1198  case 30:
1199  return 2.*xi*zeta;
1200 
1201  case 31:
1202  return 4.*eta*zeta;
1203 
1204  case 32:
1205  return 0.;
1206 
1207  case 33:
1208  return 3.*zeta*zeta;
1209 
1210  case 34:
1211  return 0.;
1212 
1213  default:
1214  unsigned int o = 0;
1215  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1216  const int i2 = i - (o*(o+1)*(o+2)/6);
1217  int block=o, nz = 0;
1218  for (; block < i2; block += (o-nz+1)) { nz++; }
1219  const int nx = block - i2;
1220  const int ny = o - nx - nz;
1221  Real val = ny * nz;
1222  for (int index=0; index != nx; index++)
1223  val *= xi;
1224  for (int index=1; index < ny; index++)
1225  val *= eta;
1226  for (int index=1; index < nz; index++)
1227  val *= zeta;
1228  return val;
1229  }
1230  }
1231 
1232 
1233  // d^2()/dzeta^2
1234  case 5:
1235  {
1236  switch (i)
1237  {
1238  // constant
1239  case 0:
1240 
1241  // linear
1242  case 1:
1243  case 2:
1244  case 3:
1245  return 0.;
1246 
1247  // quadratic
1248  case 4:
1249  case 5:
1250  case 6:
1251  case 7:
1252  case 8:
1253  return 0.;
1254 
1255  case 9:
1256  return 2.;
1257 
1258  // cubic
1259  case 10:
1260  case 11:
1261  case 12:
1262  case 13:
1263  case 14:
1264  case 15:
1265  case 16:
1266  return 0.;
1267 
1268  case 17:
1269  return 2.*xi;
1270 
1271  case 18:
1272  return 2.*eta;
1273 
1274  case 19:
1275  return 6.*zeta;
1276 
1277  // quartics
1278  case 20:
1279  case 21:
1280  case 22:
1281  case 23:
1282  case 24:
1283  case 25:
1284  case 26:
1285  case 27:
1286  case 28:
1287  return 0.;
1288 
1289  case 29:
1290  return 2.*xi*xi;
1291 
1292  case 30:
1293  return 2.*xi*eta;
1294 
1295  case 31:
1296  return 2.*eta*eta;
1297 
1298  case 32:
1299  return 6.*xi*zeta;
1300 
1301  case 33:
1302  return 6.*eta*zeta;
1303 
1304  case 34:
1305  return 12.*zeta*zeta;
1306 
1307  default:
1308  unsigned int o = 0;
1309  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1310  const int i2 = i - (o*(o+1)*(o+2)/6);
1311  int block=o, nz = 0;
1312  for (; block < i2; block += (o-nz+1)) { nz++; }
1313  const int nx = block - i2;
1314  const int ny = o - nx - nz;
1315  Real val = nz * (nz - 1);
1316  for (int index=0; index != nx; index++)
1317  val *= xi;
1318  for (int index=0; index != ny; index++)
1319  val *= eta;
1320  for (int index=2; index < nz; index++)
1321  val *= zeta;
1322  return val;
1323  }
1324  }
1325 
1326  default:
1327  libmesh_error_msg("Invalid j = " << j);
1328  }
1329 
1330 #else // LIBMESH_DIM != 3
1331  libmesh_assert(order);
1332  libmesh_ignore(i, j, p);
1333  libmesh_not_implemented();
1334 #endif
1335 }
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_second_deriv() [179/233]

Real libMesh::FE< 2, HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 695 of file fe_hierarchic_shape_2D.C.

700 {
701  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
702  return 0.;
703 }

◆ shape_second_deriv() [180/233]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 708 of file fe_hierarchic_shape_2D.C.

713 {
714  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
715  return 0.;
716 }

◆ shape_second_deriv() [181/233]

RealGradient libMesh::FE< 0, L2_LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 709 of file fe_lagrange_vec.C.

712 {
713  return FE<0,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
714 }

◆ shape_second_deriv() [182/233]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 721 of file fe_hierarchic_shape_2D.C.

726 {
727  libmesh_error_msg("Hierarchic shape functions require an Elem for edge orientation.");
728  return 0.;
729 }

◆ shape_second_deriv() [183/233]

RealGradient libMesh::FE< 3, L2_HIERARCHIC_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 726 of file fe_hierarchic_vec.C.

730 {
731  return FE<3,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
732 }

◆ shape_second_deriv() [184/233]

Real libMesh::FE< 3, XYZ >::shape_second_deriv ( const Elem elem,
const Order  libmesh_dbg_varorder,
const unsigned int  i,
const unsigned int  j,
const Point point_in,
const bool  libmesh_dbg_varadd_p_level 
)
inherited

Definition at line 732 of file fe_xyz_shape_3D.C.

738 {
739 #if LIBMESH_DIM == 3
740 
741  libmesh_assert(elem);
742  libmesh_assert_less (j, 6);
743 
744  Point avg = elem->vertex_average();
745  Point max_distance = Point(0.,0.,0.);
746  for (const Point & p : elem->node_ref_range())
747  for (unsigned int d = 0; d < 3; d++)
748  {
749  const Real distance = std::abs(avg(d) - p(d));
750  max_distance(d) = std::max(distance, max_distance(d));
751  }
752 
753  const Real x = point_in(0);
754  const Real y = point_in(1);
755  const Real z = point_in(2);
756  const Real xc = avg(0);
757  const Real yc = avg(1);
758  const Real zc = avg(2);
759  const Real distx = max_distance(0);
760  const Real disty = max_distance(1);
761  const Real distz = max_distance(2);
762  const Real dx = (x - xc)/distx;
763  const Real dy = (y - yc)/disty;
764  const Real dz = (z - zc)/distz;
765  const Real dist2x = pow(distx,2.);
766  const Real dist2y = pow(disty,2.);
767  const Real dist2z = pow(distz,2.);
768  const Real distxy = distx * disty;
769  const Real distxz = distx * distz;
770  const Real distyz = disty * distz;
771 
772 #ifndef NDEBUG
773  // totalorder is only used in the assertion below, so
774  // we avoid declaring it when asserts are not active.
775  const unsigned int totalorder = order + add_p_level*elem->p_level();
776 #endif
777  libmesh_assert_less (i, (totalorder+1) * (totalorder+2) *
778  (totalorder+3)/6);
779 
780  // monomials. since they are hierarchic we only need one case block.
781  switch (j)
782  {
783  // d^2()/dx^2
784  case 0:
785  {
786  switch (i)
787  {
788  // constant
789  case 0:
790 
791  // linear
792  case 1:
793  case 2:
794  case 3:
795  return 0.;
796 
797  // quadratic
798  case 4:
799  return 2./dist2x;
800 
801  case 5:
802  case 6:
803  case 7:
804  case 8:
805  case 9:
806  return 0.;
807 
808  // cubic
809  case 10:
810  return 6.*dx/dist2x;
811 
812  case 11:
813  return 2.*dy/dist2x;
814 
815  case 12:
816  case 13:
817  return 0.;
818 
819  case 14:
820  return 2.*dz/dist2x;
821 
822  case 15:
823  case 16:
824  case 17:
825  case 18:
826  case 19:
827  return 0.;
828 
829  // quartics
830  case 20:
831  return 12.*dx*dx/dist2x;
832 
833  case 21:
834  return 6.*dx*dy/dist2x;
835 
836  case 22:
837  return 2.*dy*dy/dist2x;
838 
839  case 23:
840  case 24:
841  return 0.;
842 
843  case 25:
844  return 6.*dx*dz/dist2x;
845 
846  case 26:
847  return 2.*dy*dz/dist2x;
848 
849  case 27:
850  case 28:
851  return 0.;
852 
853  case 29:
854  return 2.*dz*dz/dist2x;
855 
856  case 30:
857  case 31:
858  case 32:
859  case 33:
860  case 34:
861  return 0.;
862 
863  default:
864  unsigned int o = 0;
865  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
866  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
867  unsigned int block=o, nz = 0;
868  for (; block < i2; block += (o-nz+1)) { nz++; }
869  const unsigned int nx = block - i2;
870  const unsigned int ny = o - nx - nz;
871  Real val = nx * (nx - 1);
872  for (unsigned int index=2; index < nx; index++)
873  val *= dx;
874  for (unsigned int index=0; index != ny; index++)
875  val *= dy;
876  for (unsigned int index=0; index != nz; index++)
877  val *= dz;
878  return val/dist2x;
879  }
880  }
881 
882 
883  // d^2()/dxdy
884  case 1:
885  {
886  switch (i)
887  {
888  // constant
889  case 0:
890 
891  // linear
892  case 1:
893  case 2:
894  case 3:
895  return 0.;
896 
897  // quadratic
898  case 4:
899  return 0.;
900 
901  case 5:
902  return 1./distxy;
903 
904  case 6:
905  case 7:
906  case 8:
907  case 9:
908  return 0.;
909 
910  // cubic
911  case 10:
912  return 0.;
913 
914  case 11:
915  return 2.*dx/distxy;
916 
917  case 12:
918  return 2.*dy/distxy;
919 
920  case 13:
921  case 14:
922  return 0.;
923 
924  case 15:
925  return dz/distxy;
926 
927  case 16:
928  case 17:
929  case 18:
930  case 19:
931  return 0.;
932 
933  // quartics
934  case 20:
935  return 0.;
936 
937  case 21:
938  return 3.*dx*dx/distxy;
939 
940  case 22:
941  return 4.*dx*dy/distxy;
942 
943  case 23:
944  return 3.*dy*dy/distxy;
945 
946  case 24:
947  case 25:
948  return 0.;
949 
950  case 26:
951  return 2.*dx*dz/distxy;
952 
953  case 27:
954  return 2.*dy*dz/distxy;
955 
956  case 28:
957  case 29:
958  return 0.;
959 
960  case 30:
961  return dz*dz/distxy;
962 
963  case 31:
964  case 32:
965  case 33:
966  case 34:
967  return 0.;
968 
969  default:
970  unsigned int o = 0;
971  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
972  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
973  unsigned int block=o, nz = 0;
974  for (; block < i2; block += (o-nz+1)) { nz++; }
975  const unsigned int nx = block - i2;
976  const unsigned int ny = o - nx - nz;
977  Real val = nx * ny;
978  for (unsigned int index=1; index < nx; index++)
979  val *= dx;
980  for (unsigned int index=1; index < ny; index++)
981  val *= dy;
982  for (unsigned int index=0; index != nz; index++)
983  val *= dz;
984  return val/distxy;
985  }
986  }
987 
988 
989  // d^2()/dy^2
990  case 2:
991  {
992  switch (i)
993  {
994  // constant
995  case 0:
996 
997  // linear
998  case 1:
999  case 2:
1000  case 3:
1001  return 0.;
1002 
1003  // quadratic
1004  case 4:
1005  case 5:
1006  return 0.;
1007 
1008  case 6:
1009  return 2./dist2y;
1010 
1011  case 7:
1012  case 8:
1013  case 9:
1014  return 0.;
1015 
1016  // cubic
1017  case 10:
1018  case 11:
1019  return 0.;
1020 
1021  case 12:
1022  return 2.*dx/dist2y;
1023  case 13:
1024  return 6.*dy/dist2y;
1025 
1026  case 14:
1027  case 15:
1028  return 0.;
1029 
1030  case 16:
1031  return 2.*dz/dist2y;
1032 
1033  case 17:
1034  case 18:
1035  case 19:
1036  return 0.;
1037 
1038  // quartics
1039  case 20:
1040  case 21:
1041  return 0.;
1042 
1043  case 22:
1044  return 2.*dx*dx/dist2y;
1045 
1046  case 23:
1047  return 6.*dx*dy/dist2y;
1048 
1049  case 24:
1050  return 12.*dy*dy/dist2y;
1051 
1052  case 25:
1053  case 26:
1054  return 0.;
1055 
1056  case 27:
1057  return 2.*dx*dz/dist2y;
1058 
1059  case 28:
1060  return 6.*dy*dz/dist2y;
1061 
1062  case 29:
1063  case 30:
1064  return 0.;
1065 
1066  case 31:
1067  return 2.*dz*dz/dist2y;
1068 
1069  case 32:
1070  case 33:
1071  case 34:
1072  return 0.;
1073 
1074  default:
1075  unsigned int o = 0;
1076  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1077  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1078  unsigned int block=o, nz = 0;
1079  for (; block < i2; block += (o-nz+1)) { nz++; }
1080  const unsigned int nx = block - i2;
1081  const unsigned int ny = o - nx - nz;
1082  Real val = ny * (ny - 1);
1083  for (unsigned int index=0; index != nx; index++)
1084  val *= dx;
1085  for (unsigned int index=2; index < ny; index++)
1086  val *= dy;
1087  for (unsigned int index=0; index != nz; index++)
1088  val *= dz;
1089  return val/dist2y;
1090  }
1091  }
1092 
1093 
1094  // d^2()/dxdz
1095  case 3:
1096  {
1097  switch (i)
1098  {
1099  // constant
1100  case 0:
1101 
1102  // linear
1103  case 1:
1104  case 2:
1105  case 3:
1106  return 0.;
1107 
1108  // quadratic
1109  case 4:
1110  case 5:
1111  case 6:
1112  return 0.;
1113 
1114  case 7:
1115  return 1./distxz;
1116 
1117  case 8:
1118  case 9:
1119  return 0.;
1120 
1121  // cubic
1122  case 10:
1123  case 11:
1124  case 12:
1125  case 13:
1126  return 0.;
1127 
1128  case 14:
1129  return 2.*dx/distxz;
1130 
1131  case 15:
1132  return dy/distxz;
1133 
1134  case 16:
1135  return 0.;
1136 
1137  case 17:
1138  return 2.*dz/distxz;
1139 
1140  case 18:
1141  case 19:
1142  return 0.;
1143 
1144  // quartics
1145  case 20:
1146  case 21:
1147  case 22:
1148  case 23:
1149  case 24:
1150  return 0.;
1151 
1152  case 25:
1153  return 3.*dx*dx/distxz;
1154 
1155  case 26:
1156  return 2.*dx*dy/distxz;
1157 
1158  case 27:
1159  return dy*dy/distxz;
1160 
1161  case 28:
1162  return 0.;
1163 
1164  case 29:
1165  return 4.*dx*dz/distxz;
1166 
1167  case 30:
1168  return 2.*dy*dz/distxz;
1169 
1170  case 31:
1171  return 0.;
1172 
1173  case 32:
1174  return 3.*dz*dz/distxz;
1175 
1176  case 33:
1177  case 34:
1178  return 0.;
1179 
1180  default:
1181  unsigned int o = 0;
1182  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1183  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1184  unsigned int block=o, nz = 0;
1185  for (; block < i2; block += (o-nz+1)) { nz++; }
1186  const unsigned int nx = block - i2;
1187  const unsigned int ny = o - nx - nz;
1188  Real val = nx * nz;
1189  for (unsigned int index=1; index < nx; index++)
1190  val *= dx;
1191  for (unsigned int index=0; index != ny; index++)
1192  val *= dy;
1193  for (unsigned int index=1; index < nz; index++)
1194  val *= dz;
1195  return val/distxz;
1196  }
1197  }
1198 
1199  // d^2()/dydz
1200  case 4:
1201  {
1202  switch (i)
1203  {
1204  // constant
1205  case 0:
1206 
1207  // linear
1208  case 1:
1209  case 2:
1210  case 3:
1211  return 0.;
1212 
1213  // quadratic
1214  case 4:
1215  case 5:
1216  case 6:
1217  case 7:
1218  return 0.;
1219 
1220  case 8:
1221  return 1./distyz;
1222 
1223  case 9:
1224  return 0.;
1225 
1226  // cubic
1227  case 10:
1228  case 11:
1229  case 12:
1230  case 13:
1231  case 14:
1232  return 0.;
1233 
1234  case 15:
1235  return dx/distyz;
1236 
1237  case 16:
1238  return 2.*dy/distyz;
1239 
1240  case 17:
1241  return 0.;
1242 
1243  case 18:
1244  return 2.*dz/distyz;
1245 
1246  case 19:
1247  return 0.;
1248 
1249  // quartics
1250  case 20:
1251  case 21:
1252  case 22:
1253  case 23:
1254  case 24:
1255  case 25:
1256  return 0.;
1257 
1258  case 26:
1259  return dx*dx/distyz;
1260 
1261  case 27:
1262  return 2.*dx*dy/distyz;
1263 
1264  case 28:
1265  return 3.*dy*dy/distyz;
1266 
1267  case 29:
1268  return 0.;
1269 
1270  case 30:
1271  return 2.*dx*dz/distyz;
1272 
1273  case 31:
1274  return 4.*dy*dz/distyz;
1275 
1276  case 32:
1277  return 0.;
1278 
1279  case 33:
1280  return 3.*dz*dz/distyz;
1281 
1282  case 34:
1283  return 0.;
1284 
1285  default:
1286  unsigned int o = 0;
1287  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1288  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1289  unsigned int block=o, nz = 0;
1290  for (; block < i2; block += (o-nz+1)) { nz++; }
1291  const unsigned int nx = block - i2;
1292  const unsigned int ny = o - nx - nz;
1293  Real val = ny * nz;
1294  for (unsigned int index=0; index != nx; index++)
1295  val *= dx;
1296  for (unsigned int index=1; index < ny; index++)
1297  val *= dy;
1298  for (unsigned int index=1; index < nz; index++)
1299  val *= dz;
1300  return val/distyz;
1301  }
1302  }
1303 
1304 
1305  // d^2()/dz^2
1306  case 5:
1307  {
1308  switch (i)
1309  {
1310  // constant
1311  case 0:
1312 
1313  // linear
1314  case 1:
1315  case 2:
1316  case 3:
1317  return 0.;
1318 
1319  // quadratic
1320  case 4:
1321  case 5:
1322  case 6:
1323  case 7:
1324  case 8:
1325  return 0.;
1326 
1327  case 9:
1328  return 2./dist2z;
1329 
1330  // cubic
1331  case 10:
1332  case 11:
1333  case 12:
1334  case 13:
1335  case 14:
1336  case 15:
1337  case 16:
1338  return 0.;
1339 
1340  case 17:
1341  return 2.*dx/dist2z;
1342 
1343  case 18:
1344  return 2.*dy/dist2z;
1345 
1346  case 19:
1347  return 6.*dz/dist2z;
1348 
1349  // quartics
1350  case 20:
1351  case 21:
1352  case 22:
1353  case 23:
1354  case 24:
1355  case 25:
1356  case 26:
1357  case 27:
1358  case 28:
1359  return 0.;
1360 
1361  case 29:
1362  return 2.*dx*dx/dist2z;
1363 
1364  case 30:
1365  return 2.*dx*dy/dist2z;
1366 
1367  case 31:
1368  return 2.*dy*dy/dist2z;
1369 
1370  case 32:
1371  return 6.*dx*dz/dist2z;
1372 
1373  case 33:
1374  return 6.*dy*dz/dist2z;
1375 
1376  case 34:
1377  return 12.*dz*dz/dist2z;
1378 
1379  default:
1380  unsigned int o = 0;
1381  for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
1382  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1383  unsigned int block=o, nz = 0;
1384  for (; block < i2; block += (o-nz+1)) { nz++; }
1385  const unsigned int nx = block - i2;
1386  const unsigned int ny = o - nx - nz;
1387  Real val = nz * (nz - 1);
1388  for (unsigned int index=0; index != nx; index++)
1389  val *= dx;
1390  for (unsigned int index=0; index != ny; index++)
1391  val *= dy;
1392  for (unsigned int index=2; index < nz; index++)
1393  val *= dz;
1394  return val/dist2z;
1395  }
1396  }
1397 
1398 
1399  default:
1400  libmesh_error_msg("Invalid j = " << j);
1401  }
1402 
1403 #else // LIBMESH_DIM != 3
1404  libmesh_assert(true || order || add_p_level);
1405  libmesh_ignore(elem, i, j, point_in);
1406  libmesh_not_implemented();
1407 #endif
1408 }
Real distance(const Point &p)
void libmesh_ignore(const Args &...)
T pow(const T &x)
Definition: utility.h:328
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_second_deriv() [185/233]

RealGradient libMesh::FE< 1, LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 732 of file fe_lagrange_vec.C.

735 {
736  Real value = FE<1,LAGRANGE>::shape_second_deriv( type, order, i, j, p );
737  return libMesh::RealGradient( value );
738 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [186/233]

Real libMesh::FE< 2, HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 734 of file fe_hierarchic_shape_2D.C.

740 {
741  return fe_hierarchic_2D_shape_second_deriv<HIERARCHIC>(elem, order, i, j, p, add_p_level);
742 }

◆ shape_second_deriv() [187/233]

Real libMesh::FE< 2, HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 746 of file fe_hierarchic_shape_2D.C.

752 {
753  return fe_hierarchic_2D_shape_second_deriv<HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
754 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_second_deriv() [188/233]

RealGradient libMesh::FE< 1, L2_LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 756 of file fe_lagrange_vec.C.

759 {
760  return FE<1,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
761 }

◆ shape_second_deriv() [189/233]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 758 of file fe_hierarchic_shape_2D.C.

764 {
765  return fe_hierarchic_2D_shape_second_deriv<L2_HIERARCHIC>(elem, order, i, j, p, add_p_level);
766 }

◆ shape_second_deriv() [190/233]

Real libMesh::FE< 2, L2_HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 770 of file fe_hierarchic_shape_2D.C.

776 {
777  return fe_hierarchic_2D_shape_second_deriv<L2_HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
778 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_second_deriv() [191/233]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 782 of file fe_hierarchic_shape_2D.C.

788 {
789  libmesh_assert(elem);
790  const ElemType type = elem->type();
791 
792  const Order totalorder = order + add_p_level*elem->p_level();
793 
794  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
795  return 0;
796 
797  const unsigned int dofs_per_side = totalorder+1u;
798 
799  switch (type)
800  {
801  case TRI6:
802  case TRI7:
803  {
804  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
806  }
807  case QUAD8:
808  case QUADSHELL8:
809  case QUAD9:
810  case QUADSHELL9:
811  {
812  libmesh_assert_less(i, 4*dofs_per_side);
813 
814  // Flip odd degree of freedom values if necessary
815  // to keep continuity on sides. We'll flip xi/eta rather than
816  // flipping phi, so that we can use this to handle the "nodal"
817  // degrees of freedom too.
818  Real f = 1.;
819 
820  const Real xi = p(0), eta = p(1);
821  if (eta < xi)
822  {
823  if (eta < -xi) // side 0
824  {
825  if (i >= dofs_per_side)
826  return 0;
827  if (j != 0)
828  return 0;
829  if ((i < 2 || i % 2) &&
830  elem->positive_edge_orientation(0))
831  f = -1;
832 
833  return FE<1,HIERARCHIC>::shape_second_deriv(EDGE3, totalorder, i, 0, f*xi);
834  }
835  else // side 1
836  {
837  if (i < dofs_per_side ||
838  i >= 2*dofs_per_side)
839  return 0;
840  if (j != 2)
841  return 0;
842 
843  const unsigned int side_i = i - dofs_per_side;
844 
845  if ((side_i < 2 || side_i % 2) &&
846  elem->positive_edge_orientation(1))
847  f = -1;
848 
849  return FE<1,HIERARCHIC>::shape_second_deriv(EDGE3, totalorder, side_i, 0, f*eta);
850  }
851  }
852  else // xi < eta
853  {
854  if (eta > -xi) // side 2
855  {
856  if (i < 2*dofs_per_side ||
857  i >= 3*dofs_per_side)
858  return 0;
859  if (j != 0)
860  return 0;
861 
862  const unsigned int side_i = i - 2*dofs_per_side;
863 
864  if ((side_i < 2 || side_i % 2) &&
865  !elem->positive_edge_orientation(2))
866  f = -1;
867 
868  return FE<1,HIERARCHIC>::shape_second_deriv(EDGE3, totalorder, side_i, 0, f*xi);
869  }
870  else // side 3
871  {
872  if (i < 3*dofs_per_side)
873  return 0;
874  if (j != 2)
875  return 0;
876 
877  const unsigned int side_i = i - 3*dofs_per_side;
878 
879  if ((side_i < 2 || side_i % 2) &&
880  !elem->positive_edge_orientation(3))
881  f = -1;
882 
883  return FE<1,HIERARCHIC>::shape_second_deriv(EDGE3, totalorder, side_i, 0, f*eta);
884  }
885  }
886  }
887  default:
888  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(elem->type()));
889  }
890  return 0;
891 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)
bool positive_edge_orientation(const unsigned int i) const
Definition: elem.C:3589
OutputShape fe_fdm_second_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*deriv_func)(const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool))
Definition: fe.C:969
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0

◆ shape_second_deriv() [192/233]

RealGradient libMesh::FE< 2, LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 808 of file fe_lagrange_vec.C.

811 {
812  Real value = FE<2,LAGRANGE>::shape_second_deriv( type, order, i/2, j, p );
813 
814  switch( i%2 )
815  {
816  case 0:
817  return libMesh::RealGradient( value );
818 
819  case 1:
820  return libMesh::RealGradient( Real(0), value );
821 
822  default:
823  libmesh_error_msg("i%2 must be either 0 or 1!");
824  }
825 
826  //dummy
827  return libMesh::RealGradient();
828 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [193/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 819 of file fe_subdivision_2D.C.

824 {
825  switch (order)
826  {
827  case FOURTH:
828  {
829  switch (type)
830  {
831  case TRI3SUBDIVISION:
832  libmesh_assert_less(i, 12);
833  return FESubdivision::regular_shape_second_deriv(i,j,p(0),p(1));
834  default:
835  libmesh_error_msg("ERROR: Unsupported element type == " << Utility::enum_to_string(type));
836  }
837  }
838  default:
839  libmesh_error_msg("ERROR: Unsupported polynomial order == " << order);
840  }
841 }
std::string enum_to_string(const T e)

◆ shape_second_deriv() [194/233]

RealGradient libMesh::FE< 2, L2_LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 846 of file fe_lagrange_vec.C.

849 {
850  return FE<2,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
851 }

◆ shape_second_deriv() [195/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 846 of file fe_subdivision_2D.C.

852 {
853  libmesh_assert(elem);
854  const Order totalorder = order + add_p_level*elem->p_level();
855  return FE<2,SUBDIVISION>::shape_second_deriv(elem->type(), totalorder, i, j, p);
856 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)

◆ shape_second_deriv() [196/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 861 of file fe_subdivision_2D.C.

867 {
868  libmesh_assert(elem);
869  const Order totalorder = fet.order + add_p_level*elem->p_level();
870  return FE<2,SUBDIVISION>::shape_second_deriv(elem->type(), totalorder, i, j, p);
871 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)

◆ shape_second_deriv() [197/233]

Real libMesh::FE< 2, SIDE_HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 895 of file fe_hierarchic_shape_2D.C.

901 {
902  return FE<2,SIDE_HIERARCHIC>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
903 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [198/233]

Real libMesh::FE< 2, SUBDIVISION >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

◆ shape_second_deriv() [199/233]

RealGradient libMesh::FE< 3, LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 906 of file fe_lagrange_vec.C.

909 {
910  Real value = FE<3,LAGRANGE>::shape_second_deriv( type, order, i/3, j, p );
911 
912  switch( i%3 )
913  {
914  case 0:
915  return libMesh::RealGradient( value );
916 
917  case 1:
918  return libMesh::RealGradient( Real(0), value );
919 
920  case 2:
921  return libMesh::RealGradient( Real(0), Real(0), value );
922 
923  default:
924  libmesh_error_msg("i%3 must be 0, 1, or 2!");
925  }
926 
927  //dummy
928  return libMesh::RealGradient();
929 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [200/233]

RealGradient libMesh::FE< 3, L2_LAGRANGE_VEC >::shape_second_deriv ( const ElemType  type,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p 
)
inherited

Definition at line 947 of file fe_lagrange_vec.C.

950 {
951  return FE<3,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
952 }

◆ shape_second_deriv() [201/233]

RealGradient libMesh::FE< 0, LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 976 of file fe_lagrange_vec.C.

980 {
981  Real value = FE<0,LAGRANGE>::shape_second_deriv( elem->type(), order + add_p_level*elem->p_level(), i, j, p);
982  return libMesh::RealGradient( value );
983 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [202/233]

RealGradient libMesh::FE< 0, L2_LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1003 of file fe_lagrange_vec.C.

1007 {
1008  return FE<0,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1009 }

◆ shape_second_deriv() [203/233]

RealGradient libMesh::FE< 1, LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1031 of file fe_lagrange_vec.C.

1035 {
1036  Real value = FE<1,LAGRANGE>::shape_second_deriv( elem->type(), order + add_p_level*elem->p_level(), i, j, p);
1037  return libMesh::RealGradient( value );
1038 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [204/233]

Real libMesh::FE< 2, SZABAB >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1049 of file fe_szabab_shape_2D.C.

1054 {
1055  static bool warning_given = false;
1056 
1057  if (!warning_given)
1058  libMesh::err << "Second derivatives for Szabab elements "
1059  << " are not yet implemented!"
1060  << std::endl;
1061 
1062  warning_given = true;
1063  return 0.;
1064 }
OStreamProxy err

◆ shape_second_deriv() [205/233]

RealGradient libMesh::FE< 1, L2_LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1058 of file fe_lagrange_vec.C.

1062 {
1063  return FE<1,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1064 }

◆ shape_second_deriv() [206/233]

Real libMesh::FE< 2, SZABAB >::shape_second_deriv ( const Elem ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 1069 of file fe_szabab_shape_2D.C.

1075 {
1076  static bool warning_given = false;
1077 
1078  if (!warning_given)
1079  libMesh::err << "Second derivatives for Szabab elements "
1080  << " are not yet implemented!"
1081  << std::endl;
1082 
1083  warning_given = true;
1084  return 0.;
1085 }
OStreamProxy err

◆ shape_second_deriv() [207/233]

Real libMesh::FE< 2, SZABAB >::shape_second_deriv ( const FEType  ,
const Elem ,
const unsigned  int,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 1089 of file fe_szabab_shape_2D.C.

1095 {
1096  static bool warning_given = false;
1097 
1098  if (!warning_given)
1099  libMesh::err << "Second derivatives for Szabab elements "
1100  << " are not yet implemented!"
1101  << std::endl;
1102 
1103  warning_given = true;
1104  return 0.;
1105 }
OStreamProxy err

◆ shape_second_deriv() [208/233]

RealGradient libMesh::FE< 2, LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1114 of file fe_lagrange_vec.C.

1118 {
1119  Real value = FE<2,LAGRANGE>::shape_second_deriv( elem->type(), order + add_p_level*elem->p_level(), i/2, j, p );
1120 
1121  switch( i%2 )
1122  {
1123  case 0:
1124  return libMesh::RealGradient( value );
1125 
1126  case 1:
1127  return libMesh::RealGradient( Real(0), value );
1128 
1129  default:
1130  libmesh_error_msg("i%2 must be either 0 or 1!");
1131  }
1132 
1133  //dummy
1134  return libMesh::RealGradient();
1135 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [209/233]

RealGradient libMesh::FE< 2, L2_LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1155 of file fe_lagrange_vec.C.

1159 {
1160  return FE<2,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1161 }

◆ shape_second_deriv() [210/233]

RealGradient libMesh::FE< 3, LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1218 of file fe_lagrange_vec.C.

1222 {
1223  Real value = FE<3,LAGRANGE>::shape_second_deriv( elem->type(), order + add_p_level*elem->p_level(), i/3, j, p );
1224 
1225  switch( i%3 )
1226  {
1227  case 0:
1228  return libMesh::RealGradient( value );
1229 
1230  case 1:
1231  return libMesh::RealGradient( Real(0), value );
1232 
1233  case 2:
1234  return libMesh::RealGradient( Real(0), Real(0), value );
1235 
1236  default:
1237  libmesh_error_msg("i%3 must be 0, 1, or 2!");
1238  }
1239 
1240  //dummy
1241  return libMesh::RealGradient();
1242 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:55

◆ shape_second_deriv() [211/233]

RealGradient libMesh::FE< 3, L2_LAGRANGE_VEC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1262 of file fe_lagrange_vec.C.

1266 {
1267  return FE<3,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1268 }

◆ shape_second_deriv() [212/233]

Real libMesh::FE< 3, MONOMIAL >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1340 of file fe_monomial_shape_3D.C.

1346 {
1347  libmesh_assert(elem);
1348 
1349  // call the orientation-independent shape function derivatives
1350  return FE<3,MONOMIAL>::shape_second_deriv(elem->type(), order + add_p_level*elem->p_level(), i, j, p);
1351 }
libmesh_assert(ctx)

◆ shape_second_deriv() [213/233]

Real libMesh::FE< 3, MONOMIAL >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1355 of file fe_monomial_shape_3D.C.

1361 {
1362  libmesh_assert(elem);
1363  // by default call the orientation-independent shape functions
1364  return FE<3,MONOMIAL>::shape_second_deriv(elem->type(), fet.order + add_p_level*elem->p_level(), i, j, p);
1365 }
libmesh_assert(ctx)

◆ shape_second_deriv() [214/233]

Real libMesh::FE< 3, XYZ >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1412 of file fe_xyz_shape_3D.C.

1417 {
1418  libmesh_error_msg("XYZ polynomials require the element.");
1419  return 0.;
1420 }

◆ shape_second_deriv() [215/233]

Real libMesh::FE< 3, XYZ >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1424 of file fe_xyz_shape_3D.C.

1430 {
1431  return FE<3,XYZ>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
1432 }

◆ shape_second_deriv() [216/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1768 of file fe_hierarchic_shape_3D.C.

1773 {
1774  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1775  return 0.;
1776 }

◆ shape_second_deriv() [217/233]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1781 of file fe_hierarchic_shape_3D.C.

1786 {
1787  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1788  return 0.;
1789 }

◆ shape_second_deriv() [218/233]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1794 of file fe_hierarchic_shape_3D.C.

1799 {
1800  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1801  return 0.;
1802 }

◆ shape_second_deriv() [219/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1807 of file fe_hierarchic_shape_3D.C.

1813 {
1814  return fe_hierarchic_3D_shape_second_deriv<HIERARCHIC>(elem, order, i, j, p, add_p_level);
1815 }

◆ shape_second_deriv() [220/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1820 of file fe_hierarchic_shape_3D.C.

1826 {
1827  return fe_hierarchic_3D_shape_second_deriv<HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1828 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_second_deriv() [221/233]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1833 of file fe_hierarchic_shape_3D.C.

1839 {
1840  return fe_hierarchic_3D_shape_second_deriv<L2_HIERARCHIC>(elem, order, i, j, p, add_p_level);
1841 }

◆ shape_second_deriv() [222/233]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1845 of file fe_hierarchic_shape_3D.C.

1851 {
1852  return fe_hierarchic_3D_shape_second_deriv<L2_HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1853 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215

◆ shape_second_deriv() [223/233]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 1857 of file fe_hierarchic_shape_3D.C.

1863 {
1864 #if LIBMESH_DIM == 3
1865  libmesh_assert(elem);
1866  const ElemType type = elem->type();
1867 
1868  const Order totalorder = order + add_p_level*elem->p_level();
1869 
1870  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
1871  return 0; // constants have zero derivative
1872 
1873  switch (type)
1874  {
1875  case HEX27:
1876  {
1877  // I need to debug the p>2 case here...
1878  if (totalorder > 2)
1879  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
1881 
1882  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+1u);
1883  libmesh_assert_less(i, 6*dofs_per_side);
1884 
1885  const unsigned int sidenum = cube_side(p);
1886  if (sidenum > 5)
1887  return std::numeric_limits<Real>::quiet_NaN();
1888 
1889  const unsigned int dof_offset = sidenum * dofs_per_side;
1890 
1891  if (i < dof_offset) // i is on a previous side
1892  return 0;
1893 
1894  if (i >= dof_offset + dofs_per_side) // i is on a later side
1895  return 0;
1896 
1897  unsigned int side_i = i - dof_offset;
1898 
1899  std::unique_ptr<const Elem> side = elem->build_side_ptr(sidenum);
1900 
1901  Point sidep = cube_side_point(sidenum, p);
1902 
1903  cube_remap(side_i, *side, totalorder, sidep);
1904 
1905  // What second derivative or mixed derivative on the side
1906  // corresponds to the xi/eta/zeta mix we were asked for?
1907  unsigned int sidej = 100;
1908 
1909  // Do we need a -1 here to flip the final derivative value?
1910  Real f = 1.;
1911 
1912  switch (j)
1913  {
1914  case 0: // d^2()/dxi^2
1915  {
1916  switch (sidenum)
1917  {
1918  case 0:
1919  sidej = 2;
1920  break;
1921  case 1:
1922  sidej = 0;
1923  break;
1924  case 2:
1925  return 0;
1926  case 3:
1927  sidej = 0;
1928  break;
1929  case 4:
1930  return 0;
1931  case 5:
1932  sidej = 0;
1933  break;
1934  default:
1935  libmesh_error();
1936  }
1937  break;
1938  }
1939  case 1: // d^2()/dxideta
1940  {
1941  switch (sidenum)
1942  {
1943  case 0:
1944  sidej = 1;
1945  break;
1946  case 1:
1947  case 2:
1948  case 3:
1949  case 4:
1950  return 0;
1951  case 5:
1952  sidej = 1;
1953  break;
1954  default:
1955  libmesh_error();
1956  }
1957  break;
1958  }
1959  case 2: // d^2()/deta^2
1960  {
1961  switch (sidenum)
1962  {
1963  case 0:
1964  sidej = 0;
1965  break;
1966  case 1:
1967  return 0;
1968  case 2:
1969  sidej = 0;
1970  break;
1971  case 3:
1972  return 0;
1973  case 4:
1974  sidej = 0;
1975  break;
1976  case 5:
1977  sidej = 2;
1978  break;
1979  default:
1980  libmesh_error();
1981  }
1982  break;
1983  }
1984  case 3: // d^2()/dxidzeta
1985  {
1986  switch (sidenum)
1987  {
1988  case 0:
1989  return 0;
1990  case 1:
1991  sidej = 1;
1992  break;
1993  case 2:
1994  return 0;
1995  case 3:
1996  sidej = 1;
1997  f = -1;
1998  break;
1999  case 4:
2000  case 5:
2001  return 0;
2002  default:
2003  libmesh_error();
2004  }
2005  break;
2006  }
2007  case 4: // d^2()/detadzeta
2008  {
2009  switch (sidenum)
2010  {
2011  case 0:
2012  case 1:
2013  return 0;
2014  case 2:
2015  sidej = 1;
2016  break;
2017  case 3:
2018  return 0;
2019  case 4:
2020  sidej = 1;
2021  f = -1;
2022  break;
2023  case 5:
2024  return 0;
2025  default:
2026  libmesh_error();
2027  }
2028  break;
2029  }
2030  case 5: // d^2()/dzeta^2
2031  {
2032  switch (sidenum)
2033  {
2034  case 0:
2035  return 0;
2036  case 1:
2037  case 2:
2038  case 3:
2039  case 4:
2040  sidej = 2;
2041  break;
2042  case 5:
2043  return 0;
2044  default:
2045  libmesh_error();
2046  }
2047  break;
2048  }
2049 
2050  default:
2051  libmesh_error_msg("Invalid derivative index j = " << j);
2052  }
2053 
2054  return f * FE<2,HIERARCHIC>::shape_second_deriv(side.get(),
2055  order, side_i,
2056  sidej, sidep,
2057  add_p_level);
2058  }
2059 
2060  case TET14:
2061  case PRISM20:
2062  case PRISM21:
2063  {
2064  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
2066  }
2067 
2068  default:
2069  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
2070  }
2071 
2072 #else // LIBMESH_DIM != 3
2073  libmesh_ignore(elem, order, i, j, p, add_p_level);
2074  libmesh_not_implemented();
2075 #endif
2076 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
unsigned int p_level() const
Definition: elem.h:3108
A specific instantiation of the FEBase class.
Definition: fe.h:127
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
OutputShape fe_fdm_second_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*deriv_func)(const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool))
Definition: fe.C:969
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.
Definition: point.h:39

◆ shape_second_deriv() [224/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2006 of file fe_nedelec_one_shape_2D.C.

2012 {
2013 #if LIBMESH_DIM > 1
2014  libmesh_assert(elem);
2015 
2016  // j = 0 ==> d^2 phi / dxi^2
2017  // j = 1 ==> d^2 phi / dxi deta
2018  // j = 2 ==> d^2 phi / deta^2
2019  libmesh_assert_less (j, 3);
2020 
2021  const Order totalorder = order + add_p_level*elem->p_level();
2022  libmesh_assert_less(i, n_dofs(elem->type(), totalorder));
2023 
2024  const char sign = i >= totalorder * elem->n_edges() || elem->positive_edge_orientation(i / totalorder) ? 1 : -1;
2025  const unsigned int ii = sign > 0 ? i : (i / totalorder * 2 + 1) * totalorder - 1 - i;
2026 
2027  const Real xi = p(0);
2028  const Real eta = p(1);
2029 
2030  switch (totalorder)
2031  {
2032  // linear Nedelec (first kind) shape function second derivatives
2033  case FIRST:
2034  {
2035  switch (elem->type())
2036  {
2037  case QUAD8:
2038  case QUAD9:
2039  case TRI6:
2040  case TRI7:
2041  // All second derivatives for linear quads and triangles are zero.
2042  return RealGradient();
2043 
2044  default:
2045  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
2046 
2047  } // end switch (type)
2048  } // end case FIRST
2049 
2050  // quadratic Nedelec (first kind) shape function second derivatives
2051  case SECOND:
2052  {
2053  switch (elem->type())
2054  {
2055  case QUAD8:
2056  case QUAD9:
2057  {
2058  // Even with a loose inverse_map tolerance we ought to
2059  // be nearly on the element interior in master
2060  // coordinates
2061  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
2062  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
2063 
2064  const Real x = 0.5 * (xi + 1.0);
2065  const Real y = 0.5 * (eta + 1.0);
2066 
2067  switch (j)
2068  {
2069  // d^2()/dxi^2
2070  case 0:
2071  {
2072  switch(ii)
2073  {
2074  case 0:
2075  case 1:
2076  case 4:
2077  case 5:
2078  case 9:
2079  case 10:
2080  return RealGradient();
2081  case 2:
2082  return sign * RealGradient( 0.0, 0.125*(-36.0*y+24.0) );
2083  case 3:
2084  return sign * RealGradient( 0.0, 0.125*( 36.0*y-12.0) );
2085  case 6:
2086  return sign * RealGradient( 0.0, 0.125*(-36.0*y+12.0) );
2087  case 7:
2088  return sign * RealGradient( 0.0, 0.125*( 36.0*y-24.0) );
2089  case 8:
2090  return RealGradient( 0.0, 0.75*(6.0*y-4.0) );
2091  case 11:
2092  return RealGradient( 0.0, 0.75*(-6.0*y+2.0) );
2093 
2094  default:
2095  libmesh_error_msg("Invalid i = " << i);
2096  }
2097  } // j = 0
2098 
2099  // d^2()/dxideta
2100  case 1:
2101  {
2102  switch(ii)
2103  {
2104  case 0:
2105  return sign * RealGradient( 0.125*(-36.0*y+24.0), 0.0 );
2106  case 1:
2107  return sign * RealGradient( 0.125*( 36.0*y-24.0), 0.0 );
2108  case 2:
2109  return sign * RealGradient( 0.0, 0.125*(-36.0*x+12.0) );
2110  case 3:
2111  return sign * RealGradient( 0.0, 0.125*( 36.0*x-12.0) );
2112  case 4:
2113  return sign * RealGradient( 0.125*(-36.0*y+12.0), 0.0 );
2114  case 5:
2115  return sign * RealGradient( 0.125*( 36.0*y-12.0), 0.0 );
2116  case 6:
2117  return sign * RealGradient( 0.0, 0.125*(-36.0*x+24.0) );
2118  case 7:
2119  return sign * RealGradient( 0.0, 0.125*( 36.0*x-24.0) );
2120  case 8:
2121  return RealGradient( 0.0, 0.75*(6.0*x-3.0) );
2122  case 9:
2123  return RealGradient( 0.75*(-6.0*y), 0.0 );
2124  case 10:
2125  return RealGradient( 0.75*(6.0*y), 0.0 );
2126  case 11:
2127  return RealGradient( 0.0, 0.75*(-6.0*x+3.0) );
2128 
2129  default:
2130  libmesh_error_msg("Invalid i = " << i);
2131  }
2132  } // j = 1
2133 
2134  // d^2()/deta^2
2135  case 2:
2136  {
2137  switch(ii)
2138  {
2139  case 2:
2140  case 3:
2141  case 6:
2142  case 7:
2143  case 8:
2144  case 11:
2145  return RealGradient();
2146  case 0:
2147  return sign * RealGradient( 0.125*(-36.0*x+24.0), 0.0 );
2148  case 1:
2149  return sign * RealGradient( 0.125*( 36.0*x-12.0), 0.0 );
2150  case 4:
2151  return sign * RealGradient( 0.125*(-36.0*x+12.0), 0.0 );
2152  case 5:
2153  return sign * RealGradient( 0.125*( 36.0*x-24.0), 0.0 );
2154  case 9:
2155  return RealGradient( 0.75*(-6.0*x+4.0), 0.0 );
2156  case 10:
2157  return RealGradient( 0.75*( 6.0*x-2.0), 0.0 );
2158 
2159  default:
2160  libmesh_error_msg("Invalid i = " << i);
2161  }
2162  } // j = 2
2163 
2164  default:
2165  libmesh_error_msg("Invalid j = " << j);
2166  }
2167  }
2168 
2169  case TRI6:
2170  case TRI7:
2171  {
2172  switch (j)
2173  {
2174  // d^2()/dxi^2
2175  case 0:
2176  {
2177  switch(ii)
2178  {
2179  case 3:
2180  case 4:
2181  return RealGradient();
2182  case 0:
2183  return sign * RealGradient( 0.0, -16.0 );
2184  case 1:
2185  return sign * RealGradient( 0.0, 16.0 );
2186  case 2:
2187  return sign * RealGradient( 0.0, 16.0 );
2188  case 5:
2189  return sign * RealGradient( 0.0, -16.0 );
2190  case 6:
2191  return RealGradient( 0.0, 16.0 );
2192  case 7:
2193  return RealGradient( 0.0,-32.0 );
2194  default:
2195  libmesh_error_msg("Invalid i = " << i);
2196  }
2197  } // j = 0
2198 
2199  // d^2()/dxideta
2200  case 1:
2201  {
2202  switch(ii)
2203  {
2204  case 0:
2205  return sign * RealGradient( 8.0, -8.0 );
2206  case 1:
2207  return sign * RealGradient( -8.0, 0.0 );
2208  case 2:
2209  return sign * RealGradient( -8.0, 0.0 );
2210  case 3:
2211  return sign * RealGradient( 0.0, 8.0 );
2212  case 4:
2213  return sign * RealGradient( 0.0, 8.0 );
2214  case 5:
2215  return sign * RealGradient( 8.0, -8.0 );
2216  case 6:
2217  return RealGradient( -8.0, 16.0 );
2218  case 7:
2219  return RealGradient( 16.0, -8.0 );
2220  default:
2221  libmesh_error_msg("Invalid i = " << i);
2222  }
2223  } // j = 1
2224 
2225  // d^2()/deta^2
2226  case 2:
2227  {
2228  switch(ii)
2229  {
2230  case 1:
2231  case 2:
2232  return RealGradient();
2233  case 0:
2234  return sign * RealGradient( 16.0, 0.0 );
2235  case 3:
2236  return sign * RealGradient( -16.0, 0.0 );
2237  case 4:
2238  return sign * RealGradient( -16.0, 0.0 );
2239  case 5:
2240  return sign * RealGradient( 16.0, 0.0 );
2241  case 6:
2242  return RealGradient( -32.0, 0.0 );
2243  case 7:
2244  return RealGradient( 16.0, 0.0 );
2245  default:
2246  libmesh_error_msg("Invalid i = " << i);
2247  }
2248  } // j = 2
2249 
2250  default:
2251  libmesh_error_msg("Invalid j = " << j);
2252  }
2253  }
2254 
2255  default:
2256  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
2257 
2258  } // end switch (type)
2259  } // end case SECOND
2260 
2261  // cubic Nedelec (first kind) shape function second derivatives
2262  case THIRD:
2263  {
2264  switch (elem->type())
2265  {
2266  case QUAD8:
2267  case QUAD9:
2268  {
2269  switch (j)
2270  {
2271  // d^2()/dxi^2
2272  case 0:
2273  {
2274  switch(ii)
2275  {
2276  case 0:
2277  return sign * RealGradient(-135.*eta/4. - 105./4. + 135.*((eta + 1.)*(eta + 1.))/4. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
2278  case 1:
2279  return sign * RealGradient(135.*eta/8. + 105./8. - 135.*(eta + 1.)*(eta + 1.)/8. + 75.*((eta + 1.)*(eta + 1.)*(eta + 1.))/16., 0.);
2280  case 2:
2281  return sign * RealGradient(-135.*eta/4. - 105./4. + 135.*((eta + 1.)*(eta + 1.))/4. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
2282  case 3:
2283  return sign * RealGradient(0., 54.*eta + 135.*xi/4. - 135.*(eta + 1.)*(xi + 1.)/2. + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 243./4. - 45.*(eta + 1.)*(eta + 1.)/2.);
2284  case 4:
2285  return sign * RealGradient(0., -45.*eta/2. - 45.*xi/8. + 225.*(eta + 1.)*(xi + 1.)/8. - 225.*(xi + 1.)*(eta + 1.)*(eta + 1.)/16. - 189./8. + 45.*((eta + 1.)*(eta + 1.))/4.);
2286  case 5:
2287  return sign * RealGradient(0., 36.*eta + 45.*xi/4. - 45.*(eta + 1.)*(xi + 1.) + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 153./4. - 45.*(eta + 1.)*(eta + 1.)/2.);
2288  case 6:
2289  return sign * RealGradient(-45.*eta/4. - 45./4. + 45.*((eta + 1.)*(eta + 1.))/2. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
2290  case 7:
2291  return sign * RealGradient(45.*eta/8. + 45./8. - 45.*(eta + 1.)*(eta + 1.)/4. + 75.*((eta + 1.)*(eta + 1.)*(eta + 1.))/16., 0.);
2292  case 8:
2293  return sign * RealGradient(-45.*eta/4. - 45./4. + 45.*((eta + 1.)*(eta + 1.))/2. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
2294  case 9:
2295  return sign * RealGradient(0., 54.*eta + 45.*xi/4. - 45.*(eta + 1.)*(xi + 1.) + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 207./4. - 135.*(eta + 1.)*(eta + 1.)/4.);
2296  case 10:
2297  return sign * RealGradient(0., -135.*eta/4. - 45.*xi/8. + 225.*(eta + 1.)*(xi + 1.)/8. - 225.*(xi + 1.)*(eta + 1.)*(eta + 1.)/16. - 261./8. + 135.*((eta + 1.)*(eta + 1.))/8.);
2298  case 11:
2299  return sign * RealGradient(0., 81.*eta + 135.*xi/4. - 135.*(eta + 1.)*(xi + 1.)/2. + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 297./4. - 135.*(eta + 1.)*(eta + 1.)/4.);
2300  case 12:
2301  return RealGradient(0., 81.*eta + 135.*xi/4. - 135.*(eta + 1.)*(xi + 1.)/2. + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 297./4. - 135.*(eta + 1.)*(eta + 1.)/4.);
2302  case 13:
2303  return RealGradient(0., -54.*eta - 135.*xi/4. + 135.*(eta + 1.)*(xi + 1.)/2. - 225.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 243./4. + 45.*((eta + 1.)*(eta + 1.))/2.);
2304  case 14:
2305  return RealGradient(-30.*eta - 30. + 135.*((eta + 1.)*(eta + 1.))/4. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
2306  case 15:
2307  return RealGradient(15.*eta/2. + 15./2. - 45.*(eta + 1.)*(eta + 1.)/2. + 75.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8., 0.);
2308  case 16:
2309  return RealGradient(-30.*eta - 30. + 135.*((eta + 1.)*(eta + 1.))/4. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
2310  case 17:
2311  return RealGradient(15.*eta/2. + 15./2. - 45.*(eta + 1.)*(eta + 1.)/2. + 75.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8., 0.);
2312  case 18:
2313  return RealGradient(0., 54.*eta + 45.*xi/4. - 45.*(eta + 1.)*(xi + 1.) + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 207./4. - 135.*(eta + 1.)*(eta + 1.)/4.);
2314  case 19:
2315  return RealGradient(0., -36.*eta - 45.*xi/4. + 45.*(eta + 1.)*(xi + 1.) - 225.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 153./4. + 45.*((eta + 1.)*(eta + 1.))/2.);
2316  case 20:
2317  return RealGradient(0., 0.);
2318  case 21:
2319  return RealGradient(0., 15.*xi/4. - 3./4.);
2320  case 22:
2321  return RealGradient(0., -15.*xi/4. - 3./4.);
2322  case 23:
2323  return RealGradient(0., 0.);
2324  default:
2325  libmesh_error_msg("Invalid i = " << i);
2326  }
2327  } // j = 0
2328 
2329  // d^2()/dxideta
2330  case 1:
2331  {
2332  switch(ii)
2333  {
2334  case 0:
2335  return sign * RealGradient(-81.*eta - 135.*xi/4. + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 297./4. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
2336  case 1:
2337  return sign * RealGradient(135.*eta/4. + 135.*xi/8. - 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 135./4. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)/4., 0.);
2338  case 2:
2339  return sign * RealGradient(-54.*eta - 135.*xi/4. + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 243./4. + 90.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
2340  case 3:
2341  return sign * RealGradient(0., 45.*eta/4. + 54.*xi - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 207./4. - 135.*(xi + 1.)*(xi + 1.)/(2.*2.));
2342  case 4:
2343  return sign * RealGradient(0., -45.*eta/8. - 45.*xi/2. + 90.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. - 45./2. + 225.*((xi + 1.)*(xi + 1.)/(2.*2.))/4.);
2344  case 5:
2345  return sign * RealGradient(0., 45.*eta/4. + 36.*xi - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 153./4. - 90.*(xi + 1.)*(xi + 1.)/(2.*2.));
2346  case 6:
2347  return sign * RealGradient(-36.*eta - 45.*xi/4. + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 153./4. + 90.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
2348  case 7:
2349  return sign * RealGradient(45.*eta/2. + 45.*xi/8. - 90.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 45./2. - 225.*(eta + 1.)*(eta + 1.)/(2.*2.)/4., 0.);
2350  case 8:
2351  return sign * RealGradient(-54.*eta - 45.*xi/4. + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 207./4. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
2352  case 9:
2353  return sign * RealGradient(0., 135.*eta/4. + 54.*xi - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 243./4. - 90.*(xi + 1.)*(xi + 1.)/(2.*2.));
2354  case 10:
2355  return sign * RealGradient(0., -135.*eta/8. - 135.*xi/4. + 135.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. - 135./4. + 225.*((xi + 1.)*(xi + 1.)/(2.*2.))/4.);
2356  case 11:
2357  return sign * RealGradient(0., 135.*eta/4. + 81.*xi - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 297./4. - 135.*(xi + 1.)*(xi + 1.)/(2.*2.));
2358  case 12:
2359  return RealGradient(0., 30.*eta + 81.*xi - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 75. - 135.*(xi + 1.)*(xi + 1.)/(2.*2.));
2360  case 13:
2361  return RealGradient(0., -15.*eta/2. - 54.*xi + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 105./2. + 135.*((xi + 1.)*(xi + 1.)/(2.*2.)));
2362  case 14:
2363  return RealGradient(-81.*eta - 30.*xi + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 75. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
2364  case 15:
2365  return RealGradient(54.*eta + 15.*xi/2. - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 105./2. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.), 0.);
2366  case 16:
2367  return RealGradient(-54.*eta - 30.*xi + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 60. + 90.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
2368  case 17:
2369  return RealGradient(36.*eta + 15.*xi/2. - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 75./2. - 90.*(eta + 1.)*(eta + 1.)/(2.*2.), 0.);
2370  case 18:
2371  return RealGradient(0., 30.*eta + 54.*xi - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 60. - 90.*(xi + 1.)*(xi + 1.)/(2.*2.));
2372  case 19:
2373  return RealGradient(0., -15.*eta/2. - 36.*xi + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 75./2. + 90.*((xi + 1.)*(xi + 1.)/(2.*2.)));
2374  case 20:
2375  return RealGradient(0., 0.);
2376  case 21:
2377  return RealGradient(0., 0.);
2378  case 22:
2379  return RealGradient(0., 0.);
2380  case 23:
2381  return RealGradient(0., 0.);
2382  default:
2383  libmesh_error_msg("Invalid i = " << i);
2384  }
2385  } // j = 1
2386 
2387  // d^2()/deta^2
2388  case 2:
2389  {
2390  switch(ii)
2391  {
2392  case 0:
2393  return sign * RealGradient(-135.*eta/4. - 81.*xi + 135.*(eta + 1.)*(xi + 1.)/2. - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 297./4. + 135.*((xi + 1.)*(xi + 1.))/4., 0.);
2394  case 1:
2395  return sign * RealGradient(45.*eta/8. + 135.*xi/4. - 225.*(eta + 1.)*(xi + 1.)/8. + 225.*(eta + 1.)*((xi + 1.)*(xi + 1.))/16. + 261./8. - 135.*(xi + 1.)*(xi + 1.)/8., 0.);
2396  case 2:
2397  return sign * RealGradient(-45.*eta/4. - 54.*xi + 45.*(eta + 1.)*(xi + 1.) - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 207./4. + 135.*((xi + 1.)*(xi + 1.))/4., 0.);
2398  case 3:
2399  return sign * RealGradient(0., 45.*xi/4. + 45./4. - 45.*(xi + 1.)*(xi + 1.)/2. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
2400  case 4:
2401  return sign * RealGradient(0., -45.*xi/8. - 45./8. + 45.*((xi + 1.)*(xi + 1.))/4. - 75.*(xi + 1.)*(xi + 1.)*(xi + 1.)/16.);
2402  case 5:
2403  return sign * RealGradient(0., 45.*xi/4. + 45./4. - 45.*(xi + 1.)*(xi + 1.)/2. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
2404  case 6:
2405  return sign * RealGradient(-45.*eta/4. - 36.*xi + 45.*(eta + 1.)*(xi + 1.) - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 153./4. + 45.*((xi + 1.)*(xi + 1.))/2., 0.);
2406  case 7:
2407  return sign * RealGradient(45.*eta/8. + 45.*xi/2. - 225.*(eta + 1.)*(xi + 1.)/8. + 225.*(eta + 1.)*((xi + 1.)*(xi + 1.))/16. + 189./8. - 45.*(xi + 1.)*(xi + 1.)/4., 0.);
2408  case 8:
2409  return sign * RealGradient(-135.*eta/4. - 54.*xi + 135.*(eta + 1.)*(xi + 1.)/2. - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 243./4. + 45.*((xi + 1.)*(xi + 1.))/2., 0.);
2410  case 9:
2411  return sign * RealGradient(0., 135.*xi/4. + 105./4. - 135.*(xi + 1.)*(xi + 1.)/4. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
2412  case 10:
2413  return sign * RealGradient(0., -135.*xi/8. - 105./8. + 135.*((xi + 1.)*(xi + 1.))/8. - 75.*(xi + 1.)*(xi + 1.)*(xi + 1.)/16.);
2414  case 11:
2415  return sign * RealGradient(0., 135.*xi/4. + 105./4. - 135.*(xi + 1.)*(xi + 1.)/4. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
2416  case 12:
2417  return RealGradient(0., 30.*xi + 30. - 135.*(xi + 1.)*(xi + 1.)/4. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
2418  case 13:
2419  return RealGradient(0., -15.*xi/2. - 15./2. + 45.*((xi + 1.)*(xi + 1.))/2. - 75.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8.);
2420  case 14:
2421  return RealGradient(-135.*eta/4. - 81.*xi + 135.*(eta + 1.)*(xi + 1.)/2. - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 297./4. + 135.*((xi + 1.)*(xi + 1.))/4., 0.);
2422  case 15:
2423  return RealGradient(135.*eta/4. + 54.*xi - 135.*(eta + 1.)*(xi + 1.)/2. + 225.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. + 243./4. - 45.*(xi + 1.)*(xi + 1.)/2., 0.);
2424  case 16:
2425  return RealGradient(-45.*eta/4. - 54.*xi + 45.*(eta + 1.)*(xi + 1.) - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 207./4. + 135.*((xi + 1.)*(xi + 1.))/4., 0.);
2426  case 17:
2427  return RealGradient(45.*eta/4. + 36.*xi - 45.*(eta + 1.)*(xi + 1.) + 225.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. + 153./4. - 45.*(xi + 1.)*(xi + 1.)/2., 0.);
2428  case 18:
2429  return RealGradient(0., 30.*xi + 30. - 135.*(xi + 1.)*(xi + 1.)/4. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
2430  case 19:
2431  return RealGradient(0., -15.*xi/2. - 15./2. + 45.*((xi + 1.)*(xi + 1.))/2. - 75.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8.);
2432  case 20:
2433  return RealGradient(15.*eta/4. - 3./4., 0.);
2434  case 21:
2435  return RealGradient(0., 0.);
2436  case 22:
2437  return RealGradient(0., 0.);
2438  case 23:
2439  return RealGradient(-15.*eta/4. - 3./4., 0.);
2440  default:
2441  libmesh_error_msg("Invalid i = " << i);
2442  }
2443  } // j = 2
2444 
2445  default:
2446  libmesh_error_msg("Invalid j = " << j);
2447  }
2448  }
2449 
2450  case TRI6:
2451  case TRI7:
2452  {
2453  switch (j)
2454  {
2455  // d^2()/dxi^2
2456  case 0:
2457  {
2458  switch(ii)
2459  {
2460  case 0:
2461  return sign * RealGradient(60. - 90.*eta, 180.*eta + 270.*xi - 120.);
2462  case 1:
2463  return sign * RealGradient(45.*eta - 30., -45.*eta - 135.*xi + 105./2.);
2464  case 2:
2465  return sign * RealGradient(60. - 90.*eta, 270.*xi - 90.);
2466  case 3:
2467  return sign * RealGradient(-90.*eta, 270.*xi - 90.);
2468  case 4:
2469  return sign * RealGradient(-45.*eta/2., 90.*eta + 135.*xi/2. - 75./2.);
2470  case 5:
2471  return sign * RealGradient(0., 0.);
2472  case 6:
2473  return sign * RealGradient(0., 0.);
2474  case 7:
2475  return sign * RealGradient(-45.*eta/2., -45.*eta + 135.*xi/2. - 30.);
2476  case 8:
2477  return sign * RealGradient(-90.*eta, 180.*eta + 270.*xi - 180.);
2478  case 9:
2479  return RealGradient(180.*eta, -720.*eta - 540.*xi + 300.);
2480  case 10:
2481  return RealGradient(-540.*eta, 720.*eta + 1620.*xi - 900.);
2482  case 11:
2483  return RealGradient(-360.*eta, 720.*eta + 1080.*xi - 480.);
2484  case 12:
2485  return RealGradient(540.*eta, -360.*eta - 1620.*xi + 720.);
2486  case 13:
2487  return RealGradient(0., 360.*eta - 60.);
2488  case 14:
2489  return RealGradient(0., 120. - 720.*eta);
2490  default:
2491  libmesh_error_msg("Invalid i = " << i);
2492  }
2493  } // j = 0
2494 
2495  // d^2()/dxideta
2496  case 1:
2497  {
2498  switch(ii)
2499  {
2500  case 0:
2501  return sign * RealGradient(-180.*eta - 90.*xi + 120., 90.*eta + 180.*xi - 60.);
2502  case 1:
2503  return sign * RealGradient(45.*eta + 45.*xi - 75./2., 45.*eta/2. - 45.*xi);
2504  case 2:
2505  return sign * RealGradient(30. - 90.*xi, 0.);
2506  case 3:
2507  return sign * RealGradient(30. - 90.*xi, 0.);
2508  case 4:
2509  return sign * RealGradient(-90.*eta - 45.*xi/2. + 45./2., 45.*eta/2. + 90.*xi - 45./2.);
2510  case 5:
2511  return sign * RealGradient(0., 90.*eta - 30.);
2512  case 6:
2513  return sign * RealGradient(0., 90.*eta - 30.);
2514  case 7:
2515  return sign * RealGradient(45.*eta - 45.*xi/2., -45.*eta - 45.*xi + 75./2.);
2516  case 8:
2517  return sign * RealGradient(-180.*eta - 90.*xi + 60., 90.*eta + 180.*xi - 120.);
2518  case 9:
2519  return RealGradient(720.*eta + 180.*xi - 300., -540.*eta - 720.*xi + 300.);
2520  case 10:
2521  return RealGradient(-720.*eta - 540.*xi + 300., 180.*eta + 720.*xi - 300.);
2522  case 11:
2523  return RealGradient(-720.*eta - 360.*xi + 360., 720.*xi - 120.);
2524  case 12:
2525  return RealGradient(360.*eta + 540.*xi - 240., 60. - 360.*xi);
2526  case 13:
2527  return RealGradient(60. - 360.*eta, 540.*eta + 360.*xi - 240.);
2528  case 14:
2529  return RealGradient(720.*eta - 120., -360.*eta - 720.*xi + 360.);
2530  default:
2531  libmesh_error_msg("Invalid i = " << i);
2532  }
2533  } // j = 1
2534 
2535  // d^2()/deta^2
2536  case 2:
2537  {
2538  switch(ii)
2539  {
2540  case 0:
2541  return sign * RealGradient(-270.*eta - 180.*xi + 180., 90.*xi);
2542  case 1:
2543  return sign * RealGradient(-135.*eta/2. + 45.*xi + 30., 45.*xi/2.);
2544  case 2:
2545  return sign * RealGradient(0., 0.);
2546  case 3:
2547  return sign * RealGradient(0., 0.);
2548  case 4:
2549  return sign * RealGradient(-135.*eta/2. - 90.*xi + 75./2., 45.*xi/2.);
2550  case 5:
2551  return sign * RealGradient(90. - 270.*eta, 90.*xi);
2552  case 6:
2553  return sign * RealGradient(90. - 270.*eta, 90.*xi - 60.);
2554  case 7:
2555  return sign * RealGradient(135.*eta + 45.*xi - 105./2., 30. - 45.*xi);
2556  case 8:
2557  return sign * RealGradient(-270.*eta - 180.*xi + 120., 90.*xi - 60.);
2558  case 9:
2559  return RealGradient(1620.*eta + 720.*xi - 900., -540.*xi);
2560  case 10:
2561  return RealGradient(-540.*eta - 720.*xi + 300., 180.*xi);
2562  case 11:
2563  return RealGradient(120. - 720.*xi, 0.);
2564  case 12:
2565  return RealGradient(360.*xi - 60., 0.);
2566  case 13:
2567  return RealGradient(-1620.*eta - 360.*xi + 720., 540.*xi);
2568  case 14:
2569  return RealGradient(1080.*eta + 720.*xi - 480., -360.*xi);
2570  default:
2571  libmesh_error_msg("Invalid i = " << i);
2572  }
2573  } // j = 2
2574 
2575  default:
2576  libmesh_error_msg("Invalid j = " << j);
2577  }
2578  }
2579 
2580  default:
2581  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
2582  } // end switch (type)
2583  } // end case THIRD
2584 
2585  // quartic Nedelec (first kind) shape function second derivatives
2586  case FOURTH:
2587  {
2588  switch (elem->type())
2589  {
2590  case QUAD8:
2591  case QUAD9:
2592  {
2593  switch (j)
2594  {
2595  // d^2()/dxi^2
2596  case 0:
2597  {
2598  switch(ii)
2599  {
2600  case 0:
2601  return sign * RealGradient(-480.*eta - 105.*xi/2. + 420.*(eta + 1.)*(xi + 1.) - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 525.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 3675.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. - 945./2. + 900.*((eta + 1.)*(eta + 1.)) - 600.*(eta + 1.)*(eta + 1.)*(eta + 1.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4., 0.);
2602  case 1:
2603  return sign * RealGradient(1720.*eta/9. + 385.*xi/18. - 1540.*(eta + 1.)*(xi + 1.)/9. + 1925.*(xi + 1.)*((eta + 1.)*(eta + 1.))/6. - 1925.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/9. + 13475.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/288. + 3395./18. - 1075.*(eta + 1.)*(eta + 1.)/3. + 2150.*((eta + 1.)*(eta + 1.)*(eta + 1.))/9. - 7525.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/144., 0.);
2604  case 2:
2605  return sign * RealGradient(-1360.*eta/9. - 385.*xi/18. + 1540.*(eta + 1.)*(xi + 1.)/9. - 1925.*(xi + 1.)*(eta + 1.)*(eta + 1.)/6. + 1925.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/9. - 13475.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/288. - 2765./18. + 850.*((eta + 1.)*(eta + 1.))/3. - 1700.*(eta + 1.)*(eta + 1.)*(eta + 1.)/9. + 2975.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/72., 0.);
2606  case 3:
2607  return sign * RealGradient(360.*eta + 105.*xi/2. - 420.*(eta + 1.)*(xi + 1.) + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 525.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 3675.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 735./2. - 675.*(eta + 1.)*(eta + 1.) + 450.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16., 0.);
2608  case 4:
2609  return sign * RealGradient(0., -450.*eta - 360.*xi + 1350.*(eta + 1.)*(xi + 1.) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 1350.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 690. + 450.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. + 210.*((xi + 1.)*(xi + 1.)) - 3675.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)/4.);
2610  case 5:
2611  return sign * RealGradient(0., 475.*eta/3. + 170.*xi/3. - 475.*(eta + 1.)*(xi + 1.) + 3325.*(eta + 1.)*((xi + 1.)*(xi + 1.))/12. + 1075.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 1925.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/12. + 1765./9. - 1075.*(eta + 1.)*(eta + 1.)/6. - 7525.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/24. - 595.*(xi + 1.)*(xi + 1.)/18. + 13475.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/144. + 1925.*((eta + 1.)*(eta + 1.)*(eta + 1.))/36.);
2612  case 6:
2613  return sign * RealGradient(0., -250.*eta/3. - 80.*xi/3. + 250.*(eta + 1.)*(xi + 1.) - 875.*(eta + 1.)*(xi + 1.)*(xi + 1.)/6. - 425.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 1925.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/12. - 910./9. + 425.*((eta + 1.)*(eta + 1.))/3. + 2975.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/12. + 140.*((xi + 1.)*(xi + 1.))/9. - 13475.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/144. - 1925.*(eta + 1.)*(eta + 1.)*(eta + 1.)/36.);
2614  case 7:
2615  return sign * RealGradient(0., 225.*eta + 90.*xi - 675.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. + 2025.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 285. - 675.*(eta + 1.)*(eta + 1.)/2. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 105.*(xi + 1.)*(xi + 1.)/2. + 3675.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.))/4.);
2616  case 8:
2617  return sign * RealGradient(-90.*eta + 105.*(eta + 1.)*(xi + 1.) - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)/4. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 3675.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. - 90. + 675.*((eta + 1.)*(eta + 1.))/2. - 675.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16., 0.);
2618  case 9:
2619  return sign * RealGradient(340.*eta/9. - 385.*(eta + 1.)*(xi + 1.)/9. + 1925.*(xi + 1.)*((eta + 1.)*(eta + 1.))/12. - 1925.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/12. + 13475.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/288. + 340./9. - 425.*(eta + 1.)*(eta + 1.)/3. + 425.*((eta + 1.)*(eta + 1.)*(eta + 1.))/3. - 2975.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/72., 0.);
2620  case 10:
2621  return sign * RealGradient(-430.*eta/9. + 385.*(eta + 1.)*(xi + 1.)/9. - 1925.*(xi + 1.)*(eta + 1.)*(eta + 1.)/12. + 1925.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/12. - 13475.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/288. - 430./9. + 1075.*((eta + 1.)*(eta + 1.))/6. - 1075.*(eta + 1.)*(eta + 1.)*(eta + 1.)/6. + 7525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/144., 0.);
2622  case 11:
2623  return sign * RealGradient(120.*eta - 105.*(eta + 1.)*(xi + 1.) + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 3675.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 120. - 450.*(eta + 1.)*(eta + 1.) + 450.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4., 0.);
2624  case 12:
2625  return sign * RealGradient(0., -450.*eta - 120.*xi + 900.*(eta + 1.)*(xi + 1.) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. - 1350.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 525.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 510. + 675.*((eta + 1.)*(eta + 1.)) + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. + 105.*((xi + 1.)*(xi + 1.))/2. - 3675.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2.);
2626  case 13:
2627  return sign * RealGradient(0., 500.*eta/3. + 320.*xi/9. - 1000.*(eta + 1.)*(xi + 1.)/3. + 875.*(eta + 1.)*((xi + 1.)*(xi + 1.))/6. + 1700.*(xi + 1.)*((eta + 1.)*(eta + 1.))/3. - 1925.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/9. + 1660./9. - 850.*(eta + 1.)*(eta + 1.)/3. - 2975.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/12. - 140.*(xi + 1.)*(xi + 1.)/9. + 13475.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/144. + 1925.*((eta + 1.)*(eta + 1.)*(eta + 1.))/18.);
2628  case 14:
2629  return sign * RealGradient(0., -950.*eta/3. - 680.*xi/9. + 1900.*(eta + 1.)*(xi + 1.)/3. - 3325.*(eta + 1.)*(xi + 1.)*(xi + 1.)/12. - 2150.*(xi + 1.)*(eta + 1.)*(eta + 1.)/3. + 1925.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/9. - 3190./9. + 1075.*((eta + 1.)*(eta + 1.))/3. + 7525.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/24. + 595.*((xi + 1.)*(xi + 1.))/18. - 13475.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/144. - 1925.*(eta + 1.)*(eta + 1.)*(eta + 1.)/18.);
2630  case 15:
2631  return sign * RealGradient(0., 900.*eta + 480.*xi - 1800.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. + 1800.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 525.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 1140. - 900.*(eta + 1.)*(eta + 1.) - 1575.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 210.*(xi + 1.)*(xi + 1.) + 3675.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.))/2.);
2632  case 16:
2633  return RealGradient(0., 870.*eta + 480.*xi - 1800.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. + 1800.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 525.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 1118. - 870.*(eta + 1.)*(eta + 1.) - 1575.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 210.*(xi + 1.)*(xi + 1.) + 3675.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 1015.*((eta + 1.)*(eta + 1.)*(eta + 1.))/4.);
2634  case 17:
2635  return RealGradient(0., 420.*eta + 360.*xi - 1350.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. + 1350.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 668. - 420.*(eta + 1.)*(eta + 1.) - 1575.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 210.*(xi + 1.)*(xi + 1.) + 3675.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 245.*((eta + 1.)*(eta + 1.)*(eta + 1.))/2.);
2636  case 18:
2637  return RealGradient(0., 60.*eta + 44. - 60.*(eta + 1.)*(eta + 1.) + 35.*((eta + 1.)*(eta + 1.)*(eta + 1.))/2.);
2638  case 19:
2639  return RealGradient(-390.*eta + 1365.*(eta + 1.)*(xi + 1.)/4. - 3045.*(xi + 1.)*(eta + 1.)*(eta + 1.)/4. + 525.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 3675.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. - 390. + 870.*((eta + 1.)*(eta + 1.)) - 600.*(eta + 1.)*(eta + 1.)*(eta + 1.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4., 0.);
2640  case 20:
2641  return RealGradient(-90.*eta + 315.*(eta + 1.)*(xi + 1.)/4. - 735.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 3675.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. - 90. + 420.*((eta + 1.)*(eta + 1.)) - 450.*(eta + 1.)*(eta + 1.)*(eta + 1.) + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4., 0.);
2642  case 21:
2643  return RealGradient(-120.*eta + 105.*(eta + 1.)*(xi + 1.) - 105.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 120. + 60.*((eta + 1.)*(eta + 1.)), 0.);
2644  case 22:
2645  return RealGradient(585.*eta/2. - 1365.*(eta + 1.)*(xi + 1.)/4. + 3045.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. - 525.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 3675.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 585./2. - 1305.*(eta + 1.)*(eta + 1.)/2. + 450.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16., 0.);
2646  case 23:
2647  return RealGradient(135.*eta/2. - 315.*(eta + 1.)*(xi + 1.)/4. + 735.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 3675.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 135./2. - 315.*(eta + 1.)*(eta + 1.) + 675.*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16., 0.);
2648  case 24:
2649  return RealGradient(90.*eta - 105.*(eta + 1.)*(xi + 1.) + 105.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. + 90. - 45.*(eta + 1.)*(eta + 1.), 0.);
2650  case 25:
2651  return RealGradient(0., -435.*eta - 120.*xi + 900.*(eta + 1.)*(xi + 1.) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. - 1350.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 525.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 497. + 1305.*((eta + 1.)*(eta + 1.))/2. + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. + 105.*((xi + 1.)*(xi + 1.))/2. - 3675.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 1015.*(eta + 1.)*(eta + 1.)*(eta + 1.)/4.);
2652  case 26:
2653  return RealGradient(0., -210.*eta - 90.*xi + 675.*(eta + 1.)*(xi + 1.) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. - 2025.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 272. + 315.*((eta + 1.)*(eta + 1.)) + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. + 105.*((xi + 1.)*(xi + 1.))/2. - 3675.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 245.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2.);
2654  case 27:
2655  return RealGradient(0., -30.*eta - 26. + 45.*((eta + 1.)*(eta + 1.)) - 35.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2.);
2656  case 28:
2657  return RealGradient(0., 0.);
2658  case 29:
2659  return RealGradient(0., 0.);
2660  case 30:
2661  return RealGradient(0., 171.*eta/4. + 120.*xi - 90.*(eta + 1.)*(xi + 1.) + 315.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. + 423./4. - 105.*(xi + 1.)*(xi + 1.)/2.);
2662  case 31:
2663  return RealGradient(0., -171.*eta/4. - 60.*xi + 90.*(eta + 1.)*(xi + 1.) - 315.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 297./4. + 105.*((xi + 1.)*(xi + 1.))/4.);
2664  case 32:
2665  return RealGradient(0., 81.*eta/4. + 90.*xi - 135.*(eta + 1.)*(xi + 1.)/2. + 315.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. + 333./4. - 105.*(xi + 1.)*(xi + 1.)/2.);
2666  case 33:
2667  return RealGradient(0., -81.*eta/4. - 45.*xi + 135.*(eta + 1.)*(xi + 1.)/2. - 315.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 207./4. + 105.*((xi + 1.)*(xi + 1.))/4.);
2668  case 34:
2669  return RealGradient(0., 0.);
2670  case 35:
2671  return RealGradient(0., 0.);
2672  case 36:
2673  return RealGradient(0., 9.*eta/2. - 3./2.);
2674  case 37:
2675  return RealGradient(0., 0.);
2676  case 38:
2677  return RealGradient(0., 0.);
2678  case 39:
2679  return RealGradient(0., -9.*eta/2. - 3./2.);
2680  default:
2681  libmesh_error_msg("Invalid i = " << i);
2682  }
2683  } // j = 0
2684 
2685  // d^2()/dxideta
2686  case 1:
2687  {
2688  switch(ii)
2689  {
2690  case 0:
2691  return sign * RealGradient(-900.*eta - 480.*xi + 7200.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 6300.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 14400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1140. + 3600.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 12600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 840.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7350.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 2100.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
2692  case 1:
2693  return sign * RealGradient(950.*eta/3. + 1720.*xi/9. - 8600.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 7700.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. + 17200.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. - 30100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 1270./3. - 3800.*(eta + 1.)*(eta + 1.)/(2.*2.)/3. - 15400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. - 3080.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 26950.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. + 6650.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9., 0.);
2694  case 2:
2695  return sign * RealGradient(-500.*eta/3. - 1360.*xi/9. + 6800.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 7700.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. - 13600.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. + 23800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 820./3. + 2000.*((eta + 1.)*(eta + 1.)/(2.*2.))/3. + 15400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. + 3080.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 26950.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. - 3500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9., 0.);
2696  case 3:
2697  return sign * RealGradient(450.*eta + 360.*xi - 5400.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 6300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 10800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 6300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 690. - 1800.*(eta + 1.)*(eta + 1.)/(2.*2.) - 12600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 840.*(xi + 1.)*(xi + 1.)/(2.*2.) + 7350.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 1050.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
2698  case 4:
2699  return sign * RealGradient(0., -120.*eta - 450.*xi + 3600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 10800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3150.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 510. + 210.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 9450.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7350.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2700.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2100.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
2700  case 5:
2701  return sign * RealGradient(0., 430.*eta/9. + 475.*xi/3. - 4300.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 4300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 30100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 3850.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. + 185. - 770.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 3850.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 26950.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 950.*(xi + 1.)*(xi + 1.)/(2.*2.) + 6650.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9.);
2702  case 6:
2703  return sign * RealGradient(0., -340.*eta/9. - 250.*xi/3. + 3400.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 3400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 23800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 3850.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. - 110. + 770.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 3850.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 26950.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 500.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3500.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9.);
2704  case 7:
2705  return sign * RealGradient(0., 90.*eta + 225.*xi - 2700.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 8100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 6300.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 3150.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 285. - 210.*(eta + 1.)*(eta + 1.)/(2.*2.) - 9450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7350.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1350.*(xi + 1.)*(xi + 1.)/(2.*2.) + 1050.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
2706  case 8:
2707  return sign * RealGradient(-225.*eta - 90.*xi + 2700.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3150.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 8100.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 6300.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 285. + 1350.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 9450.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 210.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7350.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 1050.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
2708  case 9:
2709  return sign * RealGradient(250.*eta/3. + 340.*xi/9. - 3400.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 3850.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. + 3400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 23800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. + 110. - 500.*(eta + 1.)*(eta + 1.)/(2.*2.) - 3850.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 770.*(xi + 1.)*(xi + 1.)/(2.*2.)/9. + 26950.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. + 3500.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9., 0.);
2710  case 10:
2711  return sign * RealGradient(-475.*eta/3. - 430.*xi/9. + 4300.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 3850.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. - 4300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 30100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/9. - 185. + 950.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 3850.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 770.*((xi + 1.)*(xi + 1.)/(2.*2.))/9. - 26950.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9. - 6650.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/9., 0.);
2712  case 11:
2713  return sign * RealGradient(450.*eta + 120.*xi - 3600.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 3150.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 10800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 8400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 510. - 2700.*(eta + 1.)*(eta + 1.)/(2.*2.) - 9450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 210.*(xi + 1.)*(xi + 1.)/(2.*2.) + 7350.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 2100.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
2714  case 12:
2715  return sign * RealGradient(0., -360.*eta - 450.*xi + 5400.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 10800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 6300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 690. + 840.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 12600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7350.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1800.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1050.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
2716  case 13:
2717  return sign * RealGradient(0., 1360.*eta/9. + 500.*xi/3. - 6800.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. + 13600.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 23800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 7700.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/3. + 820./3. - 3080.*(eta + 1.)*(eta + 1.)/(2.*2.)/9. - 15400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 26950.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 2000.*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 3500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9.);
2718  case 14:
2719  return sign * RealGradient(0., -1720.*eta/9. - 950.*xi/3. + 8600.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/3. - 17200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/3. + 30100.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/9. - 7700.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/3. - 1270./3. + 3080.*((eta + 1.)*(eta + 1.)/(2.*2.))/9. + 15400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 26950.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9. + 3800.*((xi + 1.)*(xi + 1.)/(2.*2.))/3. - 6650.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/9.);
2720  case 15:
2721  return sign * RealGradient(0., 480.*eta + 900.*xi - 7200.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 14400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 6300.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 1140. - 840.*(eta + 1.)*(eta + 1.)/(2.*2.) - 12600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7350.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3600.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
2722  case 16:
2723  return RealGradient(0., 390.*eta + 870.*xi - 6960.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 14400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 6090.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 1065. - 1365.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 12600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7350.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 3600.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
2724  case 17:
2725  return RealGradient(0., 90.*eta + 420.*xi - 3360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 10800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 8400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2940.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 465. - 315.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 9450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 7350.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2700.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
2726  case 18:
2727  return RealGradient(0., 120.*eta + 60.*xi - 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 420.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 120. - 210.*(eta + 1.)*(eta + 1.)/(2.*2.));
2728  case 19:
2729  return RealGradient(-870.*eta - 390.*xi + 6960.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 6090.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 14400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1065. + 3600.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 12600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 1365.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 7350.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 2100.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
2730  case 20:
2731  return RealGradient(-420.*eta - 90.*xi + 3360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 2940.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 10800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 465. + 2700.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 9450.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 315.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 7350.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) - 2100.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
2732  case 21:
2733  return RealGradient(-60.*eta - 120.*xi + 480.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 420.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 120. + 210.*((xi + 1.)*(xi + 1.)/(2.*2.)), 0.);
2734  case 22:
2735  return RealGradient(435.*eta + 585.*xi/2. - 5220.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 6090.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 10800.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 6300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 630. - 1800.*(eta + 1.)*(eta + 1.)/(2.*2.) - 12600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 1365.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 7350.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 1050.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
2736  case 23:
2737  return RealGradient(210.*eta + 135.*xi/2. - 2520.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2940.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 8100.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 6300.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 255. - 1350.*(eta + 1.)*(eta + 1.)/(2.*2.) - 9450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 315.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 7350.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 1050.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
2738  case 24:
2739  return RealGradient(30.*eta + 90.*xi - 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 420.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 90. - 210.*(xi + 1.)*(xi + 1.)/(2.*2.), 0.);
2740  case 25:
2741  return RealGradient(0., -585.*eta/2. - 435.*xi + 5220.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 10800.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 6090.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 630. + 1365.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 12600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7350.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1800.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1050.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
2742  case 26:
2743  return RealGradient(0., -135.*eta/2. - 210.*xi + 2520.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 8100.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2940.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 255. + 315.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 9450.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 7350.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1350.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 1050.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
2744  case 27:
2745  return RealGradient(0., -90.*eta - 30.*xi + 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 420.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 90. + 210.*((eta + 1.)*(eta + 1.)/(2.*2.)));
2746  case 28:
2747  return RealGradient(171.*eta/4. + 135./4. - 180.*(eta + 1.)*(eta + 1.)/(2.*2.) + 105.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
2748  case 29:
2749  return RealGradient(-171.*eta/4. - 135./4. + 180.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 105.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
2750  case 30:
2751  return RealGradient(0., 171.*xi/4. + 135./4. - 180.*(xi + 1.)*(xi + 1.)/(2.*2.) + 105.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
2752  case 31:
2753  return RealGradient(0., -171.*xi/4. - 135./4. + 180.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 105.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
2754  case 32:
2755  return RealGradient(0., 81.*xi/4. + 75./4. - 135.*(xi + 1.)*(xi + 1.)/(2.*2.) + 105.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)));
2756  case 33:
2757  return RealGradient(0., -81.*xi/4. - 75./4. + 135.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 105.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.));
2758  case 34:
2759  return RealGradient(81.*eta/4. + 75./4. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.) + 105.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)), 0.);
2760  case 35:
2761  return RealGradient(-81.*eta/4. - 75./4. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 105.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.), 0.);
2762  case 36:
2763  return RealGradient(0., 9.*xi/2.);
2764  case 37:
2765  return RealGradient(-9.*eta/2., 0.);
2766  case 38:
2767  return RealGradient(9.*eta/2., 0.);
2768  case 39:
2769  return RealGradient(0., -9.*xi/2.);
2770  default:
2771  libmesh_error_msg("Invalid i = " << i);
2772  }
2773  } // j = 1
2774 
2775  // d^2()/deta^2
2776  case 2:
2777  {
2778  switch(ii)
2779  {
2780  case 0:
2781  return sign * RealGradient(-480.*eta - 900.*xi + 1800.*(eta + 1.)*(xi + 1.) - 1800.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 525.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 1140. + 210.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 3675.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 900.*((xi + 1.)*(xi + 1.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2., 0.);
2782  case 1:
2783  return sign * RealGradient(680.*eta/9. + 950.*xi/3. - 1900.*(eta + 1.)*(xi + 1.)/3. + 2150.*(eta + 1.)*((xi + 1.)*(xi + 1.))/3. - 1925.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/9. + 3325.*(xi + 1.)*((eta + 1.)*(eta + 1.))/12. + 3190./9. - 595.*(eta + 1.)*(eta + 1.)/18. - 7525.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/24. + 13475.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/144. - 1075.*(xi + 1.)*(xi + 1.)/3. + 1925.*((xi + 1.)*(xi + 1.)*(xi + 1.))/18., 0.);
2784  case 2:
2785  return sign * RealGradient(-320.*eta/9. - 500.*xi/3. + 1000.*(eta + 1.)*(xi + 1.)/3. - 1700.*(eta + 1.)*(xi + 1.)*(xi + 1.)/3. + 1925.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/9. - 875.*(xi + 1.)*(eta + 1.)*(eta + 1.)/6. - 1660./9. + 140.*((eta + 1.)*(eta + 1.))/9. + 2975.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/12. - 13475.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/144. + 850.*((xi + 1.)*(xi + 1.))/3. - 1925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/18., 0.);
2786  case 3:
2787  return sign * RealGradient(120.*eta + 450.*xi - 900.*(eta + 1.)*(xi + 1.) + 1350.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 525.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. + 510. - 105.*(eta + 1.)*(eta + 1.)/2. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 3675.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 675.*(xi + 1.)*(xi + 1.) + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.))/2., 0.);
2788  case 4:
2789  return sign * RealGradient(0., -120.*xi + 105.*(eta + 1.)*(xi + 1.) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 3675.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 120. + 450.*((xi + 1.)*(xi + 1.)) - 450.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4.);
2790  case 5:
2791  return sign * RealGradient(0., 430.*xi/9. - 385.*(eta + 1.)*(xi + 1.)/9. + 1925.*(eta + 1.)*((xi + 1.)*(xi + 1.))/12. - 1925.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/12. + 13475.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/288. + 430./9. - 1075.*(xi + 1.)*(xi + 1.)/6. + 1075.*((xi + 1.)*(xi + 1.)*(xi + 1.))/6. - 7525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/144.);
2792  case 6:
2793  return sign * RealGradient(0., -340.*xi/9. + 385.*(eta + 1.)*(xi + 1.)/9. - 1925.*(eta + 1.)*(xi + 1.)*(xi + 1.)/12. + 1925.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/12. - 13475.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/288. - 340./9. + 425.*((xi + 1.)*(xi + 1.))/3. - 425.*(xi + 1.)*(xi + 1.)*(xi + 1.)/3. + 2975.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/72.);
2794  case 7:
2795  return sign * RealGradient(0., 90.*xi - 105.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 3675.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 90. - 675.*(xi + 1.)*(xi + 1.)/2. + 675.*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16.);
2796  case 8:
2797  return sign * RealGradient(-90.*eta - 225.*xi + 675.*(eta + 1.)*(xi + 1.) - 2025.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)/4. - 285. + 105.*((eta + 1.)*(eta + 1.))/2. + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 3675.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 675.*((xi + 1.)*(xi + 1.))/2. - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)/4., 0.);
2798  case 9:
2799  return sign * RealGradient(80.*eta/3. + 250.*xi/3. - 250.*(eta + 1.)*(xi + 1.) + 425.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 1925.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/12. + 875.*(xi + 1.)*((eta + 1.)*(eta + 1.))/6. + 910./9. - 140.*(eta + 1.)*(eta + 1.)/9. - 2975.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/12. + 13475.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/144. - 425.*(xi + 1.)*(xi + 1.)/3. + 1925.*((xi + 1.)*(xi + 1.)*(xi + 1.))/36., 0.);
2800  case 10:
2801  return sign * RealGradient(-170.*eta/3. - 475.*xi/3. + 475.*(eta + 1.)*(xi + 1.) - 1075.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 1925.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/12. - 3325.*(xi + 1.)*(eta + 1.)*(eta + 1.)/12. - 1765./9. + 595.*((eta + 1.)*(eta + 1.))/18. + 7525.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/24. - 13475.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/144. + 1075.*((xi + 1.)*(xi + 1.))/6. - 1925.*(xi + 1.)*(xi + 1.)*(xi + 1.)/36., 0.);
2802  case 11:
2803  return sign * RealGradient(360.*eta + 450.*xi - 1350.*(eta + 1.)*(xi + 1.) + 1350.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. + 690. - 210.*(eta + 1.)*(eta + 1.) - 1575.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 3675.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 450.*(xi + 1.)*(xi + 1.) + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.))/4., 0.);
2804  case 12:
2805  return sign * RealGradient(0., -105.*eta/2. - 360.*xi + 420.*(eta + 1.)*(xi + 1.) - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 525.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 3675.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 735./2. + 675.*((xi + 1.)*(xi + 1.)) - 450.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/16.);
2806  case 13:
2807  return sign * RealGradient(0., 385.*eta/18. + 1360.*xi/9. - 1540.*(eta + 1.)*(xi + 1.)/9. + 1925.*(eta + 1.)*((xi + 1.)*(xi + 1.))/6. - 1925.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/9. + 13475.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/288. + 2765./18. - 850.*(xi + 1.)*(xi + 1.)/3. + 1700.*((xi + 1.)*(xi + 1.)*(xi + 1.))/9. - 2975.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/72.);
2808  case 14:
2809  return sign * RealGradient(0., -385.*eta/18. - 1720.*xi/9. + 1540.*(eta + 1.)*(xi + 1.)/9. - 1925.*(eta + 1.)*(xi + 1.)*(xi + 1.)/6. + 1925.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/9. - 13475.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/288. - 3395./18. + 1075.*((xi + 1.)*(xi + 1.))/3. - 2150.*(xi + 1.)*(xi + 1.)*(xi + 1.)/9. + 7525.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/144.);
2810  case 15:
2811  return sign * RealGradient(0., 105.*eta/2. + 480.*xi - 420.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 525.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 3675.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 945./2. - 900.*(xi + 1.)*(xi + 1.) + 600.*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4.);
2812  case 16:
2813  return RealGradient(0., 390.*xi - 1365.*(eta + 1.)*(xi + 1.)/4. + 3045.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. - 525.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 3675.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 390. - 870.*(xi + 1.)*(xi + 1.) + 600.*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4.);
2814  case 17:
2815  return RealGradient(0., 90.*xi - 315.*(eta + 1.)*(xi + 1.)/4. + 735.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 3675.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 90. - 420.*(xi + 1.)*(xi + 1.) + 450.*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4.);
2816  case 18:
2817  return RealGradient(0., 120.*xi - 105.*(eta + 1.)*(xi + 1.) + 105.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. + 120. - 60.*(xi + 1.)*(xi + 1.));
2818  case 19:
2819  return RealGradient(-480.*eta - 870.*xi + 1800.*(eta + 1.)*(xi + 1.) - 1800.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 525.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 1118. + 210.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 3675.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 870.*((xi + 1.)*(xi + 1.)) - 1015.*(xi + 1.)*(xi + 1.)*(xi + 1.)/4., 0.);
2820  case 20:
2821  return RealGradient(-360.*eta - 420.*xi + 1350.*(eta + 1.)*(xi + 1.) - 1350.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 1575.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 668. + 210.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 3675.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 420.*((xi + 1.)*(xi + 1.)) - 245.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2., 0.);
2822  case 21:
2823  return RealGradient(-60.*xi - 44. + 60.*((xi + 1.)*(xi + 1.)) - 35.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2., 0.);
2824  case 22:
2825  return RealGradient(120.*eta + 435.*xi - 900.*(eta + 1.)*(xi + 1.) + 1350.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 525.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. + 497. - 105.*(eta + 1.)*(eta + 1.)/2. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 3675.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 1305.*(xi + 1.)*(xi + 1.)/2. + 1015.*((xi + 1.)*(xi + 1.)*(xi + 1.))/4., 0.);
2826  case 23:
2827  return RealGradient(90.*eta + 210.*xi - 675.*(eta + 1.)*(xi + 1.) + 2025.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 1575.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. + 272. - 105.*(eta + 1.)*(eta + 1.)/2. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 3675.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 315.*(xi + 1.)*(xi + 1.) + 245.*((xi + 1.)*(xi + 1.)*(xi + 1.))/2., 0.);
2828  case 24:
2829  return RealGradient(30.*xi + 26. - 45.*(xi + 1.)*(xi + 1.) + 35.*((xi + 1.)*(xi + 1.)*(xi + 1.))/2., 0.);
2830  case 25:
2831  return RealGradient(0., -585.*xi/2. + 1365.*(eta + 1.)*(xi + 1.)/4. - 3045.*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. + 525.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 3675.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 585./2. + 1305.*((xi + 1.)*(xi + 1.))/2. - 450.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/16.);
2832  case 26:
2833  return RealGradient(0., -135.*xi/2. + 315.*(eta + 1.)*(xi + 1.)/4. - 735.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 3675.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 135./2. + 315.*((xi + 1.)*(xi + 1.)) - 675.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/16.);
2834  case 27:
2835  return RealGradient(0., -90.*xi + 105.*(eta + 1.)*(xi + 1.) - 105.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 90. + 45.*((xi + 1.)*(xi + 1.)));
2836  case 28:
2837  return RealGradient(120.*eta + 171.*xi/4. - 90.*(eta + 1.)*(xi + 1.) + 315.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 423./4. - 105.*(eta + 1.)*(eta + 1.)/2., 0.);
2838  case 29:
2839  return RealGradient(-60.*eta - 171.*xi/4. + 90.*(eta + 1.)*(xi + 1.) - 315.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 297./4. + 105.*((eta + 1.)*(eta + 1.))/4., 0.);
2840  case 30:
2841  return RealGradient(0., 0.);
2842  case 31:
2843  return RealGradient(0., 0.);
2844  case 32:
2845  return RealGradient(0., 0.);
2846  case 33:
2847  return RealGradient(0., 0.);
2848  case 34:
2849  return RealGradient(90.*eta + 81.*xi/4. - 135.*(eta + 1.)*(xi + 1.)/2. + 315.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 333./4. - 105.*(eta + 1.)*(eta + 1.)/2., 0.);
2850  case 35:
2851  return RealGradient(-45.*eta - 81.*xi/4. + 135.*(eta + 1.)*(xi + 1.)/2. - 315.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 207./4. + 105.*((eta + 1.)*(eta + 1.))/4., 0.);
2852  case 36:
2853  return RealGradient(0., 0.);
2854  case 37:
2855  return RealGradient(3./2. - 9.*xi/2., 0.);
2856  case 38:
2857  return RealGradient(9.*xi/2. + 3./2., 0.);
2858  case 39:
2859  return RealGradient(0., 0.);
2860  default:
2861  libmesh_error_msg("Invalid i = " << i);
2862  }
2863  } // j = 2
2864 
2865  default:
2866  libmesh_error_msg("Invalid j = " << j);
2867  }
2868  }
2869 
2870  case TRI6:
2871  case TRI7:
2872  {
2873  switch (j)
2874  {
2875  // d^2()/dxi^2
2876  case 0:
2877  {
2878  switch(ii)
2879  {
2880  case 0:
2881  return sign * RealGradient(1344.*eta*xi - 1680.*eta - 840.*xi + 480. + 1344.*(eta*eta), -4032.*eta*xi + 1680.*eta + 2520.*xi - 480. - 1344.*eta*eta - 2688.*xi*xi);
2882  case 1:
2883  return sign * RealGradient(-4928.*eta*xi/9. + 5768.*eta/9. + 3080.*xi/9. - 1720./9. - 4480.*eta*eta/9., 4480.*eta*xi/3. - 4256.*eta/9. - 1008.*xi + 1600./9. + 1792.*(eta*eta)/9. + 9856.*(xi*xi)/9.);
2884  case 2:
2885  return sign * RealGradient(4928.*eta*xi/9. - 2240.*eta/9. - 3080.*xi/9. + 1360./9. + 448.*(eta*eta)/9., -448.*eta*xi/3. - 784.*eta/9. + 840.*xi - 1024./9. + 2240.*(eta*eta)/9. - 9856.*xi*xi/9.);
2886  case 3:
2887  return sign * RealGradient(-1344.*eta*xi + 504.*eta + 840.*xi - 360., -2016.*xi + 288. + 2688.*(xi*xi));
2888  case 4:
2889  return sign * RealGradient(168.*eta*(3. - 8.*xi), -2016.*xi + 288. + 2688.*(xi*xi));
2890  case 5:
2891  return sign * RealGradient(896.*eta*(-6.*eta - 4.*xi + 3.)/9., 1792.*eta*xi - 1792.*eta/3. - 2464.*xi/3. + 160. + 896.*(eta*eta)/3. + 7168.*(xi*xi)/9.);
2892  case 6:
2893  return sign * RealGradient(56.*eta*(-48.*eta - 8.*xi + 15.)/9., 896.*eta*xi - 1568.*eta/3. - 560.*xi/3. + 64. + 1792.*(eta*eta)/3. + 896.*(xi*xi)/9.);
2894  case 7:
2895  return sign * RealGradient(0., 0.);
2896  case 8:
2897  return sign * RealGradient(0., 0.);
2898  case 9:
2899  return sign * RealGradient(56.*eta*(-40.*eta + 8.*xi + 7.)/9., 2240.*eta*xi/3. - 952.*eta/3. + 112.*xi/9. + 208./9. - 448.*eta*eta/9. - 896.*xi*xi/9.);
2900  case 10:
2901  return sign * RealGradient(896.*eta*(-2.*eta + 4.*xi - 1.)/9., 1792.*eta*xi/3. - 1568.*eta/3. + 6944.*xi/9. - 1216./9. + 4480.*(eta*eta)/9. - 7168.*xi*xi/9.);
2902  case 11:
2903  return sign * RealGradient(168.*eta*(8.*eta + 8.*xi - 5.), -4032.*eta*xi + 2520.*eta + 3360.*xi - 960. - 1344.*eta*eta - 2688.*xi*xi);
2904  case 12:
2905  return RealGradient(2016.*eta*(-4.*eta - 2.*xi + 3.), 24192.*eta*xi - 12096.*eta - 9072.*xi + 2160. + 12096.*(eta*eta) + 8064.*(xi*xi));
2906  case 13:
2907  return RealGradient(1008.*eta*(12.*eta + 16.*xi - 9.), -36288.*eta*xi + 18144.*eta + 36288.*xi - 8640. - 8064.*eta*eta - 32256.*xi*xi);
2908  case 14:
2909  return RealGradient(1008.*eta*(-8.*eta - 12.*xi + 9.), 24192.*eta*xi - 6048.*eta - 21168.*xi + 3456. + 24192.*(xi*xi));
2910  case 15:
2911  return RealGradient(1008.*eta*(4.*eta + 16.*xi - 7.), -12096.*eta*xi + 3024.*eta + 28224.*xi - 4608. - 32256.*xi*xi);
2912  case 16:
2913  return RealGradient(0., -2016.*eta + 144. + 4032.*(eta*eta));
2914  case 17:
2915  return RealGradient(0., 4032.*eta - 288. - 8064.*eta*eta);
2916  case 18:
2917  return RealGradient(252.*eta*(-24.*eta - 12.*xi + 13.), 18144.*eta*xi - 8064.*eta - 6804.*xi + 1548. + 7056.*(eta*eta) + 6048.*(xi*xi));
2918  case 19:
2919  return RealGradient(252.*eta*(28.*eta + 16.*xi - 13.), -21168.*eta*xi + 9576.*eta + 9324.*xi - 2196. - 6048.*eta*eta - 8064.*xi*xi);
2920  case 20:
2921  return RealGradient(1008.*eta*(1. - xi), 1008.*eta - 1512.*xi + 144. - 2016.*eta*eta + 2016.*(xi*xi));
2922  case 21:
2923  return RealGradient(252.*eta*(-12.*eta + 16.*xi - 3.), 9072.*eta*xi - 5544.*eta + 6804.*xi - 936. + 4032.*(eta*eta) - 8064.*xi*xi);
2924  case 22:
2925  return RealGradient(1008.*eta*(4.*eta + 2.*xi - 3.), -12096.*eta*xi + 4536.*eta + 4536.*xi - 972. - 3024.*eta*eta - 4032.*xi*xi);
2926  case 23:
2927  return RealGradient(2016.*eta*(-eta - 2.*xi + 1.), 6048.*eta*xi - 1512.*eta - 8064.*xi + 1440. + 8064.*(xi*xi));
2928  default:
2929  libmesh_error_msg("Invalid i = " << i);
2930  }
2931  } // j = 0
2932 
2933  // d^2()/dxideta
2934  case 1:
2935  {
2936  switch(ii)
2937  {
2938  case 0:
2939  return sign * RealGradient(2688.*eta*xi - 2520.*eta - 1680.*xi + 720. + 2016.*(eta*eta) + 672.*(xi*xi), -2688.*eta*xi + 840.*eta + 1680.*xi - 240. - 672.*eta*eta - 2016.*xi*xi);
2940  case 1:
2941  return sign * RealGradient(-8960.*eta*xi/9. + 1568.*eta/3. + 5768.*xi/9. - 200. - 896.*eta*eta/3. - 2464.*xi*xi/9., 3584.*eta*xi/9. + 896.*eta/9. - 4256.*xi/9. + 176./9. - 1792.*eta*eta/9. + 2240.*(xi*xi)/3.);
2942  case 2:
2943  return sign * RealGradient(896.*eta*xi/9. + 952.*eta/3. - 2240.*xi/9. - 16. - 1120.*eta*eta/3. + 2464.*(xi*xi)/9., 4480.*eta*xi/9. - 392.*eta/9. - 784.*xi/9. + 112./9. - 224.*eta*eta/9. - 224.*xi*xi/3.);
2944  case 3:
2945  return sign * RealGradient(504.*xi - 72. - 672.*xi*xi, 0.);
2946  case 4:
2947  return sign * RealGradient(504.*xi - 72. - 672.*xi*xi, 0.);
2948  case 5:
2949  return sign * RealGradient(-3584.*eta*xi/3. + 1568.*eta/3. + 896.*xi/3. - 80. - 448.*eta*eta - 1792.*xi*xi/9., 1792.*eta*xi/3. - 280.*eta/3. - 1792.*xi/3. + 56. + 224.*(eta*eta)/9. + 896.*(xi*xi));
2950  case 6:
2951  return sign * RealGradient(-1792.*eta*xi/3. + 1792.*eta/3. + 280.*xi/3. - 56. - 896.*eta*eta - 224.*xi*xi/9., 3584.*eta*xi/3. - 896.*eta/3. - 1568.*xi/3. + 80. + 1792.*(eta*eta)/9. + 448.*(xi*xi));
2952  case 7:
2953  return sign * RealGradient(0., -504.*eta + 72. + 672.*(eta*eta));
2954  case 8:
2955  return sign * RealGradient(0., -504.*eta + 72. + 672.*(eta*eta));
2956  case 9:
2957  return sign * RealGradient(-4480.*eta*xi/9. + 784.*eta/9. + 392.*xi/9. - 112./9. + 224.*(eta*eta)/3. + 224.*(xi*xi)/9., -896.*eta*xi/9. + 2240.*eta/9. - 952.*xi/3. + 16. - 2464.*eta*eta/9. + 1120.*(xi*xi)/3.);
2958  case 10:
2959  return sign * RealGradient(-3584.*eta*xi/9. + 4256.*eta/9. - 896.*xi/9. - 176./9. - 2240.*eta*eta/3. + 1792.*(xi*xi)/9., 8960.*eta*xi/9. - 5768.*eta/9. - 1568.*xi/3. + 200. + 2464.*(eta*eta)/9. + 896.*(xi*xi)/3.);
2960  case 11:
2961  return sign * RealGradient(2688.*eta*xi - 1680.*eta - 840.*xi + 240. + 2016.*(eta*eta) + 672.*(xi*xi), -2688.*eta*xi + 1680.*eta + 2520.*xi - 720. - 672.*eta*eta - 2016.*xi*xi);
2962  case 12:
2963  return RealGradient(-16128.*eta*xi + 18144.*eta + 6048.*xi - 3240. - 18144.*eta*eta - 2016.*xi*xi, 24192.*eta*xi - 9072.*eta - 12096.*xi + 2160. + 8064.*(eta*eta) + 12096.*(xi*xi));
2964  case 13:
2965  return RealGradient(24192.*eta*xi - 12096.*eta - 9072.*xi + 2160. + 12096.*(eta*eta) + 8064.*(xi*xi), -16128.*eta*xi + 6048.*eta + 18144.*xi - 3240. - 2016.*eta*eta - 18144.*xi*xi);
2966  case 14:
2967  return RealGradient(-16128.*eta*xi + 4032.*eta + 9072.*xi - 1944. - 6048.*xi*xi, -6048.*xi + 432. + 12096.*(xi*xi));
2968  case 15:
2969  return RealGradient(8064.*eta*xi - 2016.*eta - 7056.*xi + 1152. + 8064.*(xi*xi), 3024.*xi - 216. - 6048.*xi*xi);
2970  case 16:
2971  return RealGradient(3024.*eta - 216. - 6048.*eta*eta, 8064.*eta*xi - 7056.*eta - 2016.*xi + 1152. + 8064.*(eta*eta));
2972  case 17:
2973  return RealGradient(-6048.*eta + 432. + 12096.*(eta*eta), -16128.*eta*xi + 9072.*eta + 4032.*xi - 1944. - 6048.*eta*eta);
2974  case 18:
2975  return RealGradient(-12096.*eta*xi + 9576.*eta + 3276.*xi - 1332. - 10584.*eta*eta - 1512.*xi*xi, 14112.*eta*xi - 3276.*eta - 8064.*xi + 1044. + 2016.*(eta*eta) + 9072.*(xi*xi));
2976  case 19:
2977  return RealGradient(14112.*eta*xi - 8064.*eta - 3276.*xi + 1044. + 9072.*(eta*eta) + 2016.*(xi*xi), -12096.*eta*xi + 3276.*eta + 9576.*xi - 1332. - 1512.*eta*eta - 10584.*xi*xi);
2978  case 20:
2979  return RealGradient(-1512.*eta + 1008.*xi - 216. + 3024.*(eta*eta) - 504.*xi*xi, -4032.*eta*xi + 2016.*eta + 1008.*xi - 360. - 2016.*eta*eta);
2980  case 21:
2981  return RealGradient(-6048.*eta*xi + 4536.*eta - 756.*xi - 216. - 6048.*eta*eta + 2016.*(xi*xi), 8064.*eta*xi - 3024.*eta - 5544.*xi + 1188. + 1008.*(eta*eta) + 4536.*(xi*xi));
2982  case 22:
2983  return RealGradient(8064.*eta*xi - 5544.*eta - 3024.*xi + 1188. + 4536.*(eta*eta) + 1008.*(xi*xi), -6048.*eta*xi - 756.*eta + 4536.*xi - 216. + 2016.*(eta*eta) - 6048.*xi*xi);
2984  case 23:
2985  return RealGradient(-4032.*eta*xi + 1008.*eta + 2016.*xi - 360. - 2016.*xi*xi, 1008.*eta - 1512.*xi - 216. - 504.*eta*eta + 3024.*(xi*xi));
2986  default:
2987  libmesh_error_msg("Invalid i = " << i);
2988  }
2989  } // j = 1
2990 
2991  // d^2()/deta^2
2992  case 2:
2993  {
2994  switch(ii)
2995  {
2996  case 0:
2997  return sign * RealGradient(4032.*eta*xi - 3360.*eta - 2520.*xi + 960. + 2688.*(eta*eta) + 1344.*(xi*xi), 168.*xi*(-8.*eta - 8.*xi + 5.));
2998  case 1:
2999  return sign * RealGradient(-1792.*eta*xi/3. - 6944.*eta/9. + 1568.*xi/3. + 1216./9. + 7168.*(eta*eta)/9. - 4480.*xi*xi/9., 896.*xi*(-4.*eta + 2.*xi + 1.)/9.);
3000  case 2:
3001  return sign * RealGradient(-2240.*eta*xi/3. - 112.*eta/9. + 952.*xi/3. - 208./9. + 896.*(eta*eta)/9. + 448.*(xi*xi)/9., 56.*xi*(-8.*eta + 40.*xi - 7.)/9.);
3002  case 3:
3003  return sign * RealGradient(0., 0.);
3004  case 4:
3005  return sign * RealGradient(0., 0.);
3006  case 5:
3007  return sign * RealGradient(-896.*eta*xi + 560.*eta/3. + 1568.*xi/3. - 64. - 896.*eta*eta/9. - 1792.*xi*xi/3., 56.*xi*(8.*eta + 48.*xi - 15.)/9.);
3008  case 6:
3009  return sign * RealGradient(-1792.*eta*xi + 2464.*eta/3. + 1792.*xi/3. - 160. - 7168.*eta*eta/9. - 896.*xi*xi/3., 896.*xi*(4.*eta + 6.*xi - 3.)/9.);
3010  case 7:
3011  return sign * RealGradient(2016.*eta - 288. - 2688.*eta*eta, 168.*xi*(8.*eta - 3.));
3012  case 8:
3013  return sign * RealGradient(2016.*eta - 288. - 2688.*eta*eta, 1344.*eta*xi - 840.*eta - 504.*xi + 360.);
3014  case 9:
3015  return sign * RealGradient(448.*eta*xi/3. - 840.*eta + 784.*xi/9. + 1024./9. + 9856.*(eta*eta)/9. - 2240.*xi*xi/9., -4928.*eta*xi/9. + 3080.*eta/9. + 2240.*xi/9. - 1360./9. - 448.*xi*xi/9.);
3016  case 10:
3017  return sign * RealGradient(-4480.*eta*xi/3. + 1008.*eta + 4256.*xi/9. - 1600./9. - 9856.*eta*eta/9. - 1792.*xi*xi/9., 4928.*eta*xi/9. - 3080.*eta/9. - 5768.*xi/9. + 1720./9. + 4480.*(xi*xi)/9.);
3018  case 11:
3019  return sign * RealGradient(4032.*eta*xi - 2520.*eta - 1680.*xi + 480. + 2688.*(eta*eta) + 1344.*(xi*xi), -1344.*eta*xi + 840.*eta + 1680.*xi - 480. - 1344.*xi*xi);
3020  case 12:
3021  return RealGradient(-36288.*eta*xi + 36288.*eta + 18144.*xi - 8640. - 32256.*eta*eta - 8064.*xi*xi, 1008.*xi*(16.*eta + 12.*xi - 9.));
3022  case 13:
3023  return RealGradient(24192.*eta*xi - 9072.*eta - 12096.*xi + 2160. + 8064.*(eta*eta) + 12096.*(xi*xi), 2016.*xi*(-2.*eta - 4.*xi + 3.));
3024  case 14:
3025  return RealGradient(4032.*xi - 288. - 8064.*xi*xi, 0.);
3026  case 15:
3027  return RealGradient(-2016.*xi + 144. + 4032.*(xi*xi), 0.);
3028  case 16:
3029  return RealGradient(-12096.*eta*xi + 28224.*eta + 3024.*xi - 4608. - 32256.*eta*eta, 1008.*xi*(16.*eta + 4.*xi - 7.));
3030  case 17:
3031  return RealGradient(24192.*eta*xi - 21168.*eta - 6048.*xi + 3456. + 24192.*(eta*eta), 1008.*xi*(-12.*eta - 8.*xi + 9.));
3032  case 18:
3033  return RealGradient(-21168.*eta*xi + 9324.*eta + 9576.*xi - 2196. - 8064.*eta*eta - 6048.*xi*xi, 252.*xi*(16.*eta + 28.*xi - 13.));
3034  case 19:
3035  return RealGradient(18144.*eta*xi - 6804.*eta - 8064.*xi + 1548. + 6048.*(eta*eta) + 7056.*(xi*xi), 252.*xi*(-12.*eta - 24.*xi + 13.));
3036  case 20:
3037  return RealGradient(6048.*eta*xi - 8064.*eta - 1512.*xi + 1440. + 8064.*(eta*eta), 2016.*xi*(-2.*eta - xi + 1.));
3038  case 21:
3039  return RealGradient(-12096.*eta*xi + 4536.*eta + 4536.*xi - 972. - 4032.*eta*eta - 3024.*xi*xi, 1008.*xi*(2.*eta + 4.*xi - 3.));
3040  case 22:
3041  return RealGradient(9072.*eta*xi + 6804.*eta - 5544.*xi - 936. - 8064.*eta*eta + 4032.*(xi*xi), 252.*xi*(16.*eta - 12.*xi - 3.));
3042  case 23:
3043  return RealGradient(-1512.*eta + 1008.*xi + 144. + 2016.*(eta*eta) - 2016.*xi*xi, 1008.*xi*(1. - eta));
3044  default:
3045  libmesh_error_msg("Invalid i = " << i);
3046  }
3047  } // j = 2
3048 
3049  default:
3050  libmesh_error_msg("Invalid j = " << j);
3051  }
3052  }
3053 
3054  default:
3055  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
3056  } // end switch (type)
3057  } // end case FOURTH
3058 
3059  // quintic Nedelec (first kind) shape function second derivatives
3060  case FIFTH:
3061  {
3062  switch (elem->type())
3063  {
3064  case QUAD8:
3065  case QUAD9:
3066  {
3067  switch (j)
3068  {
3069  // d^2()/dxi^2
3070  case 0:
3071  {
3072  switch(ii)
3073  {
3074  case 0:
3075  return sign * RealGradient(-13125.*eta/4. - 525.*xi + 13125.*(eta + 1.)*(xi + 1.)/2. - 23625.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 39375.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 91875.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 91875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 33075.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 14175./4. + 39375.*((eta + 1.)*(eta + 1.))/4. + 70875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. + 945.*((xi + 1.)*(xi + 1.))/4. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 165375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 59535.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 91875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 91875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 33075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3076  case 1:
3077  return sign * RealGradient(527625.*eta/512. + 40845.*xi/256. - 1021125.*(eta + 1.)*(xi + 1.)/512. + 874125.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. + 3063375.*(xi + 1.)*((eta + 1.)*(eta + 1.))/512. - 7147875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 7147875.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/2048. - 2573235.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. + 567105./512. - 1582875.*(eta + 1.)*(eta + 1.)/512. - 2622375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/1024. - 34965.*(xi + 1.)*(xi + 1.)/512. + 6118875.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. - 6118875.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. + 2202795.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8192. + 3693375.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 3693375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2048. + 1329615.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4096., 0.);
3078  case 2:
3079  return sign * RealGradient(-28875.*eta/32. - 2835.*xi/16. + 70875.*(eta + 1.)*(xi + 1.)/32. - 70875.*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. - 212625.*(xi + 1.)*(eta + 1.)*(eta + 1.)/32. + 496125.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 496125.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. + 178605.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/256. - 32235./32. + 86625.*((eta + 1.)*(eta + 1.))/32. + 212625.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/64. + 2835.*((xi + 1.)*(xi + 1.))/32. - 496125.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. + 496125.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/256. - 178605.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. - 202125.*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 202125.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/128. - 72765.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/256., 0.);
3080  case 3:
3081  return sign * RealGradient(233625.*eta/512. + 29085.*xi/256. - 727125.*(eta + 1.)*(xi + 1.)/512. + 874125.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. + 2181375.*(xi + 1.)*((eta + 1.)*(eta + 1.))/512. - 5089875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 5089875.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/2048. - 1832355.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. + 273105./512. - 700875.*(eta + 1.)*(eta + 1.)/512. - 2622375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/1024. - 34965.*(xi + 1.)*(xi + 1.)/512. + 6118875.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. - 6118875.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. + 2202795.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8192. + 1635375.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 1635375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2048. + 588735.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4096., 0.);
3082  case 4:
3083  return sign * RealGradient(-7875.*eta/4. - 420.*xi + 5250.*(eta + 1.)*(xi + 1.) - 23625.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 15750.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 18375.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 18375.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 6615.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 8925./4. + 23625.*((eta + 1.)*(eta + 1.))/4. + 70875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. + 945.*((xi + 1.)*(xi + 1.))/4. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 165375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 59535.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 55125.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 55125.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 19845.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3084  case 5:
3085  return sign * RealGradient(0., 2250.*eta + 7875.*xi/4. - 23625.*(eta + 1.)*(xi + 1.)/2. + 15750.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 23625.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 165375.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. - 55125.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 99225.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 15375./4. - 7875.*(eta + 1.)*(eta + 1.)/2. - 55125.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 2625.*(xi + 1.)*(xi + 1.) + 18375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 33075.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 2625.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 55125.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 7875.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8.);
3086  case 6:
3087  return sign * RealGradient(0., -42975.*eta/64. - 152775.*xi/512. + 902475.*(eta + 1.)*(xi + 1.)/256. - 300825.*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. + 902475.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 6648075.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. + 4288725.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 3671325.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. - 467475./512. + 316575.*((eta + 1.)*(eta + 1.))/256. + 2216025.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/256. - 6648075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 50925.*((xi + 1.)*(xi + 1.))/128. - 1429575.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/256. + 1223775.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 204225.*(eta + 1.)*(eta + 1.)*(eta + 1.)/256. + 4288725.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2048. - 152775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. - 3671325.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8192. + 174825.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/1024.);
3088  case 7:
3089  return sign * RealGradient(0., 1575.*eta/4. + 4725.*xi/32. - 33075.*(eta + 1.)*(xi + 1.)/16. + 11025.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. - 33075.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 363825.*(xi + 1.)*((eta + 1.)*(eta + 1.))/64. - 297675.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 297675.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/256. + 16425./32. - 17325.*(eta + 1.)*(eta + 1.)/16. - 121275.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/16. + 363825.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 1575.*(xi + 1.)*(xi + 1.)/8. + 99225.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 99225.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 14175.*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. + 297675.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/512. - 14175.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64.);
3090  case 8:
3091  return sign * RealGradient(0., -10575.*eta/64. - 26775.*xi/512. + 222075.*(eta + 1.)*(xi + 1.)/256. - 74025.*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. + 222075.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 2943675.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. + 3053925.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 3671325.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. - 106275./512. + 140175.*((eta + 1.)*(eta + 1.))/256. + 981225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/256. - 2943675.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 8925.*((xi + 1.)*(xi + 1.))/128. - 1017975.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/256. + 1223775.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 145425.*(eta + 1.)*(eta + 1.)*(eta + 1.)/256. + 3053925.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2048. - 26775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. - 3671325.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8192. + 174825.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/1024.);
3092  case 9:
3093  return sign * RealGradient(0., 900.*eta + 1575.*xi/4. - 4725.*(eta + 1.)*(xi + 1.) + 6300.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 99225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. - 11025.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 99225.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 4875./4. - 4725.*(eta + 1.)*(eta + 1.)/2. - 33075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 99225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 525.*(xi + 1.)*(xi + 1.) + 14700.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 33075.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 2100.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 11025.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8.);
3094  case 10:
3095  return sign * RealGradient(-1575.*eta/4. + 1050.*(eta + 1.)*(xi + 1.) - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 6300.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 11025.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 7350.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 6615.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 1575./4. + 4725.*((eta + 1.)*(eta + 1.))/2. + 14175.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/4. - 99225.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 33075.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 59535.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 33075.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 11025.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 19845.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3096  case 11:
3097  return sign * RealGradient(46725.*eta/512. - 145425.*(eta + 1.)*(xi + 1.)/512. + 174825.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. + 436275.*(xi + 1.)*((eta + 1.)*(eta + 1.))/256. - 3053925.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 1017975.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/512. - 1832355.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. + 46725./512. - 140175.*(eta + 1.)*(eta + 1.)/256. - 524475.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/512. + 3671325.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. - 1223775.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 2202795.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8192. + 981225.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 327075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 588735.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4096., 0.);
3098  case 12:
3099  return sign * RealGradient(-5775.*eta/32. + 14175.*(eta + 1.)*(xi + 1.)/32. - 14175.*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. - 42525.*(xi + 1.)*(eta + 1.)*(eta + 1.)/16. + 297675.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 99225.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 178605.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/256. - 5775./32. + 17325.*((eta + 1.)*(eta + 1.))/16. + 42525.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/32. - 297675.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. + 99225.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 178605.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. - 121275.*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 40425.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 72765.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/256., 0.);
3100  case 13:
3101  return sign * RealGradient(105525.*eta/512. - 204225.*(eta + 1.)*(xi + 1.)/512. + 174825.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. + 612675.*(xi + 1.)*((eta + 1.)*(eta + 1.))/256. - 4288725.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 1429575.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/512. - 2573235.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. + 105525./512. - 316575.*(eta + 1.)*(eta + 1.)/256. - 524475.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/512. + 3671325.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. - 1223775.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 2202795.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8192. + 2216025.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 738675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 1329615.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4096., 0.);
3102  case 14:
3103  return sign * RealGradient(-2625.*eta/4. + 2625.*(eta + 1.)*(xi + 1.)/2. - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 7875.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 55125.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 18375.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 33075.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 2625./4. + 7875.*((eta + 1.)*(eta + 1.))/2. + 14175.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/4. - 99225.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 33075.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 59535.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 55125.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 18375.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 33075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3104  case 15:
3105  return sign * RealGradient(0., 2250.*eta + 2625.*xi/4. - 7875.*(eta + 1.)*(xi + 1.) + 7875.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 165375.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. - 18375.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 165375.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 10875./4. - 23625.*(eta + 1.)*(eta + 1.)/4. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 99225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 2625.*(xi + 1.)*(xi + 1.)/4. + 18375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 5250.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 11025.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 23625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16.);
3106  case 16:
3107  return sign * RealGradient(0., -52875.*eta/128. - 44625.*xi/512. + 370125.*(eta + 1.)*(xi + 1.)/256. - 370125.*(eta + 1.)*(xi + 1.)*(xi + 1.)/256. + 222075.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 4906125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. + 5089875.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 6118875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. - 243375./512. + 700875.*((eta + 1.)*(eta + 1.))/512. + 4906125.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/1024. - 2943675.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 44625.*((xi + 1.)*(xi + 1.))/512. - 5089875.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 6118875.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4096. - 727125.*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 3053925.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2048. - 26775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. - 3671325.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8192. + 874125.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/2048.);
3108  case 17:
3109  return sign * RealGradient(0., 7875.*eta/8. + 7875.*xi/32. - 55125.*(eta + 1.)*(xi + 1.)/16. + 55125.*(eta + 1.)*((xi + 1.)*(xi + 1.))/16. - 33075.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 606375.*(xi + 1.)*((eta + 1.)*(eta + 1.))/64. - 496125.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 496125.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/256. + 37125./32. - 86625.*(eta + 1.)*(eta + 1.)/32. - 606375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. + 363825.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 7875.*(xi + 1.)*(xi + 1.)/32. + 496125.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 496125.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/256. + 70875.*((eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. + 297675.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/512. - 70875.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128.);
3110  case 18:
3111  return sign * RealGradient(0., -214875.*eta/128. - 254625.*xi/512. + 1504125.*(eta + 1.)*(xi + 1.)/256. - 1504125.*(eta + 1.)*(xi + 1.)*(xi + 1.)/256. + 902475.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 11080125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. + 7147875.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 6118875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4096. - 1041375./512. + 1582875.*((eta + 1.)*(eta + 1.))/512. + 11080125.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/1024. - 6648075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 254625.*((xi + 1.)*(xi + 1.))/512. - 7147875.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/1024. + 6118875.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4096. - 1021125.*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 4288725.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2048. - 152775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. - 3671325.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8192. + 874125.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/2048.);
3112  case 19:
3113  return sign * RealGradient(0., 5625.*eta + 13125.*xi/4. - 39375.*(eta + 1.)*(xi + 1.)/2. + 39375.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 23625.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 275625.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. - 91875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 165375.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 31875./4. - 39375.*(eta + 1.)*(eta + 1.)/4. - 275625.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 13125.*(xi + 1.)*(xi + 1.)/4. + 91875.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 13125.*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 55125.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 7875.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 23625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16.);
3114  case 20:
3115  return RealGradient(0., 10575.*eta/2. + 51825.*xi/16. - 155475.*(eta + 1.)*(xi + 1.)/8. + 39375.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 23625.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 1088325.*(xi + 1.)*((eta + 1.)*(eta + 1.))/32. - 362775.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 652995.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/128. + 122325./16. - 74025.*(eta + 1.)*(eta + 1.)/8. - 275625.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 13125.*(xi + 1.)*(xi + 1.)/4. + 91875.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 24675.*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 55125.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 7875.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 44415.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32.);
3116  case 21:
3117  return RealGradient(0., -8325.*eta/4. - 30825.*xi/16. + 92475.*(eta + 1.)*(xi + 1.)/8. - 15750.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 23625.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 647325.*(xi + 1.)*(eta + 1.)*(eta + 1.)/32. + 215775.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 388395.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. - 58575./16. + 58275.*((eta + 1.)*(eta + 1.))/16. + 55125.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 2625.*((xi + 1.)*(xi + 1.)) - 18375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 33075.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 19425.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 55125.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. - 99225.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 34965.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64.);
3118  case 22:
3119  return RealGradient(0., 3375.*eta/4. + 2025.*xi/16. - 6075.*(eta + 1.)*(xi + 1.)/8. + 42525.*(xi + 1.)*((eta + 1.)*(eta + 1.))/32. - 14175.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 25515.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/128. + 13275./16. - 23625.*(eta + 1.)*(eta + 1.)/16. + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 14175.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64.);
3120  case 23:
3121  return RealGradient(0., -675.*eta - 2025.*xi/16. + 6075.*(eta + 1.)*(xi + 1.)/8. - 42525.*(xi + 1.)*(eta + 1.)*(eta + 1.)/32. + 14175.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 25515.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. - 11025./16. + 4725.*((eta + 1.)*(eta + 1.))/4. - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16.);
3122  case 24:
3123  return RealGradient(-20475.*eta/8. + 20475.*(eta + 1.)*(xi + 1.)/4. - 36855.*(eta + 1.)*(xi + 1.)*(xi + 1.)/16. - 74025.*(xi + 1.)*(eta + 1.)*(eta + 1.)/4. + 362775.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 91875.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 33075.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 20475./8. + 74025.*((eta + 1.)*(eta + 1.))/8. + 133245.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/16. - 652995.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 165375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 59535.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 362775.*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 91875.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 33075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3124  case 25:
3125  return RealGradient(525.*eta - 1050.*(eta + 1.)*(xi + 1.) + 945.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. + 58275.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. - 215775.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 18375.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 33075.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 525. - 58275.*(eta + 1.)*(eta + 1.)/16. - 104895.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 388395.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 33075.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 59535.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. + 215775.*((eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 18375.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 33075.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32., 0.);
3126  case 26:
3127  return RealGradient(-4725.*eta/4. + 4725.*(eta + 1.)*(xi + 1.)/2. - 8505.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 23625.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. + 14175.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 4725./4. + 23625.*((eta + 1.)*(eta + 1.))/16. + 42525.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/32. - 25515.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 14175.*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3128  case 27:
3129  return RealGradient(4725.*eta/8. - 4725.*(eta + 1.)*(xi + 1.)/4. + 8505.*(eta + 1.)*((xi + 1.)*(xi + 1.))/16. + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 14175.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 4725./8. - 4725.*(eta + 1.)*(eta + 1.)/4. - 8505.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 25515.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. + 14175.*((eta + 1.)*(eta + 1.)*(eta + 1.))/32., 0.);
3130  case 28:
3131  return RealGradient(-12285.*eta/8. + 4095.*(eta + 1.)*(xi + 1.) - 36855.*(eta + 1.)*(xi + 1.)*(xi + 1.)/16. - 14805.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 72555.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 18375.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 6615.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 12285./8. + 44415.*((eta + 1.)*(eta + 1.))/8. + 133245.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/16. - 652995.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 165375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 59535.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 217665.*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 55125.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 19845.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3132  case 29:
3133  return RealGradient(315.*eta - 840.*(eta + 1.)*(xi + 1.) + 945.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. + 11655.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 43155.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 7350.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)) - 6615.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 315. - 34965.*(eta + 1.)*(eta + 1.)/16. - 104895.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 388395.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 33075.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 59535.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. + 129465.*((eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 11025.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 19845.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32., 0.);
3134  case 30:
3135  return RealGradient(-2835.*eta/4. + 1890.*(eta + 1.)*(xi + 1.) - 8505.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 4725.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 2835.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 2835./4. + 14175.*((eta + 1.)*(eta + 1.))/16. + 42525.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/32. - 25515.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. - 8505.*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3136  case 31:
3137  return RealGradient(2835.*eta/8. - 945.*(eta + 1.)*(xi + 1.) + 8505.*(eta + 1.)*((xi + 1.)*(xi + 1.))/16. + 1890.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 2835.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 2835./8. - 2835.*(eta + 1.)*(eta + 1.)/4. - 8505.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 25515.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/64. + 8505.*((eta + 1.)*(eta + 1.)*(eta + 1.))/32., 0.);
3138  case 32:
3139  return RealGradient(0., 2115.*eta + 10365.*xi/16. - 31095.*(eta + 1.)*(xi + 1.)/4. + 7875.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 652995.*(xi + 1.)*((eta + 1.)*(eta + 1.))/32. - 72555.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 652995.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/128. + 41385./16. - 44415.*(eta + 1.)*(eta + 1.)/8. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 99225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 2625.*(xi + 1.)*(xi + 1.)/4. + 18375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. + 4935.*((eta + 1.)*(eta + 1.)*(eta + 1.)) - 11025.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 99225.*((xi + 1.)*(xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64. - 44415.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32.);
3140  case 33:
3141  return RealGradient(0., -1665.*eta/2. - 6165.*xi/16. + 18495.*(eta + 1.)*(xi + 1.)/4. - 6300.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 4725.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 388395.*(xi + 1.)*(eta + 1.)*(eta + 1.)/32. + 43155.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 388395.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. - 18375./16. + 34965.*((eta + 1.)*(eta + 1.))/16. + 33075.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 99225.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 525.*((xi + 1.)*(xi + 1.)) - 14700.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.) + 33075.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 3885.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 11025.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. - 99225.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 34965.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64.);
3142  case 34:
3143  return RealGradient(0., 675.*eta/2. + 405.*xi/16. - 1215.*(eta + 1.)*(xi + 1.)/4. + 25515.*(xi + 1.)*((eta + 1.)*(eta + 1.))/32. - 2835.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 25515.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/128. + 5355./16. - 14175.*(eta + 1.)*(eta + 1.)/16. + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 14175.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64.);
3144  case 35:
3145  return RealGradient(0., -270.*eta - 405.*xi/16. + 1215.*(eta + 1.)*(xi + 1.)/4. - 25515.*(xi + 1.)*(eta + 1.)*(eta + 1.)/32. + 2835.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 25515.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. - 4365./16. + 2835.*((eta + 1.)*(eta + 1.))/4. - 630.*(eta + 1.)*(eta + 1.)*(eta + 1.) + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/16.);
3146  case 36:
3147  return RealGradient(60.*eta + 60. - 495.*(eta + 1.)*(eta + 1.)/2. + 1275.*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 2625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32., 0.);
3148  case 37:
3149  return RealGradient(60.*eta + 60. - 495.*(eta + 1.)*(eta + 1.)/2. + 1275.*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 2625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32., 0.);
3150  case 38:
3151  return RealGradient(-30.*eta - 30. + 495.*((eta + 1.)*(eta + 1.))/4. - 1275.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 2625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/64., 0.);
3152  case 39:
3153  return RealGradient(0., 594.*eta + 2295.*xi/2. - 2295.*(eta + 1.)*(xi + 1.) + 4725.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 2835.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 3825.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. + 2889./2. - 495.*(eta + 1.)*(eta + 1.)/2. - 7875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 4725.*(xi + 1.)*(xi + 1.)/4. + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
3154  case 40:
3155  return RealGradient(0., 396.*eta + 765.*xi/2. - 1530.*(eta + 1.)*(xi + 1.) + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 945.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 3825.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. + 1359./2. - 495.*(eta + 1.)*(eta + 1.)/2. - 7875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 1575.*(xi + 1.)*(xi + 1.)/4. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
3156  case 41:
3157  return RealGradient(0., -495.*eta/2. - 765.*xi/4. + 3825.*(eta + 1.)*(xi + 1.)/4. - 7875.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 4725.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 3825.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 1557./4. + 495.*((eta + 1.)*(eta + 1.))/4. + 7875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/16. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 1575.*((xi + 1.)*(xi + 1.))/8. - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)/16.);
3158  case 42:
3159  return RealGradient(0., -216.*eta - 675.*xi + 1350.*(eta + 1.)*(xi + 1.) - 1890.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 2835.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 1125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 783. + 90.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 945.*((xi + 1.)*(xi + 1.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8.);
3160  case 43:
3161  return RealGradient(0., -144.*eta - 225.*xi + 900.*(eta + 1.)*(xi + 1.) - 1260.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 945.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 1125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 333. + 90.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 4725.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 315.*((xi + 1.)*(xi + 1.)) - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8.);
3162  case 44:
3163  return RealGradient(0., 90.*eta + 225.*xi/2. - 1125.*(eta + 1.)*(xi + 1.)/2. + 1575.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 1125.*(xi + 1.)*((eta + 1.)*(eta + 1.))/4. + 369./2. - 45.*(eta + 1.)*(eta + 1.) - 1575.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. + 4725.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/32. - 315.*(xi + 1.)*(xi + 1.)/2. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.))/16.);
3164  case 45:
3165  return RealGradient(-15.*eta/2. - 15./2. + 90.*((eta + 1.)*(eta + 1.)) - 375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3166  case 46:
3167  return RealGradient(-15.*eta/2. - 15./2. + 90.*((eta + 1.)*(eta + 1.)) - 375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 525.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32., 0.);
3168  case 47:
3169  return RealGradient(15.*eta/4. + 15./4. - 45.*(eta + 1.)*(eta + 1.) + 375.*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 525.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.))/64., 0.);
3170  case 48:
3171  return RealGradient(0., 81.*eta + 135.*xi/4. - 135.*(eta + 1.)*(xi + 1.)/2. + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 297./4. - 135.*(eta + 1.)*(eta + 1.)/4.);
3172  case 49:
3173  return RealGradient(0., -54.*eta - 135.*xi/4. + 135.*(eta + 1.)*(xi + 1.)/2. - 225.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 243./4. + 45.*((eta + 1.)*(eta + 1.))/2.);
3174  case 50:
3175  return RealGradient(-30.*eta - 30. + 135.*((eta + 1.)*(eta + 1.))/4. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
3176  case 51:
3177  return RealGradient(15.*eta/2. + 15./2. - 45.*(eta + 1.)*(eta + 1.)/2. + 75.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8., 0.);
3178  case 52:
3179  return RealGradient(-30.*eta - 30. + 135.*((eta + 1.)*(eta + 1.))/4. - 75.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
3180  case 53:
3181  return RealGradient(15.*eta/2. + 15./2. - 45.*(eta + 1.)*(eta + 1.)/2. + 75.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8., 0.);
3182  case 54:
3183  return RealGradient(0., 54.*eta + 45.*xi/4. - 45.*(eta + 1.)*(xi + 1.) + 225.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 207./4. - 135.*(eta + 1.)*(eta + 1.)/4.);
3184  case 55:
3185  return RealGradient(0., -36.*eta - 45.*xi/4. + 45.*(eta + 1.)*(xi + 1.) - 225.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. - 153./4. + 45.*((eta + 1.)*(eta + 1.))/2.);
3186  case 56:
3187  return RealGradient(0., 0.);
3188  case 57:
3189  return RealGradient(0., 15.*xi/4. - 3./4.);
3190  case 58:
3191  return RealGradient(0., -15.*xi/4. - 3./4.);
3192  case 59:
3193  return RealGradient(0., 0.);
3194  default:
3195  libmesh_error_msg("Invalid i = " << i);
3196  }
3197  } // j = 0
3198 
3199  // d^2()/dxideta
3200  case 1:
3201  {
3202  switch(ii)
3203  {
3204  case 0:
3205  return sign * RealGradient(-5625.*eta - 13125.*xi/4. + 78750.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 157500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 94500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 275625.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 367500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 165375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 31875./4. + 39375.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 551250.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 330750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 13125.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 735000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 330750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 52500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 441000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 198450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 23625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3206  case 1:
3207  return sign * RealGradient(214875.*eta/128. + 527625.*xi/512. - 1582875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. + 3063375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 874125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 11080125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 3693375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 6648075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. + 1243875./512. - 1504125.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 21443625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 6118875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 1021125.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 7147875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. - 12866175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 501375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 291375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/128. + 3671325.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 902475.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128., 0.);
3208  case 2:
3209  return sign * RealGradient(-7875.*eta/8. - 28875.*xi/32. + 86625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/4. - 212625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 70875.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 606375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/8. + 202125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 363825.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. - 55125./32. + 55125.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 1488375.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 496125.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 70875.*((xi + 1.)*(xi + 1.)/(2.*2.))/16. - 496125.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 893025.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 18375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 165375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 23625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/8. - 297675.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 33075.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8., 0.);
3210  case 3:
3211  return sign * RealGradient(52875.*eta/128. + 233625.*xi/512. - 700875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. + 2181375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/64. - 874125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 4906125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 1635375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/32. + 2943675.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. + 409875./512. - 370125.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 15269625.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 6118875.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 727125.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 5089875.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. - 9161775.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 123375.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. - 2039625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 291375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/128. + 3671325.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 222075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128., 0.);
3212  case 4:
3213  return sign * RealGradient(-2250.*eta - 7875.*xi/4. + 47250.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 126000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 94500.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 165375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 220500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 15375./4. + 15750.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 441000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 330750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 10500.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 588000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 264600.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 21000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 441000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 198450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3214  case 5:
3215  return sign * RealGradient(0., 2625.*eta/4. + 2250.*xi - 31500.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 165375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 294000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 63000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 37800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 10875./4. - 2625.*(eta + 1.)*(eta + 1.)/(2.*2.) - 330750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 588000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 330750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 23625.*(xi + 1.)*(xi + 1.)/(2.*2.) + 198450.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 352800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 198450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 42000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 23625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3216  case 6:
3217  return sign * RealGradient(0., -105525.*eta/512. - 42975.*xi/64. + 316575.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. - 6648075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 738675.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. - 6648075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 612675.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/32. + 174825.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/16. - 420675./512. + 204225.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 12866175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 1429575.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/8. + 12866175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 902475.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 3671325.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. - 58275.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/128. + 407925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 100275.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/8. + 902475.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128.);
3218  case 7:
3219  return sign * RealGradient(0., 5775.*eta/32. + 1575.*xi/4. - 17325.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 363825.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 80850.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 363825.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. + 42525.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 17325./32. - 14175.*(eta + 1.)*(eta + 1.)/(2.*2.)/16. - 893025.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 198450.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 893025.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 33075.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 297675.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. + 4725.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/8. - 132300.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 297675.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 7350.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 33075.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8.);
3220  case 8:
3221  return sign * RealGradient(0., -46725.*eta/512. - 10575.*xi/64. + 140175.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. - 2943675.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 327075.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/8. - 2943675.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 436275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/32. + 174825.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/16. - 124275./512. + 145425.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 9161775.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 1017975.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/8. + 9161775.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 222075.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 3671325.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. - 58275.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/128. + 407925.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/4. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 24675.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/8. + 222075.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128.);
3222  case 9:
3223  return sign * RealGradient(0., 1575.*eta/4. + 900.*xi - 18900.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 99225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 176400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 99225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 50400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 37800.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4875./4. - 2100.*(eta + 1.)*(eta + 1.)/(2.*2.) - 264600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 470400.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 264600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 9450.*(xi + 1.)*(xi + 1.)/(2.*2.) + 198450.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 352800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 198450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 16800.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 9450.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3224  case 10:
3225  return sign * RealGradient(-900.*eta - 1575.*xi/4. + 18900.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 50400.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 37800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 99225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 176400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 4875./4. + 9450.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 264600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 198450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2100.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 470400.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 264600.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 16800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 352800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 198450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3226  case 11:
3227  return sign * RealGradient(10575.*eta/64. + 46725.*xi/512. - 140175.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. + 436275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 174825.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 2943675.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 327075.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 2943675.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. + 124275./512. - 222075.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 9161775.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 3671325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 145425.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 1017975.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/8. - 9161775.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 24675.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/8. - 407925.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 58275.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/128. + 3671325.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 222075.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128., 0.);
3228  case 12:
3229  return sign * RealGradient(-1575.*eta/4. - 5775.*xi/32. + 17325.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 42525.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 363825.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/8. + 80850.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 363825.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/8. - 17325./32. + 33075.*((eta + 1.)*(eta + 1.)/(2.*2.))/8. + 893025.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 297675.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 14175.*((xi + 1.)*(xi + 1.)/(2.*2.))/16. - 198450.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 893025.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8. - 7350.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 132300.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/8. - 297675.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4. + 33075.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/8., 0.);
3230  case 13:
3231  return sign * RealGradient(42975.*eta/64. + 105525.*xi/512. - 316575.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/32. + 612675.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/32. - 174825.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/16. + 6648075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/128. - 738675.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/8. + 6648075.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/128. + 420675./512. - 902475.*(eta + 1.)*(eta + 1.)/(2.*2.)/128. - 12866175.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 3671325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/64. - 204225.*(xi + 1.)*(xi + 1.)/(2.*2.)/256. + 1429575.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/8. - 12866175.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128. + 100275.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/8. - 407925.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/4. + 58275.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/128. + 3671325.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/64. - 902475.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/128., 0.);
3232  case 14:
3233  return sign * RealGradient(-2250.*eta - 2625.*xi/4. + 31500.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 63000.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 37800.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 165375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 294000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 165375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 10875./4. + 23625.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 330750.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 198450.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2625.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 588000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 330750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 42000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 352800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) - 198450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 23625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3234  case 15:
3235  return sign * RealGradient(0., 7875.*eta/4. + 2250.*xi - 47250.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 165375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 220500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 99225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 126000.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 94500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 15375./4. - 10500.*(eta + 1.)*(eta + 1.)/(2.*2.) - 441000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 588000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 264600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 15750.*(xi + 1.)*(xi + 1.)/(2.*2.) + 330750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 441000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 198450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 21000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 9450.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3236  case 16:
3237  return sign * RealGradient(0., -233625.*eta/512. - 52875.*xi/128. + 700875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. - 4906125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 1635375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 2943675.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 2181375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 874125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. - 409875./512. + 727125.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 15269625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 5089875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 9161775.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 370125.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 6118875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. - 291375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/128. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 123375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 222075.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128.);
3238  case 17:
3239  return sign * RealGradient(0., 28875.*eta/32. + 7875.*xi/8. - 86625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/4. + 606375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/8. - 202125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 363825.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/8. + 212625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. - 70875.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. + 55125./32. - 70875.*(eta + 1.)*(eta + 1.)/(2.*2.)/16. - 1488375.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 496125.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 893025.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8. - 55125.*(xi + 1.)*(xi + 1.)/(2.*2.)/8. + 496125.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/4. + 23625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/8. - 165375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 297675.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4. + 18375.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 33075.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/8.);
3240  case 18:
3241  return sign * RealGradient(0., -527625.*eta/512. - 214875.*xi/128. + 1582875.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/64. - 11080125.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/128. + 3693375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/32. - 6648075.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/128. - 3063375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/64. + 874125.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/32. - 1243875./512. + 1021125.*((eta + 1.)*(eta + 1.)/(2.*2.))/256. + 21443625.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 7147875.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 12866175.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128. + 1504125.*((xi + 1.)*(xi + 1.)/(2.*2.))/128. - 6118875.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/64. - 291375.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/128. + 2039625.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/16. - 3671325.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/64. - 501375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/32. + 902475.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/128.);
3242  case 19:
3243  return sign * RealGradient(0., 13125.*eta/4. + 5625.*xi - 78750.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 275625.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 367500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 157500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 94500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 31875./4. - 13125.*(eta + 1.)*(eta + 1.)/(2.*2.) - 551250.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 735000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 330750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 39375.*(xi + 1.)*(xi + 1.)/(2.*2.) + 330750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 441000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 198450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 52500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 23625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3244  case 20:
3245  return RealGradient(0., 20475.*eta/8. + 10575.*xi/2. - 74025.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 1088325.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 367500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 165375.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 148050.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 88830.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 56925./8. - 20475.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 1088325.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 735000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 330750.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 155475.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 652995.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. + 12285.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 441000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 198450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 52500.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 23625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3246  case 21:
3247  return RealGradient(0., -525.*eta - 8325.*xi/4. + 58275.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 647325.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 294000.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 165375.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 58275.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 34965.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 9825./4. + 2100.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 647325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 588000.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 330750.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 92475.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 388395.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 1260.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 352800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 198450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 42000.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 23625.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
3248  case 22:
3249  return RealGradient(0., 4725.*eta/4. + 3375.*xi/4. - 23625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 42525.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/4. + 23625.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3375./2. - 4725.*(eta + 1.)*(eta + 1.)/(2.*2.) - 42525.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. - 6075.*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 25515.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)));
3250  case 23:
3251  return RealGradient(0., -4725.*eta/8. - 675.*xi + 9450.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 42525.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. - 18900.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 11340.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 8775./8. + 4725.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 42525.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. + 6075.*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 25515.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2.);
3252  case 24:
3253  return RealGradient(-10575.*eta/2. - 20475.*xi/8. + 74025.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 148050.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 88830.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1088325.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/4. + 367500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 165375.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 56925./8. + 155475.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 1088325.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 652995.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 20475.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 735000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 330750.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 52500.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 441000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 12285.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. - 198450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 23625.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3254  case 25:
3255  return RealGradient(8325.*eta/4. + 525.*xi - 58275.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 58275.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 34965.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 647325.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. - 294000.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 165375.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 9825./4. - 92475.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 647325.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 388395.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 2100.*(xi + 1.)*(xi + 1.)/(2.*2.) + 588000.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 330750.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 42000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 352800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1260.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 198450.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 23625.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
3256  case 26:
3257  return RealGradient(-3375.*eta/4. - 4725.*xi/4. + 23625.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 23625.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 42525.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 3375./2. + 6075.*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 42525.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 25515.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 4725.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
3258  case 27:
3259  return RealGradient(675.*eta + 4725.*xi/8. - 9450.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 18900.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 11340.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 42525.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 8775./8. - 6075.*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 42525.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 25515.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 4725.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2., 0.);
3260  case 28:
3261  return RealGradient(-2115.*eta - 12285.*xi/8. + 44415.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 118440.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 88830.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 652995.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/4. + 220500.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 99225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 26865./8. + 31095.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 435330.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 652995.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 8190.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 588000.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 264600.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 21000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 441000.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 12285.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. - 198450.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 9450.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3262  case 29:
3263  return RealGradient(1665.*eta/2. + 315.*xi - 34965.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 46620.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 34965.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 388395.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. - 176400.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 99225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 2175./2. - 18495.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 258930.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 388395.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 1680.*(xi + 1.)*(xi + 1.)/(2.*2.) + 470400.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 264600.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) + 16800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 352800.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1260.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) + 198450.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) - 9450.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
3264  case 30:
3265  return RealGradient(-675.*eta/2. - 2835.*xi/4. + 14175.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 18900.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 14175.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 25515.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.)/4. - 3645./4. + 1215.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. + 17010.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 25515.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)/2. + 3780.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.), 0.);
3266  case 31:
3267  return RealGradient(270.*eta + 2835.*xi/8. - 5670.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 15120.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 11340.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 25515.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.))/4. + 4455./8. - 1215.*(eta + 1.)*(eta + 1.)/(2.*2.)/2. - 17010.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 25515.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2. - 1890.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.))/2., 0.);
3268  case 32:
3269  return RealGradient(0., 12285.*eta/8. + 2115.*xi - 44415.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 652995.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/4. - 220500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 99225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 118440.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 88830.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 26865./8. - 8190.*(eta + 1.)*(eta + 1.)/(2.*2.) - 435330.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 588000.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 264600.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 31095.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 652995.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. + 12285.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. - 441000.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 198450.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 21000.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 9450.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3270  case 33:
3271  return RealGradient(0., -315.*eta - 1665.*xi/2. + 34965.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. - 388395.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. + 176400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 99225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 46620.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 34965.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2175./2. + 1680.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 258930.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) - 470400.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 264600.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 18495.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 388395.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 1260.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 352800.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 198450.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 16800.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 9450.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
3272  case 34:
3273  return RealGradient(0., 2835.*eta/4. + 675.*xi/2. - 14175.*(eta/2. + 1./2.)*(xi/2. + 1./2.)/2. + 25515.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.))/4. + 18900.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 14175.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 3645./4. - 3780.*(eta + 1.)*(eta + 1.)/(2.*2.) - 17010.*(eta + 1.)*(eta + 1.)/(2.*2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 1215.*(xi + 1.)*(xi + 1.)/(2.*2.)/2. + 25515.*((xi + 1.)*(xi + 1.)/(2.*2.))*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.))/2. + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)));
3274  case 35:
3275  return RealGradient(0., -2835.*eta/8. - 270.*xi + 5670.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 25515.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.)/4. - 15120.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 11340.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4455./8. + 1890.*((eta + 1.)*(eta + 1.)/(2.*2.)) + 17010.*((eta + 1.)*(eta + 1.)/(2.*2.))*((xi + 1.)*(xi + 1.)/(2.*2.)) + 1215.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 25515.*(xi + 1.)*(xi + 1.)/(2.*2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2. - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)/2.);
3276  case 36:
3277  return RealGradient(594.*eta + 60.*xi - 1980.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 7650.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 10500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 582. - 4590.*(eta + 1.)*(eta + 1.)/(2.*2.) + 6300.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
3278  case 37:
3279  return RealGradient(396.*eta + 60.*xi - 1980.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 7650.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 10500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)) + 408. - 3060.*(eta + 1.)*(eta + 1.)/(2.*2.) + 4200.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 1890.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.), 0.);
3280  case 38:
3281  return RealGradient(-495.*eta/2. - 30.*xi + 990.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3825.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 5250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/2. - 495./2. + 3825.*((eta + 1.)*(eta + 1.)/(2.*2.))/2. - 2625.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/4., 0.);
3282  case 39:
3283  return RealGradient(0., 60.*eta + 594.*xi - 1980.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 7650.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 582. - 4590.*(xi + 1.)*(xi + 1.)/(2.*2.) + 6300.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3284  case 40:
3285  return RealGradient(0., 60.*eta + 396.*xi - 1980.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 7650.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 10500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)) + 408. - 3060.*(xi + 1.)*(xi + 1.)/(2.*2.) + 4200.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 1890.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.));
3286  case 41:
3287  return RealGradient(0., -30.*eta - 495.*xi/2. + 990.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 3825.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 5250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/2. - 495./2. + 3825.*((xi + 1.)*(xi + 1.)/(2.*2.))/2. - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/4.);
3288  case 42:
3289  return RealGradient(0., -15.*eta/2. - 216.*xi + 720.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 4500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 429./2. + 2700.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 5040.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 2835.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
3290  case 43:
3291  return RealGradient(0., -15.*eta/2. - 144.*xi + 720.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 4500.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) + 8400.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.) - 291./2. + 1800.*((xi + 1.)*(xi + 1.)/(2.*2.)) - 3360.*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 1890.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)));
3292  case 44:
3293  return RealGradient(0., 15.*eta/4. + 90.*xi - 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2250.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) - 4200.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.) + 4725.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.))/2. + 90. - 1125.*(xi + 1.)*(xi + 1.)/(2.*2.) + 2100.*((xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.)) - 4725.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/(2.*2.*2.*2.)/4.);
3294  case 45:
3295  return RealGradient(-216.*eta - 15.*xi/2. + 720.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 4500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 429./2. + 2700.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 5040.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3296  case 46:
3297  return RealGradient(-144.*eta - 15.*xi/2. + 720.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 4500.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) + 8400.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.) - 291./2. + 1800.*((eta + 1.)*(eta + 1.)/(2.*2.)) - 3360.*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 1890.*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)), 0.);
3298  case 47:
3299  return RealGradient(90.*eta + 15.*xi/4. - 360.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 2250.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) - 4200.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.) + 4725.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.))/2. + 90. - 1125.*(eta + 1.)*(eta + 1.)/(2.*2.) + 2100.*((eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.)) - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/(2.*2.*2.*2.)/4., 0.);
3300  case 48:
3301  return RealGradient(0., 30.*eta + 81.*xi - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 75. - 135.*(xi + 1.)*(xi + 1.)/(2.*2.));
3302  case 49:
3303  return RealGradient(0., -15.*eta/2. - 54.*xi + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 105./2. + 135.*((xi + 1.)*(xi + 1.)/(2.*2.)));
3304  case 50:
3305  return RealGradient(-81.*eta - 30.*xi + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 75. + 135.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
3306  case 51:
3307  return RealGradient(54.*eta + 15.*xi/2. - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 105./2. - 135.*(eta + 1.)*(eta + 1.)/(2.*2.), 0.);
3308  case 52:
3309  return RealGradient(-54.*eta - 30.*xi + 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(xi/2. + 1./2.)*(eta + 1.)*(eta + 1.)/(2.*2.) - 60. + 90.*((eta + 1.)*(eta + 1.)/(2.*2.)), 0.);
3310  case 53:
3311  return RealGradient(36.*eta + 15.*xi/2. - 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(xi/2. + 1./2.)*((eta + 1.)*(eta + 1.)/(2.*2.)) + 75./2. - 90.*(eta + 1.)*(eta + 1.)/(2.*2.), 0.);
3312  case 54:
3313  return RealGradient(0., 30.*eta + 54.*xi - 270.*(eta/2. + 1./2.)*(xi/2. + 1./2.) + 225.*(eta/2. + 1./2.)*((xi + 1.)*(xi + 1.)/(2.*2.)) + 60. - 90.*(xi + 1.)*(xi + 1.)/(2.*2.));
3314  case 55:
3315  return RealGradient(0., -15.*eta/2. - 36.*xi + 180.*(eta/2. + 1./2.)*(xi/2. + 1./2.) - 225.*(eta/2. + 1./2.)*(xi + 1.)*(xi + 1.)/(2.*2.) - 75./2. + 90.*((xi + 1.)*(xi + 1.)/(2.*2.)));
3316  case 56:
3317  return RealGradient(0., 0.);
3318  case 57:
3319  return RealGradient(0., 0.);
3320  case 58:
3321  return RealGradient(0., 0.);
3322  case 59:
3323  return RealGradient(0., 0.);
3324  default:
3325  libmesh_error_msg("Invalid i = " << i);
3326  }
3327  } // j = 1
3328 
3329  // d^2()/deta^2
3330  case 2:
3331  {
3332  switch(ii)
3333  {
3334  case 0:
3335  return sign * RealGradient(-13125.*eta/4. - 5625.*xi + 39375.*(eta + 1.)*(xi + 1.)/2. - 275625.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 91875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 165375.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 39375.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 23625.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 31875./4. + 13125.*((eta + 1.)*(eta + 1.))/4. + 275625.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 91875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 39375.*((xi + 1.)*(xi + 1.))/4. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 7875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 55125.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. - 13125.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 23625.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/16., 0.);
3336  case 1:
3337  return sign * RealGradient(254625.*eta/512. + 214875.*xi/128. - 1504125.*(eta + 1.)*(xi + 1.)/256. + 11080125.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. - 7147875.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 6118875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. + 1504125.*(xi + 1.)*((eta + 1.)*(eta + 1.))/256. - 902475.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 1041375./512. - 254625.*(eta + 1.)*(eta + 1.)/512. - 11080125.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/1024. + 7147875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 6118875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4096. - 1582875.*(xi + 1.)*(xi + 1.)/512. + 6648075.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. + 152775.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 4288725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8192. + 1021125.*((xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 874125.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048., 0.);
3338  case 2:
3339  return sign * RealGradient(-7875.*eta/32. - 7875.*xi/8. + 55125.*(eta + 1.)*(xi + 1.)/16. - 606375.*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. + 496125.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 496125.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/256. - 55125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/16. + 33075.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 37125./32. + 7875.*((eta + 1.)*(eta + 1.))/32. + 606375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/64. - 496125.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 496125.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/256. + 86625.*((xi + 1.)*(xi + 1.))/32. - 363825.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 297675.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/512. - 70875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 70875.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/128., 0.);
3340  case 3:
3341  return sign * RealGradient(44625.*eta/512. + 52875.*xi/128. - 370125.*(eta + 1.)*(xi + 1.)/256. + 4906125.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. - 5089875.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 6118875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. + 370125.*(xi + 1.)*((eta + 1.)*(eta + 1.))/256. - 222075.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 243375./512. - 44625.*(eta + 1.)*(eta + 1.)/512. - 4906125.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/1024. + 5089875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 6118875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4096. - 700875.*(xi + 1.)*(xi + 1.)/512. + 2943675.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. + 26775.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 3053925.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8192. + 727125.*((xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 874125.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048., 0.);
3342  case 4:
3343  return sign * RealGradient(-2625.*eta/4. - 2250.*xi + 7875.*(eta + 1.)*(xi + 1.) - 165375.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 18375.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 165375.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 7875.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 10875./4. + 2625.*((eta + 1.)*(eta + 1.))/4. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 18375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 23625.*((xi + 1.)*(xi + 1.))/4. - 99225.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 11025.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. - 5250.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 23625.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/16., 0.);
3344  case 5:
3345  return sign * RealGradient(0., 2625.*xi/4. - 2625.*(eta + 1.)*(xi + 1.)/2. + 7875.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 55125.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 18375.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 33075.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 2625./4. - 14175.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. + 99225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 33075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 59535.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 7875.*(xi + 1.)*(xi + 1.)/2. + 55125.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 18375.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 33075.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3346  case 6:
3347  return sign * RealGradient(0., -105525.*xi/512. + 204225.*(eta + 1.)*(xi + 1.)/512. - 612675.*(eta + 1.)*(xi + 1.)*(xi + 1.)/256. + 4288725.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 1429575.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/512. + 2573235.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. - 174825.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. - 105525./512. + 524475.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/512. - 3671325.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 1223775.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 2202795.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8192. + 316575.*((xi + 1.)*(xi + 1.))/256. - 2216025.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 738675.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 1329615.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4096.);
3348  case 7:
3349  return sign * RealGradient(0., 5775.*xi/32. - 14175.*(eta + 1.)*(xi + 1.)/32. + 42525.*(eta + 1.)*((xi + 1.)*(xi + 1.))/16. - 297675.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 99225.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. - 178605.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/256. + 14175.*(xi + 1.)*((eta + 1.)*(eta + 1.))/64. + 5775./32. - 42525.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 297675.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 99225.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 178605.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 17325.*(xi + 1.)*(xi + 1.)/16. + 121275.*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 40425.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 72765.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/256.);
3350  case 8:
3351  return sign * RealGradient(0., -46725.*xi/512. + 145425.*(eta + 1.)*(xi + 1.)/512. - 436275.*(eta + 1.)*(xi + 1.)*(xi + 1.)/256. + 3053925.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 1017975.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/512. + 1832355.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. - 174825.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. - 46725./512. + 524475.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/512. - 3671325.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 1223775.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 2202795.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8192. + 140175.*((xi + 1.)*(xi + 1.))/256. - 981225.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 327075.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 588735.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4096.);
3352  case 9:
3353  return sign * RealGradient(0., 1575.*xi/4. - 1050.*(eta + 1.)*(xi + 1.) + 6300.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 11025.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 7350.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)) - 6615.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 1575./4. - 14175.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. + 99225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 33075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 59535.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 4725.*(xi + 1.)*(xi + 1.)/2. + 33075.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 11025.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 19845.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3354  case 10:
3355  return sign * RealGradient(-1575.*eta/4. - 900.*xi + 4725.*(eta + 1.)*(xi + 1.) - 99225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 11025.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 99225.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 6300.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 4875./4. + 525.*((eta + 1.)*(eta + 1.)) + 33075.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 14700.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 33075.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 4725.*((xi + 1.)*(xi + 1.))/2. - 99225.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 11025.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. - 2100.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8., 0.);
3356  case 11:
3357  return sign * RealGradient(26775.*eta/512. + 10575.*xi/64. - 222075.*(eta + 1.)*(xi + 1.)/256. + 2943675.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. - 3053925.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 3671325.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. + 74025.*(xi + 1.)*((eta + 1.)*(eta + 1.))/64. - 222075.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 106275./512. - 8925.*(eta + 1.)*(eta + 1.)/128. - 981225.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/256. + 1017975.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/256. - 1223775.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. - 140175.*(xi + 1.)*(xi + 1.)/256. + 2943675.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. + 26775.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 3053925.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8192. + 145425.*((xi + 1.)*(xi + 1.)*(xi + 1.))/256. - 174825.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024., 0.);
3358  case 12:
3359  return sign * RealGradient(-4725.*eta/32. - 1575.*xi/4. + 33075.*(eta + 1.)*(xi + 1.)/16. - 363825.*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. + 297675.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 297675.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/256. - 11025.*(xi + 1.)*(eta + 1.)*(eta + 1.)/4. + 33075.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/32. - 16425./32. + 1575.*((eta + 1.)*(eta + 1.))/8. + 121275.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/16. - 99225.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 99225.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. + 17325.*((xi + 1.)*(xi + 1.))/16. - 363825.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/128. - 4725.*(eta + 1.)*(eta + 1.)*(eta + 1.)/64. + 297675.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 297675.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/512. - 14175.*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 14175.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64., 0.);
3360  case 13:
3361  return sign * RealGradient(152775.*eta/512. + 42975.*xi/64. - 902475.*(eta + 1.)*(xi + 1.)/256. + 6648075.*(eta + 1.)*((xi + 1.)*(xi + 1.))/1024. - 4288725.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 3671325.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. + 300825.*(xi + 1.)*((eta + 1.)*(eta + 1.))/64. - 902475.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/512. + 467475./512. - 50925.*(eta + 1.)*(eta + 1.)/128. - 2216025.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/256. + 1429575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/256. - 1223775.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. - 316575.*(xi + 1.)*(xi + 1.)/256. + 6648075.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/2048. + 152775.*((eta + 1.)*(eta + 1.)*(eta + 1.))/1024. - 4288725.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 3671325.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8192. + 204225.*((xi + 1.)*(xi + 1.)*(xi + 1.))/256. - 174825.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024., 0.);
3362  case 14:
3363  return sign * RealGradient(-7875.*eta/4. - 2250.*xi + 23625.*(eta + 1.)*(xi + 1.)/2. - 165375.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 55125.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 99225.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. - 15750.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 23625.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 15375./4. + 2625.*((eta + 1.)*(eta + 1.)) + 55125.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. - 18375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 33075.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8. + 7875.*((xi + 1.)*(xi + 1.))/2. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 7875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 55125.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 4725.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8., 0.);
3364  case 15:
3365  return sign * RealGradient(0., 420.*eta + 7875.*xi/4. - 5250.*(eta + 1.)*(xi + 1.) + 15750.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 18375.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 18375.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 6615.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 23625.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 8925./4. - 945.*(eta + 1.)*(eta + 1.)/4. - 70875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 59535.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 23625.*(xi + 1.)*(xi + 1.)/4. + 55125.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 55125.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 19845.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3366  case 16:
3367  return sign * RealGradient(0., -29085.*eta/256. - 233625.*xi/512. + 727125.*(eta + 1.)*(xi + 1.)/512. - 2181375.*(eta + 1.)*(xi + 1.)*(xi + 1.)/512. + 5089875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 5089875.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 1832355.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. - 874125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. - 273105./512. + 34965.*((eta + 1.)*(eta + 1.))/512. + 2622375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/1024. - 6118875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 6118875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. - 2202795.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8192. + 700875.*((xi + 1.)*(xi + 1.))/512. - 1635375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 1635375.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/2048. - 588735.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4096.);
3368  case 17:
3369  return sign * RealGradient(0., 2835.*eta/16. + 28875.*xi/32. - 70875.*(eta + 1.)*(xi + 1.)/32. + 212625.*(eta + 1.)*((xi + 1.)*(xi + 1.))/32. - 496125.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 496125.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 178605.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/256. + 70875.*(xi + 1.)*((eta + 1.)*(eta + 1.))/64. + 32235./32. - 2835.*(eta + 1.)*(eta + 1.)/32. - 212625.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/64. + 496125.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/128. - 496125.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/256. + 178605.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/512. - 86625.*(xi + 1.)*(xi + 1.)/32. + 202125.*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 202125.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. + 72765.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/256.);
3370  case 18:
3371  return sign * RealGradient(0., -40845.*eta/256. - 527625.*xi/512. + 1021125.*(eta + 1.)*(xi + 1.)/512. - 3063375.*(eta + 1.)*(xi + 1.)*(xi + 1.)/512. + 7147875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/1024. - 7147875.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 2573235.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. - 874125.*(xi + 1.)*(eta + 1.)*(eta + 1.)/1024. - 567105./512. + 34965.*((eta + 1.)*(eta + 1.))/512. + 2622375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/1024. - 6118875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2048. + 6118875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4096. - 2202795.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8192. + 1582875.*((xi + 1.)*(xi + 1.))/512. - 3693375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/1024. + 3693375.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/2048. - 1329615.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4096.);
3372  case 19:
3373  return sign * RealGradient(0., 525.*eta + 13125.*xi/4. - 13125.*(eta + 1.)*(xi + 1.)/2. + 39375.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 91875.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 91875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 33075.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 23625.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 14175./4. - 945.*(eta + 1.)*(eta + 1.)/4. - 70875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 59535.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 39375.*(xi + 1.)*(xi + 1.)/4. + 91875.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 91875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 33075.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3374  case 20:
3375  return RealGradient(0., 20475.*xi/8. - 20475.*(eta + 1.)*(xi + 1.)/4. + 74025.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. - 362775.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 91875.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 33075.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 36855.*(xi + 1.)*((eta + 1.)*(eta + 1.))/16. + 20475./8. - 133245.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/16. + 652995.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 59535.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 74025.*(xi + 1.)*(xi + 1.)/8. + 362775.*((xi + 1.)*(xi + 1.)*(xi + 1.))/32. - 91875.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 33075.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3376  case 21:
3377  return RealGradient(0., -525.*xi + 1050.*(eta + 1.)*(xi + 1.) - 58275.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. + 215775.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 18375.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 33075.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 945.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 525. + 104895.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/32. - 388395.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 33075.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 59535.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 58275.*((xi + 1.)*(xi + 1.))/16. - 215775.*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 18375.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 33075.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32.);
3378  case 22:
3379  return RealGradient(0., 4725.*xi/4. - 4725.*(eta + 1.)*(xi + 1.)/2. + 23625.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. - 14175.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 8505.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 4725./4. - 42525.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 25515.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 23625.*(xi + 1.)*(xi + 1.)/16. + 14175.*((xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3380  case 23:
3381  return RealGradient(0., -4725.*xi/8. + 4725.*(eta + 1.)*(xi + 1.)/4. - 4725.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 14175.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 8505.*(xi + 1.)*(eta + 1.)*(eta + 1.)/16. - 4725./8. + 8505.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 25515.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 4725.*((xi + 1.)*(xi + 1.))/4. - 14175.*(xi + 1.)*(xi + 1.)*(xi + 1.)/32.);
3382  case 24:
3383  return RealGradient(-51825.*eta/16. - 10575.*xi/2. + 155475.*(eta + 1.)*(xi + 1.)/8. - 1088325.*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 362775.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 652995.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. - 39375.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. + 23625.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 122325./16. + 13125.*((eta + 1.)*(eta + 1.))/4. + 275625.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 91875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 74025.*((xi + 1.)*(xi + 1.))/8. - 165375.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 7875.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 55125.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. - 24675.*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 44415.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32., 0.);
3384  case 25:
3385  return RealGradient(30825.*eta/16. + 8325.*xi/4. - 92475.*(eta + 1.)*(xi + 1.)/8. + 647325.*(eta + 1.)*((xi + 1.)*(xi + 1.))/32. - 215775.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 388395.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/128. + 15750.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 23625.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 58575./16. - 2625.*(eta + 1.)*(eta + 1.) - 55125.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 18375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 33075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. - 58275.*(xi + 1.)*(xi + 1.)/16. + 165375.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 7875.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 55125.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. + 19425.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 34965.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64., 0.);
3386  case 26:
3387  return RealGradient(-2025.*eta/16. - 3375.*xi/4. + 6075.*(eta + 1.)*(xi + 1.)/8. - 42525.*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 14175.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/16. - 25515.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. - 13275./16. + 23625.*((xi + 1.)*(xi + 1.))/16. - 7875.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 14175.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64., 0.);
3388  case 27:
3389  return RealGradient(2025.*eta/16. + 675.*xi - 6075.*(eta + 1.)*(xi + 1.)/8. + 42525.*(eta + 1.)*((xi + 1.)*(xi + 1.))/32. - 14175.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 25515.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/128. + 11025./16. - 4725.*(xi + 1.)*(xi + 1.)/4. + 1575.*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16., 0.);
3390  case 28:
3391  return RealGradient(-10365.*eta/16. - 2115.*xi + 31095.*(eta + 1.)*(xi + 1.)/4. - 652995.*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 72555.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 652995.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. - 7875.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 41385./16. + 2625.*((eta + 1.)*(eta + 1.))/4. + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 18375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 165375.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. + 44415.*((xi + 1.)*(xi + 1.))/8. - 99225.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 1575.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8. + 11025.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 99225.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. - 4935.*(xi + 1.)*(xi + 1.)*(xi + 1.) + 44415.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32., 0.);
3392  case 29:
3393  return RealGradient(6165.*eta/16. + 1665.*xi/2. - 18495.*(eta + 1.)*(xi + 1.)/4. + 388395.*(eta + 1.)*((xi + 1.)*(xi + 1.))/32. - 43155.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 388395.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/128. + 6300.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 4725.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 18375./16. - 525.*(eta + 1.)*(eta + 1.) - 33075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 14700.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 33075.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. - 34965.*(xi + 1.)*(xi + 1.)/16. + 99225.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 1575.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8. - 11025.*(eta + 1.)*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 99225.*((eta + 1.)*(eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. + 3885.*((xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 34965.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64., 0.);
3394  case 30:
3395  return RealGradient(-405.*eta/16. - 675.*xi/2. + 1215.*(eta + 1.)*(xi + 1.)/4. - 25515.*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 2835.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 25515.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/128. - 5355./16. + 14175.*((xi + 1.)*(xi + 1.))/16. - 1575.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 14175.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64., 0.);
3396  case 31:
3397  return RealGradient(405.*eta/16. + 270.*xi - 1215.*(eta + 1.)*(xi + 1.)/4. + 25515.*(eta + 1.)*((xi + 1.)*(xi + 1.))/32. - 2835.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 25515.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/128. + 4365./16. - 2835.*(xi + 1.)*(xi + 1.)/4. + 630.*((xi + 1.)*(xi + 1.)*(xi + 1.)) - 2835.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16., 0.);
3398  case 32:
3399  return RealGradient(0., 12285.*xi/8. - 4095.*(eta + 1.)*(xi + 1.) + 14805.*(eta + 1.)*((xi + 1.)*(xi + 1.)) - 72555.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 18375.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/2. - 6615.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 36855.*(xi + 1.)*((eta + 1.)*(eta + 1.))/16. + 12285./8. - 133245.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/16. + 652995.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 165375.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 59535.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 44415.*(xi + 1.)*(xi + 1.)/8. + 217665.*((xi + 1.)*(xi + 1.)*(xi + 1.))/32. - 55125.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 19845.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3400  case 33:
3401  return RealGradient(0., -315.*xi + 840.*(eta + 1.)*(xi + 1.) - 11655.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. + 43155.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 7350.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.) + 6615.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 945.*(xi + 1.)*(eta + 1.)*(eta + 1.)/2. - 315. + 104895.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/32. - 388395.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 33075.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/8. - 59535.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 34965.*((xi + 1.)*(xi + 1.))/16. - 129465.*(xi + 1.)*(xi + 1.)*(xi + 1.)/32. + 11025.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 19845.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32.);
3402  case 34:
3403  return RealGradient(0., 2835.*xi/4. - 1890.*(eta + 1.)*(xi + 1.) + 4725.*(eta + 1.)*((xi + 1.)*(xi + 1.))/2. - 2835.*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/4. + 8505.*(xi + 1.)*((eta + 1.)*(eta + 1.))/8. + 2835./4. - 42525.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/32. + 25515.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.)*(xi + 1.))/64. - 14175.*(xi + 1.)*(xi + 1.)/16. + 8505.*((xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3404  case 35:
3405  return RealGradient(0., -2835.*xi/8. + 945.*(eta + 1.)*(xi + 1.) - 1890.*(eta + 1.)*(xi + 1.)*(xi + 1.) + 2835.*(eta + 1.)*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 8505.*(xi + 1.)*(eta + 1.)*(eta + 1.)/16. - 2835./8. + 8505.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/8. - 25515.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64. + 2835.*((xi + 1.)*(xi + 1.))/4. - 8505.*(xi + 1.)*(xi + 1.)*(xi + 1.)/32.);
3406  case 36:
3407  return RealGradient(2295.*eta/2. + 594.*xi - 2295.*(eta + 1.)*(xi + 1.) + 3825.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 2835.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/4. + 2889./2. - 4725.*(eta + 1.)*(eta + 1.)/4. - 7875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 495.*(xi + 1.)*(xi + 1.)/2. + 4725.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 2835.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8., 0.);
3408  case 37:
3409  return RealGradient(765.*eta/2. + 396.*xi - 1530.*(eta + 1.)*(xi + 1.) + 3825.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.)) - 945.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/2. + 1359./2. - 1575.*(eta + 1.)*(eta + 1.)/4. - 7875.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 495.*(xi + 1.)*(xi + 1.)/2. + 4725.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.))/8., 0.);
3410  case 38:
3411  return RealGradient(-765.*eta/4. - 495.*xi/2. + 3825.*(eta + 1.)*(xi + 1.)/4. - 3825.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 7875.*(xi + 1.)*(eta + 1.)*(eta + 1.)/8. + 4725.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/16. - 1557./4. + 1575.*((eta + 1.)*(eta + 1.))/8. + 7875.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/16. + 495.*((xi + 1.)*(xi + 1.))/4. - 4725.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/32. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)/16., 0.);
3412  case 39:
3413  return RealGradient(0., 60.*xi + 60. - 495.*(xi + 1.)*(xi + 1.)/2. + 1275.*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3414  case 40:
3415  return RealGradient(0., 60.*xi + 60. - 495.*(xi + 1.)*(xi + 1.)/2. + 1275.*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 2625.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/16. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32.);
3416  case 41:
3417  return RealGradient(0., -30.*xi - 30. + 495.*((xi + 1.)*(xi + 1.))/4. - 1275.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 2625.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/32. - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/64.);
3418  case 42:
3419  return RealGradient(0., -15.*xi/2. - 15./2. + 90.*((xi + 1.)*(xi + 1.)) - 375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32.);
3420  case 43:
3421  return RealGradient(0., -15.*xi/2. - 15./2. + 90.*((xi + 1.)*(xi + 1.)) - 375.*(xi + 1.)*(xi + 1.)*(xi + 1.)/2. + 525.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 945.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/32.);
3422  case 44:
3423  return RealGradient(0., 15.*xi/4. + 15./4. - 45.*(xi + 1.)*(xi + 1.) + 375.*((xi + 1.)*(xi + 1.)*(xi + 1.))/4. - 525.*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)/8. + 945.*((xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.)*(xi + 1.))/64.);
3424  case 45:
3425  return RealGradient(-675.*eta - 216.*xi + 1350.*(eta + 1.)*(xi + 1.) - 1125.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 1890.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 2835.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/4. - 783. + 945.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. + 90.*((xi + 1.)*(xi + 1.)) - 4725.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 2835.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
3426  case 46:
3427  return RealGradient(-225.*eta - 144.*xi + 900.*(eta + 1.)*(xi + 1.) - 1125.*(eta + 1.)*(xi + 1.)*(xi + 1.)/2. - 1260.*(xi + 1.)*(eta + 1.)*(eta + 1.) + 945.*(xi + 1.)*((eta + 1.)*(eta + 1.)*(eta + 1.))/2. - 333. + 315.*((eta + 1.)*(eta + 1.)) + 1575.*((eta + 1.)*(eta + 1.))*((xi + 1.)*(xi + 1.))/2. + 90.*((xi + 1.)*(xi + 1.)) - 4725.*(xi + 1.)*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. - 945.*(eta + 1.)*(eta + 1.)*(eta + 1.)/8., 0.);
3428  case 47:
3429  return RealGradient(225.*eta/2. + 90.*xi - 1125.*(eta + 1.)*(xi + 1.)/2. + 1125.*(eta + 1.)*((xi + 1.)*(xi + 1.))/4. + 1575.*(xi + 1.)*((eta + 1.)*(eta + 1.))/2. - 4725.*(xi + 1.)*(eta + 1.)*(eta + 1.)*(eta + 1.)/16. + 369./2. - 315.*(eta + 1.)*(eta + 1.)/2. - 1575.*(eta + 1.)*(eta + 1.)*(xi + 1.)*(xi + 1.)/4. - 45.*(xi + 1.)*(xi + 1.) + 4725.*((xi + 1.)*(xi + 1.))*((eta + 1.)*(eta + 1.)*(eta + 1.))/32. + 945.*((eta + 1.)*(eta + 1.)*(eta + 1.))/16., 0.);
3430  case 48:
3431  return RealGradient(0., 30.*xi + 30. - 135.*(xi + 1.)*(xi + 1.)/4. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
3432  case 49:
3433  return RealGradient(0., -15.*xi/2. - 15./2. + 45.*((xi + 1.)*(xi + 1.))/2. - 75.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8.);
3434  case 50:
3435  return RealGradient(-135.*eta/4. - 81.*xi + 135.*(eta + 1.)*(xi + 1.)/2. - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 297./4. + 135.*((xi + 1.)*(xi + 1.))/4., 0.);
3436  case 51:
3437  return RealGradient(135.*eta/4. + 54.*xi - 135.*(eta + 1.)*(xi + 1.)/2. + 225.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. + 243./4. - 45.*(xi + 1.)*(xi + 1.)/2., 0.);
3438  case 52:
3439  return RealGradient(-45.*eta/4. - 54.*xi + 45.*(eta + 1.)*(xi + 1.) - 225.*(eta + 1.)*(xi + 1.)*(xi + 1.)/8. - 207./4. + 135.*((xi + 1.)*(xi + 1.))/4., 0.);
3440  case 53:
3441  return RealGradient(45.*eta/4. + 36.*xi - 45.*(eta + 1.)*(xi + 1.) + 225.*(eta + 1.)*((xi + 1.)*(xi + 1.))/8. + 153./4. - 45.*(xi + 1.)*(xi + 1.)/2., 0.);
3442  case 54:
3443  return RealGradient(0., 30.*xi + 30. - 135.*(xi + 1.)*(xi + 1.)/4. + 75.*((xi + 1.)*(xi + 1.)*(xi + 1.))/8.);
3444  case 55:
3445  return RealGradient(0., -15.*xi/2. - 15./2. + 45.*((xi + 1.)*(xi + 1.))/2. - 75.*(xi + 1.)*(xi + 1.)*(xi + 1.)/8.);
3446  case 56:
3447  return RealGradient(15.*eta/4. - 3./4., 0.);
3448  case 57:
3449  return RealGradient(0., 0.);
3450  case 58:
3451  return RealGradient(0., 0.);
3452  case 59:
3453  return RealGradient(-15.*eta/4. - 3./4., 0.);
3454  default:
3455  libmesh_error_msg("Invalid i = " << i);
3456  }
3457  } // j = 2
3458 
3459  default:
3460  libmesh_error_msg("Invalid j = " << j);
3461  }
3462  }
3463 
3464  case TRI6:
3465  case TRI7:
3466  {
3467  switch (j)
3468  {
3469  // d^2()/dxi^2
3470  case 0:
3471  {
3472  switch(ii)
3473  {
3474  case 0:
3475  return sign * RealGradient(30240.*eta*xi - 12600.*eta - 12600.*eta*xi*xi - 8400.*xi - 25200.*xi*eta*eta + 2100. + 22680.*(eta*eta) + 7560.*(xi*xi) - 12600.*eta*eta*eta, -45360.*eta*xi + 8400.*eta + 50400.*eta*(xi*xi) + 12600.*xi + 37800.*xi*(eta*eta) - 1400. - 15120.*eta*eta - 30240.*xi*xi + 8400.*(eta*eta*eta) + 21000.*(xi*xi*xi));
3476  case 1:
3477  return sign * RealGradient(-20475.*eta*xi/2. + 136185.*eta/32. + 58275.*eta*(xi*xi)/16. + 40845.*xi/16. + 146475.*xi*(eta*eta)/16. - 21105./32. - 240975.*eta*eta/32. - 34965.*xi*xi/16. + 127575.*(eta*eta*eta)/32., 252315.*eta*xi/16. - 39375.*eta/16. - 146475.*eta*xi*xi/8. - 125265.*xi/32. - 382725.*xi*eta*eta/32. + 1715./4. + 25515.*(eta*eta)/8. + 145845.*(xi*xi)/16. - 14175.*eta*eta*eta/16. - 97125.*xi*xi*xi/16.);
3478  case 2:
3479  return sign * RealGradient(7560.*eta*xi - 3255.*eta/2. - 4725.*eta*xi*xi - 2835.*xi - 4725.*xi*eta*eta + 1155./2. + 945.*(eta*eta)/2. + 2835.*(xi*xi) + 1575.*(eta*eta*eta)/2., -4725.*eta*xi + 105.*eta + 9450.*eta*(xi*xi) + 7455.*xi/2. - 4725.*xi*eta*eta/2. - 315. + 1890.*(eta*eta) - 10395.*xi*xi - 1575.*eta*eta*eta + 7875.*(xi*xi*xi));
3480  case 3:
3481  return sign * RealGradient(-2835.*eta*xi/2. - 16695.*eta/32. + 58275.*eta*(xi*xi)/16. + 29085.*xi/16. - 29925.*xi*eta*eta/16. - 9345./32. + 76545.*(eta*eta)/32. - 34965.*xi*xi/16. - 48825.*eta*eta*eta/32., -65205.*eta*xi/16. + 9345.*eta/16. + 29925.*eta*(xi*xi)/8. - 66465.*xi/32. + 146475.*xi*(eta*eta)/32. + 595./4. - 4725.*eta*eta/8. + 110565.*(xi*xi)/16. - 5775.*eta*eta*eta/16. - 97125.*xi*xi*xi/16.);
3482  case 4:
3483  return sign * RealGradient(10080.*eta*xi - 1680.*eta - 12600.*eta*xi*xi - 6720.*xi + 1260. + 7560.*(xi*xi), 8400.*xi - 700. - 25200.*xi*xi + 21000.*(xi*xi*xi));
3484  case 5:
3485  return sign * RealGradient(840.*eta*(12.*xi - 2. - 15.*xi*xi), 8400.*xi - 700. - 25200.*xi*xi + 21000.*(xi*xi*xi));
3486  case 6:
3487  return sign * RealGradient(2835.*eta*(-120.*eta*xi + 54.*eta + 60.*xi - 16. - 30.*eta*eta - 45.*xi*xi)/32., -127575.*eta*xi/8. + 2205.*eta + 42525.*eta*(xi*xi)/2. + 8505.*xi/2. + 127575.*xi*(eta*eta)/16. - 1785./4. - 31185.*eta*eta/16. - 161595.*xi*xi/16. + 1575.*(eta*eta*eta)/4. + 212625.*(xi*xi*xi)/32.);
3488  case 7:
3489  return sign * RealGradient(105.*eta*(-60.*eta*xi + 45.*eta + 18.*xi - 8. - 45.*eta*eta - 15.*xi*xi/2.), -13230.*eta*xi + 2520.*eta + 12600.*eta*(xi*xi) + 1680.*xi + 14175.*xi*(eta*eta) - 245. - 4725.*eta*eta - 2835.*xi*xi + 2100.*(eta*eta*eta) + 2625.*(xi*xi*xi)/2.);
3490  case 8:
3491  return sign * RealGradient(105.*eta*(-360.*eta*xi + 594.*eta + 84.*xi - 80. - 810.*eta*eta - 15.*xi*xi)/32., -36855.*eta*xi/8. + 1575.*eta + 4725.*eta*(xi*xi)/2. + 735.*xi/2. + 127575.*xi*(eta*eta)/16. - 385./4. - 76545.*eta*eta/16. - 5355.*xi*xi/16. + 14175.*(eta*eta*eta)/4. + 2625.*(xi*xi*xi)/32.);
3492  case 9:
3493  return sign * RealGradient(0., 0.);
3494  case 10:
3495  return sign * RealGradient(0., 0.);
3496  case 11:
3497  return sign * RealGradient(105.*eta*(330.*eta*xi + 180.*eta - 54.*xi - 11. - 465.*eta*eta - 15.*xi*xi)/32., 945.*eta*xi/8. + 1155.*eta/2. - 17325.*eta*xi*xi/8. - 1785.*xi/32. + 146475.*xi*(eta*eta)/32. - 595./32. - 76545.*eta*eta/32. + 2835.*(xi*xi)/32. + 9975.*(eta*eta*eta)/16. + 2625.*(xi*xi*xi)/32.);
3498  case 12:
3499  return sign * RealGradient(105.*eta*(45.*eta*xi - 18.*eta - 3.*xi + 5./2. + 15.*(eta*eta)/2. - 15.*xi*xi/2.), 9450.*eta*xi - 1680.*eta - 9450.*eta*xi*xi - 105.*xi/2. - 4725.*xi*eta*eta/2. + 175./2. - 945.*eta*eta/2. - 2205.*xi*xi/2. + 1575.*(eta*eta*eta) + 2625.*(xi*xi*xi)/2.);
3500  case 13:
3501  return sign * RealGradient(2835.*eta*(30.*eta*xi - 36.*eta + 30.*xi - 1. + 45.*(eta*eta) - 45.*xi*xi)/32., 76545.*eta*xi/8. - 7245.*eta/2. - 42525.*eta*xi*xi/8. + 127575.*xi/32. - 382725.*xi*eta*eta/32. - 11235./32. + 240975.*(eta*eta)/32. - 314685.*xi*xi/32. - 48825.*eta*eta*eta/16. + 212625.*(xi*xi*xi)/32.);
3502  case 14:
3503  return sign * RealGradient(840.*eta*(-30.*eta*xi + 18.*eta + 18.*xi - 5. - 15.*eta*eta - 15.*xi*xi), -60480.*eta*xi + 16800.*eta + 50400.*eta*(xi*xi) + 21000.*xi + 37800.*xi*(eta*eta) - 3500. - 22680.*eta*eta - 37800.*xi*xi + 8400.*(eta*eta*eta) + 21000.*(xi*xi*xi));
3504  case 15:
3505  return RealGradient(10080.*eta*(20.*eta*xi - 21.*eta - 14.*xi + 7. + 15.*(eta*eta) + 5.*(xi*xi)), 423360.*eta*xi - 94080.*eta - 403200.*eta*xi*xi - 70560.*xi - 453600.*xi*eta*eta + 9800. + 211680.*(eta*eta) + 141120.*(xi*xi) - 134400.*eta*eta*eta - 84000.*xi*xi*xi);
3506  case 16:
3507  return RealGradient(10080.*eta*(-40.*eta*xi + 21.*eta + 28.*xi - 7. - 15.*eta*eta - 25.*xi*xi), -846720.*eta*xi + 188160.*eta + 806400.*eta*(xi*xi) + 352800.*xi + 453600.*xi*(eta*eta) - 49000. - 211680.*eta*eta - 705600.*xi*xi + 67200.*(eta*eta*eta) + 420000.*(xi*xi*xi));
3508  case 17:
3509  return RealGradient(20160.*eta*(-10.*eta*xi + 3.*eta + 13.*xi - 3. - 10.*xi*xi), -241920.*eta*xi + 26880.*eta + 403200.*eta*(xi*xi) + 161280.*xi - 14560. - 443520.*xi*xi + 336000.*(xi*xi*xi));
3510  case 18:
3511  return RealGradient(10080.*eta*(10.*eta*xi - 3.*eta - 22.*xi + 4. + 25.*(xi*xi)), 120960.*eta*xi - 13440.*eta - 201600.*eta*xi*xi - 201600.*xi + 18200. + 554400.*(xi*xi) - 420000.*xi*xi*xi);
3512  case 19:
3513  return RealGradient(0., 6720.*eta - 280. - 30240.*eta*eta + 33600.*(eta*eta*eta));
3514  case 20:
3515  return RealGradient(0., -13440.*eta + 560. + 60480.*(eta*eta) - 67200.*eta*eta*eta);
3516  case 21:
3517  return RealGradient(8960.*eta*(-65.*eta*xi/3. + 14.*eta + 35.*xi/3. - 4. - 10.*eta*eta - 20.*xi*xi/3.), -340480.*eta*xi + 56000.*eta + 1164800.*eta*(xi*xi)/3. + 71680.*xi + 268800.*xi*(eta*eta) - 24920./3. - 81760.*eta*eta - 474880.*xi*xi/3. + 280000.*(eta*eta*eta)/9. + 896000.*(xi*xi*xi)/9.);
3518  case 22:
3519  return RealGradient(2240.*eta*(280.*eta*xi/3. - 49.*eta - 136.*xi/3. + 13. + 35.*(eta*eta) + 100.*(xi*xi)/3.), 371840.*eta*xi - 62720.*eta - 1254400.*eta*xi*xi/3. - 91840.*xi - 235200.*xi*eta*eta + 32480./3. + 76160.*(eta*eta) + 600320.*(xi*xi)/3. - 224000.*eta*eta*eta/9. - 1120000.*xi*xi*xi/9.);
3520  case 23:
3521  return RealGradient(2240.*eta*(-100.*eta*xi/3. + 34.*eta + 31.*xi/3. - 6. - 35.*eta*eta - 10.*xi*xi/3.), -183680.*eta*xi + 44800.*eta + 448000.*eta*(xi*xi)/3. + 20160.*xi + 235200.*xi*(eta*eta) - 10640./3. - 109760.*eta*eta - 89600.*xi*xi/3. + 627200.*(eta*eta*eta)/9. + 112000.*(xi*xi*xi)/9.);
3522  case 24:
3523  return RealGradient(1120.*eta*(250.*eta*xi/3. - 73.*eta - 70.*xi/3. + 12. + 80.*(eta*eta) + 25.*(xi*xi)/3.), 232960.*eta*xi - 58240.*eta - 560000.*eta*xi*xi/3. - 26880.*xi - 268800.*xi*eta*eta + 14840./3. + 125440.*(eta*eta) + 115360.*(xi*xi)/3. - 582400.*eta*eta*eta/9. - 140000.*xi*xi*xi/9.);
3524  case 25:
3525  return RealGradient(2240.*eta*(20.*eta*xi/3. - eta - 44.*xi/3. + 5. - 5.*eta*eta + 20.*(xi*xi)/3.), 4480.*eta*xi + 15680.*eta/3. - 89600.*eta*xi*xi/3. - 11200.*xi + 33600.*xi*(eta*eta) + 6440./9. - 25760.*eta*eta + 98560.*(xi*xi)/3. + 190400.*(eta*eta*eta)/9. - 224000.*xi*xi*xi/9.);
3526  case 26:
3527  return RealGradient(2240.*eta*(80.*eta*xi/3. - 23.*eta + 64.*xi/3. - 1. + 25.*(eta*eta) - 100.*xi*xi/3.), 165760.*eta*xi - 138880.*eta/3. - 358400.*eta*xi*xi/3. + 64960.*xi - 168000.*xi*eta*eta - 48160./9. + 80640.*(eta*eta) - 519680.*xi*xi/3. - 246400.*eta*eta*eta/9. + 1120000.*(xi*xi*xi)/9.);
3528  case 27:
3529  return RealGradient(1120.*eta*(-40.*eta*xi/3. + 11.*eta - 2.*xi/3. - 1. - 5.*eta*eta + 5.*(xi*xi)/3.), -24640.*eta*xi + 4480.*eta/3. + 89600.*eta*(xi*xi)/3. + 1120.*xi + 16800.*xi*(eta*eta) - 1400./9. + 5600.*(eta*eta) + 2240.*(xi*xi)/3. - 89600.*eta*eta*eta/9. - 28000.*xi*xi*xi/9.);
3530  case 28:
3531  return RealGradient(1120.*eta*(200.*eta*xi/3. - 17.*eta - 20.*xi/3. + 3. - 5.*eta*eta - 25.*xi*xi/3.), 116480.*eta*xi - 35840.*eta/3. - 448000.*eta*xi*xi/3. - 3360.*xi + 16800.*xi*(eta*eta) + 8680./9. - 30240.*eta*eta - 24640.*xi*xi/3. + 246400.*(eta*eta*eta)/9. + 140000.*(xi*xi*xi)/9.);
3532  case 29:
3533  return RealGradient(2240.*eta*(-110.*eta*xi/3. + 36.*eta + 71.*xi/3. - 12. - 25.*eta*eta - 20.*xi*xi/3.), -165760.*eta*xi + 89600.*eta/3. + 492800.*eta*(xi*xi)/3. + 24640.*xi + 168000.*xi*(eta*eta) - 29680./9. - 51520.*eta*eta - 138880.*xi*xi/3. + 179200.*(eta*eta*eta)/9. + 224000.*(xi*xi*xi)/9.);
3534  case 30:
3535  return RealGradient(1120.*eta*(170.*eta*xi/3. - 23.*eta - 134.*xi/3. + 10. + 10.*(eta*eta) + 125.*(xi*xi)/3.), 103040.*eta*xi - 31360.*eta/3. - 380800.*eta*xi*xi/3. - 56000.*xi - 33600.*xi*eta*eta + 51800./9. - 2240.*eta*eta + 375200.*(xi*xi)/3. + 44800.*(eta*eta*eta)/9. - 700000.*xi*xi*xi/9.);
3536  case 31:
3537  return RealGradient(1120.*eta*(220.*eta*xi/3. - 27.*eta - 178.*xi/3. + 17. + 5.*(eta*eta) + 85.*(xi*xi)/3.), 105280.*eta*xi - 22400.*eta/3. - 492800.*eta*xi*xi/3. - 32480.*xi - 16800.*xi*eta*eta + 27160./9. - 19040.*eta*eta + 239680.*(xi*xi)/3. + 224000.*(eta*eta*eta)/9. - 476000.*xi*xi*xi/9.);
3538  case 32:
3539  return RealGradient(1120.*eta*(-80.*eta*xi/3. + 5.*eta + 116.*xi/3. - 7. + 5.*(eta*eta) - 125.*xi*xi/3.), -22400.*eta*xi - 8960.*eta/3. + 179200.*eta*(xi*xi)/3. + 39200.*xi - 16800.*xi*eta*eta - 26600./9. + 12320.*(eta*eta) - 324800.*xi*xi/3. - 44800.*eta*eta*eta/9. + 700000.*(xi*xi*xi)/9.);
3540  case 33:
3541  return RealGradient(1120.*eta*(20.*eta*xi - 17.*eta - 8.*xi + 3. + 15.*(eta*eta) + 5.*(xi*xi)), 47040.*eta*xi - 29120.*eta/3. - 44800.*eta*xi*xi - 7840.*xi - 50400.*xi*eta*eta + 9520./9. + 20160.*(eta*eta) + 15680.*(xi*xi) - 11200.*eta*eta*eta - 28000.*xi*xi*xi/3.);
3542  case 34:
3543  return RealGradient(3360.*eta*(-10.*eta*xi + 6.*eta + 2.*xi - 1. - 5.*eta*eta), -67200.*eta*xi + 38080.*eta/3. + 67200.*eta*(xi*xi) + 3360.*xi + 50400.*xi*(eta*eta) - 5600./9. - 19040.*eta*eta - 3360.*xi*xi + 22400.*(eta*eta*eta)/3.);
3544  default:
3545  libmesh_error_msg("Invalid i = " << i);
3546  }
3547  } // j = 0
3548 
3549  // d^2()/dxideta
3550  case 1:
3551  {
3552  switch(ii)
3553  {
3554  case 0:
3555  return sign * RealGradient(45360.*eta*xi - 16800.*eta - 25200.*eta*xi*xi - 12600.*xi - 37800.*xi*eta*eta + 2800. + 30240.*(eta*eta) + 15120.*(xi*xi) - 16800.*eta*eta*eta - 4200.*xi*xi*xi, -30240.*eta*xi + 4200.*eta + 37800.*eta*(xi*xi) + 8400.*xi + 25200.*xi*(eta*eta) - 700. - 7560.*eta*eta - 22680.*xi*xi + 4200.*(eta*eta*eta) + 16800.*(xi*xi*xi));
3556  case 1:
3557  return sign * RealGradient(-240975.*eta*xi/16. + 7245.*eta/2. + 146475.*eta*(xi*xi)/16. + 136185.*xi/32. + 382725.*xi*(eta*eta)/32. - 12145./16. - 76545.*eta*eta/16. - 20475.*xi*xi/4. + 14175.*(eta*eta*eta)/8. + 19425.*(xi*xi*xi)/16., 25515.*eta*xi/4. + 2835.*eta/32. - 382725.*eta*xi*xi/32. - 39375.*xi/16. - 42525.*xi*eta*eta/16. + 3045./32. - 42525.*eta*eta/32. + 252315.*(xi*xi)/32. + 42525.*(eta*eta*eta)/32. - 48825.*xi*xi*xi/8.);
3558  case 2:
3559  return sign * RealGradient(945.*eta*xi + 1680.*eta - 4725.*eta*xi*xi - 3255.*xi/2. + 4725.*xi*(eta*eta)/2. - 4725.*eta*eta + 3780.*(xi*xi) + 3150.*(eta*eta*eta) - 1575.*xi*xi*xi, 3780.*eta*xi - 525.*eta/2. - 4725.*eta*xi*xi/2. + 105.*xi - 4725.*xi*eta*eta + 35./2. + 315.*(eta*eta)/2. - 4725.*xi*xi/2. + 525.*(eta*eta*eta)/2. + 3150.*(xi*xi*xi));
3560  case 3:
3561  return sign * RealGradient(76545.*eta*xi/16. - 1155.*eta/2. - 29925.*eta*xi*xi/16. - 16695.*xi/32. - 146475.*xi*eta*eta/32. + 1855./16. - 945.*eta*eta/16. - 2835.*xi*xi/4. + 5775.*(eta*eta*eta)/8. + 19425.*(xi*xi*xi)/16., -4725.*eta*xi/4. + 1155.*eta/32. + 146475.*eta*(xi*xi)/32. + 9345.*xi/16. - 17325.*xi*eta*eta/16. - 875./32. + 2835.*(eta*eta)/32. - 65205.*xi*xi/32. + 525.*(eta*eta*eta)/32. + 9975.*(xi*xi*xi)/8.);
3562  case 4:
3563  return sign * RealGradient(-1680.*xi + 140. + 5040.*(xi*xi) - 4200.*xi*xi*xi, 0.);
3564  case 5:
3565  return sign * RealGradient(-1680.*xi + 140. + 5040.*(xi*xi) - 4200.*xi*xi*xi, 0.);
3566  case 6:
3567  return sign * RealGradient(76545.*eta*xi/8. - 1575.*eta - 42525.*eta*xi*xi/4. - 2835.*xi/2. - 127575.*xi*eta*eta/16. + 735./4. + 36855.*(eta*eta)/16. + 42525.*(xi*xi)/16. - 1575.*eta*eta*eta/2. - 42525.*xi*xi*xi/32., -31185.*eta*xi/8. + 525.*eta/2. + 127575.*eta*(xi*xi)/16. + 2205.*xi + 4725.*xi*(eta*eta)/4. - 455./4. - 2205.*eta*eta/16. - 127575.*xi*xi/16. + 525.*(eta*eta*eta)/32. + 14175.*(xi*xi*xi)/2.);
3568  case 7:
3569  return sign * RealGradient(9450.*eta*xi - 2520.*eta - 6300.*eta*xi*xi - 840.*xi - 14175.*xi*eta*eta + 175. + 6615.*(eta*eta) + 945.*(xi*xi) - 4200.*eta*eta*eta - 525.*xi*xi*xi/2., -9450.*eta*xi + 840.*eta + 14175.*eta*(xi*xi) + 2520.*xi + 6300.*xi*(eta*eta) - 175. - 945.*eta*eta - 6615.*xi*xi + 525.*(eta*eta*eta)/2. + 4200.*(xi*xi*xi));
3570  case 8:
3571  return sign * RealGradient(31185.*eta*xi/8. - 2205.*eta - 4725.*eta*xi*xi/4. - 525.*xi/2. - 127575.*xi*eta*eta/16. + 455./4. + 127575.*(eta*eta)/16. + 2205.*(xi*xi)/16. - 14175.*eta*eta*eta/2. - 525.*xi*xi*xi/32., -76545.*eta*xi/8. + 2835.*eta/2. + 127575.*eta*(xi*xi)/16. + 1575.*xi + 42525.*xi*(eta*eta)/4. - 735./4. - 42525.*eta*eta/16. - 36855.*xi*xi/16. + 42525.*(eta*eta*eta)/32. + 1575.*(xi*xi*xi)/2.);
3572  case 9:
3573  return sign * RealGradient(0., 1680.*eta - 140. - 5040.*eta*eta + 4200.*(eta*eta*eta));
3574  case 10:
3575  return sign * RealGradient(0., 1680.*eta - 140. - 5040.*eta*eta + 4200.*(eta*eta*eta));
3576  case 11:
3577  return sign * RealGradient(4725.*eta*xi/4. - 9345.*eta/16. + 17325.*eta*(xi*xi)/16. - 1155.*xi/32. - 146475.*xi*eta*eta/32. + 875./32. + 65205.*(eta*eta)/32. - 2835.*xi*xi/32. - 9975.*eta*eta*eta/8. - 525.*xi*xi*xi/32., -76545.*eta*xi/16. + 16695.*eta/32. + 146475.*eta*(xi*xi)/32. + 1155.*xi/2. + 29925.*xi*(eta*eta)/16. - 1855./16. + 2835.*(eta*eta)/4. + 945.*(xi*xi)/16. - 19425.*eta*eta*eta/16. - 5775.*xi*xi*xi/8.);
3578  case 12:
3579  return sign * RealGradient(-3780.*eta*xi - 105.*eta + 4725.*eta*(xi*xi) + 525.*xi/2. + 4725.*xi*(eta*eta)/2. - 35./2. + 4725.*(eta*eta)/2. - 315.*xi*xi/2. - 3150.*eta*eta*eta - 525.*xi*xi*xi/2., -945.*eta*xi + 3255.*eta/2. - 4725.*eta*xi*xi/2. - 1680.*xi + 4725.*xi*(eta*eta) - 3780.*eta*eta + 4725.*(xi*xi) + 1575.*(eta*eta*eta) - 3150.*xi*xi*xi);
3580  case 13:
3581  return sign * RealGradient(-25515.*eta*xi/4. + 39375.*eta/16. + 42525.*eta*(xi*xi)/16. - 2835.*xi/32. + 382725.*xi*(eta*eta)/32. - 3045./32. - 252315.*eta*eta/32. + 42525.*(xi*xi)/32. + 48825.*(eta*eta*eta)/8. - 42525.*xi*xi*xi/32., 240975.*eta*xi/16. - 136185.*eta/32. - 382725.*eta*xi*xi/32. - 7245.*xi/2. - 146475.*xi*eta*eta/16. + 12145./16. + 20475.*(eta*eta)/4. + 76545.*(xi*xi)/16. - 19425.*eta*eta*eta/16. - 14175.*xi*xi*xi/8.);
3582  case 14:
3583  return sign * RealGradient(30240.*eta*xi - 8400.*eta - 25200.*eta*xi*xi - 4200.*xi - 37800.*xi*eta*eta + 700. + 22680.*(eta*eta) + 7560.*(xi*xi) - 16800.*eta*eta*eta - 4200.*xi*xi*xi, -45360.*eta*xi + 12600.*eta + 37800.*eta*(xi*xi) + 16800.*xi + 25200.*xi*(eta*eta) - 2800. - 15120.*eta*eta - 30240.*xi*xi + 4200.*(eta*eta*eta) + 16800.*(xi*xi*xi));
3584  case 15:
3585  return RealGradient(-423360.*eta*xi + 188160.*eta + 201600.*eta*(xi*xi) + 70560.*xi + 453600.*xi*(eta*eta) - 19600. - 423360.*eta*eta - 70560.*xi*xi + 268800.*(eta*eta*eta) + 16800.*(xi*xi*xi), 423360.*eta*xi - 70560.*eta - 453600.*eta*xi*xi - 94080.*xi - 403200.*xi*eta*eta + 9800. + 141120.*(eta*eta) + 211680.*(xi*xi) - 84000.*eta*eta*eta - 134400.*xi*xi*xi);
3586  case 16:
3587  return RealGradient(423360.*eta*xi - 94080.*eta - 403200.*eta*xi*xi - 70560.*xi - 453600.*xi*eta*eta + 9800. + 211680.*(eta*eta) + 141120.*(xi*xi) - 134400.*eta*eta*eta - 84000.*xi*xi*xi, -423360.*eta*xi + 70560.*eta + 453600.*eta*(xi*xi) + 188160.*xi + 201600.*xi*(eta*eta) - 19600. - 70560.*eta*eta - 423360.*xi*xi + 16800.*(eta*eta*eta) + 268800.*(xi*xi*xi));
3588  case 17:
3589  return RealGradient(120960.*eta*xi - 13440.*eta - 201600.*eta*xi*xi - 60480.*xi + 6440. + 131040.*(xi*xi) - 67200.*xi*xi*xi, 26880.*xi - 1120. - 120960.*xi*xi + 134400.*(xi*xi*xi));
3590  case 18:
3591  return RealGradient(-60480.*eta*xi + 6720.*eta + 100800.*eta*(xi*xi) + 40320.*xi - 3640. - 110880.*xi*xi + 84000.*(xi*xi*xi), -13440.*xi + 560. + 60480.*(xi*xi) - 67200.*xi*xi*xi);
3592  case 19:
3593  return RealGradient(-13440.*eta + 560. + 60480.*(eta*eta) - 67200.*eta*eta*eta, -60480.*eta*xi + 40320.*eta + 6720.*xi + 100800.*xi*(eta*eta) - 3640. - 110880.*eta*eta + 84000.*(eta*eta*eta));
3594  case 20:
3595  return RealGradient(26880.*eta - 1120. - 120960.*eta*eta + 134400.*(eta*eta*eta), 120960.*eta*xi - 60480.*eta - 13440.*xi - 201600.*xi*eta*eta + 6440. + 131040.*(eta*eta) - 67200.*eta*eta*eta);
3596  case 21:
3597  return RealGradient(250880.*eta*xi - 58240.*eta - 582400.*eta*xi*xi/3. - 35840.*xi - 268800.*xi*eta*eta + 17920./3. + 116480.*(eta*eta) + 156800.*(xi*xi)/3. - 560000.*eta*eta*eta/9. - 179200.*xi*xi*xi/9., -163520.*eta*xi + 13440.*eta + 268800.*eta*(xi*xi) + 56000.*xi + 280000.*xi*(eta*eta)/3. - 10360./3. - 39200.*eta*eta/3. - 170240.*xi*xi + 28000.*(eta*eta*eta)/9. + 1164800.*(xi*xi*xi)/9.);
3598  case 22:
3599  return RealGradient(-219520.*eta*xi + 44800.*eta + 627200.*eta*(xi*xi)/3. + 29120.*xi + 235200.*xi*(eta*eta) - 12880./3. - 91840.*eta*eta - 152320.*xi*xi/3. + 448000.*(eta*eta*eta)/9. + 224000.*(xi*xi*xi)/9., 152320.*eta*xi - 13440.*eta - 235200.*eta*xi*xi - 62720.*xi - 224000.*xi*eta*eta/3. + 12040./3. + 34720.*(eta*eta)/3. + 185920.*(xi*xi) - 22400.*eta*eta*eta/9. - 1254400.*xi*xi*xi/9.);
3600  case 23:
3601  return RealGradient(152320.*eta*xi - 62720.*eta - 224000.*eta*xi*xi/3. - 13440.*xi - 235200.*xi*eta*eta + 12040./3. + 185920.*(eta*eta) + 34720.*(xi*xi)/3. - 1254400.*eta*eta*eta/9. - 22400.*xi*xi*xi/9., -219520.*eta*xi + 29120.*eta + 235200.*eta*(xi*xi) + 44800.*xi + 627200.*xi*(eta*eta)/3. - 12880./3. - 152320.*eta*eta/3. - 91840.*xi*xi + 224000.*(eta*eta*eta)/9. + 448000.*(xi*xi*xi)/9.);
3602  case 24:
3603  return RealGradient(-163520.*eta*xi + 56000.*eta + 280000.*eta*(xi*xi)/3. + 13440.*xi + 268800.*xi*(eta*eta) - 10360./3. - 170240.*eta*eta - 39200.*xi*xi/3. + 1164800.*(eta*eta*eta)/9. + 28000.*(xi*xi*xi)/9., 250880.*eta*xi - 35840.*eta - 268800.*eta*xi*xi - 58240.*xi - 582400.*xi*eta*eta/3. + 17920./3. + 156800.*(eta*eta)/3. + 116480.*(xi*xi) - 179200.*eta*eta*eta/9. - 560000.*xi*xi*xi/9.);
3604  case 25:
3605  return RealGradient(-4480.*eta*xi - 31360.*eta/3. + 44800.*eta*(xi*xi)/3. + 11200.*xi - 33600.*xi*eta*eta - 12880./9. + 51520.*(eta*eta) - 49280.*xi*xi/3. - 380800.*eta*eta*eta/9. + 44800.*(xi*xi*xi)/9., -51520.*eta*xi + 11200.*eta + 33600.*eta*(xi*xi) + 15680.*xi/3. + 190400.*xi*(eta*eta)/3. - 10360./9. - 75040.*eta*eta/3. + 2240.*(xi*xi) + 140000.*(eta*eta*eta)/9. - 89600.*xi*xi*xi/9.);
3606  case 26:
3607  return RealGradient(-103040.*eta*xi + 89600.*eta/3. + 179200.*eta*(xi*xi)/3. - 2240.*xi + 168000.*xi*(eta*eta) - 9520./9. - 82880.*eta*eta + 71680.*(xi*xi)/3. + 492800.*(eta*eta*eta)/9. - 224000.*xi*xi*xi/9., 161280.*eta*xi - 26880.*eta - 168000.*eta*xi*xi - 138880.*xi/3. - 246400.*xi*eta*eta/3. + 51800./9. + 79520.*(eta*eta)/3. + 82880.*(xi*xi) - 44800.*eta*eta*eta/9. - 358400.*xi*xi*xi/9.);
3608  case 27:
3609  return RealGradient(24640.*eta*xi - 8960.*eta/3. - 44800.*eta*xi*xi/3. - 1120.*xi - 16800.*xi*eta*eta + 2800./9. - 11200.*eta*eta - 1120.*xi*xi/3. + 179200.*(eta*eta*eta)/9. + 5600.*(xi*xi*xi)/9., 11200.*eta*xi - 7840.*eta + 16800.*eta*(xi*xi) + 4480.*xi/3. - 89600.*xi*eta*eta/3. + 5320./9. + 64960.*(eta*eta)/3. - 12320.*xi*xi - 140000.*eta*eta*eta/9. + 89600.*(xi*xi*xi)/9.);
3610  case 28:
3611  return RealGradient(-38080.*eta*xi - 22400.*eta/3. + 224000.*eta*(xi*xi)/3. + 3360.*xi - 16800.*xi*eta*eta + 280./9. + 52640.*(eta*eta) - 11200.*xi*xi/3. - 492800.*eta*eta*eta/9. - 28000.*xi*xi*xi/9., -60480.*eta*xi + 19040.*eta + 16800.*eta*(xi*xi) - 35840.*xi/3. + 246400.*xi*(eta*eta)/3. - 8960./9. - 99680.*eta*eta/3. + 58240.*(xi*xi) + 95200.*(eta*eta*eta)/9. - 448000.*xi*xi*xi/9.);
3612  case 29:
3613  return RealGradient(161280.*eta*xi - 138880.*eta/3. - 246400.*eta*xi*xi/3. - 26880.*xi - 168000.*xi*eta*eta + 51800./9. + 82880.*(eta*eta) + 79520.*(xi*xi)/3. - 358400.*eta*eta*eta/9. - 44800.*xi*xi*xi/9., -103040.*eta*xi - 2240.*eta + 168000.*eta*(xi*xi) + 89600.*xi/3. + 179200.*xi*(eta*eta)/3. - 9520./9. + 71680.*(eta*eta)/3. - 82880.*xi*xi - 224000.*eta*eta*eta/9. + 492800.*(xi*xi*xi)/9.);
3614  case 30:
3615  return RealGradient(-51520.*eta*xi + 15680.*eta/3. + 190400.*eta*(xi*xi)/3. + 11200.*xi + 33600.*xi*(eta*eta) - 10360./9. + 2240.*(eta*eta) - 75040.*xi*xi/3. - 89600.*eta*eta*eta/9. + 140000.*(xi*xi*xi)/9., -4480.*eta*xi + 11200.*eta - 33600.*eta*xi*xi - 31360.*xi/3. + 44800.*xi*(eta*eta)/3. - 12880./9. - 49280.*eta*eta/3. + 51520.*(xi*xi) + 44800.*(eta*eta*eta)/9. - 380800.*xi*xi*xi/9.);
3616  case 31:
3617  return RealGradient(-60480.*eta*xi - 35840.*eta/3. + 246400.*eta*(xi*xi)/3. + 19040.*xi + 16800.*xi*(eta*eta) - 8960./9. + 58240.*(eta*eta) - 99680.*xi*xi/3. - 448000.*eta*eta*eta/9. + 95200.*(xi*xi*xi)/9., -38080.*eta*xi + 3360.*eta - 16800.*eta*xi*xi - 22400.*xi/3. + 224000.*xi*(eta*eta)/3. + 280./9. - 11200.*eta*eta/3. + 52640.*(xi*xi) - 28000.*eta*eta*eta/9. - 492800.*xi*xi*xi/9.);
3618  case 32:
3619  return RealGradient(11200.*eta*xi + 4480.*eta/3. - 89600.*eta*xi*xi/3. - 7840.*xi + 16800.*xi*(eta*eta) + 5320./9. - 12320.*eta*eta + 64960.*(xi*xi)/3. + 89600.*(eta*eta*eta)/9. - 140000.*xi*xi*xi/9., 24640.*eta*xi - 1120.*eta - 16800.*eta*xi*xi - 8960.*xi/3. - 44800.*xi*eta*eta/3. + 2800./9. - 1120.*eta*eta/3. - 11200.*xi*xi + 5600.*(eta*eta*eta)/9. + 179200.*(xi*xi*xi)/9.);
3620  case 33:
3621  return RealGradient(-38080.*eta*xi + 38080.*eta/3. + 22400.*eta*(xi*xi) + 3360.*xi + 50400.*xi*(eta*eta) - 6440./9. - 33600.*eta*eta - 4480.*xi*xi + 22400.*(eta*eta*eta) + 5600.*(xi*xi*xi)/3., 40320.*eta*xi - 3360.*eta - 50400.*eta*xi*xi - 29120.*xi/3. - 33600.*xi*eta*eta + 6160./9. + 3360.*(eta*eta) + 23520.*(xi*xi) - 44800.*xi*xi*xi/3.);
3622  case 34:
3623  return RealGradient(40320.*eta*xi - 29120.*eta/3. - 33600.*eta*xi*xi - 3360.*xi - 50400.*xi*eta*eta + 6160./9. + 23520.*(eta*eta) + 3360.*(xi*xi) - 44800.*eta*eta*eta/3., -38080.*eta*xi + 3360.*eta + 50400.*eta*(xi*xi) + 38080.*xi/3. + 22400.*xi*(eta*eta) - 6440./9. - 4480.*eta*eta - 33600.*xi*xi + 5600.*(eta*eta*eta)/3. + 22400.*(xi*xi*xi));
3624  default:
3625  libmesh_error_msg("Invalid i = " << i);
3626  }
3627  } // j = 1
3628 
3629  // d^2()/deta^2
3630  case 2:
3631  {
3632  switch(ii)
3633  {
3634  case 0:
3635  return sign * RealGradient(60480.*eta*xi - 21000.*eta - 37800.*eta*xi*xi - 16800.*xi - 50400.*xi*eta*eta + 3500. + 37800.*(eta*eta) + 22680.*(xi*xi) - 21000.*eta*eta*eta - 8400.*xi*xi*xi, 840.*xi*(30.*eta*xi - 18.*eta - 18.*xi + 5. + 15.*(eta*eta) + 15.*(xi*xi)));
3636  case 1:
3637  return sign * RealGradient(-76545.*eta*xi/8. - 127575.*eta/32. + 382725.*eta*(xi*xi)/32. + 7245.*xi/2. + 42525.*xi*(eta*eta)/8. + 11235./32. + 314685.*(eta*eta)/32. - 240975.*xi*xi/32. - 212625.*eta*eta*eta/32. + 48825.*(xi*xi*xi)/16., 2835.*xi*(-30.*eta*xi - 30.*eta + 36.*xi + 1. + 45.*(eta*eta) - 45.*xi*xi)/32.);
3638  case 2:
3639  return sign * RealGradient(-9450.*eta*xi + 105.*eta/2. + 4725.*eta*(xi*xi)/2. + 1680.*xi + 9450.*xi*(eta*eta) - 175./2. + 2205.*(eta*eta)/2. + 945.*(xi*xi)/2. - 2625.*eta*eta*eta/2. - 1575.*xi*xi*xi, 105.*xi*(-45.*eta*xi + 3.*eta + 18.*xi - 5./2. + 15.*(eta*eta)/2. - 15.*xi*xi/2.));
3640  case 3:
3641  return sign * RealGradient(-945.*eta*xi/8. + 1785.*eta/32. - 146475.*eta*xi*xi/32. - 1155.*xi/2. + 17325.*xi*(eta*eta)/8. + 595./32. - 2835.*eta*eta/32. + 76545.*(xi*xi)/32. - 2625.*eta*eta*eta/32. - 9975.*xi*xi*xi/16., 105.*xi*(-330.*eta*xi + 54.*eta - 180.*xi + 11. + 15.*(eta*eta) + 465.*(xi*xi))/32.);
3642  case 4:
3643  return sign * RealGradient(0., 0.);
3644  case 5:
3645  return sign * RealGradient(0., 0.);
3646  case 6:
3647  return sign * RealGradient(36855.*eta*xi/8. - 735.*eta/2. - 127575.*eta*xi*xi/16. - 1575.*xi - 4725.*xi*eta*eta/2. + 385./4. + 5355.*(eta*eta)/16. + 76545.*(xi*xi)/16. - 2625.*eta*eta*eta/32. - 14175.*xi*xi*xi/4., 105.*xi*(360.*eta*xi - 84.*eta - 594.*xi + 80. + 15.*(eta*eta) + 810.*(xi*xi))/32.);
3648  case 7:
3649  return sign * RealGradient(13230.*eta*xi - 1680.*eta - 14175.*eta*xi*xi - 2520.*xi - 12600.*xi*eta*eta + 245. + 2835.*(eta*eta) + 4725.*(xi*xi) - 2625.*eta*eta*eta/2. - 2100.*xi*xi*xi, 105.*xi*(60.*eta*xi - 18.*eta - 45.*xi + 8. + 15.*(eta*eta)/2. + 45.*(xi*xi)));
3650  case 8:
3651  return sign * RealGradient(127575.*eta*xi/8. - 8505.*eta/2. - 127575.*eta*xi*xi/16. - 2205.*xi - 42525.*xi*eta*eta/2. + 1785./4. + 161595.*(eta*eta)/16. + 31185.*(xi*xi)/16. - 212625.*eta*eta*eta/32. - 1575.*xi*xi*xi/4., 2835.*xi*(120.*eta*xi - 60.*eta - 54.*xi + 16. + 45.*(eta*eta) + 30.*(xi*xi))/32.);
3652  case 9:
3653  return sign * RealGradient(-8400.*eta + 700. + 25200.*(eta*eta) - 21000.*eta*eta*eta, 840.*xi*(-12.*eta + 2. + 15.*(eta*eta)));
3654  case 10:
3655  return sign * RealGradient(-8400.*eta + 700. + 25200.*(eta*eta) - 21000.*eta*eta*eta, -10080.*eta*xi + 6720.*eta + 1680.*xi + 12600.*xi*(eta*eta) - 1260. - 7560.*eta*eta);
3656  case 11:
3657  return sign * RealGradient(65205.*eta*xi/16. + 66465.*eta/32. - 146475.*eta*xi*xi/32. - 9345.*xi/16. - 29925.*xi*eta*eta/8. - 595./4. - 110565.*eta*eta/16. + 4725.*(xi*xi)/8. + 97125.*(eta*eta*eta)/16. + 5775.*(xi*xi*xi)/16., 2835.*eta*xi/2. - 29085.*eta/16. + 29925.*eta*(xi*xi)/16. + 16695.*xi/32. - 58275.*xi*eta*eta/16. + 9345./32. + 34965.*(eta*eta)/16. - 76545.*xi*xi/32. + 48825.*(xi*xi*xi)/32.);
3658  case 12:
3659  return sign * RealGradient(4725.*eta*xi - 7455.*eta/2. + 4725.*eta*(xi*xi)/2. - 105.*xi - 9450.*xi*eta*eta + 315. + 10395.*(eta*eta) - 1890.*xi*xi - 7875.*eta*eta*eta + 1575.*(xi*xi*xi), -7560.*eta*xi + 2835.*eta + 4725.*eta*(xi*xi) + 3255.*xi/2. + 4725.*xi*(eta*eta) - 1155./2. - 2835.*eta*eta - 945.*xi*xi/2. - 1575.*xi*xi*xi/2.);
3660  case 13:
3661  return sign * RealGradient(-252315.*eta*xi/16. + 125265.*eta/32. + 382725.*eta*(xi*xi)/32. + 39375.*xi/16. + 146475.*xi*(eta*eta)/8. - 1715./4. - 145845.*eta*eta/16. - 25515.*xi*xi/8. + 97125.*(eta*eta*eta)/16. + 14175.*(xi*xi*xi)/16., 20475.*eta*xi/2. - 40845.*eta/16. - 146475.*eta*xi*xi/16. - 136185.*xi/32. - 58275.*xi*eta*eta/16. + 21105./32. + 34965.*(eta*eta)/16. + 240975.*(xi*xi)/32. - 127575.*xi*xi*xi/32.);
3662  case 14:
3663  return sign * RealGradient(45360.*eta*xi - 12600.*eta - 37800.*eta*xi*xi - 8400.*xi - 50400.*xi*eta*eta + 1400. + 30240.*(eta*eta) + 15120.*(xi*xi) - 21000.*eta*eta*eta - 8400.*xi*xi*xi, -30240.*eta*xi + 8400.*eta + 25200.*eta*(xi*xi) + 12600.*xi + 12600.*xi*(eta*eta) - 2100. - 7560.*eta*eta - 22680.*xi*xi + 12600.*(xi*xi*xi));
3664  case 15:
3665  return RealGradient(-846720.*eta*xi + 352800.*eta + 453600.*eta*(xi*xi) + 188160.*xi + 806400.*xi*(eta*eta) - 49000. - 705600.*eta*eta - 211680.*xi*xi + 420000.*(eta*eta*eta) + 67200.*(xi*xi*xi), 10080.*xi*(-40.*eta*xi + 28.*eta + 21.*xi - 7. - 25.*eta*eta - 15.*xi*xi));
3666  case 16:
3667  return RealGradient(423360.*eta*xi - 70560.*eta - 453600.*eta*xi*xi - 94080.*xi - 403200.*xi*eta*eta + 9800. + 141120.*(eta*eta) + 211680.*(xi*xi) - 84000.*eta*eta*eta - 134400.*xi*xi*xi, 10080.*xi*(20.*eta*xi - 14.*eta - 21.*xi + 7. + 5.*(eta*eta) + 15.*(xi*xi)));
3668  case 17:
3669  return RealGradient(-13440.*xi + 560. + 60480.*(xi*xi) - 67200.*xi*xi*xi, 0.);
3670  case 18:
3671  return RealGradient(6720.*xi - 280. - 30240.*xi*xi + 33600.*(xi*xi*xi), 0.);
3672  case 19:
3673  return RealGradient(120960.*eta*xi - 201600.*eta - 13440.*xi - 201600.*xi*eta*eta + 18200. + 554400.*(eta*eta) - 420000.*eta*eta*eta, 10080.*xi*(10.*eta*xi - 22.*eta - 3.*xi + 4. + 25.*(eta*eta)));
3674  case 20:
3675  return RealGradient(-241920.*eta*xi + 161280.*eta + 26880.*xi + 403200.*xi*(eta*eta) - 14560. - 443520.*eta*eta + 336000.*(eta*eta*eta), 20160.*xi*(-10.*eta*xi + 13.*eta + 3.*xi - 3. - 10.*eta*eta));
3676  case 21:
3677  return RealGradient(232960.*eta*xi - 26880.*eta - 268800.*eta*xi*xi - 58240.*xi - 560000.*xi*eta*eta/3. + 14840./3. + 115360.*(eta*eta)/3. + 125440.*(xi*xi) - 140000.*eta*eta*eta/9. - 582400.*xi*xi*xi/9., 1120.*xi*(250.*eta*xi/3. - 70.*eta/3. - 73.*xi + 12. + 25.*(eta*eta)/3. + 80.*(xi*xi)));
3678  case 22:
3679  return RealGradient(-183680.*eta*xi + 20160.*eta + 235200.*eta*(xi*xi) + 44800.*xi + 448000.*xi*(eta*eta)/3. - 10640./3. - 89600.*eta*eta/3. - 109760.*xi*xi + 112000.*(eta*eta*eta)/9. + 627200.*(xi*xi*xi)/9., 2240.*xi*(-100.*eta*xi/3. + 31.*eta/3. + 34.*xi - 6. - 10.*eta*eta/3. - 35.*xi*xi));
3680  case 23:
3681  return RealGradient(371840.*eta*xi - 91840.*eta - 235200.*eta*xi*xi - 62720.*xi - 1254400.*xi*eta*eta/3. + 32480./3. + 600320.*(eta*eta)/3. + 76160.*(xi*xi) - 1120000.*eta*eta*eta/9. - 224000.*xi*xi*xi/9., 2240.*xi*(280.*eta*xi/3. - 136.*eta/3. - 49.*xi + 13. + 100.*(eta*eta)/3. + 35.*(xi*xi)));
3682  case 24:
3683  return RealGradient(-340480.*eta*xi + 71680.*eta + 268800.*eta*(xi*xi) + 56000.*xi + 1164800.*xi*(eta*eta)/3. - 24920./3. - 474880.*eta*eta/3. - 81760.*xi*xi + 896000.*(eta*eta*eta)/9. + 280000.*(xi*xi*xi)/9., 8960.*xi*(-65.*eta*xi/3. + 35.*eta/3. + 14.*xi - 4. - 20.*eta*eta/3. - 10.*xi*xi));
3684  case 25:
3685  return RealGradient(103040.*eta*xi - 56000.*eta - 33600.*eta*xi*xi - 31360.*xi/3. - 380800.*xi*eta*eta/3. + 51800./9. + 375200.*(eta*eta)/3. - 2240.*xi*xi - 700000.*eta*eta*eta/9. + 44800.*(xi*xi*xi)/9., 1120.*xi*(170.*eta*xi/3. - 134.*eta/3. - 23.*xi + 10. + 125.*(eta*eta)/3. + 10.*(xi*xi)));
3686  case 26:
3687  return RealGradient(-165760.*eta*xi + 24640.*eta + 168000.*eta*(xi*xi) + 89600.*xi/3. + 492800.*xi*(eta*eta)/3. - 29680./9. - 138880.*eta*eta/3. - 51520.*xi*xi + 224000.*(eta*eta*eta)/9. + 179200.*(xi*xi*xi)/9., 2240.*xi*(-110.*eta*xi/3. + 71.*eta/3. + 36.*xi - 12. - 20.*eta*eta/3. - 25.*xi*xi));
3688  case 27:
3689  return RealGradient(-22400.*eta*xi + 39200.*eta - 16800.*eta*xi*xi - 8960.*xi/3. + 179200.*xi*(eta*eta)/3. - 26600./9. - 324800.*eta*eta/3. + 12320.*(xi*xi) + 700000.*(eta*eta*eta)/9. - 44800.*xi*xi*xi/9., 1120.*xi*(-80.*eta*xi/3. + 116.*eta/3. + 5.*xi - 7. - 125.*eta*eta/3. + 5.*(xi*xi)));
3690  case 28:
3691  return RealGradient(105280.*eta*xi - 32480.*eta - 16800.*eta*xi*xi - 22400.*xi/3. - 492800.*xi*eta*eta/3. + 27160./9. + 239680.*(eta*eta)/3. - 19040.*xi*xi - 476000.*eta*eta*eta/9. + 224000.*(xi*xi*xi)/9., 1120.*xi*(220.*eta*xi/3. - 178.*eta/3. - 27.*xi + 17. + 85.*(eta*eta)/3. + 5.*(xi*xi)));
3692  case 29:
3693  return RealGradient(165760.*eta*xi + 64960.*eta - 168000.*eta*xi*xi - 138880.*xi/3. - 358400.*xi*eta*eta/3. - 48160./9. - 519680.*eta*eta/3. + 80640.*(xi*xi) + 1120000.*(eta*eta*eta)/9. - 246400.*xi*xi*xi/9., 2240.*xi*(80.*eta*xi/3. + 64.*eta/3. - 23.*xi - 1. - 100.*eta*eta/3. + 25.*(xi*xi)));
3694  case 30:
3695  return RealGradient(4480.*eta*xi - 11200.*eta + 33600.*eta*(xi*xi) + 15680.*xi/3. - 89600.*xi*eta*eta/3. + 6440./9. + 98560.*(eta*eta)/3. - 25760.*xi*xi - 224000.*eta*eta*eta/9. + 190400.*(xi*xi*xi)/9., 2240.*xi*(20.*eta*xi/3. - 44.*eta/3. - xi + 5. + 20.*(eta*eta)/3. - 5.*xi*xi));
3696  case 31:
3697  return RealGradient(116480.*eta*xi - 3360.*eta + 16800.*eta*(xi*xi) - 35840.*xi/3. - 448000.*xi*eta*eta/3. + 8680./9. - 24640.*eta*eta/3. - 30240.*xi*xi + 140000.*(eta*eta*eta)/9. + 246400.*(xi*xi*xi)/9., 1120.*xi*(200.*eta*xi/3. - 20.*eta/3. - 17.*xi + 3. - 25.*eta*eta/3. - 5.*xi*xi));
3698  case 32:
3699  return RealGradient(-24640.*eta*xi + 1120.*eta + 16800.*eta*(xi*xi) + 4480.*xi/3. + 89600.*xi*(eta*eta)/3. - 1400./9. + 2240.*(eta*eta)/3. + 5600.*(xi*xi) - 28000.*eta*eta*eta/9. - 89600.*xi*xi*xi/9., 1120.*xi*(-40.*eta*xi/3. - 2.*eta/3. + 11.*xi - 1. + 5.*(eta*eta)/3. - 5.*xi*xi));
3700  case 33:
3701  return RealGradient(-67200.*eta*xi + 3360.*eta + 50400.*eta*(xi*xi) + 38080.*xi/3. + 67200.*xi*(eta*eta) - 5600./9. - 3360.*eta*eta - 19040.*xi*xi + 22400.*(xi*xi*xi)/3., 3360.*xi*(-10.*eta*xi + 2.*eta + 6.*xi - 1. - 5.*xi*xi));
3702  case 34:
3703  return RealGradient(47040.*eta*xi - 7840.*eta - 50400.*eta*xi*xi - 29120.*xi/3. - 44800.*xi*eta*eta + 9520./9. + 15680.*(eta*eta) + 20160.*(xi*xi) - 28000.*eta*eta*eta/3. - 11200.*xi*xi*xi, 1120.*xi*(20.*eta*xi - 8.*eta - 17.*xi + 3. + 5.*(eta*eta) + 15.*(xi*xi)));
3704  default:
3705  libmesh_error_msg("Invalid i = " << i);
3706  }
3707  } // j = 2
3708 
3709  default:
3710  libmesh_error_msg("Invalid j = " << j);
3711  }
3712  }
3713 
3714  default:
3715  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
3716  } // end switch (type)
3717  } // end case FIFTH
3718 
3719  // unsupported order
3720  default:
3721  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << totalorder);
3722 
3723  } // end switch (order)
3724 
3725 #else // LIBMESH_DIM > 1
3726  libmesh_assert(true || i || j);
3727  libmesh_ignore(elem, order, add_p_level);
3728  libmesh_not_implemented();
3729 #endif
3730 }
static unsigned int n_dofs(const ElemType t, const Order o)
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static constexpr Real TOLERANCE
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_second_deriv() [225/233]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2080 of file fe_hierarchic_shape_3D.C.

2086 {
2087  return FE<3,SIDE_HIERARCHIC>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
2088 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [226/233]

Real libMesh::FE< 2, CLOUGH >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2183 of file fe_clough_shape_2D.C.

2189 {
2190  libmesh_assert(elem);
2191 
2192  CloughCoefs coefs;
2193  clough_compute_coefs(elem, coefs);
2194 
2195  const ElemType type = elem->type();
2196 
2197  const Order totalorder =
2198  order + add_p_level*elem->p_level();
2199 
2200  switch (totalorder)
2201  {
2202  // 2nd-order restricted Clough-Tocher element
2203  case SECOND:
2204  {
2205  switch (type)
2206  {
2207  // C1 functions on the Clough-Tocher triangle.
2208  case TRI6:
2209  case TRI7:
2210  {
2211  libmesh_assert_less (i, 9);
2212  // FIXME: it would be nice to calculate (and cache)
2213  // clough_raw_shape(j,p) only once per triangle, not 1-7
2214  // times
2215  switch (i)
2216  {
2217  // Note: these DoF numbers are "scrambled" because my
2218  // initial numbering conventions didn't match libMesh
2219  case 0:
2220  return clough_raw_shape_second_deriv(0, j, p)
2221  + coefs.d1d2n * clough_raw_shape_second_deriv(10, j, p)
2222  + coefs.d1d3n * clough_raw_shape_second_deriv(11, j, p);
2223  case 3:
2224  return clough_raw_shape_second_deriv(1, j, p)
2225  + coefs.d2d3n * clough_raw_shape_second_deriv(11, j, p)
2226  + coefs.d2d1n * clough_raw_shape_second_deriv(9, j, p);
2227  case 6:
2228  return clough_raw_shape_second_deriv(2, j, p)
2229  + coefs.d3d1n * clough_raw_shape_second_deriv(9, j, p)
2230  + coefs.d3d2n * clough_raw_shape_second_deriv(10, j, p);
2231  case 1:
2232  return coefs.d1xd1x * clough_raw_shape_second_deriv(3, j, p)
2233  + coefs.d1xd1y * clough_raw_shape_second_deriv(4, j, p)
2234  + coefs.d1xd2n * clough_raw_shape_second_deriv(10, j, p)
2235  + coefs.d1xd3n * clough_raw_shape_second_deriv(11, j, p)
2236  + 0.5 * coefs.N01x * coefs.d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2237  + 0.5 * coefs.N02x * coefs.d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2238  case 2:
2239  return coefs.d1yd1y * clough_raw_shape_second_deriv(4, j, p)
2240  + coefs.d1yd1x * clough_raw_shape_second_deriv(3, j, p)
2241  + coefs.d1yd2n * clough_raw_shape_second_deriv(10, j, p)
2242  + coefs.d1yd3n * clough_raw_shape_second_deriv(11, j, p)
2243  + 0.5 * coefs.N01y * coefs.d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2244  + 0.5 * coefs.N02y * coefs.d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2245  case 4:
2246  return coefs.d2xd2x * clough_raw_shape_second_deriv(5, j, p)
2247  + coefs.d2xd2y * clough_raw_shape_second_deriv(6, j, p)
2248  + coefs.d2xd3n * clough_raw_shape_second_deriv(11, j, p)
2249  + coefs.d2xd1n * clough_raw_shape_second_deriv(9, j, p)
2250  + 0.5 * coefs.N10x * coefs.d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2251  + 0.5 * coefs.N12x * coefs.d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2252  case 5:
2253  return coefs.d2yd2y * clough_raw_shape_second_deriv(6, j, p)
2254  + coefs.d2yd2x * clough_raw_shape_second_deriv(5, j, p)
2255  + coefs.d2yd3n * clough_raw_shape_second_deriv(11, j, p)
2256  + coefs.d2yd1n * clough_raw_shape_second_deriv(9, j, p)
2257  + 0.5 * coefs.N10y * coefs.d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2258  + 0.5 * coefs.N12y * coefs.d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2259  case 7:
2260  return coefs.d3xd3x * clough_raw_shape_second_deriv(7, j, p)
2261  + coefs.d3xd3y * clough_raw_shape_second_deriv(8, j, p)
2262  + coefs.d3xd1n * clough_raw_shape_second_deriv(9, j, p)
2263  + coefs.d3xd2n * clough_raw_shape_second_deriv(10, j, p)
2264  + 0.5 * coefs.N20x * coefs.d2nd2n * clough_raw_shape_second_deriv(10, j, p)
2265  + 0.5 * coefs.N21x * coefs.d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2266  case 8:
2267  return coefs.d3yd3y * clough_raw_shape_second_deriv(8, j, p)
2268  + coefs.d3yd3x * clough_raw_shape_second_deriv(7, j, p)
2269  + coefs.d3yd1n * clough_raw_shape_second_deriv(9, j, p)
2270  + coefs.d3yd2n * clough_raw_shape_second_deriv(10, j, p)
2271  + 0.5 * coefs.N20y * coefs.d2nd2n * clough_raw_shape_second_deriv(10, j, p)
2272  + 0.5 * coefs.N21y * coefs.d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2273  default:
2274  libmesh_error_msg("Invalid shape function index i = " << i);
2275  }
2276  }
2277  default:
2278  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
2279  }
2280  }
2281  // 3rd-order Clough-Tocher element
2282  case THIRD:
2283  {
2284  switch (type)
2285  {
2286  // C1 functions on the Clough-Tocher triangle.
2287  case TRI6:
2288  case TRI7:
2289  {
2290  libmesh_assert_less (i, 12);
2291 
2292  // FIXME: it would be nice to calculate (and cache)
2293  // clough_raw_shape(j,p) only once per triangle, not 1-7
2294  // times
2295  switch (i)
2296  {
2297  // Note: these DoF numbers are "scrambled" because my
2298  // initial numbering conventions didn't match libMesh
2299  case 0:
2300  return clough_raw_shape_second_deriv(0, j, p)
2301  + coefs.d1d2n * clough_raw_shape_second_deriv(10, j, p)
2302  + coefs.d1d3n * clough_raw_shape_second_deriv(11, j, p);
2303  case 3:
2304  return clough_raw_shape_second_deriv(1, j, p)
2305  + coefs.d2d3n * clough_raw_shape_second_deriv(11, j, p)
2306  + coefs.d2d1n * clough_raw_shape_second_deriv(9, j, p);
2307  case 6:
2308  return clough_raw_shape_second_deriv(2, j, p)
2309  + coefs.d3d1n * clough_raw_shape_second_deriv(9, j, p)
2310  + coefs.d3d2n * clough_raw_shape_second_deriv(10, j, p);
2311  case 1:
2312  return coefs.d1xd1x * clough_raw_shape_second_deriv(3, j, p)
2313  + coefs.d1xd1y * clough_raw_shape_second_deriv(4, j, p)
2314  + coefs.d1xd2n * clough_raw_shape_second_deriv(10, j, p)
2315  + coefs.d1xd3n * clough_raw_shape_second_deriv(11, j, p);
2316  case 2:
2317  return coefs.d1yd1y * clough_raw_shape_second_deriv(4, j, p)
2318  + coefs.d1yd1x * clough_raw_shape_second_deriv(3, j, p)
2319  + coefs.d1yd2n * clough_raw_shape_second_deriv(10, j, p)
2320  + coefs.d1yd3n * clough_raw_shape_second_deriv(11, j, p);
2321  case 4:
2322  return coefs.d2xd2x * clough_raw_shape_second_deriv(5, j, p)
2323  + coefs.d2xd2y * clough_raw_shape_second_deriv(6, j, p)
2324  + coefs.d2xd3n * clough_raw_shape_second_deriv(11, j, p)
2325  + coefs.d2xd1n * clough_raw_shape_second_deriv(9, j, p);
2326  case 5:
2327  return coefs.d2yd2y * clough_raw_shape_second_deriv(6, j, p)
2328  + coefs.d2yd2x * clough_raw_shape_second_deriv(5, j, p)
2329  + coefs.d2yd3n * clough_raw_shape_second_deriv(11, j, p)
2330  + coefs.d2yd1n * clough_raw_shape_second_deriv(9, j, p);
2331  case 7:
2332  return coefs.d3xd3x * clough_raw_shape_second_deriv(7, j, p)
2333  + coefs.d3xd3y * clough_raw_shape_second_deriv(8, j, p)
2334  + coefs.d3xd1n * clough_raw_shape_second_deriv(9, j, p)
2335  + coefs.d3xd2n * clough_raw_shape_second_deriv(10, j, p);
2336  case 8:
2337  return coefs.d3yd3y * clough_raw_shape_second_deriv(8, j, p)
2338  + coefs.d3yd3x * clough_raw_shape_second_deriv(7, j, p)
2339  + coefs.d3yd1n * clough_raw_shape_second_deriv(9, j, p)
2340  + coefs.d3yd2n * clough_raw_shape_second_deriv(10, j, p);
2341  case 10:
2342  return coefs.d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2343  case 11:
2344  return coefs.d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2345  case 9:
2346  return coefs.d3nd3n * clough_raw_shape_second_deriv(11, j, p);
2347 
2348  default:
2349  libmesh_error_msg("Invalid shape function index i = " << i);
2350  }
2351  }
2352  default:
2353  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
2354  }
2355  }
2356  // by default throw an error
2357  default:
2358  libmesh_error_msg("ERROR: Unsupported polynomial order = " << order);
2359  }
2360 }
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:3108
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_second_deriv() [227/233]

Real libMesh::FE< 3, BERNSTEIN >::shape_second_deriv ( const Elem elem,
const Order  order,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2342 of file fe_bernstein_shape_3D.C.

2348 {
2349  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
2351 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
OutputShape fe_fdm_second_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*deriv_func)(const Elem *, const Order, const unsigned int, const unsigned int, const Point &, const bool))
Definition: fe.C:969

◆ shape_second_deriv() [228/233]

Real libMesh::FE< 3, BERNSTEIN >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 2355 of file fe_bernstein_shape_3D.C.

2360 {
2361  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge and face orientation is needed.");
2362  return 0.;
2363 }

◆ shape_second_deriv() [229/233]

Real libMesh::FE< 2, CLOUGH >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 2364 of file fe_clough_shape_2D.C.

2369 {
2370  libmesh_error_msg("Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
2371  return 0.;
2372 }

◆ shape_second_deriv() [230/233]

Real libMesh::FE< 3, BERNSTEIN >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2367 of file fe_bernstein_shape_3D.C.

2373 {
2374  return FE<3,BERNSTEIN>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
2375 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [231/233]

Real libMesh::FE< 2, CLOUGH >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 2375 of file fe_clough_shape_2D.C.

2381 {
2382  return FE<2,CLOUGH>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
2383 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:215
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [232/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape_second_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 3735 of file fe_nedelec_one_shape_2D.C.

3740 {
3741  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
3742  return RealGradient();
3743 }
RealVectorValue RealGradient

◆ shape_second_deriv() [233/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape_second_deriv ( const FEType  fet,
const Elem elem,
const unsigned int  i,
const unsigned int  j,
const Point p,
const bool  add_p_level 
)
inherited

Definition at line 3747 of file fe_nedelec_one_shape_2D.C.

3753 {
3754  return FE<2,NEDELEC_ONE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
3755 }

◆ shapes() [1/5]

void libMesh::FE< 3, RATIONAL_BERNSTEIN >::shapes ( const Elem elem,
const Order  o,
const unsigned int  i,
const std::vector< Point > &  p,
std::vector< OutputShape > &  vi,
const bool  add_p_level 
)
inherited

Definition at line 174 of file fe_rational_shape_3D.C.

180 {
181  libmesh_assert_equal_to(p.size(), vi.size());
182  for (auto j : index_range(vi))
183  vi[j] = FE<3,RATIONAL_BERNSTEIN>::shape (elem, o, i, p[j], add_p_level);
184 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ shapes() [2/5]

void libMesh::FE< 2, RATIONAL_BERNSTEIN >::shapes ( const Elem elem,
const Order  o,
const unsigned int  i,
const std::vector< Point > &  p,
std::vector< OutputShape > &  vi,
const bool  add_p_level 
)
inherited

Definition at line 178 of file fe_rational_shape_2D.C.

184 {
185  libmesh_assert_equal_to(p.size(), vi.size());
186  for (auto j : index_range(vi))
187  vi[j] = FE<2,RATIONAL_BERNSTEIN>::shape (elem, o, i, p[j], add_p_level);
188 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ shapes() [3/5]

void libMesh::FE< 1, RATIONAL_BERNSTEIN >::shapes ( const Elem elem,
const Order  o,
const unsigned int  i,
const std::vector< Point > &  p,
std::vector< OutputShape > &  vi,
const bool  add_p_level 
)
inherited

Definition at line 180 of file fe_rational_shape_1D.C.

186 {
187  libmesh_assert_equal_to(p.size(), vi.size());
188  for (auto j : index_range(vi))
189  vi[j] = FE<1,RATIONAL_BERNSTEIN>::shape (elem, o, i, p[j], add_p_level);
190 }
A specific instantiation of the FEBase class.
Definition: fe.h:127
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ shapes() [4/5]

static void libMesh::FE< Dim, T >::shapes ( const Elem elem,
const Order  o,
const unsigned int  i,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level = true 
)
staticinherited

Fills v with the values of the \( i^{th} \) shape function, evaluated at all points p.

You must specify element order directly. v should already be the appropriate size.

On a p-refined element, o should be the base order of the element if add_p_level is left true, or can be the base order of the element if add_p_level is set to false.

◆ shapes() [5/5]

void libMesh::FE< 3, LAGRANGE >::shapes ( const Elem elem,
const Order  o,
const unsigned int  i,
const std::vector< Point > &  p,
std::vector< OutputShape > &  v,
const bool  add_p_level 
)
inherited

Definition at line 212 of file fe_lagrange_shape_3D.C.

218 {
220  (elem,o,i,p,v,add_p_level);
221 }
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shapes_need_reinit() [1/86]

bool libMesh::FE< 0, SCALAR >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 125 of file fe_scalar.C.

125 { return false; }

◆ shapes_need_reinit() [2/86]

bool libMesh::FE< 1, SCALAR >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 126 of file fe_scalar.C.

126 { return false; }

◆ shapes_need_reinit() [3/86]

bool libMesh::FE< 2, SCALAR >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 127 of file fe_scalar.C.

127 { return false; }

◆ shapes_need_reinit() [4/86]

bool libMesh::FE< 3, SCALAR >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 128 of file fe_scalar.C.

128 { return false; }

◆ shapes_need_reinit() [5/86]

bool libMesh::FE< 0, RATIONAL_BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 191 of file fe_rational.C.

191 { return true; }

◆ shapes_need_reinit() [6/86]

bool libMesh::FE< 1, RATIONAL_BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 192 of file fe_rational.C.

192 { return true; }

◆ shapes_need_reinit() [7/86]

bool libMesh::FE< 2, RATIONAL_BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 193 of file fe_rational.C.

193 { return true; }

◆ shapes_need_reinit() [8/86]

bool libMesh::FE< 3, RATIONAL_BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 194 of file fe_rational.C.

194 { return true; }

◆ shapes_need_reinit() [9/86]

bool libMesh::FE< 0, L2_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 217 of file fe_l2_hierarchic.C.

217 { return true; }

◆ shapes_need_reinit() [10/86]

bool libMesh::FE< 1, L2_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 218 of file fe_l2_hierarchic.C.

218 { return true; }

◆ shapes_need_reinit() [11/86]

bool libMesh::FE< 2, L2_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 219 of file fe_l2_hierarchic.C.

219 { return true; }

◆ shapes_need_reinit() [12/86]

bool libMesh::FE< 3, L2_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 220 of file fe_l2_hierarchic.C.

220 { return true; }

◆ shapes_need_reinit() [13/86]

bool libMesh::FE< 0, L2_LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 268 of file fe_l2_lagrange.C.

268 { return false; }

◆ shapes_need_reinit() [14/86]

bool libMesh::FE< 1, L2_LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 269 of file fe_l2_lagrange.C.

269 { return false; }

◆ shapes_need_reinit() [15/86]

bool libMesh::FE< 2, L2_LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 270 of file fe_l2_lagrange.C.

270 { return false; }

◆ shapes_need_reinit() [16/86]

bool libMesh::FE< 3, L2_LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 271 of file fe_l2_lagrange.C.

271 { return false; }

◆ shapes_need_reinit() [17/86]

bool libMesh::FE< 0, CLOUGH >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 299 of file fe_clough.C.

299 { return true; }

◆ shapes_need_reinit() [18/86]

bool libMesh::FE< 1, CLOUGH >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 300 of file fe_clough.C.

300 { return true; }

◆ shapes_need_reinit() [19/86]

bool libMesh::FE< 2, CLOUGH >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 301 of file fe_clough.C.

301 { return true; }

◆ shapes_need_reinit() [20/86]

bool libMesh::FE< 3, CLOUGH >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 302 of file fe_clough.C.

302 { return true; }

◆ shapes_need_reinit() [21/86]

bool libMesh::FE< 0, SIDE_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 328 of file fe_side_hierarchic.C.

328 { return true; }

◆ shapes_need_reinit() [22/86]

bool libMesh::FE< 1, SIDE_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 329 of file fe_side_hierarchic.C.

329 { return true; }

◆ shapes_need_reinit() [23/86]

bool libMesh::FE< 2, SIDE_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 330 of file fe_side_hierarchic.C.

330 { return true; }

◆ shapes_need_reinit() [24/86]

bool libMesh::FE< 3, SIDE_HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 331 of file fe_side_hierarchic.C.

331 { return true; }

◆ shapes_need_reinit() [25/86]

bool libMesh::FE< 0, HERMITE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 342 of file fe_hermite.C.

342 { return true; }

◆ shapes_need_reinit() [26/86]

bool libMesh::FE< 1, HERMITE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 343 of file fe_hermite.C.

343 { return true; }

◆ shapes_need_reinit() [27/86]

bool libMesh::FE< 2, HERMITE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 344 of file fe_hermite.C.

344 { return true; }

◆ shapes_need_reinit() [28/86]

bool libMesh::FE< 3, HERMITE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 345 of file fe_hermite.C.

345 { return true; }

◆ shapes_need_reinit() [29/86]

bool libMesh::FE< 0, NEDELEC_ONE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 420 of file fe_nedelec_one.C.

420 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [30/86]

bool libMesh::FE< 1, NEDELEC_ONE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 421 of file fe_nedelec_one.C.

421 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [31/86]

bool libMesh::FE< 2, NEDELEC_ONE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 422 of file fe_nedelec_one.C.

422 { return true; }

◆ shapes_need_reinit() [32/86]

bool libMesh::FE< 3, NEDELEC_ONE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 423 of file fe_nedelec_one.C.

423 { return true; }

◆ shapes_need_reinit() [33/86]

bool libMesh::FE< 0, XYZ >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 429 of file fe_xyz.C.

429 { return true; }

◆ shapes_need_reinit() [34/86]

bool libMesh::FE< 1, XYZ >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 430 of file fe_xyz.C.

430 { return true; }

◆ shapes_need_reinit() [35/86]

bool libMesh::FE< 2, XYZ >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 431 of file fe_xyz.C.

431 { return true; }

◆ shapes_need_reinit() [36/86]

bool libMesh::FE< 3, XYZ >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 432 of file fe_xyz.C.

432 { return true; }

◆ shapes_need_reinit() [37/86]

bool libMesh::FE< 0, MONOMIAL >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 444 of file fe_monomial.C.

444 { return false; }

◆ shapes_need_reinit() [38/86]

bool libMesh::FE< 1, MONOMIAL >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 445 of file fe_monomial.C.

445 { return false; }

◆ shapes_need_reinit() [39/86]

bool libMesh::FE< 2, MONOMIAL >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 446 of file fe_monomial.C.

446 { return false; }

◆ shapes_need_reinit() [40/86]

bool libMesh::FE< 3, MONOMIAL >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 447 of file fe_monomial.C.

447 { return false; }

◆ shapes_need_reinit() [41/86]

bool libMesh::FE< 0, BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 452 of file fe_bernstein.C.

452 { return true; }

◆ shapes_need_reinit() [42/86]

bool libMesh::FE< 1, BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 453 of file fe_bernstein.C.

453 { return true; }

◆ shapes_need_reinit() [43/86]

bool libMesh::FE< 2, BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 454 of file fe_bernstein.C.

454 { return true; }

◆ shapes_need_reinit() [44/86]

bool libMesh::FE< 3, BERNSTEIN >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 455 of file fe_bernstein.C.

455 { return true; }

◆ shapes_need_reinit() [45/86]

bool libMesh::FE< 0, RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 478 of file fe_raviart.C.

478 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [46/86]

bool libMesh::FE< 1, RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 479 of file fe_raviart.C.

479 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [47/86]

bool libMesh::FE< 2, RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 480 of file fe_raviart.C.

480 { return true; }

◆ shapes_need_reinit() [48/86]

bool libMesh::FE< 3, RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 481 of file fe_raviart.C.

481 { return true; }

◆ shapes_need_reinit() [49/86]

bool libMesh::FE< 0, L2_RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 484 of file fe_raviart.C.

484 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [50/86]

bool libMesh::FE< 1, L2_RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 485 of file fe_raviart.C.

485 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [51/86]

bool libMesh::FE< 2, L2_RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 486 of file fe_raviart.C.

486 { return true; }

◆ shapes_need_reinit() [52/86]

bool libMesh::FE< 3, L2_RAVIART_THOMAS >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 487 of file fe_raviart.C.

487 { return true; }

◆ shapes_need_reinit() [53/86]

bool libMesh::FE< 0, HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 505 of file fe_hierarchic.C.

505 { return true; }

◆ shapes_need_reinit() [54/86]

bool libMesh::FE< 1, HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 506 of file fe_hierarchic.C.

506 { return true; }

◆ shapes_need_reinit() [55/86]

bool libMesh::FE< 2, HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 507 of file fe_hierarchic.C.

507 { return true; }

◆ shapes_need_reinit() [56/86]

bool libMesh::FE< 3, HIERARCHIC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 508 of file fe_hierarchic.C.

508 { return true; }

◆ shapes_need_reinit() [57/86]

virtual bool libMesh::FE< Dim, T >::shapes_need_reinit ( ) const
overridevirtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

◆ shapes_need_reinit() [58/86]

bool libMesh::FE< 0, MONOMIAL_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 749 of file fe_monomial_vec.C.

750 {
751  return false;
752 }

◆ shapes_need_reinit() [59/86]

bool libMesh::FE< 1, MONOMIAL_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 755 of file fe_monomial_vec.C.

756 {
757  return false;
758 }

◆ shapes_need_reinit() [60/86]

bool libMesh::FE< 2, MONOMIAL_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 761 of file fe_monomial_vec.C.

762 {
763  return false;
764 }

◆ shapes_need_reinit() [61/86]

bool libMesh::FE< 3, MONOMIAL_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 767 of file fe_monomial_vec.C.

768 {
769  return false;
770 }

◆ shapes_need_reinit() [62/86]

bool libMesh::FE< 0, HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 795 of file fe_hierarchic_vec.C.

795 { return true; }

◆ shapes_need_reinit() [63/86]

bool libMesh::FE< 1, HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 796 of file fe_hierarchic_vec.C.

796 { return true; }

◆ shapes_need_reinit() [64/86]

bool libMesh::FE< 2, HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 797 of file fe_hierarchic_vec.C.

797 { return true; }

◆ shapes_need_reinit() [65/86]

bool libMesh::FE< 3, HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 798 of file fe_hierarchic_vec.C.

798 { return true; }

◆ shapes_need_reinit() [66/86]

bool libMesh::FE< 0, L2_HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 799 of file fe_hierarchic_vec.C.

799 { return true; }

◆ shapes_need_reinit() [67/86]

bool libMesh::FE< 1, L2_HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 800 of file fe_hierarchic_vec.C.

800 { return true; }

◆ shapes_need_reinit() [68/86]

bool libMesh::FE< 2, L2_HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 801 of file fe_hierarchic_vec.C.

801 { return true; }

◆ shapes_need_reinit() [69/86]

bool libMesh::FE< 3, L2_HIERARCHIC_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 802 of file fe_hierarchic_vec.C.

802 { return true; }

◆ shapes_need_reinit() [70/86]

bool libMesh::FE< 2, SUBDIVISION >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 980 of file fe_subdivision_2D.C.

980 { return true; }

◆ shapes_need_reinit() [71/86]

bool libMesh::FE< 0, LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1126 of file fe_lagrange.C.

1126 { return false; }

◆ shapes_need_reinit() [72/86]

bool libMesh::FE< 1, LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1127 of file fe_lagrange.C.

1127 { return false; }

◆ shapes_need_reinit() [73/86]

bool libMesh::FE< 2, LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1128 of file fe_lagrange.C.

1128 { return false; }

◆ shapes_need_reinit() [74/86]

bool libMesh::FE< 3, LAGRANGE >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1129 of file fe_lagrange.C.

1129 { return false; }

◆ shapes_need_reinit() [75/86]

bool libMesh::FE< 0, SZABAB >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1355 of file fe_szabab.C.

1355 { return true; }

◆ shapes_need_reinit() [76/86]

bool libMesh::FE< 1, SZABAB >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1356 of file fe_szabab.C.

1356 { return true; }

◆ shapes_need_reinit() [77/86]

bool libMesh::FE< 2, SZABAB >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1357 of file fe_szabab.C.

1357 { return true; }

◆ shapes_need_reinit() [78/86]

bool libMesh::FE< 3, SZABAB >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1358 of file fe_szabab.C.

1358 { return true; }

◆ shapes_need_reinit() [79/86]

bool libMesh::FE< 0, LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1364 of file fe_lagrange_vec.C.

1364 { return false; }

◆ shapes_need_reinit() [80/86]

bool libMesh::FE< 1, LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1365 of file fe_lagrange_vec.C.

1365 { return false; }

◆ shapes_need_reinit() [81/86]

bool libMesh::FE< 2, LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1366 of file fe_lagrange_vec.C.

1366 { return false; }

◆ shapes_need_reinit() [82/86]

bool libMesh::FE< 3, LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1367 of file fe_lagrange_vec.C.

1367 { return false; }

◆ shapes_need_reinit() [83/86]

bool libMesh::FE< 0, L2_LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1368 of file fe_lagrange_vec.C.

1368 { return false; }

◆ shapes_need_reinit() [84/86]

bool libMesh::FE< 1, L2_LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1369 of file fe_lagrange_vec.C.

1369 { return false; }

◆ shapes_need_reinit() [85/86]

bool libMesh::FE< 2, L2_LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1370 of file fe_lagrange_vec.C.

1370 { return false; }

◆ shapes_need_reinit() [86/86]

bool libMesh::FE< 3, L2_LAGRANGE_VEC >::shapes_need_reinit ( ) const
virtualinherited
Returns
true when the shape functions (for this FEFamily) depend on the particular element, and therefore needs to be re-initialized for each new element. false otherwise.

Implements libMesh::FEAbstract.

Definition at line 1371 of file fe_lagrange_vec.C.

1371 { return false; }

◆ side_map() [1/2]

void libMesh::FE< Dim, T >::side_map ( const Elem elem,
const Elem side,
const unsigned int  s,
const std::vector< Point > &  reference_side_points,
std::vector< Point > &  reference_points 
)
overridevirtualinherited

Computes the reference space quadrature points on the side of an element based on the side quadrature points.

Implements libMesh::FEAbstract.

Definition at line 347 of file fe_boundary.C.

352 {
353  // We're calculating mappings - we need at least first order info
354  this->calculate_phi = true;
355  this->determine_calculations();
356 
357  unsigned int side_p_level = elem->p_level();
358  if (elem->neighbor_ptr(s) != nullptr)
359  side_p_level = std::max(side_p_level, elem->neighbor_ptr(s)->p_level());
360 
361  if (side->type() != last_side ||
362  (elem->runtime_topology() &&
363  this->_elem != elem) ||
364  side_p_level != this->_elem_p_level ||
365  !this->shapes_on_quadrature)
366  {
367  // Set the element type
368  this->_elem = elem;
369  this->_elem_type = elem->type();
370  this->_elem_p_level = side_p_level;
371  this->_p_level = this->_add_p_level_in_reinit * side_p_level;
372 
373  // Set the last_side
374  last_side = side->type();
375 
376  // Initialize the face shape functions
377  this->_fe_map->template init_face_shape_functions<Dim>(reference_side_points, side);
378  }
379  else
380  this->_elem = elem;
381 
382  const unsigned int n_points =
383  cast_int<unsigned int>(reference_side_points.size());
384  reference_points.resize(n_points);
385  for (unsigned int i = 0; i < n_points; i++)
386  reference_points[i].zero();
387 
388  std::vector<Point> refspace_nodes;
389  this->get_refspace_nodes(elem->type(), refspace_nodes);
390 
391  const std::vector<std::vector<Real>> & psi_map = this->_fe_map->get_psi();
392 
393  // sum over the nodes
394  for (auto i : index_range(psi_map))
395  {
396  const Point & side_node = refspace_nodes[elem->local_side_node(s,i)];
397  for (unsigned int p=0; p<n_points; p++)
398  reference_points[p].add_scaled (side_node, psi_map[i][p]);
399  }
400 }
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:691
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:757
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:768
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:751
ElemType _elem_type
The element type the current data structures were set up for.
Definition: fe_abstract.h:735
const Number zero
.
Definition: libmesh.h:304
static void get_refspace_nodes(const ElemType t, std::vector< Point > &nodes)
Definition: fe_abstract.C:400
virtual_for_inffe void determine_calculations()
Determine which values are to be calculated, for both the FE itself and for the FEMap.
Definition: fe_base.C:913
bool _add_p_level_in_reinit
Whether to add p-refinement levels in init/reinit methods.
Definition: fe_abstract.h:787
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:654
ElemType last_side
The last side and last edge we did a reinit on.
Definition: fe.h:814
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
const Elem * _elem
The element the current data structures were set up for.
Definition: fe_abstract.h:740

◆ side_map() [2/2]

void libMesh::FE< 2, SUBDIVISION >::side_map ( const Elem ,
const Elem ,
const unsigned int  ,
const std::vector< Point > &  ,
std::vector< Point > &   
)
virtualinherited

Computes the reference space quadrature points on the side of an element based on the side quadrature points.

Implements libMesh::FEAbstract.

Definition at line 917 of file fe_subdivision_2D.C.

922 {
923  libmesh_not_implemented();
924 }

◆ side_nodal_soln() [1/4]

void libMesh::FE< 1, SIDE_HIERARCHIC >::side_nodal_soln ( const Elem ,
const Order  ,
const unsigned int  side,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln_on_side,
const bool  ,
const unsigned   
)
inherited

Definition at line 219 of file fe_side_hierarchic.C.

225 {
226  libmesh_assert_less(side, 2);
227  nodal_soln_on_side.resize(1);
228  nodal_soln_on_side[0] = elem_soln[side];
229 }

◆ side_nodal_soln() [2/4]

void libMesh::FE< 2, SIDE_HIERARCHIC >::side_nodal_soln ( const Elem elem,
const Order  o,
const unsigned int  side,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln_on_side,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 234 of file fe_side_hierarchic.C.

240 {
241  libmesh_assert_equal_to(elem->dim(), 2);
242  side_hierarchic_side_nodal_soln(elem, o, side, elem_soln,
243  nodal_soln_on_side,
244  add_p_level);
245 }

◆ side_nodal_soln() [3/4]

void libMesh::FE< 3, SIDE_HIERARCHIC >::side_nodal_soln ( const Elem elem,
const Order  o,
const unsigned int  side,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln_on_side,
const bool  add_p_level,
const unsigned   
)
inherited

Definition at line 250 of file fe_side_hierarchic.C.

256 {
257  libmesh_assert_equal_to(elem->dim(), 3);
258  side_hierarchic_side_nodal_soln(elem, o, side, elem_soln,
259  nodal_soln_on_side,
260  add_p_level);
261 }

◆ side_nodal_soln() [4/4]

static void libMesh::FE< Dim, T >::side_nodal_soln ( const Elem elem,
const Order  o,
const unsigned int  side,
const std::vector< Number > &  elem_soln,
std::vector< Number > &  nodal_soln_on_side,
bool  add_p_level = true,
const unsigned  vdim = 1 
)
staticinherited

Build the nodal soln on one side from the (full) element soln.

This is the solution that will be plotted on side-elements.

On a p-refined element, o should be the base order of the element.

Member Data Documentation

◆ _add_p_level_in_reinit

bool libMesh::FEAbstract::_add_p_level_in_reinit
protectedinherited

Whether to add p-refinement levels in init/reinit methods.

Definition at line 787 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::add_p_level_in_reinit().

◆ _counts

ReferenceCounter::Counts libMesh::ReferenceCounter::_counts
staticprotectedinherited

Actually holds the data.

Definition at line 124 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::get_info().

◆ _elem

const Elem* libMesh::FEAbstract::_elem
protectedinherited

The element the current data structures were set up for.

Definition at line 740 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::get_elem().

◆ _elem_p_level

unsigned int libMesh::FEAbstract::_elem_p_level
protectedinherited

The element p-refinement level the current data structures are set up for.

Note that this is different from _p_level which is the p-refinement level this finite elment object is operating at, e.g. how many dofs per elem, etc. On the other hand, this data member can indicate things like the order of the quadrature rule. We will use this primarily to determine whether cached data is still valid

Definition at line 751 of file fe_abstract.h.

◆ _elem_type

ElemType libMesh::FEAbstract::_elem_type
protectedinherited

The element type the current data structures were set up for.

Definition at line 735 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::get_type().

◆ _enable_print_counter

bool libMesh::ReferenceCounter::_enable_print_counter = true
staticprotectedinherited

Flag to control whether reference count information is printed when print_info is called.

Definition at line 143 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().

◆ _fe_map

std::unique_ptr<FEMap> libMesh::FEAbstract::_fe_map
protectedinherited

◆ _fe_trans

std::unique_ptr<FETransformationBase<FEOutputType< T >::type > > libMesh::FEGenericBase< FEOutputType< T >::type >::_fe_trans
protectedinherited

Object that handles computing shape function values, gradients, etc in the physical domain.

Definition at line 609 of file fe_base.h.

◆ _mutex

Threads::spin_mutex libMesh::ReferenceCounter::_mutex
staticprotectedinherited

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 137 of file reference_counter.h.

◆ _n_objects

Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects
staticprotectedinherited

The number of objects.

Print the reference count information when the number returns to 0.

Definition at line 132 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().

◆ _n_total_qp

unsigned int libMesh::FEAbstract::_n_total_qp
protectedinherited

The total number of quadrature points for the current configuration.

Definition at line 774 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::n_quadrature_points(), and libMesh::InfFE< Dim, T_radial, T_map >::n_quadrature_points().

◆ _p_level

unsigned int libMesh::FEAbstract::_p_level
protectedinherited

The p refinement level the current data structures are set up for.

Definition at line 757 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::get_order(), and libMesh::FEAbstract::get_p_level().

◆ cached_edges

std::vector<bool> libMesh::FE< Dim, T >::cached_edges
protectedinherited

Definition at line 797 of file fe.h.

◆ cached_faces

std::vector<bool> libMesh::FE< Dim, T >::cached_faces
protectedinherited

Definition at line 797 of file fe.h.

◆ cached_nodes

std::vector<Point> libMesh::FE< Dim, T >::cached_nodes
protectedinherited

Vectors holding the node locations, edge and face orientations of the last element we cached.

Definition at line 796 of file fe.h.

◆ calculate_curl_phi

bool libMesh::FEAbstract::calculate_curl_phi
mutableprotectedinherited

◆ calculate_d2phi [1/2]

bool libMesh::FEAbstract::calculate_d2phi
mutableprotectedinherited

◆ calculate_d2phi [2/2]

const bool libMesh::FEAbstract::calculate_d2phi =false
protectedinherited

Definition at line 705 of file fe_abstract.h.

◆ calculate_default_dual_coeff

bool libMesh::FEAbstract::calculate_default_dual_coeff
mutableprotectedinherited

Are we calculating the coefficient for the dual basis using the default qrule?

Definition at line 676 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::set_calculate_default_dual_coeff().

◆ calculate_div_phi

bool libMesh::FEAbstract::calculate_div_phi
mutableprotectedinherited

◆ calculate_dphi

bool libMesh::FEAbstract::calculate_dphi
mutableprotectedinherited

◆ calculate_dphiref

bool libMesh::FEAbstract::calculate_dphiref
mutableprotectedinherited

Should we calculate reference shape function gradients?

Definition at line 722 of file fe_abstract.h.

Referenced by libMesh::FEGenericBase< FEOutputType< T >::type >::get_curl_phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phideta2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidetadzeta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidx2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxdy(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxdz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxi2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxideta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxidzeta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidy2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidydz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidz2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidzeta2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_div_phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphideta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidx(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidxi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidy(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidzeta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_d2phi(), and libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_dphi().

◆ calculate_dual

bool libMesh::FEAbstract::calculate_dual
mutableprotectedinherited

◆ calculate_map

bool libMesh::FEAbstract::calculate_map
mutableprotectedinherited

Are we calculating mapping functions?

Definition at line 686 of file fe_abstract.h.

Referenced by libMesh::FEGenericBase< FEOutputType< T >::type >::calculating_nothing(), libMesh::FEAbstract::get_curvatures(), libMesh::InfFE< Dim, T_radial, T_map >::get_curvatures(), libMesh::FEAbstract::get_d2xyzdeta2(), libMesh::InfFE< Dim, T_radial, T_map >::get_d2xyzdeta2(), libMesh::FEAbstract::get_d2xyzdetadzeta(), libMesh::InfFE< Dim, T_radial, T_map >::get_d2xyzdetadzeta(), libMesh::FEAbstract::get_d2xyzdxi2(), libMesh::InfFE< Dim, T_radial, T_map >::get_d2xyzdxi2(), libMesh::FEAbstract::get_d2xyzdxideta(), libMesh::InfFE< Dim, T_radial, T_map >::get_d2xyzdxideta(), libMesh::FEAbstract::get_d2xyzdxidzeta(), libMesh::InfFE< Dim, T_radial, T_map >::get_d2xyzdxidzeta(), libMesh::FEAbstract::get_d2xyzdzeta2(), libMesh::InfFE< Dim, T_radial, T_map >::get_d2xyzdzeta2(), libMesh::FEAbstract::get_detadx(), libMesh::InfFE< Dim, T_radial, T_map >::get_detadx(), libMesh::FEAbstract::get_detady(), libMesh::InfFE< Dim, T_radial, T_map >::get_detady(), libMesh::FEAbstract::get_detadz(), libMesh::InfFE< Dim, T_radial, T_map >::get_detadz(), libMesh::FEAbstract::get_dxidx(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxidx(), libMesh::FEAbstract::get_dxidy(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxidy(), libMesh::FEAbstract::get_dxidz(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxidz(), libMesh::FEAbstract::get_dxyzdeta(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxyzdeta(), libMesh::FEAbstract::get_dxyzdxi(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxyzdxi(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxyzdzeta(), libMesh::FEAbstract::get_dzetadx(), libMesh::InfFE< Dim, T_radial, T_map >::get_dzetadx(), libMesh::FEAbstract::get_dzetady(), libMesh::InfFE< Dim, T_radial, T_map >::get_dzetady(), libMesh::FEAbstract::get_dzetadz(), libMesh::InfFE< Dim, T_radial, T_map >::get_dzetadz(), libMesh::FEAbstract::get_JxW(), libMesh::FEAbstract::get_normals(), libMesh::InfFE< Dim, T_radial, T_map >::get_normals(), libMesh::FEAbstract::get_tangents(), libMesh::InfFE< Dim, T_radial, T_map >::get_tangents(), and libMesh::FEAbstract::get_xyz().

◆ calculate_nothing

bool libMesh::FEAbstract::calculate_nothing
mutableprotectedinherited

Are we potentially deliberately calculating nothing?

Definition at line 681 of file fe_abstract.h.

Referenced by libMesh::FEGenericBase< FEOutputType< T >::type >::calculating_nothing(), and libMesh::FEAbstract::get_nothing().

◆ calculate_phi

bool libMesh::FEAbstract::calculate_phi
mutableprotectedinherited

◆ calculations_started

bool libMesh::FEAbstract::calculations_started
mutableprotectedinherited

Have calculations with this object already been started? Then all get_* functions should already have been called.

Definition at line 666 of file fe_abstract.h.

Referenced by libMesh::FEGenericBase< FEOutputType< T >::type >::get_curl_phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phideta2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidetadzeta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidx2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxdy(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxdz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxi2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxideta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidxidzeta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidy2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidydz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidz2(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_d2phidzeta2(), libMesh::InfFE< Dim, T_radial, T_map >::get_detadx(), libMesh::InfFE< Dim, T_radial, T_map >::get_detady(), libMesh::InfFE< Dim, T_radial, T_map >::get_detadz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_div_phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphi(), libMesh::InfFE< Dim, T_radial, T_map >::get_dphi_over_decay(), libMesh::InfFE< Dim, T_radial, T_map >::get_dphi_over_decayxR(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphideta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidx(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidxi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidy(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidz(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dphidzeta(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_d2phi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_dphi(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_dual_phi(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxidx(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxidy(), libMesh::InfFE< Dim, T_radial, T_map >::get_dxidz(), libMesh::InfFE< Dim, T_radial, T_map >::get_dzetadx(), libMesh::InfFE< Dim, T_radial, T_map >::get_dzetady(), libMesh::InfFE< Dim, T_radial, T_map >::get_dzetadz(), libMesh::InfFE< Dim, T_radial, T_map >::get_JxW(), libMesh::InfFE< Dim, T_radial, T_map >::get_JxWxdecay_sq(), libMesh::InfFE< Dim, T_radial, T_map >::get_normals(), libMesh::FEGenericBase< FEOutputType< T >::type >::get_phi(), libMesh::InfFE< Dim, T_radial, T_map >::get_phi_over_decayxR(), libMesh::InfFE< Dim, T_radial, T_map >::get_Sobolev_dweight(), libMesh::InfFE< Dim, T_radial, T_map >::get_Sobolev_dweightxR_sq(), libMesh::InfFE< Dim, T_radial, T_map >::get_Sobolev_weight(), libMesh::InfFE< Dim, T_radial, T_map >::get_Sobolev_weightxR_sq(), libMesh::InfFE< Dim, T_radial, T_map >::get_tangents(), and libMesh::InfFE< Dim, T_radial, T_map >::get_xyz().

◆ curl_phi

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::curl_phi
protectedinherited

Shape function curl values.

Only defined for vector types.

Definition at line 631 of file fe_base.h.

◆ d2phi

std::vector<std::vector<OutputTensor> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phi
protectedinherited

Shape function second derivative values.

Definition at line 674 of file fe_base.h.

◆ d2phideta2

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phideta2
protectedinherited

Shape function second derivatives in the eta direction.

Definition at line 695 of file fe_base.h.

◆ d2phidetadzeta

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidetadzeta
protectedinherited

Shape function second derivatives in the eta-zeta direction.

Definition at line 700 of file fe_base.h.

◆ d2phidx2

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidx2
protectedinherited

Shape function second derivatives in the x direction.

Definition at line 710 of file fe_base.h.

◆ d2phidxdy

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidxdy
protectedinherited

Shape function second derivatives in the x-y direction.

Definition at line 715 of file fe_base.h.

◆ d2phidxdz

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidxdz
protectedinherited

Shape function second derivatives in the x-z direction.

Definition at line 720 of file fe_base.h.

◆ d2phidxi2

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidxi2
protectedinherited

Shape function second derivatives in the xi direction.

Definition at line 680 of file fe_base.h.

◆ d2phidxideta

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidxideta
protectedinherited

Shape function second derivatives in the xi-eta direction.

Definition at line 685 of file fe_base.h.

◆ d2phidxidzeta

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidxidzeta
protectedinherited

Shape function second derivatives in the xi-zeta direction.

Definition at line 690 of file fe_base.h.

◆ d2phidy2

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidy2
protectedinherited

Shape function second derivatives in the y direction.

Definition at line 725 of file fe_base.h.

◆ d2phidydz

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidydz
protectedinherited

Shape function second derivatives in the y-z direction.

Definition at line 730 of file fe_base.h.

◆ d2phidz2

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidz2
protectedinherited

Shape function second derivatives in the z direction.

Definition at line 735 of file fe_base.h.

◆ d2phidzeta2

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::d2phidzeta2
protectedinherited

Shape function second derivatives in the zeta direction.

Definition at line 705 of file fe_base.h.

◆ dim

const unsigned int libMesh::FEAbstract::dim
protectedinherited

The dimensionality of the object.

Definition at line 660 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::build(), and libMesh::FEAbstract::get_dim().

◆ div_phi

std::vector<std::vector<OutputDivergence> > libMesh::FEGenericBase< FEOutputType< T >::type >::div_phi
protectedinherited

Shape function divergence values.

Only defined for vector types.

Definition at line 636 of file fe_base.h.

◆ dphase

std::vector<OutputGradient> libMesh::FEGenericBase< FEOutputType< T >::type >::dphase
protectedinherited

Used for certain infinite element families: the first derivatives of the phase term in global coordinates, over all quadrature points.

Definition at line 753 of file fe_base.h.

◆ dphi

std::vector<std::vector<OutputGradient> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphi
protectedinherited

Shape function derivative values.

Definition at line 620 of file fe_base.h.

◆ dphideta

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphideta
protectedinherited

Shape function derivatives in the eta direction.

Definition at line 646 of file fe_base.h.

◆ dphidx

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphidx
protectedinherited

Shape function derivatives in the x direction.

Definition at line 656 of file fe_base.h.

◆ dphidxi

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphidxi
protectedinherited

Shape function derivatives in the xi direction.

Definition at line 641 of file fe_base.h.

◆ dphidy

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphidy
protectedinherited

Shape function derivatives in the y direction.

Definition at line 661 of file fe_base.h.

◆ dphidz

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphidz
protectedinherited

Shape function derivatives in the z direction.

Definition at line 666 of file fe_base.h.

◆ dphidzeta

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dphidzeta
protectedinherited

Shape function derivatives in the zeta direction.

Definition at line 651 of file fe_base.h.

◆ dual_coeff

DenseMatrix<Real> libMesh::FEGenericBase< FEOutputType< T >::type >::dual_coeff
mutableprotectedinherited

Coefficient matrix for the dual basis.

Definition at line 626 of file fe_base.h.

◆ dual_d2phi

std::vector<std::vector<OutputTensor> > libMesh::FEGenericBase< FEOutputType< T >::type >::dual_d2phi
protectedinherited

Definition at line 675 of file fe_base.h.

◆ dual_dphi

std::vector<std::vector<OutputGradient> > libMesh::FEGenericBase< FEOutputType< T >::type >::dual_dphi
protectedinherited

Definition at line 621 of file fe_base.h.

◆ dual_phi

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::dual_phi
protectedinherited

Definition at line 615 of file fe_base.h.

◆ dweight

std::vector<RealGradient> libMesh::FEGenericBase< FEOutputType< T >::type >::dweight
protectedinherited

Used for certain infinite element families: the global derivative of the additional radial weight \( 1/{r^2} \), over all quadrature points.

Definition at line 760 of file fe_base.h.

◆ fe_type

FEType libMesh::FEAbstract::fe_type
protectedinherited

◆ last_edge

ElemType libMesh::FE< Dim, T >::last_edge
protectedinherited

Definition at line 816 of file fe.h.

◆ last_side

ElemType libMesh::FE< Dim, T >::last_side
protectedinherited

The last side and last edge we did a reinit on.

Definition at line 814 of file fe.h.

◆ phi

std::vector<std::vector<OutputShape> > libMesh::FEGenericBase< FEOutputType< T >::type >::phi
protectedinherited

Shape function values.

Definition at line 614 of file fe_base.h.

◆ qrule

QBase* libMesh::FEAbstract::qrule
protectedinherited

A pointer to the quadrature rule employed.

Definition at line 762 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::n_quadrature_points().

◆ shapes_on_quadrature

bool libMesh::FEAbstract::shapes_on_quadrature
protectedinherited

A flag indicating if current data structures correspond to quadrature rule points.

Definition at line 768 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::n_quadrature_points().

◆ weight

std::vector<Real> libMesh::FEGenericBase< FEOutputType< T >::type >::weight
protectedinherited

Used for certain infinite element families: the additional radial weight \( 1/{r^2} \) in local coordinates, over all quadrature points.

Definition at line 767 of file fe_base.h.


The documentation for this class was generated from the following files: