BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_PENTA18TS.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 CL_ELEMENT_PENTA18TS_HPP
13#define CL_ELEMENT_PENTA18TS_HPP
14
15
16#include "typedefs.hpp"
17#include "Mesh_Enums.hpp"
19
20namespace belfem
21{
22 namespace mesh
23 {
24//------------------------------------------------------------------------------
25
26 template <>
32
33//------------------------------------------------------------------------------
34
35 template <>
36 uint
38 {
39 return 3 ;
40 }
41
42//------------------------------------------------------------------------------
43
44 template <>
45 bool
47 {
48 return true ;
49 }
50
51//------------------------------------------------------------------------------
52
53 template <>
54 void
56 {
57 switch( aFacetIndex )
58 {
59 case 0 :
60 aNodes.set_size( 9, nullptr );
61 aNodes( 0 ) = mNodes[ 0 ];
62 aNodes( 1 ) = mNodes[ 1 ];
63 aNodes( 2 ) = mNodes[ 4 ];
64 aNodes( 3 ) = mNodes[ 3 ];
65 aNodes( 4 ) = mNodes[ 6 ];
66 aNodes( 5 ) = mNodes[ 10 ];
67 aNodes( 6 ) = mNodes[ 12 ];
68 aNodes( 7 ) = mNodes[ 9 ];
69 aNodes( 8 ) = mNodes[ 15 ];
70 break;
71 case 1 :
72 aNodes.set_size( 9, nullptr );
73 aNodes( 0 ) = mNodes[ 1 ];
74 aNodes( 1 ) = mNodes[ 2 ];
75 aNodes( 2 ) = mNodes[ 5 ];
76 aNodes( 3 ) = mNodes[ 4 ];
77 aNodes( 4 ) = mNodes[ 7 ];
78 aNodes( 5 ) = mNodes[ 11 ];
79 aNodes( 6 ) = mNodes[ 13 ];
80 aNodes( 7 ) = mNodes[ 10 ];
81 aNodes( 8 ) = mNodes[ 16 ];
82 break;
83 case 2 :
84 aNodes.set_size( 9, nullptr );
85 aNodes( 0 ) = mNodes[ 0 ];
86 aNodes( 1 ) = mNodes[ 3 ];
87 aNodes( 2 ) = mNodes[ 5 ];
88 aNodes( 3 ) = mNodes[ 2 ];
89 aNodes( 4 ) = mNodes[ 9 ];
90 aNodes( 5 ) = mNodes[ 14 ];
91 aNodes( 6 ) = mNodes[ 11 ];
92 aNodes( 7 ) = mNodes[ 8 ];
93 aNodes( 8 ) = mNodes[ 17 ];
94 break;
95 case 3 :
96 aNodes.set_size( 6, nullptr );
97 aNodes( 0 ) = mNodes[ 0 ];
98 aNodes( 1 ) = mNodes[ 2 ];
99 aNodes( 2 ) = mNodes[ 1 ];
100 aNodes( 3 ) = mNodes[ 8 ];
101 aNodes( 4 ) = mNodes[ 7 ];
102 aNodes( 5 ) = mNodes[ 6 ];
103 break;
104 case 4 :
105 aNodes.set_size( 6, nullptr );
106 aNodes( 0 ) = mNodes[ 3 ];
107 aNodes( 1 ) = mNodes[ 4 ];
108 aNodes( 2 ) = mNodes[ 5 ];
109 aNodes( 3 ) = mNodes[ 12 ];
110 aNodes( 4 ) = mNodes[ 13 ];
111 aNodes( 5 ) = mNodes[ 14 ];
112 break;
113 default:
114 {
115 this->throw_facet_error( aFacetIndex );
116 }
117 }
118 }
119
120//------------------------------------------------------------------------------
121
122 template <>
123 void
125 {
126 switch( aFacetIndex )
127 {
128 case 0 :
129 {
130 aNodes.set_size( 4, nullptr );
131 aNodes( 0 ) = mNodes[ 0 ];
132 aNodes( 1 ) = mNodes[ 1 ];
133 aNodes( 2 ) = mNodes[ 4 ];
134 aNodes( 3 ) = mNodes[ 3 ];
135 break;
136 }
137 case 1 :
138 {
139 aNodes.set_size( 4, nullptr );
140 aNodes( 0 ) = mNodes[ 1 ];
141 aNodes( 1 ) = mNodes[ 2 ];
142 aNodes( 2 ) = mNodes[ 5 ];
143 aNodes( 3 ) = mNodes[ 4 ];
144 break;
145 }
146 case 2 :
147 {
148 aNodes.set_size( 4, nullptr );
149 aNodes( 0 ) = mNodes[ 0 ];
150 aNodes( 1 ) = mNodes[ 3 ];
151 aNodes( 2 ) = mNodes[ 5 ];
152 aNodes( 3 ) = mNodes[ 2 ];
153 break;
154 }
155 case 3 :
156 {
157 aNodes.set_size( 3, nullptr );
158 aNodes( 0 ) = mNodes[ 0 ];
159 aNodes( 1 ) = mNodes[ 2 ];
160 aNodes( 2 ) = mNodes[ 1 ];
161 break;
162 }
163 case 4 :
164 {
165 aNodes.set_size( 3, nullptr );
166 aNodes( 0 ) = mNodes[ 3 ];
167 aNodes( 1 ) = mNodes[ 4 ];
168 aNodes( 2 ) = mNodes[ 5 ];
169 break;
170 }
171 default:
172 {
173 this->throw_facet_error( aFacetIndex );
174 }
175 }
176 }
177
178//------------------------------------------------------------------------------
179
180 template <>
181 void
183 {
184 // allocate the node container
185 aNodes.set_size( 3, nullptr );
186
187 switch( aEdgeIndex )
188 {
189 case 0 :
190 {
191 aNodes( 0 ) = mNodes[ 0 ];
192 aNodes( 1 ) = mNodes[ 1 ];
193 aNodes( 2 ) = mNodes[ 6 ];
194 break;
195 }
196 case 1 :
197 {
198 aNodes( 0 ) = mNodes[ 1 ];
199 aNodes( 1 ) = mNodes[ 2 ];
200 aNodes( 2 ) = mNodes[ 7 ];
201 break;
202 }
203 case 2 :
204 {
205 aNodes( 0 ) = mNodes[ 2 ];
206 aNodes( 1 ) = mNodes[ 0 ];
207 aNodes( 2 ) = mNodes[ 8 ];
208 break;
209 }
210 case 3 :
211 {
212 aNodes( 0 ) = mNodes[ 3 ];
213 aNodes( 1 ) = mNodes[ 4 ];
214 aNodes( 2 ) = mNodes[ 12 ];
215 break;
216 }
217 case 4 :
218 {
219 aNodes( 0 ) = mNodes[ 4 ];
220 aNodes( 1 ) = mNodes[ 5 ];
221 aNodes( 2 ) = mNodes[ 13 ];
222 break;
223 }
224 case 5 :
225 {
226 aNodes( 0 ) = mNodes[ 5 ];
227 aNodes( 1 ) = mNodes[ 3 ];
228 aNodes( 2 ) = mNodes[ 14 ];
229 break;
230 }
231 case 6 :
232 {
233 aNodes( 0 ) = mNodes[ 9 ];
234 aNodes( 1 ) = mNodes[ 10 ];
235 aNodes( 2 ) = mNodes[ 15 ];
236 break;
237 }
238 case 7 :
239 {
240 aNodes( 0 ) = mNodes[ 10 ];
241 aNodes( 1 ) = mNodes[ 11 ];
242 aNodes( 2 ) = mNodes[ 16 ];
243 break;
244 }
245 case 8 :
246 {
247 aNodes( 0 ) = mNodes[ 11 ];
248 aNodes( 1 ) = mNodes[ 9 ];
249 aNodes( 2 ) = mNodes[ 17 ];
250 break;
251 }
252 default:
253 {
254 this->throw_facet_error( aEdgeIndex );
255 }
256 }
257 }
258//------------------------------------------------------------------------------
259
260 template <>
261 void
263 const uint aFacetIndex, Cell< Edge * > & aEdges )
264 {
265 switch( aFacetIndex )
266 {
267 case 3 :
268 {
269 aEdges.set_size( 3, nullptr );
270 aEdges( 0 ) = mEdges[ 2 ];
271 aEdges( 1 ) = mEdges[ 1 ];
272 aEdges( 2 ) = mEdges[ 0 ];
273 break;
274 }
275 case 4 :
276 {
277 aEdges.set_size( 3, nullptr );
278 aEdges( 0 ) = mEdges[ 3 ];
279 aEdges( 1 ) = mEdges[ 4 ];
280 aEdges( 2 ) = mEdges[ 5 ];
281 break;
282 }
283 default:
284 {
285 this->throw_facet_error( aFacetIndex );
286 }
287 }
288 }
289
290//------------------------------------------------------------------------------
291 } /* namespace mesh */
292} /* namespace belfem */
293
294
295#endif //CL_ELEMENT_PENTA18TS_HPP
Cell is a wrapper around the standard vector.
Definition cl_Cell.hpp:42
void set_size(const size_t aSize)
Definition cl_Cell.hpp:189
void get_nodes_of_edge(const uint aEdgeIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:930
void get_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:896
bool is_thinshell() const override
Definition cl_ElementTemplate.hpp:1018
void get_corner_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:907
uint dimension() const override
Definition cl_ElementTemplate.hpp:978
ElementType type() const override
return the type of the element
Definition cl_ElementTemplate.hpp:470
void get_edges_of_facet(const uint aFacetIndex, Cell< Edge * > &aEdges) override
Definition cl_ElementTemplate.hpp:918
Definition cl_EF_EdgeFunction.hpp:17
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
ElementType
Element types.
Definition Mesh_Enums.hpp:27
@ PENTA18TS
Definition Mesh_Enums.hpp:62