20 #ifndef LIBMESH_FACE_INF_QUAD_H    21 #define LIBMESH_FACE_INF_QUAD_H    23 #include "libmesh/libmesh_config.h"    25 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS    28 #include "libmesh/elem.h"    66            Node ** nodelinkdata) :
    86     libmesh_assert_less(i, this->
n_nodes());
   101   virtual unsigned short dim() const override final { 
return 2; }
   108   virtual unsigned int n_sides() const override final { 
return 3; }
   113   virtual unsigned int n_vertices() const override final { 
return 4; }
   119   virtual unsigned int n_edges() const override final { 
return 3; }
   124   virtual unsigned int n_faces() const override final { 
return 0; }
   129   virtual unsigned int n_children() const override final { 
return 2; }
   134   virtual bool is_vertex(
const unsigned int i) 
const override final { 
return (i < 4); }
   139   virtual bool is_edge(
const unsigned int i) 
const override final { 
return (i >= 4 && i < 5); }
   144   virtual bool is_face(
const unsigned int i) 
const override final { 
return (i >= 5); }
   151     override final { 
return (i > 2 && i < 4); }
   157                                 const unsigned int s) 
const override final;
   182                                        unsigned int side_node) 
const override;
   190                                        unsigned int edge_node) 
const override;
   195   virtual std::unique_ptr<Elem> 
side_ptr (
const unsigned int i) 
override final;
   200   virtual void side_ptr (std::unique_ptr<Elem> & side, 
const unsigned int i) 
override final;
   205   virtual std::unique_ptr<Elem> 
build_edge_ptr (
const unsigned int i) 
override final   211   virtual void build_edge_ptr (std::unique_ptr<Elem> & edge, 
const unsigned int i) 
override final   221                                const unsigned int s) 
const override final   227   virtual std::vector<unsigned int> 
sides_on_edge(
const unsigned int e) 
const override final   247   virtual bool infinite () const override final { 
return true; }
   263   virtual void permute(
unsigned int) 
override final { libmesh_error(); }
   265   virtual bool is_flipped() const override final;
   298 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS   300 #endif // LIBMESH_FACE_INF_QUAD_H virtual unsigned int n_permutations() const override final
One non-infinite side; any orientation change flips the mapping Jacobian negative. 
virtual bool is_edge(const unsigned int i) const override final
We number edges next. 
virtual bool is_face(const unsigned int i) const override final
We number faces last. 
virtual std::pair< Real, Real > qual_bounds(const ElemQuality q) const override
virtual unsigned int n_faces() const override final
virtual std::vector< unsigned int > edges_adjacent_to_node(const unsigned int n) const override
A Node is like a Point, but with more information. 
virtual ~InfQuad()=default
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
virtual bool on_reference_element(const Point &p, const Real eps=TOLERANCE) const override final
virtual unsigned int n_edges() const override final
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
virtual dof_id_type key() const
static constexpr Real TOLERANCE
This is the base class from which all geometric element types are derived. 
static const Real _master_points[6][3]
Master element node locations. 
virtual bool is_vertex(const unsigned int i) const override final
We number vertices first. 
static const int num_sides
Geometric constants for all InfQuads. 
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override final
build_edge_ptr() and build_side_ptr() are identical in 2D. 
The libMesh namespace provides an interface to certain functionality in the library. 
void set_interior_parent(Elem *p)
Sets the pointer to the element's interior_parent. 
virtual bool is_edge_on_side(const unsigned int e, const unsigned int s) const override final
is_edge_on_side is trivial in 2D. 
virtual unsigned int n_vertices() const override final
virtual bool is_child_on_side(const unsigned int c, const unsigned int s) const override final
virtual Point origin() const override final
virtual unsigned int n_nodes() const =0
static const unsigned int adjacent_sides_map[4][2]
This maps the  node to the one or two side id(s) adjacent to the node. 
virtual unsigned short dim() const override final
  The InfQuad is an abstract element type that lives in two dimensions. 
ElemQuality
Defines an enum for element quality metrics. 
virtual void build_edge_ptr(std::unique_ptr< Elem > &edge, const unsigned int i) override final
side and edge are identical for faces. 
InfQuad(const unsigned int nn, Elem *p, Node **nodelinkdata)
Constructor. 
virtual bool is_mid_infinite_edge_node(const unsigned int i) const override final
virtual Real quality(const ElemQuality q) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Elem * _elemlinks_data[4+(LIBMESH_DIM >2)]
Data for links to parent/neighbor/interior_parent elements. 
virtual bool infinite() const override final
virtual unsigned int n_sides() const override final
virtual bool is_flipped() const override final
virtual unsigned int n_children() const override final
virtual dof_id_type low_order_key(const unsigned int s) const override
virtual Point master_point(const unsigned int i) const override final
static const int num_children
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override
Calls local_side_node(edge, edge_node). 
A Point defines a location in LIBMESH_DIM dimensional Real space. 
const Point & point(const unsigned int i) const
virtual std::vector< unsigned int > sides_on_edge(const unsigned int e) const override final
sides_on_edge is trivial in 2D. 
virtual void permute(unsigned int) override final
Permutes the element (by swapping node and neighbor pointers) according to the specified index...
virtual std::unique_ptr< Elem > side_ptr(const unsigned int i) override final
InfQuad & operator=(const InfQuad &)=delete