BELFEM
0.9.0
Berkeley Lab Finite Element Framework
Toggle main menu visibility
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
"
18
#include "
cl_ElementTemplate.hpp
"
19
20
namespace
belfem
21
{
22
namespace
mesh
23
{
24
//------------------------------------------------------------------------------
25
26
template
<>
27
ElementType
28
ElementTemplate< 8, 8, 4, 6, 1 >::type
()
const
29
{
30
return
ElementType::HEX8TB
;
31
}
32
33
//------------------------------------------------------------------------------
34
35
template
<>
36
uint
37
ElementTemplate< 8, 8, 4, 6, 1 >::dimension
()
const
38
{
39
return
3 ;
40
}
41
42
//------------------------------------------------------------------------------
43
44
template
<>
45
void
46
ElementTemplate< 8, 8, 4, 6, 1 >::get_nodes_of_edge
(
const
uint
aEdgeIndex,
Cell< Node * >
& aNodes )
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
84
ElementTemplate< 8, 8, 4, 6, 1 >::get_nodes_of_facet
(
const
uint
aFacetIndex,
Cell< Node * >
& aNodes )
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
149
ElementTemplate< 8, 8, 4, 6, 1 >::get_corner_nodes_of_facet
(
const
uint
aFacetIndex,
Cell< Node * >
& aNodes )
150
{
151
this->
get_nodes_of_facet
( aFacetIndex, aNodes );
152
}
153
154
template
<>
155
void
156
ElementTemplate< 8, 8, 4, 6, 1 >::get_edges_of_facet
(
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
Mesh_Enums.hpp
cl_ElementTemplate.hpp
belfem::Cell
Cell is a wrapper around the standard vector.
Definition
cl_Cell.hpp:42
belfem::Cell::set_size
void set_size(const size_t aSize)
Definition
cl_Cell.hpp:189
belfem::mesh::ElementTemplate::get_nodes_of_edge
void get_nodes_of_edge(const uint aEdgeIndex, Cell< Node * > &aNodes) override
Definition
cl_ElementTemplate.hpp:930
belfem::mesh::ElementTemplate::get_nodes_of_facet
void get_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition
cl_ElementTemplate.hpp:896
belfem::mesh::ElementTemplate::get_corner_nodes_of_facet
void get_corner_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition
cl_ElementTemplate.hpp:907
belfem::mesh::ElementTemplate::dimension
uint dimension() const override
Definition
cl_ElementTemplate.hpp:978
belfem::mesh::ElementTemplate::type
ElementType type() const override
return the type of the element
Definition
cl_ElementTemplate.hpp:470
belfem::mesh::ElementTemplate::get_edges_of_facet
void get_edges_of_facet(const uint aFacetIndex, Cell< Edge * > &aEdges) override
Definition
cl_ElementTemplate.hpp:918
belfem::mesh
Definition
cl_EF_EdgeFunction.hpp:17
belfem
USER GUIDES:
Definition
cl_Capacitor.cpp:16
belfem::uint
unsigned int uint
Definition
typedefs.hpp:30
belfem::ElementType
ElementType
Element types.
Definition
Mesh_Enums.hpp:27
belfem::ElementType::HEX8TB
@ HEX8TB
Definition
Mesh_Enums.hpp:63
typedefs.hpp
src
mesh
cl_Element_HEX8TB.hpp
Generated by
1.18.0