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