BELFEM
0.9.0
Berkeley Lab Finite Element Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
cl_Element_TET4.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_TET4_HPP
13
#define BELFEM_CL_ELEMENT_TET4_HPP
14
15
#include "
typedefs.hpp
"
16
#include "
Mesh_Enums.hpp
"
17
#include "
cl_ElementTemplate.hpp
"
18
19
namespace
belfem
20
{
21
namespace
mesh
22
{
23
//------------------------------------------------------------------------------
24
25
template
<>
26
ElementType
27
ElementTemplate< 4, 4, 6, 4, 4 >::type
()
const
28
{
29
return
ElementType::TET4
;
30
}
31
32
//------------------------------------------------------------------------------
33
34
template
<>
35
uint
36
ElementTemplate< 4, 4, 6, 4, 4 >::dimension
()
const
37
{
38
return
3 ;
39
}
40
41
//------------------------------------------------------------------------------
42
43
template
<>
44
void
45
ElementTemplate< 4, 4, 6, 4, 4 >::get_nodes_of_facet
(
const
uint
aFacetIndex,
Cell< Node * >
& aNodes )
46
{
47
// allocate the node container
48
aNodes.
set_size
( 3,
nullptr
);
49
50
switch
( aFacetIndex )
51
{
52
case
( 0 ):
53
{
54
aNodes( 0 ) = mNodes[ 0 ];
55
aNodes( 1 ) = mNodes[ 1 ];
56
aNodes( 2 ) = mNodes[ 3 ];
57
break
;
58
}
59
case
( 1 ):
60
{
61
aNodes( 0 ) = mNodes[ 1 ];
62
aNodes( 1 ) = mNodes[ 2 ];
63
aNodes( 2 ) = mNodes[ 3 ];
64
break
;
65
}
66
case
( 2 ):
67
{
68
aNodes( 0 ) = mNodes[ 0 ];
69
aNodes( 1 ) = mNodes[ 3 ];
70
aNodes( 2 ) = mNodes[ 2 ];
71
break
;
72
}
73
case
( 3 ):
74
{
75
aNodes( 0 ) = mNodes[ 0 ];
76
aNodes( 1 ) = mNodes[ 2 ];
77
aNodes( 2 ) = mNodes[ 1 ];
78
break
;
79
}
80
default
:
81
{
82
this->throw_facet_error( aFacetIndex );
83
}
84
}
85
}
86
87
//------------------------------------------------------------------------------
88
89
template
<>
90
void
91
ElementTemplate< 4, 4, 6, 4, 4 >::get_corner_nodes_of_facet
(
const
uint
aFacetIndex,
Cell< Node * >
& aNodes )
92
{
93
this->
get_nodes_of_facet
( aFacetIndex, aNodes );
94
}
95
96
//------------------------------------------------------------------------------
97
98
template
<>
99
void
100
ElementTemplate< 4, 4, 6, 4, 4 >::get_nodes_of_edge
(
const
uint
aEdgeIndex,
Cell< Node * >
& aNodes )
101
{
102
// allocate the node container
103
aNodes.
set_size
( 2,
nullptr
);
104
105
switch
( aEdgeIndex )
106
{
107
case
( 0 ):
108
{
109
aNodes( 0 ) = mNodes[ 0 ];
110
aNodes( 1 ) = mNodes[ 1 ];
111
break
;
112
}
113
case
( 1 ):
114
{
115
aNodes( 0 ) = mNodes[ 1 ];
116
aNodes( 1 ) = mNodes[ 2 ];
117
break
;
118
}
119
case
( 2 ):
120
{
121
aNodes( 0 ) = mNodes[ 2 ];
122
aNodes( 1 ) = mNodes[ 0 ];
123
break
;
124
}
125
case
( 3 ):
126
{
127
aNodes( 0 ) = mNodes[ 0 ];
128
aNodes( 1 ) = mNodes[ 3 ];
129
break
;
130
}
131
case
( 4 ):
132
{
133
aNodes( 0 ) = mNodes[ 1 ];
134
aNodes( 1 ) = mNodes[ 3 ];
135
break
;
136
}
137
case
( 5 ):
138
{
139
aNodes( 0 ) = mNodes[ 2 ];
140
aNodes( 1 ) = mNodes[ 3 ];
141
break
;
142
}
143
default
:
144
{
145
this->throw_edge_error( aEdgeIndex );
146
}
147
}
148
}
149
150
//------------------------------------------------------------------------------
151
152
template
<>
153
void
154
ElementTemplate< 4, 4, 6, 4, 4 >::get_edges_of_facet
(
155
const
uint
aFacetIndex,
Cell< Edge * >
& aEdges )
156
{
157
// allocate the node container
158
aEdges.
set_size
( 3,
nullptr
);
159
160
switch
( aFacetIndex )
161
{
162
case
( 0 ):
163
{
164
aEdges( 0 ) = mEdges[ 0 ];
165
aEdges( 1 ) = mEdges[ 4 ];
166
aEdges( 2 ) = mEdges[ 3 ];
167
break
;
168
}
169
case
( 1 ):
170
{
171
aEdges( 0 ) = mEdges[ 1 ];
172
aEdges( 1 ) = mEdges[ 5 ];
173
aEdges( 2 ) = mEdges[ 4 ];
174
break
;
175
}
176
case
( 2 ):
177
{
178
aEdges( 0 ) = mEdges[ 3 ];
179
aEdges( 1 ) = mEdges[ 5 ];
180
aEdges( 2 ) = mEdges[ 2 ];
181
break
;
182
}
183
case
( 3 ):
184
{
185
aEdges( 0 ) = mEdges[ 2 ];
186
aEdges( 1 ) = mEdges[ 1 ];
187
aEdges( 2 ) = mEdges[ 0 ];
188
break
;
189
}
190
default
:
191
{
192
this->throw_facet_error( aFacetIndex );
193
}
194
}
195
}
196
197
//------------------------------------------------------------------------------
198
}
/* namespace mesh */
199
}
/* namespace belfem */
200
#endif
//BELFEM_CL_ELEMENT_TET4_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::TET4
@ TET4
Definition
Mesh_Enums.hpp:32
typedefs.hpp
src
mesh
cl_Element_TET4.hpp
Generated by
1.18.0