BELFEM 0.9.0
Berkeley Lab Finite Element Framework
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
9
10namespace 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
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
39
41 real mS[ 6 ];
42
44 uint mT[ 4 ];
45
48
52
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
void link(Element *aElement) override
connect function with element
Definition cl_EF_TET10.cpp:58
const Matrix< real > & E(const uint aIndex) override
Definition cl_EF_TET10.hpp:264
const Matrix< real > & C(const uint aIndex=0) override
Definition cl_EF_TET10.cpp:1176
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
~EF_TET10() override=default
trivial destructor
EF_TET10()
constructor
Definition cl_EF_TET10.cpp:18
void precompute(const Matrix< real > &aXi) override
only needed for higher order elements
Definition cl_EF_TET10.cpp:174
Matrix< real > mE
Definition cl_EF_EdgeFunction.hpp:50
EdgeFunction()=default
trivial constructor
Definition cl_FEM_Element.hpp:41
Lagrange Element baseclass.
Definition cl_Element.hpp:35
Definition cl_IFB_LINE3.hpp:21
Definition cl_EF_EdgeFunction.hpp:17
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
double real
Definition typedefs.hpp:36
#define BELFEM_UINT_MAX
Definition typedefs.hpp:80