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