libMesh
fe.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2019 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 #ifndef LIBMESH_FE_H
21 #define LIBMESH_FE_H
22 
23 // Local includes
24 #include "libmesh/fe_base.h"
25 #include "libmesh/libmesh.h"
26 
27 // C++ includes
28 #include <cstddef>
29 
30 namespace libMesh
31 {
32 
33 // forward declarations
34 class DofConstraints;
35 class DofMap;
36 
37 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
38 
39 template <unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map>
40 class InfFE;
41 
42 #endif
43 
44 
48 template <FEFamily T>
50 {
51  typedef Real type;
52 };
53 
54 
58 template<>
60 {
62 };
63 
64 template<>
66 {
68 };
69 
70 template<>
72 {
74 };
75 
76 
94 template <unsigned int Dim, FEFamily T>
95 class FE : public FEGenericBase<typename FEOutputType<T>::type>
96 {
97 public:
98 
102  explicit
103  FE(const FEType & fet);
104 
105  typedef typename
108 
117  static OutputShape shape(const ElemType t,
118  const Order o,
119  const unsigned int i,
120  const Point & p);
121 
132  static OutputShape shape(const Elem * elem,
133  const Order o,
134  const unsigned int i,
135  const Point & p,
136  const bool add_p_level = true);
137 
145  static OutputShape shape_deriv(const ElemType t,
146  const Order o,
147  const unsigned int i,
148  const unsigned int j,
149  const Point & p);
150 
159  static OutputShape shape_deriv(const Elem * elem,
160  const Order o,
161  const unsigned int i,
162  const unsigned int j,
163  const Point & p,
164  const bool add_p_level = true);
165 
166 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
167 
187  static OutputShape shape_second_deriv(const ElemType t,
188  const Order o,
189  const unsigned int i,
190  const unsigned int j,
191  const Point & p);
192 
215  static OutputShape shape_second_deriv(const Elem * elem,
216  const Order o,
217  const unsigned int i,
218  const unsigned int j,
219  const Point & p,
220  const bool add_p_level = true);
221 
222 #endif //LIBMESH_ENABLE_SECOND_DERIVATIVES
223 
229  static void nodal_soln(const Elem * elem, const Order o,
230  const std::vector<Number> & elem_soln,
231  std::vector<Number> & nodal_soln);
232 
237  virtual unsigned int n_shape_functions () const override;
238 
245  static unsigned int n_shape_functions (const ElemType t,
246  const Order o)
247  { return FE<Dim,T>::n_dofs (t,o); }
248 
255  static unsigned int n_dofs(const ElemType t,
256  const Order o);
257 
264  static unsigned int n_dofs_at_node(const ElemType t,
265  const Order o,
266  const unsigned int n);
267 
274  static unsigned int n_dofs_per_elem(const ElemType t,
275  const Order o);
276 
280  virtual FEContinuity get_continuity() const override;
281 
286  virtual bool is_hierarchic() const override;
287 
294  static void dofs_on_side(const Elem * const elem,
295  const Order o,
296  unsigned int s,
297  std::vector<unsigned int> & di);
304  static void dofs_on_edge(const Elem * const elem,
305  const Order o,
306  unsigned int e,
307  std::vector<unsigned int> & di);
308 
309  static Point inverse_map (const Elem * elem,
310  const Point & p,
311  const Real tolerance = TOLERANCE,
312  const bool secure = true) {
313  // libmesh_deprecated(); // soon
314  return FEMap::inverse_map(Dim, elem, p, tolerance, secure);
315  }
316 
317  static void inverse_map (const Elem * elem,
318  const std::vector<Point> & physical_points,
319  std::vector<Point> & reference_points,
320  const Real tolerance = TOLERANCE,
321  const bool secure = true) {
322  // libmesh_deprecated(); // soon
323  FEMap::inverse_map(Dim, elem, physical_points, reference_points,
324  tolerance, secure);
325  }
326 
337  virtual void reinit (const Elem * elem,
338  const std::vector<Point> * const pts = nullptr,
339  const std::vector<Real> * const weights = nullptr) override;
340 
350  virtual void reinit (const Elem * elem,
351  const unsigned int side,
352  const Real tolerance = TOLERANCE,
353  const std::vector<Point> * const pts = nullptr,
354  const std::vector<Real> * const weights = nullptr) override;
355 
365  virtual void edge_reinit (const Elem * elem,
366  const unsigned int edge,
367  const Real tolerance = TOLERANCE,
368  const std::vector<Point> * const pts = nullptr,
369  const std::vector<Real> * const weights = nullptr) override;
370 
375  virtual void side_map (const Elem * elem,
376  const Elem * side,
377  const unsigned int s,
378  const std::vector<Point> & reference_side_points,
379  std::vector<Point> & reference_points) override;
380 
386  virtual void attach_quadrature_rule (QBase * q) override;
387 
393  virtual unsigned int n_quadrature_points () const override;
394 
395 #ifdef LIBMESH_ENABLE_AMR
396 
402  static void compute_constraints (DofConstraints & constraints,
403  DofMap & dof_map,
404  const unsigned int variable_number,
405  const Elem * elem);
406 #endif // #ifdef LIBMESH_ENABLE_AMR
407 
414  virtual bool shapes_need_reinit() const override;
415 
416  static Point map (const Elem * elem,
417  const Point & reference_point) {
418  // libmesh_deprecated(); // soon
419  return FEMap::map(Dim, elem, reference_point);
420  }
421 
422  static Point map_xi (const Elem * elem,
423  const Point & reference_point) {
424  // libmesh_deprecated(); // soon
425  return FEMap::map_deriv(Dim, elem, 0, reference_point);
426  }
427 
428  static Point map_eta (const Elem * elem,
429  const Point & reference_point) {
430  // libmesh_deprecated(); // soon
431  return FEMap::map_deriv(Dim, elem, 1, reference_point);
432  }
433 
434  static Point map_zeta (const Elem * elem,
435  const Point & reference_point) {
436  // libmesh_deprecated(); // soon
437  return FEMap::map_deriv(Dim, elem, 2, reference_point);
438  }
439 
440 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
441 
445  template <unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map>
446  friend class InfFE;
447 #endif
448 
449 protected:
450 
458  virtual void init_shape_functions(const std::vector<Point> & qp,
459  const Elem * e);
460 
461 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
462 
467  virtual void init_base_shape_functions(const std::vector<Point> & qp,
468  const Elem * e) override;
469 
470 #endif
471 
476  std::vector<Point> cached_nodes;
477 
482 
483  unsigned int last_edge;
484 };
485 
486 
487 
495 template <unsigned int Dim>
496 class FEClough : public FE<Dim,CLOUGH>
497 {
498 public:
499 
504  explicit
505  FEClough(const FEType & fet) :
506  FE<Dim,CLOUGH> (fet)
507  {}
508 };
509 
510 
511 
519 template <unsigned int Dim>
520 class FEHermite : public FE<Dim,HERMITE>
521 {
522 public:
523 
528  explicit
529  FEHermite(const FEType & fet) :
530  FE<Dim,HERMITE> (fet)
531  {}
532 
533 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
534 
537  static Real hermite_raw_shape_second_deriv(const unsigned int basis_num,
538  const Real xi);
539 #endif
540  static Real hermite_raw_shape_deriv(const unsigned int basis_num,
541  const Real xi);
542  static Real hermite_raw_shape(const unsigned int basis_num,
543  const Real xi);
544 };
545 
546 
547 
554 template <>
555 Real FE<2,SUBDIVISION>::shape(const Elem * elem,
556  const Order order,
557  const unsigned int i,
558  const Point & p,
559  const bool add_p_level);
560 
561 template <>
562 Real FE<2,SUBDIVISION>::shape_deriv(const Elem * elem,
563  const Order order,
564  const unsigned int i,
565  const unsigned int j,
566  const Point & p,
567  const bool add_p_level);
568 
569 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
570 template <>
572  const Order order,
573  const unsigned int i,
574  const unsigned int j,
575  const Point & p,
576  const bool add_p_level);
577 
578 #endif
579 
580 class FESubdivision : public FE<2,SUBDIVISION>
581 {
582 public:
583 
589  FESubdivision(const FEType & fet);
590 
601  virtual void reinit (const Elem * elem,
602  const std::vector<Point> * const pts = nullptr,
603  const std::vector<Real> * const weights = nullptr) override;
604 
609  virtual void reinit (const Elem *,
610  const unsigned int,
611  const Real = TOLERANCE,
612  const std::vector<Point> * const = nullptr,
613  const std::vector<Real> * const = nullptr) override
614  { libmesh_not_implemented(); }
615 
621  virtual void attach_quadrature_rule (QBase * q) override;
622 
630  virtual void init_shape_functions(const std::vector<Point> & qp,
631  const Elem * elem) override;
632 
639  static Real regular_shape(const unsigned int i,
640  const Real v,
641  const Real w);
642 
649  static Real regular_shape_deriv(const unsigned int i,
650  const unsigned int j,
651  const Real v,
652  const Real w);
653 
654 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
655 
661  static Real regular_shape_second_deriv(const unsigned int i,
662  const unsigned int j,
663  const Real v,
664  const Real w);
665 
666 
667 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVE
668 
677  static void loop_subdivision_mask(std::vector<Real> & weights,
678  const unsigned int valence);
679 
680 
686  unsigned int valence);
687 };
688 
689 
690 
698 template <unsigned int Dim>
699 class FEHierarchic : public FE<Dim,HIERARCHIC>
700 {
701 public:
702 
707  explicit
708  FEHierarchic(const FEType & fet) :
709  FE<Dim,HIERARCHIC> (fet)
710  {}
711 };
712 
713 
714 
722 template <unsigned int Dim>
723 class FEL2Hierarchic : public FE<Dim,L2_HIERARCHIC>
724 {
725 public:
726 
731  explicit
732  FEL2Hierarchic(const FEType & fet) :
733  FE<Dim,L2_HIERARCHIC> (fet)
734  {}
735 };
736 
737 
738 
746 template <unsigned int Dim>
747 class FELagrange : public FE<Dim,LAGRANGE>
748 {
749 public:
750 
755  explicit
756  FELagrange(const FEType & fet) :
757  FE<Dim,LAGRANGE> (fet)
758  {}
759 };
760 
761 
765 template <unsigned int Dim>
766 class FEL2Lagrange : public FE<Dim,L2_LAGRANGE>
767 {
768 public:
769 
774  explicit
775  FEL2Lagrange(const FEType & fet) :
776  FE<Dim,L2_LAGRANGE> (fet)
777  {}
778 };
779 
780 
788 template <unsigned int Dim>
789 class FEMonomial : public FE<Dim,MONOMIAL>
790 {
791 public:
792 
797  explicit
798  FEMonomial(const FEType & fet) :
799  FE<Dim,MONOMIAL> (fet)
800  {}
801 };
802 
803 
807 template <unsigned int Dim>
808 class FEScalar : public FE<Dim,SCALAR>
809 {
810 public:
811 
818  explicit
819  FEScalar(const FEType & fet) :
820  FE<Dim,SCALAR> (fet)
821  {}
822 };
823 
824 
833 template <unsigned int Dim>
834 class FEXYZ : public FE<Dim,XYZ>
835 {
836 public:
837 
842  explicit
843  FEXYZ(const FEType & fet) :
844  FE<Dim,XYZ> (fet)
845  {}
846 
852  virtual void reinit (const Elem * elem,
853  const std::vector<Point> * const pts = nullptr,
854  const std::vector<Real> * const weights = nullptr) override
855  { FE<Dim,XYZ>::reinit (elem, pts, weights); }
856 
861  virtual void reinit (const Elem * elem,
862  const unsigned int side,
863  const Real tolerance = TOLERANCE,
864  const std::vector<Point> * const pts = nullptr,
865  const std::vector<Real> * const weights = nullptr) override;
866 
867 
868 protected:
869 
877  virtual void init_shape_functions(const std::vector<Point> & qp,
878  const Elem * e) override;
879 
890  virtual void compute_shape_functions(const Elem * elem, const std::vector<Point> & qp) override;
891 
895  void compute_face_values (const Elem * elem,
896  const Elem * side,
897  const std::vector<Real> & weights);
898 };
899 
900 
901 
909 template <unsigned int Dim>
910 class FELagrangeVec : public FE<Dim,LAGRANGE_VEC>
911 {
912 public:
913 
918  explicit
919  FELagrangeVec(const FEType & fet) :
920  FE<Dim,LAGRANGE_VEC> (fet)
921  {}
922 };
923 
924 
925 
933 template <unsigned int Dim>
934 class FENedelecOne : public FE<Dim,NEDELEC_ONE>
935 {
936 public:
941  explicit
942  FENedelecOne(const FEType & fet) :
943  FE<Dim,NEDELEC_ONE> (fet)
944  {}
945 };
946 
954 template <unsigned int Dim>
955 class FEMonomialVec : public FE<Dim,MONOMIAL_VEC>
956 {
957 public:
958 
963  explicit
964  FEMonomialVec(const FEType & fet) :
965  FE<Dim,MONOMIAL_VEC> (fet)
966  {}
967 };
968 
969 
970 
974 namespace FiniteElements
975 {
981 
987 
993 
999 
1000 
1006 
1012 
1018 
1019 
1025 
1031 
1037 
1038 
1044 
1050 
1056 
1057 
1063 
1069 
1075 
1076 }
1077 
1078 } // namespace libMesh
1079 
1080 #endif // LIBMESH_FE_H
libMesh::FESubdivision::FESubdivision
FESubdivision(const FEType &fet)
Constructor.
Definition: fe_subdivision_2D.C:33
libMesh::DofConstraints
The constraint matrix storage format.
Definition: dof_map.h:105
libMesh::FE::shape_second_deriv
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
libMesh::QBase
The QBase class provides the basic functionality from which various quadrature rules can be derived.
Definition: quadrature.h:61
libMesh::FEClough::FEClough
FEClough(const FEType &fet)
Constructor.
Definition: fe.h:505
libMesh::FELagrange::FELagrange
FELagrange(const FEType &fet)
Constructor.
Definition: fe.h:756
libMesh::CLOUGH
Definition: enum_fe_family.h:53
libMesh::FESubdivision::init_subdivision_matrix
static void init_subdivision_matrix(DenseMatrix< Real > &A, unsigned int valence)
Builds the subdivision matrix A for the Loop scheme.
Definition: fe_subdivision_2D.C:42
libMesh::FEHermite::FEHermite
FEHermite(const FEType &fet)
Constructor.
Definition: fe.h:529
libMesh::FE::OutputShape
FEGenericBase< typename FEOutputType< T >::type >::OutputShape OutputShape
Definition: fe.h:107
libMesh::FE::dofs_on_side
static void dofs_on_side(const Elem *const elem, const Order o, unsigned int s, std::vector< unsigned int > &di)
Fills the vector di with the local degree of freedom indices associated with side s of element elem.
Definition: fe.C:77
libMesh::FESubdivision::regular_shape_second_deriv
static Real regular_shape_second_deriv(const unsigned int i, const unsigned int j, const Real v, const Real w)
Definition: fe_subdivision_2D.C:280
libMesh::FE::n_shape_functions
virtual unsigned int n_shape_functions() const override
Definition: fe.C:50
libMesh::FEGenericBase< FEOutputType< T >::type >::OutputShape
FEOutputType< T >::type OutputShape
Convenient typedefs for gradients of output, hessians of output, and potentially-complex-valued versi...
Definition: fe_base.h:118
libMesh::FiniteElements::FEHierarchic2D
FE< 2, HIERARCHIC > FEHierarchic2D
Convenient definition for a 2D Hierarchic finite element.
Definition: fe.h:992
libMesh::L2_HIERARCHIC
Definition: enum_fe_family.h:40
libMesh::FiniteElements::FEMonomial2D
FE< 2, MONOMIAL > FEMonomial2D
Convenient definition for a 2D Monomial finite element.
Definition: fe.h:1068
libMesh::FESubdivision::init_shape_functions
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.
Definition: fe_subdivision_2D.C:406
libMesh::FEMap::map_deriv
static Point map_deriv(const unsigned int dim, const Elem *elem, const unsigned int j, const Point &reference_point)
Definition: fe_map.C:2076
libMesh::FE::map_eta
static Point map_eta(const Elem *elem, const Point &reference_point)
Definition: fe.h:428
libMesh::FEL2Lagrange::FEL2Lagrange
FEL2Lagrange(const FEType &fet)
Constructor.
Definition: fe.h:775
libMesh::FELagrangeVec::FELagrangeVec
FELagrangeVec(const FEType &fet)
Constructor.
Definition: fe.h:919
libMesh::InfFE
A specific instantiation of the FEBase class.
Definition: fe.h:40
libMesh::FENedelecOne::FENedelecOne
FENedelecOne(const FEType &fet)
Constructor.
Definition: fe.h:942
libMesh::HERMITE
Definition: enum_fe_family.h:54
libMesh::FEXYZ::compute_shape_functions
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...
Definition: fe_xyz.C:709
libMesh::FE::map_xi
static Point map_xi(const Elem *elem, const Point &reference_point)
Definition: fe.h:422
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
libMesh::XYZ
Definition: enum_fe_family.h:46
libMesh::FEGenericBase
This class forms the foundation from which generic finite elements may be derived.
Definition: exact_error_estimator.h:39
libMesh::FEMonomial::FEMonomial
FEMonomial(const FEType &fet)
Constructor.
Definition: fe.h:798
libMesh::Order
Order
Definition: enum_order.h:40
libMesh::FiniteElements::FELagrange3D
FE< 3, LAGRANGE > FELagrange3D
Convenient definition for a 3D Lagrange finite element.
Definition: fe.h:1036
libMesh::TOLERANCE
static const Real TOLERANCE
Definition: libmesh_common.h:128
libMesh::DenseMatrix< Real >
libMesh::FEHermite::hermite_raw_shape_second_deriv
static Real hermite_raw_shape_second_deriv(const unsigned int basis_num, const Real xi)
1D hermite functions on unit interval
libMesh::FEOutputType< NEDELEC_ONE >::type
RealVectorValue type
Definition: fe.h:67
libMesh::MONOMIAL_VEC
Definition: enum_fe_family.h:62
libMesh::FE::reinit
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:129
libMesh::FiniteElements::FEL2Lagrange3D
FE< 3, L2_LAGRANGE > FEL2Lagrange3D
Convenient definition for a 3D Discontinuous Lagrange finite element.
Definition: fe.h:1055
libMesh::FEMap::map
static Point map(const unsigned int dim, const Elem *elem, const Point &reference_point)
Definition: fe_map.C:2043
libMesh::FE::map
static Point map(const Elem *elem, const Point &reference_point)
Definition: fe.h:416
libMesh::FENedelecOne
FENedelecOne objects are used for working with vector-valued Nedelec finite elements of the first kin...
Definition: fe.h:934
libMesh::FEHermite
Hermite finite elements.
Definition: fe.h:520
libMesh::FESubdivision
Definition: fe.h:580
libMesh::FE::last_edge
unsigned int last_edge
Definition: fe.h:483
libMesh::FEScalar::FEScalar
FEScalar(const FEType &fet)
Constructor.
Definition: fe.h:819
libMesh::VectorValue< Real >
libMesh::FiniteElements::FELagrange2D
FE< 2, LAGRANGE > FELagrange2D
Convenient definition for a 2D Lagrange finite element.
Definition: fe.h:1030
libMesh::FE::shape
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
libMesh::FEXYZ::reinit
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.
Definition: fe.h:852
libMesh::FEMap::inverse_map
static Point inverse_map(const unsigned int dim, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
Definition: fe_map.C:1622
libMesh::FE::shape_deriv
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
libMesh::FEHermite::hermite_raw_shape
static Real hermite_raw_shape(const unsigned int basis_num, const Real xi)
libMesh::FESubdivision::reinit
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.
Definition: fe.h:609
libMesh::FiniteElements::FELagrange1D
FE< 1, LAGRANGE > FELagrange1D
Convenient definition for a 1D Lagrange finite element.
Definition: fe.h:1024
libMesh::FiniteElements::FEClough2D
FEClough< 2 > FEClough2D
Convenient definition for a 2D Clough-Tocher finite element.
Definition: fe.h:980
libMesh::FiniteElements::FEL2Hierarchic2D
FE< 2, L2_HIERARCHIC > FEL2Hierarchic2D
Convenient definition for a 2D Discontinuous Hierarchic finite element.
Definition: fe.h:1011
libMesh::FE::inverse_map
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)
Definition: fe.h:317
libMesh::FE::init_base_shape_functions
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.
Definition: fe.C:548
libMesh::FE
A specific instantiation of the FEBase class.
Definition: fe.h:95
libMesh::FESubdivision::attach_quadrature_rule
virtual void attach_quadrature_rule(QBase *q) override
Provides the class with the quadrature rule, which provides the locations (on a reference element) wh...
Definition: fe_subdivision_2D.C:650
libMesh::FE::edge_reinit
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.
Definition: fe_boundary.C:232
libMesh::FESubdivision::loop_subdivision_mask
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...
Definition: fe_subdivision_2D.C:394
libMesh::FELagrangeVec
FELagrangeVec objects are used for working with vector-valued finite elements.
Definition: fe.h:910
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
libMesh::FE::compute_constraints
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...
libMesh::FE::FE
FE(const FEType &fet)
Constructor.
Definition: fe.C:37
libMesh::FiniteElements::FEL2Hierarchic3D
FE< 3, L2_HIERARCHIC > FEL2Hierarchic3D
Convenient definition for a 3D Discontinuous Hierarchic finite element.
Definition: fe.h:1017
libMesh::FE::init_shape_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.
Definition: fe.C:292
libMesh::FEClough
Clough-Tocher finite elements.
Definition: fe.h:496
libMesh::FESubdivision::regular_shape_deriv
static Real regular_shape_deriv(const unsigned int i, const unsigned int j, const Real v, const Real w)
Definition: fe_subdivision_2D.C:190
A
static PetscErrorCode Mat * A
Definition: petscdmlibmeshimpl.C:1026
libMesh::FEMonomialVec::FEMonomialVec
FEMonomialVec(const FEType &fet)
Constructor.
Definition: fe.h:964
libMesh::FE::last_side
ElemType last_side
The last side and last edge we did a reinit on.
Definition: fe.h:481
libMesh::HIERARCHIC
Definition: enum_fe_family.h:37
libMesh::MONOMIAL
Definition: enum_fe_family.h:39
libMesh::FiniteElements::FEMonomial3D
FE< 3, MONOMIAL > FEMonomial3D
Convenient definition for a 3D Monomial finite element.
Definition: fe.h:1074
libMesh::FEXYZ::compute_face_values
void compute_face_values(const Elem *elem, const Elem *side, const std::vector< Real > &weights)
Compute the map & shape functions for this face.
Definition: fe_xyz_boundary.C:128
libMesh::FE::shapes_need_reinit
virtual bool shapes_need_reinit() const override
libMesh::FiniteElements::FEL2Lagrange1D
FE< 1, L2_LAGRANGE > FEL2Lagrange1D
Convenient definition for a 1D Discontinuous Lagrange finite element.
Definition: fe.h:1043
libMesh::FEHierarchic
Hierarchic finite elements.
Definition: fe.h:699
libMesh::FiniteElements::FEHierarchic1D
FE< 1, HIERARCHIC > FEHierarchic1D
Convenient definition for a 1D Hierarchic finite element.
Definition: fe.h:986
libMesh::FE::map_zeta
static Point map_zeta(const Elem *elem, const Point &reference_point)
Definition: fe.h:434
libMesh::FEType
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:178
libMesh::FEL2Hierarchic
Discontinuous Hierarchic finite elements.
Definition: fe.h:723
libMesh::FE::n_dofs_at_node
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
libMesh::FE::nodal_soln
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln)
Build the nodal soln from the element soln.
libMesh::FE::get_continuity
virtual FEContinuity get_continuity() const override
libMesh::DofMap
This class handles the numbering of degrees of freedom on a mesh.
Definition: dof_map.h:176
libMesh::FiniteElements::FEHierarchic3D
FE< 3, HIERARCHIC > FEHierarchic3D
Convenient definition for a 3D Hierarchic finite element.
Definition: fe.h:998
libMesh::FE::n_dofs_per_elem
static unsigned int n_dofs_per_elem(const ElemType t, const Order o)
libMesh::NEDELEC_ONE
Definition: enum_fe_family.h:61
libMesh::FiniteElements::FEL2Lagrange2D
FE< 2, L2_LAGRANGE > FEL2Lagrange2D
Convenient definition for a 2D Discontinuous Lagrange finite element.
Definition: fe.h:1049
libMesh::FE::is_hierarchic
virtual bool is_hierarchic() const override
libMesh::FEHierarchic::FEHierarchic
FEHierarchic(const FEType &fet)
Constructor.
Definition: fe.h:708
libMesh::FELagrange
Lagrange finite elements.
Definition: fe.h:747
libMesh::Elem
This is the base class from which all geometric element types are derived.
Definition: elem.h:100
libMesh::FiniteElements::FEMonomial1D
FE< 1, MONOMIAL > FEMonomial1D
Convenient definition for a 1D Monomial finite element.
Definition: fe.h:1062
libMesh::FEOutputType
Most finite element types in libMesh are scalar-valued.
Definition: fe.h:49
libMesh::L2_LAGRANGE
Definition: enum_fe_family.h:41
libMesh::FE::attach_quadrature_rule
virtual void attach_quadrature_rule(QBase *q) override
Provides the class with the quadrature rule, which provides the locations (on a reference element) wh...
Definition: fe.C:58
libMesh::FESubdivision::reinit
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.
libMesh::FE::n_dofs
static unsigned int n_dofs(const ElemType t, const Order o)
libMesh::LAGRANGE_VEC
Definition: enum_fe_family.h:60
libMesh::FEXYZ::init_shape_functions
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.
Definition: fe_xyz.C:598
libMesh::FEXYZ::FEXYZ
FEXYZ(const FEType &fet)
Constructor.
Definition: fe.h:843
libMesh::FiniteElements::FEL2Hierarchic1D
FE< 1, L2_HIERARCHIC > FEL2Hierarchic1D
Convenient definition for a 1D Discontinuous Hierarchic finite element.
Definition: fe.h:1005
libMesh::LAGRANGE
Definition: enum_fe_family.h:36
libMesh::SCALAR
Definition: enum_fe_family.h:58
libMesh::FEL2Hierarchic::FEL2Hierarchic
FEL2Hierarchic(const FEType &fet)
Constructor.
Definition: fe.h:732
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition: libmesh_common.h:121
libMesh::FE::dofs_on_edge
static void dofs_on_edge(const Elem *const elem, const Order o, unsigned int e, std::vector< unsigned int > &di)
Fills the vector di with the local degree of freedom indices associated with edge e of element elem.
Definition: fe.C:103
libMesh::FEOutputType::type
Real type
Definition: fe.h:51
libMesh::FEContinuity
FEContinuity
Definition: enum_fe_family.h:77
libMesh::FEMonomialVec
FEMonomialVec objects are used for working with vector-valued discontinuous finite elements.
Definition: fe.h:955
libMesh::FE::inverse_map
static Point inverse_map(const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
Definition: fe.h:309
libMesh::FE::n_shape_functions
static unsigned int n_shape_functions(const ElemType t, const Order o)
Definition: fe.h:245
libMesh::FESubdivision::regular_shape
static Real regular_shape(const unsigned int i, const Real v, const Real w)
Definition: fe_subdivision_2D.C:134
libMesh::FE::side_map
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:325
libMesh::FE::n_quadrature_points
virtual unsigned int n_quadrature_points() const override
Definition: fe.C:69
libMesh::FEScalar
The FEScalar class is used for working with SCALAR variables.
Definition: fe.h:808
libMesh::FEOutputType< MONOMIAL_VEC >::type
RealVectorValue type
Definition: fe.h:73
libMesh::FEL2Lagrange
Discontinuous Lagrange finite elements.
Definition: fe.h:766
libMesh::FEHermite::hermite_raw_shape_deriv
static Real hermite_raw_shape_deriv(const unsigned int basis_num, const Real xi)
libMesh::ElemType
ElemType
Defines an enum for geometric element types.
Definition: enum_elem_type.h:33
libMesh::FEOutputType< LAGRANGE_VEC >::type
RealVectorValue type
Definition: fe.h:61
libMesh::FE::cached_nodes
std::vector< Point > cached_nodes
An array of the node locations on the last element we computed on.
Definition: fe.h:476
libMesh::FEMonomial
Monomial finite elements.
Definition: fe.h:789
libMesh::FEXYZ
XYZ finite elements.
Definition: fe.h:834