BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_HEX8TS.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, through
4 * 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_HEX8TS_HPP
13#define BELFEM_CL_ELEMENT_HEX8TS_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( 2, nullptr );
48 switch ( aEdgeIndex )
49 {
50 case 0 :
51 {
52 aNodes( 0 ) = mNodes[ 0 ];
53 aNodes( 1 ) = mNodes[ 1 ];
54 break;
55 }
56 case 1 :
57 {
58 aNodes( 0 ) = mNodes[ 1 ];
59 aNodes( 1 ) = mNodes[ 2 ];
60 break;
61 }
62 case 2 :
63 {
64 aNodes( 0 ) = mNodes[ 2 ];
65 aNodes( 1 ) = mNodes[ 3 ];
66 break;
67 }
68 case 3 :
69 {
70 aNodes( 0 ) = mNodes[ 3 ];
71 aNodes( 1 ) = mNodes[ 0 ];
72 break;
73 }
74 case 4 :
75 {
76 aNodes( 0 ) = mNodes[ 4 ];
77 aNodes( 1 ) = mNodes[ 5 ];
78 break;
79 }
80 case 5 :
81 {
82 aNodes( 0 ) = mNodes[ 5 ];
83 aNodes( 1 ) = mNodes[ 6 ];
84 break;
85 }
86 case 6 :
87 {
88 aNodes( 0 ) = mNodes[ 6 ];
89 aNodes( 1 ) = mNodes[ 7 ];
90 break;
91 }
92 case 7 :
93 {
94 aNodes( 0 ) = mNodes[ 7 ];
95 aNodes( 1 ) = mNodes[ 4 ];
96 break;
97 }
98 default:
99 {
100 this->throw_edge_error( aEdgeIndex );
101 }
102 }
103 }
104
105 template <>
106 void
108 {
109 // allocate the node container
110 aNodes.set_size( 4, nullptr );
111
112 switch( aFacetIndex )
113 {
114 case 0 :
115 {
116 aNodes( 0 ) = mNodes[ 0 ];
117 aNodes( 1 ) = mNodes[ 1 ];
118 aNodes( 2 ) = mNodes[ 5 ];
119 aNodes( 3 ) = mNodes[ 4 ];
120 break;
121 }
122 case 1 :
123 {
124 aNodes( 0 ) = mNodes[ 1 ];
125 aNodes( 1 ) = mNodes[ 2 ];
126 aNodes( 2 ) = mNodes[ 6 ];
127 aNodes( 3 ) = mNodes[ 5 ];
128 break;
129 }
130 case 2 :
131 {
132 aNodes( 0 ) = mNodes[ 2 ];
133 aNodes( 1 ) = mNodes[ 3 ];
134 aNodes( 2 ) = mNodes[ 7 ];
135 aNodes( 3 ) = mNodes[ 6 ];
136 break;
137 }
138 case 3 :
139 {
140 aNodes( 0 ) = mNodes[ 0 ];
141 aNodes( 1 ) = mNodes[ 4 ];
142 aNodes( 2 ) = mNodes[ 7 ];
143 aNodes( 3 ) = mNodes[ 3 ];
144 break;
145 }
146 case 4 :
147 {
148 aNodes( 0 ) = mNodes[ 0 ];
149 aNodes( 1 ) = mNodes[ 3 ];
150 aNodes( 2 ) = mNodes[ 2 ];
151 aNodes( 3 ) = mNodes[ 1 ];
152 break;
153 }
154 case 5 :
155 {
156 aNodes( 0 ) = mNodes[ 4 ];
157 aNodes( 1 ) = mNodes[ 5 ];
158 aNodes( 2 ) = mNodes[ 6 ];
159 aNodes( 3 ) = mNodes[ 7 ];
160 break;
161 }
162 default:
163 {
164 this->throw_facet_error( aFacetIndex );
165 }
166 }
167
168 }
169
170 template <>
171 void
173 {
174 this->get_nodes_of_facet( aFacetIndex, aNodes );
175 }
176
177 template <>
178 void
180 const uint aFacetIndex, Cell< Edge * > & aEdges )
181 {
182 // allocate the node container
183 aEdges.set_size( 4, nullptr );
184
185 switch( aFacetIndex )
186 {
187 case 4 :
188 {
189 aEdges( 0 ) = mEdges[ 3 ];
190 aEdges( 1 ) = mEdges[ 2 ];
191 aEdges( 2 ) = mEdges[ 1 ];
192 aEdges( 3 ) = mEdges[ 0 ];
193 break;
194 }
195 case 5 :
196 {
197 aEdges( 0 ) = mEdges[ 4 ];
198 aEdges( 1 ) = mEdges[ 5 ];
199 aEdges( 2 ) = mEdges[ 6 ];
200 aEdges( 3 ) = mEdges[ 7 ];
201 break;
202 }
203 default:
204 {
205 this->throw_facet_error( aFacetIndex );
206 }
207 }
208 }
209
210//-----------------------------------------------------------------------------
211 }
212}
213
214#endif //BELFEM_CL_ELEMENT_HEX8TS_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
@ HEX8TS
Definition Mesh_Enums.hpp:60