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