20 #ifndef LIBMESH_CELL_POLYHEDRON_H    21 #define LIBMESH_CELL_POLYHEDRON_H    25 #include "libmesh/libmesh_common.h"    26 #include "libmesh/cell.h"    51   Polyhedron (
const std::vector<std::shared_ptr<Polygon>> & sides,
   116                                 const unsigned int s) 
const override;
   122   virtual unsigned int opposite_side(
const unsigned int s) 
const override final;
   129                                      const unsigned int s) 
const override final;
   162                                        unsigned int side_node) 
const override;
   170                                        unsigned int edge_node) 
const override;
   175   virtual std::unique_ptr<Elem> 
side_ptr (
const unsigned int i) 
override final;
   180   virtual std::unique_ptr<Elem> 
side_ptr (
const unsigned int i) 
const;
   185   virtual void side_ptr (std::unique_ptr<Elem> & elem,
   186                          const unsigned int i) 
override final;
   191   virtual std::unique_ptr<Elem> 
build_side_ptr (
const unsigned int i) 
override;
   197                                const unsigned int i) 
override;
   205   virtual std::unique_ptr<Elem> 
build_edge_ptr (
const unsigned int i) 
override final;
   212   virtual void build_edge_ptr (std::unique_ptr<Elem> & edge, 
const unsigned int i) 
override final;
   223   virtual std::vector<unsigned int> 
sides_on_edge(
const unsigned int e) 
const override final;
   229                                const unsigned int s) 
const override final;
   238   virtual void permute(
unsigned int libmesh_dbg_var(perm_num)) 
override final   239   { libmesh_assert_equal_to(perm_num, 0); }
   241   virtual bool is_flipped() const override final;
   307   std::tuple<unsigned int, Real, Real, Real>
   323   std::vector<std::shared_ptr<Polygon>> 
side_clones() 
const;
   330                            unsigned int min_node,
   331                            unsigned int max_node) 
const;
   358   std::vector<std::tuple<std::shared_ptr<Polygon>,
   387 #endif // LIBMESH_CELL_POLYHEDRON_H Polyhedron & operator=(const Polyhedron &)=delete
virtual unsigned int n_nodes() const override
std::vector< Elem * > _elemlinks_data
Data for links to parent/neighbor/interior_parent elements. 
The Polyhedron is an element in 3D with an arbitrary number of polygonal faces. 
virtual bool is_child_on_side(const unsigned int c, const unsigned int s) const override
virtual unsigned int n_permutations() const override
Maybe we have non-identity permutations, but trying to figure out how many is an exercise in applied ...
std::vector< Node * > _nodelinks_data
Data for links to nodes. 
virtual unsigned int opposite_side(const unsigned int s) const override final
Throws an error. 
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
virtual dof_id_type key() const
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override
Similar to Elem::local_side_node(), but instead of a side id, takes an edge id and a node id on that ...
static constexpr Real TOLERANCE
virtual std::array< Point, 4 > master_subelement(unsigned int i) const
std::vector< std::tuple< std::shared_ptr< Polygon >, bool, std::vector< unsigned int > > > _sidelinks_data
Data for links to sides. 
virtual std::pair< Real, Real > qual_bounds(const ElemQuality q) const override
virtual bool on_reference_element(const Point &p, const Real eps=TOLERANCE) const override final
This is the base class from which all geometric element types are derived. 
static const int num_children
Polyhedron(const std::vector< std::shared_ptr< Polygon >> &sides, Elem *p)
Arbitrary polyhedral element, takes a vector of shared pointers to sides (which should already be con...
virtual ~Polyhedron()=default
The libMesh namespace provides an interface to certain functionality in the library. 
virtual unsigned int n_sides() const override final
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override final
std::vector< std::pair< unsigned int, unsigned int > > _edge_lookup
One entry for each polyhedron edge, a pair indicating the side number and the edge-of-side number whi...
bool side_has_edge_nodes(unsigned int side, unsigned int min_node, unsigned int max_node) const
Helper method for finding the non-cached side that shares an edge, by examining the local node ids th...
std::tuple< unsigned int, Real, Real, Real > subelement_coordinates(const Point &p, Real tol=TOLERANCE *TOLERANCE) const
virtual bool is_flipped() const override final
virtual bool is_edge_on_side(const unsigned int e, const unsigned int s) const override final
virtual void retriangulate()=0
Create a triangulation (tetrahedralization) from the current node locations and face triangulations...
unsigned int n_subelements() const
virtual std::array< int, 4 > subelement(unsigned int i) const
virtual dof_id_type low_order_key(const unsigned int s) const override
The Cell is an abstract element type that lives in three dimensions. 
virtual void flip(BoundaryInfo *) override final
A flip is one of those general non-identity permutations we can't handle. 
The BoundaryInfo class contains information relevant to boundary conditions including storing faces...
virtual unsigned int opposite_node(const unsigned int n, const unsigned int s) const override final
Throws an error - opposite_side(s) is too hard to define in general on polyhedra. ...
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i) override
Copies the Polygon side coincident with side i. 
ElemQuality
Defines an enum for element quality metrics. 
virtual dof_id_type key() const override
virtual void permute(unsigned int libmesh_dbg_var(perm_num)) override final
std::vector< std::shared_ptr< Polygon > > side_clones() const
virtual Point master_point(const unsigned int i) const override
virtual unsigned int n_edges() const override final
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual std::vector< unsigned int > edges_adjacent_to_node(const unsigned int n) const override
virtual std::unique_ptr< Elem > side_ptr(const unsigned int i) override final
std::vector< std::array< int, 4 > > _triangulation
Data for a triangulation (tetrahedralization) of the polyhedron. 
virtual std::vector< unsigned int > sides_on_edge(const unsigned int e) const override final
A Point defines a location in LIBMESH_DIM dimensional Real space. 
virtual bool runtime_topology() const override
virtual unsigned int n_faces() const override final
virtual unsigned int n_children() const override final