20#ifndef LIBMESH_FACE_C0POLYHEDRON_H
21#define LIBMESH_FACE_C0POLYHEDRON_H
24#include "libmesh/libmesh_common.h"
25#include "libmesh/cell_polyhedron.h"
26#include "libmesh/enum_order.h"
67 C0Polyhedron (
const std::vector<std::shared_ptr<Polygon>> & sides,
68 std::unique_ptr<Node> & mid_elem_node,
98 virtual unsigned int n_vertices() const override final;
110 virtual bool is_vertex(
const unsigned int i)
const override;
115 virtual bool is_edge(
const unsigned int i)
const override;
120 virtual bool is_face(
const unsigned int i)
const override;
127 const unsigned int s)
const override;
129 virtual std::vector<unsigned int>
nodes_on_side(
const unsigned int s)
const override;
131 virtual std::vector<unsigned int>
nodes_on_edge(
const unsigned int e)
const override;
138 const unsigned int e)
const override;
161 std::vector<dof_id_type> & conn)
const override;
166 virtual std::pair<unsigned short int, unsigned short int>
206 void add_tet(
int n1,
int n2,
int n3,
int n4);
208#ifdef LIBMESH_ENABLE_AMR
215 const unsigned int )
const override
216 { libmesh_not_implemented();
return 0; }
The C0Polyhedron is an element in 3D with an arbitrary (but fixed) number of polygonal first-order (C...
virtual bool is_vertex(const unsigned int i) const override
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
Point side_vertex_average_normal(const unsigned int s) const override final
virtual bool has_affine_map() const override
virtual Point true_centroid() const override
An optimized method for calculating the centroid of a C0Polyhedron.
virtual void retriangulate() override final
Create a triangulation (tetrahedralization) based on the current sides' triangulations.
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
std::unique_ptr< Elem > disconnected_clone() const override
C0Polyhedron(C0Polyhedron &&)=delete
virtual bool is_face(const unsigned int i) const override
C0Polyhedron(const C0Polyhedron &)=delete
virtual Real embedding_matrix(const unsigned int, const unsigned int, const unsigned int) const override
Matrix used to create the elements children.
virtual void connectivity(const unsigned int sf, const IOPackage iop, std::vector< dof_id_type > &conn) const override
C0Polyhedron & operator=(const C0Polyhedron &)=delete
ElemType side_type(const unsigned int s) const override final
virtual bool is_edge(const unsigned int i) const override
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
Element refinement is not implemented for polyhedra.
void add_tet(int n1, int n2, int n3, int n4)
Add to our triangulation (tetrahedralization).
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
virtual Real volume() const override
An optimized method for calculating the area of a C0Polyhedron.
virtual ElemType type() const override final
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
bool _has_mid_elem_node
Whether we have a mid element node.
virtual std::vector< unsigned int > edges_adjacent_to_node(const unsigned int n) const override
virtual unsigned int n_vertices() const override final
virtual std::array< int, 4 > subelement_sides_to_poly_sides(unsigned int i) const
virtual unsigned int n_sub_elem() const override
virtual Order default_order() const override
This is the base class from which all geometric element types are derived.
virtual dof_id_type key(const unsigned int s) const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.
The Polyhedron is an element in 3D with an arbitrary number of polygonal faces.
unsigned int n_subelements() const
The libMesh namespace provides an interface to certain functionality in the library.
IOPackage
libMesh interfaces with several different software packages for the purposes of creating,...
ElemType
Defines an enum for geometric element types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real