BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_HEX8.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_HEX8_HPP
13#define BELFEM_CL_ELEMENT_HEX8_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 // allocate the node container
48 aNodes.set_size( 4, nullptr );
49
50 switch( aFacetIndex )
51 {
52 case 0 :
53 {
54 aNodes( 0 ) = mNodes[ 0 ];
55 aNodes( 1 ) = mNodes[ 1 ];
56 aNodes( 2 ) = mNodes[ 5 ];
57 aNodes( 3 ) = mNodes[ 4 ];
58 break;
59 }
60 case 1 :
61 {
62 aNodes( 0 ) = mNodes[ 1 ];
63 aNodes( 1 ) = mNodes[ 2 ];
64 aNodes( 2 ) = mNodes[ 6 ];
65 aNodes( 3 ) = mNodes[ 5 ];
66 break;
67 }
68 case 2 :
69 {
70 aNodes( 0 ) = mNodes[ 2 ];
71 aNodes( 1 ) = mNodes[ 3 ];
72 aNodes( 2 ) = mNodes[ 7 ];
73 aNodes( 3 ) = mNodes[ 6 ];
74 break;
75 }
76 case 3 :
77 {
78 aNodes( 0 ) = mNodes[ 0 ];
79 aNodes( 1 ) = mNodes[ 4 ];
80 aNodes( 2 ) = mNodes[ 7 ];
81 aNodes( 3 ) = mNodes[ 3 ];
82 break;
83 }
84 case 4 :
85 {
86 aNodes( 0 ) = mNodes[ 0 ];
87 aNodes( 1 ) = mNodes[ 3 ];
88 aNodes( 2 ) = mNodes[ 2 ];
89 aNodes( 3 ) = mNodes[ 1 ];
90 break;
91 }
92 case 5 :
93 {
94 aNodes( 0 ) = mNodes[ 4 ];
95 aNodes( 1 ) = mNodes[ 5 ];
96 aNodes( 2 ) = mNodes[ 6 ];
97 aNodes( 3 ) = mNodes[ 7 ];
98 break;
99 }
100 default:
101 {
102 this->throw_facet_error( aFacetIndex );
103 }
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[ 3 ];
144 break;
145 }
146 case 3 :
147 {
148 aNodes( 0 ) = mNodes[ 3 ];
149 aNodes( 1 ) = mNodes[ 0 ];
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[ 6 ];
162 break;
163 }
164 case 6 :
165 {
166 aNodes( 0 ) = mNodes[ 6 ];
167 aNodes( 1 ) = mNodes[ 7 ];
168 break;
169 }
170 case 7 :
171 {
172 aNodes( 0 ) = mNodes[ 7 ];
173 aNodes( 1 ) = mNodes[ 4 ];
174 break;
175 }
176 case 8 :
177 {
178 aNodes( 0 ) = mNodes[ 0 ];
179 aNodes( 1 ) = mNodes[ 4 ];
180 break;
181 }
182 case 9 :
183 {
184 aNodes( 0 ) = mNodes[ 1 ];
185 aNodes( 1 ) = mNodes[ 5 ];
186 break;
187 }
188 case 10 :
189 {
190 aNodes( 0 ) = mNodes[ 2 ];
191 aNodes( 1 ) = mNodes[ 6 ];
192 break;
193 }
194 case 11 :
195 {
196 aNodes( 0 ) = mNodes[ 3 ];
197 aNodes( 1 ) = mNodes[ 7 ];
198 break;
199 }
200 default:
201 {
202 this->throw_edge_error( aEdgeIndex );
203 }
204 }
205 }
206
207//------------------------------------------------------------------------------
208
209 template <>
210 void
212 const uint aFacetIndex, Cell< Edge * > & aEdges )
213 {
214 // allocate the node container
215 aEdges.set_size( 4, nullptr );
216
217 switch( aFacetIndex )
218 {
219 case 0 :
220 {
221 aEdges( 0 ) = mEdges[ 0 ];
222 aEdges( 1 ) = mEdges[ 9 ];
223 aEdges( 2 ) = mEdges[ 4 ];
224 aEdges( 3 ) = mEdges[ 8 ];
225 break;
226 }
227 case 1 :
228 {
229 aEdges( 0 ) = mEdges[ 1 ];
230 aEdges( 1 ) = mEdges[ 10 ];
231 aEdges( 2 ) = mEdges[ 5 ];
232 aEdges( 3 ) = mEdges[ 9 ];
233 break;
234 }
235 case 2 :
236 {
237 aEdges( 0 ) = mEdges[ 2 ];
238 aEdges( 1 ) = mEdges[ 11 ];
239 aEdges( 2 ) = mEdges[ 6 ];
240 aEdges( 3 ) = mEdges[ 10 ];
241 break;
242 }
243 case 3 :
244 {
245 aEdges( 0 ) = mEdges[ 8 ];
246 aEdges( 1 ) = mEdges[ 7 ];
247 aEdges( 2 ) = mEdges[ 11 ];
248 aEdges( 3 ) = mEdges[ 3 ];
249 break;
250 }
251 case 4 :
252 {
253 aEdges( 0 ) = mEdges[ 3 ];
254 aEdges( 1 ) = mEdges[ 2 ];
255 aEdges( 2 ) = mEdges[ 1 ];
256 aEdges( 3 ) = mEdges[ 0 ];
257 break;
258 }
259 case 5 :
260 {
261 aEdges( 0 ) = mEdges[ 4 ];
262 aEdges( 1 ) = mEdges[ 5 ];
263 aEdges( 2 ) = mEdges[ 6 ];
264 aEdges( 3 ) = mEdges[ 7 ];
265 break;
266 }
267 default:
268 {
269 this->throw_facet_error( aFacetIndex );
270 }
271 }
272 }
273
274//------------------------------------------------------------------------------
275 } /* namespace mesh */
276} /* namespace belfem */
277
278#endif //BELFEM_CL_ELEMENT_HEX8_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
@ HEX8
Definition Mesh_Enums.hpp:33