BELFEM 0.9.3
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_PENTA6TS.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_CL_ELEMENT_PENTA6TS_HPP
13#define BELFEM_CL_ELEMENT_PENTA6TS_HPP
14
15#include "typedefs.hpp"
16#include "Mesh_Enums.hpp"
18
19namespace belfem
20{
21 namespace mesh
22 {
23//------------------------------------------------------------------------------
24
25 template <>
31
32//------------------------------------------------------------------------------
33
34 template <>
35 uint
37 {
38 return 3 ;
39 }
40
41//------------------------------------------------------------------------------
42
43 template <>
44 bool
46 {
47 return true ;
48 }
49
50//------------------------------------------------------------------------------
51
52 template <>
53 void
55 {
56 switch( aFacetIndex )
57 {
58 case 0 :
59 {
60 aNodes.set_size( 4, nullptr );
61 aNodes( 0 ) = mNodes[ 0 ];
62 aNodes( 1 ) = mNodes[ 1 ];
63 aNodes( 2 ) = mNodes[ 4 ];
64 aNodes( 3 ) = mNodes[ 3 ];
65 break;
66 }
67 case 1 :
68 {
69 aNodes.set_size( 4, nullptr );
70 aNodes( 0 ) = mNodes[ 1 ];
71 aNodes( 1 ) = mNodes[ 2 ];
72 aNodes( 2 ) = mNodes[ 5 ];
73 aNodes( 3 ) = mNodes[ 4 ];
74 break;
75 }
76 case 2 :
77 {
78 aNodes.set_size( 4, nullptr );
79 aNodes( 0 ) = mNodes[ 0 ];
80 aNodes( 1 ) = mNodes[ 3 ];
81 aNodes( 2 ) = mNodes[ 5 ];
82 aNodes( 3 ) = mNodes[ 2 ];
83 break;
84 }
85 case 3 :
86 {
87 aNodes.set_size( 3, nullptr );
88 aNodes( 0 ) = mNodes[ 0 ];
89 aNodes( 1 ) = mNodes[ 2 ];
90 aNodes( 2 ) = mNodes[ 1 ];
91 break;
92 }
93 case 4 :
94 {
95 aNodes.set_size( 3, nullptr );
96 aNodes( 0 ) = mNodes[ 3 ];
97 aNodes( 1 ) = mNodes[ 4 ];
98 aNodes( 2 ) = mNodes[ 5 ];
99 break;
100 }
101 default:
102 {
103 this->throw_facet_error( aFacetIndex );
104 }
105 }
106 }
107
108//------------------------------------------------------------------------------
109
110 template <>
111 void
113 {
114 this->get_nodes_of_facet( aFacetIndex, aNodes );
115 }
116
117//------------------------------------------------------------------------------
118
119 template <>
120 void
122 {
123 // allocate the node container
124 aNodes.set_size( 2, nullptr );
125
126 switch( aEdgeIndex )
127 {
128 case 0 :
129 {
130 aNodes( 0 ) = mNodes[ 0 ];
131 aNodes( 1 ) = mNodes[ 1 ];
132 break;
133 }
134 case 1 :
135 {
136 aNodes( 0 ) = mNodes[ 1 ];
137 aNodes( 1 ) = mNodes[ 2 ];
138 break;
139 }
140 case 2 :
141 {
142 aNodes( 0 ) = mNodes[ 2 ];
143 aNodes( 1 ) = mNodes[ 0 ];
144 break;
145 }
146 case 3 :
147 {
148 aNodes( 0 ) = mNodes[ 3 ];
149 aNodes( 1 ) = mNodes[ 4 ];
150 break;
151 }
152 case 4 :
153 {
154 aNodes( 0 ) = mNodes[ 4 ];
155 aNodes( 1 ) = mNodes[ 5 ];
156 break;
157 }
158 case 5 :
159 {
160 aNodes( 0 ) = mNodes[ 5 ];
161 aNodes( 1 ) = mNodes[ 3 ];
162 break;
163 }
164 default:
165 {
166 this->throw_edge_error( aEdgeIndex );
167 }
168 }
169 }
170
171//------------------------------------------------------------------------------
172
173 template <>
174 void
176 const uint aFacetIndex, Cell< Edge * > & aEdges )
177 {
178 switch( aFacetIndex )
179 {
180 case 3 :
181 {
182 aEdges.set_size( 3, nullptr );
183 aEdges( 0 ) = mEdges[ 2 ];
184 aEdges( 1 ) = mEdges[ 1 ];
185 aEdges( 2 ) = mEdges[ 0 ];
186 break;
187 }
188 case 4 :
189 {
190 aEdges.set_size( 3, nullptr );
191 aEdges( 0 ) = mEdges[ 3 ];
192 aEdges( 1 ) = mEdges[ 4 ];
193 aEdges( 2 ) = mEdges[ 5 ];
194 break;
195 }
196 default:
197 {
198 this->throw_facet_error( aFacetIndex );
199 }
200 }
201 }
202
203//------------------------------------------------------------------------------
204 } /* namespace mesh */
205} /* namespace belfem */
206
207#endif //BELFEM_CL_ELEMENT_PENTA6TS_HPP
A bounds-checked wrapper around std::vector.
Definition cl_Cell.hpp:45
void set_size(const size_t aSize)
New elements are value-initialized ( zero for arithmetic T, nullptr for pointers ).
Definition cl_Cell.hpp:199
void get_nodes_of_edge(const uint aEdgeIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:909
void get_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:875
bool is_thinshell() const override
Definition cl_ElementTemplate.hpp:997
void get_corner_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:886
uint dimension() const override
Definition cl_ElementTemplate.hpp:957
ElementType type() const override
return the type of the element
Definition cl_ElementTemplate.hpp:465
void get_edges_of_facet(const uint aFacetIndex, Cell< Edge * > &aEdges) override
Definition cl_ElementTemplate.hpp:897
Definition cl_EF_EdgeFunction.hpp:24
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
ElementType
Element types.
Definition Mesh_Enums.hpp:27
@ PENTA6TS
Definition Mesh_Enums.hpp:61