24 #include "libmesh/fe_base.h" 25 #include "libmesh/int_range.h" 26 #include "libmesh/libmesh.h" 39 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 41 template <
unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map>
126 template <
unsigned int Dim, FEFamily T>
151 const unsigned int i,
166 const unsigned int i,
168 const bool add_p_level =
true);
182 const unsigned int i,
184 const bool add_p_level =
true);
198 const unsigned int i,
199 const std::vector<Point> & p,
200 std::vector<OutputShape> & v,
201 const bool add_p_level =
true);
216 const std::vector<Point> & p,
217 std::vector<std::vector<OutputShape> > & v,
218 const bool add_p_level =
true);
229 const unsigned int i,
230 const unsigned int j,
243 const unsigned int i,
244 const unsigned int j,
246 const bool add_p_level =
true);
259 const unsigned int i,
260 const unsigned int j,
262 const bool add_p_level =
true);
276 const unsigned int i,
277 const unsigned int j,
278 const std::vector<Point> & p,
279 std::vector<OutputShape> & v,
280 const bool add_p_level =
true);
295 const std::vector<Point> & p,
296 std::vector<std::vector<OutputShape>> * comps[3],
297 const bool add_p_level =
true);
299 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 322 const unsigned int i,
323 const unsigned int j,
350 const unsigned int i,
351 const unsigned int j,
353 const bool add_p_level =
true);
377 const unsigned int i,
378 const unsigned int j,
380 const bool add_p_level =
true);
382 #endif //LIBMESH_ENABLE_SECOND_DERIVATIVES 390 const std::vector<Number> & elem_soln,
392 bool add_p_level =
true);
401 const unsigned int side,
402 const std::vector<Number> & elem_soln,
403 std::vector<Number> & nodal_soln_on_side,
404 bool add_p_level =
true);
439 const unsigned int n);
470 std::vector<unsigned int> & di,
471 bool add_p_level=
true);
481 std::vector<unsigned int> & di,
482 bool add_p_level=
true);
487 const bool secure =
true)
494 const std::vector<Point> & physical_points,
495 std::vector<Point> & reference_points,
497 const bool secure =
true)
501 tolerance, secure, secure);
515 const std::vector<Point> *
const pts =
nullptr,
516 const std::vector<Real> *
const weights =
nullptr)
override;
523 const std::vector<Point> & pts,
524 const std::vector<Real> & JxW)
override;
542 const unsigned int side,
544 const std::vector<Point> *
const pts =
nullptr,
545 const std::vector<Real> *
const weights =
nullptr)
override;
557 const unsigned int edge,
559 const std::vector<Point> *
const pts =
nullptr,
560 const std::vector<Real> *
const weights =
nullptr)
override;
568 const unsigned int s,
569 const std::vector<Point> & reference_side_points,
570 std::vector<Point> & reference_points)
override;
578 const unsigned int e,
579 const std::vector<Point> & reference_edge_points,
580 std::vector<Point> & reference_points);
596 #ifdef LIBMESH_ENABLE_AMR 605 const unsigned int variable_number,
607 #endif // #ifdef LIBMESH_ENABLE_AMR 618 const Point & reference_point)
621 return FEMap::map(Dim, elem, reference_point);
625 const Point & reference_point)
632 const Point & reference_point)
639 const Point & reference_point)
645 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 650 template <
unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map>
671 const std::vector<Point> & p,
672 std::vector<std::vector<OutputShape>> * comps[3],
673 const bool add_p_level =
true);
681 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 688 const Elem * e)
override;
697 const unsigned int i,
698 const std::vector<Point> & p,
699 std::vector<OutputShape> & v,
700 const bool add_p_level =
true)
702 libmesh_assert_equal_to(p.size(), v.size());
712 const std::vector<Point> & p,
713 std::vector<std::vector<OutputShape>> & v,
714 const bool add_p_level =
true)
718 libmesh_assert_equal_to ( p.size(), v[i].size() );
728 const unsigned int i,
729 const unsigned int j,
730 const std::vector<Point> & p,
731 std::vector<OutputShape> & v,
732 const bool add_p_level =
true)
734 libmesh_assert_equal_to(p.size(), v.size());
743 const unsigned int side,
744 const std::vector<Number> & elem_soln,
745 std::vector<Number> & nodal_soln_on_side,
746 bool add_p_level =
true);
771 template <
unsigned int Dim>
795 template <
unsigned int Dim>
809 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 833 const unsigned int i,
835 const bool add_p_level);
840 const unsigned int i,
841 const unsigned int j,
843 const bool add_p_level);
845 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 849 const unsigned int i,
850 const unsigned int j,
852 const bool add_p_level);
878 const std::vector<Point> *
const pts =
nullptr,
879 const std::vector<Real> *
const weights =
nullptr)
override;
888 const std::vector<Point> *
const =
nullptr,
889 const std::vector<Real> *
const =
nullptr)
override 890 { libmesh_not_implemented(); }
907 const Elem * elem)
override;
926 const unsigned int j,
930 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 938 const unsigned int j,
943 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVE 954 const unsigned int valence);
962 unsigned int valence);
974 template <
unsigned int Dim>
998 template <
unsigned int Dim>
1022 template <
unsigned int Dim>
1041 template <
unsigned int Dim>
1064 template <
unsigned int Dim>
1083 template <
unsigned int Dim>
1109 template <
unsigned int Dim>
1129 const std::vector<Point> *
const pts =
nullptr,
1130 const std::vector<Real> *
const weights =
nullptr)
override 1138 const unsigned int side,
1140 const std::vector<Point> *
const pts =
nullptr,
1141 const std::vector<Real> *
const weights =
nullptr)
override;
1154 const Elem * e)
override;
1173 const std::vector<Real> & weights);
1185 template <
unsigned int Dim>
1208 template <
unsigned int Dim>
1232 template <
unsigned int Dim>
1255 template <
unsigned int Dim>
1278 template <
unsigned int Dim>
1299 template <
unsigned int Dim>
1321 template <
unsigned int Dim>
1344 template <
unsigned int Dim>
1362 namespace FiniteElements
1470 template <
typename OutputShape>
1473 const unsigned int i,
1474 const unsigned int j,
1476 const bool add_p_level,
1477 OutputShape(*shape_func)
1479 const unsigned int,
const Point &,
1482 template <
typename OutputShape>
1485 const unsigned int i,
1486 const unsigned int j,
1488 OutputShape(*shape_func)
1490 const unsigned int,
const Point &));
1492 template <
typename OutputShape>
1496 const unsigned int i,
1497 const unsigned int j,
1499 const bool add_p_level,
1500 OutputShape(*deriv_func)
1502 const unsigned int,
const unsigned int,
1503 const Point &,
const bool));
1505 template <
typename OutputShape>
1508 const unsigned int i,
1509 const unsigned int j,
1511 OutputShape(*deriv_func)
1522 const std::vector<Number> & elem_soln,
1523 std::vector<Number> & nodal_soln,
1524 bool add_p_level =
true);
1536 const FEType underlying_fe_type,
1537 std::vector<std::vector<Real>> & shapes,
1538 const std::vector<Point> & p,
1539 const bool add_p_level);
1545 std::vector<std::vector<Real>> & shapes,
1546 std::vector<std::vector<std::vector<Real>>> & derivs,
1547 const std::vector<Point> & p,
1548 const bool add_p_level);
1551 const FEType underlying_fe_type,
1552 const unsigned int i,
1554 const bool add_p_level);
1557 const FEType underlying_fe_type,
1558 const unsigned int i,
1559 const unsigned int j,
1561 const bool add_p_level);
1564 const FEType underlying_fe_type,
1565 const unsigned int i,
1566 const unsigned int j,
1568 const bool add_p_level);
1571 const FEType underlying_fe_type,
1572 const std::vector<Point> & p,
1573 std::vector<std::vector<Real>> & v,
1574 const bool add_p_level);
1576 template <
typename OutputShape>
1578 const FEType underlying_fe_type,
1579 const std::vector<Point> & p,
1580 std::vector<std::vector<OutputShape>> * comps[3],
1581 const bool add_p_level);
1585 #define LIBMESH_DEFAULT_VECTORIZED_FE(MyDim, MyType) \ 1587 void FE<MyDim,MyType>::all_shapes \ 1588 (const Elem * elem, \ 1590 const std::vector<Point> & p, \ 1591 std::vector<std::vector<OutputShape>> & v, \ 1592 const bool add_p_level) \ 1594 FE<MyDim,MyType>::default_all_shapes \ 1595 (elem,o,p,v,add_p_level); \ 1599 void FE<MyDim,MyType>::shapes \ 1600 (const Elem * elem, \ 1602 const unsigned int i, \ 1603 const std::vector<Point> & p, \ 1604 std::vector<OutputShape> & v, \ 1605 const bool add_p_level) \ 1607 FE<MyDim,MyType>::default_shapes \ 1608 (elem,o,i,p,v,add_p_level); \ 1612 void FE<MyDim,MyType>::shape_derivs \ 1613 (const Elem * elem, \ 1615 const unsigned int i, \ 1616 const unsigned int j, \ 1617 const std::vector<Point> & p, \ 1618 std::vector<OutputShape> & v, \ 1619 const bool add_p_level) \ 1621 FE<MyDim,MyType>::default_shape_derivs \ 1622 (elem,o,i,j,p,v,add_p_level); \ 1626 void FE<MyDim,MyType>::all_shape_derivs \ 1627 (const Elem * elem, \ 1629 const std::vector<Point> & p, \ 1630 std::vector<std::vector<OutputShape>> * comps[3], \ 1631 const bool add_p_level) \ 1633 FE<MyDim,MyType>::default_all_shape_derivs \ 1634 (elem,o,p,comps,add_p_level); \ 1638 #endif // LIBMESH_FE_H
FELagrangeVec objects are used for working with vector-valued finite elements.
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
FELagrange(const FEType &fet)
Constructor.
static Point map_xi(const Elem *elem, const Point &reference_point)
FESubdivision(const FEType &fet)
Constructor.
FEMonomial(const FEType &fet)
Constructor.
static unsigned int n_dofs(const ElemType t, const Order o)
ElemType
Defines an enum for geometric element types.
static Real regular_shape(const unsigned int i, const Real v, const Real w)
Order
defines an enum for polynomial orders.
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...
A specific instantiation of the FEBase class.
FENedelecOne objects are used for working with vector-valued Nedelec finite elements of the first kin...
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...
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
FE< 1, MONOMIAL > FEMonomial1D
Convenient definition for a 1D Monomial finite element.
FE< 2, L2_HIERARCHIC > FEL2Hierarchic2D
Convenient definition for a 2D Discontinuous Hierarchic finite element.
virtual void attach_quadrature_rule(QBase *q) override
Provides the class with the quadrature rule, which provides the locations (on a reference element) wh...
FE< 3, L2_HIERARCHIC > FEL2Hierarchic3D
Convenient definition for a 3D Discontinuous Hierarchic finite element.
static void init_subdivision_matrix(DenseMatrix< Real > &A, unsigned int valence)
Builds the subdivision matrix A for the Loop scheme.
void compute_face_values(const Elem *elem, const Elem *side, const std::vector< Real > &weights)
Compute the map & shape functions for this face.
void rational_fe_weighted_shapes_derivs(const Elem *elem, const FEType fe_type, std::vector< std::vector< Real >> &shapes, std::vector< std::vector< std::vector< Real >>> &derivs, const std::vector< Point > &p, const bool add_p_level)
Lagrange finite elements.
Monomial finite elements.
void init_dual_shape_functions(unsigned int n_shapes, unsigned int n_qp)
Init dual_phi and potentially dual_dphi, dual_d2phi.
FEClough(const FEType &fet)
Constructor.
static void loop_subdivision_mask(std::vector< Real > &weights, const unsigned int valence)
Fills the vector weights with the weight coefficients of the Loop subdivision mask for evaluating the...
static constexpr Real TOLERANCE
FE< 1, L2_LAGRANGE > FEL2Lagrange1D
Convenient definition for a 1D Discontinuous Lagrange finite element.
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)
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 sha...
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.
FEHierarchicVec objects are used for working with vector-valued high-order piecewise-continuous finit...
FERaviartThomas objects are used for working with vector-valued Raviart-Thomas finite elements...
static Point map(const Elem *elem, const Point &reference_point)
FERaviartThomas(const FEType &fet)
Constructor.
This is the base class from which all geometric element types are derived.
FEGenericBase< typename FEOutputType< T >::type >::OutputShape OutputShape
FE(const FEType &fet)
Constructor.
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
FE< 3, L2_LAGRANGE > FEL2Lagrange3D
Convenient definition for a 3D Discontinuous Lagrange finite element.
FEL2RaviartThomas(const FEType &fet)
Constructor.
virtual bool shapes_need_reinit() const override
FE< 1, HIERARCHIC > FEHierarchic1D
Convenient definition for a 1D Hierarchic finite element.
The libMesh namespace provides an interface to certain functionality in the library.
static Real hermite_raw_shape_second_deriv(const unsigned int basis_num, const Real xi)
1D hermite functions on unit interval
FEL2RaviartThomas objects are used for working with vector-valued discontinuous Raviart-Thomas finite...
FEXYZ(const FEType &fet)
Constructor.
FE< 2, LAGRANGE > FELagrange2D
Convenient definition for a 2D Lagrange finite element.
FELagrangeVec(const FEType &fet)
Constructor.
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.
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 FEAbstra...
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.
FEL2LagrangeVec(const FEType &fet)
Constructor.
static Real hermite_raw_shape(const unsigned int basis_num, const Real xi)
virtual void attach_quadrature_rule(QBase *q) override
Provides the class with the quadrature rule, which provides the locations (on a reference element) wh...
FE< 3, LAGRANGE > FELagrange3D
Convenient definition for a 3D Lagrange finite element.
FEClough< 2 > FEClough2D
Convenient definition for a 2D Clough-Tocher finite element.
FEL2Lagrange(const FEType &fet)
Constructor.
FEHierarchicVec objects are used for working with vector-valued high-order finite elements...
virtual bool is_hierarchic() const override
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't be...
This class handles the numbering of degrees of freedom on a mesh.
FEMonomialVec(const FEType &fet)
Constructor.
FEHierarchic(const FEType &fet)
Constructor.
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.
static Point map_eta(const Elem *elem, const Point &reference_point)
virtual unsigned int n_shape_functions() const override
A specific instantiation of the FEBase class.
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...
static Real regular_shape_second_deriv(const unsigned int i, const unsigned int j, const Real v, const Real w)
FEHermite(const FEType &fet)
Constructor.
FE< 3, HIERARCHIC > FEHierarchic3D
Convenient definition for a 3D Hierarchic finite element.
Discontinuous Hierarchic finite elements.
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.
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)
unsigned int monomial_n_dofs(const ElemType t, const Order o)
Helper functions for Discontinuous-Pn type basis functions.
FEL2Hierarchic(const FEType &fet)
Constructor.
FE< 2, MONOMIAL > FEMonomial2D
Convenient definition for a 2D Monomial finite element.
static Real regular_shape_deriv(const unsigned int i, const unsigned int j, const Real v, const Real w)
FEOutputType< T >::type OutputShape
Convenient typedefs for gradients of output, hessians of output, and potentially-complex-valued versi...
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))
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.
static unsigned int n_dofs_per_elem(const ElemType t, const Order o)
virtual FEContinuity get_continuity() const override
FENedelecOne(const FEType &fet)
Constructor.
void lagrange_nodal_soln(const Elem *elem, const Order order, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true)
Helper functions for Lagrange-based basis functions.
FEHierarchicVec(const FEType &fet)
Constructor.
virtual unsigned int n_quadrature_points() const override
Discontinuous Lagrange finite elements.
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...
Real rational_fe_shape(const Elem &elem, const FEType underlying_fe_type, const unsigned int i, const Point &p, const bool add_p_level)
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)
static unsigned int n_shape_functions(const ElemType t, const Order o)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
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...
FE< 2, HIERARCHIC > FEHierarchic2D
Convenient definition for a 2D Hierarchic finite element.
static Point map_zeta(const Elem *elem, const Point &reference_point)
Hierarchic finite elements.
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
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.
static Point map(const unsigned int dim, const Elem *elem, const Point &reference_point)
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)
FE< 3, MONOMIAL > FEMonomial3D
Convenient definition for a 3D Monomial finite element.
virtual void init_shape_functions(const std::vector< Point > &qp, const Elem *e)
Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc.
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 derivative of the shape function, evaluated at all points p.
FEMonomialVec objects are used for working with vector-valued discontinuous finite elements...
static Point map_deriv(const unsigned int dim, const Elem *elem, const unsigned int j, const Point &reference_point)
static Real hermite_raw_shape_deriv(const unsigned int basis_num, const Real xi)
FEL2LagrangeVec objects are used for working with vector-valued finite elements.
FE< 2, L2_LAGRANGE > FEL2Lagrange2D
Convenient definition for a 2D Discontinuous Lagrange finite element.
FE< 1, LAGRANGE > FELagrange1D
Convenient definition for a 1D Lagrange finite element.
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 shape function, evaluated at all points p.
The FEScalar class is used for working with SCALAR variables.
virtual void reinit_default_dual_shape_coeffs(const Elem *elem) override
This computes the default dual shape function coefficients.
FEScalar(const FEType &fet)
Constructor.
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.
FE< 1, L2_HIERARCHIC > FEL2Hierarchic1D
Convenient definition for a 1D Discontinuous Hierarchic finite element.
FEL2HierarchicVec(const FEType &fet)
Constructor.
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)
std::vector< Point > cached_nodes
An array of the node locations on the last element we computed on.
virtual void init_shape_functions(const std::vector< Point > &qp, const Elem *elem) override
Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc.
Clough-Tocher finite elements.
ElemType last_side
The last side and last edge we did a reinit on.
static Point inverse_map(const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
void rational_fe_weighted_shapes(const Elem *elem, const FEType underlying_fe_type, std::vector< std::vector< Real >> &shapes, const std::vector< Point > &p, const bool add_p_level)
Helper functions for rational basis functions.
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.
virtual void init_shape_functions(const std::vector< Point > &qp, const Elem *e) override
Update the various member data fields phi, dphidxi, dphideta, dphidzeta, etc.
A Point defines a location in LIBMESH_DIM dimensional Real space.
The constraint matrix storage format.
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.
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
Explicitly call base class method.
The QBase class provides the basic functionality from which various quadrature rules can be derived...
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
This class forms the foundation from which generic finite elements may be derived.
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
Most finite element types in libMesh are scalar-valued.
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.
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)
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.
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...
virtual void reinit(const Elem *, const unsigned int, const Real=TOLERANCE, const std::vector< Point > *const =nullptr, const std::vector< Real > *const =nullptr) override
This prevents some compilers being confused by partially overriding this virtual function.