libMesh
cell_c0polyhedron.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2025 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_FACE_C0POLYHEDRON_H
21 #define LIBMESH_FACE_C0POLYHEDRON_H
22 
23 // Local includes
24 #include "libmesh/libmesh_common.h"
25 #include "libmesh/cell_polyhedron.h"
26 #include "libmesh/enum_order.h"
27 
28 namespace libMesh
29 {
30 
45 class C0Polyhedron : public Polyhedron
46 {
47 public:
48 
59  explicit
60  C0Polyhedron (const std::vector<std::shared_ptr<Polygon>> & sides,
61  Elem * p=nullptr);
62 
63  C0Polyhedron (C0Polyhedron &&) = delete;
64  C0Polyhedron (const C0Polyhedron &) = delete;
65  C0Polyhedron & operator= (const C0Polyhedron &) = delete;
66  C0Polyhedron & operator= (C0Polyhedron &&) = delete;
67  virtual ~C0Polyhedron();
68 
79  std::unique_ptr<Elem> disconnected_clone() const override;
80 
84  virtual ElemType type () const override final { return C0POLYHEDRON; }
85 
90  virtual unsigned int n_vertices() const override final { return this->_nodelinks_data.size(); }
91 
96  virtual unsigned int n_sub_elem() const override
97  { return this->n_subelements(); }
98 
102  virtual bool is_vertex(const unsigned int i) const override;
103 
107  virtual bool is_edge(const unsigned int i) const override;
108 
112  virtual bool is_face(const unsigned int i) const override;
113 
118  virtual bool is_node_on_side(const unsigned int n,
119  const unsigned int s) const override;
120 
121  virtual std::vector<unsigned int> nodes_on_side(const unsigned int s) const override;
122 
123  virtual std::vector<unsigned int> nodes_on_edge(const unsigned int e) const override;
124 
129  virtual bool is_node_on_edge(const unsigned int n,
130  const unsigned int e) const override;
131 
137  virtual bool has_affine_map () const override { return false; }
138 
142  virtual Order default_order() const override { return FIRST; }
143 
147  using Elem::key;
148 
149  virtual void connectivity(const unsigned int sf,
150  const IOPackage iop,
151  std::vector<dof_id_type> & conn) const override;
152 
156  virtual std::pair<unsigned short int, unsigned short int>
157  second_order_child_vertex (const unsigned int n) const override;
158 
162  virtual Real volume () const override;
163 
167  virtual Point true_centroid () const override;
168 
169  ElemType side_type (const unsigned int s) const override final;
170 
175  virtual void retriangulate() override final;
176 
177 protected:
178 
182  void add_tet(int n1, int n2, int n3, int n4);
183 
184 #ifdef LIBMESH_ENABLE_AMR
185 
189  virtual Real embedding_matrix (const unsigned int /*i*/,
190  const unsigned int /*j*/,
191  const unsigned int /*k*/) const override
192  { libmesh_not_implemented(); return 0; }
193 
194 #endif // LIBMESH_ENABLE_AMR
195 
196 };
197 
198 
199 } // namespace libMesh
200 
201 #endif // LIBMESH_FACE_C0POLYHEDRON_H
ElemType
Defines an enum for geometric element types.
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
ElemType side_type(const unsigned int s) const override final
The Polyhedron is an element in 3D with an arbitrary number of polygonal faces.
std::vector< Node * > _nodelinks_data
Data for links to nodes.
virtual dof_id_type key() const
Definition: elem.C:753
IOPackage
libMesh interfaces with several different software packages for the purposes of creating, reading, and writing mesh files.
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
virtual void retriangulate() override final
Create a triangulation (tetrahedralization) based on the current sides&#39; triangulations.
C0Polyhedron & operator=(const C0Polyhedron &)=delete
The libMesh namespace provides an interface to certain functionality in the library.
virtual Point true_centroid() const override
An optimized method for calculating the centroid of a C0Polyhedron.
virtual unsigned int n_sub_elem() const override
virtual Real volume() const override
An optimized method for calculating the area of a C0Polyhedron.
virtual bool is_vertex(const unsigned int i) const override
unsigned int n_subelements() const
virtual bool has_affine_map() const override
virtual Real embedding_matrix(const unsigned int, const unsigned int, const unsigned int) const override
Matrix used to create the elements children.
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
virtual ElemType type() const override final
C0Polyhedron(const std::vector< std::shared_ptr< Polygon >> &sides, Elem *p=nullptr)
Constructor.
virtual unsigned int n_vertices() const override final
std::unique_ptr< Elem > disconnected_clone() const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual bool is_face(const unsigned int i) const override
void add_tet(int n1, int n2, int n3, int n4)
Add to our triangulation (tetrahedralization).
The C0Polyhedron is an element in 3D with an arbitrary (but fixed) number of polygonal first-order (C...
virtual bool is_edge(const unsigned int i) const override
virtual void connectivity(const unsigned int sf, const IOPackage iop, std::vector< dof_id_type > &conn) const override
virtual Order default_order() const override
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39
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.