BELFEM
0.9.0
Berkeley Lab Finite Element Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
cl_Element_QUAD9TS.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 CL_ELEMENT_QUAD9TS_HPP
13
#define CL_ELEMENT_QUAD9TS_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< 9, 4, 3, 4, 1 >::type
()
const
28
{
29
return
ElementType::QUAD9TS
;
30
}
31
32
//------------------------------------------------------------------------------
33
34
template
<>
35
uint
36
ElementTemplate< 9, 4, 3, 4, 1 >::dimension
()
const
37
{
38
return
2 ;
39
}
40
41
//------------------------------------------------------------------------------
42
43
template
<>
44
bool
45
ElementTemplate< 9, 4, 3, 4, 1 >::is_thinshell
()
const
46
{
47
return
true ;
48
}
49
50
51
//------------------------------------------------------------------------------
52
53
template
<>
54
void
55
ElementTemplate< 9, 4, 3, 4, 1 >::get_nodes_of_facet
(
const
uint
aFacetIndex,
Cell< Node * >
& aNodes )
56
{
57
// allocate the node container
58
aNodes.
set_size
( 3,
nullptr
);
59
60
switch
( aFacetIndex )
61
{
62
case
0 :
63
{
64
aNodes( 0 ) = mNodes[ 0 ];
65
aNodes( 1 ) = mNodes[ 1 ];
66
aNodes( 2 ) = mNodes[ 4 ];
67
break
;
68
}
69
case
1 :
70
{
71
aNodes( 0 ) = mNodes[ 1 ];
72
aNodes( 1 ) = mNodes[ 2 ];
73
aNodes( 2 ) = mNodes[ 5 ];
74
break
;
75
}
76
case
2 :
77
{
78
aNodes( 0 ) = mNodes[ 2 ];
79
aNodes( 1 ) = mNodes[ 3 ];
80
aNodes( 2 ) = mNodes[ 6 ];
81
break
;
82
}
83
case
3 :
84
{
85
aNodes( 0 ) = mNodes[ 3 ];
86
aNodes( 1 ) = mNodes[ 0 ];
87
aNodes( 2 ) = mNodes[ 7 ];
88
break
;
89
}
90
default
:
91
{
92
this->throw_facet_error( aFacetIndex );
93
}
94
}
95
}
96
97
//------------------------------------------------------------------------------
98
99
template
<>
100
void
101
ElementTemplate< 9, 4, 3, 4, 1 >::get_corner_nodes_of_facet
(
const
uint
aFacetIndex,
Cell< Node * >
& aNodes )
102
{
103
// allocate the node container
104
aNodes.
set_size
( 2,
nullptr
);
105
106
switch
( aFacetIndex )
107
{
108
case
0 :
109
{
110
aNodes( 0 ) = mNodes[ 0 ];
111
aNodes( 1 ) = mNodes[ 1 ];
112
break
;
113
}
114
case
1 :
115
{
116
aNodes( 0 ) = mNodes[ 1 ];
117
aNodes( 1 ) = mNodes[ 2 ];
118
break
;
119
}
120
case
2 :
121
{
122
aNodes( 0 ) = mNodes[ 2 ];
123
aNodes( 1 ) = mNodes[ 3 ];
124
break
;
125
}
126
case
3 :
127
{
128
aNodes( 0 ) = mNodes[ 3 ];
129
aNodes( 1 ) = mNodes[ 0 ];
130
break
;
131
}
132
default
:
133
{
134
this->throw_facet_error( aFacetIndex );
135
}
136
}
137
}
138
139
//------------------------------------------------------------------------------
140
141
template
<>
142
void
143
ElementTemplate< 9, 4, 3, 4, 1 >::get_edges_of_facet
(
144
const
uint
aFacetIndex,
Cell< Edge * >
& aEdges )
145
{
146
switch
( aFacetIndex )
147
{
148
case
0 :
149
{
150
// bottom facet uses the bottom curve edge (mEdges[0])
151
aEdges.
set_size
( 1,
nullptr
);
152
aEdges( 0 ) = mEdges[ 0 ];
153
break ;
154
}
155
case
2 :
156
{
157
// top facet uses the top curve edge (mEdges[1]).
158
// mEdges[1] is stored with tangent parallel to mEdges[0];
159
// fem::Element::compute_edge_directions resolves the local sign.
160
aEdges.
set_size
( 1,
nullptr
);
161
aEdges( 0 ) = mEdges[ 1 ];
162
break ;
163
}
164
// Side facets 1 and 3 have no Nédélec edge in the thin-shell
165
// reduction (mEdges[2] is the center/mid curve, not a side).
166
default
:
167
{
168
this->throw_facet_error( aFacetIndex );
169
}
170
}
171
}
172
173
//------------------------------------------------------------------------------
174
}
/* namespace mesh */
175
}
/* namespace belfem */
176
177
#endif
//CL_ELEMENT_QUAD9TS_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_facet
void get_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition
cl_ElementTemplate.hpp:896
belfem::mesh::ElementTemplate::is_thinshell
bool is_thinshell() const override
Definition
cl_ElementTemplate.hpp:1018
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::QUAD9TS
@ QUAD9TS
Definition
Mesh_Enums.hpp:59
typedefs.hpp
src
mesh
cl_Element_QUAD9TS.hpp
Generated by
1.18.0