20 #ifndef LIBMESH_FE_INTERFACE_H 21 #define LIBMESH_FE_INTERFACE_H 24 #include "libmesh/libmesh_common.h" 25 #include "libmesh/vector_value.h" 50 #ifdef LIBMESH_ENABLE_PERIODIC 51 class PeriodicBoundaries;
52 class PointLocatorBase;
81 #ifdef LIBMESH_ENABLE_DEPRECATED 88 #endif // LIBMESH_ENABLE_DEPRECATED 99 const bool add_p_level =
true);
106 const int extra_order,
109 #ifdef LIBMESH_ENABLE_DEPRECATED 113 static unsigned int n_dofs(
const unsigned int dim,
126 static unsigned int n_dofs(
const unsigned int dim,
129 #endif // LIBMESH_ENABLE_DEPRECATED 139 const bool add_p_level =
true);
155 #ifdef LIBMESH_ENABLE_DEPRECATED 170 const unsigned int n);
180 #endif // LIBMESH_ENABLE_DEPRECATED 197 const unsigned int n,
198 const bool add_p_level =
true);
206 const int extra_order,
208 const unsigned int n);
210 #ifdef LIBMESH_ENABLE_DEPRECATED 217 #endif // LIBMESH_ENABLE_DEPRECATED 228 const bool add_p_level =
true);
234 const int extra_order,
248 const unsigned int dim,
251 std::vector<unsigned int> & di,
252 const bool add_p_level =
true);
265 const unsigned int dim,
268 std::vector<unsigned int> & di,
269 const bool add_p_level =
true);
290 const std::vector<Number> & elem_soln,
292 const bool add_p_level =
true,
293 const unsigned int vdim = 1);
306 const unsigned int side,
307 const std::vector<Number> & elem_soln,
309 const bool add_p_level =
true,
310 const unsigned int vdim = 1);
312 #ifdef LIBMESH_ENABLE_DEPRECATED 329 const bool secure =
true);
337 const std::vector<Point> & physical_points,
338 std::vector<Point> & reference_points,
340 const bool secure =
true);
375 const unsigned int i,
394 const unsigned int i,
396 #endif // LIBMESH_ENABLE_DEPRECATED 407 const unsigned int i,
409 const bool add_p_level =
true);
421 const unsigned int i,
424 #ifdef LIBMESH_ENABLE_DEPRECATED 438 template<
typename OutputType>
439 static void shape(
const unsigned int dim,
442 const unsigned int i,
459 template<
typename OutputType>
460 static void shape(
const unsigned int dim,
463 const unsigned int i,
466 #endif // LIBMESH_ENABLE_DEPRECATED 477 template<
typename OutputType>
480 const unsigned int i,
493 template<
typename OutputType>
497 const unsigned int i,
519 template<
typename OutputType>
520 static void shapes(
const unsigned int dim,
523 const unsigned int i,
524 const std::vector<Point> & p,
525 std::vector<OutputType> & phi,
526 const bool add_p_level =
true);
528 template<
typename OutputType>
532 const std::vector<Point> & p,
533 std::vector<std::vector<OutputType>> & phi,
534 const bool add_p_level =
true);
543 const unsigned int i,
545 const bool add_p_level);
547 #ifdef LIBMESH_ENABLE_DEPRECATED 555 #endif // LIBMESH_ENABLE_DEPRECATED 565 #ifdef LIBMESH_ENABLE_DEPRECATED 581 const unsigned int i,
582 const unsigned int j,
591 const unsigned int i,
592 const unsigned int j,
594 #endif // LIBMESH_ENABLE_DEPRECATED 608 const unsigned int i,
609 const unsigned int j,
618 const unsigned int i,
619 const unsigned int j,
626 template<
typename OutputType>
629 const unsigned int i,
630 const unsigned int j,
631 const std::vector<Point> & p,
632 std::vector<OutputType> & dphi,
633 const bool add_p_level =
true);
635 template<
typename OutputType>
639 const std::vector<Point> & p,
640 std::vector<std::vector<OutputType>> * comps[3],
641 const bool add_p_level =
true);
650 const unsigned int i,
651 const unsigned int j,
653 const bool add_p_level);
673 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 675 #ifdef LIBMESH_ENABLE_DEPRECATED 701 const unsigned int i,
702 const unsigned int j,
712 const unsigned int i,
713 const unsigned int j,
715 #endif // LIBMESH_ENABLE_DEPRECATED 734 const unsigned int i,
735 const unsigned int j,
744 const unsigned int i,
745 const unsigned int j,
755 const unsigned int i,
756 const unsigned int j,
758 const bool add_p_level);
760 #ifdef LIBMESH_ENABLE_DEPRECATED 768 #endif // LIBMESH_ENABLE_DEPRECATED 798 #ifdef LIBMESH_ENABLE_AMR 806 const unsigned int variable_number,
808 #endif // #ifdef LIBMESH_ENABLE_AMR 810 #ifdef LIBMESH_ENABLE_PERIODIC 821 const unsigned int variable_number,
823 #endif // #ifdef LIBMESH_ENABLE_PERIODIC 885 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 893 #ifdef LIBMESH_ENABLE_DEPRECATED 901 #endif // LIBMESH_ENABLE_DEPRECATED 906 #ifdef LIBMESH_ENABLE_DEPRECATED 914 #endif // LIBMESH_ENABLE_DEPRECATED 919 #ifdef LIBMESH_ENABLE_DEPRECATED 927 const unsigned int n);
928 #endif // LIBMESH_ENABLE_DEPRECATED 932 const unsigned int n);
934 #ifdef LIBMESH_ENABLE_DEPRECATED 942 #endif // LIBMESH_ENABLE_DEPRECATED 950 const std::vector<Number> & elem_soln,
963 const bool secure =
true);
968 const std::vector<Point> & physical_points,
969 std::vector<Point> & reference_points,
971 const bool secure =
true);
973 #ifdef LIBMESH_ENABLE_DEPRECATED 989 const unsigned int i,
999 const unsigned int i,
1001 #endif // LIBMESH_ENABLE_DEPRECATED 1005 const unsigned int i,
1008 #ifdef LIBMESH_ENABLE_DEPRECATED 1016 const unsigned int i,
1017 const unsigned int j,
1027 const unsigned int i,
1028 const unsigned int j,
1030 #endif // LIBMESH_ENABLE_DEPRECATED 1034 const unsigned int i,
1035 const unsigned int j,
1050 #endif // LIBMESH_FE_INTERFACE_H Real(* shape_deriv_ptr)(const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Typedef for pointer to a function that returns FE shape function derivative values.
static unsigned int n_dofs_per_elem(const unsigned int dim, const FEType &fe_t, const ElemType t)
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
static Point map(unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p)
This is now deprecated; use FEMap::map instead.
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
static unsigned int n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
static shape_ptr shape_function(const unsigned int dim, const FEType &fe_t, const ElemType t)
static unsigned int ifem_n_shape_functions(const unsigned int dim, const FEType &fe_t, const ElemType t)
static bool ifem_on_reference_element(const Point &p, const ElemType t, const Real eps)
static Real shape_deriv(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const unsigned int j, const Point &p)
static Real ifem_shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
static constexpr Real TOLERANCE
class FEComputeData hides arbitrary data to be passed to and from children of FEBase through the FEIn...
We're using a class instead of a typedef to allow forward declarations and future flexibility...
static void dofs_on_edge(const Elem *const elem, const unsigned int dim, const FEType &fe_t, unsigned int e, std::vector< unsigned int > &di, const bool add_p_level=true)
Fills the vector di with the local degree of freedom indices associated with edge e of element elem A...
This is the base class from which all geometric element types are derived.
static FEFieldType field_type(const FEType &fe_type)
The libMesh namespace provides an interface to certain functionality in the library.
static Point ifem_inverse_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
static unsigned int max_order(const FEType &fe_t, const ElemType &el_t)
static void side_nodal_soln(const FEType &fe_t, const Elem *elem, const unsigned int side, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level=true, const unsigned int vdim=1)
Build the nodal soln on one side from the (full) element soln.
This is the MeshBase class.
static bool orientation_dependent(const FEFamily &fe_family)
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 var...
virtual ~FEInterface()=default
Destructor.
This class handles the numbering of degrees of freedom on a mesh.
FEInterface()
Empty constructor.
static void ifem_compute_data(const unsigned int dim, const FEType &fe_t, const Elem *elem, FEComputeData &data)
static bool extra_hanging_dofs(const FEType &fe_t)
static unsigned int n_shape_functions(const unsigned int dim, const FEType &fe_t, const ElemType t)
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
static void compute_data(const unsigned int dim, const FEType &fe_t, const Elem *elem, FEComputeData &data)
Lets the appropriate child of FEBase compute the requested data for the input specified in data...
static bool is_hierarchic(const FEType &fe_type)
Returns whether or not the input FEType's higher-order shape functions are always hierarchic...
static void shapes(const unsigned int dim, const FEType &fe_t, const Elem *elem, const unsigned int i, const std::vector< Point > &p, std::vector< OutputType > &phi, const bool add_p_level=true)
Fills phi with the values of the shape function at point p.
static Point inverse_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
This is now deprecated; use FEMap::inverse_map instead.
static Point ifem_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p)
This is the base class for point locators.
static void ifem_nodal_soln(const unsigned int dim, const FEType &fe_t, const Elem *elem, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln)
static bool on_reference_element(const Point &p, const ElemType t, const Real eps=TOLERANCE)
This class provides an encapsulated access to all static public member functions of finite element cl...
static shape_deriv_ptr shape_deriv_function(const unsigned int dim, const FEType &fe_t, const ElemType t)
static unsigned int ifem_n_dofs_per_elem(const unsigned int dim, const FEType &fe_t, const ElemType t)
static unsigned int n_vec_dim(const MeshBase &mesh, const FEType &fe_type)
static n_dofs_at_node_ptr n_dofs_at_node_function(const unsigned int dim, const FEType &fe_t)
static FEContinuity get_continuity(const FEType &fe_type)
Returns the input FEType's FEContinuity based on the underlying FEFamily and potentially the Order...
static unsigned int n_dofs_at_node(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int n)
static Real shape_second_deriv(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const unsigned int j, const Point &p)
static unsigned int ifem_n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
Real(* shape_ptr)(const FEType fe_t, const Elem *elem, const unsigned int i, const Point &p, const bool add_p_level)
Typedef for pointer to a function that returns FE shape function values.
unsigned int(* n_dofs_at_node_ptr)(const ElemType, const Order, const unsigned int)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static shape_second_deriv_ptr shape_second_deriv_function(const unsigned int dim, const FEType &fe_t, const ElemType t)
static void shape_derivs(const FEType &fe_t, const Elem *elem, const unsigned int i, const unsigned int j, const std::vector< Point > &p, std::vector< OutputType > &dphi, const bool add_p_level=true)
Fills dphi with the derivatives of the shape function at point p in direction j. ...
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
static bool is_InfFE_elem(const ElemType et)
Real(* shape_second_deriv_ptr)(const FEType fet, const Elem *elem, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level)
Typedef for pointer to a function that returns FE shape function second derivative values...
FEFamily
defines an enum for finite element families.
static void all_shape_derivs(const unsigned int dim, const FEType &fe_t, const Elem *elem, const std::vector< Point > &p, std::vector< std::vector< OutputType >> *comps[3], const bool add_p_level=true)
static void nodal_soln(const unsigned int dim, const FEType &fe_t, const Elem *elem, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level=true, const unsigned int vdim=1)
Build the nodal soln from the element soln.
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 periodic boundary conditions) corresponding to vari...
static Real ifem_shape_deriv(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const unsigned int j, const Point &p)
static void dofs_on_side(const Elem *const elem, const unsigned int dim, const FEType &fe_t, unsigned int s, std::vector< unsigned int > &di, const bool add_p_level=true)
Fills the vector di with the local degree of freedom indices associated with side s of element elem A...
A Point defines a location in LIBMESH_DIM dimensional Real space.
The constraint matrix storage format.
void ErrorVector unsigned int
static void all_shapes(const unsigned int dim, const FEType &fe_t, const Elem *elem, const std::vector< Point > &p, std::vector< std::vector< OutputType >> &phi, const bool add_p_level=true)
static unsigned int ifem_n_dofs_at_node(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int n)
FEFieldType
defines an enum for finite element field types - i.e.