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