BELFEM
0.9.0
Berkeley Lab Finite Element Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
cl_EF_TET10.hpp
Go to the documentation of this file.
1
//
2
// Created by christian on 12/1/21.
3
//
4
5
#ifndef BELFEM_CL_EF_TET10_HPP
6
#define BELFEM_CL_EF_TET10_HPP
7
8
#include "
nedelec/cl_EF_EdgeFunction.hpp
"
9
10
namespace
belfem
11
{
12
namespace
mesh
13
{
14
class
Element
;
15
}
16
17
namespace
fem
18
{
19
class
Element
;
20
21
class
EF_TET10
:
public
EdgeFunction
22
{
24
Matrix< real >
mNodeCoords ;
25
27
Vector< real >
mX ;
28
Vector< real >
mY ;
29
Vector< real >
mZ ;
30
32
Matrix< real >
mNxi ;
33
Matrix< real >
mNeta ;
34
Matrix< real >
mNzeta ;
35
36
// matrix for second derivatives
37
// N_xi2, N_eta2, N_zeta2, N_etazeta, N_xizeta, N_xieta
38
Matrix< real >
mD ;
39
41
real
mS[ 6 ];
42
44
uint
mT[ 4 ];
45
47
Matrix< real >
mF ;
48
50
Matrix< real >
mG ;
51
Matrix< real >
mH ;
52
54
Matrix< real >
mU ;
55
Matrix< real >
mV ;
56
Matrix< real >
mW ;
57
58
60
real
mNablaXi[ 3 ];
61
real
mNablaEta[ 3 ];
62
real
mNablaZeta[ 3 ];
63
real
mNablaTau[ 3 ];
64
65
// edge shape functions
66
Matrix< real >
mExi ;
67
Matrix< real >
mEeta ;
68
Matrix< real >
mEzeta ;
69
70
// face shape functions
71
Matrix< real >
mFxi ;
72
Matrix< real >
mFeta ;
73
Matrix< real >
mFzeta ;
74
75
// containers with precomputed factors for edges
76
Matrix< real >
mGxi ;
77
Matrix< real >
mGeta ;
78
Matrix< real >
mGzeta ;
79
80
// containers with precomputed factors for edges
81
Matrix< real >
mHxi ;
82
Matrix< real >
mHeta ;
83
Matrix< real >
mHzeta ;
84
85
// containers with precomputed factors for faces
86
Matrix< real >
mUxi ;
87
Matrix< real >
mUeta ;
88
Matrix< real >
mUzeta ;
89
90
Matrix< real >
mVxi ;
91
Matrix< real >
mVeta ;
92
Matrix< real >
mVzeta ;
93
94
Matrix< real >
mWxi ;
95
Matrix< real >
mWeta ;
96
Matrix< real >
mWzeta ;
97
98
99
100
// additional work vector
101
real
mM [ 76 ];
102
103
// contracted second derivatives of the quadratic geometry map,
104
// S^(pq)_m ( IF-Voigt rows xx, yy, zz, yz, xz, xy — the mD
105
// member IS the d2N table, reused ), constant per element;
106
// filled on the CURVED branch of link(), NaN-filled on the
107
// straight branch ( the hess channel of G must never read it
108
// there — the affine map has S = 0 and the channel is skipped )
109
real
mCurv[ 6 ][ 3 ];
110
111
uint
mLastJ =
BELFEM_UINT_MAX
;
112
uint
mLastNabla =
BELFEM_UINT_MAX
;
113
114
void
115
(
EF_TET10
::*mFunInterpolation )(
const
uint
aIndex );
116
117
void
118
(
EF_TET10
::*mFunDerivatives )(
const
uint
aIndex );
119
120
void
121
(
EF_TET10
::*mFunGrad )(
const
uint
aIndex );
122
123
//------------------------------------------------------------------------------
124
public
:
125
//------------------------------------------------------------------------------
126
130
EF_TET10
();
131
132
//------------------------------------------------------------------------------
133
137
~EF_TET10
()
override
=
default
;
138
139
//------------------------------------------------------------------------------
140
144
void
145
link
(
Element
* aElement )
override
;
146
147
//------------------------------------------------------------------------------
148
149
void
150
precompute
(
const
Matrix< real >
& aXi )
override
;
151
152
//------------------------------------------------------------------------------
153
154
// compute the edge function
155
const
Matrix< real >
&
156
E
(
const
uint
aIndex )
override
;
157
158
//------------------------------------------------------------------------------
159
160
// compute the curl function
161
const
Matrix< real >
&
162
C
(
const
uint
aIndex = 0 )
override
;
163
164
//------------------------------------------------------------------------------
165
173
const
Matrix< real >
&
174
G
(
const
uint
aIndex = 0 )
override
;
175
176
//------------------------------------------------------------------------------
177
private
:
178
//------------------------------------------------------------------------------
179
180
void
181
E_curved(
const
uint
aIndex );
182
183
//------------------------------------------------------------------------------
184
185
void
186
E_straight(
const
uint
aIndex );
187
188
//------------------------------------------------------------------------------
189
190
void
191
E_xi_curved(
const
uint
aIndex );
192
193
//------------------------------------------------------------------------------
194
195
void
196
E_xi_straight(
const
uint
aIndex );
197
198
//------------------------------------------------------------------------------
199
200
void
201
compute_nabla(
const
uint
aIndex ) ;
202
203
//------------------------------------------------------------------------------
204
205
void
206
compute_edge_functions(
const
uint
aIndex );
207
208
//------------------------------------------------------------------------------
209
210
void
211
compute_face_functions(
const
uint
aIndex );
212
213
//------------------------------------------------------------------------------
214
221
void
222
G_term1(
const
uint
aIndex );
223
224
//------------------------------------------------------------------------------
225
226
void
227
G_straight(
const
uint
aIndex );
228
229
//------------------------------------------------------------------------------
230
231
void
232
G_curved(
const
uint
aIndex );
233
234
//------------------------------------------------------------------------------
235
244
void
245
combine_functions(
Matrix< real >
& aE,
const
Matrix< real >
& aF );
246
247
//------------------------------------------------------------------------------
248
249
void
250
compute_edge_derivatives(
const
uint
aIndex );
251
252
//------------------------------------------------------------------------------
253
254
void
255
compute_face_derivatives(
const
uint
aIndex );
256
257
//------------------------------------------------------------------------------
258
} ;
259
260
//------------------------------------------------------------------------------
261
262
// compute the edge function
263
inline
const
Matrix< real >
&
264
EF_TET10::E
(
const
uint
aIndex )
265
{
266
// compute the matrix
267
( this->*mFunInterpolation )( aIndex );
268
269
// return the result
270
return
mE
;
271
}
272
273
//------------------------------------------------------------------------------
274
275
}
/* end namespace fem */
276
}
/* end namespace belfem */
277
#endif
//BELFEM_CL_EF_TET10_HPP
cl_EF_EdgeFunction.hpp
belfem::Matrix< real >
belfem::Vector< real >
belfem::fem::EF_TET10::link
void link(Element *aElement) override
connect function with element
Definition
cl_EF_TET10.cpp:58
belfem::fem::EF_TET10::E
const Matrix< real > & E(const uint aIndex) override
Definition
cl_EF_TET10.hpp:264
belfem::fem::EF_TET10::C
const Matrix< real > & C(const uint aIndex=0) override
Definition
cl_EF_TET10.cpp:1176
belfem::fem::EF_TET10::G
const Matrix< real > & G(const uint aIndex=0) override
gradient operator for h-field ( straight path: term1 from the pre-signed combined partials with froze...
Definition
cl_EF_TET10.cpp:1423
belfem::fem::EF_TET10::~EF_TET10
~EF_TET10() override=default
trivial destructor
belfem::fem::EF_TET10::EF_TET10
EF_TET10()
constructor
Definition
cl_EF_TET10.cpp:18
belfem::fem::EF_TET10::precompute
void precompute(const Matrix< real > &aXi) override
only needed for higher order elements
Definition
cl_EF_TET10.cpp:174
belfem::fem::EdgeFunction::mE
Matrix< real > mE
Definition
cl_EF_EdgeFunction.hpp:50
belfem::fem::EdgeFunction::EdgeFunction
EdgeFunction()=default
trivial constructor
belfem::fem::Element
Definition
cl_FEM_Element.hpp:41
belfem::mesh::Element
Lagrange Element baseclass.
Definition
cl_Element.hpp:35
belfem::fem
Definition
cl_IFB_LINE3.hpp:21
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::real
double real
Definition
typedefs.hpp:36
BELFEM_UINT_MAX
#define BELFEM_UINT_MAX
Definition
typedefs.hpp:80
src
fem
interpolation
nedelec
cl_EF_TET10.hpp
Generated by
1.18.0