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::FEHierarchic< Dim > Class Template Reference

Hierarchic finite elements. More...

#include <fe.h>

Inheritance diagram for libMesh::FEHierarchic< Dim >:
[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

 FEHierarchic (const FEType &fet)
 Constructor. 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 &, 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 &, 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 libmesh_dbg_var(i), const unsigned int libmesh_dbg_var(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)
 
RealGradient shape_second_deriv (const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &libmesh_dbg_var(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)
 
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 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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
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)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool)
 
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)
 
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)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool)
 
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)
 
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)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool)
 
void nodal_soln (const Elem *, const Order, const std::vector< Number > &, std::vector< Number > &, bool)
 
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)
 
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)
 
void nodal_soln (const Elem *elem, const Order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool)
 
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)
 
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)
 
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)
 
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 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 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 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 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 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 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 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 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 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 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 ElemType t, 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 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, 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, 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 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 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 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 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_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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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, 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_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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 ElemType t, const Order o)
 
unsigned int n_dofs_per_elem (const ElemType t, 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
 
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 (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 *elem, const unsigned int side, 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 side of face. More...
 
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...
 
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 unsigned int n_quadrature_points () const override
 
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
 
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 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)
 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)
 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_at_node (const ElemType t, const Order o, const unsigned int n)
 
static unsigned int n_dofs_per_elem (const ElemType t, 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

virtual void init_shape_functions (const std::vector< Point > &qp, const Elem *e)
 Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc. More...
 
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...
 
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)
 A default implementation for side_nodal_soln. More...
 

Protected Attributes

std::vector< Pointcached_nodes
 An array of the node locations on the last element we computed on. More...
 
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 are 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...
 
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

template<unsigned int Dim>
class libMesh::FEHierarchic< Dim >

Hierarchic finite elements.

Still templated on the dimension, Dim.

Author
Benjamin S. Kirk
Date
2002-2007

Definition at line 975 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

◆ FEHierarchic()

template<unsigned int Dim>
libMesh::FEHierarchic< Dim >::FEHierarchic ( const FEType fet)
inlineexplicit

Constructor.

Creates a hierarchic finite element to be used in dimension Dim.

Definition at line 984 of file fe.h.

984  :
985  FE<Dim,HIERARCHIC> (fet)
986  {}

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 610 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:756
static const bool value
Definition: xdr_io.C:54

◆ 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 615 of file fe_abstract.h.

References libMesh::FEAbstract::_add_p_level_in_reinit.

615 { 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:756

◆ 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:182
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:1325

◆ 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:182
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:1325

◆ 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:182
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:1325

◆ 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 234 of file fe_lagrange_shape_3D.C.

239 {
240  const ElemType type = elem->type();
241 
242  // Just loop on the harder-to-optimize cases
243  if (type != HEX8 && type != HEX27)
244  {
246  (elem,o,p,comps,add_p_level);
247  return;
248  }
249 
250 #if LIBMESH_DIM == 3
251 
252  libmesh_assert(comps[0]);
253  libmesh_assert(comps[1]);
254  libmesh_assert(comps[2]);
255  const unsigned int n_sf = comps[0]->size();
256 
257  switch (o)
258  {
259  // linear Lagrange shape functions
260  case FIRST:
261  {
262  switch (type)
263  {
264  // trilinear hexahedral shape functions
265  case HEX8:
266  case HEX20:
267  case HEX27:
268  {
269  libmesh_assert_equal_to (n_sf, 8);
270 
271  // 0 1 2 3 4 5 6 7
272  static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
273  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
274  static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
275 
276  for (auto qp : index_range(p))
277  {
278  const Point & q_point = p[qp];
279  // Compute hex shape functions as a tensor-product
280  const Real xi = q_point(0);
281  const Real eta = q_point(1);
282  const Real zeta = q_point(2);
283 
284  // one_d_shapes[dim][i] = phi_i(p(dim))
285  Real one_d_shapes[3][2] = {
290  {fe_lagrange_1D_linear_shape(0, zeta),
291  fe_lagrange_1D_linear_shape(1, zeta)}};
292 
293  // one_d_derivs[dim][i] = dphi_i/dxi(p(dim))
294  Real one_d_derivs[3][2] = {
300  fe_lagrange_1D_linear_shape_deriv(1, 0, zeta)}};
301 
302  for (unsigned int i : make_range(n_sf))
303  {
304  (*comps[0])[i][qp] = one_d_derivs[0][i0[i]] *
305  one_d_shapes[1][i1[i]] *
306  one_d_shapes[2][i2[i]];
307  (*comps[1])[i][qp] = one_d_shapes[0][i0[i]] *
308  one_d_derivs[1][i1[i]] *
309  one_d_shapes[2][i2[i]];
310  (*comps[2])[i][qp] = one_d_shapes[0][i0[i]] *
311  one_d_shapes[1][i1[i]] *
312  one_d_derivs[2][i2[i]];
313  }
314  }
315  return;
316  }
317 
318  default:
319  libmesh_error(); // How did we get here?
320  }
321  }
322 
323 
324  // quadratic Lagrange shape functions
325  case SECOND:
326  {
327  switch (type)
328  {
329  // triquadratic hexahedral shape functions
330  case HEX8:
331 // TODO: refactor to optimize this
332 // libmesh_assert_msg(T == L2_LAGRANGE,
333 // "High order on first order elements only supported for L2 families");
334  libmesh_fallthrough();
335  case HEX27:
336  {
337  libmesh_assert_less_equal (n_sf, 27);
338 
339  // The only way to make any sense of this
340  // is to look at the mgflo/mg2/mgf documentation
341  // and make the cut-out cube!
342  // 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
343  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};
344  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};
345  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};
346 
347  for (auto qp : index_range(p))
348  {
349  const Point & q_point = p[qp];
350  // Compute hex shape functions as a tensor-product
351  const Real xi = q_point(0);
352  const Real eta = q_point(1);
353  const Real zeta = q_point(2);
354 
355  // one_d_shapes[dim][i] = phi_i(p(dim))
356  Real one_d_shapes[3][3] = {
366 
367  // one_d_derivs[dim][i] = dphi_i/dxi(p(dim))
368  Real one_d_derivs[3][3] = {
378 
379  for (unsigned int i : make_range(n_sf))
380  {
381  (*comps[0])[i][qp] = one_d_derivs[0][i0[i]] *
382  one_d_shapes[1][i1[i]] *
383  one_d_shapes[2][i2[i]];
384  (*comps[1])[i][qp] = one_d_shapes[0][i0[i]] *
385  one_d_derivs[1][i1[i]] *
386  one_d_shapes[2][i2[i]];
387  (*comps[2])[i][qp] = one_d_shapes[0][i0[i]] *
388  one_d_shapes[1][i1[i]] *
389  one_d_derivs[2][i2[i]];
390  }
391  }
392  return;
393  }
394 
395  default:
396  libmesh_error(); // How did we get here?
397  }
398  }
399 
400  // unsupported order
401  default:
402  libmesh_error_msg("ERROR: Unsupported 3D FE order on HEX!: " << o);
403  }
404 #else // LIBMESH_DIM != 3
405  libmesh_ignore(elem, o, p, v, add_p_level);
406  libmesh_not_implemented();
407 #endif // LIBMESH_DIM == 3
408 }
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:134
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:111
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:182
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:1295

◆ 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:182
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:1295

◆ 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:182
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:1295

◆ 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::FE< Dim, T >::attach_quadrature_rule ( QBase q)
overridevirtualinherited

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

Implements libMesh::FEAbstract.

Definition at line 69 of file fe.C.

70 {
71  libmesh_assert(q);
72  this->qrule = q;
73  // make sure we don't cache results from a previous quadrature rule
74  this->elem_type = INVALID_ELEM;
75  return;
76 }
libmesh_assert(ctx)
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:737
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ 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:207
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:639
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:207
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:639
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:639
InfMapType inf_map
The coordinate mapping type of the infinite element.
Definition: fe_type.h:261
FEFamily radial_family
The type of approximation in radial direction.
Definition: fe_type.h:253
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 }

◆ 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:681
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:691
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:670
bool calculate_div_phi
Should we calculate shape function divergences?
Definition: fe_abstract.h:696
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:675
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
bool calculate_nothing
Are we potentially deliberately calculating nothing?
Definition: fe_abstract.h:660

◆ 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 std::abs(), 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 = static_cast<Order>(fe_type.order +
1142  elem->max_descendant_p_level());
1143 
1144  // In 3D, project any edge values next
1145  if (dim > 2 && cont != DISCONTINUOUS)
1146  for (auto e : elem->edge_index_range())
1147  {
1148  FEInterface::dofs_on_edge(elem, dim, fe_type,
1149  e, new_side_dofs);
1150 
1151  const unsigned int n_new_side_dofs =
1152  cast_int<unsigned int>(new_side_dofs.size());
1153 
1154  // Some edge dofs are on nodes and already
1155  // fixed, others are free to calculate
1156  unsigned int free_dofs = 0;
1157  for (unsigned int i=0; i != n_new_side_dofs; ++i)
1158  if (!dof_is_fixed[new_side_dofs[i]])
1159  free_dof[free_dofs++] = i;
1160  Ke.resize (free_dofs, free_dofs); Ke.zero();
1161  Fe.resize (free_dofs); Fe.zero();
1162  // The new edge coefficients
1163  DenseVector<Number> Uedge(free_dofs);
1164 
1165  // Add projection terms from each child sharing
1166  // this edge
1167  for (unsigned int c=0; c != n_children; ++c)
1168  {
1169  if (!elem->is_child_on_edge(c,e))
1170  continue;
1171  const Elem * child = elem->child_ptr(c);
1172 
1173  std::vector<dof_id_type> child_dof_indices;
1174  if (use_old_dof_indices)
1175  dof_map.old_dof_indices (child,
1176  child_dof_indices, var);
1177  else
1178  dof_map.dof_indices (child,
1179  child_dof_indices, var);
1180  const unsigned int child_n_dofs =
1181  cast_int<unsigned int>
1182  (child_dof_indices.size());
1183 
1184  temp_fe_type = base_fe_type;
1185  temp_fe_type.order =
1186  static_cast<Order>(temp_fe_type.order +
1187  child->p_level());
1188 
1189  FEInterface::dofs_on_edge(child, dim,
1190  temp_fe_type, e, old_side_dofs);
1191 
1192  // Initialize both child and parent FE data
1193  // on the child's edge
1194  fe->attach_quadrature_rule (qedgerule.get());
1195  fe->edge_reinit (child, e);
1196  const unsigned int n_qp = qedgerule->n_points();
1197 
1198  FEMap::inverse_map (dim, elem, xyz_values,
1199  coarse_qpoints);
1200 
1201  fe_coarse->reinit(elem, &coarse_qpoints);
1202 
1203  // Loop over the quadrature points
1204  for (unsigned int qp=0; qp<n_qp; qp++)
1205  {
1206  // solution value at the quadrature point
1207  OutputNumber fineval = libMesh::zero;
1208  // solution grad at the quadrature point
1209  OutputNumberGradient finegrad;
1210 
1211  // Sum the solution values * the DOF
1212  // values at the quadrature point to
1213  // get the solution value and gradient.
1214  for (unsigned int i=0; i<child_n_dofs;
1215  i++)
1216  {
1217  fineval +=
1218  (old_vector(child_dof_indices[i])*
1219  phi_values[i][qp]);
1220  if (cont == C_ONE)
1221  finegrad += (*dphi_values)[i][qp] *
1222  old_vector(child_dof_indices[i]);
1223  }
1224 
1225  // Form edge projection matrix
1226  for (unsigned int sidei=0, freei=0; sidei != n_new_side_dofs; ++sidei)
1227  {
1228  unsigned int i = new_side_dofs[sidei];
1229  // fixed DoFs aren't test functions
1230  if (dof_is_fixed[i])
1231  continue;
1232  for (unsigned int sidej=0, freej=0; sidej != n_new_side_dofs; ++sidej)
1233  {
1234  unsigned int j =
1235  new_side_dofs[sidej];
1236  if (dof_is_fixed[j])
1237  Fe(freei) -=
1238  TensorTools::inner_product(phi_coarse[i][qp],
1239  phi_coarse[j][qp]) *
1240  JxW[qp] * Ue(j);
1241  else
1242  Ke(freei,freej) +=
1243  TensorTools::inner_product(phi_coarse[i][qp],
1244  phi_coarse[j][qp]) *
1245  JxW[qp];
1246  if (cont == C_ONE)
1247  {
1248  if (dof_is_fixed[j])
1249  Fe(freei) -=
1250  TensorTools::inner_product((*dphi_coarse)[i][qp],
1251  (*dphi_coarse)[j][qp]) *
1252  JxW[qp] * Ue(j);
1253  else
1254  Ke(freei,freej) +=
1255  TensorTools::inner_product((*dphi_coarse)[i][qp],
1256  (*dphi_coarse)[j][qp]) *
1257  JxW[qp];
1258  }
1259  if (!dof_is_fixed[j])
1260  freej++;
1261  }
1262  Fe(freei) += TensorTools::inner_product(phi_coarse[i][qp],
1263  fineval) * JxW[qp];
1264  if (cont == C_ONE)
1265  Fe(freei) +=
1266  TensorTools::inner_product(finegrad, (*dphi_coarse)[i][qp]) * JxW[qp];
1267  freei++;
1268  }
1269  }
1270  }
1271  Ke.cholesky_solve(Fe, Uedge);
1272 
1273  // Transfer new edge solutions to element
1274  for (unsigned int i=0; i != free_dofs; ++i)
1275  {
1276  Number & ui = Ue(new_side_dofs[free_dof[i]]);
1278  std::abs(ui - Uedge(i)) < TOLERANCE);
1279  ui = Uedge(i);
1280  dof_is_fixed[new_side_dofs[free_dof[i]]] = true;
1281  }
1282  }
1283 
1284  // Project any side values (edges in 2D, faces in 3D)
1285  if (dim > 1 && cont != DISCONTINUOUS)
1286  for (auto s : elem->side_index_range())
1287  {
1288  FEInterface::dofs_on_side(elem, dim, fe_type,
1289  s, new_side_dofs);
1290 
1291  const unsigned int n_new_side_dofs =
1292  cast_int<unsigned int>(new_side_dofs.size());
1293 
1294  // Some side dofs are on nodes/edges and already
1295  // fixed, others are free to calculate
1296  unsigned int free_dofs = 0;
1297  for (unsigned int i=0; i != n_new_side_dofs; ++i)
1298  if (!dof_is_fixed[new_side_dofs[i]])
1299  free_dof[free_dofs++] = i;
1300  Ke.resize (free_dofs, free_dofs); Ke.zero();
1301  Fe.resize (free_dofs); Fe.zero();
1302  // The new side coefficients
1303  DenseVector<Number> Uside(free_dofs);
1304 
1305  // Add projection terms from each child sharing
1306  // this side
1307  for (unsigned int c=0; c != n_children; ++c)
1308  {
1309  if (!elem->is_child_on_side(c,s))
1310  continue;
1311  const Elem * child = elem->child_ptr(c);
1312 
1313  std::vector<dof_id_type> child_dof_indices;
1314  if (use_old_dof_indices)
1315  dof_map.old_dof_indices (child,
1316  child_dof_indices, var);
1317  else
1318  dof_map.dof_indices (child,
1319  child_dof_indices, var);
1320  const unsigned int child_n_dofs =
1321  cast_int<unsigned int>
1322  (child_dof_indices.size());
1323 
1324  temp_fe_type = base_fe_type;
1325  temp_fe_type.order =
1326  static_cast<Order>(temp_fe_type.order +
1327  child->p_level());
1328 
1329  FEInterface::dofs_on_side(child, dim,
1330  temp_fe_type, s, old_side_dofs);
1331 
1332  // Initialize both child and parent FE data
1333  // on the child's side
1334  fe->attach_quadrature_rule (qsiderule.get());
1335  fe->reinit (child, s);
1336  const unsigned int n_qp = qsiderule->n_points();
1337 
1338  FEMap::inverse_map (dim, elem, xyz_values,
1339  coarse_qpoints);
1340 
1341  fe_coarse->reinit(elem, &coarse_qpoints);
1342 
1343  // Loop over the quadrature points
1344  for (unsigned int qp=0; qp<n_qp; qp++)
1345  {
1346  // solution value at the quadrature point
1347  OutputNumber fineval = libMesh::zero;
1348  // solution grad at the quadrature point
1349  OutputNumberGradient finegrad;
1350 
1351  // Sum the solution values * the DOF
1352  // values at the quadrature point to
1353  // get the solution value and gradient.
1354  for (unsigned int i=0; i<child_n_dofs;
1355  i++)
1356  {
1357  fineval +=
1358  old_vector(child_dof_indices[i]) *
1359  phi_values[i][qp];
1360  if (cont == C_ONE)
1361  finegrad += (*dphi_values)[i][qp] *
1362  old_vector(child_dof_indices[i]);
1363  }
1364 
1365  // Form side projection matrix
1366  for (unsigned int sidei=0, freei=0; sidei != n_new_side_dofs; ++sidei)
1367  {
1368  unsigned int i = new_side_dofs[sidei];
1369  // fixed DoFs aren't test functions
1370  if (dof_is_fixed[i])
1371  continue;
1372  for (unsigned int sidej=0, freej=0; sidej != n_new_side_dofs; ++sidej)
1373  {
1374  unsigned int j =
1375  new_side_dofs[sidej];
1376  if (dof_is_fixed[j])
1377  Fe(freei) -=
1378  TensorTools::inner_product(phi_coarse[i][qp],
1379  phi_coarse[j][qp]) *
1380  JxW[qp] * Ue(j);
1381  else
1382  Ke(freei,freej) +=
1383  TensorTools::inner_product(phi_coarse[i][qp],
1384  phi_coarse[j][qp]) *
1385  JxW[qp];
1386  if (cont == C_ONE)
1387  {
1388  if (dof_is_fixed[j])
1389  Fe(freei) -=
1390  TensorTools::inner_product((*dphi_coarse)[i][qp],
1391  (*dphi_coarse)[j][qp]) *
1392  JxW[qp] * Ue(j);
1393  else
1394  Ke(freei,freej) +=
1395  TensorTools::inner_product((*dphi_coarse)[i][qp],
1396  (*dphi_coarse)[j][qp]) *
1397  JxW[qp];
1398  }
1399  if (!dof_is_fixed[j])
1400  freej++;
1401  }
1402  Fe(freei) += TensorTools::inner_product(fineval, phi_coarse[i][qp]) * JxW[qp];
1403  if (cont == C_ONE)
1404  Fe(freei) +=
1405  TensorTools::inner_product(finegrad, (*dphi_coarse)[i][qp]) * JxW[qp];
1406  freei++;
1407  }
1408  }
1409  }
1410  Ke.cholesky_solve(Fe, Uside);
1411 
1412  // Transfer new side solutions to element
1413  for (unsigned int i=0; i != free_dofs; ++i)
1414  {
1415  Number & ui = Ue(new_side_dofs[free_dof[i]]);
1417  std::abs(ui - Uside(i)) < TOLERANCE);
1418  ui = Uside(i);
1419  dof_is_fixed[new_side_dofs[free_dof[i]]] = true;
1420  }
1421  }
1422 
1423  // Project the interior values, finally
1424 
1425  // Some interior dofs are on nodes/edges/sides and
1426  // already fixed, others are free to calculate
1427  unsigned int free_dofs = 0;
1428  for (unsigned int i=0; i != new_n_dofs; ++i)
1429  if (!dof_is_fixed[i])
1430  free_dof[free_dofs++] = i;
1431  Ke.resize (free_dofs, free_dofs); Ke.zero();
1432  Fe.resize (free_dofs); Fe.zero();
1433  // The new interior coefficients
1434  DenseVector<Number> Uint(free_dofs);
1435 
1436  // Add projection terms from each child
1437  for (auto & child : elem->child_ref_range())
1438  {
1439  std::vector<dof_id_type> child_dof_indices;
1440  if (use_old_dof_indices)
1441  dof_map.old_dof_indices (&child,
1442  child_dof_indices, var);
1443  else
1444  dof_map.dof_indices (&child,
1445  child_dof_indices, var);
1446  const unsigned int child_n_dofs =
1447  cast_int<unsigned int>
1448  (child_dof_indices.size());
1449 
1450  // Initialize both child and parent FE data
1451  // on the child's quadrature points
1452  fe->attach_quadrature_rule (qrule.get());
1453  fe->reinit (&child);
1454  const unsigned int n_qp = qrule->n_points();
1455 
1456  FEMap::inverse_map (dim, elem, xyz_values, coarse_qpoints);
1457 
1458  fe_coarse->reinit(elem, &coarse_qpoints);
1459 
1460  // Loop over the quadrature points
1461  for (unsigned int qp=0; qp<n_qp; qp++)
1462  {
1463  // solution value at the quadrature point
1464  OutputNumber fineval = libMesh::zero;
1465  // solution grad at the quadrature point
1466  OutputNumberGradient finegrad;
1467 
1468  // Sum the solution values * the DOF
1469  // values at the quadrature point to
1470  // get the solution value and gradient.
1471  for (unsigned int i=0; i<child_n_dofs; i++)
1472  {
1473  fineval +=
1474  (old_vector(child_dof_indices[i]) *
1475  phi_values[i][qp]);
1476  if (cont == C_ONE)
1477  finegrad += (*dphi_values)[i][qp] *
1478  old_vector(child_dof_indices[i]);
1479  }
1480 
1481  // Form interior projection matrix
1482  for (unsigned int i=0, freei=0;
1483  i != new_n_dofs; ++i)
1484  {
1485  // fixed DoFs aren't test functions
1486  if (dof_is_fixed[i])
1487  continue;
1488  for (unsigned int j=0, freej=0; j !=
1489  new_n_dofs; ++j)
1490  {
1491  if (dof_is_fixed[j])
1492  Fe(freei) -=
1493  TensorTools::inner_product(phi_coarse[i][qp],
1494  phi_coarse[j][qp]) *
1495  JxW[qp] * Ue(j);
1496  else
1497  Ke(freei,freej) +=
1498  TensorTools::inner_product(phi_coarse[i][qp],
1499  phi_coarse[j][qp]) *
1500  JxW[qp];
1501  if (cont == C_ONE)
1502  {
1503  if (dof_is_fixed[j])
1504  Fe(freei) -=
1505  TensorTools::inner_product((*dphi_coarse)[i][qp],
1506  (*dphi_coarse)[j][qp]) *
1507  JxW[qp] * Ue(j);
1508  else
1509  Ke(freei,freej) +=
1510  TensorTools::inner_product((*dphi_coarse)[i][qp],
1511  (*dphi_coarse)[j][qp]) *
1512  JxW[qp];
1513  }
1514  if (!dof_is_fixed[j])
1515  freej++;
1516  }
1517  Fe(freei) += TensorTools::inner_product(phi_coarse[i][qp], fineval) *
1518  JxW[qp];
1519  if (cont == C_ONE)
1520  Fe(freei) += TensorTools::inner_product(finegrad, (*dphi_coarse)[i][qp]) * JxW[qp];
1521  freei++;
1522  }
1523  }
1524  }
1525  Ke.cholesky_solve(Fe, Uint);
1526 
1527  // Transfer new interior solutions to element
1528  for (unsigned int i=0; i != free_dofs; ++i)
1529  {
1530  Number & ui = Ue(free_dof[i]);
1532  std::abs(ui - Uint(i)) < TOLERANCE);
1533  ui = Uint(i);
1534  // We should be fixing all dofs by now; no need to keep track of
1535  // that unless we're debugging
1536 #ifndef NDEBUG
1537  dof_is_fixed[free_dof[i]] = true;
1538 #endif
1539  }
1540 
1541 #ifndef NDEBUG
1542  // Make sure every DoF got reached!
1543  for (unsigned int i=0; i != new_n_dofs; ++i)
1544  libmesh_assert(dof_is_fixed[i]);
1545 #endif
1546 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:182
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
virtual void zero() override final
Set every element in the vector to 0.
Definition: dense_vector.h:398
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Fills the vector di with the global degree of freedom indices for the element.
Definition: dof_map.C:1992
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:374
const FEType & variable_type(const unsigned int c) const
Definition: dof_map.h:2144
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:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
const Number zero
.
Definition: libmesh.h:280
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
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:639
libmesh_assert(ctx)
unsigned int n_points() const
Definition: quadrature.h:123
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:737
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:709
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:3000
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:2283

◆ 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 1552 of file fe_base.C.

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

1557 {
1558  Ue.resize(0);
1559 
1560  for (auto v : make_range(dof_map.n_variables()))
1561  {
1562  DenseVector<Number> Usub;
1563 
1564  coarsened_dof_values(old_vector, dof_map, elem, Usub,
1565  v, use_old_dof_indices);
1566 
1567  Ue.append (Usub);
1568  }
1569 }
unsigned int n_variables() const
Definition: dof_map.h:621
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
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:134

◆ compute_constraints() [1/49]

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

Definition at line 95 of file fe_scalar.C.

99 { }

◆ compute_constraints() [2/49]

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

Definition at line 102 of file fe_scalar.C.

106 { }

◆ 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 162 of file fe_rational.C.

166 { 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:1575

◆ 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 169 of file fe_rational.C.

173 { 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:1575

◆ compute_constraints() [5/49]

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

Definition at line 185 of file fe_l2_hierarchic.C.

189 { }

◆ compute_constraints() [6/49]

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

Definition at line 192 of file fe_l2_hierarchic.C.

196 { }

◆ compute_constraints() [7/49]

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

Definition at line 254 of file fe_l2_lagrange.C.

258 { }

◆ compute_constraints() [8/49]

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

Definition at line 261 of file fe_l2_lagrange.C.

265 { }

◆ compute_constraints() [9/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 275 of file fe_side_hierarchic.C.

279 { 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:1575

◆ compute_constraints() [10/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 282 of file fe_clough.C.

286 { 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:1575

◆ compute_constraints() [11/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 282 of file fe_side_hierarchic.C.

286 { 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:1575

◆ compute_constraints() [12/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 289 of file fe_clough.C.

293 { 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:1575

◆ 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 319 of file fe_hermite.C.

323 { 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:1575

◆ 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 326 of file fe_hermite.C.

330 { 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:1575

◆ compute_constraints() [15/49]

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

Definition at line 407 of file fe_monomial.C.

407 {}

◆ compute_constraints() [16/49]

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

Definition at line 408 of file fe_monomial.C.

408 {}

◆ compute_constraints() [17/49]

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

Definition at line 414 of file fe_xyz.C.

414 {}

◆ compute_constraints() [18/49]

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

Definition at line 415 of file fe_xyz.C.

415 {}

◆ 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 434 of file fe_bernstein.C.

438 { 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:1575

◆ compute_constraints() [20/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 441 of file fe_bernstein.C.

445 { 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:1575

◆ compute_constraints() [21/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 487 of file fe_hierarchic.C.

491 { 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:1575

◆ compute_constraints() [22/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 494 of file fe_hierarchic.C.

498 { 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:1575

◆ compute_constraints() [23/49]

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

Definition at line 523 of file fe_nedelec_one.C.

527 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [24/49]

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

Definition at line 524 of file fe_raviart.C.

528 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [25/49]

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

Definition at line 530 of file fe_nedelec_one.C.

534 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [26/49]

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

Definition at line 531 of file fe_raviart.C.

535 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ compute_constraints() [27/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 537 of file fe_nedelec_one.C.

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

◆ compute_constraints() [28/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 538 of file fe_raviart.C.

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

◆ compute_constraints() [29/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 544 of file fe_nedelec_one.C.

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

◆ 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 545 of file fe_raviart.C.

549 { 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 552 of file fe_raviart.C.

556 { 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 559 of file fe_raviart.C.

563 { 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 566 of file fe_raviart.C.

570 { 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 573 of file fe_raviart.C.

577 { 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, HIERARCHIC_VEC >::compute_constraints ( DofConstraints constraints,
DofMap dof_map,
const unsigned int  variable_number,
const Elem elem 
)
inherited

Definition at line 851 of file fe_hierarchic_vec.C.

855 { //libmesh_not_implemented();
856  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
857 }

◆ compute_constraints() [37/49]

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

Definition at line 856 of file fe_monomial_vec.C.

860 {
861 }

◆ compute_constraints() [38/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 860 of file fe_hierarchic_vec.C.

864 { //libmesh_not_implemented();
865  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
866 }

◆ compute_constraints() [39/49]

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

Definition at line 865 of file fe_monomial_vec.C.

869 {
870 }

◆ 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 869 of file fe_hierarchic_vec.C.

873 { //libmesh_not_implemented();
874  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
875 }

◆ 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 878 of file fe_hierarchic_vec.C.

882 { //libmesh_not_implemented();
883  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
884 }

◆ 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 1040 of file fe_lagrange.C.

1044 { 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 1047 of file fe_lagrange.C.

1051 { 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 1309 of file fe_szabab.C.

1313 { 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:1575

◆ 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 1316 of file fe_szabab.C.

1320 { 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:1575

◆ 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 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() [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 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() [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 1406 of file fe_lagrange_vec.C.

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

◆ 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 1415 of file fe_lagrange_vec.C.

1419 { //libmesh_not_implemented();
1420  FEVectorBase::compute_proj_constraints(constraints, dof_map, variable_number, elem);
1421 }

◆ 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.
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:111

◆ 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:681
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:675
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:111

◆ 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 845 of file fe_abstract.C.

References std::abs(), 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().

847 {
848  libmesh_assert(elem);
849 
850  const unsigned int Dim = elem->dim();
851 
852  // Only constrain elements in 2,3D.
853  if (Dim == 1)
854  return;
855 
856  // Only constrain active and ancestor elements
857  if (elem->subactive())
858  return;
859 
860 
861 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
862  if (elem->infinite())
863  {
864  const FEType fe_t(elem->default_order(), FEMap::map_fe_type(*elem));
865 
866  // expand the infinite_compute_constraint in its template-arguments.
867  switch(Dim)
868  {
869  case 2:
870  {
871  inf_fe_family_mapping_switch(2, inf_compute_node_constraints (constraints, elem) , ,; break;);
872  break;
873  }
874  case 3:
875  {
876  inf_fe_family_mapping_switch(3, inf_compute_node_constraints (constraints, elem) , ,; break;);
877  break;
878  }
879  default:
880  libmesh_error_msg("Invalid dim = " << Dim);
881  }
882  return;
883  }
884 
885 #endif
886  const FEFamily mapping_family = FEMap::map_fe_type(*elem);
887  const FEType fe_type(elem->default_side_order(), mapping_family);
888 
889  // Pull objects out of the loop to reduce heap operations
890  std::vector<const Node *> my_nodes, parent_nodes;
891  std::unique_ptr<const Elem> my_side, parent_side;
892 
893  // Look at the element faces. Check to see if we need to
894  // build constraints.
895  for (auto s : elem->side_index_range())
896  if (elem->neighbor_ptr(s) != nullptr &&
897  elem->neighbor_ptr(s) != remote_elem)
898  if (elem->neighbor_ptr(s)->level() < elem->level()) // constrain dofs shared between
899  { // this element and ones coarser
900  // than this element.
901  // Get pointers to the elements of interest and its parent.
902  const Elem * parent = elem->parent();
903 
904  // This can't happen... Only level-0 elements have nullptr
905  // parents, and no level-0 elements can be at a higher
906  // level than their neighbors!
907  libmesh_assert(parent);
908 
909  elem->build_side_ptr(my_side, s);
910  parent->build_side_ptr(parent_side, s);
911 
912  const unsigned int n_side_nodes = my_side->n_nodes();
913 
914  my_nodes.clear();
915  my_nodes.reserve (n_side_nodes);
916  parent_nodes.clear();
917  parent_nodes.reserve (n_side_nodes);
918 
919  for (unsigned int n=0; n != n_side_nodes; ++n)
920  my_nodes.push_back(my_side->node_ptr(n));
921 
922  for (unsigned int n=0; n != n_side_nodes; ++n)
923  parent_nodes.push_back(parent_side->node_ptr(n));
924 
925  for (unsigned int my_side_n=0;
926  my_side_n < n_side_nodes;
927  my_side_n++)
928  {
929  // We can have an FE type that supports an order
930  // partially, such that sides do not support the same
931  // order. E.g. we say that a LAGRANGE PRISM21 supports
932  // "third" order to distinguish its shape functions from
933  // a PRISM18, but the QUAD9 sides will still only
934  // support second order.
935  FEType side_fe_type = fe_type;
936  const int side_max_order =
937  FEInterface::max_order(fe_type, my_side->type());
938 
939  if ((int)fe_type.order > side_max_order)
940  side_fe_type.order = side_max_order;
941 
942  // Do not use the p_level(), if any, that is inherited by the side.
943  libmesh_assert_less
944  (my_side_n,
945  FEInterface::n_dofs(side_fe_type, /*extra_order=*/0,
946  my_side.get()));
947 
948  const Node * my_node = my_nodes[my_side_n];
949 
950  // The support point of the DOF
951  const Point & support_point = *my_node;
952 
953  // Figure out where my node lies on their reference element.
954  const Point mapped_point = FEMap::inverse_map(Dim-1,
955  parent_side.get(),
956  support_point);
957 
958  // Compute the parent's side shape function values.
959  for (unsigned int their_side_n=0;
960  their_side_n < n_side_nodes;
961  their_side_n++)
962  {
963  // Do not use the p_level(), if any, that is inherited by the side.
964  libmesh_assert_less
965  (their_side_n,
966  FEInterface::n_dofs(side_fe_type,
967  /*extra_order=*/0,
968  parent_side.get()));
969 
970  const Node * their_node = parent_nodes[their_side_n];
971  libmesh_assert(their_node);
972 
973  // Do not use the p_level(), if any, that is inherited by the side.
974  const Real their_value = FEInterface::shape(side_fe_type,
975  /*extra_order=*/0,
976  parent_side.get(),
977  their_side_n,
978  mapped_point);
979 
980  const Real their_mag = std::abs(their_value);
981 #ifdef DEBUG
982  // Protect for the case u_i ~= u_j,
983  // in which case i better equal j.
984  if (their_mag > 0.999)
985  {
986  libmesh_assert_equal_to (my_node, their_node);
987  libmesh_assert_less (std::abs(their_value - 1.), 0.001);
988  }
989  else
990 #endif
991  // To make nodal constraints useful for constructing
992  // sparsity patterns faster, we need to get EVERY
993  // POSSIBLE constraint coupling identified, even if
994  // there is no coupling in the isoparametric
995  // Lagrange case.
996  if (their_mag < 1.e-5)
997  {
998  // since we may be running this method concurrently
999  // on multiple threads we need to acquire a lock
1000  // before modifying the shared constraint_row object.
1001  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1002 
1003  // A reference to the constraint row.
1004  NodeConstraintRow & constraint_row = constraints[my_node].first;
1005 
1006  constraint_row.emplace(their_node, 0.);
1007  }
1008  // To get nodal coordinate constraints right, only
1009  // add non-zero and non-identity values for Lagrange
1010  // basis functions.
1011  else // (1.e-5 <= their_mag <= .999)
1012  {
1013  // since we may be running this method concurrently
1014  // on multiple threads we need to acquire a lock
1015  // before modifying the shared constraint_row object.
1016  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1017 
1018  // A reference to the constraint row.
1019  NodeConstraintRow & constraint_row = constraints[my_node].first;
1020 
1021  constraint_row.emplace(their_node, their_value);
1022  }
1023  }
1024  }
1025  }
1026 }
static unsigned int n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
Definition: fe_interface.C:597
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:1626
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
static unsigned int max_order(const FEType &fe_t, const ElemType &el_t)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
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:138
FEFamily
defines an enum for finite element families.
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709
static FEFamily map_fe_type(const Elem &elem)
Definition: fe_map.C:45
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:54

◆ 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 1883 of file fe_base.C.

References std::abs(), 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().

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

1042 {
1043  // Only bother if we truly have periodic boundaries
1044  if (boundaries.empty())
1045  return;
1046 
1047  libmesh_assert(elem);
1048 
1049  // Only constrain active elements with this method
1050  if (!elem->active())
1051  return;
1052 
1053  const unsigned int Dim = elem->dim();
1054 
1055  const FEFamily mapping_family = FEMap::map_fe_type(*elem);
1056  const FEType fe_type(elem->default_side_order(), mapping_family);
1057 
1058  // Pull objects out of the loop to reduce heap operations
1059  std::vector<const Node *> my_nodes, neigh_nodes;
1060  std::unique_ptr<const Elem> my_side, neigh_side;
1061 
1062  // Look at the element faces. Check to see if we need to
1063  // build constraints.
1064  std::vector<boundary_id_type> bc_ids;
1065  for (auto s : elem->side_index_range())
1066  {
1067  if (elem->neighbor_ptr(s))
1068  continue;
1069 
1070  mesh.get_boundary_info().boundary_ids (elem, s, bc_ids);
1071  for (const auto & boundary_id : bc_ids)
1072  {
1073  const PeriodicBoundaryBase * periodic = boundaries.boundary(boundary_id);
1074  if (periodic)
1075  {
1076  libmesh_assert(point_locator);
1077 
1078  // Get pointers to the element's neighbor.
1079  unsigned int s_neigh;
1080  const Elem * neigh = boundaries.neighbor(boundary_id, *point_locator, elem, s, &s_neigh);
1081 
1082  libmesh_error_msg_if
1083  (!neigh, "PeriodicBoundaries can't find a periodic neighbor for element " <<
1084  elem->id() << " side " << s);
1085 
1086  // h refinement constraints:
1087  // constrain dofs shared between
1088  // this element and ones as coarse
1089  // as or coarser than this element.
1090  if (neigh->level() <= elem->level())
1091  {
1092 #ifdef LIBMESH_ENABLE_AMR
1093  libmesh_assert(neigh->active());
1094 #endif // #ifdef LIBMESH_ENABLE_AMR
1095 
1096  elem->build_side_ptr(my_side, s);
1097  neigh->build_side_ptr(neigh_side, s_neigh);
1098 
1099  const unsigned int n_side_nodes = my_side->n_nodes();
1100 
1101  my_nodes.clear();
1102  my_nodes.reserve (n_side_nodes);
1103  neigh_nodes.clear();
1104  neigh_nodes.reserve (n_side_nodes);
1105 
1106  for (unsigned int n=0; n != n_side_nodes; ++n)
1107  my_nodes.push_back(my_side->node_ptr(n));
1108 
1109  for (unsigned int n=0; n != n_side_nodes; ++n)
1110  neigh_nodes.push_back(neigh_side->node_ptr(n));
1111 
1112  // Make sure we're not adding recursive constraints
1113  // due to the redundancy in the way we add periodic
1114  // boundary constraints, or adding constraints to
1115  // nodes that already have AMR constraints
1116  std::vector<bool> skip_constraint(n_side_nodes, false);
1117 
1118  for (unsigned int my_side_n=0;
1119  my_side_n < n_side_nodes;
1120  my_side_n++)
1121  {
1122  // Do not use the p_level(), if any, that is inherited by the side.
1123  libmesh_assert_less (my_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, my_side.get()));
1124 
1125  const Node * my_node = my_nodes[my_side_n];
1126 
1127  // If we've already got a constraint on this
1128  // node, then the periodic constraint is
1129  // redundant
1130  {
1131  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1132 
1133  if (constraints.count(my_node))
1134  {
1135  skip_constraint[my_side_n] = true;
1136  continue;
1137  }
1138  }
1139 
1140  // Compute the neighbors's side shape function values.
1141  for (unsigned int their_side_n=0;
1142  their_side_n < n_side_nodes;
1143  their_side_n++)
1144  {
1145  // Do not use the p_level(), if any, that is inherited by the side.
1146  libmesh_assert_less (their_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, neigh_side.get()));
1147 
1148  const Node * their_node = neigh_nodes[their_side_n];
1149 
1150  // If there's a constraint on an opposing node,
1151  // we need to see if it's constrained by
1152  // *our side* making any periodic constraint
1153  // on us recursive
1154  {
1155  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1156 
1157  if (!constraints.count(their_node))
1158  continue;
1159 
1160  const NodeConstraintRow & their_constraint_row =
1161  constraints[their_node].first;
1162 
1163  for (unsigned int orig_side_n=0;
1164  orig_side_n < n_side_nodes;
1165  orig_side_n++)
1166  {
1167  // Do not use the p_level(), if any, that is inherited by the side.
1168  libmesh_assert_less (orig_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, my_side.get()));
1169 
1170  const Node * orig_node = my_nodes[orig_side_n];
1171 
1172  if (their_constraint_row.count(orig_node))
1173  skip_constraint[orig_side_n] = true;
1174  }
1175  }
1176  }
1177  }
1178  for (unsigned int my_side_n=0;
1179  my_side_n < n_side_nodes;
1180  my_side_n++)
1181  {
1182  // Do not use the p_level(), if any, that is inherited by the side.
1183  libmesh_assert_less (my_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, my_side.get()));
1184 
1185  if (skip_constraint[my_side_n])
1186  continue;
1187 
1188  const Node * my_node = my_nodes[my_side_n];
1189 
1190  // Figure out where my node lies on their reference element.
1191  const Point neigh_point = periodic->get_corresponding_pos(*my_node);
1192 
1193  // Figure out where my node lies on their reference element.
1194  const Point mapped_point =
1195  FEMap::inverse_map(Dim-1, neigh_side.get(),
1196  neigh_point);
1197 
1198  for (unsigned int their_side_n=0;
1199  their_side_n < n_side_nodes;
1200  their_side_n++)
1201  {
1202  // Do not use the p_level(), if any, that is inherited by the side.
1203  libmesh_assert_less (their_side_n, FEInterface::n_dofs(fe_type, /*extra_order=*/0, neigh_side.get()));
1204 
1205  const Node * their_node = neigh_nodes[their_side_n];
1206  libmesh_assert(their_node);
1207 
1208  // Do not use the p_level(), if any, that is inherited by the side.
1209  const Real their_value = FEInterface::shape(fe_type,
1210  /*extra_order=*/0,
1211  neigh_side.get(),
1212  their_side_n,
1213  mapped_point);
1214 
1215  // since we may be running this method concurrently
1216  // on multiple threads we need to acquire a lock
1217  // before modifying the shared constraint_row object.
1218  {
1219  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1220 
1221  NodeConstraintRow & constraint_row =
1222  constraints[my_node].first;
1223 
1224  constraint_row.emplace(their_node, their_value);
1225  }
1226  }
1227  }
1228  }
1229  }
1230  }
1231  }
1232 }
static unsigned int n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
Definition: fe_interface.C:597
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:1626
MeshBase & mesh
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
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:138
FEFamily
defines an enum for finite element families.
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709
static FEFamily map_fe_type(const Elem &elem)
Definition: fe_map.C:45
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 1575 of file fe_base.C.

References std::abs(), 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().

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

696 {
697  for (unsigned int d=0; d != Dim; ++d)
698  {
699  auto & comps_d = *comps[d];
700  for (auto i : index_range(comps_d))
701  FE<Dim,T>::shape_derivs
702  (elem,o,i,d,p,comps_d[i],add_p_level);
703  }
704 }
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:111

◆ 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 710 of file fe.h.

715  {
716  for (auto i : index_range(v))
717  {
718  libmesh_assert_equal_to ( p.size(), v[i].size() );
719  FE<Dim,T>::shapes (elem, o, i, p, v[i], add_p_level);
720  }
721  }
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:111

◆ 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 726 of file fe.h.

733  {
734  libmesh_assert_equal_to(p.size(), v.size());
735  for (auto vi : index_range(v))
736  v[vi] = FE<Dim,T>::shape_deriv (elem, o, i, j, p[vi], add_p_level);
737  }
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:111

◆ 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 695 of file fe.h.

701  {
702  libmesh_assert_equal_to(p.size(), v.size());
703  for (auto vi : index_range(v))
704  v[vi] = FE<Dim,T>::shape (elem, o, i, p[vi], add_p_level);
705  }
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:111

◆ 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 
)
staticprotectedinherited

A default implementation for side_nodal_soln.

Definition at line 709 of file fe.C.

714 {
715  std::vector<Number> full_nodal_soln;
716  nodal_soln(elem, o, elem_soln, full_nodal_soln, add_p_level);
717  const std::vector<unsigned int> side_nodes =
718  elem->nodes_on_side(side);
719 
720  std::size_t n_side_nodes = side_nodes.size();
721  nodal_soln_on_side.resize(n_side_nodes);
722  for (auto n : make_range(n_side_nodes))
723  nodal_soln_on_side[n] = full_nodal_soln[side_nodes[n]];
724 }
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)
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:134

◆ 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:681
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:691
FEFamily family
The type of finite element.
Definition: fe_type.h:207
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:670
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:696
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:675
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709
bool calculate_nothing
Are we potentially deliberately calculating nothing?
Definition: fe_abstract.h:660

◆ 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 115 of file fe.C.

120 {
121  libmesh_assert(elem);
122  libmesh_assert_less (e, elem->n_edges());
123 
124  di.clear();
125  unsigned int nodenum = 0;
126  const unsigned int n_nodes = elem->n_nodes();
127  for (unsigned int n = 0; n != n_nodes; ++n)
128  {
129  const unsigned int n_dofs =
130  n_dofs_at_node(elem->type(), static_cast<Order>(o + add_p_level*elem->p_level()), n);
131  if (elem->is_node_on_edge(n, e))
132  for (unsigned int i = 0; i != n_dofs; ++i)
133  di.push_back(nodenum++);
134  else
135  nodenum += n_dofs;
136  }
137 }
static unsigned int n_dofs(const ElemType t, const Order o)
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
const dof_id_type n_nodes
Definition: tecplot_io.C:67
libmesh_assert(ctx)

◆ 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 972 of file fe_subdivision_2D.C.

972 { 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 88 of file fe.C.

93 {
94  libmesh_assert(elem);
95  libmesh_assert_less (s, elem->n_sides());
96 
97  di.clear();
98  unsigned int nodenum = 0;
99  const unsigned int n_nodes = elem->n_nodes();
100  for (unsigned int n = 0; n != n_nodes; ++n)
101  {
102  const unsigned int n_dofs =
103  n_dofs_at_node(elem->type(), static_cast<Order>(o + add_p_level*elem->p_level()), n);
104  if (elem->is_node_on_side(n, s))
105  for (unsigned int i = 0; i != n_dofs; ++i)
106  di.push_back(nodenum++);
107  else
108  nodenum += n_dofs;
109  }
110 }
static unsigned int n_dofs(const ElemType t, const Order o)
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
const dof_id_type n_nodes
Definition: tecplot_io.C:67
libmesh_assert(ctx)

◆ 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 971 of file fe_subdivision_2D.C.

971 { 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 387 of file fe_boundary.C.

392 {
393  // We're calculating mappings - we need at least first order info
394  this->calculate_phi = true;
395  this->determine_calculations();
396 
397  unsigned int edge_p_level = elem->p_level();
398 
399  if (edge->type() != last_edge ||
400  edge_p_level != this->_elem_p_level ||
401  !this->shapes_on_quadrature)
402  {
403  // Set the element type
404  this->elem_type = elem->type();
405  this->_elem_p_level = edge_p_level;
406  this->_p_level = this->_add_p_level_in_reinit * edge_p_level;
407 
408  // Set the last_edge
409  last_edge = edge->type();
410 
411  // Initialize the edge shape functions
412  this->_fe_map->template init_edge_shape_functions<Dim>(reference_edge_points, edge);
413  }
414 
415  const unsigned int n_points =
416  cast_int<unsigned int>(reference_edge_points.size());
417  reference_points.resize(n_points);
418  for (unsigned int i = 0; i < n_points; i++)
419  reference_points[i].zero();
420 
421  std::vector<Point> refspace_nodes;
422  this->get_refspace_nodes(elem->type(), refspace_nodes);
423 
424  const std::vector<std::vector<Real>> & psi_map = this->_fe_map->get_psi();
425 
426  // sum over the nodes
427  for (auto i : index_range(psi_map))
428  {
429  const Point & edge_node = refspace_nodes[elem->local_edge_node(e,i)];
430  for (unsigned int p=0; p<n_points; p++)
431  reference_points[p].add_scaled (edge_node, psi_map[i][p]);
432  }
433 }
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:670
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:732
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:743
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:726
const Number zero
.
Definition: libmesh.h:280
static void get_refspace_nodes(const ElemType t, std::vector< Point > &nodes)
Definition: fe_abstract.C:373
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:756
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715
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:111

◆ 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 237 of file fe_boundary.C.

242 {
243  libmesh_assert(elem);
244  libmesh_assert (this->qrule != nullptr || pts != nullptr);
245  // We don't do this for 1D elements!
246  libmesh_assert_not_equal_to (Dim, 1);
247 
248  // We're (possibly re-) calculating now! Time to determine what.
249  // FIXME - we currently just assume that we're using JxW and calling
250  // edge_map later.
251  this->_fe_map->add_calculations();
252  this->_fe_map->get_JxW();
253  this->_fe_map->get_xyz();
254  this->determine_calculations();
255 
256  // Build the side of interest
257  const std::unique_ptr<const Elem> edge(elem->build_edge_ptr(e));
258 
259  // Initialize the shape functions at the user-specified
260  // points
261  if (pts != nullptr)
262  {
263  // The shape functions do not correspond to the qrule
264  this->shapes_on_quadrature = false;
265 
266  // Initialize the edge shape functions
267  this->_fe_map->template init_edge_shape_functions<Dim> (*pts, edge.get());
268 
269  // Compute the Jacobian*Weight on the face for integration
270  if (weights != nullptr)
271  {
272  this->_fe_map->compute_edge_map (Dim, *weights, edge.get());
273  }
274  else
275  {
276  std::vector<Real> dummy_weights (pts->size(), 1.);
277  this->_fe_map->compute_edge_map (Dim, dummy_weights, edge.get());
278  }
279  }
280  // If there are no user specified points, we use the
281  // quadrature rule
282  else
283  {
284  // initialize quadrature rule
285  this->qrule->init(edge->type(), elem->p_level());
286 
287  if (this->qrule->shapes_need_reinit())
288  this->shapes_on_quadrature = false;
289 
290  // We might not need to reinitialize the shape functions
291  if ((this->get_type() != elem->type()) ||
292  (edge->type() != last_edge) ||
293  this->shapes_need_reinit() ||
294  !this->shapes_on_quadrature)
295  {
296  // Set the element type
297  this->elem_type = elem->type();
298 
299  // Set the last_edge
300  last_edge = edge->type();
301 
302  // Initialize the edge shape functions
303  this->_fe_map->template init_edge_shape_functions<Dim> (this->qrule->get_points(), edge.get());
304  }
305 
306  // Compute the Jacobian*Weight on the face for integration
307  this->_fe_map->compute_edge_map (Dim, this->qrule->get_weights(), edge.get());
308 
309  // The shape functions correspond to the qrule
310  this->shapes_on_quadrature = true;
311  }
312 
313  // make a copy of the Jacobian for integration
314  const std::vector<Real> JxW_int(this->_fe_map->get_JxW());
315 
316  // Find where the integration points are located on the
317  // full element.
318  const std::vector<Point> * ref_qp;
319  if (pts != nullptr)
320  ref_qp = pts;
321  else
322  ref_qp = & this->qrule->get_points();
323 
324  std::vector<Point> qp;
325  this->edge_map(elem, edge.get(), e, *ref_qp, qp);
326 
327  // compute the shape function and derivative values
328  // at the points qp
329  this->reinit (elem, &qp);
330 
331  // copy back old data
332  this->_fe_map->get_JxW() = JxW_int;
333 }
virtual void init(const ElemType type=INVALID_ELEM, unsigned int p_level=0)
Initializes the data structures for a quadrature rule for an element of type type.
Definition: quadrature.C:64
virtual bool shapes_need_reinit()
Definition: quadrature.h:246
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:743
ElemType get_type() const
Definition: fe_abstract.h:488
const std::vector< Real > & get_weights() const
Definition: quadrature.h:160
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:142
libmesh_assert(ctx)
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:737
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:387
const std::vector< Point > & get_points() const
Definition: quadrature.h:148
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ 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 931 of file fe_subdivision_2D.C.

936 {
937  libmesh_not_implemented();
938 }

◆ 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/86]

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

Implements libMesh::FEAbstract.

Definition at line 80 of file fe_scalar.C.

◆ get_continuity() [2/86]

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

Implements libMesh::FEAbstract.

Definition at line 81 of file fe_scalar.C.

◆ get_continuity() [3/86]

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

Implements libMesh::FEAbstract.

Definition at line 82 of file fe_scalar.C.

◆ get_continuity() [4/86]

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

Implements libMesh::FEAbstract.

Definition at line 83 of file fe_scalar.C.

◆ get_continuity() [5/86]

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

Implements libMesh::FEAbstract.

Definition at line 148 of file fe_rational.C.

148 { return C_ZERO; }

◆ get_continuity() [6/86]

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

Implements libMesh::FEAbstract.

Definition at line 149 of file fe_rational.C.

149 { return C_ZERO; }

◆ get_continuity() [7/86]

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

Implements libMesh::FEAbstract.

Definition at line 150 of file fe_rational.C.

150 { return C_ZERO; }

◆ get_continuity() [8/86]

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

Implements libMesh::FEAbstract.

Definition at line 151 of file fe_rational.C.

151 { return C_ZERO; }

◆ get_continuity() [9/86]

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

Implements libMesh::FEAbstract.

Definition at line 171 of file fe_l2_hierarchic.C.

◆ get_continuity() [10/86]

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

Implements libMesh::FEAbstract.

Definition at line 172 of file fe_l2_hierarchic.C.

◆ get_continuity() [11/86]

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

Implements libMesh::FEAbstract.

Definition at line 173 of file fe_l2_hierarchic.C.

◆ get_continuity() [12/86]

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

Implements libMesh::FEAbstract.

Definition at line 174 of file fe_l2_hierarchic.C.

◆ get_continuity() [13/86]

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

Implements libMesh::FEAbstract.

Definition at line 233 of file fe_l2_lagrange.C.

◆ get_continuity() [14/86]

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

Implements libMesh::FEAbstract.

Definition at line 234 of file fe_l2_lagrange.C.

◆ get_continuity() [15/86]

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

Implements libMesh::FEAbstract.

Definition at line 235 of file fe_l2_lagrange.C.

◆ get_continuity() [16/86]

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

Implements libMesh::FEAbstract.

Definition at line 236 of file fe_l2_lagrange.C.

◆ get_continuity() [17/86]

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

Implements libMesh::FEAbstract.

Definition at line 261 of file fe_side_hierarchic.C.

◆ get_continuity() [18/86]

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

Implements libMesh::FEAbstract.

Definition at line 262 of file fe_side_hierarchic.C.

◆ get_continuity() [19/86]

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

Implements libMesh::FEAbstract.

Definition at line 263 of file fe_side_hierarchic.C.

◆ get_continuity() [20/86]

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

Implements libMesh::FEAbstract.

Definition at line 264 of file fe_side_hierarchic.C.

◆ get_continuity() [21/86]

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

Implements libMesh::FEAbstract.

Definition at line 268 of file fe_clough.C.

268 { return C_ONE; }

◆ get_continuity() [22/86]

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

Implements libMesh::FEAbstract.

Definition at line 269 of file fe_clough.C.

269 { return C_ONE; }

◆ get_continuity() [23/86]

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

Implements libMesh::FEAbstract.

Definition at line 270 of file fe_clough.C.

270 { return C_ONE; }

◆ get_continuity() [24/86]

FEContinuity libMesh::FE< 3, 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() [25/86]

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

Implements libMesh::FEAbstract.

Definition at line 304 of file fe_hermite.C.

304 { return C_ONE; }

◆ get_continuity() [26/86]

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

Implements libMesh::FEAbstract.

Definition at line 305 of file fe_hermite.C.

305 { return C_ONE; }

◆ get_continuity() [27/86]

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

Implements libMesh::FEAbstract.

Definition at line 306 of file fe_hermite.C.

306 { return C_ONE; }

◆ get_continuity() [28/86]

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

Implements libMesh::FEAbstract.

Definition at line 307 of file fe_hermite.C.

307 { return C_ONE; }

◆ get_continuity() [29/86]

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

Implements libMesh::FEAbstract.

Definition at line 390 of file fe_monomial.C.

◆ get_continuity() [30/86]

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

Implements libMesh::FEAbstract.

Definition at line 391 of file fe_monomial.C.

◆ get_continuity() [31/86]

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

Implements libMesh::FEAbstract.

Definition at line 392 of file fe_monomial.C.

◆ get_continuity() [32/86]

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

Implements libMesh::FEAbstract.

Definition at line 393 of file fe_monomial.C.

◆ get_continuity() [33/86]

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

Implements libMesh::FEAbstract.

Definition at line 397 of file fe_xyz.C.

◆ get_continuity() [34/86]

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

Implements libMesh::FEAbstract.

Definition at line 398 of file fe_xyz.C.

◆ get_continuity() [35/86]

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

Implements libMesh::FEAbstract.

Definition at line 399 of file fe_xyz.C.

◆ get_continuity() [36/86]

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

Implements libMesh::FEAbstract.

Definition at line 400 of file fe_xyz.C.

◆ get_continuity() [37/86]

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

Implements libMesh::FEAbstract.

Definition at line 420 of file fe_bernstein.C.

420 { return C_ZERO; }

◆ get_continuity() [38/86]

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

Implements libMesh::FEAbstract.

Definition at line 421 of file fe_bernstein.C.

421 { return C_ZERO; }

◆ get_continuity() [39/86]

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

Implements libMesh::FEAbstract.

Definition at line 422 of file fe_bernstein.C.

422 { return C_ZERO; }

◆ get_continuity() [40/86]

FEContinuity libMesh::FE< 3, 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() [41/86]

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

Implements libMesh::FEAbstract.

◆ get_continuity() [42/86]

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

Implements libMesh::FEAbstract.

Definition at line 473 of file fe_hierarchic.C.

473 { return C_ZERO; }

◆ get_continuity() [43/86]

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

Implements libMesh::FEAbstract.

Definition at line 474 of file fe_hierarchic.C.

474 { return C_ZERO; }

◆ get_continuity() [44/86]

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

Implements libMesh::FEAbstract.

Definition at line 475 of file fe_hierarchic.C.

475 { return C_ZERO; }

◆ get_continuity() [45/86]

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

Implements libMesh::FEAbstract.

Definition at line 476 of file fe_hierarchic.C.

476 { return C_ZERO; }

◆ get_continuity() [46/86]

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

Implements libMesh::FEAbstract.

Definition at line 489 of file fe_raviart.C.

489 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [47/86]

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

Implements libMesh::FEAbstract.

Definition at line 490 of file fe_raviart.C.

490 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [48/86]

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

Implements libMesh::FEAbstract.

Definition at line 491 of file fe_raviart.C.

491 { return H_DIV; }

◆ get_continuity() [49/86]

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

Implements libMesh::FEAbstract.

Definition at line 492 of file fe_raviart.C.

492 { return H_DIV; }

◆ get_continuity() [50/86]

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 495 of file fe_raviart.C.

495 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [51/86]

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 496 of file fe_raviart.C.

496 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [52/86]

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 497 of file fe_raviart.C.

◆ get_continuity() [53/86]

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 498 of file fe_raviart.C.

◆ get_continuity() [54/86]

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

Implements libMesh::FEAbstract.

Definition at line 504 of file fe_nedelec_one.C.

504 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [55/86]

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

Implements libMesh::FEAbstract.

Definition at line 505 of file fe_nedelec_one.C.

505 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ get_continuity() [56/86]

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

Implements libMesh::FEAbstract.

Definition at line 506 of file fe_nedelec_one.C.

506 { return H_CURL; }

◆ get_continuity() [57/86]

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

Implements libMesh::FEAbstract.

Definition at line 507 of file fe_nedelec_one.C.

507 { return H_CURL; }

◆ get_continuity() [58/86]

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

Implements libMesh::FEAbstract.

Definition at line 775 of file fe_monomial_vec.C.

776 {
777  return DISCONTINUOUS;
778 }

◆ get_continuity() [59/86]

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

Implements libMesh::FEAbstract.

Definition at line 781 of file fe_monomial_vec.C.

782 {
783  return DISCONTINUOUS;
784 }

◆ get_continuity() [60/86]

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

Implements libMesh::FEAbstract.

Definition at line 787 of file fe_monomial_vec.C.

788 {
789  return DISCONTINUOUS;
790 }

◆ get_continuity() [61/86]

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

Implements libMesh::FEAbstract.

Definition at line 793 of file fe_monomial_vec.C.

794 {
795  return DISCONTINUOUS;
796 }

◆ get_continuity() [62/86]

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

Implements libMesh::FEAbstract.

Definition at line 814 of file fe_hierarchic_vec.C.

814 { return C_ZERO; }

◆ get_continuity() [63/86]

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

Implements libMesh::FEAbstract.

Definition at line 815 of file fe_hierarchic_vec.C.

815 { return C_ZERO; }

◆ get_continuity() [64/86]

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

Implements libMesh::FEAbstract.

Definition at line 816 of file fe_hierarchic_vec.C.

816 { return C_ZERO; }

◆ get_continuity() [65/86]

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

Implements libMesh::FEAbstract.

Definition at line 817 of file fe_hierarchic_vec.C.

817 { return C_ZERO; }

◆ get_continuity() [66/86]

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 820 of file fe_hierarchic_vec.C.

◆ get_continuity() [67/86]

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 821 of file fe_hierarchic_vec.C.

◆ get_continuity() [68/86]

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 822 of file fe_hierarchic_vec.C.

◆ get_continuity() [69/86]

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 823 of file fe_hierarchic_vec.C.

◆ get_continuity() [70/86]

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

Implements libMesh::FEAbstract.

Definition at line 975 of file fe_subdivision_2D.C.

975 { return C_ONE; }

◆ get_continuity() [71/86]

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

Implements libMesh::FEAbstract.

Definition at line 1017 of file fe_lagrange.C.

1017 { return C_ZERO; }

◆ get_continuity() [72/86]

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

Implements libMesh::FEAbstract.

Definition at line 1018 of file fe_lagrange.C.

1018 { return C_ZERO; }

◆ get_continuity() [73/86]

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

Implements libMesh::FEAbstract.

Definition at line 1019 of file fe_lagrange.C.

1019 { return C_ZERO; }

◆ get_continuity() [74/86]

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

Implements libMesh::FEAbstract.

Definition at line 1020 of file fe_lagrange.C.

1020 { return C_ZERO; }

◆ get_continuity() [75/86]

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

Implements libMesh::FEAbstract.

Definition at line 1295 of file fe_szabab.C.

1295 { return C_ZERO; }

◆ get_continuity() [76/86]

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

Implements libMesh::FEAbstract.

Definition at line 1296 of file fe_szabab.C.

1296 { return C_ZERO; }

◆ get_continuity() [77/86]

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

Implements libMesh::FEAbstract.

Definition at line 1297 of file fe_szabab.C.

1297 { return C_ZERO; }

◆ get_continuity() [78/86]

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

Implements libMesh::FEAbstract.

Definition at line 1298 of file fe_szabab.C.

1298 { return C_ZERO; }

◆ get_continuity() [79/86]

FEContinuity libMesh::FE< 0, 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.

1351 { return C_ZERO; }

◆ get_continuity() [80/86]

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

Implements libMesh::FEAbstract.

Definition at line 1352 of file fe_lagrange_vec.C.

1352 { return C_ZERO; }

◆ get_continuity() [81/86]

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

Implements libMesh::FEAbstract.

Definition at line 1353 of file fe_lagrange_vec.C.

1353 { return C_ZERO; }

◆ get_continuity() [82/86]

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

Implements libMesh::FEAbstract.

Definition at line 1354 of file fe_lagrange_vec.C.

1354 { return C_ZERO; }

◆ get_continuity() [83/86]

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 1357 of file fe_lagrange_vec.C.

◆ get_continuity() [84/86]

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 1358 of file fe_lagrange_vec.C.

◆ get_continuity() [85/86]

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 1359 of file fe_lagrange_vec.C.

◆ get_continuity() [86/86]

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 1360 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:691
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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 459 of file fe_abstract.h.

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

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

◆ 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:681
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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
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 335 of file fe_abstract.h.

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

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

◆ 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 363 of file fe_abstract.h.

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

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

◆ 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 328 of file fe_abstract.h.

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

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

◆ 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 349 of file fe_abstract.h.

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

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

◆ 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 356 of file fe_abstract.h.

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

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

◆ 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 342 of file fe_abstract.h.

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

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

◆ 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 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_detadx(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 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_detady(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 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_detadz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ get_dim()

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

Definition at line 250 of file fe_abstract.h.

References libMesh::FEAbstract::dim.

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

◆ 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:645
bool calculate_div_phi
Should we calculate shape function divergences?
Definition: fe_abstract.h:696
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:701

◆ 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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
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:675

◆ 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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
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:645
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:701
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:675

◆ 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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701

◆ 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:645
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:701
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:675

◆ 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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:675
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:645
libmesh_assert(ctx)
bool calculate_dphiref
Should we calculate reference shape function gradients?
Definition: fe_abstract.h:701

◆ 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:681
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
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:701
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:650

◆ 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:645
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:701
bool calculate_dphi
Should we calculate shape function gradients?
Definition: fe_abstract.h:675
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:650

◆ 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:645
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:650

◆ 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 373 of file fe_abstract.h.

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

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

◆ 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 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_dxidy(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 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_dxidz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 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_dxyzdeta(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 303 of file fe_abstract.h.

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

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

◆ 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 319 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map.

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

◆ 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 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_dzetadx(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 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_dzetady(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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 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_dzetadz(); }
bool calculate_map
Are we calculating mapping functions?
Definition: fe_abstract.h:665
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ get_family()

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

Definition at line 526 of file fe_abstract.h.

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

526 { return fe_type.family; }
FEFamily family
The type of finite element.
Definition: fe_type.h:207
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709

◆ 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 534 of file fe_abstract.h.

References libMesh::FEAbstract::_fe_map.

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

◆ 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 295 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(), 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()(), libMesh::RBEIMEvaluation::project_qp_data_map_onto_system(), SolidSystem::side_time_derivative(), ElasticitySystem::side_time_derivative(), and libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::SubFunctor().

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

◆ 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 284 of file fe_abstract.h.

References libMesh::FEAbstract::get_JxW().

Referenced by assemble_func(), and assemble_SchroedingerEquation().

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

◆ 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 261 of file fe_abstract.h.

References libMesh::FEAbstract::calculate_nothing.

Referenced by CoupledSystemQoI::init_context(), NavierSystem::init_context(), ElasticitySystem::init_context(), CoupledSystem::init_context(), HeatSystem::init_context(), and Integrate::operator()().

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

◆ get_order()

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

Definition at line 504 of file fe_abstract.h.

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

505  { return static_cast<Order>(fe_type.order + _p_level); }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:732
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709

◆ 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 494 of file fe_abstract.h.

References libMesh::FEAbstract::_p_level.

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

◆ 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:645
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:670
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 373 of file fe_abstract.C.

References libMesh::EDGE2, libMesh::EDGE3, libMesh::EDGE4, libMesh::Utility::enum_to_string(), libMesh::HEX20, libMesh::HEX27, libMesh::HEX8, 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::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().

374 {
375  nodes.resize(Elem::type_to_n_nodes_map[itemType]);
376  switch(itemType)
377  {
378  case NODEELEM:
379  {
380  nodes[0] = Point (0.,0.,0.);
381  return;
382  }
383  case EDGE3:
384  {
385  nodes[2] = Point (0.,0.,0.);
386  libmesh_fallthrough();
387  }
388  case EDGE2:
389  {
390  nodes[0] = Point (-1.,0.,0.);
391  nodes[1] = Point (1.,0.,0.);
392  return;
393  }
394  case EDGE4: // not nested with EDGE3
395  {
396  nodes[0] = Point (-1.,0.,0.);
397  nodes[1] = Point (1.,0.,0.);
398  nodes[2] = Point (-1./3.,0.,0.);
399  nodes[3] - Point (1./3.,0.,0.);
400  return;
401  }
402  case TRI7:
403  {
404  nodes[6] = Point (1./3.,1./3.,0.);
405  libmesh_fallthrough();
406  }
407  case TRI6:
408  {
409  nodes[3] = Point (.5,0.,0.);
410  nodes[4] = Point (.5,.5,0.);
411  nodes[5] = Point (0.,.5,0.);
412  libmesh_fallthrough();
413  }
414  case TRI3:
415  case TRISHELL3:
416  {
417  nodes[0] = Point (0.,0.,0.);
418  nodes[1] = Point (1.,0.,0.);
419  nodes[2] = Point (0.,1.,0.);
420  return;
421  }
422  case QUAD9:
423  {
424  nodes[8] = Point (0.,0.,0.);
425  libmesh_fallthrough();
426  }
427  case QUAD8:
428  case QUADSHELL8:
429  {
430  nodes[4] = Point (0.,-1.,0.);
431  nodes[5] = Point (1.,0.,0.);
432  nodes[6] = Point (0.,1.,0.);
433  nodes[7] = Point (-1.,0.,0.);
434  libmesh_fallthrough();
435  }
436  case QUAD4:
437  case QUADSHELL4:
438  {
439  nodes[0] = Point (-1.,-1.,0.);
440  nodes[1] = Point (1.,-1.,0.);
441  nodes[2] = Point (1.,1.,0.);
442  nodes[3] = Point (-1.,1.,0.);
443  return;
444  }
445  case TET14:
446  {
447  nodes[10] = Point (1/Real(3),1/Real(3),0.);
448  nodes[11] = Point (1/Real(3),0.,1/Real(3));
449  nodes[12] = Point (1/Real(3),1/Real(3),1/Real(3));
450  nodes[13] = Point (0.,1/Real(3),1/Real(3));
451  libmesh_fallthrough();
452  }
453  case TET10:
454  {
455  nodes[4] = Point (.5,0.,0.);
456  nodes[5] = Point (.5,.5,0.);
457  nodes[6] = Point (0.,.5,0.);
458  nodes[7] = Point (0.,0.,.5);
459  nodes[8] = Point (.5,0.,.5);
460  nodes[9] = Point (0.,.5,.5);
461  libmesh_fallthrough();
462  }
463  case TET4:
464  {
465  nodes[0] = Point (0.,0.,0.);
466  nodes[1] = Point (1.,0.,0.);
467  nodes[2] = Point (0.,1.,0.);
468  nodes[3] = Point (0.,0.,1.);
469  return;
470  }
471  case HEX27:
472  {
473  nodes[20] = Point (0.,0.,-1.);
474  nodes[21] = Point (0.,-1.,0.);
475  nodes[22] = Point (1.,0.,0.);
476  nodes[23] = Point (0.,1.,0.);
477  nodes[24] = Point (-1.,0.,0.);
478  nodes[25] = Point (0.,0.,1.);
479  nodes[26] = Point (0.,0.,0.);
480  libmesh_fallthrough();
481  }
482  case HEX20:
483  {
484  nodes[8] = Point (0.,-1.,-1.);
485  nodes[9] = Point (1.,0.,-1.);
486  nodes[10] = Point (0.,1.,-1.);
487  nodes[11] = Point (-1.,0.,-1.);
488  nodes[12] = Point (-1.,-1.,0.);
489  nodes[13] = Point (1.,-1.,0.);
490  nodes[14] = Point (1.,1.,0.);
491  nodes[15] = Point (-1.,1.,0.);
492  nodes[16] = Point (0.,-1.,1.);
493  nodes[17] = Point (1.,0.,1.);
494  nodes[18] = Point (0.,1.,1.);
495  nodes[19] = Point (-1.,0.,1.);
496  libmesh_fallthrough();
497  }
498  case HEX8:
499  {
500  nodes[0] = Point (-1.,-1.,-1.);
501  nodes[1] = Point (1.,-1.,-1.);
502  nodes[2] = Point (1.,1.,-1.);
503  nodes[3] = Point (-1.,1.,-1.);
504  nodes[4] = Point (-1.,-1.,1.);
505  nodes[5] = Point (1.,-1.,1.);
506  nodes[6] = Point (1.,1.,1.);
507  nodes[7] = Point (-1.,1.,1.);
508  return;
509  }
510  case PRISM21:
511  {
512  nodes[20] = Point (1/Real(3),1/Real(3),0);
513  libmesh_fallthrough();
514  }
515  case PRISM20:
516  {
517  nodes[18] = Point (1/Real(3),1/Real(3),-1);
518  nodes[19] = Point (1/Real(3),1/Real(3),1);
519  libmesh_fallthrough();
520  }
521  case PRISM18:
522  {
523  nodes[15] = Point (.5,0.,0.);
524  nodes[16] = Point (.5,.5,0.);
525  nodes[17] = Point (0.,.5,0.);
526  libmesh_fallthrough();
527  }
528  case PRISM15:
529  {
530  nodes[6] = Point (.5,0.,-1.);
531  nodes[7] = Point (.5,.5,-1.);
532  nodes[8] = Point (0.,.5,-1.);
533  nodes[9] = Point (0.,0.,0.);
534  nodes[10] = Point (1.,0.,0.);
535  nodes[11] = Point (0.,1.,0.);
536  nodes[12] = Point (.5,0.,1.);
537  nodes[13] = Point (.5,.5,1.);
538  nodes[14] = Point (0.,.5,1.);
539  libmesh_fallthrough();
540  }
541  case PRISM6:
542  {
543  nodes[0] = Point (0.,0.,-1.);
544  nodes[1] = Point (1.,0.,-1.);
545  nodes[2] = Point (0.,1.,-1.);
546  nodes[3] = Point (0.,0.,1.);
547  nodes[4] = Point (1.,0.,1.);
548  nodes[5] = Point (0.,1.,1.);
549  return;
550  }
551  case PYRAMID18:
552  {
553  // triangle centers
554  nodes[14] = Point (-2/Real(3),0.,1/Real(3));
555  nodes[15] = Point (0.,2/Real(3),1/Real(3));
556  nodes[16] = Point (2/Real(3),0.,1/Real(3));
557  nodes[17] = Point (0.,-2/Real(3),1/Real(3));
558 
559  libmesh_fallthrough();
560  }
561  case PYRAMID14:
562  {
563  // base center
564  nodes[13] = Point (0.,0.,0.);
565 
566  libmesh_fallthrough();
567  }
568  case PYRAMID13:
569  {
570  // base midedge
571  nodes[5] = Point (0.,-1.,0.);
572  nodes[6] = Point (1.,0.,0.);
573  nodes[7] = Point (0.,1.,0.);
574  nodes[8] = Point (-1,0.,0.);
575 
576  // lateral midedge
577  nodes[9] = Point (-.5,-.5,.5);
578  nodes[10] = Point (.5,-.5,.5);
579  nodes[11] = Point (.5,.5,.5);
580  nodes[12] = Point (-.5,.5,.5);
581 
582  libmesh_fallthrough();
583  }
584  case PYRAMID5:
585  {
586  // base corners
587  nodes[0] = Point (-1.,-1.,0.);
588  nodes[1] = Point (1.,-1.,0.);
589  nodes[2] = Point (1.,1.,0.);
590  nodes[3] = Point (-1.,1.,0.);
591  // apex
592  nodes[4] = Point (0.,0.,1.);
593  return;
594  }
595 
596  default:
597  libmesh_error_msg("ERROR: Unknown element type " << Utility::enum_to_string(itemType));
598  }
599 }
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:610
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 444 of file fe_abstract.h.

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

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

◆ get_type()

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

Definition at line 488 of file fe_abstract.h.

References libMesh::FEAbstract::elem_type.

488 { return elem_type; }
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ 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 272 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().

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

◆ 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 732 of file fe.C.

734 {
735  this->elem_type = e->type();
736  this->_fe_map->template init_reference_to_physical_map<Dim>(qp, e);
737  init_shape_functions(qp, e);
738 }
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:396
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ 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 366 of file fe.C.

367 {
368  if (!this->calculate_dual)
369  return;
370 
371  libmesh_assert_msg(this->calculate_phi,
372  "dual shape function calculation relies on "
373  "primal shape functions being calculated");
374 
375  this->dual_phi.resize(n_shapes);
376  if (this->calculate_dphi)
377  this->dual_dphi.resize(n_shapes);
378 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
379  if (this->calculate_d2phi)
380  this->dual_d2phi.resize(n_shapes);
381 #endif
382 
383  for (auto i : index_range(this->dual_phi))
384  {
385  this->dual_phi[i].resize(n_qp);
386  if (this->calculate_dphi)
387  this->dual_dphi[i].resize(n_qp);
388 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
389  if (this->calculate_d2phi)
390  this->dual_d2phi[i].resize(n_qp);
391 #endif
392  }
393 }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:681
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:670
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:675
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:650
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:111

◆ init_shape_functions()

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

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.

Definition at line 396 of file fe.C.

398 {
399  // Start logging the shape function initialization
400  LOG_SCOPE("init_shape_functions()", "FE");
401 
402  // The number of quadrature points.
403  const unsigned int n_qp = cast_int<unsigned int>(qp.size());
404 
405  // Number of shape functions in the finite element approximation
406  // space.
407  const unsigned int n_approx_shape_functions =
408  this->n_shape_functions(this->get_type(),
409  this->get_order());
410 
411  // Maybe we already have correctly-sized data? Check data sizes,
412  // and get ready to break out of a "loop" if all these resize()
413  // calls are redundant.
414  unsigned int old_n_qp = 0;
415  do
416  {
417  // resize the vectors to hold current data
418  // Phi are the shape functions used for the FE approximation
419  // Phi_map are the shape functions used for the FE mapping
420  if (this->calculate_phi)
421  {
422  if (this->phi.size() == n_approx_shape_functions)
423  {
424  old_n_qp = n_approx_shape_functions ? this->phi[0].size() : 0;
425  break;
426  }
427  this->phi.resize (n_approx_shape_functions);
428  }
429  if (this->calculate_dphi)
430  {
431  if (this->dphi.size() == n_approx_shape_functions)
432  {
433  old_n_qp = n_approx_shape_functions ? this->dphi[0].size() : 0;
434  break;
435  }
436  this->dphi.resize (n_approx_shape_functions);
437  this->dphidx.resize (n_approx_shape_functions);
438  this->dphidy.resize (n_approx_shape_functions);
439  this->dphidz.resize (n_approx_shape_functions);
440  }
441 
442  if (this->calculate_dphiref)
443  {
444  if (Dim > 0)
445  {
446  if (this->dphidxi.size() == n_approx_shape_functions)
447  {
448  old_n_qp = n_approx_shape_functions ? this->dphidxi[0].size() : 0;
449  break;
450  }
451  this->dphidxi.resize (n_approx_shape_functions);
452  }
453 
454  if (Dim > 1)
455  this->dphideta.resize (n_approx_shape_functions);
456 
457  if (Dim > 2)
458  this->dphidzeta.resize (n_approx_shape_functions);
459  }
460 
461  if (this->calculate_curl_phi && (FEInterface::field_type(T) == TYPE_VECTOR))
462  this->curl_phi.resize(n_approx_shape_functions);
463 
464  if (this->calculate_div_phi && (FEInterface::field_type(T) == TYPE_VECTOR))
465  this->div_phi.resize(n_approx_shape_functions);
466 
467 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
468  if (this->calculate_d2phi)
469  {
470  if (this->d2phi.size() == n_approx_shape_functions)
471  {
472  old_n_qp = n_approx_shape_functions ? this->d2phi[0].size() : 0;
473  break;
474  }
475 
476  this->d2phi.resize (n_approx_shape_functions);
477  this->d2phidx2.resize (n_approx_shape_functions);
478  this->d2phidxdy.resize (n_approx_shape_functions);
479  this->d2phidxdz.resize (n_approx_shape_functions);
480  this->d2phidy2.resize (n_approx_shape_functions);
481  this->d2phidydz.resize (n_approx_shape_functions);
482  this->d2phidz2.resize (n_approx_shape_functions);
483 
484  if (Dim > 0)
485  this->d2phidxi2.resize (n_approx_shape_functions);
486 
487  if (Dim > 1)
488  {
489  this->d2phidxideta.resize (n_approx_shape_functions);
490  this->d2phideta2.resize (n_approx_shape_functions);
491  }
492  if (Dim > 2)
493  {
494  this->d2phidxidzeta.resize (n_approx_shape_functions);
495  this->d2phidetadzeta.resize (n_approx_shape_functions);
496  this->d2phidzeta2.resize (n_approx_shape_functions);
497  }
498  }
499 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
500  }
501  while (false);
502 
503  if (old_n_qp != n_qp)
504  for (unsigned int i=0; i<n_approx_shape_functions; i++)
505  {
506  if (this->calculate_phi)
507  this->phi[i].resize (n_qp);
508 
509  if (this->calculate_dphi)
510  {
511  this->dphi[i].resize (n_qp);
512  this->dphidx[i].resize (n_qp);
513  this->dphidy[i].resize (n_qp);
514  this->dphidz[i].resize (n_qp);
515  }
516 
517  if (this->calculate_dphiref)
518  {
519  if (Dim > 0)
520  this->dphidxi[i].resize(n_qp);
521 
522  if (Dim > 1)
523  this->dphideta[i].resize(n_qp);
524 
525  if (Dim > 2)
526  this->dphidzeta[i].resize(n_qp);
527  }
528 
529  if (this->calculate_curl_phi && (FEInterface::field_type(T) == TYPE_VECTOR))
530  this->curl_phi[i].resize(n_qp);
531 
532  if (this->calculate_div_phi && (FEInterface::field_type(T) == TYPE_VECTOR))
533  this->div_phi[i].resize(n_qp);
534 
535 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
536  if (this->calculate_d2phi)
537  {
538  this->d2phi[i].resize (n_qp);
539  this->d2phidx2[i].resize (n_qp);
540  this->d2phidxdy[i].resize (n_qp);
541  this->d2phidxdz[i].resize (n_qp);
542  this->d2phidy2[i].resize (n_qp);
543  this->d2phidydz[i].resize (n_qp);
544  this->d2phidz2[i].resize (n_qp);
545  if (Dim > 0)
546  this->d2phidxi2[i].resize (n_qp);
547  if (Dim > 1)
548  {
549  this->d2phidxideta[i].resize (n_qp);
550  this->d2phideta2[i].resize (n_qp);
551  }
552  if (Dim > 2)
553  {
554  this->d2phidxidzeta[i].resize (n_qp);
555  this->d2phidetadzeta[i].resize (n_qp);
556  this->d2phidzeta2[i].resize (n_qp);
557  }
558  }
559 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
560  }
561 
562 
563 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
564  //------------------------------------------------------------
565  // Initialize the data fields, which should only be used for infinite
566  // elements, to some sensible values, so that using a FE with the
567  // variational formulation of an InfFE, correct element matrices are
568  // returned
569 
570  {
571  if (this->calculate_phi || this->calculate_dphi)
572  {
573  this->weight.resize (n_qp);
574  for (unsigned int p=0; p<n_qp; p++)
575  this->weight[p] = 1.;
576  }
577 
578  if (this->calculate_dphi)
579  {
580  this->dweight.resize (n_qp);
581  this->dphase.resize (n_qp);
582  for (unsigned int p=0; p<n_qp; p++)
583  {
584  this->dweight[p].zero();
585  this->dphase[p].zero();
586  }
587  }
588  }
589 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
590 
591  // Compute the values of the shape function derivatives
592  if (this->calculate_dphiref && Dim > 0)
593  {
594  std::vector<std::vector<OutputShape>> * comps[3]
595  { &this->dphidxi, &this->dphideta, &this->dphidzeta };
596  FE<Dim,T>::all_shape_derivs(elem, this->fe_type.order, qp, comps, this->_add_p_level_in_reinit);
597  }
598 
599  switch (Dim)
600  {
601 
602  //------------------------------------------------------------
603  // 0D
604  case 0:
605  {
606  break;
607  }
608 
609  //------------------------------------------------------------
610  // 1D
611  case 1:
612  {
613 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
614  // Compute the value of shape function i Hessians at quadrature point p
615  if (this->calculate_d2phi)
616  for (unsigned int i=0; i<n_approx_shape_functions; i++)
617  for (unsigned int p=0; p<n_qp; p++)
618  this->d2phidxi2[i][p] = FE<Dim, T>::shape_second_deriv(
619  elem, this->fe_type.order, i, 0, qp[p], this->_add_p_level_in_reinit);
620 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
621 
622  break;
623  }
624 
625 
626 
627  //------------------------------------------------------------
628  // 2D
629  case 2:
630  {
631 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
632  // Compute the value of shape function i Hessians at quadrature point p
633  if (this->calculate_d2phi)
634  for (unsigned int i=0; i<n_approx_shape_functions; i++)
635  for (unsigned int p=0; p<n_qp; p++)
636  {
637  this->d2phidxi2[i][p] = FE<Dim, T>::shape_second_deriv(
638  elem, this->fe_type.order, i, 0, qp[p], this->_add_p_level_in_reinit);
639  this->d2phidxideta[i][p] = FE<Dim, T>::shape_second_deriv(
640  elem, this->fe_type.order, i, 1, qp[p], this->_add_p_level_in_reinit);
641  this->d2phideta2[i][p] = FE<Dim, T>::shape_second_deriv(
642  elem, this->fe_type.order, i, 2, qp[p], this->_add_p_level_in_reinit);
643  }
644 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
645 
646 
647  break;
648  }
649 
650 
651 
652  //------------------------------------------------------------
653  // 3D
654  case 3:
655  {
656 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
657  // Compute the value of shape function i Hessians at quadrature point p
658  if (this->calculate_d2phi)
659  for (unsigned int i=0; i<n_approx_shape_functions; i++)
660  for (unsigned int p=0; p<n_qp; p++)
661  {
662  this->d2phidxi2[i][p] = FE<Dim, T>::shape_second_deriv(
663  elem, this->fe_type.order, i, 0, qp[p], this->_add_p_level_in_reinit);
664  this->d2phidxideta[i][p] = FE<Dim, T>::shape_second_deriv(
665  elem, this->fe_type.order, i, 1, qp[p], this->_add_p_level_in_reinit);
666  this->d2phideta2[i][p] = FE<Dim, T>::shape_second_deriv(
667  elem, this->fe_type.order, i, 2, qp[p], this->_add_p_level_in_reinit);
668  this->d2phidxidzeta[i][p] = FE<Dim, T>::shape_second_deriv(
669  elem, this->fe_type.order, i, 3, qp[p], this->_add_p_level_in_reinit);
670  this->d2phidetadzeta[i][p] = FE<Dim, T>::shape_second_deriv(
671  elem, this->fe_type.order, i, 4, qp[p], this->_add_p_level_in_reinit);
672  this->d2phidzeta2[i][p] = FE<Dim, T>::shape_second_deriv(
673  elem, this->fe_type.order, i, 5, qp[p], this->_add_p_level_in_reinit);
674  }
675 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
676 
677  break;
678  }
679 
680 
681  default:
682  libmesh_error_msg("Invalid dimension Dim = " << Dim);
683  }
684 
685  if (this->calculate_dual)
686  this->init_dual_shape_functions(n_approx_shape_functions, n_qp);
687 }
Order get_order() const
Definition: fe_abstract.h:504
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:681
bool calculate_curl_phi
Should we calculate shape function curls?
Definition: fe_abstract.h:691
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
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 > > dphidzeta
Shape function derivatives in the zeta direction.
Definition: fe_base.h:651
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:670
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:366
ElemType get_type() const
Definition: fe_abstract.h:488
std::vector< std::vector< OutputShape > > d2phidxideta
Shape function second derivatives in the xi-eta direction.
Definition: fe_base.h:685
std::vector< Real > weight
Used for certain infinite element families: the additional radial weight in local coordinates...
Definition: fe_base.h:767
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
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:696
std::vector< std::vector< OutputShape > > d2phidetadzeta
Shape function second derivatives in the eta-zeta direction.
Definition: fe_base.h:700
std::vector< std::vector< OutputShape > > d2phidxidzeta
Shape function second derivatives in the xi-zeta direction.
Definition: fe_base.h:690
std::vector< std::vector< OutputShape > > d2phidxdy
Shape function second derivatives in the x-y direction.
Definition: fe_base.h:715
virtual unsigned int n_shape_functions() const override
Definition: fe.C:61
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
std::vector< std::vector< OutputShape > > d2phideta2
Shape function second derivatives in the eta direction.
Definition: fe_base.h:695
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
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:701
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:675
std::vector< std::vector< OutputShape > > d2phidz2
Shape function second derivatives in the z direction.
Definition: fe_base.h:735
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:709
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:650
std::vector< std::vector< OutputShape > > d2phidzeta2
Shape function second derivatives in the zeta direction.
Definition: fe_base.h:705
std::vector< std::vector< OutputShape > > dphidz
Shape function derivatives in the z direction.
Definition: fe_base.h:666
std::vector< std::vector< OutputShape > > dphideta
Shape function derivatives in the eta direction.
Definition: fe_base.h:646
std::vector< RealGradient > dweight
Used for certain infinite element families: the global derivative of the additional radial weight ...
Definition: fe_base.h:760

◆ 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 484 of file fe.h.

488  {
489  // libmesh_deprecated(); // soon
490  return FEMap::inverse_map(Dim, elem, p, tolerance, secure, secure);
491  }

◆ 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 493 of file fe.h.

498  {
499  // libmesh_deprecated(); // soon
500  FEMap::inverse_map(Dim, elem, physical_points, reference_points,
501  tolerance, secure, secure);
502  }

◆ inverse_map() [3/4]

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

Definition at line 941 of file fe_subdivision_2D.C.

945 {
946  libmesh_not_implemented();
947 }

◆ 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 950 of file fe_subdivision_2D.C.

955 {
956  libmesh_not_implemented();
957 }

◆ 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 86 of file fe_scalar.C.

86 { 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 87 of file fe_scalar.C.

87 { 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 88 of file fe_scalar.C.

88 { 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 89 of file fe_scalar.C.

89 { 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 154 of file fe_rational.C.

154 { 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 155 of file fe_rational.C.

155 { 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 156 of file fe_rational.C.

156 { 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 157 of file fe_rational.C.

157 { 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 177 of file fe_l2_hierarchic.C.

177 { 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 178 of file fe_l2_hierarchic.C.

178 { 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 179 of file fe_l2_hierarchic.C.

179 { 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 180 of file fe_l2_hierarchic.C.

180 { 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 239 of file fe_l2_lagrange.C.

239 { 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 240 of file fe_l2_lagrange.C.

240 { 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 241 of file fe_l2_lagrange.C.

241 { 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 242 of file fe_l2_lagrange.C.

242 { return false; }

◆ is_hierarchic() [17/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 267 of file fe_side_hierarchic.C.

267 { return true; }

◆ is_hierarchic() [18/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 268 of file fe_side_hierarchic.C.

268 { return true; }

◆ is_hierarchic() [19/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 269 of file fe_side_hierarchic.C.

269 { return true; }

◆ is_hierarchic() [20/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 270 of file fe_side_hierarchic.C.

270 { return true; }

◆ is_hierarchic() [21/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 274 of file fe_clough.C.

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

◆ is_hierarchic() [22/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 275 of file fe_clough.C.

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

◆ is_hierarchic() [23/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 276 of file fe_clough.C.

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

◆ is_hierarchic() [24/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 277 of file fe_clough.C.

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

◆ 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 310 of file fe_hermite.C.

310 { 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 311 of file fe_hermite.C.

311 { 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 312 of file fe_hermite.C.

312 { 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 313 of file fe_hermite.C.

313 { return true; }

◆ is_hierarchic() [29/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 397 of file fe_monomial.C.

397 { return true; }

◆ is_hierarchic() [30/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 398 of file fe_monomial.C.

398 { return true; }

◆ is_hierarchic() [31/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 399 of file fe_monomial.C.

399 { return true; }

◆ is_hierarchic() [32/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 400 of file fe_monomial.C.

400 { return true; }

◆ is_hierarchic() [33/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 404 of file fe_xyz.C.

404 { return true; }

◆ is_hierarchic() [34/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 405 of file fe_xyz.C.

405 { return true; }

◆ is_hierarchic() [35/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 406 of file fe_xyz.C.

406 { return true; }

◆ is_hierarchic() [36/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 407 of file fe_xyz.C.

407 { return true; }

◆ 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 426 of file fe_bernstein.C.

426 { return false; }

◆ is_hierarchic() [38/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 427 of file fe_bernstein.C.

427 { return false; }

◆ is_hierarchic() [39/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 428 of file fe_bernstein.C.

428 { return false; }

◆ is_hierarchic() [40/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 429 of file fe_bernstein.C.

429 { return false; }

◆ is_hierarchic() [41/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() [42/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 479 of file fe_hierarchic.C.

479 { return true; }

◆ is_hierarchic() [43/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 480 of file fe_hierarchic.C.

480 { return true; }

◆ is_hierarchic() [44/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 481 of file fe_hierarchic.C.

481 { return true; }

◆ is_hierarchic() [45/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 482 of file fe_hierarchic.C.

482 { return true; }

◆ is_hierarchic() [46/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 501 of file fe_raviart.C.

501 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [47/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 502 of file fe_raviart.C.

502 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [48/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 503 of file fe_raviart.C.

503 { return false; }

◆ is_hierarchic() [49/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 504 of file fe_raviart.C.

504 { return false; }

◆ is_hierarchic() [50/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 505 of file fe_raviart.C.

505 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [51/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 506 of file fe_raviart.C.

506 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [52/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 507 of file fe_raviart.C.

507 { return false; }

◆ is_hierarchic() [53/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 508 of file fe_raviart.C.

508 { return false; }

◆ is_hierarchic() [54/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 510 of file fe_nedelec_one.C.

510 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [55/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 511 of file fe_nedelec_one.C.

511 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ is_hierarchic() [56/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 512 of file fe_nedelec_one.C.

512 { return false; }

◆ is_hierarchic() [57/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 513 of file fe_nedelec_one.C.

513 { return false; }

◆ 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 801 of file fe_monomial_vec.C.

802 {
803  return true;
804 }

◆ 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 807 of file fe_monomial_vec.C.

808 {
809  return true;
810 }

◆ 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 813 of file fe_monomial_vec.C.

814 {
815  return true;
816 }

◆ 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 819 of file fe_monomial_vec.C.

820 {
821  return true;
822 }

◆ 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 826 of file fe_hierarchic_vec.C.

826 { 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 827 of file fe_hierarchic_vec.C.

827 { 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 828 of file fe_hierarchic_vec.C.

828 { 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 829 of file fe_hierarchic_vec.C.

829 { 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 830 of file fe_hierarchic_vec.C.

830 { 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 831 of file fe_hierarchic_vec.C.

831 { 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 832 of file fe_hierarchic_vec.C.

832 { 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 833 of file fe_hierarchic_vec.C.

833 { 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 978 of file fe_subdivision_2D.C.

978 { 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 1023 of file fe_lagrange.C.

1023 { 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 1024 of file fe_lagrange.C.

1024 { 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 1025 of file fe_lagrange.C.

1025 { 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 1026 of file fe_lagrange.C.

1026 { 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 1301 of file fe_szabab.C.

1301 { 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 1302 of file fe_szabab.C.

1302 { 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 1303 of file fe_szabab.C.

1303 { 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 1304 of file fe_szabab.C.

1304 { 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 1363 of file fe_lagrange_vec.C.

1363 { 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 1364 of file fe_lagrange_vec.C.

1364 { 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 1365 of file fe_lagrange_vec.C.

1365 { 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 1366 of file fe_lagrange_vec.C.

1366 { 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 1367 of file fe_lagrange_vec.C.

1367 { 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 1368 of file fe_lagrange_vec.C.

1368 { 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 1369 of file fe_lagrange_vec.C.

1369 { 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 1370 of file fe_lagrange_vec.C.

1370 { return false; }

◆ map()

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

Definition at line 617 of file fe.h.

619  {
620  // libmesh_deprecated(); // soon
621  return FEMap::map(Dim, elem, reference_point);
622  }

◆ map_eta()

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

Definition at line 631 of file fe.h.

633  {
634  // libmesh_deprecated(); // soon
635  return FEMap::map_deriv(Dim, elem, 1, reference_point);
636  }

◆ map_xi()

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

Definition at line 624 of file fe.h.

626  {
627  // libmesh_deprecated(); // soon
628  return FEMap::map_deriv(Dim, elem, 0, reference_point);
629  }

◆ map_zeta()

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

Definition at line 638 of file fe.h.

640  {
641  // libmesh_deprecated(); // soon
642  return FEMap::map_deriv(Dim, elem, 2, reference_point);
643  }

◆ n_dofs() [1/72]

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/72]

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/72]

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/72]

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

Definition at line 131 of file fe_rational.C.

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

◆ n_dofs() [5/72]

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

Definition at line 132 of file fe_rational.C.

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

◆ n_dofs() [6/72]

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

Definition at line 133 of file fe_rational.C.

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

◆ n_dofs() [7/72]

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

Definition at line 153 of file fe_l2_hierarchic.C.

153 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs() [8/72]

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

Definition at line 154 of file fe_l2_hierarchic.C.

154 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs() [9/72]

unsigned int libMesh::FE< 3, 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() [10/72]

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

Definition at line 214 of file fe_l2_lagrange.C.

214 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs() [11/72]

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

Definition at line 215 of file fe_l2_lagrange.C.

215 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs() [12/72]

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

Definition at line 216 of file fe_l2_lagrange.C.

216 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs() [13/72]

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

Definition at line 243 of file fe_side_hierarchic.C.

243 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [14/72]

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

Definition at line 244 of file fe_side_hierarchic.C.

244 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [15/72]

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

Definition at line 245 of file fe_side_hierarchic.C.

245 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [16/72]

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

Definition at line 246 of file fe_side_hierarchic.C.

246 { return side_hierarchic_n_dofs(t, o); }

◆ n_dofs() [17/72]

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

Definition at line 250 of file fe_clough.C.

250 { return clough_n_dofs(t, o); }

◆ n_dofs() [18/72]

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

Definition at line 251 of file fe_clough.C.

251 { return clough_n_dofs(t, o); }

◆ n_dofs() [19/72]

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

Definition at line 252 of file fe_clough.C.

252 { return clough_n_dofs(t, o); }

◆ n_dofs() [20/72]

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

Definition at line 286 of file fe_hermite.C.

286 { return hermite_n_dofs(t, o); }

◆ n_dofs() [21/72]

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

Definition at line 287 of file fe_hermite.C.

287 { return hermite_n_dofs(t, o); }

◆ n_dofs() [22/72]

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

Definition at line 288 of file fe_hermite.C.

288 { return hermite_n_dofs(t, o); }

◆ n_dofs() [23/72]

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

Definition at line 371 of file fe_monomial.C.

371 { 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:30

◆ n_dofs() [24/72]

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

Definition at line 372 of file fe_monomial.C.

372 { 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:30

◆ n_dofs() [25/72]

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

Definition at line 373 of file fe_monomial.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:30

◆ n_dofs() [26/72]

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

Definition at line 379 of file fe_xyz.C.

379 { 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:30

◆ n_dofs() [27/72]

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

Definition at line 380 of file fe_xyz.C.

380 { 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:30

◆ n_dofs() [28/72]

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

Definition at line 381 of file fe_xyz.C.

381 { 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:30

◆ n_dofs() [29/72]

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

Definition at line 403 of file fe_bernstein.C.

403 { return bernstein_n_dofs(t, o); }

◆ n_dofs() [30/72]

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

Definition at line 404 of file fe_bernstein.C.

404 { return bernstein_n_dofs(t, o); }

◆ n_dofs() [31/72]

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

Definition at line 405 of file fe_bernstein.C.

405 { return bernstein_n_dofs(t, o); }

◆ n_dofs() [32/72]

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.

◆ n_dofs() [33/72]

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

Definition at line 455 of file fe_raviart.C.

455 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [34/72]

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

Definition at line 456 of file fe_hierarchic.C.

456 { return hierarchic_n_dofs(t, o); }

◆ n_dofs() [35/72]

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

Definition at line 456 of file fe_raviart.C.

456 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [36/72]

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

Definition at line 457 of file fe_hierarchic.C.

457 { return hierarchic_n_dofs(t, o); }

◆ n_dofs() [37/72]

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

Definition at line 457 of file fe_raviart.C.

457 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [38/72]

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

Definition at line 458 of file fe_hierarchic.C.

458 { return hierarchic_n_dofs(t, o); }

◆ n_dofs() [39/72]

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

Definition at line 458 of file fe_raviart.C.

458 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [40/72]

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

Definition at line 459 of file fe_raviart.C.

459 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [41/72]

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

Definition at line 460 of file fe_raviart.C.

460 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [42/72]

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

Definition at line 461 of file fe_raviart.C.

461 { return raviart_thomas_n_dofs(t, o); }

◆ n_dofs() [43/72]

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

Definition at line 483 of file fe_nedelec_one.C.

483 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs() [44/72]

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

Definition at line 484 of file fe_nedelec_one.C.

484 { return nedelec_one_n_dofs(t, o); }

◆ n_dofs() [45/72]

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

Definition at line 485 of file fe_nedelec_one.C.

485 { return nedelec_one_n_dofs(t, o); }

◆ n_dofs() [46/72]

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

Definition at line 699 of file fe_monomial_vec.C.

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

◆ n_dofs() [47/72]

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

Definition at line 705 of file fe_monomial_vec.C.

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

◆ n_dofs() [48/72]

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

Definition at line 711 of file fe_monomial_vec.C.

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

◆ n_dofs() [49/72]

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

Definition at line 717 of file fe_monomial_vec.C.

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

◆ n_dofs() [50/72]

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

Definition at line 779 of file fe_hierarchic_vec.C.

779 { return FE<0,HIERARCHIC>::n_dofs(t,o); }

◆ n_dofs() [51/72]

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

Definition at line 780 of file fe_hierarchic_vec.C.

780 { return FE<1,HIERARCHIC>::n_dofs(t,o); }

◆ n_dofs() [52/72]

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

Definition at line 781 of file fe_hierarchic_vec.C.

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

◆ n_dofs() [53/72]

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

Definition at line 782 of file fe_hierarchic_vec.C.

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

◆ n_dofs() [54/72]

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

Definition at line 784 of file fe_hierarchic_vec.C.

784 { return FE<0,L2_HIERARCHIC>::n_dofs(t,o); }

◆ n_dofs() [55/72]

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

Definition at line 785 of file fe_hierarchic_vec.C.

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

◆ n_dofs() [56/72]

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

Definition at line 786 of file fe_hierarchic_vec.C.

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

◆ n_dofs() [57/72]

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

Definition at line 787 of file fe_hierarchic_vec.C.

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

◆ n_dofs() [58/72]

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

Definition at line 962 of file fe_subdivision_2D.C.

962 { libmesh_not_implemented(); return 0; }

◆ n_dofs() [59/72]

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

Definition at line 996 of file fe_lagrange.C.

996 { return lagrange_n_dofs(t, o); }

◆ n_dofs() [60/72]

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

Definition at line 997 of file fe_lagrange.C.

997 { return lagrange_n_dofs(t, o); }

◆ n_dofs() [61/72]

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

Definition at line 998 of file fe_lagrange.C.

998 { return lagrange_n_dofs(t, o); }

◆ n_dofs() [62/72]

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

Definition at line 1278 of file fe_szabab.C.

1278 { return szabab_n_dofs(t, o); }

◆ n_dofs() [63/72]

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

Definition at line 1279 of file fe_szabab.C.

1279 { return szabab_n_dofs(t, o); }

◆ n_dofs() [64/72]

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

Definition at line 1280 of file fe_szabab.C.

1280 { return szabab_n_dofs(t, o); }

◆ n_dofs() [65/72]

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

Definition at line 1313 of file fe_lagrange_vec.C.

1313 { return FE<0,LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [66/72]

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

Definition at line 1314 of file fe_lagrange_vec.C.

1314 { return FE<1,LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [67/72]

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

Definition at line 1315 of file fe_lagrange_vec.C.

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

◆ n_dofs() [68/72]

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

Definition at line 1316 of file fe_lagrange_vec.C.

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

◆ n_dofs() [69/72]

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

Definition at line 1318 of file fe_lagrange_vec.C.

1318 { return FE<0,L2_LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [70/72]

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

Definition at line 1319 of file fe_lagrange_vec.C.

1319 { return FE<1,L2_LAGRANGE>::n_dofs(t,o); }

◆ n_dofs() [71/72]

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

Definition at line 1320 of file fe_lagrange_vec.C.

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

◆ n_dofs() [72/72]

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

Definition at line 1321 of file fe_lagrange_vec.C.

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

◆ n_dofs_at_node() [1/86]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 67 of file fe_scalar.C.

67 { return 0; }

◆ n_dofs_at_node() [2/86]

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

Definition at line 68 of file fe_scalar.C.

68 { return 0; }

◆ n_dofs_at_node() [3/86]

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

Definition at line 69 of file fe_scalar.C.

69 { return 0; }

◆ n_dofs_at_node() [4/86]

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

Definition at line 70 of file fe_scalar.C.

70 { return 0; }

◆ n_dofs_at_node() [5/86]

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 136 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [6/86]

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 137 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [7/86]

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 138 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [8/86]

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 139 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_at_node() [9/86]

unsigned int libMesh::FE< 0, L2_HIERARCHIC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 159 of file fe_l2_hierarchic.C.

159 { return 0; }

◆ n_dofs_at_node() [10/86]

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

Definition at line 160 of file fe_l2_hierarchic.C.

160 { return 0; }

◆ n_dofs_at_node() [11/86]

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

Definition at line 161 of file fe_l2_hierarchic.C.

161 { return 0; }

◆ n_dofs_at_node() [12/86]

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

Definition at line 162 of file fe_l2_hierarchic.C.

162 { return 0; }

◆ n_dofs_at_node() [13/86]

unsigned int libMesh::FE< 0, L2_LAGRANGE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 220 of file fe_l2_lagrange.C.

220 { return 0; }

◆ n_dofs_at_node() [14/86]

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

Definition at line 221 of file fe_l2_lagrange.C.

221 { return 0; }

◆ n_dofs_at_node() [15/86]

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

Definition at line 222 of file fe_l2_lagrange.C.

222 { return 0; }

◆ n_dofs_at_node() [16/86]

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

Definition at line 223 of file fe_l2_lagrange.C.

223 { return 0; }

◆ n_dofs_at_node() [17/86]

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 249 of file fe_side_hierarchic.C.

249 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [18/86]

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 250 of file fe_side_hierarchic.C.

250 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [19/86]

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 251 of file fe_side_hierarchic.C.

251 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [20/86]

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 252 of file fe_side_hierarchic.C.

252 { return side_hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [21/86]

unsigned int libMesh::FE< 0, CLOUGH >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 256 of file fe_clough.C.

256 { return clough_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [22/86]

unsigned int libMesh::FE< 1, CLOUGH >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 257 of file fe_clough.C.

257 { return clough_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [23/86]

unsigned int libMesh::FE< 2, CLOUGH >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 258 of file fe_clough.C.

258 { return clough_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [24/86]

unsigned int libMesh::FE< 3, CLOUGH >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 259 of file fe_clough.C.

259 { return clough_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [25/86]

unsigned int libMesh::FE< 0, HERMITE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 292 of file fe_hermite.C.

292 { return hermite_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [26/86]

unsigned int libMesh::FE< 1, HERMITE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 293 of file fe_hermite.C.

293 { return hermite_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [27/86]

unsigned int libMesh::FE< 2, HERMITE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 294 of file fe_hermite.C.

294 { return hermite_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [28/86]

unsigned int libMesh::FE< 3, HERMITE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 295 of file fe_hermite.C.

295 { return hermite_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [29/86]

unsigned int libMesh::FE< 0, MONOMIAL >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 377 of file fe_monomial.C.

377 { return 0; }

◆ n_dofs_at_node() [30/86]

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

Definition at line 378 of file fe_monomial.C.

378 { return 0; }

◆ n_dofs_at_node() [31/86]

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

Definition at line 379 of file fe_monomial.C.

379 { return 0; }

◆ n_dofs_at_node() [32/86]

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

Definition at line 380 of file fe_monomial.C.

380 { return 0; }

◆ n_dofs_at_node() [33/86]

unsigned int libMesh::FE< 0, 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() [34/86]

unsigned int libMesh::FE< 1, 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() [35/86]

unsigned int libMesh::FE< 2, 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() [36/86]

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

Definition at line 388 of file fe_xyz.C.

388 { return 0; }

◆ n_dofs_at_node() [37/86]

unsigned int libMesh::FE< 0, BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 408 of file fe_bernstein.C.

408 { return bernstein_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [38/86]

unsigned int libMesh::FE< 1, BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 409 of file fe_bernstein.C.

409 { return bernstein_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [39/86]

unsigned int libMesh::FE< 2, BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 410 of file fe_bernstein.C.

410 { return bernstein_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [40/86]

unsigned int libMesh::FE< 3, BERNSTEIN >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 411 of file fe_bernstein.C.

411 { return bernstein_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [41/86]

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.

◆ n_dofs_at_node() [42/86]

unsigned int libMesh::FE< 0, HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 461 of file fe_hierarchic.C.

461 { return hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [43/86]

unsigned int libMesh::FE< 1, HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 462 of file fe_hierarchic.C.

462 { return hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [44/86]

unsigned int libMesh::FE< 2, HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 463 of file fe_hierarchic.C.

463 { return hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [45/86]

unsigned int libMesh::FE< 3, HIERARCHIC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 464 of file fe_hierarchic.C.

464 { return hierarchic_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [46/86]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 466 of file fe_raviart.C.

466 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [47/86]

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

Definition at line 467 of file fe_raviart.C.

467 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [48/86]

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 468 of file fe_raviart.C.

468 { return raviart_thomas_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [49/86]

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 469 of file fe_raviart.C.

469 { return raviart_thomas_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [50/86]

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

Definition at line 470 of file fe_raviart.C.

470 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [51/86]

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

Definition at line 471 of file fe_raviart.C.

471 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [52/86]

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

Definition at line 472 of file fe_raviart.C.

472 { return 0; }

◆ n_dofs_at_node() [53/86]

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

Definition at line 473 of file fe_raviart.C.

473 { return 0; }

◆ n_dofs_at_node() [54/86]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 490 of file fe_nedelec_one.C.

490 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [55/86]

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

Definition at line 491 of file fe_nedelec_one.C.

491 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_at_node() [56/86]

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 492 of file fe_nedelec_one.C.

492 { return nedelec_one_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [57/86]

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 493 of file fe_nedelec_one.C.

493 { return nedelec_one_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [58/86]

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

Definition at line 724 of file fe_monomial_vec.C.

725 {
726  return 0;
727 }

◆ n_dofs_at_node() [59/86]

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

Definition at line 730 of file fe_monomial_vec.C.

731 {
732  return 0;
733 }

◆ n_dofs_at_node() [60/86]

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

Definition at line 736 of file fe_monomial_vec.C.

737 {
738  return 0;
739 }

◆ n_dofs_at_node() [61/86]

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

Definition at line 742 of file fe_monomial_vec.C.

743 {
744  return 0;
745 }

◆ n_dofs_at_node() [62/86]

unsigned int libMesh::FE< 0, HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 792 of file fe_hierarchic_vec.C.

792 { return FE<0,HIERARCHIC>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [63/86]

unsigned int libMesh::FE< 1, HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 793 of file fe_hierarchic_vec.C.

793 { return FE<1,HIERARCHIC>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [64/86]

unsigned int libMesh::FE< 2, HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 794 of file fe_hierarchic_vec.C.

794 { return 2*FE<2,HIERARCHIC>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [65/86]

unsigned int libMesh::FE< 3, HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 795 of file fe_hierarchic_vec.C.

795 { return 3*FE<2,HIERARCHIC>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [66/86]

unsigned int libMesh::FE< 0, L2_HIERARCHIC_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 797 of file fe_hierarchic_vec.C.

797 { return 0; }

◆ n_dofs_at_node() [67/86]

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

Definition at line 798 of file fe_hierarchic_vec.C.

798 { return 0; }

◆ n_dofs_at_node() [68/86]

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

Definition at line 799 of file fe_hierarchic_vec.C.

799 { return 0; }

◆ n_dofs_at_node() [69/86]

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

Definition at line 800 of file fe_hierarchic_vec.C.

800 { return 0; }

◆ n_dofs_at_node() [70/86]

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

Definition at line 965 of file fe_subdivision_2D.C.

965 { return 1; }

◆ n_dofs_at_node() [71/86]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1003 of file fe_lagrange.C.

1003 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [72/86]

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

Definition at line 1004 of file fe_lagrange.C.

1004 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [73/86]

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

Definition at line 1005 of file fe_lagrange.C.

1005 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [74/86]

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

Definition at line 1006 of file fe_lagrange.C.

1006 { return lagrange_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [75/86]

unsigned int libMesh::FE< 0, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1283 of file fe_szabab.C.

1283 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [76/86]

unsigned int libMesh::FE< 1, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1284 of file fe_szabab.C.

1284 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [77/86]

unsigned int libMesh::FE< 2, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1285 of file fe_szabab.C.

1285 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [78/86]

unsigned int libMesh::FE< 3, SZABAB >::n_dofs_at_node ( const ElemType  t,
const Order  o,
const unsigned int  n 
)
inherited

Definition at line 1286 of file fe_szabab.C.

1286 { return szabab_n_dofs_at_node(t, o, n); }

◆ n_dofs_at_node() [79/86]

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 1326 of file fe_lagrange_vec.C.

1326 { return FE<0,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [80/86]

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 1327 of file fe_lagrange_vec.C.

1327 { return FE<1,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [81/86]

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 1328 of file fe_lagrange_vec.C.

1328 { return 2*FE<2,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [82/86]

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 1329 of file fe_lagrange_vec.C.

1329 { return 3*FE<2,LAGRANGE>::n_dofs_at_node(t,o,n); }

◆ n_dofs_at_node() [83/86]

unsigned int libMesh::FE< 0, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1331 of file fe_lagrange_vec.C.

1331 { return 0; }

◆ n_dofs_at_node() [84/86]

unsigned int libMesh::FE< 1, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1332 of file fe_lagrange_vec.C.

1332 { return 0; }

◆ n_dofs_at_node() [85/86]

unsigned int libMesh::FE< 2, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1333 of file fe_lagrange_vec.C.

1333 { return 0; }

◆ n_dofs_at_node() [86/86]

unsigned int libMesh::FE< 3, L2_LAGRANGE_VEC >::n_dofs_at_node ( const ElemType  ,
const Order  ,
const unsigned  int 
)
inherited

Definition at line 1334 of file fe_lagrange_vec.C.

1334 { return 0; }

◆ n_dofs_per_elem() [1/86]

unsigned int libMesh::FE< 0, SCALAR >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 74 of file fe_scalar.C.

74 { return 0; }

◆ n_dofs_per_elem() [2/86]

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

Definition at line 75 of file fe_scalar.C.

75 { return 0; }

◆ n_dofs_per_elem() [3/86]

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

Definition at line 76 of file fe_scalar.C.

76 { return 0; }

◆ n_dofs_per_elem() [4/86]

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

Definition at line 77 of file fe_scalar.C.

77 { return 0; }

◆ n_dofs_per_elem() [5/86]

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

Definition at line 142 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [6/86]

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

Definition at line 143 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [7/86]

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

Definition at line 144 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [8/86]

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

Definition at line 145 of file fe_rational.C.

A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ n_dofs_per_elem() [9/86]

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

Definition at line 165 of file fe_l2_hierarchic.C.

165 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [10/86]

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

Definition at line 166 of file fe_l2_hierarchic.C.

166 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [11/86]

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

Definition at line 167 of file fe_l2_hierarchic.C.

167 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [12/86]

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

Definition at line 168 of file fe_l2_hierarchic.C.

168 { return l2_hierarchic_n_dofs(t, o); }

◆ n_dofs_per_elem() [13/86]

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

Definition at line 227 of file fe_l2_lagrange.C.

227 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [14/86]

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

Definition at line 228 of file fe_l2_lagrange.C.

228 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [15/86]

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

Definition at line 229 of file fe_l2_lagrange.C.

229 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [16/86]

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

Definition at line 230 of file fe_l2_lagrange.C.

230 { return l2_lagrange_n_dofs(t, o); }

◆ n_dofs_per_elem() [17/86]

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

Definition at line 255 of file fe_side_hierarchic.C.

255 { return 0; }

◆ n_dofs_per_elem() [18/86]

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

Definition at line 256 of file fe_side_hierarchic.C.

256 { return 0; }

◆ n_dofs_per_elem() [19/86]

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

Definition at line 257 of file fe_side_hierarchic.C.

257 { return 0; }

◆ n_dofs_per_elem() [20/86]

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

Definition at line 258 of file fe_side_hierarchic.C.

258 { return 0; }

◆ n_dofs_per_elem() [21/86]

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

Definition at line 262 of file fe_clough.C.

262 { return clough_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [22/86]

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

Definition at line 263 of file fe_clough.C.

263 { return clough_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [23/86]

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

Definition at line 264 of file fe_clough.C.

264 { return clough_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [24/86]

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

Definition at line 265 of file fe_clough.C.

265 { return clough_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [25/86]

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

Definition at line 298 of file fe_hermite.C.

298 { return hermite_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [26/86]

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

Definition at line 299 of file fe_hermite.C.

299 { return hermite_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [27/86]

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

Definition at line 300 of file fe_hermite.C.

300 { return hermite_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [28/86]

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

Definition at line 301 of file fe_hermite.C.

301 { return hermite_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [29/86]

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

Definition at line 383 of file fe_monomial.C.

383 { 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:30

◆ n_dofs_per_elem() [30/86]

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

Definition at line 384 of file fe_monomial.C.

384 { 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:30

◆ n_dofs_per_elem() [31/86]

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

Definition at line 385 of file fe_monomial.C.

385 { 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:30

◆ n_dofs_per_elem() [32/86]

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

Definition at line 386 of file fe_monomial.C.

386 { 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:30

◆ n_dofs_per_elem() [33/86]

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

Definition at line 391 of file fe_xyz.C.

391 { 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:30

◆ n_dofs_per_elem() [34/86]

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

Definition at line 392 of file fe_xyz.C.

392 { 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:30

◆ n_dofs_per_elem() [35/86]

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

Definition at line 393 of file fe_xyz.C.

393 { 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:30

◆ n_dofs_per_elem() [36/86]

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

Definition at line 394 of file fe_xyz.C.

394 { 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:30

◆ n_dofs_per_elem() [37/86]

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

Definition at line 414 of file fe_bernstein.C.

414 { return bernstein_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [38/86]

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

Definition at line 415 of file fe_bernstein.C.

415 { return bernstein_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [39/86]

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

Definition at line 416 of file fe_bernstein.C.

416 { return bernstein_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [40/86]

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

Definition at line 417 of file fe_bernstein.C.

417 { return bernstein_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [41/86]

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.

◆ n_dofs_per_elem() [42/86]

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

Definition at line 467 of file fe_hierarchic.C.

467 { return hierarchic_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [43/86]

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

Definition at line 468 of file fe_hierarchic.C.

468 { return hierarchic_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [44/86]

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

Definition at line 469 of file fe_hierarchic.C.

469 { return hierarchic_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [45/86]

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

Definition at line 470 of file fe_hierarchic.C.

470 { return hierarchic_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [46/86]

unsigned int libMesh::FE< 0, RAVIART_THOMAS >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 477 of file fe_raviart.C.

477 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [47/86]

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

Definition at line 478 of file fe_raviart.C.

478 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [48/86]

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

Definition at line 479 of file fe_raviart.C.

479 { return 0; }

◆ n_dofs_per_elem() [49/86]

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

Definition at line 480 of file fe_raviart.C.

480 { return 0; }

◆ n_dofs_per_elem() [50/86]

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

Definition at line 483 of file fe_raviart.C.

483 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [51/86]

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

Definition at line 484 of file fe_raviart.C.

484 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [52/86]

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

Definition at line 485 of file fe_raviart.C.

485 { return n_dofs(t, o); }
static unsigned int n_dofs(const ElemType t, const Order o)

◆ n_dofs_per_elem() [53/86]

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

Definition at line 486 of file fe_raviart.C.

486 { return n_dofs(t, o); }
static unsigned int n_dofs(const ElemType t, const Order o)

◆ n_dofs_per_elem() [54/86]

unsigned int libMesh::FE< 0, NEDELEC_ONE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 498 of file fe_nedelec_one.C.

498 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [55/86]

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

Definition at line 499 of file fe_nedelec_one.C.

499 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ n_dofs_per_elem() [56/86]

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

Definition at line 500 of file fe_nedelec_one.C.

500 { return 0; }

◆ n_dofs_per_elem() [57/86]

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

Definition at line 501 of file fe_nedelec_one.C.

501 { return 0; }

◆ n_dofs_per_elem() [58/86]

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

Definition at line 749 of file fe_monomial_vec.C.

750 {
751  return FE<0, MONOMIAL>::n_dofs_per_elem(t, o);
752 }

◆ n_dofs_per_elem() [59/86]

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

Definition at line 755 of file fe_monomial_vec.C.

756 {
757  return FE<1, MONOMIAL>::n_dofs_per_elem(t, o);
758 }

◆ n_dofs_per_elem() [60/86]

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

Definition at line 761 of file fe_monomial_vec.C.

762 {
763  return 2 * FE<2, MONOMIAL>::n_dofs_per_elem(t, o);
764 }

◆ n_dofs_per_elem() [61/86]

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

Definition at line 767 of file fe_monomial_vec.C.

768 {
769  return 3 * FE<3, MONOMIAL>::n_dofs_per_elem(t, o);
770 }

◆ n_dofs_per_elem() [62/86]

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

Definition at line 802 of file fe_hierarchic_vec.C.

802 { return FE<0,HIERARCHIC>::n_dofs_per_elem(t,o); }

◆ n_dofs_per_elem() [63/86]

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

Definition at line 803 of file fe_hierarchic_vec.C.

803 { return FE<1,HIERARCHIC>::n_dofs_per_elem(t,o); }

◆ n_dofs_per_elem() [64/86]

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

Definition at line 804 of file fe_hierarchic_vec.C.

804 { return 2*FE<2,HIERARCHIC>::n_dofs_per_elem(t,o); }

◆ n_dofs_per_elem() [65/86]

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

Definition at line 805 of file fe_hierarchic_vec.C.

805 { return 3*FE<3,HIERARCHIC>::n_dofs_per_elem(t,o); }

◆ n_dofs_per_elem() [66/86]

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

Definition at line 808 of file fe_hierarchic_vec.C.

808 { return FE<0,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [67/86]

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

Definition at line 809 of file fe_hierarchic_vec.C.

809 { return FE<1,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [68/86]

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

Definition at line 810 of file fe_hierarchic_vec.C.

810 { return FE<2,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [69/86]

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

Definition at line 811 of file fe_hierarchic_vec.C.

811 { return FE<3,L2_HIERARCHIC_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [70/86]

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

Definition at line 968 of file fe_subdivision_2D.C.

968 { return 0; }

◆ n_dofs_per_elem() [71/86]

unsigned int libMesh::FE< 0, LAGRANGE >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1011 of file fe_lagrange.C.

1011 { return 0; }

◆ n_dofs_per_elem() [72/86]

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

Definition at line 1012 of file fe_lagrange.C.

1012 { return 0; }

◆ n_dofs_per_elem() [73/86]

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

Definition at line 1013 of file fe_lagrange.C.

1013 { return 0; }

◆ n_dofs_per_elem() [74/86]

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

Definition at line 1014 of file fe_lagrange.C.

1014 { return 0; }

◆ n_dofs_per_elem() [75/86]

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

Definition at line 1289 of file fe_szabab.C.

1289 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [76/86]

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

Definition at line 1290 of file fe_szabab.C.

1290 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [77/86]

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

Definition at line 1291 of file fe_szabab.C.

1291 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [78/86]

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

Definition at line 1292 of file fe_szabab.C.

1292 { return szabab_n_dofs_per_elem(t, o); }

◆ n_dofs_per_elem() [79/86]

unsigned int libMesh::FE< 0, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1339 of file fe_lagrange_vec.C.

1339 { return 0; }

◆ n_dofs_per_elem() [80/86]

unsigned int libMesh::FE< 1, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1340 of file fe_lagrange_vec.C.

1340 { return 0; }

◆ n_dofs_per_elem() [81/86]

unsigned int libMesh::FE< 2, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1341 of file fe_lagrange_vec.C.

1341 { return 0; }

◆ n_dofs_per_elem() [82/86]

unsigned int libMesh::FE< 3, LAGRANGE_VEC >::n_dofs_per_elem ( const ElemType  ,
const Order   
)
inherited

Definition at line 1342 of file fe_lagrange_vec.C.

1342 { return 0; }

◆ n_dofs_per_elem() [83/86]

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

Definition at line 1345 of file fe_lagrange_vec.C.

1345 { return FE<0,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [84/86]

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

Definition at line 1346 of file fe_lagrange_vec.C.

1346 { return FE<1,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [85/86]

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

Definition at line 1347 of file fe_lagrange_vec.C.

1347 { return FE<2,L2_LAGRANGE_VEC>::n_dofs(t, o); }

◆ n_dofs_per_elem() [86/86]

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

Definition at line 1348 of file fe_lagrange_vec.C.

1348 { return FE<3,L2_LAGRANGE_VEC>::n_dofs(t, 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::FE< Dim, T >::n_quadrature_points ( ) const
overridevirtualinherited
Returns
The total number of quadrature points. Call this to get an upper bound for the for loop in your simulation for matrix assembly of the current element.

Implements libMesh::FEAbstract.

Definition at line 80 of file fe.C.

81 {
82  libmesh_assert(this->qrule);
83  return this->qrule->n_points();
84 }
libmesh_assert(ctx)
unsigned int n_points() const
Definition: quadrature.h:123
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:737

◆ 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 61 of file fe.C.

62 {
63  return FE<Dim,T>::n_dofs (this->elem_type,
64  static_cast<Order>(this->fe_type.order + this->_p_level));
65 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ 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.

Definition at line 418 of file fe.h.

420  { return FE<Dim,T>::n_dofs (t,o); }

◆ nodal_soln() [1/32]

void libMesh::FE< 0, 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 
)
inherited

Definition at line 99 of file fe_hierarchic_vec.C.

104 { FE<0,HIERARCHIC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [2/32]

void libMesh::FE< 1, 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 
)
inherited

Definition at line 107 of file fe_hierarchic_vec.C.

112 { FE<1,HIERARCHIC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [3/32]

void libMesh::FE< 2, 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 
)
inherited

Definition at line 115 of file fe_hierarchic_vec.C.

120 { hierarchic_vec_nodal_soln(elem, order, elem_soln, 2 /*dimension*/, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [4/32]

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 
)
inherited

Definition at line 123 of file fe_hierarchic_vec.C.

128 { hierarchic_vec_nodal_soln(elem, order, elem_soln, 3 /*dimension*/, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [5/32]

void libMesh::FE< 0, 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 
)
inherited

Definition at line 131 of file fe_monomial_vec.C.

136 {
137  FE<0, MONOMIAL>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [6/32]

void libMesh::FE< 1, L2_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 
)
inherited

Definition at line 141 of file fe_hierarchic_vec.C.

146 { FE<1,HIERARCHIC_VEC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [7/32]

void libMesh::FE< 1, 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 
)
inherited

Definition at line 142 of file fe_monomial_vec.C.

147 {
148  FE<1, MONOMIAL>::nodal_soln(elem, order, elem_soln, nodal_soln, add_p_level);
149 }
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)
Build the nodal soln from the element soln.

◆ nodal_soln() [8/32]

void libMesh::FE< 2, L2_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 
)
inherited

Definition at line 149 of file fe_hierarchic_vec.C.

154 { FE<2,HIERARCHIC_VEC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [9/32]

void libMesh::FE< 2, 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 
)
inherited

Definition at line 153 of file fe_monomial_vec.C.

158 {
159  monomial_vec_nodal_soln(elem, order, elem_soln, 2 /*dimension*/, nodal_soln, add_p_level);
160 }
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)
Build the nodal soln from the element soln.

◆ nodal_soln() [10/32]

void libMesh::FE< 3, L2_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 
)
inherited

Definition at line 157 of file fe_hierarchic_vec.C.

162 { FE<3,HIERARCHIC_VEC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [11/32]

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 
)
inherited

Definition at line 164 of file fe_monomial_vec.C.

169 {
170  monomial_vec_nodal_soln(elem, order, elem_soln, 3 /*dimension*/, nodal_soln, add_p_level);
171 }
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)
Build the nodal soln from the element soln.

◆ nodal_soln() [12/32]

void libMesh::FE< 0, RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool   
)
inherited

Definition at line 384 of file fe_raviart.C.

389 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [13/32]

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 
)
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() [14/32]

void libMesh::FE< 1, RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool   
)
inherited

Definition at line 392 of file fe_raviart.C.

397 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [15/32]

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 
)
inherited

Definition at line 400 of file fe_raviart.C.

405 { raviart_thomas_nodal_soln(elem, order, elem_soln, 2 /*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)
Build the nodal soln from the element soln.

◆ nodal_soln() [16/32]

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 
)
inherited

Definition at line 408 of file fe_raviart.C.

413 { raviart_thomas_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)
Build the nodal soln from the element soln.

◆ nodal_soln() [17/32]

void libMesh::FE< 0, L2_RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool   
)
inherited

Definition at line 416 of file fe_raviart.C.

421 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [18/32]

void libMesh::FE< 1, L2_RAVIART_THOMAS >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool   
)
inherited

Definition at line 424 of file fe_raviart.C.

429 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [19/32]

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 
)
inherited

Definition at line 432 of file fe_raviart.C.

437 { raviart_thomas_nodal_soln(elem, order, elem_soln, 2 /*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)
Build the nodal soln from the element soln.

◆ nodal_soln() [20/32]

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 
)
inherited

Definition at line 440 of file fe_raviart.C.

445 { raviart_thomas_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)
Build the nodal soln from the element soln.

◆ nodal_soln() [21/32]

void libMesh::FE< 0, NEDELEC_ONE >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool   
)
inherited

Definition at line 445 of file fe_nedelec_one.C.

450 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [22/32]

void libMesh::FE< 1, NEDELEC_ONE >::nodal_soln ( const Elem ,
const Order  ,
const std::vector< Number > &  ,
std::vector< Number > &  ,
bool   
)
inherited

Definition at line 453 of file fe_nedelec_one.C.

458 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ nodal_soln() [23/32]

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 
)
inherited

Definition at line 461 of file fe_nedelec_one.C.

466 { nedelec_one_nodal_soln(elem, order, elem_soln, 2 /*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)
Build the nodal soln from the element soln.

◆ nodal_soln() [24/32]

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 
)
inherited

Definition at line 469 of file fe_nedelec_one.C.

474 { nedelec_one_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)
Build the nodal soln from the element soln.

◆ nodal_soln() [25/32]

void libMesh::FE< 0, 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 
)
inherited

Definition at line 637 of file fe_lagrange_vec.C.

642 { FE<0,LAGRANGE>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [26/32]

void libMesh::FE< 1, 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 
)
inherited

Definition at line 645 of file fe_lagrange_vec.C.

650 { FE<1,LAGRANGE>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [27/32]

void libMesh::FE< 2, 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 
)
inherited

Definition at line 653 of file fe_lagrange_vec.C.

658 { lagrange_vec_nodal_soln(elem, order, elem_soln, 2 /*dimension*/, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [28/32]

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 
)
inherited

Definition at line 661 of file fe_lagrange_vec.C.

666 { lagrange_vec_nodal_soln(elem, order, elem_soln, 3 /*dimension*/, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [29/32]

void libMesh::FE< 1, L2_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 
)
inherited

Definition at line 679 of file fe_lagrange_vec.C.

684 { FE<1,LAGRANGE_VEC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [30/32]

void libMesh::FE< 2, L2_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 
)
inherited

Definition at line 687 of file fe_lagrange_vec.C.

692 { FE<2,LAGRANGE_VEC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [31/32]

void libMesh::FE< 3, L2_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 
)
inherited

Definition at line 695 of file fe_lagrange_vec.C.

700 { FE<3,LAGRANGE_VEC>::nodal_soln(elem, order, elem_soln, 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)
Build the nodal soln from the element soln.

◆ nodal_soln() [32/32]

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   
)
inherited

Definition at line 882 of file fe_subdivision_2D.C.

887 {
888  libmesh_assert(elem);
889  libmesh_assert_equal_to(elem->type(), TRI3SUBDIVISION);
890  const Tri3Subdivision * sd_elem = static_cast<const Tri3Subdivision *>(elem);
891 
892  nodal_soln.resize(3); // three nodes per element
893 
894  // Ghost nodes are auxiliary.
895  if (sd_elem->is_ghost())
896  {
897  nodal_soln[0] = 0;
898  nodal_soln[1] = 0;
899  nodal_soln[2] = 0;
900  return;
901  }
902 
903  // First node (node 0 in the element patch):
904  unsigned int j = sd_elem->local_node_number(sd_elem->get_ordered_node(0)->id());
905  nodal_soln[j] = elem_soln[0];
906 
907  // Second node (node 1 in the element patch):
908  j = sd_elem->local_node_number(sd_elem->get_ordered_node(1)->id());
909  nodal_soln[j] = elem_soln[1];
910 
911  // Third node (node 'valence' in the element patch):
912  j = sd_elem->local_node_number(sd_elem->get_ordered_node(2)->id());
913  nodal_soln[j] = elem_soln[sd_elem->get_ordered_valence(0)];
914 }
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)
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 \).

Definition at line 601 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::Real, libMesh::TET10, libMesh::TET14, libMesh::TET4, libMesh::TRI3, libMesh::TRI6, libMesh::TRI7, and libMesh::TRISHELL3.

Referenced by libMesh::FEInterface::ifem_on_reference_element(), libMesh::FEMap::inverse_map(), and libMesh::FEInterface::on_reference_element().

602 {
603  libmesh_assert_greater_equal (eps, 0.);
604 
605  const Real xi = p(0);
606 #if LIBMESH_DIM > 1
607  const Real eta = p(1);
608 #else
609  const Real eta = 0.;
610 #endif
611 #if LIBMESH_DIM > 2
612  const Real zeta = p(2);
613 #else
614  const Real zeta = 0.;
615 #endif
616 
617  switch (t)
618  {
619  case NODEELEM:
620  {
621  return (!xi && !eta && !zeta);
622  }
623  case EDGE2:
624  case EDGE3:
625  case EDGE4:
626  {
627  // The reference 1D element is [-1,1].
628  if ((xi >= -1.-eps) &&
629  (xi <= 1.+eps))
630  return true;
631 
632  return false;
633  }
634 
635 
636  case TRI3:
637  case TRISHELL3:
638  case TRI6:
639  case TRI7:
640  {
641  // The reference triangle is isosceles
642  // and is bound by xi=0, eta=0, and xi+eta=1.
643  if ((xi >= 0.-eps) &&
644  (eta >= 0.-eps) &&
645  ((xi + eta) <= 1.+eps))
646  return true;
647 
648  return false;
649  }
650 
651 
652  case QUAD4:
653  case QUADSHELL4:
654  case QUAD8:
655  case QUADSHELL8:
656  case QUAD9:
657  {
658  // The reference quadrilateral element is [-1,1]^2.
659  if ((xi >= -1.-eps) &&
660  (xi <= 1.+eps) &&
661  (eta >= -1.-eps) &&
662  (eta <= 1.+eps))
663  return true;
664 
665  return false;
666  }
667 
668 
669  case TET4:
670  case TET10:
671  case TET14:
672  {
673  // The reference tetrahedral is isosceles
674  // and is bound by xi=0, eta=0, zeta=0,
675  // and xi+eta+zeta=1.
676  if ((xi >= 0.-eps) &&
677  (eta >= 0.-eps) &&
678  (zeta >= 0.-eps) &&
679  ((xi + eta + zeta) <= 1.+eps))
680  return true;
681 
682  return false;
683  }
684 
685 
686  case HEX8:
687  case HEX20:
688  case HEX27:
689  {
690  /*
691  if ((xi >= -1.) &&
692  (xi <= 1.) &&
693  (eta >= -1.) &&
694  (eta <= 1.) &&
695  (zeta >= -1.) &&
696  (zeta <= 1.))
697  return true;
698  */
699 
700  // The reference hexahedral element is [-1,1]^3.
701  if ((xi >= -1.-eps) &&
702  (xi <= 1.+eps) &&
703  (eta >= -1.-eps) &&
704  (eta <= 1.+eps) &&
705  (zeta >= -1.-eps) &&
706  (zeta <= 1.+eps))
707  {
708  // libMesh::out << "Strange Point:\n";
709  // p.print();
710  return true;
711  }
712 
713  return false;
714  }
715 
716  case PRISM6:
717  case PRISM15:
718  case PRISM18:
719  case PRISM20:
720  case PRISM21:
721  {
722  // Figure this one out...
723  // inside the reference triangle with zeta in [-1,1]
724  if ((xi >= 0.-eps) &&
725  (eta >= 0.-eps) &&
726  (zeta >= -1.-eps) &&
727  (zeta <= 1.+eps) &&
728  ((xi + eta) <= 1.+eps))
729  return true;
730 
731  return false;
732  }
733 
734 
735  case PYRAMID5:
736  case PYRAMID13:
737  case PYRAMID14:
738  case PYRAMID18:
739  {
740  // Check that the point is on the same side of all the faces
741  // by testing whether:
742  //
743  // n_i.(x - x_i) <= 0
744  //
745  // for each i, where:
746  // n_i is the outward normal of face i,
747  // x_i is a point on face i.
748  if ((-eta - 1. + zeta <= 0.+eps) &&
749  ( xi - 1. + zeta <= 0.+eps) &&
750  ( eta - 1. + zeta <= 0.+eps) &&
751  ( -xi - 1. + zeta <= 0.+eps) &&
752  ( zeta >= 0.-eps))
753  return true;
754 
755  return false;
756  }
757 
758 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
759  case INFHEX8:
760  case INFHEX16:
761  case INFHEX18:
762  {
763  // The reference infhex8 is a [-1,1]^3.
764  if ((xi >= -1.-eps) &&
765  (xi <= 1.+eps) &&
766  (eta >= -1.-eps) &&
767  (eta <= 1.+eps) &&
768  (zeta >= -1.-eps) &&
769  (zeta <= 1.+eps))
770  {
771  return true;
772  }
773  return false;
774  }
775 
776  case INFPRISM6:
777  case INFPRISM12:
778  {
779  // inside the reference triangle with zeta in [-1,1]
780  if ((xi >= 0.-eps) &&
781  (eta >= 0.-eps) &&
782  (zeta >= -1.-eps) &&
783  (zeta <= 1.+eps) &&
784  ((xi + eta) <= 1.+eps))
785  {
786  return true;
787  }
788 
789  return false;
790  }
791 #endif
792 
793  default:
794  libmesh_error_msg("ERROR: Unknown element type " << Utility::enum_to_string(t));
795  }
796 
797  // If we get here then the point is _not_ in the
798  // reference element. Better return false.
799 
800  return false;
801 }
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:111

◆ 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:111

◆ 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:111

◆ 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:111

◆ 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:111

◆ 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 818 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<<().

819 {
820  os << "phi[i][j]: Shape function i at quadrature pt. j" << std::endl;
821  this->print_phi(os);
822 
823  os << "dphi[i][j]: Shape function i's gradient at quadrature pt. j" << std::endl;
824  this->print_dphi(os);
825 
826  os << "XYZ locations of the quadrature pts." << std::endl;
827  this->print_xyz(os);
828 
829  os << "Values of JxW at the quadrature pts." << std::endl;
830  this->print_JxW(os);
831 }
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:812
void print_JxW(std::ostream &os) const
Prints the Jacobian times the weight for each quadrature point.
Definition: fe_abstract.C:805

◆ 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 805 of file fe_abstract.C.

References libMesh::FEAbstract::_fe_map.

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

806 {
807  this->_fe_map->print_JxW(os);
808 }
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ 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:111

◆ 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 812 of file fe_abstract.C.

References libMesh::FEAbstract::_fe_map.

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

813 {
814  this->_fe_map->print_xyz(os);
815 }
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633

◆ reinit() [1/2]

void libMesh::FE< Dim, T >::reinit ( const Elem elem,
const std::vector< Point > *const  pts = nullptr,
const std::vector< Real > *const  weights = nullptr 
)
overridevirtualinherited

This is at the core of this class.

Use this for each new 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.

Implements libMesh::FEAbstract.

Definition at line 142 of file fe.C.

145 {
146  // We can be called with no element. If we're evaluating SCALAR
147  // dofs we'll still have work to do.
148  // libmesh_assert(elem);
149 
150  // We're calculating now! Time to determine what.
151  this->determine_calculations();
152 
153  // Try to avoid calling init_shape_functions
154  // even when shapes_need_reinit
155  bool cached_nodes_still_fit = false;
156 
157  // Most of the hard work happens when we have an actual element
158  if (elem)
159  {
160  // Initialize the shape functions at the user-specified
161  // points
162  if (pts != nullptr)
163  {
164  // Set the type and p level for this element
165  this->elem_type = elem->type();
166  this->_elem_p_level = elem->p_level();
167  this->_p_level = this->_add_p_level_in_reinit * elem->p_level();
168 
169  // Initialize the shape functions
170  this->_fe_map->template init_reference_to_physical_map<Dim>
171  (*pts, elem);
172  this->init_shape_functions (*pts, elem);
173 
174  // The shape functions do not correspond to the qrule
175  this->shapes_on_quadrature = false;
176  }
177 
178  // If there are no user specified points, we use the
179  // quadrature rule
180 
181  // update the type in accordance to the current cell
182  // and reinit if the cell type has changed or (as in
183  // the case of the hierarchics) the shape functions need
184  // reinit, since they depend on the particular element shape
185  else
186  {
187  libmesh_assert(this->qrule);
188  this->qrule->init(elem->type(), elem->p_level());
189 
190  if (this->qrule->shapes_need_reinit())
191  this->shapes_on_quadrature = false;
192 
193  // We're not going to bother trying to cache nodal
194  // points *and* weights for fancier mapping types.
195  if (this->elem_type != elem->type() ||
196  this->_elem_p_level != elem->p_level() ||
197  !this->shapes_on_quadrature ||
198  elem->mapping_type() != LAGRANGE_MAP)
199  {
200  // Set the type and p level for this element
201  this->elem_type = elem->type();
202  this->_elem_p_level = elem->p_level();
203  this->_p_level = this->_add_p_level_in_reinit * elem->p_level();
204  // Initialize the shape functions
205  this->_fe_map->template init_reference_to_physical_map<Dim>
206  (this->qrule->get_points(), elem);
207  this->init_shape_functions (this->qrule->get_points(), elem);
208 
209  if (this->shapes_need_reinit())
210  {
211  cached_nodes.resize(elem->n_nodes());
212  for (auto n : elem->node_index_range())
213  cached_nodes[n] = elem->point(n);
214  }
215  }
216  else
217  {
218  // libmesh_assert_greater (elem->n_nodes(), 1);
219 
220  cached_nodes_still_fit = true;
221  if (cached_nodes.size() != elem->n_nodes())
222  cached_nodes_still_fit = false;
223  else
224  for (auto n : make_range(1u, elem->n_nodes()))
225  {
226  if (!(elem->point(n) - elem->point(0)).relative_fuzzy_equals
227  ((cached_nodes[n] - cached_nodes[0]), 1e-13))
228  {
229  cached_nodes_still_fit = false;
230  break;
231  }
232  }
233 
234  if (this->shapes_need_reinit() && !cached_nodes_still_fit)
235  {
236  this->_fe_map->template init_reference_to_physical_map<Dim>
237  (this->qrule->get_points(), elem);
238  this->init_shape_functions (this->qrule->get_points(), elem);
239  cached_nodes.resize(elem->n_nodes());
240  for (auto n : elem->node_index_range())
241  cached_nodes[n] = elem->point(n);
242  }
243  }
244 
245  // The shape functions correspond to the qrule
246  this->shapes_on_quadrature = true;
247  }
248  }
249  else // With no defined elem, so mapping or caching to
250  // be done, and our "quadrature rule" is one point for nonlocal
251  // (SCALAR) variables and zero points for local variables.
252  {
253  this->elem_type = INVALID_ELEM;
254  this->_elem_p_level = 0;
255  this->_p_level = 0;
256 
257  if (!pts)
258  {
259  if (T == SCALAR)
260  {
261  this->qrule->get_points() =
262  std::vector<Point>(1,Point(0));
263 
264  this->qrule->get_weights() =
265  std::vector<Real>(1,1);
266  }
267  else
268  {
269  this->qrule->get_points().clear();
270  this->qrule->get_weights().clear();
271  }
272 
273  this->init_shape_functions (this->qrule->get_points(), elem);
274  }
275  else
276  this->init_shape_functions (*pts, elem);
277  }
278 
279  // Compute the map for this element.
280  if (pts != nullptr)
281  {
282  if (weights != nullptr)
283  {
284  this->_fe_map->compute_map (this->dim, *weights, elem, this->calculate_d2phi);
285  }
286  else
287  {
288  std::vector<Real> dummy_weights (pts->size(), 1.);
289  this->_fe_map->compute_map (this->dim, dummy_weights, elem, this->calculate_d2phi);
290  }
291  }
292  else
293  {
294  this->_fe_map->compute_map (this->dim, this->qrule->get_weights(), elem, this->calculate_d2phi);
295  }
296 
297  // Compute the shape functions and the derivatives at all of the
298  // quadrature points.
299  if (!cached_nodes_still_fit)
300  {
301  if (pts != nullptr)
302  this->compute_shape_functions (elem,*pts);
303  else
304  this->compute_shape_functions(elem,this->qrule->get_points());
305  if (this->calculate_dual)
306  {
307  if (T != LAGRANGE)
308  nonlagrange_dual_warning();
309  // Check if we need to calculate the dual coefficients based on the default QRule
310  // We keep the default dual coeff calculation for the initial stage of the simulation
311  // and in the middel of the simulation when a customized QRule is not provided.
312  // This is used in MOOSE mortar-based contact. Currently, we re-compute dual_coeff
313  // for all the elements on the mortar segment mesh by setting `calculate_default_dual_coeff' = false
314  // in MOOSE (in `Assembly::reinitDual`) and use the customized QRule for calculating the dual shape coefficients
315  // This is to be improved in the future
316  if (elem && this->calculate_default_dual_coeff)
318  // The dual shape functions relies on the customized shape functions
319  // and the coefficient matrix, \p dual_coeff
321  }
322  }
323 }
bool calculate_d2phi
Should we calculate shape function hessians?
Definition: fe_abstract.h:681
virtual void init(const ElemType type=INVALID_ELEM, unsigned int p_level=0)
Initializes the data structures for a quadrature rule for an element of type type.
Definition: quadrature.C:64
virtual bool shapes_need_reinit()
Definition: quadrature.h:246
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:732
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:743
void compute_dual_shape_functions()
Compute dual_phi, dual_dphi, dual_d2phi It is only valid for this to be called after reinit has occur...
Definition: fe_base.h:792
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:726
const std::vector< Real > & get_weights() const
Definition: quadrature.h:160
bool calculate_default_dual_coeff
Are we calculating the coefficient for the dual basis using the default qrule?
Definition: fe_abstract.h:655
virtual bool shapes_need_reinit() const override
const unsigned int dim
The dimensionality of the object.
Definition: fe_abstract.h:639
libmesh_assert(ctx)
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:737
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:756
const std::vector< Point > & get_points() const
Definition: quadrature.h:148
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::c...
Definition: fe_base.C:762
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:396
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:134
virtual void reinit_default_dual_shape_coeffs(const Elem *elem) override
This computes the default dual shape function coefficients.
Definition: fe.C:349
std::vector< Point > cached_nodes
An array of the node locations on the last element we computed on.
Definition: fe.h:752
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:650
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ reinit() [2/2]

void libMesh::FE< Dim, T >::reinit ( const Elem elem,
const unsigned int  side,
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 side of face.

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 109 of file fe_boundary.C.

114 {
115  libmesh_assert(elem);
116  libmesh_assert (this->qrule != nullptr || pts != nullptr);
117  // We now do this for 1D elements!
118  // libmesh_assert_not_equal_to (Dim, 1);
119 
120  // If we called this function redundantly (e.g. in an FEMContext
121  // that is asked not to do any side calculations) then let's skip the
122  // whole inverse_map process that calculates side points
123  if (this->calculating_nothing())
124  {
125  this->calculations_started = true; // Ironic
126  return;
127  }
128 
129  // We're (possibly re-) calculating now! FIXME - we currently
130  // expect to be able to use side_map and JxW later, but we could
131  // optimize further here.
132  this->_fe_map->add_calculations();
133  this->_fe_map->get_JxW();
134  this->_fe_map->get_xyz();
135  this->determine_calculations();
136 
137  // Build the side of interest
138  const std::unique_ptr<const Elem> side(elem->build_side_ptr(s));
139 
140  // Find the max p_level to select
141  // the right quadrature rule for side integration
142  unsigned int side_p_level = elem->p_level();
143  if (elem->neighbor_ptr(s) != nullptr)
144  side_p_level = std::max(side_p_level, elem->neighbor_ptr(s)->p_level());
145 
146  // Initialize the shape functions at the user-specified
147  // points
148  if (pts != nullptr)
149  {
150  // The shape functions do not correspond to the qrule
151  this->shapes_on_quadrature = false;
152 
153  // Initialize the face shape functions
154  this->_fe_map->template init_face_shape_functions<Dim>(*pts, side.get());
155 
156  // Compute the Jacobian*Weight on the face for integration
157  if (weights != nullptr)
158  {
159  this->_fe_map->compute_face_map (Dim, *weights, side.get());
160  }
161  else
162  {
163  std::vector<Real> dummy_weights (pts->size(), 1.);
164  this->_fe_map->compute_face_map (Dim, dummy_weights, side.get());
165  }
166  }
167  // If there are no user specified points, we use the
168  // quadrature rule
169  else
170  {
171  // initialize quadrature rule
172  this->qrule->init(side->type(), side_p_level);
173 
174  if (this->qrule->shapes_need_reinit())
175  this->shapes_on_quadrature = false;
176 
177  // FIXME - could this break if the same FE object was used
178  // for both volume and face integrals? - RHS
179  // We might not need to reinitialize the shape functions
180  if ((this->get_type() != elem->type()) ||
181  (side->type() != last_side) ||
182  (this->_elem_p_level != side_p_level) ||
183  this->shapes_need_reinit() ||
184  !this->shapes_on_quadrature)
185  {
186  // Set the element type and p_level
187  this->elem_type = elem->type();
188  this->_elem_p_level = side_p_level;
189 
190  // Set the last_side
191  last_side = side->type();
192 
193  // Set the last p level
194  this->_p_level = this->_add_p_level_in_reinit * side_p_level;
195 
196  // Initialize the face shape functions
197  this->_fe_map->template init_face_shape_functions<Dim>(this->qrule->get_points(), side.get());
198  }
199 
200  // Compute the Jacobian*Weight on the face for integration
201  this->_fe_map->compute_face_map (Dim, this->qrule->get_weights(), side.get());
202 
203  // The shape functions correspond to the qrule
204  this->shapes_on_quadrature = true;
205  }
206 
207  // make a copy of the Jacobian for integration
208  const std::vector<Real> JxW_int(this->_fe_map->get_JxW());
209 
210  // make a copy of shape on quadrature info
211  bool shapes_on_quadrature_side = this->shapes_on_quadrature;
212 
213  // Find where the integration points are located on the
214  // full element.
215  const std::vector<Point> * ref_qp;
216  if (pts != nullptr)
217  ref_qp = pts;
218  else
219  ref_qp = &this->qrule->get_points();
220 
221  std::vector<Point> qp;
222  this->side_map(elem, side.get(), s, *ref_qp, qp);
223 
224  // compute the shape function and derivative values
225  // at the points qp
226  this->reinit (elem, &qp);
227 
228  this->shapes_on_quadrature = shapes_on_quadrature_side;
229 
230  // copy back old data
231  this->_fe_map->get_JxW() = JxW_int;
232 }
virtual void init(const ElemType type=INVALID_ELEM, unsigned int p_level=0)
Initializes the data structures for a quadrature rule for an element of type type.
Definition: quadrature.C:64
virtual bool shapes_need_reinit()
Definition: quadrature.h:246
bool calculations_started
Have calculations with this object already been started? Then all get_* functions should already have...
Definition: fe_abstract.h:645
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:732
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...
Definition: fe_boundary.C:336
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:743
ElemType get_type() const
Definition: fe_abstract.h:488
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:726
const std::vector< Real > & get_weights() const
Definition: quadrature.h:160
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:142
libmesh_assert(ctx)
QBase * qrule
A pointer to the quadrature rule employed.
Definition: fe_abstract.h:737
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:756
const std::vector< Point > & get_points() const
Definition: quadrature.h:148
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633
ElemType last_side
The last side and last edge we did a reinit on.
Definition: fe.h:757
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ 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 349 of file fe.C.

350 {
351  libmesh_assert(elem);
352 
353  FEType default_fe_type(this->get_order(), T);
354  QGauss default_qrule(elem->dim(), default_fe_type.default_quadrature_order());
355  default_qrule.init(elem->type(), elem->p_level());
356  // In preparation of computing dual_coeff, we compute the default shape
357  // function values and use these to compute the dual shape coefficients.
358  // The TRUE dual_phi values are computed in compute_dual_shape_functions()
359  this->reinit_dual_shape_coeffs(elem, default_qrule.get_points(), default_qrule.get_weights());
360  // we do not compute default dual coeff many times as this can be expensive
362 }
Order get_order() const
Definition: fe_abstract.h:504
libmesh_assert(ctx)
void set_calculate_default_dual_coeff(const bool val)
set calculate_default_dual_coeff as needed
Definition: fe_abstract.h:605
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:326

◆ 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 326 of file fe.C.

329 {
330  // Set the type and p level for this element
331  this->elem_type = elem->type();
332  this->_elem_p_level = elem->p_level();
333  this->_p_level = this->_add_p_level_in_reinit * elem->p_level();
334 
335  const unsigned int n_shapes =
336  this->n_shape_functions(this->get_type(),
337  this->get_order());
338 
339  std::vector<std::vector<OutputShape>> phi_vals;
340  phi_vals.resize(n_shapes);
341  for (const auto i : make_range(phi_vals.size()))
342  phi_vals[i].resize(pts.size());
343 
344  all_shapes(elem, this->get_order(), pts, phi_vals);
345  this->compute_dual_shape_coeffs(JxW, phi_vals);
346 }
Order get_order() const
Definition: fe_abstract.h:504
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:732
ElemType get_type() const
Definition: fe_abstract.h:488
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:726
virtual unsigned int n_shape_functions() const override
Definition: fe.C:61
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:756
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:134
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715
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 605 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:655

◆ set_calculate_dual()

void libMesh::FEAbstract::set_calculate_dual ( const bool  val)
inlineinherited

set calculate_dual as needed

Definition at line 600 of file fe_abstract.h.

References libMesh::FEAbstract::calculate_dual.

600 {calculate_dual = val; }
bool calculate_dual
Are we calculating dual basis?
Definition: fe_abstract.h:650

◆ 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 510 of file fe_abstract.h.

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

510 { fe_type.order = new_order; }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709

◆ shape() [1/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 28 of file fe_raviart_shape_2D.C.

33 {
34 #if LIBMESH_DIM > 1
35  libmesh_assert(elem);
36 
37  const Order total_order = static_cast<Order>(order + add_p_level * elem->p_level());
38 
39  switch (total_order)
40  {
41  // linear Raviart-Thomas shape functions
42  case FIRST:
43  {
44  switch (elem->type())
45  {
46  case QUAD8:
47  case QUAD9:
48  {
49  libmesh_assert_less (i, 4);
50 
51  const Real xi = p(0);
52  const Real eta = p(1);
53 
54  // Even with a loose inverse_map tolerance we ought to
55  // be nearly on the element interior in master
56  // coordinates
57  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
58  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
59 
60  switch(i)
61  {
62  case 0:
63  {
64  if (elem->point(0) > elem->point(1))
65  return RealGradient( 0.0, -0.25*(1.0-eta) );
66  else
67  return RealGradient( 0.0, 0.25*(1.0-eta) );
68  }
69  case 1:
70  {
71  if (elem->point(1) > elem->point(2))
72  return RealGradient( 0.25*(1.0+xi), 0.0 );
73  else
74  return RealGradient( -0.25*(1.0+xi), 0.0 );
75  }
76 
77  case 2:
78  {
79  if (elem->point(2) > elem->point(3))
80  return RealGradient( 0.0, 0.25*(1.0+eta) );
81  else
82  return RealGradient( 0.0, -0.25*(1.0+eta) );
83  }
84  case 3:
85  {
86  if (elem->point(3) > elem->point(0))
87  return RealGradient( 0.25*(xi-1.0), 0.0 );
88  else
89  return RealGradient( -0.25*(xi-1.0), 0.0 );
90  }
91 
92  default:
93  libmesh_error_msg("Invalid i = " << i);
94  }
95 
96  return RealGradient();
97  }
98 
99  case TRI6:
100  case TRI7:
101  {
102  const Real xi = p(0);
103  const Real eta = p(1);
104 
105  libmesh_assert_less (i, 3);
106 
107  switch(i)
108  {
109  case 0:
110  {
111  if (elem->point(0) > elem->point(1))
112  return RealGradient( xi, eta-1.0 );
113  else
114  return RealGradient( -xi, -eta+1.0 );
115  }
116  case 1:
117  {
118  if (elem->point(1) > elem->point(2))
119  return RealGradient( xi, eta );
120  else
121  return RealGradient( -xi, -eta );
122  }
123 
124  case 2:
125  {
126  if (elem->point(2) > elem->point(0))
127  return RealGradient( xi-1.0, eta );
128  else
129  return RealGradient( -xi+1.0, -eta );
130  }
131 
132  default:
133  libmesh_error_msg("Invalid i = " << i);
134  }
135  }
136 
137  default:
138  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
139  }
140  }
141 
142  // unsupported order
143  default:
144  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << total_order);
145  }
146 #else // LIBMESH_DIM > 1
147  libmesh_ignore(elem, order, i, p, add_p_level);
148  libmesh_not_implemented();
149 #endif
150 }
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, 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 = static_cast<Order>(order + add_p_level * elem->p_level());
38 
39  switch (totalorder)
40  {
41  // linear Nedelec (first kind) shape functions
42  case FIRST:
43  {
44  switch (elem->type())
45  {
46  case HEX20:
47  case HEX27:
48  {
49  libmesh_assert_less (i, 12);
50 
51  const Real xi = p(0);
52  const Real eta = p(1);
53  const Real zeta = p(2);
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  {
66  if (elem->point(0) > elem->point(1))
67  return RealGradient( -0.125*(1.0-eta-zeta+eta*zeta), 0.0, 0.0 );
68  else
69  return RealGradient( 0.125*(1.0-eta-zeta+eta*zeta), 0.0, 0.0 );
70  }
71  case 1:
72  {
73  if (elem->point(1) > elem->point(2))
74  return RealGradient( 0.0, -0.125*(1.0+xi-zeta-xi*zeta), 0.0 );
75  else
76  return RealGradient( 0.0, 0.125*(1.0+xi-zeta-xi*zeta), 0.0 );
77  }
78  case 2:
79  {
80  if (elem->point(2) > elem->point(3))
81  return RealGradient( 0.125*(1.0+eta-zeta-eta*zeta), 0.0, 0.0 );
82  else
83  return RealGradient( -0.125*(1.0+eta-zeta-eta*zeta), 0.0, 0.0 );
84  }
85  case 3:
86  {
87  if (elem->point(3) > elem->point(0))
88  return RealGradient( 0.0, 0.125*(1.0-xi-zeta+xi*zeta), 0.0 );
89  else
90  return RealGradient( 0.0, -0.125*(1.0-xi-zeta+xi*zeta), 0.0 );
91  }
92  case 4:
93  {
94  if (elem->point(0) > elem->point(4))
95  return RealGradient( 0.0, 0.0, -0.125*(1.0-xi-eta+xi*eta) );
96  else
97  return RealGradient( 0.0, 0.0, 0.125*(1.0-xi-eta+xi*eta) );
98  }
99  case 5:
100  {
101  if (elem->point(1) > elem->point(5))
102  return RealGradient( 0.0, 0.0, -0.125*(1.0+xi-eta-xi*eta) );
103  else
104  return RealGradient( 0.0, 0.0, 0.125*(1.0+xi-eta-xi*eta) );
105  }
106  case 6:
107  {
108  if (elem->point(2) > elem->point(6))
109  return RealGradient( 0.0, 0.0, -0.125*(1.0+xi+eta+xi*eta) );
110  else
111  return RealGradient( 0.0, 0.0, 0.125*(1.0+xi+eta+xi*eta) );
112  }
113  case 7:
114  {
115  if (elem->point(3) > elem->point(7))
116  return RealGradient( 0.0, 0.0, -0.125*(1.0-xi+eta-xi*eta) );
117  else
118  return RealGradient( 0.0, 0.0, 0.125*(1.0-xi+eta-xi*eta) );
119  }
120  case 8:
121  {
122  if (elem->point(4) > elem->point(5))
123  return RealGradient( -0.125*(1.0-eta+zeta-eta*zeta), 0.0, 0.0 );
124  else
125  return RealGradient( 0.125*(1.0-eta+zeta-eta*zeta), 0.0, 0.0 );
126  }
127  case 9:
128  {
129  if (elem->point(5) > elem->point(6))
130  return RealGradient( 0.0, -0.125*(1.0+xi+zeta+xi*zeta), 0.0 );
131  else
132  return RealGradient( 0.0, 0.125*(1.0+xi+zeta+xi*zeta), 0.0 );
133  }
134  case 10:
135  {
136  if (elem->point(7) > elem->point(6))
137  return RealGradient( -0.125*(1.0+eta+zeta+eta*zeta), 0.0, 0.0 );
138  else
139  return RealGradient( 0.125*(1.0+eta+zeta+eta*zeta), 0.0, 0.0 );
140  }
141  case 11:
142  {
143  if (elem->point(4) > elem->point(7))
144  return RealGradient( 0.0, -0.125*(1.0-xi+zeta-xi*zeta), 0.0 );
145  else
146  return RealGradient( 0.0, 0.125*(1.0-xi+zeta-xi*zeta), 0.0 );
147  }
148 
149  default:
150  libmesh_error_msg("Invalid i = " << i);
151  }
152 
153  return RealGradient();
154  }
155 
156  case TET10:
157  case TET14:
158  {
159  libmesh_assert_less (i, 6);
160 
161  const Real xi = p(0);
162  const Real eta = p(1);
163  const Real zeta = p(2);
164 
165  switch(i)
166  {
167  case 0:
168  {
169  if (elem->point(0) > elem->point(1))
170  return RealGradient( -1.0+eta+zeta, -xi, -xi );
171  else
172  return RealGradient( 1.0-eta-zeta, xi, xi );
173  }
174  case 1:
175  {
176  if (elem->point(1) > elem->point(2))
177  return RealGradient( eta, -xi, 0.0 );
178  else
179  return RealGradient( -eta, xi, 0.0 );
180  }
181  case 2:
182  {
183  if (elem->point(0) > elem->point(2))
184  return RealGradient( -eta, -1.0+xi+zeta, -eta );
185  else
186  return RealGradient( eta, 1.0-xi-zeta, eta );
187  }
188  case 3:
189  {
190  if (elem->point(0) > elem->point(3))
191  return RealGradient( -zeta, -zeta, -1.0+xi+eta );
192  else
193  return RealGradient( zeta, zeta, 1.0-xi-eta );
194  }
195  case 4:
196  {
197  if (elem->point(1) > elem->point(3))
198  return RealGradient( zeta, 0.0, -xi );
199  else
200  return RealGradient( -zeta, 0.0, xi );
201  }
202  case 5:
203  {
204  if (elem->point(2) > elem->point(3))
205  return RealGradient( 0.0, zeta, -eta );
206  else
207  return RealGradient( 0.0, -zeta, eta );
208  }
209  default:
210  libmesh_error_msg("Invalid i = " << i);
211  }
212  return RealGradient();
213  }
214 
215  default:
216  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
217  }
218  }
219 
220  // unsupported order
221  default:
222  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
223  }
224 #else // LIBMESH_DIM != 3
225  libmesh_ignore(elem, order, i, p, add_p_level);
226  libmesh_not_implemented();
227 #endif
228 }
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, 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 30 of file fe_nedelec_one_shape_2D.C.

35 {
36 #if LIBMESH_DIM > 1
37  libmesh_assert(elem);
38 
39  const Order total_order = static_cast<Order>(order + add_p_level * elem->p_level());
40 
41  switch (total_order)
42  {
43  // linear Nedelec (first kind) shape functions
44  case FIRST:
45  {
46  switch (elem->type())
47  {
48  case QUAD8:
49  case QUAD9:
50  {
51  libmesh_assert_less (i, 4);
52 
53  const Real xi = p(0);
54  const Real eta = p(1);
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 
62  switch(i)
63  {
64  case 0:
65  {
66  if (elem->point(0) > elem->point(1))
67  return RealGradient( -0.25*(1.0-eta), 0.0 );
68  else
69  return RealGradient( 0.25*(1.0-eta), 0.0 );
70  }
71  case 1:
72  {
73  if (elem->point(1) > elem->point(2))
74  return RealGradient( 0.0, -0.25*(1.0+xi) );
75  else
76  return RealGradient( 0.0, 0.25*(1.0+xi) );
77  }
78 
79  case 2:
80  {
81  if (elem->point(2) > elem->point(3))
82  return RealGradient( 0.25*(1.0+eta), 0.0 );
83  else
84  return RealGradient( -0.25*(1.0+eta), 0.0 );
85  }
86  case 3:
87  {
88  if (elem->point(3) > elem->point(0))
89  return RealGradient( 0.0, -0.25*(xi-1.0) );
90  else
91  return RealGradient( 0.0, 0.25*(xi-1.0) );
92  }
93 
94  default:
95  libmesh_error_msg("Invalid i = " << i);
96  }
97 
98  return RealGradient();
99  }
100 
101  case TRI6:
102  case TRI7:
103  {
104  const Real xi = p(0);
105  const Real eta = p(1);
106 
107  libmesh_assert_less (i, 3);
108 
109  switch(i)
110  {
111  case 0:
112  {
113  if (elem->point(0) > elem->point(1))
114  return RealGradient( -1.0+eta, -xi );
115  else
116  return RealGradient( 1.0-eta, xi );
117  }
118  case 1:
119  {
120  if (elem->point(1) > elem->point(2))
121  return RealGradient( eta, -xi );
122  else
123  return RealGradient( -eta, xi );
124  }
125 
126  case 2:
127  {
128  if (elem->point(2) > elem->point(0))
129  return RealGradient( eta, -xi+1.0 );
130  else
131  return RealGradient( -eta, xi-1.0 );
132  }
133 
134  default:
135  libmesh_error_msg("Invalid i = " << i);
136  }
137  }
138 
139  default:
140  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
141  }
142  }
143 
144  // unsupported order
145  default:
146  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << total_order);
147  }
148 #else // LIBMESH_DIM > 1
149  libmesh_ignore(elem, order, i, p, add_p_level);
150  libmesh_not_implemented();
151 #endif
152 }
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() [4/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:182
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:1106
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709

◆ shape() [5/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:182
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:1106
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709

◆ shape() [6/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() [7/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() [8/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 43 of file fe_raviart_shape_3D.C.

48 {
49 #if LIBMESH_DIM == 3
50  libmesh_assert(elem);
51 
52  const Order totalorder = static_cast<Order>(order + add_p_level * elem->p_level());
53 
54  switch (totalorder)
55  {
56  // linear Raviart-Thomas shape functions
57  case FIRST:
58  {
59  switch (elem->type())
60  {
61  case HEX27:
62  {
63  libmesh_assert_less (i, 6);
64 
65  const Real xi = p(0);
66  const Real eta = p(1);
67  const Real zeta = p(2);
68 
69  // Even with a loose inverse_map tolerance we ought to
70  // be nearly on the element interior in master
71  // coordinates
72  libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*TOLERANCE );
73  libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*TOLERANCE );
74  libmesh_assert_less_equal ( std::fabs(zeta), 1.0+10*TOLERANCE );
75 
76  switch(i)
77  {
78  case 0:
79  {
80  std::array<Point, 4> arr = {elem->point(1), elem->point(0), elem->point(3), elem->point(2)};
81  if (orientation(arr))
82  return RealGradient( 0.0, 0.0, 0.125*(zeta-1.0) );
83  else
84  return RealGradient( 0.0, 0.0, -0.125*(zeta-1.0) );
85  }
86  case 1:
87  {
88  std::array<Point, 4> arr = {elem->point(4), elem->point(0), elem->point(1), elem->point(5)};
89  if (orientation(arr))
90  return RealGradient( 0.0, 0.125*(eta-1.0), 0.0 );
91  else
92  return RealGradient( 0.0, -0.125*(eta-1.0), 0.0 );
93  }
94  case 2:
95  {
96  std::array<Point, 4> arr = {elem->point(6), elem->point(5), elem->point(1), elem->point(2)};
97  if (orientation(arr))
98  return RealGradient( 0.125*(xi+1.0), 0.0, 0.0 );
99  else
100  return RealGradient( -0.125*(xi+1.0), 0.0, 0.0 );
101  }
102  case 3:
103  {
104  std::array<Point, 4> arr = {elem->point(7), elem->point(6), elem->point(2), elem->point(3)};
105  if (orientation(arr))
106  return RealGradient( 0.0, 0.125*(1.0+eta), 0.0 );
107  else
108  return RealGradient( 0.0, -0.125*(1.0+eta), 0.0 );
109  }
110  case 4:
111  {
112  std::array<Point, 4> arr = {elem->point(7), elem->point(3), elem->point(0), elem->point(4)};
113  if (orientation(arr))
114  return RealGradient( 0.125*(xi-1.0), 0.0, 0.0 );
115  else
116  return RealGradient( -0.125*(xi-1.0), 0.0, 0.0 );
117  }
118  case 5:
119  {
120  std::array<Point, 4> arr = {elem->point(5), elem->point(6), elem->point(7), elem->point(4)};
121  if (orientation(arr))
122  return RealGradient( 0.0, 0.0, 0.125*(1.0+zeta) );
123  else
124  return RealGradient( 0.0, 0.0, -0.125*(1.0+zeta) );
125  }
126  default:
127  libmesh_error_msg("Invalid i = " << i);
128  }
129 
130  return RealGradient();
131  }
132 
133  case TET14:
134  {
135  libmesh_assert_less (i, 4);
136 
137  const Real xi = p(0);
138  const Real eta = p(1);
139  const Real zeta = p(2);
140 
141  switch(i)
142  {
143  case 0:
144  {
145  std::array<Point, 3> arr = {elem->point(0), elem->point(2), elem->point(1)};
146  if (orientation(arr))
147  return RealGradient( 2.0*xi, 2.0*eta, 2.0*zeta-2.0 );
148  else
149  return RealGradient( -2.0*xi, -2.0*eta, -2.0*zeta+2.0 );
150  }
151  case 1:
152  {
153  std::array<Point, 3> arr = {elem->point(1), elem->point(3), elem->point(0)};
154  if (orientation(arr))
155  return RealGradient( 2.0*xi, 2.0*eta-2.0, 2.0*zeta );
156  else
157  return RealGradient( -2.0*xi, -2.0*eta+2.0, -2.0*zeta );
158  }
159  case 2:
160  {
161  std::array<Point, 3> arr = {elem->point(1), elem->point(2), elem->point(3)};
162  if (orientation(arr))
163  return RealGradient( 2.0*xi, 2.0*eta, 2.0*zeta );
164  else
165  return RealGradient( -2.0*xi, -2.0*eta, -2.0*zeta );
166  }
167  case 3:
168  {
169  std::array<Point, 3> arr = {elem->point(0), elem->point(3), elem->point(2)};
170  if (orientation(arr))
171  return RealGradient( 2.0*xi-2.0, 2.0*eta, 2.0*zeta );
172  else
173  return RealGradient( -2.0*xi+2.0, -2.0*eta, -2.0*zeta );
174  }
175  default:
176  libmesh_error_msg("Invalid i = " << i);
177  }
178 
179  return RealGradient();
180  }
181 
182  default:
183  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
184  }
185  }
186 
187  // unsupported order
188  default:
189  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
190  }
191 #else // LIBMESH_DIM != 3
192  libmesh_ignore(elem, order, i, p, add_p_level);
193  libmesh_not_implemented();
194 #endif
195 }
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
bool orientation(std::array< Point, N > &arr)

◆ shape() [9/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() [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, 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() [12/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() [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:182
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:1106
FEType fe_type
The finite element type for this object.
Definition: fe_abstract.h:709

◆ shape() [14/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() [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, 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() [17/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() [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, 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() [20/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() [21/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() [22/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() [23/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() [24/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() [25/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(static_cast<Order>(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() [26/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() [27/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() [28/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() [29/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() [30/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() [31/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() [32/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() [33/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() [34/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() [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< 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() [37/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() [38/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() [39/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() [40/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() [41/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() [42/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() [43/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(static_cast<Order>(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() [44/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() [45/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [46/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [47/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() [48/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape() [49/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
81 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [50/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 }
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ shape() [51/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(static_cast<Order>(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() [52/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 80 of file fe_lagrange_shape_2D.C.

84 {
85  return fe_lagrange_2D_shape<L2_LAGRANGE>(type, order, i, p);
86 }

◆ shape() [53/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() [54/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(), static_cast<Order>(order + add_p_level * add_p_level * elem->p_level()), i, p);
92 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [55/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() [56/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() [57/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
93 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [58/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() [59/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(static_cast<Order>(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() [60/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 90 of file fe_lagrange_shape_2D.C.

95 {
96  libmesh_assert(elem);
97 
98  // call the orientation-independent shape functions
99  return fe_lagrange_2D_shape<LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
100 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [61/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() [62/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(), static_cast<Order>(fet.order + add_p_level * add_p_level * elem->p_level()), i, p);
105 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [63/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() [64/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() [65/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
110 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [66/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 105 of file fe_lagrange_shape_2D.C.

110 {
111  libmesh_assert(elem);
112 
113  // call the orientation-independent shape functions
114  return fe_lagrange_2D_shape<L2_LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
115 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [67/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() [68/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
123 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [69/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 119 of file fe_lagrange_shape_2D.C.

124 {
125  libmesh_assert(elem);
126  return fe_lagrange_2D_shape<LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
127 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [70/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
132 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [71/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() [72/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
139 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [73/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 132 of file fe_lagrange_shape_2D.C.

137 {
138  libmesh_assert(elem);
139  return fe_lagrange_2D_shape<L2_LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
140 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [74/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() [75/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
145 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [76/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
150 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [77/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() [78/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() [79/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() [80/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 153 of file fe_raviart_shape_2D.C.

158 {
159  return FE<2,RAVIART_THOMAS>::shape(elem, order, i, p, add_p_level);
160 }

◆ shape() [81/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() [82/195]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 158 of file fe_nedelec_one_shape_2D.C.

162 {
163  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
164  return RealGradient();
165 }
RealVectorValue RealGradient

◆ shape() [83/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() [84/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() [85/195]

RealGradient libMesh::FE< 2, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 164 of file fe_raviart_shape_2D.C.

168 {
169  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
170  return RealGradient();
171 }
RealVectorValue RealGradient

◆ shape() [86/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() [87/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() [88/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 169 of file fe_nedelec_one_shape_2D.C.

174 {
175  return FE<2,NEDELEC_ONE>::shape(elem, fet.order, i, p, add_p_level);
176 }

◆ shape() [89/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() [90/195]

RealGradient libMesh::FE< 2, L2_RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 174 of file fe_raviart_shape_2D.C.

178 {
179  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
180  return RealGradient();
181 }
RealVectorValue RealGradient

◆ shape() [91/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() [92/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:2945
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:796
virtual ElemType type() const =0

◆ shape() [93/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:201

◆ shape() [94/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 185 of file fe_raviart_shape_2D.C.

190 {
191  return FE<2,RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
192 }

◆ shape() [95/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
200 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [96/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  static_cast<Order>(order + add_p_level*elem->p_level()), i, p);
204 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [97/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 195 of file fe_raviart_shape_2D.C.

200 {
201  return FE<2,L2_RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
202 }

◆ shape() [98/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 195 of file fe_hierarchic_vec.C.

197 {
198  return FE<0,HIERARCHIC_VEC>::shape(type, order, i, p);
199 }

◆ shape() [99/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() [100/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 198 of file fe_raviart_shape_3D.C.

203 {
204  return FE<3,RAVIART_THOMAS>::shape(elem, order, i, p, add_p_level);
205 }

◆ shape() [101/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
214 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [102/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:201

◆ shape() [103/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  static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
218 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape() [104/195]

RealGradient libMesh::FE< 3, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 209 of file fe_raviart_shape_3D.C.

213 {
214  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
215  return RealGradient();
216 }
RealVectorValue RealGradient

◆ shape() [105/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() [106/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 =
228  static_cast<Order>(order+add_p_level*elem->p_level());
229 
230  const unsigned int dofs_per_side = totalorder+1u;
231 
232  switch (type)
233  {
234  case TRI6:
235  case TRI7:
236  {
237  libmesh_assert_less(i, 3*dofs_per_side);
238 
239  // Flip odd degree of freedom values if necessary
240  // to keep continuity on sides. We'll flip xi/eta rather than
241  // flipping phi, so that we can use this to handle the "nodal"
242  // degrees of freedom too.
243  Real f = 1.;
244 
245  const Real zeta1 = p(0);
246  const Real zeta2 = p(1);
247  const Real zeta0 = 1. - zeta1 - zeta2;
248 
249  if (zeta1 > zeta2 && zeta0 > zeta2) // side 0
250  {
251  if (i >= dofs_per_side)
252  return 0;
253 
254  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
255  return 1;
256 
257  if ((i < 2 || i % 2) &&
258  elem->point(0) > elem->point(1))
259  f = -1;
260 
261  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, i, f*(zeta1-zeta0));
262  }
263  else if (zeta1 > zeta0 && zeta2 > zeta0) // side 1
264  {
265  if (i < dofs_per_side ||
266  i >= 2*dofs_per_side)
267  return 0;
268 
269  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
270  return 1;
271 
272  const unsigned int side_i = i - dofs_per_side;
273 
274  if ((side_i < 2 || side_i % 2) &&
275  elem->point(1) > elem->point(2))
276  f = -1;
277 
278  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*(zeta2-zeta1));
279  }
280  else // side 2
281  {
282  libmesh_assert (zeta2 >= zeta1 && zeta0 >= zeta1); // On a corner???
283 
284  if (i < 2*dofs_per_side)
285  return 0;
286 
287  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
288  return 1;
289 
290  const unsigned int side_i = i - 2*dofs_per_side;
291 
292  if ((side_i < 2 || side_i % 2) &&
293  elem->point(2) > elem->point(0))
294  f = -1;
295 
296  return FE<1,HIERARCHIC>::shape(EDGE3, totalorder, side_i, f*(zeta0-zeta2));
297  }
298  }
299  case QUAD8:
300  case QUADSHELL8:
301  case QUAD9:
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->point(0) > elem->point(1))
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->point(1) > elem->point(2))
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->point(3) > elem->point(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->point(0) > elem->point(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:2945
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
const Point & point(const unsigned int i) const
Definition: elem.h:2277

◆ shape() [107/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 218 of file fe_hierarchic_vec.C.

220 {
221  Real value = FE<1,HIERARCHIC>::shape( type, order, i, p );
222  return libMesh::RealGradient( value );
223 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [108/195]

RealGradient libMesh::FE< 3, L2_RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 219 of file fe_raviart_shape_3D.C.

223 {
224  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
225  return RealGradient();
226 }
RealVectorValue RealGradient

◆ shape() [109/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 219 of file fe_monomial_vec.C.

223 {
224  Real value = FE<1, MONOMIAL>::shape(type, order, i, p);
226 }
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:54

◆ shape() [110/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() [111/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 231 of file fe_raviart_shape_3D.C.

236 {
237  return FE<3,RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
238 }

◆ shape() [112/195]

RealGradient libMesh::FE< 3, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 233 of file fe_nedelec_one_shape_3D.C.

237 {
238  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
239  return RealGradient();
240 }
RealVectorValue RealGradient

◆ shape() [113/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() [114/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 241 of file fe_raviart_shape_3D.C.

246 {
247  return FE<3,L2_RAVIART_THOMAS>::shape(elem, fet.order, i, p, add_p_level);
248 }

◆ shape() [115/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 242 of file fe_hierarchic_vec.C.

244 {
245  return FE<1,HIERARCHIC_VEC>::shape(type, order, i, p);
246 }

◆ shape() [116/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 245 of file fe_nedelec_one_shape_3D.C.

250 {
251  return FE<3,NEDELEC_ONE>::shape(elem, fet.order, i, p, add_p_level);
252 }

◆ 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:201
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 247 of file fe_hermite_shape_2D.C.

251 {
252  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
253  return 0.;
254 }

◆ shape() [119/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 256 of file fe_monomial_vec.C.

260 {
261  Real value = FE<2, MONOMIAL>::shape(type, order, i / 2, p);
262 
263  switch (i % 2)
264  {
265  case 0:
267 
268  case 1:
269  return libMesh::RealVectorValue(Real(0), value);
270 
271  default:
272  libmesh_error_msg("i%2 must be either 0 or 1!");
273  }
274 
275  // dummy
276  return libMesh::RealVectorValue();
277 }
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:54

◆ shape() [120/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 258 of file fe_hermite_shape_2D.C.

263 {
264  return FE<2,HERMITE>::shape(elem, fet.order, i, p, add_p_level);
265 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [121/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 265 of file fe_hierarchic_vec.C.

267 {
268  Real value = FE<2,HIERARCHIC>::shape( type, order, i/2, p );
269 
270  switch( i%2 )
271  {
272  case 0:
273  return libMesh::RealGradient( value );
274 
275  case 1:
276  return libMesh::RealGradient( Real(0), value );
277 
278  default:
279  libmesh_error_msg("i%2 must be either 0 or 1!");
280  }
281 
282  //dummy
283  return libMesh::RealGradient();
284 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [122/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() [123/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [124/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 332 of file fe_hierarchic_vec.C.

334 {
335  return FE<2,HIERARCHIC_VEC>::shape(type, order, i, p);
336 }

◆ shape() [125/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 336 of file fe_monomial_vec.C.

340 {
341  Real value = FE<3, MONOMIAL>::shape(type, order, i / 3, p);
342 
343  switch (i % 3)
344  {
345  case 0:
347 
348  case 1:
349  return libMesh::RealVectorValue(Real(0), value);
350 
351  case 2:
352  return libMesh::RealVectorValue(Real(0), Real(0), value);
353 
354  default:
355  libmesh_error_msg("i%3 must be 0, 1, or 2!");
356  }
357 
358  // dummy
359  return libMesh::RealVectorValue();
360 }
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:54

◆ shape() [126/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 356 of file fe_hierarchic_vec.C.

358 {
359  Real value = FE<3,HIERARCHIC>::shape( type, order, i/3, p );
360 
361  switch( i%3 )
362  {
363  case 0:
364  return libMesh::RealGradient( value );
365 
366  case 1:
367  return libMesh::RealGradient( Real(0), value );
368 
369  case 2:
370  return libMesh::RealGradient( Real(0), Real(0), value );
371 
372  default:
373  libmesh_error_msg("i%3 must be 0, 1, or 2!");
374  }
375 
376  //dummy
377  return libMesh::RealGradient();
378 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [127/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [128/195]

Real libMesh::FE< 2, BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 392 of file fe_bernstein_shape_2D.C.

396 {
397  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge orientation is needed.");
398  return 0.;
399 }

◆ 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 403 of file fe_bernstein_shape_2D.C.

408 {
409  return FE<2,BERNSTEIN>::shape(elem, fet.order, i, p, add_p_level);
410 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [130/195]

Real libMesh::FE< 3, LAGRANGE >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 414 of file fe_lagrange_shape_3D.C.

418 {
419  return fe_lagrange_3D_shape<LAGRANGE>(type, order, i, p);
420 }

◆ shape() [131/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 425 of file fe_lagrange_shape_3D.C.

429 {
430  return fe_lagrange_3D_shape<L2_LAGRANGE>(type, order, i, p);
431 }

◆ shape() [132/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 426 of file fe_monomial_vec.C.

431 {
432  Real value =
433  FE<0, MONOMIAL>::shape(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
435 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape() [133/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 433 of file fe_hierarchic_vec.C.

435 {
436  return FE<3,HIERARCHIC_VEC>::shape(type, order, i, p);
437 }

◆ 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 436 of file fe_lagrange_shape_3D.C.

441 {
442  libmesh_assert(elem);
443 
444  // call the orientation-independent shape functions
445  return fe_lagrange_3D_shape<LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
446 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
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]

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 451 of file fe_lagrange_shape_3D.C.

456 {
457  libmesh_assert(elem);
458 
459  // call the orientation-independent shape functions
460  return fe_lagrange_3D_shape<L2_LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
461 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ 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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [138/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 458 of file fe_hierarchic_vec.C.

461 {
462  const Real value = FE<0,HIERARCHIC>::shape(elem, order, i, p, add_p_level);
463  return libMesh::RealGradient( value );
464 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [139/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 466 of file fe_lagrange_shape_3D.C.

471 {
472  libmesh_assert(elem);
473  return fe_lagrange_3D_shape<LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
474 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [140/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 471 of file fe_monomial_vec.C.

476 {
477  Real value =
478  FE<1, MONOMIAL>::shape(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
480 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape() [141/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 479 of file fe_lagrange_shape_3D.C.

484 {
485  libmesh_assert(elem);
486  return fe_lagrange_3D_shape<L2_LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, p);
487 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape() [142/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 487 of file fe_hierarchic_vec.C.

490 {
491  return FE<0,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
492 }

◆ shape() [143/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 515 of file fe_hierarchic_vec.C.

518 {
519  Real value = FE<1,HIERARCHIC>::shape(elem, order, i, p, add_p_level);
520  return libMesh::RealGradient( value );
521 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [144/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 515 of file fe_monomial_vec.C.

520 {
521  Real value =
522  FE<2, MONOMIAL>::shape(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i / 2, p);
523 
524  switch (i % 2)
525  {
526  case 0:
528 
529  case 1:
530  return libMesh::RealVectorValue(Real(0), value);
531 
532  default:
533  libmesh_error_msg("i%2 must be either 0 or 1!");
534  }
535 
536  // dummy
537  return libMesh::RealVectorValue();
538 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape() [145/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 543 of file fe_hierarchic_vec.C.

546 {
547  return FE<1,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
548 }

◆ shape() [146/195]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 553 of file fe_nedelec_one.C.

554 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [147/195]

RealGradient libMesh::FE< 0, NEDELEC_ONE >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 556 of file fe_nedelec_one.C.

557 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ 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 571 of file fe_hierarchic_vec.C.

574 {
575  const Real value = FE<2,HIERARCHIC>::shape(elem, order, i/2, p, add_p_level);
576 
577  switch( i%2 )
578  {
579  case 0:
580  return libMesh::RealGradient( value );
581 
582  case 1:
583  return libMesh::RealGradient( Real(0), value );
584 
585  default:
586  libmesh_error_msg("i%2 must be either 0 or 1!");
587  }
588 
589  //dummy
590  return libMesh::RealGradient();
591 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [149/195]

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

Definition at line 580 of file fe_nedelec_one.C.

581 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [150/195]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 582 of file fe_raviart.C.

583 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [151/195]

RealGradient libMesh::FE< 1, NEDELEC_ONE >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 583 of file fe_nedelec_one.C.

584 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape() [152/195]

RealGradient libMesh::FE< 0, RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 585 of file fe_raviart.C.

586 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [153/195]

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

Definition at line 588 of file fe_raviart.C.

589 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [154/195]

RealGradient libMesh::FE< 0, L2_RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 591 of file fe_raviart.C.

592 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [155/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 601 of file fe_monomial_vec.C.

606 {
607  Real value =
608  FE<3, MONOMIAL>::shape(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i / 3, p);
609 
610  switch (i % 3)
611  {
612  case 0:
614 
615  case 1:
616  return libMesh::RealVectorValue(Real(0), value);
617 
618  case 2:
619  return libMesh::RealVectorValue(Real(0), Real(0), value);
620 
621  default:
622  libmesh_error_msg("i%3 must be 0, 1, or 2!");
623  }
624 
625  // dummy
626  return libMesh::RealVectorValue();
627 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape() [156/195]

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

Definition at line 631 of file fe_raviart.C.

632 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [157/195]

RealGradient libMesh::FE< 1, RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 634 of file fe_raviart.C.

635 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [158/195]

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

Definition at line 637 of file fe_raviart.C.

638 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [159/195]

RealGradient libMesh::FE< 1, L2_RAVIART_THOMAS >::shape ( const Elem ,
const Order  ,
const unsigned  int,
const Point ,
const bool   
)
inherited

Definition at line 640 of file fe_raviart.C.

641 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape() [160/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 641 of file fe_hierarchic_vec.C.

644 {
645  return FE<2,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
646 }

◆ shape() [161/195]

Real libMesh::FE< 2, SZABAB >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 646 of file fe_szabab_shape_2D.C.

650 {
651  libmesh_error_msg("Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
652  return 0.;
653 }

◆ shape() [162/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 658 of file fe_szabab_shape_2D.C.

663 {
664  return FE<2,SZABAB>::shape(elem, fet.order, i, p, add_p_level);
665 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape() [163/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 668 of file fe_hierarchic_vec.C.

671 {
672  const Real value = FE<3,HIERARCHIC>::shape(elem, order, i/3, p, add_p_level);
673 
674  switch( i%3 )
675  {
676  case 0:
677  return libMesh::RealGradient( value );
678 
679  case 1:
680  return libMesh::RealGradient( Real(0), value );
681 
682  case 2:
683  return libMesh::RealGradient( Real(0), Real(0), value );
684 
685  default:
686  libmesh_error_msg("i%3 must be 0, 1, or 2!");
687  }
688 
689  //dummy
690  return libMesh::RealGradient();
691 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [164/195]

Real libMesh::FE< 2, SUBDIVISION >::shape ( const ElemType  type,
const Order  order,
const unsigned int  i,
const Point p 
)
inherited

Definition at line 708 of file fe_subdivision_2D.C.

712 {
713  switch (order)
714  {
715  case FOURTH:
716  {
717  switch (type)
718  {
719  case TRI3SUBDIVISION:
720  libmesh_assert_less(i, 12);
721  return FESubdivision::regular_shape(i,p(0),p(1));
722  default:
723  libmesh_error_msg("ERROR: Unsupported element type == " << Utility::enum_to_string(type));
724  }
725  }
726  default:
727  libmesh_error_msg("ERROR: Unsupported polynomial order == " << order);
728  }
729 }
std::string enum_to_string(const T e)

◆ shape() [165/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 733 of file fe_lagrange_vec.C.

735 {
736  return FE<0,LAGRANGE_VEC>::shape(type, order, i, p);
737 }

◆ shape() [166/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 734 of file fe_subdivision_2D.C.

739 {
740  libmesh_assert(elem);
741  const Order totalorder =
742  static_cast<Order>(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() [167/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 =
756  static_cast<Order>(fet.order+add_p_level*elem->p_level());
757  return FE<2,SUBDIVISION>::shape(elem->type(), totalorder, i, p);
758 }
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() [168/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 749 of file fe_hierarchic_vec.C.

752 {
753  return FE<3,HIERARCHIC_VEC>::shape(elem, order, i, p, add_p_level);
754 }

◆ shape() [169/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 756 of file fe_lagrange_vec.C.

758 {
759  Real value = FE<1,LAGRANGE>::shape( type, order, i, p );
760  return libMesh::RealGradient( value );
761 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [170/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 780 of file fe_lagrange_vec.C.

782 {
783  return FE<1,LAGRANGE_VEC>::shape(type, order, i, p);
784 }

◆ 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 803 of file fe_lagrange_vec.C.

805 {
806  Real value = FE<2,LAGRANGE>::shape( type, order, i/2, p );
807 
808  switch( i%2 )
809  {
810  case 0:
811  return libMesh::RealGradient( value );
812 
813  case 1:
814  return libMesh::RealGradient( Real(0), value );
815 
816  default:
817  libmesh_error_msg("i%2 must be either 0 or 1!");
818  }
819 
820  //dummy
821  return libMesh::RealGradient();
822 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [172/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() [173/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 870 of file fe_lagrange_vec.C.

872 {
873  return FE<2,LAGRANGE_VEC>::shape(type, order, i, p);
874 }

◆ shape() [174/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 894 of file fe_lagrange_vec.C.

896 {
897  Real value = FE<3,LAGRANGE>::shape( type, order, i/3, p );
898 
899  switch( i%3 )
900  {
901  case 0:
902  return libMesh::RealGradient( value );
903 
904  case 1:
905  return libMesh::RealGradient( Real(0), value );
906 
907  case 2:
908  return libMesh::RealGradient( Real(0), Real(0), value );
909 
910  default:
911  libmesh_error_msg("i%3 must be 0, 1, or 2!");
912  }
913 
914  //dummy
915  return libMesh::RealGradient();
916 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape() [175/195]

Real libMesh::FE< 3, BERNSTEIN >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 899 of file fe_bernstein_shape_3D.C.

903 {
904  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge and face orientation is needed.");
905  return 0.;
906 }

◆ 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 910 of file fe_bernstein_shape_3D.C.

915 {
916  return FE<3,BERNSTEIN>::shape(elem, fet.order, i, p, add_p_level);
917 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
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 971 of file fe_lagrange_vec.C.

973 {
974  return FE<3,LAGRANGE_VEC>::shape(type, order, i, p);
975 }

◆ 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 996 of file fe_lagrange_vec.C.

999 {
1000  Real value = FE<0,LAGRANGE>::shape( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
1001  return libMesh::RealGradient( value );
1002 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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 1025 of file fe_lagrange_vec.C.

1028 {
1029  return FE<0,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1030 }

◆ 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 1052 of file fe_lagrange_vec.C.

1055 {
1056  Real value = FE<1,LAGRANGE>::shape( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, p);
1057  return libMesh::RealGradient( value );
1058 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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 1080 of file fe_lagrange_vec.C.

1083 {
1084  return FE<1,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1085 }

◆ 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 1107 of file fe_lagrange_vec.C.

1110 {
1111  Real value = FE<2,LAGRANGE>::shape( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i/2, p );
1112 
1113  switch( i%2 )
1114  {
1115  case 0:
1116  return libMesh::RealGradient( value );
1117 
1118  case 1:
1119  return libMesh::RealGradient( Real(0), value );
1120 
1121  default:
1122  libmesh_error_msg("i%2 must be either 0 or 1!");
1123  }
1124 
1125  //dummy
1126  return libMesh::RealGradient();
1127 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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 1177 of file fe_lagrange_vec.C.

1180 {
1181  return FE<2,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1182 }

◆ shape() [184/195]

Real libMesh::FE< 3, L2_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 1179 of file fe_hierarchic_shape_3D.C.

1183 {
1184  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1185  return 0.;
1186 }

◆ shape() [185/195]

Real libMesh::FE< 3, SIDE_HIERARCHIC >::shape ( const ElemType  ,
const Order  ,
const unsigned  int,
const Point  
)
inherited

Definition at line 1191 of file fe_hierarchic_shape_3D.C.

1195 {
1196  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1197  return 0.;
1198 }

◆ shape() [186/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 1203 of file fe_hierarchic_shape_3D.C.

1208 {
1209  return fe_hierarchic_3D_shape<HIERARCHIC>(elem, order, i, p, add_p_level);
1210 }

◆ shape() [187/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 1204 of file fe_lagrange_vec.C.

1207 {
1208  Real value = FE<3,LAGRANGE>::shape( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i/3, p );
1209 
1210  switch( i%3 )
1211  {
1212  case 0:
1213  return libMesh::RealGradient( value );
1214 
1215  case 1:
1216  return libMesh::RealGradient( Real(0), value );
1217 
1218  case 2:
1219  return libMesh::RealGradient( Real(0), Real(0), value );
1220 
1221  default:
1222  libmesh_error_msg("i%3 must be 0, 1, or 2!");
1223  }
1224 
1225  //dummy
1226  return libMesh::RealGradient();
1227 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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 1214 of file fe_hierarchic_shape_3D.C.

1219 {
1220  return fe_hierarchic_3D_shape<HIERARCHIC>(elem, fet.order, i, p, add_p_level);
1221 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201

◆ 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 1227 of file fe_hierarchic_shape_3D.C.

1232 {
1233  return fe_hierarchic_3D_shape<L2_HIERARCHIC>(elem, order, i, p, add_p_level);
1234 }

◆ 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 1238 of file fe_hierarchic_shape_3D.C.

1243 {
1244  return fe_hierarchic_3D_shape<L2_HIERARCHIC>(elem, fet.order, i, p, add_p_level);
1245 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201

◆ shape() [191/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 1250 of file fe_hierarchic_shape_3D.C.

1255 {
1256 #if LIBMESH_DIM == 3
1257  libmesh_assert(elem);
1258  const ElemType type = elem->type();
1259 
1260  const Order totalorder =
1261  static_cast<Order>(order+add_p_level*elem->p_level());
1262 
1263  switch (type)
1264  {
1265  case HEX27:
1266  {
1267  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+1u);
1268  libmesh_assert_less(i, 6*dofs_per_side);
1269 
1270  const unsigned int sidenum = cube_side(p);
1271  if (sidenum > 5)
1272  return std::numeric_limits<Real>::quiet_NaN();
1273 
1274  const unsigned int dof_offset = sidenum * dofs_per_side;
1275 
1276  if (i < dof_offset) // i is on a previous side
1277  return 0;
1278 
1279  if (i >= dof_offset + dofs_per_side) // i is on a later side
1280  return 0;
1281 
1282  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
1283  return 1;
1284 
1285  unsigned int side_i = i - dof_offset;
1286 
1287  std::unique_ptr<const Elem> side = elem->build_side_ptr(sidenum);
1288 
1289  Point sidep = cube_side_point(sidenum, p);
1290 
1291  cube_remap(side_i, *side, totalorder, sidep);
1292 
1293  return FE<2,HIERARCHIC>::shape(side.get(), order, side_i, sidep, add_p_level);
1294  }
1295 
1296  case TET14:
1297  {
1298  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+2u)/2u;
1299  libmesh_assert_less(i, 4*dofs_per_side);
1300 
1301  const Real zeta[4] = { 1. - p(0) - p(1) - p(2), p(0), p(1), p(2) };
1302 
1303  unsigned int face_num = 0;
1304  if (zeta[0] > zeta[3] &&
1305  zeta[1] > zeta[3] &&
1306  zeta[2] > zeta[3])
1307  {
1308  face_num = 0;
1309  }
1310  else if (zeta[0] > zeta[2] &&
1311  zeta[1] > zeta[2] &&
1312  zeta[3] > zeta[2])
1313  {
1314  face_num = 1;
1315  }
1316  else if (zeta[1] > zeta[0] &&
1317  zeta[2] > zeta[0] &&
1318  zeta[3] > zeta[0])
1319  {
1320  face_num = 2;
1321  }
1322  else
1323  {
1324  // We'd better not be right between two faces
1325  libmesh_assert (zeta[0] > zeta[1] &&
1326  zeta[2] > zeta[1] &&
1327  zeta[3] > zeta[1]);
1328  face_num = 3;
1329  }
1330 
1331  if (i < face_num * dofs_per_side ||
1332  i >= (face_num+1) * dofs_per_side)
1333  return 0;
1334 
1335  if (totalorder == 0)
1336  return 1;
1337 
1338  const std::array<unsigned int, 3> face_vertex =
1339  oriented_tet_nodes(*elem, face_num);
1340 
1341  // We only need a Tri3 to evaluate L2_HIERARCHIC on the affine
1342  // master element
1343  Tri3 side;
1344 
1345  // We pinky swear not to modify these nodes
1346  Elem & e = const_cast<Elem &>(*elem);
1347  side.set_node(0) = e.node_ptr(face_vertex[0]);
1348  side.set_node(1) = e.node_ptr(face_vertex[1]);
1349  side.set_node(2) = e.node_ptr(face_vertex[2]);
1350 
1351  const unsigned int basisnum = i - face_num*dofs_per_side;
1352 
1353  Point sidep {zeta[face_vertex[1]], zeta[face_vertex[2]]};
1354 
1355  return FE<2,L2_HIERARCHIC>::shape(&side, totalorder,
1356  basisnum, sidep, false);
1357  }
1358 
1359  case PRISM20:
1360  case PRISM21:
1361  {
1362  const unsigned int dofs_per_quad = (totalorder+1u)*(totalorder+1u);
1363  const unsigned int dofs_per_tri = (totalorder+1u)*(totalorder+2u)/2u;
1364  libmesh_assert_less(i, 3*dofs_per_quad + 2*dofs_per_tri);
1365 
1366  // We only need a Tri3 or Quad4 to evaluate L2_HIERARCHIC on
1367  // the affine master element
1368  Tri3 tri;
1369  Quad4 quad;
1370  Elem * side = &quad;
1371  unsigned int dofs_on_side = dofs_per_quad;
1372 
1373  // We pinky swear not to modify the nodes we'll point to
1374  Elem & e = const_cast<Elem &>(*elem);
1375 
1376  Point sidep;
1377 
1378  // Face number calculation is tricky - the ordering of side
1379  // nodes on Prisms does *not* match the ordering of sides!
1380  // (the mid-triangle side nodes were added "later")
1381  // Here face_num will be the numbering that matches the side
1382  // number, but i_offset will have to consider the nodal
1383  // ordering.
1384  unsigned int face_num = 0;
1385  unsigned int i_offset = 0;
1386 
1387  // Triangular coordinates
1388  const Real zeta[3] = { 1. - p(0) - p(1), p(0), p(1) };
1389 
1390  // Closeness to midplane
1391  const Real zmid = 1 - std::abs(p(2));
1392 
1393  if (zeta[1] > zeta[2] && zeta[0] > zeta[2] &&
1394  zmid > 3*zeta[2]) // face 1, quad
1395  {
1396  face_num = 1;
1397  i_offset = 0;
1398  }
1399  else if (zeta[1] > zeta[0] && zeta[2] > zeta[0] &&
1400  zmid > 3*zeta[0]) // face 2, quad
1401  {
1402  face_num = 2;
1403  i_offset = dofs_per_quad;
1404  }
1405  else if (zeta[0] > zeta[1] && zeta[2] > zeta[1] &&
1406  zmid > 3*zeta[1]) // face 3, quad
1407  {
1408  face_num = 3;
1409  i_offset = 2*dofs_per_quad;
1410  }
1411  else if (p(2) + 1 < 3*zeta[0] &&
1412  p(2) + 1 < 3*zeta[1] &&
1413  p(2) + 1 < 3*zeta[2]) // face 0, tri
1414  {
1415  face_num = 0;
1416  i_offset = 3*dofs_per_quad;
1417  dofs_on_side = dofs_per_tri;
1418  side = &tri;
1419  }
1420  else if (1 - p(2) < 3*zeta[0] &&
1421  1 - p(2) < 3*zeta[1] &&
1422  1 - p(2) < 3*zeta[2]) // face 4, tri
1423  {
1424  face_num = 4;
1425  i_offset = dofs_per_tri + 3*dofs_per_quad;
1426  dofs_on_side = dofs_per_tri;
1427  side = &tri;
1428  }
1429  else
1430  {
1431  libmesh_error_msg("Evaluating SIDE_HIERARCHIC right between two Prism faces?");
1432  }
1433 
1434  if (i < i_offset ||
1435  i >= i_offset + dofs_on_side)
1436  return 0;
1437 
1438  if (totalorder == 0)
1439  return 1;
1440 
1441  const std::array<unsigned int, 4> face_vertex =
1442  oriented_prism_nodes(*elem, face_num);
1443 
1444  side->set_node(0) = e.node_ptr(face_vertex[0]);
1445  side->set_node(1) = e.node_ptr(face_vertex[1]);
1446  side->set_node(2) = e.node_ptr(face_vertex[2]);
1447  if (face_vertex[3] < 21)
1448  side->set_node(3) = e.node_ptr(face_vertex[3]);
1449 
1450  if (face_num == 0 || face_num == 4)
1451  sidep = {zeta[face_vertex[1]%3], zeta[face_vertex[2]%3]};
1452  else
1453  {
1454  // Transform a coordinate from the master prism to the
1455  // master quad, based on two vertex indices defining the
1456  // coordinate's direction
1457  auto coord_val = [p](int v1, int v2){
1458  if (v2-v1 == 3)
1459  return p(2);
1460  else if (v2-v1 == -3)
1461  return -p(2);
1462  else if (v1%3 == 0 && v2%3 == 1)
1463  return 2*p(0)-1;
1464  else if (v2%3 == 0 && v1%3 == 1)
1465  return 1-2*p(0);
1466  else if (v1%3 == 1 && v2%3 == 2)
1467  return p(1)-p(0);
1468  else if (v2%3 == 1 && v1%3 == 2)
1469  return p(0)-p(1);
1470  else if (v1%3 == 2 && v2%3 == 0)
1471  return 1-2*p(1);
1472  else if (v2%3 == 2 && v1%3 == 0)
1473  return 2*p(1)-1;
1474  else
1475  libmesh_error();
1476  };
1477 
1478  sidep = {coord_val(face_vertex[0], face_vertex[1]),
1479  coord_val(face_vertex[0], face_vertex[3])};
1480  }
1481 
1482  const unsigned int basisnum = i - i_offset;
1483 
1484  return FE<2,L2_HIERARCHIC>::shape(side, totalorder,
1485  basisnum, sidep, false);
1486  }
1487 
1488 
1489  default:
1490  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1491  }
1492 
1493 #else // LIBMESH_DIM != 3
1494  libmesh_ignore(elem, order, i, p, add_p_level);
1495  libmesh_not_implemented();
1496 #endif
1497 }
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:2381
The QUAD4 is an element in 2D composed of 4 nodes.
Definition: face_quad4.h:53
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:2945
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy=false)=0
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
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:88
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:2331
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39

◆ shape() [192/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 1284 of file fe_lagrange_vec.C.

1287 {
1288  return FE<3,LAGRANGE_VEC>::shape(elem, order, i, p, add_p_level);
1289 }

◆ 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 1501 of file fe_hierarchic_shape_3D.C.

1506 {
1507  return FE<3,SIDE_HIERARCHIC>::shape(elem,fet.order, i, p, add_p_level);
1508 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
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:201
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:182
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:1140

◆ 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:182
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:1140

◆ 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:182
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:1140

◆ 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< 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() [26/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() [27/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() [28/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() [29/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() [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]

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() [35/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() [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< 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() [38/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() [39/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() [40/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() [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< 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() [44/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() [45/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() [46/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() [47/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() [48/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() [49/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)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [50/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [51/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() [52/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape_deriv() [53/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [54/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() [55/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() [56/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(static_cast<Order>(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() [57/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() [58/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
151 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [59/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(static_cast<Order>(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() [60/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 144 of file fe_lagrange_shape_2D.C.

149 {
150  return fe_lagrange_2D_shape_deriv<LAGRANGE>(type, order, i, j, p);
151 }

◆ shape_deriv() [61/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() [62/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() [63/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  unsigned int ny = i - (o*(o+1)/2);
230  unsigned int nx = o - ny;
231  Real val = nx;
232  for (unsigned int index=1; index < nx; index++)
233  val *= xi;
234  for (unsigned 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  unsigned int ny = i - (o*(o+1)/2);
300  unsigned int nx = o - ny;
301  Real val = ny;
302  for (unsigned int index=0; index != nx; index++)
303  val *= xi;
304  for (unsigned 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() [64/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
164 
165 
166 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [65/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(static_cast<Order>(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() [66/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 156 of file fe_lagrange_shape_2D.C.

161 {
162  return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(type, order, i, j, p);
163 }

◆ shape_deriv() [67/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
167 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [68/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() [69/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() [70/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() [71/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 168 of file fe_lagrange_shape_2D.C.

174 {
175  libmesh_assert(elem);
176 
177  // call the orientation-independent shape functions
178  return fe_lagrange_2D_shape_deriv<LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
179 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [72/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(static_cast<Order>(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() [73/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() [74/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  static_cast<Order>(fet.order + add_p_level * add_p_level * elem->p_level()),
183  i,
184  j,
185  p);
186 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [75/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)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
void libmesh_ignore(const Args &...)
libmesh_assert(ctx)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [76/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() [77/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 176 of file fe_hierarchic_vec.C.

179 {
180  Real value = FE<0,HIERARCHIC>::shape_deriv( type, order, i, j, p );
181  return libMesh::RealGradient( value );
182 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [78/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() [79/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 }
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ shape_deriv() [80/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 ,
const bool  add_p_level 
)
inherited

Definition at line 179 of file fe_nedelec_one_shape_2D.C.

185 {
186 #if LIBMESH_DIM > 1
187  libmesh_assert(elem);
188  libmesh_assert_less (j, 2);
189 
190  const Order total_order = static_cast<Order>(order + add_p_level * elem->p_level());
191 
192  switch (total_order)
193  {
194  // linear Nedelec (first kind) shape function first derivatives
195  case FIRST:
196  {
197  switch (elem->type())
198  {
199  case QUAD8:
200  case QUAD9:
201  {
202  libmesh_assert_less (i, 4);
203 
204  switch (j)
205  {
206  // d()/dxi
207  case 0:
208  {
209  switch(i)
210  {
211  case 0:
212  case 2:
213  return RealGradient();
214  case 1:
215  {
216  if (elem->point(1) > elem->point(2))
217  return RealGradient( 0.0, -0.25 );
218  else
219  return RealGradient( 0.0, 0.25 );
220  }
221  case 3:
222  {
223  if (elem->point(3) > elem->point(0))
224  return RealGradient( 0.0, -0.25 );
225  else
226  return RealGradient( 0.0, 0.25 );
227  }
228  default:
229  libmesh_error_msg("Invalid i = " << i);
230  }
231  } // j = 0
232 
233  // d()/deta
234  case 1:
235  {
236  switch(i)
237  {
238  case 1:
239  case 3:
240  return RealGradient();
241  case 0:
242  {
243  if (elem->point(0) > elem->point(1))
244  return RealGradient( 0.25 );
245  else
246  return RealGradient( -0.25 );
247  }
248  case 2:
249  {
250  if (elem->point(2) > elem->point(3))
251  return RealGradient( 0.25 );
252  else
253  return RealGradient( -0.25 );
254  }
255  default:
256  libmesh_error_msg("Invalid i = " << i);
257  }
258  } // j = 1
259 
260  default:
261  libmesh_error_msg("Invalid j = " << j);
262  }
263 
264  return RealGradient();
265  }
266 
267  case TRI6:
268  case TRI7:
269  {
270  libmesh_assert_less (i, 3);
271 
272  // Account for edge flipping
273  Real f = 1.0;
274 
275  switch(i)
276  {
277  case 0:
278  {
279  if (elem->point(0) > elem->point(1))
280  f = -1.0;
281  break;
282  }
283  case 1:
284  {
285  if (elem->point(1) > elem->point(2))
286  f = -1.0;
287  break;
288  }
289  case 2:
290  {
291  if (elem->point(2) > elem->point(0))
292  f = -1.0;
293  break;
294  }
295  default:
296  libmesh_error_msg("Invalid i = " << i);
297  }
298 
299  switch (j)
300  {
301  // d()/dxi
302  case 0:
303  {
304  return RealGradient( 0.0, f*1.0);
305  }
306  // d()/deta
307  case 1:
308  {
309  return RealGradient( f*(-1.0) );
310  }
311  default:
312  libmesh_error_msg("Invalid j = " << j);
313  }
314  }
315 
316  default:
317  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
318  }
319  }
320  // unsupported order
321  default:
322  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << total_order);
323  }
324 #else // LIBMESH_DIM > 1
325  libmesh_ignore(elem, order, i, j, add_p_level);
326  libmesh_not_implemented();
327 #endif
328 }
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)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [81/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 184 of file fe_lagrange_shape_2D.C.

190 {
191  libmesh_assert(elem);
192 
193 
194  // call the orientation-independent shape functions
195  return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
196 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [82/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() [83/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 }
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ shape_deriv() [84/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 191 of file fe_monomial_vec.C.

196 {
197  Real value = FE<0, MONOMIAL>::shape_deriv(type, order, i, j, p);
199 }
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:54

◆ shape_deriv() [85/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 200 of file fe_hierarchic_vec.C.

203 {
204  return FE<0,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
205 }

◆ shape_deriv() [86/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 200 of file fe_lagrange_shape_2D.C.

206 {
207  libmesh_assert(elem);
208  return fe_lagrange_2D_shape_deriv<LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
209 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [87/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() [88/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() [89/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 ,
const bool  add_p_level 
)
inherited

Definition at line 205 of file fe_raviart_shape_2D.C.

211 {
212 #if LIBMESH_DIM > 1
213  libmesh_assert(elem);
214  libmesh_assert_less (j, 2);
215 
216  const Order total_order = static_cast<Order>(order + add_p_level * elem->p_level());
217 
218  switch (total_order)
219  {
220  // linear Raviart-Thomas shape function first derivatives
221  case FIRST:
222  {
223  switch (elem->type())
224  {
225  case QUAD8:
226  case QUAD9:
227  {
228  libmesh_assert_less (i, 4);
229 
230  switch (j)
231  {
232  // d()/dxi
233  case 0:
234  {
235  switch(i)
236  {
237  case 0:
238  case 2:
239  return RealGradient();
240  case 1:
241  {
242  if (elem->point(1) > elem->point(2))
243  return RealGradient( 0.25 );
244  else
245  return RealGradient( -0.25 );
246  }
247  case 3:
248  {
249  if (elem->point(3) > elem->point(0))
250  return RealGradient( 0.25 );
251  else
252  return RealGradient( -0.25 );
253  }
254  default:
255  libmesh_error_msg("Invalid i = " << i);
256  }
257  } // j = 0
258 
259  // d()/deta
260  case 1:
261  {
262  switch(i)
263  {
264  case 1:
265  case 3:
266  return RealGradient();
267  case 0:
268  {
269  if (elem->point(0) > elem->point(1))
270  return RealGradient( 0.0, 0.25 );
271  else
272  return RealGradient( 0.0, -0.25 );
273  }
274  case 2:
275  {
276  if (elem->point(2) > elem->point(3))
277  return RealGradient( 0.0, 0.25 );
278  else
279  return RealGradient( 0.0, -0.25 );
280  }
281  default:
282  libmesh_error_msg("Invalid i = " << i);
283  }
284  } // j = 1
285 
286  default:
287  libmesh_error_msg("Invalid j = " << j);
288  }
289 
290  return RealGradient();
291  }
292 
293  case TRI6:
294  case TRI7:
295  {
296  libmesh_assert_less (i, 3);
297 
298  // Account for edge flipping
299  Real f = 1.0;
300 
301  switch(i)
302  {
303  case 0:
304  {
305  if (elem->point(0) > elem->point(1))
306  f = -1.0;
307  break;
308  }
309  case 1:
310  {
311  if (elem->point(1) > elem->point(2))
312  f = -1.0;
313  break;
314  }
315  case 2:
316  {
317  if (elem->point(2) > elem->point(0))
318  f = -1.0;
319  break;
320  }
321  default:
322  libmesh_error_msg("Invalid i = " << i);
323  }
324 
325  switch (j)
326  {
327  // d()/dxi
328  case 0:
329  {
330  return RealGradient( f*(-1.0) );
331  }
332  // d()/deta
333  case 1:
334  {
335  return RealGradient( 0.0, f*(-1.0) );
336  }
337  default:
338  libmesh_error_msg("Invalid j = " << j);
339  }
340  }
341 
342  default:
343  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
344  }
345  }
346  // unsupported order
347  default:
348  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << total_order);
349  }
350 #else // LIBMESH_DIM > 1
351  libmesh_ignore(elem, order, i, j, add_p_level);
352  libmesh_not_implemented();
353 #endif
354 }
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)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ shape_deriv() [90/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
225 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [91/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 214 of file fe_lagrange_shape_2D.C.

220 {
221  libmesh_assert(elem);
222  return fe_lagrange_2D_shape_deriv<L2_LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
223 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [92/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() [93/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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
360  unsigned int block=o, nz = 0;
361  for (; block < i2; block += (o-nz+1)) { nz++; }
362  const unsigned int nx = block - i2;
363  const unsigned int ny = o - nx - nz;
364  Real val = nx;
365  for (unsigned int index=1; index < nx; index++)
366  val *= xi;
367  for (unsigned int index=0; index != ny; index++)
368  val *= eta;
369  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
495  unsigned int block=o, nz = 0;
496  for (; block < i2; block += (o-nz+1)) { nz++; }
497  const unsigned int nx = block - i2;
498  const unsigned int ny = o - nx - nz;
499  Real val = ny;
500  for (unsigned int index=0; index != nx; index++)
501  val *= xi;
502  for (unsigned int index=1; index < ny; index++)
503  val *= eta;
504  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
630  unsigned int block=o, nz = 0;
631  for (; block < i2; block += (o-nz+1)) { nz++; }
632  const unsigned int nx = block - i2;
633  const unsigned int ny = o - nx - nz;
634  Real val = nz;
635  for (unsigned int index=0; index != nx; index++)
636  val *= xi;
637  for (unsigned int index=0; index != ny; index++)
638  val *= eta;
639  for (unsigned 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() [94/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() [95/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 224 of file fe_hierarchic_vec.C.

227 {
228  Real value = FE<1,HIERARCHIC>::shape_deriv( type, order, i, j, p );
229  return libMesh::RealGradient( value );
230 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [96/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() [97/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 229 of file fe_monomial_vec.C.

234 {
235  Real value = FE<1, MONOMIAL>::shape_deriv(type, order, i, j, p);
237 }
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:54

◆ shape_deriv() [98/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
239 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [99/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() [100/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() [101/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 = static_cast<Order>(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 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
Real distance(const Point &p)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
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:134

◆ shape_deriv() [102/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() [103/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
256 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [104/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 247 of file fe_hierarchic_vec.C.

250 {
251  return FE<1,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
252 }

◆ shape_deriv() [105/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 252 of file fe_raviart_shape_3D.C.

258 {
259 #if LIBMESH_DIM == 3
260  libmesh_assert(elem);
261  libmesh_assert_less (j, 3);
262 
263  const Order totalorder = static_cast<Order>(order + add_p_level * elem->p_level());
264 
265  switch (totalorder)
266  {
267  // linear Raviart-Thomas shape function first derivatives
268  case FIRST:
269  {
270  switch (elem->type())
271  {
272  case HEX27:
273  {
274  libmesh_assert_less (i, 6);
275 
276  switch (j)
277  {
278  // d()/dxi
279  case 0:
280  {
281  switch(i)
282  {
283  case 0:
284  case 1:
285  case 3:
286  case 5:
287  return RealGradient();
288  case 2:
289  {
290  std::array<Point, 4> arr = {elem->point(6), elem->point(5), elem->point(1), elem->point(2)};
291  if (orientation(arr))
292  return RealGradient( 0.125, 0.0, 0.0 );
293  else
294  return RealGradient( -0.125, 0.0, 0.0 );
295  }
296  case 4:
297  {
298  std::array<Point, 4> arr = {elem->point(7), elem->point(3), elem->point(0), elem->point(4)};
299  if (orientation(arr))
300  return RealGradient( 0.125, 0.0, 0.0 );
301  else
302  return RealGradient( -0.125, 0.0, 0.0 );
303  }
304  default:
305  libmesh_error_msg("Invalid i = " << i);
306  } // switch(i)
307 
308  } // j = 0
309 
310  // d()/deta
311  case 1:
312  {
313  switch(i)
314  {
315  case 0:
316  case 2:
317  case 4:
318  case 5:
319  return RealGradient();
320  case 1:
321  {
322  std::array<Point, 4> arr = {elem->point(4), elem->point(0), elem->point(1), elem->point(5)};
323  if (orientation(arr))
324  return RealGradient( 0.0, 0.125, 0.0 );
325  else
326  return RealGradient( 0.0, -0.125, 0.0 );
327  }
328  case 3:
329  {
330  std::array<Point, 4> arr = {elem->point(7), elem->point(6), elem->point(2), elem->point(3)};
331  if (orientation(arr))
332  return RealGradient( 0.0, 0.125, 0.0 );
333  else
334  return RealGradient( 0.0, -0.125, 0.0 );
335  }
336  default:
337  libmesh_error_msg("Invalid i = " << i);
338  } // switch(i)
339 
340  } // j = 1
341 
342  // d()/dzeta
343  case 2:
344  {
345  switch(i)
346  {
347  case 1:
348  case 2:
349  case 3:
350  case 4:
351  return RealGradient();
352  case 0:
353  {
354  std::array<Point, 4> arr = {elem->point(1), elem->point(0), elem->point(3), elem->point(2)};
355  if (orientation(arr))
356  return RealGradient( 0.0, 0.0, 0.125 );
357  else
358  return RealGradient( 0.0, 0.0, -0.125 );
359  }
360  case 5:
361  {
362  std::array<Point, 4> arr = {elem->point(5), elem->point(6), elem->point(7), elem->point(4)};
363  if (orientation(arr))
364  return RealGradient( 0.0, 0.0, 0.125 );
365  else
366  return RealGradient( 0.0, 0.0, -0.125 );
367  }
368  default:
369  libmesh_error_msg("Invalid i = " << i);
370  } // switch(i)
371 
372  } // j = 2
373 
374  default:
375  libmesh_error_msg("Invalid j = " << j);
376  }
377 
378  return RealGradient();
379  }
380 
381  case TET14:
382  {
383  libmesh_assert_less (i, 4);
384 
385  switch (j)
386  {
387  // d()/dxi
388  case 0:
389  {
390  switch(i)
391  {
392  case 0:
393  {
394  std::array<Point, 3> arr = {elem->point(0), elem->point(2), elem->point(1)};
395  if (orientation(arr))
396  return RealGradient( 2.0, 0.0, 0.0 );
397  else
398  return RealGradient( -2.0, 0.0, 0.0 );
399  }
400  case 1:
401  {
402  std::array<Point, 3> arr = {elem->point(1), elem->point(3), elem->point(0)};
403  if (orientation(arr))
404  return RealGradient( 2.0, 0.0, 0.0 );
405  else
406  return RealGradient( -2.0, 0.0, 0.0 );
407  }
408  case 2:
409  {
410  std::array<Point, 3> arr = {elem->point(1), elem->point(2), elem->point(3)};
411  if (orientation(arr))
412  return RealGradient( 2.0, 0.0, 0.0 );
413  else
414  return RealGradient( -2.0, 0.0, 0.0 );
415  }
416  case 3:
417  {
418  std::array<Point, 3> arr = {elem->point(0), elem->point(3), elem->point(2)};
419  if (orientation(arr))
420  return RealGradient( 2.0, 0.0, 0.0 );
421  else
422  return RealGradient( -2.0, 0.0, 0.0 );
423  }
424  default:
425  libmesh_error_msg("Invalid i = " << i);
426  } // switch(i)
427 
428  } // j = 0
429 
430  // d()/deta
431  case 1:
432  {
433  switch(i)
434  {
435  case 0:
436  {
437  std::array<Point, 3> arr = {elem->point(0), elem->point(2), elem->point(1)};
438  if (orientation(arr))
439  return RealGradient( 0.0, 2.0, 0.0 );
440  else
441  return RealGradient( 0.0, -2.0, 0.0 );
442  }
443  case 1:
444  {
445  std::array<Point, 3> arr = {elem->point(1), elem->point(3), elem->point(0)};
446  if (orientation(arr))
447  return RealGradient( 0.0, 2.0, 0.0 );
448  else
449  return RealGradient( 0.0, -2.0, 0.0 );
450  }
451  case 2:
452  {
453  std::array<Point, 3> arr = {elem->point(1), elem->point(2), elem->point(3)};
454  if (orientation(arr))
455  return RealGradient( 0.0, 2.0, 0.0 );
456  else
457  return RealGradient( 0.0, -2.0, 0.0 );
458  }
459  case 3:
460  {
461  std::array<Point, 3> arr = {elem->point(0), elem->point(3), elem->point(2)};
462  if (orientation(arr))
463  return RealGradient( 0.0, 2.0, 0.0 );
464  else
465  return RealGradient( 0.0, -2.0, 0.0 );
466  }
467  default:
468  libmesh_error_msg("Invalid i = " << i);
469  } // switch(i)
470 
471  } // j = 1
472 
473  // d()/dzeta
474  case 2:
475  {
476  switch(i)
477  {
478  case 0:
479  {
480  std::array<Point, 3> arr = {elem->point(0), elem->point(2), elem->point(1)};
481  if (orientation(arr))
482  return RealGradient( 0.0, 0.0, 2.0 );
483  else
484  return RealGradient( 0.0, 0.0, -2.0 );
485  }
486  case 1:
487  {
488  std::array<Point, 3> arr = {elem->point(1), elem->point(3), elem->point(0)};
489  if (orientation(arr))
490  return RealGradient( 0.0, 0.0, 2.0 );
491  else
492  return RealGradient( 0.0, 0.0, -2.0 );
493  }
494  case 2:
495  {
496  std::array<Point, 3> arr = {elem->point(1), elem->point(2), elem->point(3)};
497  if (orientation(arr))
498  return RealGradient( 0.0, 0.0, 2.0 );
499  else
500  return RealGradient( 0.0, 0.0, -2.0 );
501  }
502  case 3:
503  {
504  std::array<Point, 3> arr = {elem->point(0), elem->point(3), elem->point(2)};
505  if (orientation(arr))
506  return RealGradient( 0.0, 0.0, 2.0 );
507  else
508  return RealGradient( 0.0, 0.0, -2.0 );
509  }
510  default:
511  libmesh_error_msg("Invalid i = " << i);
512  } // switch(i)
513 
514  } // j = 2
515 
516  default:
517  libmesh_error_msg("Invalid j = " << j);
518  }
519 
520  return RealGradient();
521  }
522 
523  default:
524  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
525  }
526  }
527  // unsupported order
528  default:
529  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
530  }
531 
532 #else // LIBMESH_DIM != 3
533  libmesh_ignore(elem, order, i, j, p, add_p_level);
534  libmesh_not_implemented();
535 #endif
536 }
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)
bool orientation(std::array< Point, N > &arr)

◆ shape_deriv() [106/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 256 of file fe_nedelec_one_shape_3D.C.

262 {
263 #if LIBMESH_DIM == 3
264  libmesh_assert(elem);
265  libmesh_assert_less (j, 3);
266 
267  const Order totalorder = static_cast<Order>(order + add_p_level * elem->p_level());
268 
269  switch (totalorder)
270  {
271  // linear Nedelec (first kind) shape function first derivatives
272  case FIRST:
273  {
274  switch (elem->type())
275  {
276  case HEX20:
277  case HEX27:
278  {
279  libmesh_assert_less (i, 12);
280 
281  const Real xi = p(0);
282  const Real eta = p(1);
283  const Real zeta = p(2);
284 
285  // Even with a loose inverse_map tolerance we ought to
286  // be nearly on the element interior in master
287  // coordinates
288  libmesh_assert_less_equal ( std::fabs(xi), 1.0+TOLERANCE );
289  libmesh_assert_less_equal ( std::fabs(eta), 1.0+TOLERANCE );
290  libmesh_assert_less_equal ( std::fabs(zeta), 1.0+TOLERANCE );
291 
292  switch (j)
293  {
294  // d()/dxi
295  case 0:
296  {
297  switch(i)
298  {
299  case 0:
300  case 2:
301  case 8:
302  case 10:
303  return RealGradient();
304  case 1:
305  {
306  if (elem->point(1) > elem->point(2))
307  return RealGradient( 0.0, -0.125*(1.0-zeta) );
308  else
309  return RealGradient( 0.0, 0.125*(1.0-zeta) );
310  }
311  case 3:
312  {
313  if (elem->point(3) > elem->point(0))
314  return RealGradient( 0.0, 0.125*(-1.0+zeta) );
315  else
316  return RealGradient( 0.0, -0.125*(-1.0+zeta) );
317  }
318  case 4:
319  {
320  if (elem->point(0) > elem->point(4))
321  return RealGradient( 0.0, 0.0, -0.125*(-1.0+eta) );
322  else
323  return RealGradient( 0.0, 0.0, 0.125*(-1.0+eta) );
324  }
325  case 5:
326  {
327  if (elem->point(1) > elem->point(5))
328  return RealGradient( 0.0, 0.0, -0.125*(1.0-eta) );
329  else
330  return RealGradient( 0.0, 0.0, 0.125*(1.0-eta) );
331  }
332  case 6:
333  {
334  if (elem->point(2) > elem->point(6))
335  return RealGradient( 0.0, 0.0, -0.125*(1.0+eta) );
336  else
337  return RealGradient( 0.0, 0.0, 0.125*(1.0+eta) );
338  }
339  case 7:
340  {
341  if (elem->point(3) > elem->point(7))
342  return RealGradient( 0.0, 0.0, -0.125*(-1.0-eta) );
343  else
344  return RealGradient( 0.0, 0.0, 0.125*(-1.0-eta) );
345  }
346  case 9:
347  {
348  if (elem->point(5) > elem->point(6))
349  return RealGradient( 0.0, -0.125*(1.0+zeta), 0.0 );
350  else
351  return RealGradient( 0.0, 0.125*(1.0+zeta), 0.0 );
352  }
353  case 11:
354  {
355  if (elem->point(4) > elem->point(7))
356  return RealGradient( 0.0, -0.125*(-1.0-zeta), 0.0 );
357  else
358  return RealGradient( 0.0, 0.125*(-1.0-zeta), 0.0 );
359  }
360  default:
361  libmesh_error_msg("Invalid i = " << i);
362  } // switch(i)
363 
364  } // j = 0
365 
366  // d()/deta
367  case 1:
368  {
369  switch(i)
370  {
371  case 1:
372  case 3:
373  case 9:
374  case 11:
375  return RealGradient();
376  case 0:
377  {
378  if (elem->point(0) > elem->point(1))
379  return RealGradient( -0.125*(-1.0+zeta), 0.0, 0.0 );
380  else
381  return RealGradient( 0.125*(-1.0+zeta), 0.0, 0.0 );
382  }
383  case 2:
384  {
385  if (elem->point(2) > elem->point(3))
386  return RealGradient( 0.125*(1.0-zeta), 0.0, 0.0 );
387  else
388  return RealGradient( -0.125*(1.0-zeta), 0.0, 0.0 );
389  }
390  case 4:
391  {
392  if (elem->point(0) > elem->point(4))
393  return RealGradient( 0.0, 0.0, -0.125*(-1.0+xi) );
394  else
395  return RealGradient( 0.0, 0.0, 0.125*(-1.0+xi) );
396  }
397  case 5:
398  {
399  if (elem->point(1) > elem->point(5))
400  return RealGradient( 0.0, 0.0, -0.125*(-1.0-xi) );
401  else
402  return RealGradient( 0.0, 0.0, 0.125*(-1.0-xi) );
403  }
404  case 6:
405  {
406  if (elem->point(2) > elem->point(6))
407  return RealGradient( 0.0, 0.0, -0.125*(1.0+xi) );
408  else
409  return RealGradient( 0.0, 0.0, 0.125*(1.0+xi) );
410  }
411  case 7:
412  {
413  if (elem->point(3) > elem->point(7))
414  return RealGradient( 0.0, 0.0, -0.125*(1.0-xi) );
415  else
416  return RealGradient( 0.0, 0.0, 0.125*(1.0-xi) );
417  }
418  case 8:
419  {
420  if (elem->point(4) > elem->point(5))
421  return RealGradient( -0.125*(-1.0-zeta), 0.0, 0.0 );
422  else
423  return RealGradient( 0.125*(-1.0-zeta), 0.0, 0.0 );
424  }
425  case 10:
426  {
427  if (elem->point(7) > elem->point(6))
428  return RealGradient( -0.125*(1.0+zeta), 0.0, 0.0 );
429  else
430  return RealGradient( 0.125*(1.0+zeta), 0.0, 0.0 );
431  }
432  default:
433  libmesh_error_msg("Invalid i = " << i);
434  } // switch(i)
435 
436  } // j = 1
437 
438  // d()/dzeta
439  case 2:
440  {
441  switch(i)
442  {
443  case 4:
444  case 5:
445  case 6:
446  case 7:
447  return RealGradient();
448 
449  case 0:
450  {
451  if (elem->point(0) > elem->point(1))
452  return RealGradient( -0.125*(-1.0+eta), 0.0, 0.0 );
453  else
454  return RealGradient( 0.125*(-1.0+eta), 0.0, 0.0 );
455  }
456  case 1:
457  {
458  if (elem->point(1) > elem->point(2))
459  return RealGradient( 0.0, -0.125*(-1.0-xi), 0.0 );
460  else
461  return RealGradient( 0.0, 0.125*(-1.0-xi), 0.0 );
462  }
463  case 2:
464  {
465  if (elem->point(2) > elem->point(3))
466  return RealGradient( 0.125*(-1.0-eta), 0.0, 0.0 );
467  else
468  return RealGradient( -0.125*(-1.0-eta), 0.0, 0.0 );
469  }
470  case 3:
471  {
472  if (elem->point(3) > elem->point(0))
473  return RealGradient( 0.0, 0.125*(-1.0+xi), 0.0 );
474  else
475  return RealGradient( 0.0, -0.125*(-1.0+xi), 0.0 );
476  }
477  case 8:
478  {
479  if (elem->point(4) > elem->point(5))
480  return RealGradient( -0.125*(1.0-eta), 0.0, 0.0 );
481  else
482  return RealGradient( 0.125*(1.0-eta), 0.0, 0.0 );
483  }
484  case 9:
485  {
486  if (elem->point(5) > elem->point(6))
487  return RealGradient( 0.0, -0.125*(1.0+xi), 0.0 );
488  else
489  return RealGradient( 0.0, 0.125*(1.0+xi), 0.0 );
490  }
491  case 10:
492  {
493  if (elem->point(7) > elem->point(6))
494  return RealGradient( -0.125*(1.0+eta), 0.0, 0.0 );
495  else
496  return RealGradient( 0.125*(1.0+eta), 0.0, 0.0 );
497  }
498  case 11:
499  {
500  if (elem->point(4) > elem->point(7))
501  return RealGradient( 0.0, -0.125*(1.0-xi), 0.0 );
502  else
503  return RealGradient( 0.0, 0.125*(1.0-xi), 0.0 );
504  }
505  default:
506  libmesh_error_msg("Invalid i = " << i);
507  } // switch(i)
508 
509  } // j = 2
510 
511  default:
512  libmesh_error_msg("Invalid j = " << j);
513  }
514 
515  return RealGradient();
516  }
517 
518  case TET10:
519  case TET14:
520  {
521  libmesh_assert_less (i, 6);
522 
523 
524  switch (j)
525  {
526  // d()/dxi
527  case 0:
528  {
529  switch(i)
530  {
531  case 0:
532  {
533  if (elem->point(0) > elem->point(1))
534  return RealGradient( 0.0, -1.0, -1.0 );
535  else
536  return RealGradient( 0.0, 1.0, 1.0 );
537  }
538  case 1:
539  {
540  if (elem->point(1) > elem->point(2))
541  return RealGradient( 0.0, -1.0, 0.0 );
542  else
543  return RealGradient( 0.0, 1.0, 0.0 );
544  }
545  case 2:
546  {
547  if (elem->point(0) > elem->point(2))
548  return RealGradient( 0.0, 1.0, 0.0 );
549  else
550  return RealGradient( 0.0, -1.0, 0.0 );
551  }
552  case 3:
553  {
554  if (elem->point(0) > elem->point(3))
555  return RealGradient( 0.0, 0.0, 1.0 );
556  else
557  return RealGradient( 0.0, 0.0, -1.0 );
558  }
559  case 4:
560  {
561  if (elem->point(1) > elem->point(3))
562  return RealGradient( 0.0, 0.0, -1.0 );
563  else
564  return RealGradient( 0.0, 0.0, 1.0 );
565  }
566  case 5:
567  {
568  return RealGradient();
569  }
570 
571  default:
572  libmesh_error_msg("Invalid i = " << i);
573  } // switch(i)
574 
575  } // j = 0
576 
577  // d()/deta
578  case 1:
579  {
580  switch(i)
581  {
582  case 0:
583  {
584  if (elem->point(0) > elem->point(1))
585  return RealGradient( 1.0, 0.0, 0.0 );
586  else
587  return RealGradient( -1.0, 0.0, 0.0 );
588  }
589  case 1:
590  {
591  if (elem->point(1) > elem->point(2))
592  return RealGradient( 1.0, 0.0, 0.0 );
593  else
594  return RealGradient( -1.0, 0.0, 0.0 );
595  }
596  case 2:
597  {
598  if (elem->point(0) > elem->point(2))
599  return RealGradient( -1.0, 0.0, -1.0 );
600  else
601  return RealGradient( 1.0, 0.0, 1.0 );
602  }
603  case 3:
604  {
605  if (elem->point(0) > elem->point(3))
606  return RealGradient( 0.0, 0.0, 1.0 );
607  else
608  return RealGradient( 0.0, 0.0, -1.0 );
609  }
610  case 4:
611  {
612  return RealGradient();
613  }
614  case 5:
615  {
616  if (elem->point(2) > elem->point(3))
617  return RealGradient( 0.0, 0.0, -1.0 );
618  else
619  return RealGradient( 0.0, 0.0, 1.0 );
620  }
621  default:
622  libmesh_error_msg("Invalid i = " << i);
623  } // switch(i)
624 
625  } // j = 1
626 
627  // d()/dzeta
628  case 2:
629  {
630  switch(i)
631  {
632  case 0:
633  {
634  if (elem->point(0) > elem->point(1))
635  return RealGradient( 1.0, 0.0, 0.0 );
636  else
637  return RealGradient( -1.0, 0.0, 0.0 );
638  }
639  case 1:
640  {
641  return RealGradient();
642  }
643  case 2:
644  {
645  if (elem->point(0) > elem->point(2))
646  return RealGradient( 0.0, 1.0, 0.0 );
647  else
648  return RealGradient( 0.0, -1.0, 0.0 );
649  }
650  case 3:
651  {
652  if (elem->point(0) > elem->point(3))
653  return RealGradient( -1.0, -1.0, 0.0 );
654  else
655  return RealGradient( 1.0, 1.0, 0.0 );
656  }
657  case 4:
658  {
659  if (elem->point(1) > elem->point(3))
660  return RealGradient( 1.0, 0.0, 0.0 );
661  else
662  return RealGradient( -1.0, 0.0, 0.0 );
663  }
664  case 5:
665  {
666  if (elem->point(2) > elem->point(3))
667  return RealGradient( 0.0, 1.0, 0.0 );
668  else
669  return RealGradient( 0.0, -1.0, 0.0 );
670  }
671  default:
672  libmesh_error_msg("Invalid i = " << i);
673  } // switch(i)
674  } // j = 2
675 
676  default:
677  libmesh_error_msg("Invalid j = " << j);
678  }
679  return RealGradient();
680  }
681 
682  default:
683  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
684  }
685  }
686  // unsupported order
687  default:
688  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
689  }
690 
691 #else // LIBMESH_DIM != 3
692  libmesh_ignore(elem, order, i, j, p, add_p_level);
693  libmesh_not_implemented();
694 #endif
695 }
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() [107/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:2945
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:796
virtual ElemType type() const =0

◆ shape_deriv() [108/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() [109/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() [110/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
270 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [111/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 269 of file fe_hermite_shape_2D.C.

275 {
276  libmesh_assert(elem);
277  libmesh_assert (j == 0 || j == 1);
278 
279  std::vector<std::vector<Real>> dxdxi(2, std::vector<Real>(2, 0));
280 
281 #ifdef DEBUG
282  std::vector<Real> dxdeta(2), dydxi(2);
283 #endif
284 
285  hermite_compute_coefs(elem,dxdxi
286 #ifdef DEBUG
287  ,dxdeta,dydxi
288 #endif
289  );
290 
291  const ElemType type = elem->type();
292 
293  const Order totalorder =
294  static_cast<Order>(order + add_p_level * elem->p_level());
295 
296  switch (type)
297  {
298  case QUAD4:
299  case QUADSHELL4:
300  libmesh_assert_less (totalorder, 4);
301  libmesh_fallthrough();
302  case QUAD8:
303  case QUADSHELL8:
304  case QUAD9:
305  {
306  libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u));
307 
308  std::vector<unsigned int> bases1D;
309 
310  Real coef = hermite_bases_2D(bases1D, dxdxi, totalorder, i);
311 
312  switch (j)
313  {
314  case 0:
315  return coef *
316  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
317  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1));
318  case 1:
319  return coef *
320  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
321  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1));
322  default:
323  libmesh_error_msg("Invalid derivative index j = " << j);
324  }
325  }
326  default:
327  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
328  }
329 }
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:2945
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:796
virtual ElemType type() const =0

◆ shape_deriv() [112/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() [113/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 280 of file fe_monomial_vec.C.

285 {
286  Real value = FE<2, MONOMIAL>::shape_deriv(type, order, i / 2, j, p);
287 
288  switch (i % 2)
289  {
290  case 0:
292 
293  case 1:
294  return libMesh::RealVectorValue(Real(0), value);
295 
296  default:
297  libmesh_error_msg("i%2 must be either 0 or 1!");
298  }
299 
300  // dummy
301  return libMesh::RealVectorValue();
302 }
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:54

◆ shape_deriv() [114/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 285 of file fe_hierarchic_vec.C.

288 {
289  Real value = FE<2,HIERARCHIC>::shape_deriv( type, order, i/2, j, p );
290 
291  switch( i%2 )
292  {
293  case 0:
294  return libMesh::RealGradient( value );
295 
296  case 1:
297  return libMesh::RealGradient( Real(0), value );
298 
299  default:
300  libmesh_error_msg("i%2 must be either 0 or 1!");
301  }
302 
303  //dummy
304  return libMesh::RealGradient();
305 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [115/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() [116/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() [117/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() [118/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  static_cast<Order>(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:2945
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_deriv() [119/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [120/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
335 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [121/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 333 of file fe_nedelec_one_shape_2D.C.

338 {
339  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
340  return RealGradient();
341 }
RealVectorValue RealGradient

◆ shape_deriv() [122/233]

Real libMesh::FE< 2, HERMITE >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 333 of file fe_hermite_shape_2D.C.

338 {
339  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
340  return 0.;
341 }

◆ shape_deriv() [123/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 338 of file fe_hierarchic_vec.C.

341 {
342  return FE<2,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
343 }

◆ shape_deriv() [124/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
350 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [125/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 344 of file fe_nedelec_one_shape_2D.C.

350 {
351  return FE<2,NEDELEC_ONE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
352 }

◆ shape_deriv() [126/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 345 of file fe_hermite_shape_2D.C.

351 {
352  return FE<2,HERMITE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
353 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [127/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 357 of file fe_raviart_shape_2D.C.

363 {
364  return FE<2,RAVIART_THOMAS>::shape_deriv(elem, order, i, j, p, add_p_level);
365 }

◆ shape_deriv() [128/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 363 of file fe_monomial_vec.C.

368 {
369  Real value = FE<3, MONOMIAL>::shape_deriv(type, order, i / 3, j, p);
370 
371  switch (i % 3)
372  {
373  case 0:
375 
376  case 1:
377  return libMesh::RealVectorValue(Real(0), value);
378 
379  case 2:
380  return libMesh::RealVectorValue(Real(0), Real(0), value);
381 
382  default:
383  libmesh_error_msg("i%3 must be 0, 1, or 2!");
384  }
385 
386  // dummy
387  return libMesh::RealVectorValue();
388 }
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:54

◆ shape_deriv() [129/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() [130/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 369 of file fe_raviart_shape_2D.C.

374 {
375  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
376  return RealGradient();
377 }
RealVectorValue RealGradient

◆ shape_deriv() [131/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [132/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 379 of file fe_hierarchic_vec.C.

382 {
383  Real value = FE<3,HIERARCHIC>::shape_deriv( type, order, i/3, j, p );
384 
385  switch( i%3 )
386  {
387  case 0:
388  return libMesh::RealGradient( value );
389 
390  case 1:
391  return libMesh::RealGradient( Real(0), value );
392 
393  case 2:
394  return libMesh::RealGradient( Real(0), Real(0), value );
395 
396  default:
397  libmesh_error_msg("i%3 must be 0, 1, or 2!");
398  }
399 
400  //dummy
401  return libMesh::RealGradient();
402 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [133/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() [134/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 380 of file fe_raviart_shape_2D.C.

385 {
386  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
387  return RealGradient();
388 }
RealVectorValue RealGradient

◆ shape_deriv() [135/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  static_cast<Order>(order + add_p_level*elem->p_level()), i, j, p);
392 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [136/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 391 of file fe_raviart_shape_2D.C.

397 {
398  return FE<2,RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
399 }

◆ shape_deriv() [137/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  static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
406 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [138/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() [139/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 402 of file fe_raviart_shape_2D.C.

408 {
409  return FE<2,L2_RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
410 }

◆ shape_deriv() [140/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() [141/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 415 of file fe_bernstein_shape_2D.C.

421 {
422  libmesh_assert(elem);
423 
424  const ElemType type = elem->type();
425 
426  const Order totalorder =
427  static_cast<Order>(order + add_p_level * elem->p_level());
428 
429  switch (type)
430  {
431  // Hierarchic shape functions on the quadrilateral.
432  case QUAD4:
433  case QUAD9:
434  {
435  // Compute quad shape functions as a tensor-product
436  auto [i0, i1] = quad_i0_i1(i, totalorder, *elem);
437 
438  switch (j)
439  {
440  // d()/dxi
441  case 0:
442  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0, 0, p(0))*
443  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1, p(1)));
444 
445  // d()/deta
446  case 1:
447  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0, p(0))*
448  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1, 0, p(1)));
449 
450  default:
451  libmesh_error_msg("Invalid shape function derivative j = " << j);
452  }
453  }
454 
455  // Bernstein shape functions on the 8-noded quadrilateral
456  // is handled separately.
457  case QUAD8:
458  case QUADSHELL8:
459  {
460  libmesh_assert_less (totalorder, 3);
461 
462  const Real xi = p(0);
463  const Real eta = p(1);
464 
465  libmesh_assert_less (i, 8);
466 
467  // 0 1 2 3 4 5 6 7 8
468  static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
469  static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
470  static const Real scal[] = {-0.25, -0.25, -0.25, -0.25, 0.5, 0.5, 0.5, 0.5};
471  switch (j)
472  {
473  // d()/dxi
474  case 0:
475  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
476  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)
477  +scal[i]*
478  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[8], 0, xi)*
479  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[8], eta));
480 
481  // d()/deta
482  case 1:
483  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
484  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta)
485  +scal[i]*
486  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[8], xi)*
487  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[8], 0, eta));
488 
489  default:
490  libmesh_error_msg("Invalid shape function derivative j = " << j);
491  }
492  }
493 
494  case TRI3:
495  case TRISHELL3:
496  libmesh_assert_less (totalorder, 2);
497  libmesh_fallthrough();
498  case TRI6:
499  case TRI7:
500  {
501  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,BERNSTEIN>::shape);
502  }
503 
504  default:
505  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
506  }
507 }
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:2945
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:744
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() [142/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() [143/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 438 of file fe_monomial_vec.C.

444 {
445  Real value = FE<0, MONOMIAL>::shape_deriv(
446  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
448 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape_deriv() [144/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 439 of file fe_hierarchic_vec.C.

442 {
443  return FE<3,HIERARCHIC_VEC>::shape_deriv(type, order, i, j, p);
444 }

◆ shape_deriv() [145/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() [146/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:201

◆ shape_deriv() [147/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 465 of file fe_hierarchic_vec.C.

469 {
470  const Real value = FE<0,HIERARCHIC>::shape_deriv(elem, order, i, j, p, add_p_level);
471  return libMesh::RealGradient( value );
472 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [148/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  static_cast<Order>(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:2945
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:796
virtual ElemType type() const =0

◆ shape_deriv() [149/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() [150/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:201

◆ 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 483 of file fe_monomial_vec.C.

489 {
490  Real value = FE<1, MONOMIAL>::shape_deriv(
491  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
493 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape_deriv() [152/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 490 of file fe_lagrange_shape_3D.C.

495 {
496  return fe_lagrange_3D_shape_deriv<LAGRANGE>(type, order, i, j, p);
497 }

◆ shape_deriv() [153/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 =
504  static_cast<Order>(order+add_p_level*elem->p_level());
505 
506  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
507  return 0;
508 
509  const unsigned int dofs_per_side = totalorder+1u;
510 
511  switch (type)
512  {
513  case TRI6:
514  case TRI7:
515  {
516  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SIDE_HIERARCHIC>::shape);
517  }
518 #if 0
519  {
520  libmesh_assert_less(i, 3*dofs_per_side);
521  libmesh_assert_less (j, 2);
522 
523  // Flip odd degree of freedom values if necessary
524  // to keep continuity on sides. We'll flip xi/eta rather than
525  // flipping phi, so that we can use this to handle the "nodal"
526  // degrees of freedom too.
527  Real f = 1.;
528 
529  const Real zeta1 = p(0);
530  const Real zeta2 = p(1);
531  const Real zeta0 = 1. - zeta1 - zeta2;
532 
533  if (zeta1 > zeta2 && zeta0 > zeta2) // side 0
534  {
535  if (j == 1) // d/deta is perpendicular here
536  return 0;
537 
538  if (i >= dofs_per_side)
539  return 0;
540 
541  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
542  return 0;
543 
544  if ((i < 2 || i % 2) &&
545  elem->point(0) > elem->point(1))
546  f = -1;
547 
548  return f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, i, 0, f*(zeta1-zeta0));
549  }
550  else if (zeta1 > zeta0 && zeta2 > zeta0) // side 1
551  {
552  if (i < dofs_per_side ||
553  i >= 2*dofs_per_side)
554  return 0;
555 
556  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
557  return 0;
558 
559  const unsigned int side_i = i - dofs_per_side;
560 
561  if ((side_i < 2 || side_i % 2) &&
562  elem->point(1) > elem->point(2))
563  f = -1;
564 
565  Real g = 1;
566  if (j == 0) // 2D d/dxi is in the opposite direction on this edge
567  g = -1;
568 
569  return f*g*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*(zeta2-zeta1));
570  }
571  else // side 2
572  {
573  libmesh_assert (zeta2 >= zeta1 && zeta0 >= zeta1); // On a corner???
574 
575  if (j == 0) // d/dxi is perpendicular here
576  return 0;
577 
578  if (i < 2*dofs_per_side)
579  return 0;
580 
581  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
582  return 0;
583 
584  const unsigned int side_i = i - 2*dofs_per_side;
585 
586  if ((side_i < 2 || side_i % 2) &&
587  elem->point(2) > elem->point(0))
588  f = -1;
589 
590  return -f*FE<1,HIERARCHIC>::shape_deriv(EDGE3, totalorder, side_i, 0, f*(zeta0-zeta2));
591  }
592  }
593 #endif
594  case QUAD8:
595  case QUADSHELL8:
596  case QUAD9:
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->point(0) > elem->point(1))
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->point(1) > elem->point(2))
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->point(3) > elem->point(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->point(0) > elem->point(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:2945
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:744
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
const Point & point(const unsigned int i) const
Definition: elem.h:2277

◆ shape_deriv() [154/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 494 of file fe_hierarchic_vec.C.

498 {
499  return FE<0,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
500 }

◆ shape_deriv() [155/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 502 of file fe_lagrange_shape_3D.C.

507 {
508  return fe_lagrange_3D_shape_deriv<L2_LAGRANGE>(type, order, i, j, p);
509 }

◆ shape_deriv() [156/233]

Real libMesh::FE< 2, BERNSTEIN >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 513 of file fe_bernstein_shape_2D.C.

518 {
519  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge orientation is needed.");
520  return 0.;
521 }

◆ shape_deriv() [157/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 514 of file fe_lagrange_shape_3D.C.

520 {
521  libmesh_assert(elem);
522 
523  // call the orientation-independent shape function derivatives
524  return fe_lagrange_3D_shape_deriv<LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
525 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [158/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 522 of file fe_hierarchic_vec.C.

526 {
527  Real value = FE<1,HIERARCHIC>::shape_deriv(elem, order, i, j, p, add_p_level);
528  return libMesh::RealGradient( value );
529 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [159/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 524 of file fe_bernstein_shape_2D.C.

530 {
531  return FE<2,BERNSTEIN>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
532 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [160/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 529 of file fe_lagrange_shape_3D.C.

535 {
536  libmesh_assert(elem);
537 
538  // call the orientation-independent shape function derivatives
539  return fe_lagrange_3D_shape_deriv<L2_LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
540 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [161/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 539 of file fe_raviart_shape_3D.C.

545 {
546  return FE<3,RAVIART_THOMAS>::shape_deriv(elem, order, i, j, p, add_p_level);
547 }

◆ shape_deriv() [162/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 541 of file fe_monomial_vec.C.

547 {
548  Real value = FE<2, MONOMIAL>::shape_deriv(
549  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i / 2, j, p);
550 
551  switch (i % 2)
552  {
553  case 0:
555 
556  case 1:
557  return libMesh::RealVectorValue(Real(0), value);
558 
559  default:
560  libmesh_error_msg("i%2 must be either 0 or 1!");
561  }
562 
563  // dummy
564  return libMesh::RealVectorValue();
565 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape_deriv() [163/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 544 of file fe_lagrange_shape_3D.C.

550 {
551  libmesh_assert(elem);
552  return fe_lagrange_3D_shape_deriv<LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
553 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [164/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() [165/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 550 of file fe_hierarchic_vec.C.

554 {
555  return FE<1,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
556 }

◆ shape_deriv() [166/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 552 of file fe_raviart_shape_3D.C.

557 {
558  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
559  return RealGradient();
560 }
RealVectorValue RealGradient

◆ shape_deriv() [167/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 557 of file fe_lagrange_shape_3D.C.

563 {
564  libmesh_assert(elem);
565  return fe_lagrange_3D_shape_deriv<L2_LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
566 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_deriv() [168/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 559 of file fe_nedelec_one.C.

561 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [169/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [170/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 563 of file fe_nedelec_one.C.

565 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [171/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 563 of file fe_raviart_shape_3D.C.

568 {
569  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
570  return RealGradient();
571 }
RealVectorValue RealGradient

◆ shape_deriv() [172/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 575 of file fe_raviart_shape_3D.C.

581 {
582  return FE<3,RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
583 }

◆ shape_deriv() [173/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 586 of file fe_raviart_shape_3D.C.

592 {
593  return FE<3,L2_RAVIART_THOMAS>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
594 }

◆ shape_deriv() [174/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 586 of file fe_nedelec_one.C.

588 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [175/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 590 of file fe_nedelec_one.C.

592 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [176/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 592 of file fe_hierarchic_vec.C.

596 {
597  const Real value = FE<2,HIERARCHIC>::shape_deriv(elem, order, i/2, j, p, add_p_level);
598 
599  switch( i%2 )
600  {
601  case 0:
602  return libMesh::RealGradient( value );
603 
604  case 1:
605  return libMesh::RealGradient( Real(0), value );
606 
607  default:
608  libmesh_error_msg("i%2 must be either 0 or 1!");
609  }
610 
611  //dummy
612  return libMesh::RealGradient();
613 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [177/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 594 of file fe_raviart.C.

596 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [178/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 598 of file fe_raviart.C.

600 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [179/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 602 of file fe_raviart.C.

604 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [180/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 606 of file fe_raviart.C.

608 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [181/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 630 of file fe_monomial_vec.C.

636 {
637  Real value = FE<3, MONOMIAL>::shape_deriv(
638  elem->type(), static_cast<Order>(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 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ 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 643 of file fe_raviart.C.

645 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [183/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 647 of file fe_hierarchic_vec.C.

651 {
652  return FE<2,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
653 }

◆ shape_deriv() [184/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 647 of file fe_raviart.C.

649 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [185/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 651 of file fe_raviart.C.

653 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_deriv() [186/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 655 of file fe_raviart.C.

657 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ 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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
670 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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 672 of file fe_szabab_shape_2D.C.

678 {
679  libmesh_assert(elem);
680 
681  const ElemType type = elem->type();
682 
683  const Order totalorder = static_cast<Order>(order + add_p_level * elem->p_level());
684 
685  switch (totalorder)
686  {
687 
688  // 1st & 2nd-order Szabo-Babuska.
689  case FIRST:
690  case SECOND:
691  {
692  switch (type)
693  {
694 
695  // Szabo-Babuska shape functions on the triangle.
696  case TRI3:
697  case TRI6:
698  case TRI7:
699  {
700  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
701  }
702 
703 
704  // Szabo-Babuska shape functions on the quadrilateral.
705  case QUAD4:
706  case QUAD8:
707  case QUAD9:
708  {
709  // Compute quad shape functions as a tensor-product
710  const Real xi = p(0);
711  const Real eta = p(1);
712 
713  libmesh_assert_less (i, 9);
714 
715  // 0 1 2 3 4 5 6 7 8
716  static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
717  static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
718 
719  switch (j)
720  {
721  // d()/dxi
722  case 0:
723  return (FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
724  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
725 
726  // d()/deta
727  case 1:
728  return (FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
729  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
730 
731  default:
732  libmesh_error_msg("Invalid j = " << j);
733  }
734  }
735 
736  default:
737  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
738  }
739  }
740 
741 
742 
743  // 3rd-order Szabo-Babuska.
744  case THIRD:
745  {
746  switch (type)
747  {
748  // Szabo-Babuska shape functions on the triangle.
749  case TRI6:
750  case TRI7:
751  {
752  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
753  }
754 
755 
756  // Szabo-Babuska shape functions on the quadrilateral.
757  case QUAD8:
758  case QUAD9:
759  {
760  // Compute quad shape functions as a tensor-product
761  const Real xi = p(0);
762  const Real eta = p(1);
763 
764  libmesh_assert_less (i, 16);
765 
766  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
767  static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
768  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
769 
770  const Real f = quad_flip(elem, totalorder, i);
771 
772  switch (j)
773  {
774  // d()/dxi
775  case 0:
776  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
777  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
778 
779  // d()/deta
780  case 1:
781  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
782  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
783 
784  default:
785  libmesh_error_msg("Invalid j = " << j);
786  }
787  }
788 
789  default:
790  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
791  }
792  }
793 
794 
795 
796 
797  // 4th-order Szabo-Babuska.
798  case FOURTH:
799  {
800  switch (type)
801  {
802 
803  // Szabo-Babuska shape functions on the triangle.
804  case TRI6:
805  case TRI7:
806  {
807  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
808  }
809 
810 
811  // Szabo-Babuska shape functions on the quadrilateral.
812  case QUAD8:
813  case QUAD9:
814  {
815  // Compute quad shape functions as a tensor-product
816  const Real xi = p(0);
817  const Real eta = p(1);
818 
819  libmesh_assert_less (i, 25);
820 
821  // 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
822  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};
823  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};
824 
825  const Real f = quad_flip(elem, totalorder, i);
826 
827  switch (j)
828  {
829  // d()/dxi
830  case 0:
831  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
832  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
833 
834  // d()/deta
835  case 1:
836  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
837  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
838 
839  default:
840  libmesh_error_msg("Invalid j = " << j);
841  }
842  }
843 
844  default:
845  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
846  }
847  }
848 
849 
850 
851 
852  // 5th-order Szabo-Babuska.
853  case FIFTH:
854  {
855  // Szabo-Babuska shape functions on the quadrilateral.
856  switch (type)
857  {
858 
859  // Szabo-Babuska shape functions on the triangle.
860  case TRI6:
861  case TRI7:
862  {
863  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
864  }
865 
866 
867  case QUAD8:
868  case QUAD9:
869  {
870  // Compute quad shape functions as a tensor-product
871  const Real xi = p(0);
872  const Real eta = p(1);
873 
874  libmesh_assert_less (i, 36);
875 
876  // 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
877  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};
878  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};
879 
880  const Real f = quad_flip(elem, totalorder, i);
881 
882  switch (j)
883  {
884  // d()/dxi
885  case 0:
886  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
887  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
888 
889  // d()/deta
890  case 1:
891  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
892  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
893 
894  default:
895  libmesh_error_msg("Invalid j = " << j);
896  }
897  }
898 
899  default:
900  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
901  }
902  }
903 
904 
905  // 6th-order Szabo-Babuska.
906  case SIXTH:
907  {
908  // Szabo-Babuska shape functions on the quadrilateral.
909  switch (type)
910  {
911 
912  // Szabo-Babuska shape functions on the triangle.
913  case TRI6:
914  case TRI7:
915  {
916  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
917  }
918 
919 
920  case QUAD8:
921  case QUAD9:
922  {
923  // Compute quad shape functions as a tensor-product
924  const Real xi = p(0);
925  const Real eta = p(1);
926 
927  libmesh_assert_less (i, 49);
928 
929  // 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
930  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};
931  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};
932 
933  const Real f = quad_flip(elem, totalorder, i);
934 
935  switch (j)
936  {
937  // d()/dxi
938  case 0:
939  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
940  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
941 
942  // d()/deta
943  case 1:
944  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
945  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
946 
947  default:
948  libmesh_error_msg("Invalid j = " << j);
949  }
950  }
951 
952  default:
953  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
954  }
955  }
956 
957 
958  // 7th-order Szabo-Babuska.
959  case SEVENTH:
960  {
961  // Szabo-Babuska shape functions on the quadrilateral.
962  switch (type)
963  {
964 
965  // Szabo-Babuska shape functions on the triangle.
966  case TRI6:
967  case TRI7:
968  {
969  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<2,SZABAB>::shape);
970  }
971 
972 
973  case QUAD8:
974  case QUAD9:
975  {
976  // Compute quad shape functions as a tensor-product
977  const Real xi = p(0);
978  const Real eta = p(1);
979 
980  libmesh_assert_less (i, 64);
981 
982  // 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
983  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};
984  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};
985 
986  const Real f = quad_flip(elem, totalorder, i);
987 
988  switch (j)
989  {
990  // d()/dxi
991  case 0:
992  return f*(FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
993  FE<1,SZABAB>::shape (EDGE3, totalorder, i1[i], eta));
994 
995  // d()/deta
996  case 1:
997  return f*(FE<1,SZABAB>::shape (EDGE3, totalorder, i0[i], xi)*
998  FE<1,SZABAB>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta));
999 
1000  default:
1001  libmesh_error_msg("Invalid j = " << j);
1002  }
1003  }
1004 
1005  default:
1006  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1007  }
1008  }
1009 
1010 
1011 
1012  // by default throw an error;call the orientation-independent shape functions
1013  default:
1014  libmesh_error_msg("ERROR: Unsupported polynomial order!");
1015  }
1016 }
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:2945
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:744
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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
684 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_deriv() [190/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [191/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 693 of file fe_hierarchic_vec.C.

697 {
698  const Real value = FE<3,HIERARCHIC>::shape_deriv(elem, order, i/3, j, p, add_p_level);
699 
700  switch( i%3 )
701  {
702  case 0:
703  return libMesh::RealGradient( value );
704 
705  case 1:
706  return libMesh::RealGradient( Real(0), value );
707 
708  case 2:
709  return libMesh::RealGradient( Real(0), Real(0), value );
710 
711  default:
712  libmesh_error_msg("i%3 must be 0, 1, or 2!");
713  }
714 
715  //dummy
716  return libMesh::RealGradient();
717 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [192/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 701 of file fe_nedelec_one_shape_3D.C.

706 {
707  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
708  return RealGradient();
709 }
RealVectorValue RealGradient

◆ 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< 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 713 of file fe_nedelec_one_shape_3D.C.

719 {
720  return FE<3,NEDELEC_ONE>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
721 }

◆ shape_deriv() [195/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 714 of file fe_lagrange_vec.C.

717 {
718  Real value = FE<0,LAGRANGE>::shape_deriv( type, order, i, j, p );
719  return libMesh::RealGradient( value );
720 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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< 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 738 of file fe_lagrange_vec.C.

741 {
742  return FE<0,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
743 }

◆ shape_deriv() [198/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 756 of file fe_hierarchic_vec.C.

760 {
761  return FE<3,HIERARCHIC_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
762 }

◆ shape_deriv() [199/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 762 of file fe_lagrange_vec.C.

765 {
766  Real value = FE<1,LAGRANGE>::shape_deriv( type, order, i, j, p );
767  return libMesh::RealGradient( value );
768 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [200/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 763 of file fe_subdivision_2D.C.

768 {
769  switch (order)
770  {
771  case FOURTH:
772  {
773  switch (type)
774  {
775  case TRI3SUBDIVISION:
776  libmesh_assert_less(i, 12);
777  return FESubdivision::regular_shape_deriv(i,j,p(0),p(1));
778  default:
779  libmesh_error_msg("ERROR: Unsupported element type == " << Utility::enum_to_string(type));
780  }
781  }
782  default:
783  libmesh_error_msg("ERROR: Unsupported polynomial order == " << order);
784  }
785 }
std::string enum_to_string(const T e)

◆ shape_deriv() [201/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 785 of file fe_lagrange_vec.C.

788 {
789  return FE<1,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
790 }

◆ shape_deriv() [202/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 790 of file fe_subdivision_2D.C.

796 {
797  libmesh_assert(elem);
798  const Order totalorder =
799  static_cast<Order>(order+add_p_level*elem->p_level());
800  return FE<2,SUBDIVISION>::shape_deriv(elem->type(), totalorder, i, j, p);
801 }
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]

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 805 of file fe_subdivision_2D.C.

811 {
812  libmesh_assert(elem);
813  const Order totalorder =
814  static_cast<Order>(fet.order+add_p_level*elem->p_level());
815  return FE<2,SUBDIVISION>::shape_deriv(elem->type(), totalorder, i, j, p);
816 }
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() [204/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 823 of file fe_lagrange_vec.C.

826 {
827  Real value = FE<2,LAGRANGE>::shape_deriv( type, order, i/2, j, p );
828 
829  switch( i%2 )
830  {
831  case 0:
832  return libMesh::RealGradient( value );
833 
834  case 1:
835  return libMesh::RealGradient( Real(0), value );
836 
837  default:
838  libmesh_error_msg("i%2 must be either 0 or 1!");
839  }
840 
841  //dummy
842  return libMesh::RealGradient();
843 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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]

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 876 of file fe_lagrange_vec.C.

879 {
880  return FE<2,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
881 }

◆ shape_deriv() [207/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 917 of file fe_lagrange_vec.C.

920 {
921  Real value = FE<3,LAGRANGE>::shape_deriv( type, order, i/3, j, p );
922 
923  switch( i%3 )
924  {
925  case 0:
926  return libMesh::RealGradient( value );
927 
928  case 1:
929  return libMesh::RealGradient( Real(0), value );
930 
931  case 2:
932  return libMesh::RealGradient( Real(0), Real(0), value );
933 
934  default:
935  libmesh_error_msg("i%3 must be 0, 1, or 2!");
936  }
937 
938  //dummy
939  return libMesh::RealGradient();
940 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [208/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 920 of file fe_bernstein_shape_3D.C.

926 {
927 
928 #if LIBMESH_DIM == 3
929  libmesh_assert(elem);
930  const ElemType type = elem->type();
931 
932  const Order totalorder =
933  static_cast<Order>(order + add_p_level * elem->p_level());
934 
935  libmesh_assert_less (j, 3);
936 
937  switch (totalorder)
938  {
939  // 1st order Bernstein.
940  case FIRST:
941  {
942  switch (type)
943  {
944  // Bernstein shape functions on the tetrahedron.
945  case TET4:
946  case TET10:
947  case TET14:
948  {
949  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
950  }
951 
952 
953  // Bernstein shape functions on the hexahedral.
954  case HEX8:
955  case HEX20:
956  case HEX27:
957  {
958  libmesh_assert_less (i, 8);
959 
960  // Compute hex shape functions as a tensor-product
961  const Real xi = p(0);
962  const Real eta = p(1);
963  const Real zeta = p(2);
964 
965  // The only way to make any sense of this
966  // is to look at the mgflo/mg2/mgf documentation
967  // and make the cut-out cube!
968  // 0 1 2 3 4 5 6 7
969  static const unsigned int i0[] = {0, 1, 1, 0, 0, 1, 1, 0};
970  static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 1, 1};
971  static const unsigned int i2[] = {0, 0, 0, 0, 1, 1, 1, 1};
972 
973  switch (j)
974  {
975  // d()/dxi
976  case 0:
977  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
978  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
979  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
980 
981  // d()/deta
982  case 1:
983  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
984  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta)*
985  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
986 
987  // d()/dzeta
988  case 2:
989  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
990  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
991  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta));
992 
993  default:
994  libmesh_error_msg("Invalid derivative index j = " << j);
995  }
996  }
997 
998  default:
999  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1000  }
1001  }
1002 
1003 
1004 
1005 
1006  case SECOND:
1007  {
1008  switch (type)
1009  {
1010  // Bernstein shape functions on the tetrahedron.
1011  case TET10:
1012  case TET14:
1013  {
1014  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
1015  }
1016 
1017  // Bernstein shape functions on the hexahedral.
1018  case HEX20:
1019  {
1020  libmesh_assert_less (i, 20);
1021 
1022  // Compute hex shape functions as a tensor-product
1023  const Real xi = p(0);
1024  const Real eta = p(1);
1025  const Real zeta = p(2);
1026 
1027  switch (j)
1028  {
1029  // d()/dxi
1030  case 0:
1031  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[i], 0, xi)*
1032  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[i], eta)*
1033  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[i], zeta)
1034  +hex20_scal20[i]*
1035  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[20], 0, xi)*
1036  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[20], eta)*
1037  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[20], zeta)
1038  +hex20_scal21[i]*
1039  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[21], 0, xi)*
1040  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[21], eta)*
1041  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[21], zeta)
1042  +hex20_scal22[i]*
1043  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[22], 0, xi)*
1044  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[22], eta)*
1045  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[22], zeta)
1046  +hex20_scal23[i]*
1047  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[23], 0, xi)*
1048  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[23], eta)*
1049  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[23], zeta)
1050  +hex20_scal24[i]*
1051  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[24], 0, xi)*
1052  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[24], eta)*
1053  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[24], zeta)
1054  +hex20_scal25[i]*
1055  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[25], 0, xi)*
1056  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[25], eta)*
1057  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[25], zeta)
1058  +hex20_scal26[i]*
1059  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i0[26], 0, xi)*
1060  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[26], eta)*
1061  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[26], zeta));
1062 
1063  // d()/deta
1064  case 1:
1065  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[i], xi)*
1066  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[i], 0, eta)*
1067  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[i], zeta)
1068  +hex20_scal20[i]*
1069  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[20], xi)*
1070  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[20], 0, eta)*
1071  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[20], zeta)
1072  +hex20_scal21[i]*
1073  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[21], xi)*
1074  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[21], 0, eta)*
1075  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[21], zeta)
1076  +hex20_scal22[i]*
1077  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[22], xi)*
1078  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[22], 0, eta)*
1079  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[22], zeta)
1080  +hex20_scal23[i]*
1081  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[23], xi)*
1082  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[23], 0, eta)*
1083  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[23], zeta)
1084  +hex20_scal24[i]*
1085  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[24], xi)*
1086  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[24], 0, eta)*
1087  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[24], zeta)
1088  +hex20_scal25[i]*
1089  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[25], xi)*
1090  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[25], 0, eta)*
1091  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[25], zeta)
1092  +hex20_scal26[i]*
1093  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[26], xi)*
1094  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i1[26], 0, eta)*
1095  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i2[26], zeta));
1096 
1097  // d()/dzeta
1098  case 2:
1099  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[i], xi)*
1100  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[i], eta)*
1101  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[i], 0, zeta)
1102  +hex20_scal20[i]*
1103  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[20], xi)*
1104  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[20], eta)*
1105  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[20], 0, zeta)
1106  +hex20_scal21[i]*
1107  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[21], xi)*
1108  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[21], eta)*
1109  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[21], 0, zeta)
1110  +hex20_scal22[i]*
1111  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[22], xi)*
1112  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[22], eta)*
1113  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[22], 0, zeta)
1114  +hex20_scal23[i]*
1115  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[23], xi)*
1116  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[23], eta)*
1117  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[23], 0, zeta)
1118  +hex20_scal24[i]*
1119  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[24], xi)*
1120  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[24], eta)*
1121  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[24], 0, zeta)
1122  +hex20_scal25[i]*
1123  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[25], xi)*
1124  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[25], eta)*
1125  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[25], 0, zeta)
1126  +hex20_scal26[i]*
1127  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i0[26], xi)*
1128  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, hex20_i1[26], eta)*
1129  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, hex20_i2[26], 0, zeta));
1130 
1131  default:
1132  libmesh_error_msg("Invalid derivative index j = " << j);
1133  }
1134  }
1135 
1136  // Bernstein shape functions on the hexahedral.
1137  case HEX27:
1138  {
1139  libmesh_assert_less (i, 27);
1140 
1141  // Compute hex shape functions as a tensor-product
1142  const Real xi = p(0);
1143  const Real eta = p(1);
1144  const Real zeta = p(2);
1145 
1146  // The only way to make any sense of this
1147  // is to look at the mgflo/mg2/mgf documentation
1148  // and make the cut-out cube!
1149  // 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
1150  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};
1151  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};
1152  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};
1153 
1154  switch (j)
1155  {
1156  // d()/dxi
1157  case 0:
1158  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi)*
1159  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
1160  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
1161 
1162  // d()/deta
1163  case 1:
1164  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
1165  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta)*
1166  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta));
1167 
1168  // d()/dzeta
1169  case 2:
1170  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi)*
1171  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta)*
1172  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta));
1173 
1174  default:
1175  libmesh_error_msg("Invalid derivative index j = " << j);
1176  }
1177  }
1178 
1179 
1180  default:
1181  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1182  }
1183  }
1184 
1185 
1186 
1187  // 3rd-order Bernstein.
1188  case THIRD:
1189  {
1190  switch (type)
1191  {
1192 
1193  // // Bernstein shape functions derivatives.
1194  // case TET10:
1195  // {
1196  // // I have been lazy here and am using finite differences
1197  // // to compute the derivatives!
1198  // const Real eps = 1.e-4;
1199 
1200  // libmesh_assert_less (i, 20);
1201  // libmesh_assert_less (j, 3);
1202 
1203  // switch (j)
1204  // {
1205  // // d()/dxi
1206  // case 0:
1207  // {
1208  // const Point pp(p(0)+eps, p(1), p(2));
1209  // const Point pm(p(0)-eps, p(1), p(2));
1210 
1211  // return (FE<3,BERNSTEIN>::shape(elem, order, i, pp) -
1212  // FE<3,BERNSTEIN>::shape(elem, order, i, pm))/2./eps;
1213  // }
1214 
1215  // // d()/deta
1216  // case 1:
1217  // {
1218  // const Point pp(p(0), p(1)+eps, p(2));
1219  // const Point pm(p(0), p(1)-eps, p(2));
1220 
1221  // return (FE<3,BERNSTEIN>::shape(elem, order, i, pp) -
1222  // FE<3,BERNSTEIN>::shape(elem, order, i, pm))/2./eps;
1223  // }
1224  // // d()/dzeta
1225  // case 2:
1226  // {
1227  // const Point pp(p(0), p(1), p(2)+eps);
1228  // const Point pm(p(0), p(1), p(2)-eps);
1229 
1230  // return (FE<3,BERNSTEIN>::shape(elem, order, i, pp) -
1231  // FE<3,BERNSTEIN>::shape(elem, order, i, pm))/2./eps;
1232  // }
1233  // default:
1234  // libmesh_error_msg("Invalid derivative index j = " << j);
1235  // }
1236 
1237 
1238  // }
1239 
1240 
1241  // Bernstein shape functions on the hexahedral.
1242  case HEX27:
1243  {
1244  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
1245  }
1246 
1247  // // Compute hex shape functions as a tensor-product
1248  // const Real xi = p(0);
1249  // const Real eta = p(1);
1250  // const Real zeta = p(2);
1251  // Real xi_mapped = p(0);
1252  // Real eta_mapped = p(1);
1253  // Real zeta_mapped = p(2);
1254 
1255  // // The only way to make any sense of this
1256  // // is to look at the mgflo/mg2/mgf documentation
1257  // // and make the cut-out cube!
1258  // // 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
1259  // // 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
1260  // 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};
1261  // 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};
1262  // 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};
1263 
1264 
1265 
1266  // // handle the edge orientation
1267  // {
1268  // // Edge 0
1269  // if ((i1[i] == 0) && (i2[i] == 0))
1270  // {
1271  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(1)))
1272  // xi_mapped = -xi;
1273  // }
1274  // // Edge 1
1275  // else if ((i0[i] == 1) && (i2[i] == 0))
1276  // {
1277  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(2)))
1278  // eta_mapped = -eta;
1279  // }
1280  // // Edge 2
1281  // else if ((i1[i] == 1) && (i2[i] == 0))
1282  // {
1283  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(2)))
1284  // xi_mapped = -xi;
1285  // }
1286  // // Edge 3
1287  // else if ((i0[i] == 0) && (i2[i] == 0))
1288  // {
1289  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(3)))
1290  // eta_mapped = -eta;
1291  // }
1292  // // Edge 4
1293  // else if ((i0[i] == 0) && (i1[i] == 0))
1294  // {
1295  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(4)))
1296  // zeta_mapped = -zeta;
1297  // }
1298  // // Edge 5
1299  // else if ((i0[i] == 1) && (i1[i] == 0))
1300  // {
1301  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(5)))
1302  // zeta_mapped = -zeta;
1303  // }
1304  // // Edge 6
1305  // else if ((i0[i] == 1) && (i1[i] == 1))
1306  // {
1307  // if (elem->node_id(2) != std::min(elem->node_id(2), elem->node_id(6)))
1308  // zeta_mapped = -zeta;
1309  // }
1310  // // Edge 7
1311  // else if ((i0[i] == 0) && (i1[i] == 1))
1312  // {
1313  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(7)))
1314  // zeta_mapped = -zeta;
1315  // }
1316  // // Edge 8
1317  // else if ((i1[i] == 0) && (i2[i] == 1))
1318  // {
1319  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(5)))
1320  // xi_mapped = -xi;
1321  // }
1322  // // Edge 9
1323  // else if ((i0[i] == 1) && (i2[i] == 1))
1324  // {
1325  // if (elem->node_id(5) != std::min(elem->node_id(5), elem->node_id(6)))
1326  // eta_mapped = -eta;
1327  // }
1328  // // Edge 10
1329  // else if ((i1[i] == 1) && (i2[i] == 1))
1330  // {
1331  // if (elem->node_id(7) != std::min(elem->node_id(7), elem->node_id(6)))
1332  // xi_mapped = -xi;
1333  // }
1334  // // Edge 11
1335  // else if ((i0[i] == 0) && (i2[i] == 1))
1336  // {
1337  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(7)))
1338  // eta_mapped = -eta;
1339  // }
1340  // }
1341 
1342 
1343  // // handle the face orientation
1344  // {
1345  // // Face 0
1346  // if ((i2[i] == 0) && (i0[i] >= 2) && (i1[i] >= 2))
1347  // {
1348  // const unsigned int min_node = std::min(elem->node_id(1),
1349  // std::min(elem->node_id(2),
1350  // std::min(elem->node_id(0),
1351  // elem->node_id(3))));
1352  // if (elem->node_id(0) == min_node)
1353  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(3)))
1354  // {
1355  // // Case 1
1356  // xi_mapped = xi;
1357  // eta_mapped = eta;
1358  // }
1359  // else
1360  // {
1361  // // Case 2
1362  // xi_mapped = eta;
1363  // eta_mapped = xi;
1364  // }
1365 
1366  // else if (elem->node_id(3) == min_node)
1367  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(2)))
1368  // {
1369  // // Case 3
1370  // xi_mapped = -eta;
1371  // eta_mapped = xi;
1372  // }
1373  // else
1374  // {
1375  // // Case 4
1376  // xi_mapped = xi;
1377  // eta_mapped = -eta;
1378  // }
1379 
1380  // else if (elem->node_id(2) == min_node)
1381  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(1)))
1382  // {
1383  // // Case 5
1384  // xi_mapped = -xi;
1385  // eta_mapped = -eta;
1386  // }
1387  // else
1388  // {
1389  // // Case 6
1390  // xi_mapped = -eta;
1391  // eta_mapped = -xi;
1392  // }
1393 
1394  // else if (elem->node_id(1) == min_node)
1395  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(0)))
1396  // {
1397  // // Case 7
1398  // xi_mapped = eta;
1399  // eta_mapped = -xi;
1400  // }
1401  // else
1402  // {
1403  // // Case 8
1404  // xi_mapped = -xi;
1405  // eta_mapped = eta;
1406  // }
1407  // }
1408 
1409 
1410  // // Face 1
1411  // else if ((i1[i] == 0) && (i0[i] >= 2) && (i2[i] >= 2))
1412  // {
1413  // const unsigned int min_node = std::min(elem->node_id(0),
1414  // std::min(elem->node_id(1),
1415  // std::min(elem->node_id(5),
1416  // elem->node_id(4))));
1417  // if (elem->node_id(0) == min_node)
1418  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(4)))
1419  // {
1420  // // Case 1
1421  // xi_mapped = xi;
1422  // zeta_mapped = zeta;
1423  // }
1424  // else
1425  // {
1426  // // Case 2
1427  // xi_mapped = zeta;
1428  // zeta_mapped = xi;
1429  // }
1430 
1431  // else if (elem->node_id(1) == min_node)
1432  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(0)))
1433  // {
1434  // // Case 3
1435  // xi_mapped = zeta;
1436  // zeta_mapped = -xi;
1437  // }
1438  // else
1439  // {
1440  // // Case 4
1441  // xi_mapped = -xi;
1442  // zeta_mapped = zeta;
1443  // }
1444 
1445  // else if (elem->node_id(5) == min_node)
1446  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(1)))
1447  // {
1448  // // Case 5
1449  // xi_mapped = -xi;
1450  // zeta_mapped = -zeta;
1451  // }
1452  // else
1453  // {
1454  // // Case 6
1455  // xi_mapped = -zeta;
1456  // zeta_mapped = -xi;
1457  // }
1458 
1459  // else if (elem->node_id(4) == min_node)
1460  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(5)))
1461  // {
1462  // // Case 7
1463  // xi_mapped = -xi;
1464  // zeta_mapped = zeta;
1465  // }
1466  // else
1467  // {
1468  // // Case 8
1469  // xi_mapped = xi;
1470  // zeta_mapped = -zeta;
1471  // }
1472  // }
1473 
1474 
1475  // // Face 2
1476  // else if ((i0[i] == 1) && (i1[i] >= 2) && (i2[i] >= 2))
1477  // {
1478  // const unsigned int min_node = std::min(elem->node_id(1),
1479  // std::min(elem->node_id(2),
1480  // std::min(elem->node_id(6),
1481  // elem->node_id(5))));
1482  // if (elem->node_id(1) == min_node)
1483  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(5)))
1484  // {
1485  // // Case 1
1486  // eta_mapped = eta;
1487  // zeta_mapped = zeta;
1488  // }
1489  // else
1490  // {
1491  // // Case 2
1492  // eta_mapped = zeta;
1493  // zeta_mapped = eta;
1494  // }
1495 
1496  // else if (elem->node_id(2) == min_node)
1497  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(1)))
1498  // {
1499  // // Case 3
1500  // eta_mapped = zeta;
1501  // zeta_mapped = -eta;
1502  // }
1503  // else
1504  // {
1505  // // Case 4
1506  // eta_mapped = -eta;
1507  // zeta_mapped = zeta;
1508  // }
1509 
1510  // else if (elem->node_id(6) == min_node)
1511  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(2)))
1512  // {
1513  // // Case 5
1514  // eta_mapped = -eta;
1515  // zeta_mapped = -zeta;
1516  // }
1517  // else
1518  // {
1519  // // Case 6
1520  // eta_mapped = -zeta;
1521  // zeta_mapped = -eta;
1522  // }
1523 
1524  // else if (elem->node_id(5) == min_node)
1525  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(6)))
1526  // {
1527  // // Case 7
1528  // eta_mapped = -zeta;
1529  // zeta_mapped = eta;
1530  // }
1531  // else
1532  // {
1533  // // Case 8
1534  // eta_mapped = eta;
1535  // zeta_mapped = -zeta;
1536  // }
1537  // }
1538 
1539 
1540  // // Face 3
1541  // else if ((i1[i] == 1) && (i0[i] >= 2) && (i2[i] >= 2))
1542  // {
1543  // const unsigned int min_node = std::min(elem->node_id(2),
1544  // std::min(elem->node_id(3),
1545  // std::min(elem->node_id(7),
1546  // elem->node_id(6))));
1547  // if (elem->node_id(3) == min_node)
1548  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(7)))
1549  // {
1550  // // Case 1
1551  // xi_mapped = xi;
1552  // zeta_mapped = zeta;
1553  // }
1554  // else
1555  // {
1556  // // Case 2
1557  // xi_mapped = zeta;
1558  // zeta_mapped = xi;
1559  // }
1560 
1561  // else if (elem->node_id(7) == min_node)
1562  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(6)))
1563  // {
1564  // // Case 3
1565  // xi_mapped = -zeta;
1566  // zeta_mapped = xi;
1567  // }
1568  // else
1569  // {
1570  // // Case 4
1571  // xi_mapped = xi;
1572  // zeta_mapped = -zeta;
1573  // }
1574 
1575  // else if (elem->node_id(6) == min_node)
1576  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(2)))
1577  // {
1578  // // Case 5
1579  // xi_mapped = -xi;
1580  // zeta_mapped = -zeta;
1581  // }
1582  // else
1583  // {
1584  // // Case 6
1585  // xi_mapped = -zeta;
1586  // zeta_mapped = -xi;
1587  // }
1588 
1589  // else if (elem->node_id(2) == min_node)
1590  // if (elem->node_id(6) == std::min(elem->node_id(3), elem->node_id(6)))
1591  // {
1592  // // Case 7
1593  // xi_mapped = zeta;
1594  // zeta_mapped = -xi;
1595  // }
1596  // else
1597  // {
1598  // // Case 8
1599  // xi_mapped = -xi;
1600  // zeta_mapped = zeta;
1601  // }
1602  // }
1603 
1604 
1605  // // Face 4
1606  // else if ((i0[i] == 0) && (i1[i] >= 2) && (i2[i] >= 2))
1607  // {
1608  // const unsigned int min_node = std::min(elem->node_id(3),
1609  // std::min(elem->node_id(0),
1610  // std::min(elem->node_id(4),
1611  // elem->node_id(7))));
1612  // if (elem->node_id(0) == min_node)
1613  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(4)))
1614  // {
1615  // // Case 1
1616  // eta_mapped = eta;
1617  // zeta_mapped = zeta;
1618  // }
1619  // else
1620  // {
1621  // // Case 2
1622  // eta_mapped = zeta;
1623  // zeta_mapped = eta;
1624  // }
1625 
1626  // else if (elem->node_id(4) == min_node)
1627  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(7)))
1628  // {
1629  // // Case 3
1630  // eta_mapped = -zeta;
1631  // zeta_mapped = eta;
1632  // }
1633  // else
1634  // {
1635  // // Case 4
1636  // eta_mapped = eta;
1637  // zeta_mapped = -zeta;
1638  // }
1639 
1640  // else if (elem->node_id(7) == min_node)
1641  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(3)))
1642  // {
1643  // // Case 5
1644  // eta_mapped = -eta;
1645  // zeta_mapped = -zeta;
1646  // }
1647  // else
1648  // {
1649  // // Case 6
1650  // eta_mapped = -zeta;
1651  // zeta_mapped = -eta;
1652  // }
1653 
1654  // else if (elem->node_id(3) == min_node)
1655  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(0)))
1656  // {
1657  // // Case 7
1658  // eta_mapped = zeta;
1659  // zeta_mapped = -eta;
1660  // }
1661  // else
1662  // {
1663  // // Case 8
1664  // eta_mapped = -eta;
1665  // zeta_mapped = zeta;
1666  // }
1667  // }
1668 
1669 
1670  // // Face 5
1671  // else if ((i2[i] == 1) && (i0[i] >= 2) && (i1[i] >= 2))
1672  // {
1673  // const unsigned int min_node = std::min(elem->node_id(4),
1674  // std::min(elem->node_id(5),
1675  // std::min(elem->node_id(6),
1676  // elem->node_id(7))));
1677  // if (elem->node_id(4) == min_node)
1678  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(7)))
1679  // {
1680  // // Case 1
1681  // xi_mapped = xi;
1682  // eta_mapped = eta;
1683  // }
1684  // else
1685  // {
1686  // // Case 2
1687  // xi_mapped = eta;
1688  // eta_mapped = xi;
1689  // }
1690 
1691  // else if (elem->node_id(5) == min_node)
1692  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(4)))
1693  // {
1694  // // Case 3
1695  // xi_mapped = eta;
1696  // eta_mapped = -xi;
1697  // }
1698  // else
1699  // {
1700  // // Case 4
1701  // xi_mapped = -xi;
1702  // eta_mapped = eta;
1703  // }
1704 
1705  // else if (elem->node_id(6) == min_node)
1706  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(5)))
1707  // {
1708  // // Case 5
1709  // xi_mapped = -xi;
1710  // eta_mapped = -eta;
1711  // }
1712  // else
1713  // {
1714  // // Case 6
1715  // xi_mapped = -eta;
1716  // eta_mapped = -xi;
1717  // }
1718 
1719  // else if (elem->node_id(7) == min_node)
1720  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(6)))
1721  // {
1722  // // Case 7
1723  // xi_mapped = -eta;
1724  // eta_mapped = xi;
1725  // }
1726  // else
1727  // {
1728  // // Case 8
1729  // xi_mapped = xi;
1730  // eta_mapped = eta;
1731  // }
1732  // }
1733 
1734 
1735  // }
1736 
1737 
1738 
1739  // libmesh_assert_less (j, 3);
1740 
1741  // switch (j)
1742  // {
1743  // // d()/dxi
1744  // case 0:
1745  // return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi_mapped)*
1746  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
1747  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
1748 
1749  // // d()/deta
1750  // case 1:
1751  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
1752  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta_mapped)*
1753  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
1754 
1755  // // d()/dzeta
1756  // case 2:
1757  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
1758  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
1759  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta_mapped));
1760 
1761  // default:
1762  // libmesh_error_msg("Invalid derivative index j = " << j);
1763  // }
1764 
1765 
1766  default:
1767  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1768  }
1769  }
1770 
1771  // 4th-order Bernstein.
1772  case FOURTH:
1773  {
1774  switch (type)
1775  {
1776 
1777  // Bernstein shape functions derivatives on the hexahedral.
1778  case HEX27:
1779  {
1780  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,BERNSTEIN>::shape);
1781  }
1782 
1783  // // Compute hex shape functions as a tensor-product
1784  // const Real xi = p(0);
1785  // const Real eta = p(1);
1786  // const Real zeta = p(2);
1787  // Real xi_mapped = p(0);
1788  // Real eta_mapped = p(1);
1789  // Real zeta_mapped = p(2);
1790 
1791  // // The only way to make any sense of this
1792  // // is to look at the mgflo/mg2/mgf documentation
1793  // // and make the cut-out cube!
1794  // // 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
1795  // // 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
1796  // 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};
1797  // 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};
1798  // 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};
1799 
1800 
1801 
1802  // // handle the edge orientation
1803  // {
1804  // // Edge 0
1805  // if ((i1[i] == 0) && (i2[i] == 0))
1806  // {
1807  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(1)))
1808  // xi_mapped = -xi;
1809  // }
1810  // // Edge 1
1811  // else if ((i0[i] == 1) && (i2[i] == 0))
1812  // {
1813  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(2)))
1814  // eta_mapped = -eta;
1815  // }
1816  // // Edge 2
1817  // else if ((i1[i] == 1) && (i2[i] == 0))
1818  // {
1819  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(2)))
1820  // xi_mapped = -xi;
1821  // }
1822  // // Edge 3
1823  // else if ((i0[i] == 0) && (i2[i] == 0))
1824  // {
1825  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(3)))
1826  // eta_mapped = -eta;
1827  // }
1828  // // Edge 4
1829  // else if ((i0[i] == 0) && (i1[i] == 0))
1830  // {
1831  // if (elem->node_id(0) != std::min(elem->node_id(0), elem->node_id(4)))
1832  // zeta_mapped = -zeta;
1833  // }
1834  // // Edge 5
1835  // else if ((i0[i] == 1) && (i1[i] == 0))
1836  // {
1837  // if (elem->node_id(1) != std::min(elem->node_id(1), elem->node_id(5)))
1838  // zeta_mapped = -zeta;
1839  // }
1840  // // Edge 6
1841  // else if ((i0[i] == 1) && (i1[i] == 1))
1842  // {
1843  // if (elem->node_id(2) != std::min(elem->node_id(2), elem->node_id(6)))
1844  // zeta_mapped = -zeta;
1845  // }
1846  // // Edge 7
1847  // else if ((i0[i] == 0) && (i1[i] == 1))
1848  // {
1849  // if (elem->node_id(3) != std::min(elem->node_id(3), elem->node_id(7)))
1850  // zeta_mapped = -zeta;
1851  // }
1852  // // Edge 8
1853  // else if ((i1[i] == 0) && (i2[i] == 1))
1854  // {
1855  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(5)))
1856  // xi_mapped = -xi;
1857  // }
1858  // // Edge 9
1859  // else if ((i0[i] == 1) && (i2[i] == 1))
1860  // {
1861  // if (elem->node_id(5) != std::min(elem->node_id(5), elem->node_id(6)))
1862  // eta_mapped = -eta;
1863  // }
1864  // // Edge 10
1865  // else if ((i1[i] == 1) && (i2[i] == 1))
1866  // {
1867  // if (elem->node_id(7) != std::min(elem->node_id(7), elem->node_id(6)))
1868  // xi_mapped = -xi;
1869  // }
1870  // // Edge 11
1871  // else if ((i0[i] == 0) && (i2[i] == 1))
1872  // {
1873  // if (elem->node_id(4) != std::min(elem->node_id(4), elem->node_id(7)))
1874  // eta_mapped = -eta;
1875  // }
1876  // }
1877 
1878 
1879  // // handle the face orientation
1880  // {
1881  // // Face 0
1882  // if ((i2[i] == 0) && (i0[i] >= 2) && (i1[i] >= 2))
1883  // {
1884  // const unsigned int min_node = std::min(elem->node_id(1),
1885  // std::min(elem->node_id(2),
1886  // std::min(elem->node_id(0),
1887  // elem->node_id(3))));
1888  // if (elem->node_id(0) == min_node)
1889  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(3)))
1890  // {
1891  // // Case 1
1892  // xi_mapped = xi;
1893  // eta_mapped = eta;
1894  // }
1895  // else
1896  // {
1897  // // Case 2
1898  // xi_mapped = eta;
1899  // eta_mapped = xi;
1900  // }
1901 
1902  // else if (elem->node_id(3) == min_node)
1903  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(2)))
1904  // {
1905  // // Case 3
1906  // xi_mapped = -eta;
1907  // eta_mapped = xi;
1908  // }
1909  // else
1910  // {
1911  // // Case 4
1912  // xi_mapped = xi;
1913  // eta_mapped = -eta;
1914  // }
1915 
1916  // else if (elem->node_id(2) == min_node)
1917  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(1)))
1918  // {
1919  // // Case 5
1920  // xi_mapped = -xi;
1921  // eta_mapped = -eta;
1922  // }
1923  // else
1924  // {
1925  // // Case 6
1926  // xi_mapped = -eta;
1927  // eta_mapped = -xi;
1928  // }
1929 
1930  // else if (elem->node_id(1) == min_node)
1931  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(0)))
1932  // {
1933  // // Case 7
1934  // xi_mapped = eta;
1935  // eta_mapped = -xi;
1936  // }
1937  // else
1938  // {
1939  // // Case 8
1940  // xi_mapped = -xi;
1941  // eta_mapped = eta;
1942  // }
1943  // }
1944 
1945 
1946  // // Face 1
1947  // else if ((i1[i] == 0) && (i0[i] >= 2) && (i2[i] >= 2))
1948  // {
1949  // const unsigned int min_node = std::min(elem->node_id(0),
1950  // std::min(elem->node_id(1),
1951  // std::min(elem->node_id(5),
1952  // elem->node_id(4))));
1953  // if (elem->node_id(0) == min_node)
1954  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(4)))
1955  // {
1956  // // Case 1
1957  // xi_mapped = xi;
1958  // zeta_mapped = zeta;
1959  // }
1960  // else
1961  // {
1962  // // Case 2
1963  // xi_mapped = zeta;
1964  // zeta_mapped = xi;
1965  // }
1966 
1967  // else if (elem->node_id(1) == min_node)
1968  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(0)))
1969  // {
1970  // // Case 3
1971  // xi_mapped = zeta;
1972  // zeta_mapped = -xi;
1973  // }
1974  // else
1975  // {
1976  // // Case 4
1977  // xi_mapped = -xi;
1978  // zeta_mapped = zeta;
1979  // }
1980 
1981  // else if (elem->node_id(5) == min_node)
1982  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(1)))
1983  // {
1984  // // Case 5
1985  // xi_mapped = -xi;
1986  // zeta_mapped = -zeta;
1987  // }
1988  // else
1989  // {
1990  // // Case 6
1991  // xi_mapped = -zeta;
1992  // zeta_mapped = -xi;
1993  // }
1994 
1995  // else if (elem->node_id(4) == min_node)
1996  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(5)))
1997  // {
1998  // // Case 7
1999  // xi_mapped = -xi;
2000  // zeta_mapped = zeta;
2001  // }
2002  // else
2003  // {
2004  // // Case 8
2005  // xi_mapped = xi;
2006  // zeta_mapped = -zeta;
2007  // }
2008  // }
2009 
2010 
2011  // // Face 2
2012  // else if ((i0[i] == 1) && (i1[i] >= 2) && (i2[i] >= 2))
2013  // {
2014  // const unsigned int min_node = std::min(elem->node_id(1),
2015  // std::min(elem->node_id(2),
2016  // std::min(elem->node_id(6),
2017  // elem->node_id(5))));
2018  // if (elem->node_id(1) == min_node)
2019  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(5)))
2020  // {
2021  // // Case 1
2022  // eta_mapped = eta;
2023  // zeta_mapped = zeta;
2024  // }
2025  // else
2026  // {
2027  // // Case 2
2028  // eta_mapped = zeta;
2029  // zeta_mapped = eta;
2030  // }
2031 
2032  // else if (elem->node_id(2) == min_node)
2033  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(1)))
2034  // {
2035  // // Case 3
2036  // eta_mapped = zeta;
2037  // zeta_mapped = -eta;
2038  // }
2039  // else
2040  // {
2041  // // Case 4
2042  // eta_mapped = -eta;
2043  // zeta_mapped = zeta;
2044  // }
2045 
2046  // else if (elem->node_id(6) == min_node)
2047  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(2)))
2048  // {
2049  // // Case 5
2050  // eta_mapped = -eta;
2051  // zeta_mapped = -zeta;
2052  // }
2053  // else
2054  // {
2055  // // Case 6
2056  // eta_mapped = -zeta;
2057  // zeta_mapped = -eta;
2058  // }
2059 
2060  // else if (elem->node_id(5) == min_node)
2061  // if (elem->node_id(1) == std::min(elem->node_id(1), elem->node_id(6)))
2062  // {
2063  // // Case 7
2064  // eta_mapped = -zeta;
2065  // zeta_mapped = eta;
2066  // }
2067  // else
2068  // {
2069  // // Case 8
2070  // eta_mapped = eta;
2071  // zeta_mapped = -zeta;
2072  // }
2073  // }
2074 
2075 
2076  // // Face 3
2077  // else if ((i1[i] == 1) && (i0[i] >= 2) && (i2[i] >= 2))
2078  // {
2079  // const unsigned int min_node = std::min(elem->node_id(2),
2080  // std::min(elem->node_id(3),
2081  // std::min(elem->node_id(7),
2082  // elem->node_id(6))));
2083  // if (elem->node_id(3) == min_node)
2084  // if (elem->node_id(2) == std::min(elem->node_id(2), elem->node_id(7)))
2085  // {
2086  // // Case 1
2087  // xi_mapped = xi;
2088  // zeta_mapped = zeta;
2089  // }
2090  // else
2091  // {
2092  // // Case 2
2093  // xi_mapped = zeta;
2094  // zeta_mapped = xi;
2095  // }
2096 
2097  // else if (elem->node_id(7) == min_node)
2098  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(6)))
2099  // {
2100  // // Case 3
2101  // xi_mapped = -zeta;
2102  // zeta_mapped = xi;
2103  // }
2104  // else
2105  // {
2106  // // Case 4
2107  // xi_mapped = xi;
2108  // zeta_mapped = -zeta;
2109  // }
2110 
2111  // else if (elem->node_id(6) == min_node)
2112  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(2)))
2113  // {
2114  // // Case 5
2115  // xi_mapped = -xi;
2116  // zeta_mapped = -zeta;
2117  // }
2118  // else
2119  // {
2120  // // Case 6
2121  // xi_mapped = -zeta;
2122  // zeta_mapped = -xi;
2123  // }
2124 
2125  // else if (elem->node_id(2) == min_node)
2126  // if (elem->node_id(6) == std::min(elem->node_id(3), elem->node_id(6)))
2127  // {
2128  // // Case 7
2129  // xi_mapped = zeta;
2130  // zeta_mapped = -xi;
2131  // }
2132  // else
2133  // {
2134  // // Case 8
2135  // xi_mapped = -xi;
2136  // zeta_mapped = zeta;
2137  // }
2138  // }
2139 
2140 
2141  // // Face 4
2142  // else if ((i0[i] == 0) && (i1[i] >= 2) && (i2[i] >= 2))
2143  // {
2144  // const unsigned int min_node = std::min(elem->node_id(3),
2145  // std::min(elem->node_id(0),
2146  // std::min(elem->node_id(4),
2147  // elem->node_id(7))));
2148  // if (elem->node_id(0) == min_node)
2149  // if (elem->node_id(3) == std::min(elem->node_id(3), elem->node_id(4)))
2150  // {
2151  // // Case 1
2152  // eta_mapped = eta;
2153  // zeta_mapped = zeta;
2154  // }
2155  // else
2156  // {
2157  // // Case 2
2158  // eta_mapped = zeta;
2159  // zeta_mapped = eta;
2160  // }
2161 
2162  // else if (elem->node_id(4) == min_node)
2163  // if (elem->node_id(0) == std::min(elem->node_id(0), elem->node_id(7)))
2164  // {
2165  // // Case 3
2166  // eta_mapped = -zeta;
2167  // zeta_mapped = eta;
2168  // }
2169  // else
2170  // {
2171  // // Case 4
2172  // eta_mapped = eta;
2173  // zeta_mapped = -zeta;
2174  // }
2175 
2176  // else if (elem->node_id(7) == min_node)
2177  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(3)))
2178  // {
2179  // // Case 5
2180  // eta_mapped = -eta;
2181  // zeta_mapped = -zeta;
2182  // }
2183  // else
2184  // {
2185  // // Case 6
2186  // eta_mapped = -zeta;
2187  // zeta_mapped = -eta;
2188  // }
2189 
2190  // else if (elem->node_id(3) == min_node)
2191  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(0)))
2192  // {
2193  // // Case 7
2194  // eta_mapped = zeta;
2195  // zeta_mapped = -eta;
2196  // }
2197  // else
2198  // {
2199  // // Case 8
2200  // eta_mapped = -eta;
2201  // zeta_mapped = zeta;
2202  // }
2203  // }
2204 
2205 
2206  // // Face 5
2207  // else if ((i2[i] == 1) && (i0[i] >= 2) && (i1[i] >= 2))
2208  // {
2209  // const unsigned int min_node = std::min(elem->node_id(4),
2210  // std::min(elem->node_id(5),
2211  // std::min(elem->node_id(6),
2212  // elem->node_id(7))));
2213  // if (elem->node_id(4) == min_node)
2214  // if (elem->node_id(5) == std::min(elem->node_id(5), elem->node_id(7)))
2215  // {
2216  // // Case 1
2217  // xi_mapped = xi;
2218  // eta_mapped = eta;
2219  // }
2220  // else
2221  // {
2222  // // Case 2
2223  // xi_mapped = eta;
2224  // eta_mapped = xi;
2225  // }
2226 
2227  // else if (elem->node_id(5) == min_node)
2228  // if (elem->node_id(6) == std::min(elem->node_id(6), elem->node_id(4)))
2229  // {
2230  // // Case 3
2231  // xi_mapped = eta;
2232  // eta_mapped = -xi;
2233  // }
2234  // else
2235  // {
2236  // // Case 4
2237  // xi_mapped = -xi;
2238  // eta_mapped = eta;
2239  // }
2240 
2241  // else if (elem->node_id(6) == min_node)
2242  // if (elem->node_id(7) == std::min(elem->node_id(7), elem->node_id(5)))
2243  // {
2244  // // Case 5
2245  // xi_mapped = -xi;
2246  // eta_mapped = -eta;
2247  // }
2248  // else
2249  // {
2250  // // Case 6
2251  // xi_mapped = -eta;
2252  // eta_mapped = -xi;
2253  // }
2254 
2255  // else if (elem->node_id(7) == min_node)
2256  // if (elem->node_id(4) == std::min(elem->node_id(4), elem->node_id(6)))
2257  // {
2258  // // Case 7
2259  // xi_mapped = -eta;
2260  // eta_mapped = xi;
2261  // }
2262  // else
2263  // {
2264  // // Case 8
2265  // xi_mapped = xi;
2266  // eta_mapped = eta;
2267  // }
2268  // }
2269 
2270 
2271  // }
2272 
2273 
2274 
2275  // libmesh_assert_less (j, 3);
2276 
2277  // switch (j)
2278  // {
2279  // // d()/dxi
2280  // case 0:
2281  // return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0[i], 0, xi_mapped)*
2282  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
2283  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
2284 
2285  // // d()/deta
2286  // case 1:
2287  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
2288  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1[i], 0, eta_mapped)*
2289  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i2[i], zeta_mapped));
2290 
2291  // // d()/dzeta
2292  // case 2:
2293  // return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0[i], xi_mapped)*
2294  // FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1[i], eta_mapped)*
2295  // FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i2[i], 0, zeta_mapped));
2296 
2297  // default:
2298  // libmesh_error_msg("Invalid derivative index j = " << j);
2299  // }
2300 
2301 
2302  default:
2303  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
2304  }
2305  }
2306 
2307 
2308  default:
2309  libmesh_error_msg("Invalid totalorder = " << totalorder);
2310  }
2311 
2312 #else // LIBMESH_DIM != 3
2313  libmesh_ignore(elem, order, i, j, p, add_p_level);
2314  libmesh_not_implemented();
2315 #endif
2316 }
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:2945
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:744
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() [209/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 977 of file fe_lagrange_vec.C.

980 {
981  return FE<3,LAGRANGE_VEC>::shape_deriv(type, order, i, j, p);
982 }

◆ shape_deriv() [210/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 1003 of file fe_lagrange_vec.C.

1007 {
1008  Real value = FE<0,LAGRANGE>::shape_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
1009  return libMesh::RealGradient( value );
1010 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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 1023 of file fe_szabab_shape_2D.C.

1028 {
1029  libmesh_error_msg("Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
1030  return 0.;
1031 }

◆ shape_deriv() [212/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 1031 of file fe_lagrange_vec.C.

1035 {
1036  return FE<0,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1037 }

◆ shape_deriv() [213/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 1035 of file fe_szabab_shape_2D.C.

1041 {
1042  return FE<2,SZABAB>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
1043 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [214/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 1059 of file fe_lagrange_vec.C.

1063 {
1064  Real value = FE<1,LAGRANGE>::shape_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
1065  return libMesh::RealGradient( value );
1066 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [215/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 1086 of file fe_lagrange_vec.C.

1090 {
1091  return FE<1,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1092 }

◆ shape_deriv() [216/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 1128 of file fe_lagrange_vec.C.

1132 {
1133  Real value = FE<2,LAGRANGE>::shape_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i/2, j, p );
1134 
1135  switch( i%2 )
1136  {
1137  case 0:
1138  return libMesh::RealGradient( value );
1139 
1140  case 1:
1141  return libMesh::RealGradient( Real(0), value );
1142 
1143  default:
1144  libmesh_error_msg("i%2 must be either 0 or 1!");
1145  }
1146 
1147  //dummy
1148  return libMesh::RealGradient();
1149 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [217/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 1183 of file fe_lagrange_vec.C.

1187 {
1188  return FE<2,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1189 }

◆ shape_deriv() [218/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 1228 of file fe_lagrange_vec.C.

1232 {
1233  Real value = FE<3,LAGRANGE>::shape_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i/3, j, p );
1234 
1235  switch( i%3 )
1236  {
1237  case 0:
1238  return libMesh::RealGradient( value );
1239 
1240  case 1:
1241  return libMesh::RealGradient( Real(0), value );
1242 
1243  case 2:
1244  return libMesh::RealGradient( Real(0), Real(0), value );
1245 
1246  default:
1247  libmesh_error_msg("i%3 must be 0, 1, or 2!");
1248  }
1249 
1250  //dummy
1251  return libMesh::RealGradient();
1252 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_deriv() [219/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 1290 of file fe_lagrange_vec.C.

1294 {
1295  return FE<3,LAGRANGE_VEC>::shape_deriv(elem, order, i, j, p, add_p_level);
1296 }

◆ shape_deriv() [220/233]

Real libMesh::FE< 3, HIERARCHIC >::shape_deriv ( const ElemType  ,
const Order  ,
const unsigned  int,
const unsigned  int,
const Point  
)
inherited

Definition at line 1512 of file fe_hierarchic_shape_3D.C.

1517 {
1518  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1519  return 0.;
1520 }

◆ shape_deriv() [221/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 1525 of file fe_hierarchic_shape_3D.C.

1530 {
1531  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1532  return 0.;
1533 }

◆ shape_deriv() [222/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 1538 of file fe_hierarchic_shape_3D.C.

1543 {
1544  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1545  return 0.;
1546 }

◆ shape_deriv() [223/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 1551 of file fe_hierarchic_shape_3D.C.

1557 {
1558  return fe_hierarchic_3D_shape_deriv<HIERARCHIC>(elem, order, i, j, p, add_p_level);
1559 }

◆ shape_deriv() [224/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 1563 of file fe_hierarchic_shape_3D.C.

1569 {
1570  return fe_hierarchic_3D_shape_deriv<HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1571 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201

◆ shape_deriv() [225/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 1576 of file fe_hierarchic_shape_3D.C.

1582 {
1583  return fe_hierarchic_3D_shape_deriv<L2_HIERARCHIC>(elem, order, i, j, p, add_p_level);
1584 }

◆ shape_deriv() [226/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 1588 of file fe_hierarchic_shape_3D.C.

1594 {
1595  return fe_hierarchic_3D_shape_deriv<L2_HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1596 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201

◆ shape_deriv() [227/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 1601 of file fe_hierarchic_shape_3D.C.

1607 {
1608 #if LIBMESH_DIM == 3
1609  libmesh_assert(elem);
1610  const ElemType type = elem->type();
1611 
1612  const Order totalorder =
1613  static_cast<Order>(order+add_p_level*elem->p_level());
1614 
1615  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
1616  return 0; // constants have zero derivative
1617 
1618  switch (type)
1619  {
1620  case HEX27:
1621  {
1622  // I need to debug the p>2 case here...
1623  if (totalorder > 2)
1624  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,SIDE_HIERARCHIC>::shape);
1625 
1626  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+1u);
1627  libmesh_assert_less(i, 6*dofs_per_side);
1628 
1629  const unsigned int sidenum = cube_side(p);
1630  if (sidenum > 5)
1631  return std::numeric_limits<Real>::quiet_NaN();
1632 
1633  const unsigned int dof_offset = sidenum * dofs_per_side;
1634 
1635  if (i < dof_offset) // i is on a previous side
1636  return 0;
1637 
1638  if (i >= dof_offset + dofs_per_side) // i is on a later side
1639  return 0;
1640 
1641  unsigned int side_i = i - dof_offset;
1642 
1643  std::unique_ptr<const Elem> side = elem->build_side_ptr(sidenum);
1644 
1645  Point sidep = cube_side_point(sidenum, p);
1646 
1647  cube_remap(side_i, *side, totalorder, sidep);
1648 
1649  // What direction on the side corresponds to the derivative
1650  // direction we want?
1651  unsigned int sidej = 100;
1652 
1653  // Do we need a -1 here to flip that direction?
1654  Real f = 1.;
1655 
1656  switch (j)
1657  {
1658  case 0: // d()/dxi
1659  {
1660  switch (sidenum)
1661  {
1662  case 0:
1663  sidej = 1;
1664  break;
1665  case 1:
1666  sidej = 0;
1667  break;
1668  case 2:
1669  return 0;
1670  case 3:
1671  sidej = 0;
1672  f = -1;
1673  break;
1674  case 4:
1675  return 0;
1676  case 5:
1677  sidej = 0;
1678  break;
1679  default:
1680  libmesh_error();
1681  }
1682  break;
1683  }
1684  case 1: // d()/deta
1685  {
1686  switch (sidenum)
1687  {
1688  case 0:
1689  sidej = 0;
1690  break;
1691  case 1:
1692  return 0;
1693  case 2:
1694  sidej = 0;
1695  break;
1696  case 3:
1697  return 0;
1698  case 4:
1699  sidej = 0;
1700  f = -1;
1701  break;
1702  case 5:
1703  sidej = 1;
1704  break;
1705  default:
1706  libmesh_error();
1707  }
1708  break;
1709  }
1710  case 2: // d()/dzeta
1711  {
1712  switch (sidenum)
1713  {
1714  case 0:
1715  return 0;
1716  case 1:
1717  case 2:
1718  case 3:
1719  case 4:
1720  sidej = 1;
1721  break;
1722  case 5:
1723  return 0;
1724  default:
1725  libmesh_error();
1726  }
1727  break;
1728  }
1729 
1730  default:
1731  libmesh_error_msg("Invalid derivative index j = " << j);
1732  }
1733 
1734  return f * FE<2,HIERARCHIC>::shape_deriv(side.get(), order,
1735  side_i, sidej, sidep,
1736  add_p_level);
1737  }
1738 
1739  case TET14:
1740  case PRISM20:
1741  case PRISM21:
1742  {
1743  return fe_fdm_deriv(elem, order, i, j, p, add_p_level, FE<3,SIDE_HIERARCHIC>::shape);
1744  }
1745 
1746  default:
1747  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
1748  }
1749 
1750 #else // LIBMESH_DIM != 3
1751  libmesh_ignore(elem, order, i, j, p, add_p_level);
1752  libmesh_not_implemented();
1753 #endif
1754 }
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:2945
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy=false)=0
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:744
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() [228/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 1758 of file fe_hierarchic_shape_3D.C.

1764 {
1765  return FE<3,SIDE_HIERARCHIC>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
1766 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_deriv() [229/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  static_cast<Order>(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:2945
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ 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:201
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 2320 of file fe_bernstein_shape_3D.C.

2325 {
2326  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge and face orientation is needed.");
2327  return 0.;
2328 }

◆ 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 2331 of file fe_bernstein_shape_3D.C.

2337 {
2338  return FE<3,BERNSTEIN>::shape_deriv(elem, fet.order, i, j, p, add_p_level);
2339 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
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:111

◆ 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:111

◆ 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:111

◆ 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 220 of file fe_lagrange_shape_3D.C.

227 {
229  (elem,o,i,j,p,v,add_p_level);
230 }
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< 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() [9/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() [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, 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() [14/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() [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< 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() [18/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() [19/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() [20/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() [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:182
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:1189

◆ 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, 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() [28/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() [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:182
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:1189

◆ 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:182
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:1189

◆ 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, 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() [36/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() [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, 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() [43/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() [44/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() [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< 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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [47/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [48/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape_second_deriv() [49/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() [50/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() [51/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 186 of file fe_hierarchic_vec.C.

189 {
190  Real value = FE<0,HIERARCHIC>::shape_second_deriv( type, order, i, j, p );
191  return libMesh::RealGradient( value );
192 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [52/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() [53/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() [54/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)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
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() [55/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() [56/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() [57/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 205 of file fe_monomial_vec.C.

210 {
211  Real value = FE<0, MONOMIAL>::shape_second_deriv(type, order, i, j, p);
213 }
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:54

◆ shape_second_deriv() [58/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(static_cast<Order>(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() [59/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 209 of file fe_hierarchic_vec.C.

212 {
213  return FE<0,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
214 }

◆ shape_second_deriv() [60/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() [61/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
222 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [62/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() [63/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(static_cast<Order>(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() [64/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
234 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [65/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() [66/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 230 of file fe_lagrange_shape_2D.C.

235 {
236  return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(type, order, i, j, p);
237 }

◆ shape_second_deriv() [67/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  static_cast<Order>(fet.order + add_p_level * add_p_level * elem->p_level()),
242  i,
243  j,
244  p);
245 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [68/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 232 of file fe_hierarchic_vec.C.

235 {
236  Real value = FE<1,HIERARCHIC>::shape_second_deriv( type, order, i, j, p );
237  return libMesh::RealGradient( value );
238 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [69/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(static_cast<Order>(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() [70/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() [71/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 241 of file fe_monomial_vec.C.

246 {
247  Real value = FE<1, MONOMIAL>::shape_second_deriv(type, order, i, j, p);
249 }
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:54

◆ shape_second_deriv() [72/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 242 of file fe_lagrange_shape_2D.C.

247 {
248  return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(type, order, i, j, p);
249 }

◆ shape_second_deriv() [73/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() [74/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(static_cast<Order>(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() [75/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() [76/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 254 of file fe_lagrange_shape_2D.C.

260 {
261  libmesh_assert(elem);
262 
263  // call the orientation-independent shape functions
264  return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
265 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [77/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 256 of file fe_hierarchic_vec.C.

259 {
260  return FE<1,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
261 }

◆ shape_second_deriv() [78/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() [79/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 270 of file fe_lagrange_shape_2D.C.

276 {
277  libmesh_assert(elem);
278 
279  // call the orientation-independent shape functions
280  return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
281 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [80/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() [81/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() [82/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 285 of file fe_lagrange_shape_2D.C.

291 {
292  libmesh_assert(elem);
293  return fe_lagrange_2D_shape_second_deriv<LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
294 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [83/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() [84/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 299 of file fe_lagrange_shape_2D.C.

305 {
306  libmesh_assert(elem);
307  return fe_lagrange_2D_shape_second_deriv<L2_LAGRANGE>(elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
308 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [85/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 }
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ shape_second_deriv() [86/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 307 of file fe_monomial_vec.C.

312 {
313  Real value = FE<2, MONOMIAL>::shape_second_deriv(type, order, i / 2, j, p);
314 
315  switch (i % 2)
316  {
317  case 0:
319 
320  case 1:
321  return libMesh::RealVectorValue(Real(0), value);
322 
323  default:
324  libmesh_error_msg("i%2 must be either 0 or 1!");
325  }
326 
327  // dummy
328  return libMesh::RealVectorValue();
329 }
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:54

◆ shape_second_deriv() [87/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 308 of file fe_hierarchic_vec.C.

311 {
312  Real value = FE<2,HIERARCHIC>::shape_second_deriv( type, order, i/2, j, p );
313 
314  switch( i%2 )
315  {
316  case 0:
317  return libMesh::RealGradient( value );
318 
319  case 1:
320  return libMesh::RealGradient( Real(0), value );
321 
322  default:
323  libmesh_error_msg("i%2 must be either 0 or 1!");
324  }
325 
326  //dummy
327  return libMesh::RealGradient();
328 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [88/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() [89/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 }
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715

◆ shape_second_deriv() [90/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() [91/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() [92/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() [93/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:2945
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:796
virtual ElemType type() const =0

◆ shape_second_deriv() [94/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() [95/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
350 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [96/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 346 of file fe_hierarchic_vec.C.

349 {
350  return FE<2,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
351 }

◆ shape_second_deriv() [97/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() [98/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() [99/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  static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
365 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [100/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  unsigned int ny = i - (o*(o+1)/2);
426  unsigned int nx = o - ny;
427  Real val = nx * (nx - 1);
428  for (unsigned int index=2; index < nx; index++)
429  val *= xi;
430  for (unsigned 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  unsigned int ny = i - (o*(o+1)/2);
491  unsigned int nx = o - ny;
492  Real val = nx * ny;
493  for (unsigned int index=1; index < nx; index++)
494  val *= xi;
495  for (unsigned 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  unsigned int ny = i - (o*(o+1)/2);
553  unsigned int nx = o - ny;
554  Real val = ny * (ny - 1);
555  for (unsigned int index=0; index != nx; index++)
556  val *= xi;
557  for (unsigned 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() [101/233]

RealGradient libMesh::FE< 2, NEDELEC_ONE >::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 361 of file fe_nedelec_one_shape_2D.C.

367 {
368 #if LIBMESH_DIM > 1
369  libmesh_assert(elem);
370 
371  // j = 0 ==> d^2 phi / dxi^2
372  // j = 1 ==> d^2 phi / dxi deta
373  // j = 2 ==> d^2 phi / deta^2
374  libmesh_assert_less (j, 3);
375 
376  const Order total_order = static_cast<Order>(order + add_p_level * elem->p_level());
377 
378  switch (total_order)
379  {
380  // linear Nedelec (first kind) shape function second derivatives
381  case FIRST:
382  {
383  switch (elem->type())
384  {
385  case QUAD8:
386  case QUAD9:
387  {
388  libmesh_assert_less (i, 4);
389  // All second derivatives for linear quads are zero.
390  return RealGradient();
391  }
392 
393  case TRI6:
394  case TRI7:
395  {
396  libmesh_assert_less (i, 3);
397  // All second derivatives for linear triangles are zero.
398  return RealGradient();
399  }
400 
401  default:
402  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
403 
404  } // end switch (type)
405  } // end case FIRST
406 
407  // unsupported order
408  default:
409  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << total_order);
410 
411  } // end switch (order)
412 
413 #else // LIBMESH_DIM > 1
414  libmesh_assert(true || i || j);
415  libmesh_ignore(elem, order, add_p_level);
416  libmesh_not_implemented();
417 #endif
418 }
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() [102/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 362 of file fe_hermite_shape_2D.C.

368 {
369  libmesh_assert(elem);
370  libmesh_assert (j == 0 || j == 1 || j == 2);
371 
372  std::vector<std::vector<Real>> dxdxi(2, std::vector<Real>(2, 0));
373 
374 #ifdef DEBUG
375  std::vector<Real> dxdeta(2), dydxi(2);
376 #endif
377 
378  hermite_compute_coefs(elem,dxdxi
379 #ifdef DEBUG
380  ,dxdeta,dydxi
381 #endif
382  );
383 
384  const ElemType type = elem->type();
385 
386  const Order totalorder =
387  static_cast<Order>(order + add_p_level * elem->p_level());
388 
389  switch (type)
390  {
391  case QUAD4:
392  case QUADSHELL4:
393  libmesh_assert_less (totalorder, 4);
394  libmesh_fallthrough();
395  case QUAD8:
396  case QUADSHELL8:
397  case QUAD9:
398  {
399  libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u));
400 
401  std::vector<unsigned int> bases1D;
402 
403  Real coef = hermite_bases_2D(bases1D, dxdxi, totalorder, i);
404 
405  switch (j)
406  {
407  case 0:
408  return coef *
410  FEHermite<1>::hermite_raw_shape(bases1D[1],p(1));
411  case 1:
412  return coef *
413  FEHermite<1>::hermite_raw_shape_deriv(bases1D[0],p(0)) *
414  FEHermite<1>::hermite_raw_shape_deriv(bases1D[1],p(1));
415  case 2:
416  return coef *
417  FEHermite<1>::hermite_raw_shape(bases1D[0],p(0)) *
419  default:
420  libmesh_error_msg("Invalid derivative index j = " << j);
421  }
422  }
423  default:
424  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
425  }
426 }
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:2945
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:796
virtual ElemType type() const =0

◆ shape_second_deriv() [103/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() [104/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  static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
380 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [105/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() [106/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() [107/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  static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
394 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [108/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  static_cast<Order>(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:2945
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_second_deriv() [109/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() [110/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 394 of file fe_monomial_vec.C.

399 {
400  Real value = FE<3, MONOMIAL>::shape_second_deriv(type, order, i / 3, j, p);
401 
402  switch (i % 3)
403  {
404  case 0:
406 
407  case 1:
408  return libMesh::RealVectorValue(Real(0), value);
409 
410  case 2:
411  return libMesh::RealVectorValue(Real(0), Real(0), value);
412 
413  default:
414  libmesh_error_msg("i%3 must be 0, 1, or 2!");
415  }
416 
417  // dummy
418  return libMesh::RealVectorValue();
419 }
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:54

◆ shape_second_deriv() [111/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)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
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:134

◆ shape_second_deriv() [112/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [113/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() [114/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 406 of file fe_hierarchic_vec.C.

409 {
410  Real value = FE<3,HIERARCHIC>::shape_second_deriv( type, order, i/3, j, p );
411 
412  switch( i%3 )
413  {
414  case 0:
415  return libMesh::RealGradient( value );
416 
417  case 1:
418  return libMesh::RealGradient( Real(0), value );
419 
420  case 2:
421  return libMesh::RealGradient( Real(0), Real(0), value );
422 
423  default:
424  libmesh_error_msg("i%3 must be 0, 1, or 2!");
425  }
426 
427  //dummy
428  return libMesh::RealGradient();
429 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [115/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() [116/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() [117/233]

RealGradient libMesh::FE< 2, 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 419 of file fe_raviart_shape_2D.C.

425 {
426 #if LIBMESH_DIM > 1
427  libmesh_assert(elem);
428 
429  // j = 0 ==> d^2 phi / dxi^2
430  // j = 1 ==> d^2 phi / dxi deta
431  // j = 2 ==> d^2 phi / deta^2
432  libmesh_assert_less (j, 3);
433 
434  const Order total_order = static_cast<Order>(order + add_p_level * elem->p_level());
435 
436  switch (total_order)
437  {
438  // linear Raviart-Thomas shape function second derivatives
439  case FIRST:
440  {
441  switch (elem->type())
442  {
443  case QUAD8:
444  case QUAD9:
445  {
446  libmesh_assert_less (i, 4);
447  // All second derivatives for linear quads are zero.
448  return RealGradient();
449  }
450 
451  case TRI6:
452  case TRI7:
453  {
454  libmesh_assert_less (i, 3);
455  // All second derivatives for linear triangles are zero.
456  return RealGradient();
457  }
458 
459  default:
460  libmesh_error_msg("ERROR: Unsupported 2D element type!: " << Utility::enum_to_string(elem->type()));
461 
462  } // end switch (type)
463  } // end case FIRST
464 
465  // unsupported order
466  default:
467  libmesh_error_msg("ERROR: Unsupported 2D FE order!: " << total_order);
468 
469  } // end switch (order)
470 
471 #else // LIBMESH_DIM > 1
472  libmesh_assert(true || i || j);
473  libmesh_ignore(elem, order, add_p_level);
474  libmesh_not_implemented();
475 #endif
476 }
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() [118/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 423 of file fe_nedelec_one_shape_2D.C.

428 {
429  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
430  return RealGradient();
431 }
RealVectorValue RealGradient

◆ shape_second_deriv() [119/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 430 of file fe_hermite_shape_2D.C.

435 {
436  libmesh_error_msg("Hermite elements require the real element \nto construct gradient-based degrees of freedom.");
437  return 0.;
438 }

◆ shape_second_deriv() [120/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 435 of file fe_nedelec_one_shape_2D.C.

441 {
442  return FE<2,NEDELEC_ONE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
443 }

◆ shape_second_deriv() [121/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() [122/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 442 of file fe_hermite_shape_2D.C.

448 {
449  return FE<2,HERMITE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
450 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [123/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 447 of file fe_hierarchic_vec.C.

450 {
451  return FE<3,HIERARCHIC_VEC>::shape_second_deriv(type, order, i, j, p);
452 }

◆ shape_second_deriv() [124/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [125/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 454 of file fe_monomial_vec.C.

460 {
461  Real value = FE<0, MONOMIAL>::shape_second_deriv(
462  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
464 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape_second_deriv() [126/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 476 of file fe_hierarchic_vec.C.

480 {
481  Real value = FE<0,HIERARCHIC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
482  return libMesh::RealGradient( value );
483 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [127/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 479 of file fe_raviart_shape_2D.C.

485 {
486  return FE<2,RAVIART_THOMAS>::shape_second_deriv(elem, order, i, j, p, add_p_level);
487 }

◆ shape_second_deriv() [128/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 493 of file fe_raviart_shape_2D.C.

498 {
499  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
500  return RealGradient();
501 }
RealVectorValue RealGradient

◆ shape_second_deriv() [129/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 498 of file fe_monomial_vec.C.

504 {
505  Real value = FE<1, MONOMIAL>::shape_second_deriv(
506  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
508 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape_second_deriv() [130/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 504 of file fe_hierarchic_vec.C.

508 {
509  return FE<0,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
510 }

◆ shape_second_deriv() [131/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 504 of file fe_raviart_shape_2D.C.

509 {
510  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause edge orientation is needed.");
511  return RealGradient();
512 }
RealVectorValue RealGradient

◆ shape_second_deriv() [132/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 516 of file fe_raviart_shape_2D.C.

522 {
523  return FE<2,RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
524 }

◆ shape_second_deriv() [133/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 527 of file fe_raviart_shape_2D.C.

533 {
534  return FE<2,L2_RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
535 }

◆ shape_second_deriv() [134/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 532 of file fe_hierarchic_vec.C.

536 {
537  Real value = FE<1,HIERARCHIC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
538  return libMesh::RealGradient( value );
539 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [135/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 542 of file fe_bernstein_shape_2D.C.

548 {
549  libmesh_assert(elem);
550 
551  const ElemType type = elem->type();
552 
553  const Order totalorder =
554  static_cast<Order>(order + add_p_level * elem->p_level());
555 
556  switch (type)
557  {
558  // Hierarchic shape functions on the quadrilateral.
559  case QUAD4:
560  case QUAD9:
561  {
562  // Compute quad shape functions as a tensor-product
563  auto [i0, i1] = quad_i0_i1(i, totalorder, *elem);
564 
565  switch (j)
566  {
567  // d^2() / dxi^2
568  case 0:
569  return (FE<1,BERNSTEIN>::shape_second_deriv(EDGE3, totalorder, i0, 0, p(0))*
570  FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i1, p(1)));
571 
572  // d^2() / dxi deta
573  case 1:
574  return (FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i0, 0, p(0))*
575  FE<1,BERNSTEIN>::shape_deriv(EDGE3, totalorder, i1, 0, p(1)));
576 
577  // d^2() / deta^2
578  case 2:
579  return (FE<1,BERNSTEIN>::shape (EDGE3, totalorder, i0, p(0))*
580  FE<1,BERNSTEIN>::shape_second_deriv(EDGE3, totalorder, i1, 0, p(1)));
581 
582  default:
583  libmesh_error_msg("Invalid shape function derivative j = " << j);
584  }
585  }
586 
587  // Going to be lazy again about the hard cases.
588  case TRI3:
589  case TRISHELL3:
590  libmesh_assert_less (totalorder, 2);
591  libmesh_fallthrough();
592  case QUAD8:
593  case QUADSHELL8:
594  case TRI6:
595  case TRI7:
596  {
597  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
599  }
600 
601  default:
602  libmesh_error_msg("ERROR: Unsupported element type = " << Utility::enum_to_string(type));
603  }
604 }
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:2945
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:851
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_second_deriv() [136/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 560 of file fe_hierarchic_vec.C.

564 {
565  return FE<1,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
566 }

◆ shape_second_deriv() [137/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 569 of file fe_nedelec_one.C.

571 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [138/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 570 of file fe_monomial_vec.C.

576 {
577  Real value = FE<2, MONOMIAL>::shape_second_deriv(
578  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i / 2, j, p);
579 
580  switch (i % 2)
581  {
582  case 0:
584 
585  case 1:
586  return libMesh::RealVectorValue(Real(0), value);
587 
588  default:
589  libmesh_error_msg("i%2 must be either 0 or 1!");
590  }
591 
592  // dummy
593  return libMesh::RealVectorValue();
594 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ shape_second_deriv() [139/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 571 of file fe_lagrange_shape_3D.C.

576 {
577  return fe_lagrange_3D_shape_second_deriv<LAGRANGE>(type, order, i, j, p);
578 }

◆ shape_second_deriv() [140/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 573 of file fe_nedelec_one.C.

575 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [141/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  static_cast<Order>(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:2945
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:796
virtual ElemType type() const =0

◆ shape_second_deriv() [142/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
588 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [143/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 583 of file fe_lagrange_shape_3D.C.

588 {
589  return fe_lagrange_3D_shape_second_deriv<L2_LAGRANGE>(type, order, i, j, p);
590 }

◆ shape_second_deriv() [144/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
602 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [145/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  static_cast<Order>(order + add_p_level*elem->p_level()), i, j, p);
605 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [146/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 595 of file fe_lagrange_shape_3D.C.

601 {
602  libmesh_assert(elem);
603 
604  // call the orientation-independent shape function derivatives
605  return fe_lagrange_3D_shape_second_deriv<LAGRANGE>
606  (elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
607 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [147/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 596 of file fe_nedelec_one.C.

598 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [148/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 600 of file fe_nedelec_one.C.

602 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [149/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 601 of file fe_raviart_shape_3D.C.

607 {
608 #if LIBMESH_DIM == 3
609 
610  libmesh_assert(elem);
611 
612  // j = 0 ==> d^2 phi / dxi^2
613  // j = 1 ==> d^2 phi / dxi deta
614  // j = 2 ==> d^2 phi / deta^2
615  // j = 3 ==> d^2 phi / dxi dzeta
616  // j = 4 ==> d^2 phi / deta dzeta
617  // j = 5 ==> d^2 phi / dzeta^2
618  libmesh_assert_less (j, 6);
619 
620  const Order totalorder = static_cast<Order>(order + add_p_level * elem->p_level());
621 
622  switch (totalorder)
623  {
624  // linear Raviart-Thomas shape function second derivatives
625  case FIRST:
626  {
627  switch (elem->type())
628  {
629  case HEX27:
630  {
631  libmesh_assert_less (i, 6);
632  // All second derivatives for linear hexes are zero.
633  return RealGradient();
634  }
635 
636  case TET14:
637  {
638  libmesh_assert_less (i, 4);
639  // All second derivatives for linear tets are zero.
640  return RealGradient();
641  }
642 
643  default:
644  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
645 
646  } //switch(type)
647 
648  } // case FIRST:
649  // unsupported order
650  default:
651  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
652  }
653 
654 #else // LIBMESH_DIM != 3
655  libmesh_assert(true || p(0));
656  libmesh_ignore(elem, order, i, j, add_p_level);
657  libmesh_not_implemented();
658 #endif
659 }
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() [150/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  static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
619 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [151/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 608 of file fe_bernstein_shape_2D.C.

613 {
614  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge orientation is needed.");
615  return 0.;
616 }

◆ shape_second_deriv() [152/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 612 of file fe_raviart.C.

614 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [153/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 612 of file fe_lagrange_shape_3D.C.

618 {
619  libmesh_assert(elem);
620 
621  // call the orientation-independent shape function derivatives
622  return fe_lagrange_3D_shape_second_deriv<L2_LAGRANGE>
623  (elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
624 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [154/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 616 of file fe_raviart.C.

618 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [155/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 616 of file fe_hierarchic_vec.C.

620 {
621  const Real value = FE<2,HIERARCHIC>::shape_second_deriv(elem, order, i/2, j, p, add_p_level);
622 
623  switch( i%2 )
624  {
625  case 0:
626  return libMesh::RealGradient( value );
627 
628  case 1:
629  return libMesh::RealGradient( Real(0), value );
630 
631  default:
632  libmesh_error_msg("i%2 must be either 0 or 1!");
633  }
634 
635  //dummy
636  return libMesh::RealGradient();
637 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [156/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 620 of file fe_bernstein_shape_2D.C.

626 {
627  libmesh_assert(elem);
628  return FE<2,BERNSTEIN>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
629 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127
libmesh_assert(ctx)

◆ shape_second_deriv() [157/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 620 of file fe_raviart.C.

622 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [158/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 624 of file fe_raviart.C.

626 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [159/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 628 of file fe_lagrange_shape_3D.C.

634 {
635  libmesh_assert(elem);
636  return fe_lagrange_3D_shape_second_deriv<LAGRANGE>
637  (elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
638 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [160/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() [161/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 643 of file fe_lagrange_shape_3D.C.

649 {
650  libmesh_assert(elem);
651  return fe_lagrange_3D_shape_second_deriv<L2_LAGRANGE>
652  (elem->type(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
653 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
unsigned int p_level() const
Definition: elem.h:2945
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
libmesh_assert(ctx)
virtual ElemType type() const =0

◆ shape_second_deriv() [162/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() [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 657 of file fe_hierarchic_vec.C.

661 {
662  return FE<2,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
663 }

◆ shape_second_deriv() [164/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 661 of file fe_raviart.C.

663 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [165/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 662 of file fe_raviart_shape_3D.C.

668 {
669  return FE<3,RAVIART_THOMAS>::shape_second_deriv(elem, order, i, j, p, add_p_level);
670 }

◆ 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 663 of file fe_monomial_vec.C.

669 {
670  Real value = FE<3, MONOMIAL>::shape_second_deriv(
671  elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i / 3, j, p);
672 
673  switch (i % 3)
674  {
675  case 0:
677 
678  case 1:
679  return libMesh::RealVectorValue(Real(0), value);
680 
681  case 2:
682  return libMesh::RealVectorValue(Real(0), Real(0), value);
683 
684  default:
685  libmesh_error_msg("i%3 must be 0, 1, or 2!");
686  }
687 
688  // dummy
689  return libMesh::RealVectorValue();
690 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
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:54

◆ 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 665 of file fe_raviart.C.

667 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [168/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 669 of file fe_raviart.C.

671 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [169/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 673 of file fe_raviart.C.

675 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shape_second_deriv() [170/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 674 of file fe_raviart_shape_3D.C.

679 {
680  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
681  return RealGradient();
682 }
RealVectorValue RealGradient

◆ shape_second_deriv() [171/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() [172/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 685 of file fe_raviart_shape_3D.C.

690 {
691  libmesh_error_msg("Raviart-Thomas elements require the element type \nbecause face orientation is needed.");
692  return RealGradient();
693 }
RealVectorValue RealGradient

◆ shape_second_deriv() [173/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [174/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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
795  unsigned int block=o, nz = 0;
796  for (; block < i2; block += (o-nz+1)) { nz++; }
797  const unsigned int nx = block - i2;
798  const unsigned int ny = o - nx - nz;
799  Real val = nx * (nx - 1);
800  for (unsigned int index=2; index < nx; index++)
801  val *= xi;
802  for (unsigned int index=0; index != ny; index++)
803  val *= eta;
804  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
901  unsigned int block=o, nz = 0;
902  for (; block < i2; block += (o-nz+1)) { nz++; }
903  const unsigned int nx = block - i2;
904  const unsigned int ny = o - nx - nz;
905  Real val = nx * ny;
906  for (unsigned int index=1; index < nx; index++)
907  val *= xi;
908  for (unsigned int index=1; index < ny; index++)
909  val *= eta;
910  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1006  unsigned int block=o, nz = 0;
1007  for (; block < i2; block += (o-nz+1)) { nz++; }
1008  const unsigned int nx = block - i2;
1009  const unsigned int ny = o - nx - nz;
1010  Real val = ny * (ny - 1);
1011  for (unsigned int index=0; index != nx; index++)
1012  val *= xi;
1013  for (unsigned int index=2; index < ny; index++)
1014  val *= eta;
1015  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1112  unsigned int block=o, nz = 0;
1113  for (; block < i2; block += (o-nz+1)) { nz++; }
1114  const unsigned int nx = block - i2;
1115  const unsigned int ny = o - nx - nz;
1116  Real val = nx * nz;
1117  for (unsigned int index=1; index < nx; index++)
1118  val *= xi;
1119  for (unsigned int index=0; index != ny; index++)
1120  val *= eta;
1121  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1217  unsigned int block=o, nz = 0;
1218  for (; block < i2; block += (o-nz+1)) { nz++; }
1219  const unsigned int nx = block - i2;
1220  const unsigned int ny = o - nx - nz;
1221  Real val = ny * nz;
1222  for (unsigned int index=0; index != nx; index++)
1223  val *= xi;
1224  for (unsigned int index=1; index < ny; index++)
1225  val *= eta;
1226  for (unsigned 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  unsigned int i2 = i - (o*(o+1)*(o+2)/6);
1311  unsigned int block=o, nz = 0;
1312  for (; block < i2; block += (o-nz+1)) { nz++; }
1313  const unsigned int nx = block - i2;
1314  const unsigned int ny = o - nx - nz;
1315  Real val = nz * (nz - 1);
1316  for (unsigned int index=0; index != nx; index++)
1317  val *= xi;
1318  for (unsigned int index=0; index != ny; index++)
1319  val *= eta;
1320  for (unsigned 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() [175/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() [176/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 698 of file fe_raviart_shape_3D.C.

704 {
705  return FE<3,RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
706 }

◆ shape_second_deriv() [177/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() [178/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 709 of file fe_raviart_shape_3D.C.

715 {
716  return FE<3,L2_RAVIART_THOMAS>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
717 }

◆ shape_second_deriv() [179/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 721 of file fe_hierarchic_vec.C.

725 {
726  const Real value = FE<3,HIERARCHIC>::shape_second_deriv(elem, order, i/3, j, p, add_p_level);
727 
728  switch( i%3 )
729  {
730  case 0:
731  return libMesh::RealGradient( value );
732 
733  case 1:
734  return libMesh::RealGradient( Real(0), value );
735 
736  case 2:
737  return libMesh::RealGradient( Real(0), Real(0), value );
738 
739  default:
740  libmesh_error_msg("i%3 must be 0, 1, or 2!");
741  }
742 
743  //dummy
744  return libMesh::RealGradient();
745 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [180/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() [181/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 724 of file fe_lagrange_vec.C.

727 {
728  Real value = FE<0,LAGRANGE>::shape_second_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:54

◆ shape_second_deriv() [182/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 libmesh_dbg_varp,
const bool  add_p_level 
)
inherited

Definition at line 728 of file fe_nedelec_one_shape_3D.C.

734 {
735 #if LIBMESH_DIM == 3
736 
737  libmesh_assert(elem);
738 
739  // j = 0 ==> d^2 phi / dxi^2
740  // j = 1 ==> d^2 phi / dxi deta
741  // j = 2 ==> d^2 phi / deta^2
742  // j = 3 ==> d^2 phi / dxi dzeta
743  // j = 4 ==> d^2 phi / deta dzeta
744  // j = 5 ==> d^2 phi / dzeta^2
745  libmesh_assert_less (j, 6);
746 
747  const Order totalorder = static_cast<Order>(order + add_p_level * elem->p_level());
748 
749  switch (totalorder)
750  {
751  // linear Nedelec (first kind) shape function second derivatives
752  case FIRST:
753  {
754  switch (elem->type())
755  {
756  case HEX20:
757  case HEX27:
758  {
759  libmesh_assert_less (i, 12);
760 
761 #ifndef NDEBUG
762  const Real xi = p(0);
763  const Real eta = p(1);
764  const Real zeta = p(2);
765 #endif
766 
767  libmesh_assert_less_equal ( std::fabs(xi), 1.0+TOLERANCE );
768  libmesh_assert_less_equal ( std::fabs(eta), 1.0+TOLERANCE );
769  libmesh_assert_less_equal ( std::fabs(zeta), 1.0+TOLERANCE );
770 
771  switch (j)
772  {
773  // d^2()/dxi^2
774  case 0:
775  {
776  // All d^2()/dxi^2 derivatives for linear hexes are zero.
777  return RealGradient();
778  } // j = 0
779 
780  // d^2()/dxideta
781  case 1:
782  {
783  switch(i)
784  {
785  case 0:
786  case 1:
787  case 2:
788  case 3:
789  case 8:
790  case 9:
791  case 10:
792  case 11:
793  return RealGradient();
794  case 4:
795  {
796  if (elem->point(0) > elem->point(4))
797  return RealGradient( 0.0, 0.0, -0.125 );
798  else
799  return RealGradient( 0.0, 0.0, 0.125 );
800  }
801  case 5:
802  {
803  if (elem->point(1) > elem->point(5))
804  return RealGradient( 0.0, 0.0, 0.125 );
805  else
806  return RealGradient( 0.0, 0.0, -0.125 );
807  }
808  case 6:
809  {
810  if (elem->point(2) > elem->point(6))
811  return RealGradient( 0.0, 0.0, -0.125 );
812  else
813  return RealGradient( 0.0, 0.0, 0.125 );
814  }
815  case 7:
816  {
817  if (elem->point(3) > elem->point(7))
818  return RealGradient( 0.0, 0.0, 0.125 );
819  else
820  return RealGradient( 0.0, 0.0, -0.125 );
821  }
822  default:
823  libmesh_error_msg("Invalid i = " << i);
824  } // switch(i)
825 
826  } // j = 1
827 
828  // d^2()/deta^2
829  case 2:
830  {
831  // All d^2()/deta^2 derivatives for linear hexes are zero.
832  return RealGradient();
833  } // j = 2
834 
835  // d^2()/dxidzeta
836  case 3:
837  {
838  switch(i)
839  {
840  case 0:
841  case 2:
842  case 4:
843  case 5:
844  case 6:
845  case 7:
846  case 8:
847  case 10:
848  return RealGradient();
849 
850  case 1:
851  {
852  if (elem->point(1) > elem->point(2))
853  return RealGradient( 0.0, 0.125 );
854  else
855  return RealGradient( 0.0, -0.125 );
856  }
857  case 3:
858  {
859  if (elem->point(3) > elem->point(0))
860  return RealGradient( 0.0, -0.125 );
861  else
862  return RealGradient( 0.0, 0.125 );
863  }
864  case 9:
865  {
866  if (elem->point(5) > elem->point(6))
867  return RealGradient( 0.0, -0.125, 0.0 );
868  else
869  return RealGradient( 0.0, 0.125, 0.0 );
870  }
871  case 11:
872  {
873  if (elem->point(4) > elem->point(7))
874  return RealGradient( 0.0, 0.125, 0.0 );
875  else
876  return RealGradient( 0.0, -0.125, 0.0 );
877  }
878  default:
879  libmesh_error_msg("Invalid i = " << i);
880  } // switch(i)
881 
882  } // j = 3
883 
884  // d^2()/detadzeta
885  case 4:
886  {
887  switch(i)
888  {
889  case 1:
890  case 3:
891  case 4:
892  case 5:
893  case 6:
894  case 7:
895  case 9:
896  case 11:
897  return RealGradient();
898 
899  case 0:
900  {
901  if (elem->point(0) > elem->point(1))
902  return RealGradient( -0.125, 0.0, 0.0 );
903  else
904  return RealGradient( 0.125, 0.0, 0.0 );
905  }
906  case 2:
907  {
908  if (elem->point(2) > elem->point(3))
909  return RealGradient( 0.125, 0.0, 0.0 );
910  else
911  return RealGradient( -0.125, 0.0, 0.0 );
912  }
913  case 8:
914  {
915  if (elem->point(4) > elem->point(5))
916  return RealGradient( 0.125, 0.0, 0.0 );
917  else
918  return RealGradient( -0.125, 0.0, 0.0 );
919  }
920  case 10:
921  {
922  if (elem->point(7) > elem->point(6))
923  return RealGradient( -0.125, 0.0, 0.0 );
924  else
925  return RealGradient( 0.125, 0.0, 0.0 );
926  }
927  default:
928  libmesh_error_msg("Invalid i = " << i);
929  } // switch(i)
930 
931  } // j = 4
932 
933  // d^2()/dzeta^2
934  case 5:
935  {
936  // All d^2()/dzeta^2 derivatives for linear hexes are zero.
937  return RealGradient();
938  } // j = 5
939 
940  default:
941  libmesh_error_msg("Invalid j = " << j);
942  }
943 
944  return RealGradient();
945  }
946 
947  case TET10:
948  case TET14:
949  {
950  libmesh_assert_less (i, 6);
951  // All second derivatives for linear tets are zero.
952  return RealGradient();
953  }
954 
955  default:
956  libmesh_error_msg("ERROR: Unsupported 3D element type!: " << Utility::enum_to_string(elem->type()));
957 
958  } //switch(type)
959 
960  } // case FIRST:
961  // unsupported order
962  default:
963  libmesh_error_msg("ERROR: Unsupported 3D FE order!: " << totalorder);
964  }
965 
966 #else // LIBMESH_DIM != 3
967  libmesh_assert(true || p(0));
968  libmesh_ignore(elem, order, i, j, add_p_level);
969  libmesh_not_implemented();
970 #endif
971 }
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() [183/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 = static_cast<Order>(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 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
Real distance(const Point &p)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
Definition: type_vector.h:57
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() [184/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() [185/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:201

◆ shape_second_deriv() [186/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 747 of file fe_lagrange_vec.C.

750 {
751  return FE<0,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
752 }

◆ shape_second_deriv() [187/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() [188/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 766 of file fe_hierarchic_vec.C.

770 {
771  return FE<3,HIERARCHIC_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
772 }

◆ shape_second_deriv() [189/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:201

◆ shape_second_deriv() [190/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 770 of file fe_lagrange_vec.C.

773 {
774  Real value = FE<1,LAGRANGE>::shape_second_deriv( type, order, i, j, p );
775  return libMesh::RealGradient( value );
776 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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 =
793  static_cast<Order>(order+add_p_level*elem->p_level());
794 
795  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
796  return 0;
797 
798  const unsigned int dofs_per_side = totalorder+1u;
799 
800  switch (type)
801  {
802  case TRI6:
803  case TRI7:
804  {
805  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
807  }
808  case QUAD8:
809  case QUADSHELL8:
810  case QUAD9:
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->point(0) > elem->point(1))
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->point(1) > elem->point(2))
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->point(3) > elem->point(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->point(0) > elem->point(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:2945
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:851
std::string enum_to_string(const T e)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0
const Point & point(const unsigned int i) const
Definition: elem.h:2277

◆ shape_second_deriv() [192/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 794 of file fe_lagrange_vec.C.

797 {
798  return FE<1,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
799 }

◆ 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 822 of file fe_subdivision_2D.C.

827 {
828  switch (order)
829  {
830  case FOURTH:
831  {
832  switch (type)
833  {
834  case TRI3SUBDIVISION:
835  libmesh_assert_less(i, 12);
836  return FESubdivision::regular_shape_second_deriv(i,j,p(0),p(1));
837  default:
838  libmesh_error_msg("ERROR: Unsupported element type == " << Utility::enum_to_string(type));
839  }
840  }
841  default:
842  libmesh_error_msg("ERROR: Unsupported polynomial order == " << order);
843  }
844 }
std::string enum_to_string(const T e)

◆ shape_second_deriv() [194/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 846 of file fe_lagrange_vec.C.

849 {
850  Real value = FE<2,LAGRANGE>::shape_second_deriv( type, order, i/2, j, p );
851 
852  switch( i%2 )
853  {
854  case 0:
855  return libMesh::RealGradient( value );
856 
857  case 1:
858  return libMesh::RealGradient( Real(0), value );
859 
860  default:
861  libmesh_error_msg("i%2 must be either 0 or 1!");
862  }
863 
864  //dummy
865  return libMesh::RealGradient();
866 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ 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

◆ shape_second_deriv() [196/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 849 of file fe_subdivision_2D.C.

855 {
856  libmesh_assert(elem);
857  const Order totalorder =
858  static_cast<Order>(order+add_p_level*elem->p_level());
859  return FE<2,SUBDIVISION>::shape_second_deriv(elem->type(), totalorder, i, j, p);
860 }
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, 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 865 of file fe_subdivision_2D.C.

871 {
872  libmesh_assert(elem);
873  const Order totalorder =
874  static_cast<Order>(fet.order+add_p_level*elem->p_level());
875  return FE<2,SUBDIVISION>::shape_second_deriv(elem->type(), totalorder, i, j, p);
876 }
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() [198/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 884 of file fe_lagrange_vec.C.

887 {
888  return FE<2,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
889 }

◆ shape_second_deriv() [199/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [200/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 944 of file fe_lagrange_vec.C.

947 {
948  Real value = FE<3,LAGRANGE>::shape_second_deriv( type, order, i/3, j, p );
949 
950  switch( i%3 )
951  {
952  case 0:
953  return libMesh::RealGradient( value );
954 
955  case 1:
956  return libMesh::RealGradient( Real(0), value );
957 
958  case 2:
959  return libMesh::RealGradient( Real(0), Real(0), value );
960 
961  default:
962  libmesh_error_msg("i%3 must be 0, 1, or 2!");
963  }
964 
965  //dummy
966  return libMesh::RealGradient();
967 }
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [201/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 976 of file fe_nedelec_one_shape_3D.C.

981 {
982  libmesh_error_msg("Nedelec elements require the element type \nbecause edge orientation is needed.");
983  return RealGradient();
984 }
RealVectorValue RealGradient

◆ shape_second_deriv() [202/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 985 of file fe_lagrange_vec.C.

988 {
989  return FE<3,LAGRANGE_VEC>::shape_second_deriv(type, order, i, j, p);
990 }

◆ shape_second_deriv() [203/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 989 of file fe_nedelec_one_shape_3D.C.

995 {
996  return FE<3,NEDELEC_ONE>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
997 }

◆ shape_second_deriv() [204/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 1014 of file fe_lagrange_vec.C.

1018 {
1019  Real value = FE<0,LAGRANGE>::shape_second_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
1020  return libMesh::RealGradient( value );
1021 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [205/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 1041 of file fe_lagrange_vec.C.

1045 {
1046  return FE<0,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1047 }

◆ shape_second_deriv() [206/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 1051 of file fe_szabab_shape_2D.C.

1056 {
1057  static bool warning_given = false;
1058 
1059  if (!warning_given)
1060  libMesh::err << "Second derivatives for Szabab elements "
1061  << " are not yet implemented!"
1062  << std::endl;
1063 
1064  warning_given = true;
1065  return 0.;
1066 }
OStreamProxy err

◆ shape_second_deriv() [207/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 1069 of file fe_lagrange_vec.C.

1073 {
1074  Real value = FE<1,LAGRANGE>::shape_second_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
1075  return libMesh::RealGradient( value );
1076 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [208/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 1071 of file fe_szabab_shape_2D.C.

1077 {
1078  static bool warning_given = false;
1079 
1080  if (!warning_given)
1081  libMesh::err << "Second derivatives for Szabab elements "
1082  << " are not yet implemented!"
1083  << std::endl;
1084 
1085  warning_given = true;
1086  return 0.;
1087 }
OStreamProxy err

◆ shape_second_deriv() [209/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 1091 of file fe_szabab_shape_2D.C.

1097 {
1098  static bool warning_given = false;
1099 
1100  if (!warning_given)
1101  libMesh::err << "Second derivatives for Szabab elements "
1102  << " are not yet implemented!"
1103  << std::endl;
1104 
1105  warning_given = true;
1106  return 0.;
1107 }
OStreamProxy err

◆ shape_second_deriv() [210/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 1096 of file fe_lagrange_vec.C.

1100 {
1101  return FE<1,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1102 }

◆ shape_second_deriv() [211/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 1152 of file fe_lagrange_vec.C.

1156 {
1157  Real value = FE<2,LAGRANGE>::shape_second_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i/2, j, p );
1158 
1159  switch( i%2 )
1160  {
1161  case 0:
1162  return libMesh::RealGradient( value );
1163 
1164  case 1:
1165  return libMesh::RealGradient( Real(0), value );
1166 
1167  default:
1168  libmesh_error_msg("i%2 must be either 0 or 1!");
1169  }
1170 
1171  //dummy
1172  return libMesh::RealGradient();
1173 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [212/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 1193 of file fe_lagrange_vec.C.

1197 {
1198  return FE<2,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1199 }

◆ shape_second_deriv() [213/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 1256 of file fe_lagrange_vec.C.

1260 {
1261  Real value = FE<3,LAGRANGE>::shape_second_deriv( elem->type(), static_cast<Order>(order + add_p_level * elem->p_level()), i/3, j, p );
1262 
1263  switch( i%3 )
1264  {
1265  case 0:
1266  return libMesh::RealGradient( value );
1267 
1268  case 1:
1269  return libMesh::RealGradient( Real(0), value );
1270 
1271  case 2:
1272  return libMesh::RealGradient( Real(0), Real(0), value );
1273 
1274  default:
1275  libmesh_error_msg("i%3 must be 0, 1, or 2!");
1276  }
1277 
1278  //dummy
1279  return libMesh::RealGradient();
1280 }
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:54

◆ shape_second_deriv() [214/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 1300 of file fe_lagrange_vec.C.

1304 {
1305  return FE<3,LAGRANGE_VEC>::shape_second_deriv(elem, order, i, j, p, add_p_level);
1306 }

◆ shape_second_deriv() [215/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(), static_cast<Order>(order + add_p_level * elem->p_level()), i, j, p);
1351 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [216/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(), static_cast<Order>(fet.order + add_p_level * elem->p_level()), i, j, p);
1365 }
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
libmesh_assert(ctx)

◆ shape_second_deriv() [217/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() [218/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() [219/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 1772 of file fe_hierarchic_shape_3D.C.

1777 {
1778  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1779  return 0.;
1780 }

◆ shape_second_deriv() [220/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 1785 of file fe_hierarchic_shape_3D.C.

1790 {
1791  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1792  return 0.;
1793 }

◆ shape_second_deriv() [221/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 1798 of file fe_hierarchic_shape_3D.C.

1803 {
1804  libmesh_error_msg("Hierarchic shape functions require an Elem for edge/face orientation.");
1805  return 0.;
1806 }

◆ shape_second_deriv() [222/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 1811 of file fe_hierarchic_shape_3D.C.

1817 {
1818  return fe_hierarchic_3D_shape_second_deriv<HIERARCHIC>(elem, order, i, j, p, add_p_level);
1819 }

◆ shape_second_deriv() [223/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 1824 of file fe_hierarchic_shape_3D.C.

1830 {
1831  return fe_hierarchic_3D_shape_second_deriv<HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1832 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201

◆ shape_second_deriv() [224/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 1837 of file fe_hierarchic_shape_3D.C.

1843 {
1844  return fe_hierarchic_3D_shape_second_deriv<L2_HIERARCHIC>(elem, order, i, j, p, add_p_level);
1845 }

◆ shape_second_deriv() [225/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 1849 of file fe_hierarchic_shape_3D.C.

1855 {
1856  return fe_hierarchic_3D_shape_second_deriv<L2_HIERARCHIC>(elem, fet.order, i, j, p, add_p_level);
1857 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201

◆ shape_second_deriv() [226/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 1861 of file fe_hierarchic_shape_3D.C.

1867 {
1868 #if LIBMESH_DIM == 3
1869  libmesh_assert(elem);
1870  const ElemType type = elem->type();
1871 
1872  const Order totalorder =
1873  static_cast<Order>(order+add_p_level*elem->p_level());
1874 
1875  if (totalorder == 0) // special case since raw HIERARCHIC lacks CONSTANTs
1876  return 0; // constants have zero derivative
1877 
1878  switch (type)
1879  {
1880  case HEX27:
1881  {
1882  // I need to debug the p>2 case here...
1883  if (totalorder > 2)
1884  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
1886 
1887  const unsigned int dofs_per_side = (totalorder+1u)*(totalorder+1u);
1888  libmesh_assert_less(i, 6*dofs_per_side);
1889 
1890  const unsigned int sidenum = cube_side(p);
1891  if (sidenum > 5)
1892  return std::numeric_limits<Real>::quiet_NaN();
1893 
1894  const unsigned int dof_offset = sidenum * dofs_per_side;
1895 
1896  if (i < dof_offset) // i is on a previous side
1897  return 0;
1898 
1899  if (i >= dof_offset + dofs_per_side) // i is on a later side
1900  return 0;
1901 
1902  unsigned int side_i = i - dof_offset;
1903 
1904  std::unique_ptr<const Elem> side = elem->build_side_ptr(sidenum);
1905 
1906  Point sidep = cube_side_point(sidenum, p);
1907 
1908  cube_remap(side_i, *side, totalorder, sidep);
1909 
1910  // What second derivative or mixed derivative on the side
1911  // corresponds to the xi/eta/zeta mix we were asked for?
1912  unsigned int sidej = 100;
1913 
1914  // Do we need a -1 here to flip the final derivative value?
1915  Real f = 1.;
1916 
1917  switch (j)
1918  {
1919  case 0: // d^2()/dxi^2
1920  {
1921  switch (sidenum)
1922  {
1923  case 0:
1924  sidej = 2;
1925  break;
1926  case 1:
1927  sidej = 0;
1928  break;
1929  case 2:
1930  return 0;
1931  case 3:
1932  sidej = 0;
1933  break;
1934  case 4:
1935  return 0;
1936  case 5:
1937  sidej = 0;
1938  break;
1939  default:
1940  libmesh_error();
1941  }
1942  break;
1943  }
1944  case 1: // d^2()/dxideta
1945  {
1946  switch (sidenum)
1947  {
1948  case 0:
1949  sidej = 1;
1950  break;
1951  case 1:
1952  case 2:
1953  case 3:
1954  case 4:
1955  return 0;
1956  case 5:
1957  sidej = 1;
1958  break;
1959  default:
1960  libmesh_error();
1961  }
1962  break;
1963  }
1964  case 2: // d^2()/deta^2
1965  {
1966  switch (sidenum)
1967  {
1968  case 0:
1969  sidej = 0;
1970  break;
1971  case 1:
1972  return 0;
1973  case 2:
1974  sidej = 0;
1975  break;
1976  case 3:
1977  return 0;
1978  case 4:
1979  sidej = 0;
1980  break;
1981  case 5:
1982  sidej = 2;
1983  break;
1984  default:
1985  libmesh_error();
1986  }
1987  break;
1988  }
1989  case 3: // d^2()/dxidzeta
1990  {
1991  switch (sidenum)
1992  {
1993  case 0:
1994  return 0;
1995  case 1:
1996  sidej = 1;
1997  break;
1998  case 2:
1999  return 0;
2000  case 3:
2001  sidej = 1;
2002  f = -1;
2003  break;
2004  case 4:
2005  case 5:
2006  return 0;
2007  default:
2008  libmesh_error();
2009  }
2010  break;
2011  }
2012  case 4: // d^2()/detadzeta
2013  {
2014  switch (sidenum)
2015  {
2016  case 0:
2017  case 1:
2018  return 0;
2019  case 2:
2020  sidej = 1;
2021  break;
2022  case 3:
2023  return 0;
2024  case 4:
2025  sidej = 1;
2026  f = -1;
2027  break;
2028  case 5:
2029  return 0;
2030  default:
2031  libmesh_error();
2032  }
2033  break;
2034  }
2035  case 5: // d^2()/dzeta^2
2036  {
2037  switch (sidenum)
2038  {
2039  case 0:
2040  return 0;
2041  case 1:
2042  case 2:
2043  case 3:
2044  case 4:
2045  sidej = 2;
2046  break;
2047  case 5:
2048  return 0;
2049  default:
2050  libmesh_error();
2051  }
2052  break;
2053  }
2054 
2055  default:
2056  libmesh_error_msg("Invalid derivative index j = " << j);
2057  }
2058 
2059  return f * FE<2,HIERARCHIC>::shape_second_deriv(side.get(),
2060  order, side_i,
2061  sidej, sidep,
2062  add_p_level);
2063  }
2064 
2065  case TET14:
2066  case PRISM20:
2067  case PRISM21:
2068  {
2069  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
2071  }
2072 
2073  default:
2074  libmesh_error_msg("Invalid element type = " << Utility::enum_to_string(type));
2075  }
2076 
2077 #else // LIBMESH_DIM != 3
2078  libmesh_ignore(elem, order, i, j, p, add_p_level);
2079  libmesh_not_implemented();
2080 #endif
2081 }
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:2945
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy=false)=0
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:851
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() [227/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 2085 of file fe_hierarchic_shape_3D.C.

2091 {
2092  return FE<3,SIDE_HIERARCHIC>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
2093 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [228/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  static_cast<Order>(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:2945
libmesh_assert(ctx)
std::string enum_to_string(const T e)
virtual ElemType type() const =0

◆ shape_second_deriv() [229/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 2347 of file fe_bernstein_shape_3D.C.

2353 {
2354  return fe_fdm_second_deriv(elem, order, i, j, p, add_p_level,
2356 }
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:851

◆ shape_second_deriv() [230/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 2360 of file fe_bernstein_shape_3D.C.

2365 {
2366  libmesh_error_msg("Bernstein polynomials require the element type \nbecause edge and face orientation is needed.");
2367  return 0.;
2368 }

◆ shape_second_deriv() [231/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() [232/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 2372 of file fe_bernstein_shape_3D.C.

2378 {
2379  return FE<3,BERNSTEIN>::shape_second_deriv(elem, fet.order, i, j, p, add_p_level);
2380 }
OrderWrapper order
The approximation order of the element.
Definition: fe_type.h:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ shape_second_deriv() [233/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:201
A specific instantiation of the FEBase class.
Definition: fe.h:127

◆ 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:111

◆ 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:111

◆ 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:111

◆ 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 207 of file fe_lagrange_shape_3D.C.

213 {
215  (elem,o,i,p,v,add_p_level);
216 }
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 110 of file fe_scalar.C.

110 { 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 111 of file fe_scalar.C.

111 { 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 112 of file fe_scalar.C.

112 { 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 113 of file fe_scalar.C.

113 { 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 179 of file fe_rational.C.

179 { 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 180 of file fe_rational.C.

180 { 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 181 of file fe_rational.C.

181 { 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 182 of file fe_rational.C.

182 { 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 200 of file fe_l2_hierarchic.C.

200 { 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 201 of file fe_l2_hierarchic.C.

201 { 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 202 of file fe_l2_hierarchic.C.

202 { 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 203 of file fe_l2_hierarchic.C.

203 { 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 245 of file fe_l2_lagrange.C.

245 { 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 246 of file fe_l2_lagrange.C.

246 { 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 247 of file fe_l2_lagrange.C.

247 { 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 248 of file fe_l2_lagrange.C.

248 { return false; }

◆ shapes_need_reinit() [17/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 290 of file fe_side_hierarchic.C.

290 { return true; }

◆ shapes_need_reinit() [18/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 291 of file fe_side_hierarchic.C.

291 { return true; }

◆ shapes_need_reinit() [19/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 292 of file fe_side_hierarchic.C.

292 { return true; }

◆ shapes_need_reinit() [20/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 293 of file fe_side_hierarchic.C.

293 { return true; }

◆ shapes_need_reinit() [21/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 297 of file fe_clough.C.

297 { return true; }

◆ shapes_need_reinit() [22/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 298 of file fe_clough.C.

298 { return true; }

◆ shapes_need_reinit() [23/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 299 of file fe_clough.C.

299 { return true; }

◆ shapes_need_reinit() [24/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 300 of file fe_clough.C.

300 { 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 334 of file fe_hermite.C.

334 { 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 335 of file fe_hermite.C.

335 { 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 336 of file fe_hermite.C.

336 { 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 337 of file fe_hermite.C.

337 { return true; }

◆ shapes_need_reinit() [29/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 413 of file fe_monomial.C.

413 { return false; }

◆ shapes_need_reinit() [30/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 414 of file fe_monomial.C.

414 { return false; }

◆ shapes_need_reinit() [31/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 415 of file fe_monomial.C.

415 { return false; }

◆ shapes_need_reinit() [32/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 416 of file fe_monomial.C.

416 { return false; }

◆ 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 420 of file fe_xyz.C.

420 { 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 421 of file fe_xyz.C.

421 { 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 422 of file fe_xyz.C.

422 { 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 423 of file fe_xyz.C.

423 { return true; }

◆ shapes_need_reinit() [37/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 450 of file fe_bernstein.C.

450 { return true; }

◆ shapes_need_reinit() [38/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 451 of file fe_bernstein.C.

451 { return true; }

◆ shapes_need_reinit() [39/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 452 of file fe_bernstein.C.

452 { return true; }

◆ shapes_need_reinit() [40/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 453 of file fe_bernstein.C.

453 { return true; }

◆ shapes_need_reinit() [41/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 502 of file fe_hierarchic.C.

502 { return true; }

◆ shapes_need_reinit() [42/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 503 of file fe_hierarchic.C.

503 { return true; }

◆ shapes_need_reinit() [43/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 504 of file fe_hierarchic.C.

504 { return true; }

◆ shapes_need_reinit() [44/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 505 of file fe_hierarchic.C.

505 { 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 511 of file fe_raviart.C.

511 { 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 512 of file fe_raviart.C.

512 { 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 513 of file fe_raviart.C.

513 { 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 514 of file fe_raviart.C.

514 { return true; }

◆ shapes_need_reinit() [49/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 516 of file fe_nedelec_one.C.

516 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [50/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 517 of file fe_nedelec_one.C.

517 { NEDELEC_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [51/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 517 of file fe_raviart.C.

517 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [52/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 518 of file fe_raviart.C.

518 { RAVIART_LOW_D_ERROR_MESSAGE }

◆ shapes_need_reinit() [53/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 518 of file fe_nedelec_one.C.

518 { return true; }

◆ shapes_need_reinit() [54/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 519 of file fe_raviart.C.

519 { return true; }

◆ shapes_need_reinit() [55/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 519 of file fe_nedelec_one.C.

519 { return true; }

◆ shapes_need_reinit() [56/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 520 of file fe_raviart.C.

520 { 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 827 of file fe_monomial_vec.C.

828 {
829  return false;
830 }

◆ 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 833 of file fe_monomial_vec.C.

834 {
835  return false;
836 }

◆ shapes_need_reinit() [60/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 836 of file fe_hierarchic_vec.C.

836 { return true; }

◆ shapes_need_reinit() [61/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 837 of file fe_hierarchic_vec.C.

837 { return true; }

◆ shapes_need_reinit() [62/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 838 of file fe_hierarchic_vec.C.

838 { return true; }

◆ shapes_need_reinit() [63/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 839 of file fe_monomial_vec.C.

840 {
841  return false;
842 }

◆ shapes_need_reinit() [64/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 839 of file fe_hierarchic_vec.C.

839 { return true; }

◆ shapes_need_reinit() [65/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 840 of file fe_hierarchic_vec.C.

840 { return true; }

◆ shapes_need_reinit() [66/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 841 of file fe_hierarchic_vec.C.

841 { return true; }

◆ shapes_need_reinit() [67/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 842 of file fe_hierarchic_vec.C.

842 { return true; }

◆ shapes_need_reinit() [68/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 843 of file fe_hierarchic_vec.C.

843 { return true; }

◆ shapes_need_reinit() [69/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 845 of file fe_monomial_vec.C.

846 {
847  return false;
848 }

◆ 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 981 of file fe_subdivision_2D.C.

981 { 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 1029 of file fe_lagrange.C.

1029 { 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 1030 of file fe_lagrange.C.

1030 { 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 1031 of file fe_lagrange.C.

1031 { 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 1032 of file fe_lagrange.C.

1032 { 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 1325 of file fe_szabab.C.

1325 { 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 1326 of file fe_szabab.C.

1326 { 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 1327 of file fe_szabab.C.

1327 { 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 1328 of file fe_szabab.C.

1328 { 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 1373 of file fe_lagrange_vec.C.

1373 { 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 1374 of file fe_lagrange_vec.C.

1374 { 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 1375 of file fe_lagrange_vec.C.

1375 { 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 1376 of file fe_lagrange_vec.C.

1376 { 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 1377 of file fe_lagrange_vec.C.

1377 { 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 1378 of file fe_lagrange_vec.C.

1378 { 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 1379 of file fe_lagrange_vec.C.

1379 { 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 1380 of file fe_lagrange_vec.C.

1380 { 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 336 of file fe_boundary.C.

341 {
342  // We're calculating mappings - we need at least first order info
343  this->calculate_phi = true;
344  this->determine_calculations();
345 
346  unsigned int side_p_level = elem->p_level();
347  if (elem->neighbor_ptr(s) != nullptr)
348  side_p_level = std::max(side_p_level, elem->neighbor_ptr(s)->p_level());
349 
350  if (side->type() != last_side ||
351  side_p_level != this->_elem_p_level ||
352  !this->shapes_on_quadrature)
353  {
354  // Set the element type
355  this->elem_type = elem->type();
356  this->_elem_p_level = side_p_level;
357  this->_p_level = this->_add_p_level_in_reinit * side_p_level;
358 
359  // Set the last_side
360  last_side = side->type();
361 
362  // Initialize the face shape functions
363  this->_fe_map->template init_face_shape_functions<Dim>(reference_side_points, side);
364  }
365 
366  const unsigned int n_points =
367  cast_int<unsigned int>(reference_side_points.size());
368  reference_points.resize(n_points);
369  for (unsigned int i = 0; i < n_points; i++)
370  reference_points[i].zero();
371 
372  std::vector<Point> refspace_nodes;
373  this->get_refspace_nodes(elem->type(), refspace_nodes);
374 
375  const std::vector<std::vector<Real>> & psi_map = this->_fe_map->get_psi();
376 
377  // sum over the nodes
378  for (auto i : index_range(psi_map))
379  {
380  const Point & side_node = refspace_nodes[elem->local_side_node(s,i)];
381  for (unsigned int p=0; p<n_points; p++)
382  reference_points[p].add_scaled (side_node, psi_map[i][p]);
383  }
384 }
bool calculate_phi
Should we calculate shape functions?
Definition: fe_abstract.h:670
unsigned int _p_level
The p refinement level the current data structures are set up for.
Definition: fe_abstract.h:732
bool shapes_on_quadrature
A flag indicating if current data structures correspond to quadrature rule points.
Definition: fe_abstract.h:743
unsigned int _elem_p_level
The element p-refinement level the current data structures are set up for.
Definition: fe_abstract.h:726
const Number zero
.
Definition: libmesh.h:280
static void get_refspace_nodes(const ElemType t, std::vector< Point > &nodes)
Definition: fe_abstract.C:373
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:756
std::unique_ptr< FEMap > _fe_map
Definition: fe_abstract.h:633
ElemType last_side
The last side and last edge we did a reinit on.
Definition: fe.h:757
ElemType elem_type
The element type the current data structures are set up for.
Definition: fe_abstract.h:715
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:111

◆ 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 921 of file fe_subdivision_2D.C.

926 {
927  libmesh_not_implemented();
928 }

◆ 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   
)
inherited

Definition at line 199 of file fe_side_hierarchic.C.

204 {
205  libmesh_assert_less(side, 2);
206  nodal_soln_on_side.resize(1);
207  nodal_soln_on_side[0] = elem_soln[side];
208 }

◆ 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 
)
inherited

Definition at line 213 of file fe_side_hierarchic.C.

218 {
219  libmesh_assert_equal_to(elem->dim(), 2);
220  side_hierarchic_side_nodal_soln(elem, o, side, elem_soln,
221  nodal_soln_on_side,
222  add_p_level);
223 }

◆ 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 
)
inherited

Definition at line 228 of file fe_side_hierarchic.C.

233 {
234  libmesh_assert_equal_to(elem->dim(), 3);
235  side_hierarchic_side_nodal_soln(elem, o, side, elem_soln,
236  nodal_soln_on_side,
237  add_p_level);
238 }

◆ 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 
)
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 756 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_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 726 of file fe_abstract.h.

◆ _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().

◆ _p_level

unsigned int libMesh::FEAbstract::_p_level
protectedinherited

The p refinement level the current data structures are set up for.

Definition at line 732 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::get_order(), and libMesh::FEAbstract::get_p_level().

◆ cached_nodes

std::vector<Point> libMesh::FE< Dim, T >::cached_nodes
protectedinherited

An array of the node locations on the last element we computed on.

Definition at line 752 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 684 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 655 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 701 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 665 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 660 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 645 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 639 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.

◆ elem_type

ElemType libMesh::FEAbstract::elem_type
protectedinherited

The element type the current data structures are set up for.

Definition at line 715 of file fe_abstract.h.

Referenced by libMesh::FEAbstract::get_type().

◆ fe_type

FEType libMesh::FEAbstract::fe_type
protectedinherited

◆ last_edge

ElemType libMesh::FE< Dim, T >::last_edge
protectedinherited

Definition at line 759 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 757 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 737 of file fe_abstract.h.

◆ 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 743 of file fe_abstract.h.

◆ 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 file: