libMesh
cell_pyramid18.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_CELL_PYRAMID18_H
21 #define LIBMESH_CELL_PYRAMID18_H
22 
23 // Local includes
24 #include "libmesh/cell_pyramid.h"
25 
26 namespace libMesh
27 {
28 
82 class Pyramid18 final : public Pyramid
83 {
84 public:
85 
89  explicit
90  Pyramid18 (Elem * p=nullptr) :
92  {}
93 
94  Pyramid18 (Pyramid18 &&) = delete;
95  Pyramid18 (const Pyramid18 &) = delete;
96  Pyramid18 & operator= (const Pyramid18 &) = delete;
97  Pyramid18 & operator= (Pyramid18 &&) = delete;
98  virtual ~Pyramid18() = default;
99 
103  virtual unsigned int n_nodes() const override { return num_nodes; }
104 
108  virtual ElemType type () const override { return PYRAMID18; }
109 
114  virtual unsigned int n_sub_elem() const override { return 1; }
115 
119  virtual bool is_vertex(const unsigned int i) const override;
120 
124  virtual bool is_edge(const unsigned int i) const override;
125 
129  virtual bool is_face(const unsigned int i) const override;
130 
135  virtual bool is_node_on_side(const unsigned int n,
136  const unsigned int s) const override;
137 
138  virtual std::vector<unsigned int> nodes_on_side(const unsigned int s) const override;
139 
140  virtual std::vector<unsigned int> nodes_on_edge(const unsigned int e) const override;
141 
146  virtual bool is_node_on_edge(const unsigned int n,
147  const unsigned int e) const override;
148 
153  virtual bool has_affine_map () const override;
154 
158  virtual Order default_order() const override;
159 
163  using Pyramid::key;
164 
173  virtual dof_id_type key (const unsigned int s) const override;
174 
178  virtual unsigned int local_side_node(unsigned int side,
179  unsigned int side_node) const override;
180 
184  virtual unsigned int local_edge_node(unsigned int edge,
185  unsigned int edge_node) const override;
186 
191  virtual std::unique_ptr<Elem> build_side_ptr (const unsigned int i) override;
192 
196  virtual void build_side_ptr (std::unique_ptr<Elem> & elem,
197  const unsigned int i) override;
198 
199  // Avoid hiding deprecated version with different signature
200  using Elem::build_side_ptr;
201 
206  virtual std::unique_ptr<Elem> build_edge_ptr (const unsigned int i) override;
207 
211  virtual void build_edge_ptr (std::unique_ptr<Elem> & edge, const unsigned int i) override;
212 
213  virtual void connectivity(const unsigned int sc,
214  const IOPackage iop,
215  std::vector<dof_id_type> & conn) const override;
216 
221  virtual unsigned int n_second_order_adjacent_vertices (const unsigned int n) const override;
222 
227  virtual unsigned short int second_order_adjacent_vertex (const unsigned int n,
228  const unsigned int v) const override;
229 
233  static const int num_nodes = 18;
234  static const int nodes_per_side = 9;
235  static const int nodes_per_edge = 3;
236 
241  static const unsigned int side_nodes_map[num_sides][nodes_per_side];
242 
247  static const unsigned int edge_nodes_map[num_edges][nodes_per_edge];
248 
249  virtual void permute(unsigned int perm_num) override final;
250 
251  virtual void flip(BoundaryInfo *) override final;
252 
253  unsigned int center_node_on_side(const unsigned short side) const override final;
254 
255  ElemType side_type (const unsigned int s) const override final;
256 
257 protected:
258 
263 
264 
265 
266 #ifdef LIBMESH_ENABLE_AMR
267 
271  virtual Real embedding_matrix (const unsigned int,
272  const unsigned int,
273  const unsigned int) const override
274  { libmesh_not_implemented(); return 0.; }
275 
277 
278 #endif // LIBMESH_ENABLE_AMR
279 
280 };
281 
282 } // namespace libMesh
283 
284 
285 #endif // LIBMESH_CELL_PYRAMID18_H
ElemType
Defines an enum for geometric element types.
The Pyramid is an element in 3D with 5 sides.
Definition: cell_pyramid.h:39
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
A Node is like a Point, but with more information.
Definition: node.h:52
Pyramid18 & operator=(const Pyramid18 &)=delete
static const int num_edges
Definition: cell_pyramid.h:78
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
This maps the node of the side to element node numbers.
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
virtual dof_id_type key() const
Definition: elem.C:753
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
virtual ~Pyramid18()=default
unsigned int center_node_on_side(const unsigned short side) const override final
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
This maps the node of the edge to element node numbers.
IOPackage
libMesh interfaces with several different software packages for the purposes of creating, reading, and writing mesh files.
virtual void flip(BoundaryInfo *) override final
Flips the element (by swapping node and neighbor pointers) to have a mapping Jacobian of opposite sig...
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
virtual unsigned int n_second_order_adjacent_vertices(const unsigned int n) const override
virtual bool is_edge(const unsigned int i) const override
static const int nodes_per_side
virtual unsigned int n_sub_elem() const override
FIXME: we don&#39;t yet have a refinement pattern for pyramids...
The libMesh namespace provides an interface to certain functionality in the library.
Pyramid18(Elem *p=nullptr)
Constructor.
static const int num_nodes
Geometric constants for Pyramid18.
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
virtual unsigned int n_nodes() const override
virtual void permute(unsigned int perm_num) override final
Permutes the element (by swapping node and neighbor pointers) according to the specified index...
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
virtual bool has_affine_map() const override
The BoundaryInfo class contains information relevant to boundary conditions including storing faces...
Definition: boundary_info.h:57
virtual bool is_face(const unsigned int i) const override
static const int num_sides
Geometric constants for all Pyramids.
Definition: cell_pyramid.h:77
virtual ElemType type() const override
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
Builds a EDGE3 coincident with edge i.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
static const int nodes_per_edge
The Pyramid18 is an element in 3D composed of 18 nodes, designed to interface with a QUAD9 element ...
ElemType side_type(const unsigned int s) const override final
virtual Real embedding_matrix(const unsigned int, const unsigned int, const unsigned int) const override
Matrix used to create the elements children.
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
virtual Order default_order() const override
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i) override
Builds a QUAD9 or TRI7 coincident with face i.
Node * _nodelinks_data[num_nodes]
Data for links to nodes.
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
virtual bool is_vertex(const unsigned int i) const override
uint8_t dof_id_type
Definition: id_types.h:67