20 #ifndef LIBMESH_FE_ABSTRACT_H 21 #define LIBMESH_FE_ABSTRACT_H 30 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 34 #ifdef LIBMESH_FORWARD_DECLARE_ENUMS 53 template <
typename T>
class DenseMatrix;
54 template <
typename T>
class DenseVector;
60 template <
typename T>
class NumericVector;
63 #ifdef LIBMESH_ENABLE_NODE_CONSTRAINTS 64 class NodeConstraints;
67 #ifdef LIBMESH_ENABLE_PERIODIC 68 class PeriodicBoundaries;
69 class PointLocatorBase;
72 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 73 template <
unsigned int Dim, FEFamily T_radial, InfMapType T_map>
126 static std::unique_ptr<FEAbstract>
build (
const unsigned int dim,
144 const std::vector<Point> *
const pts =
nullptr,
145 const std::vector<Real> *
const weights =
nullptr) = 0;
156 const unsigned int side,
158 const std::vector<Point> *
const pts =
nullptr,
159 const std::vector<Real> *
const weights =
nullptr) = 0;
170 const unsigned int edge,
172 const std::vector<Point> * pts =
nullptr,
173 const std::vector<Real> * weights =
nullptr) = 0;
181 const unsigned int s,
182 const std::vector<Point> & reference_side_points,
183 std::vector<Point> & reference_points) = 0;
200 std::vector<Point> & nodes);
203 #ifdef LIBMESH_ENABLE_NODE_CONSTRAINTS 210 #endif // LIBMESH_ENABLE_NODE_CONSTRAINTS 212 #ifdef LIBMESH_ENABLE_PERIODIC 214 #ifdef LIBMESH_ENABLE_NODE_CONSTRAINTS 224 #endif // LIBMESH_ENABLE_NODE_CONSTRAINTS 226 #endif // LIBMESH_ENABLE_PERIODIC 239 {
return this->
_fe_map->get_xyz(); }
246 {
return this->
_fe_map->get_JxW(); }
253 {
return this->
_fe_map->get_dxyzdxi(); }
260 {
return this->
_fe_map->get_dxyzdeta(); }
267 {
return _fe_map->get_dxyzdzeta(); }
273 {
return this->
_fe_map->get_d2xyzdxi2(); }
279 {
return this->
_fe_map->get_d2xyzdeta2(); }
281 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 287 {
return this->
_fe_map->get_d2xyzdzeta2(); }
295 {
return this->
_fe_map->get_d2xyzdxideta(); }
297 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 303 {
return this->
_fe_map->get_d2xyzdxidzeta(); }
309 {
return this->
_fe_map->get_d2xyzdetadzeta(); }
318 {
return this->
_fe_map->get_dxidx(); }
325 {
return this->
_fe_map->get_dxidy(); }
332 {
return this->
_fe_map->get_dxidz(); }
339 {
return this->
_fe_map->get_detadx(); }
346 {
return this->
_fe_map->get_detady(); }
353 {
return this->
_fe_map->get_detadz(); }
360 {
return this->
_fe_map->get_dzetadx(); }
367 {
return this->
_fe_map->get_dzetady(); }
374 {
return this->
_fe_map->get_dzetadz(); }
380 {
return this->
_fe_map->get_tangents(); }
386 {
return this->
_fe_map->get_normals(); }
392 {
return this->
_fe_map->get_curvatures();}
472 virtual void print_phi(std::ostream & os)
const =0;
479 virtual void print_dphi(std::ostream & os)
const =0;
481 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 488 virtual void print_d2phi(std::ostream & os)
const =0;
612 #endif // LIBMESH_FE_ABSTRACT_H
const std::vector< Real > & get_curvatures() const
Manages the family, order, etc. parameters for a given FE.
const std::vector< Real > & get_detady() const
virtual bool is_hierarchic() const =0
virtual void print_phi(std::ostream &os) const =0
unsigned int get_p_level() const
bool calculations_started
const std::vector< Point > & get_xyz() const
bool shapes_on_quadrature
const std::vector< Real > & get_dzetadz() const
const std::vector< Real > & get_detadx() const
static void compute_node_constraints(NodeConstraints &constraints, const Elem *elem)
unsigned int get_dim() const
ElemType get_type() const
const std::vector< std::vector< Point > > & get_tangents() const
Maps between boundary ids and PeriodicBoundaryBase objects.
const std::vector< RealGradient > & get_d2xyzdetadzeta() const
const std::vector< RealGradient > & get_dxyzdzeta() const
const std::vector< Real > & get_dxidy() const
const std::vector< RealGradient > & get_d2xyzdeta2() const
const std::vector< RealGradient > & get_dxyzdxi() const
The base class for all geometric element types.
virtual unsigned int n_quadrature_points() const =0
FEAbstract(const unsigned int dim, const FEType &fet)
static const Real TOLERANCE
static bool on_reference_element(const Point &p, const ElemType t, const Real eps=TOLERANCE)
virtual FEContinuity get_continuity() const =0
FEType get_fe_type() const
virtual unsigned int n_shape_functions() const =0
virtual void print_dphi(std::ostream &os) const =0
const std::vector< Point > & get_normals() const
const std::vector< Real > & get_dzetady() const
void print_xyz(std::ostream &os) const
const std::vector< RealGradient > & get_d2xyzdzeta2() const
const std::vector< Real > & get_JxW() const
static void get_refspace_nodes(const ElemType t, std::vector< Point > &nodes)
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
virtual bool shapes_need_reinit() const =0
const std::vector< RealGradient > & get_d2xyzdxideta() const
const std::vector< Real > & get_dxidz() const
void print_JxW(std::ostream &os) const
void print_info(std::ostream &os) const
virtual void edge_reinit(const Elem *elem, const unsigned int edge, const Real tolerance=TOLERANCE, const std::vector< Point > *pts=nullptr, const std::vector< Real > *weights=nullptr)=0
virtual void compute_shape_functions(const Elem *, const std::vector< Point > &)=0
const std::vector< RealGradient > & get_dxyzdeta() const
const std::vector< Real > & get_detadz() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static std::unique_ptr< FEAbstract > build(const unsigned int dim, const FEType &type)
const std::vector< Real > & get_dzetadx() const
FEFamily get_family() const
friend std::ostream & operator<<(std::ostream &os, const FEAbstract &fe)
void set_fe_order(int new_order)
const std::vector< Real > & get_dxidx() const
virtual void print_d2phi(std::ostream &os) const =0
const FEMap & get_fe_map() const
std::unique_ptr< FEMap > _fe_map
const std::vector< RealGradient > & get_d2xyzdxidzeta() const
Computes finite element mapping function values, gradients, etc.
A geometric point in (x,y,z) space.
virtual void attach_quadrature_rule(QBase *q)=0
Base class for all quadrature families and orders.
const std::vector< RealGradient > & get_d2xyzdxi2() const
static void compute_periodic_node_constraints(NodeConstraints &constraints, const PeriodicBoundaries &boundaries, const MeshBase &mesh, const PointLocatorBase *point_locator, const Elem *elem)
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)=0