libMesh
Loading...
Searching...
No Matches
cell_tet14.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 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_TET14_H
21#define LIBMESH_CELL_TET14_H
22
23// Local includes
24#include "libmesh/cell_tet.h"
25#include "libmesh/cell_tet4.h"
26#include "libmesh/fe_reference_element_traits.h"
27
28namespace libMesh
29{
30
72class Tet14 final : public Tet
73{
74public:
75
79 explicit
80 Tet14 (Elem * p=nullptr) :
82 {}
83
84 Tet14 (Tet14 &&) = delete;
85 Tet14 (const Tet14 &) = delete;
86 Tet14 & operator= (const Tet14 &) = delete;
87 Tet14 & operator= (Tet14 &&) = delete;
88 virtual ~Tet14() = default;
89
93 virtual ElemType type () const override { return TET14; }
94
98 virtual unsigned int n_nodes() const override { return num_nodes; }
99
103 virtual unsigned int n_sub_elem() const override { return 8; }
104
108 virtual bool is_vertex(const unsigned int i) const override;
109
113 virtual bool is_edge(const unsigned int i) const override;
114
118 virtual bool is_face(const unsigned int i) const override;
119
124 virtual bool is_node_on_side(const unsigned int n,
125 const unsigned int s) const override;
126
127 virtual std::vector<unsigned int> nodes_on_side(const unsigned int s) const override;
128
129 virtual std::vector<unsigned int> nodes_on_edge(const unsigned int e) const override;
130
135 virtual bool is_node_on_edge(const unsigned int n,
136 const unsigned int e) const override;
137
142 virtual bool is_child_on_side(const unsigned int c,
143 const unsigned int s) const override;
144
149 virtual bool has_affine_map () const override;
150
154 virtual Order default_order() const override;
155
159 virtual unsigned int local_side_node(unsigned int side,
160 unsigned int side_node) const override;
161
165 virtual unsigned int local_edge_node(unsigned int edge,
166 unsigned int edge_node) const override;
167
172 virtual std::unique_ptr<Elem> build_side_ptr (const unsigned int i) override;
173
177 virtual void build_side_ptr (std::unique_ptr<Elem> & elem,
178 const unsigned int i) override;
179
180 // Avoid hiding deprecated version with different signature
182
187 virtual std::unique_ptr<Elem> build_edge_ptr (const unsigned int i) override;
188
192 virtual void build_edge_ptr (std::unique_ptr<Elem> & edge, const unsigned int i) override;
193
194 virtual void connectivity(const unsigned int sc,
195 const IOPackage iop,
196 std::vector<dof_id_type> & conn) const override;
197
201 virtual unsigned int n_second_order_adjacent_vertices (const unsigned int) const override;
202
209 virtual unsigned short int second_order_adjacent_vertex (const unsigned int n,
210 const unsigned int v) const override;
211
217 virtual std::pair<unsigned short int, unsigned short int>
218 second_order_child_vertex (const unsigned int n) const override;
219
223 static const int num_nodes = 14;
224 static const int nodes_per_side = 7;
225 static const int nodes_per_edge = 3;
226
233 _edge_nodes = derived_edge_nodes<Tet4, num_edges>();
234 static constexpr const unsigned int (&edge_nodes_map)[num_edges][nodes_per_edge] = _edge_nodes.values;
235
237 _side_nodes = derived_side_nodes<Tet4, num_sides, nodes_per_side>
238 (_edge_nodes.values, [](unsigned int s) { return 10 + s; });
239 static constexpr const unsigned int (&side_nodes_map)[num_sides][nodes_per_side] = _side_nodes.values;
240
241 virtual void permute(unsigned int perm_num) override final;
242
243 virtual void flip(BoundaryInfo *) override final;
244
245 ElemType side_type (const unsigned int s) const override final;
246
247#ifdef LIBMESH_ENABLE_AMR
248 virtual
249 const std::vector<std::pair<unsigned char, unsigned char>> &
250 parent_bracketing_nodes(unsigned int c,
251 unsigned int n) const override;
252#endif
253
254protected:
255
260
261
262
263#ifdef LIBMESH_ENABLE_AMR
264
268 virtual Real embedding_matrix (const unsigned int i,
269 const unsigned int j,
270 const unsigned int k) const override;
271
277
283 static const std::vector<std::pair<unsigned char, unsigned char>>
285
287
288#endif // LIBMESH_ENABLE_AMR
289
290private:
291
296 static const unsigned short int _second_order_adjacent_vertices[10][3];
297
301 static const unsigned short int _second_order_vertex_child_number[14];
302
306 static const unsigned short int _second_order_vertex_child_index[14];
307};
308
309} // namespace libMesh
310
311
312#endif // LIBMESH_CELL_TET14_H
void ErrorVector unsigned int
The BoundaryInfo class contains information relevant to boundary conditions including storing faces,...
This is the base class from which all geometric element types are derived.
Definition elem.h:96
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i)=0
A Node is like a Point, but with more information.
Definition node.h:55
The Tet14 is an element in 3D composed of 14 nodes.
Definition cell_tet14.h:73
Tet14(Elem *p=nullptr)
Constructor.
Definition cell_tet14.h:80
virtual bool is_edge(const unsigned int i) const override
Definition cell_tet14.C:55
virtual bool is_child_on_side(const unsigned int c, const unsigned int s) const override
Definition cell_tet14.C:105
virtual const std::vector< std::pair< unsigned char, unsigned char > > & parent_bracketing_nodes(unsigned int c, unsigned int n) const override
Definition cell_tet14.C:697
static const int nodes_per_side
Definition cell_tet14.h:224
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
Definition cell_tet14.C:240
static const std::vector< std::pair< unsigned char, unsigned char > > _parent_bracketing_nodes[3][num_children][num_nodes]
Pairs of nodes that bracket child nodes when doing mesh refinement, for each of the three possible di...
Definition cell_tet14.h:284
static const unsigned short int _second_order_adjacent_vertices[10][3]
Matrix that tells which vertices define the location of mid-side or mid-face nodes,...
Definition cell_tet14.h:296
virtual void permute(unsigned int perm_num) override final
Permutes the element (by swapping node and neighbor pointers) according to the specified index.
Definition cell_tet14.C:794
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override
Definition cell_tet14.C:200
virtual void flip(BoundaryInfo *) override final
Flips the element (by swapping node and neighbor pointers) to have a mapping Jacobian of opposite sig...
Definition cell_tet14.C:840
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
Definition cell_tet14.C:79
virtual bool is_face(const unsigned int i) const override
Definition cell_tet14.C:62
ElemType side_type(const unsigned int s) const override final
Definition cell_tet14.C:855
virtual unsigned int n_nodes() const override
Definition cell_tet14.h:98
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
Definition cell_tet14.C:439
virtual Real embedding_matrix(const unsigned int i, const unsigned int j, const unsigned int k) const override
Matrix used to create the elements children.
Definition cell_tet14.C:639
virtual ElemType type() const override
Definition cell_tet14.h:93
virtual bool is_vertex(const unsigned int i) const override
Definition cell_tet14.C:48
static constexpr const unsigned int(& side_nodes_map)[num_sides][nodes_per_side]
Definition cell_tet14.h:239
static const Real _embedding_matrix[num_children][num_nodes][num_nodes]
Matrix that computes new nodal locations/solution values from current nodes/solution.
Definition cell_tet14.h:276
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i) override
Builds a TRI7 built coincident with face i.
Definition cell_tet14.C:211
static constexpr const unsigned int(& edge_nodes_map)[num_edges][nodes_per_edge]
Definition cell_tet14.h:234
static constexpr NodeMapTable< num_edges, nodes_per_edge > _edge_nodes
These map the node of the edge or side to element node numbers.
Definition cell_tet14.h:233
static const int num_nodes
Geometric constants for Tet14.
Definition cell_tet14.h:223
static const unsigned short int _second_order_vertex_child_number[14]
Vector that names a child sharing each second order node.
Definition cell_tet14.h:301
virtual unsigned int n_sub_elem() const override
Definition cell_tet14.h:103
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
Builds a EDGE3 built coincident with edge i.
Definition cell_tet14.C:226
virtual Order default_order() const override
Definition cell_tet14.C:182
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
Definition cell_tet14.C:92
static const unsigned short int _second_order_vertex_child_index[14]
Vector that names the child vertex index for each second order node.
Definition cell_tet14.h:306
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
Definition cell_tet14.C:450
Node * _nodelinks_data[num_nodes]
Data for links to nodes.
Definition cell_tet14.h:259
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
Definition cell_tet14.C:86
Tet14(const Tet14 &)=delete
virtual bool has_affine_map() const override
Definition cell_tet14.C:135
static const int nodes_per_edge
Definition cell_tet14.h:225
virtual unsigned int n_second_order_adjacent_vertices(const unsigned int) const override
Definition cell_tet14.C:394
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
Definition cell_tet14.C:189
static constexpr NodeMapTable< num_sides, nodes_per_side > _side_nodes
Definition cell_tet14.h:237
Tet14(Tet14 &&)=delete
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
Definition cell_tet14.C:69
virtual ~Tet14()=default
Tet14 & operator=(const Tet14 &)=delete
The Tet is an element in 3D composed of 4 sides.
Definition cell_tet.h:37
static const int num_edges
Definition cell_tet.h:75
static const int num_sides
Geometric constants for all Tets.
Definition cell_tet.h:74
static const int num_children
Definition cell_tet.h:76
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
A fixed-size table that constexpr functions can return.
unsigned int values[Rows][Cols]