BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_EF_TRI6.hpp
Go to the documentation of this file.
1//
2// Created by christian on 12/2/21.
3//
4
5#ifndef BELFEM_CL_EF_TRI6_HPP
6#define BELFEM_CL_EF_TRI6_HPP
7
9#include "cl_FEM_Element.hpp"
10
11namespace belfem
12{
13 namespace fem
14 {
15 class Element;
16
17 class EF_TRI6 : public EdgeFunction
18 {
19 // node coordinates in matrix
20 Matrix< real > mNodeCoords ;
21
22 // node coordinates in vectors
25
26 real mS[ 3 ];
27
28 real mNablaXi[ 2 ];
29 real mNablaEta[ 2 ];
30
32 Matrix< real > mNxi ;
33 Matrix< real > mNeta ;
34
35 // help coefficients for shape function
37 Matrix< real > mGxi ;
38 Matrix< real > mGeta ;
39
41 Matrix< real > mHxi ;
42 Matrix< real > mHeta ;
43
44 real mExi[ 16 ] ;
45 real mEeta[ 16 ] ;
46
47 // additional work vector
48 real mW[ 16 ];
49
50 // contracted second derivatives of the quadratic geometry map,
51 // S^(pq)_m ( IF-Voigt rows xx, yy, xy ), constant per element;
52 // filled on the CURVED branch of link(), NaN-filled on the
53 // straight branch ( the hess channel of G must never read it
54 // there — the affine map has S = 0 and the channel is skipped )
55 real mCurv[ 3 ][ 2 ];
56
57 uint mLastJ = BELFEM_UINT_MAX ;
58 uint mLastNabla = BELFEM_UINT_MAX ;
59 void
60 ( EF_TRI6::*mFunInterpolation )( const uint aIndex );
61
62 void
63 ( EF_TRI6::*mFunCurl )( const uint aIndex );
64
65 void
66 ( EF_TRI6::*mFunGrad )( const uint aIndex );
67
68//------------------------------------------------------------------------------
69 public:
70//------------------------------------------------------------------------------
71
75 EF_TRI6();
76
77//------------------------------------------------------------------------------
78
82 ~EF_TRI6() override = default;
83
84//------------------------------------------------------------------------------
85
86 void
87 precompute( const Matrix< real > & aXi ) override;
88
89//------------------------------------------------------------------------------
90
94 void
95 link( Element * aElement ) override;
96
97//------------------------------------------------------------------------------
98
102 const Matrix< real > &
103 E( const uint aIndex ) override;
104
105//------------------------------------------------------------------------------
106
110 const Matrix< real > &
111 C( const uint aIndex = 0 ) override;
112
113//------------------------------------------------------------------------------
114
121 const Matrix< real > &
122 G( const uint aIndex = 0 ) override ;
123
124//------------------------------------------------------------------------------
125 private:
126//------------------------------------------------------------------------------
127
128 void
129 E_curved( const uint aIndex );
130
131//------------------------------------------------------------------------------
132
133 void
134 C_curved( const uint aIndex );
135
136//------------------------------------------------------------------------------
137
138 void
139 C_straight( const uint aIndex );
140
141//------------------------------------------------------------------------------
142
143 void
144 compute_J( const uint aIndex );
145
146//------------------------------------------------------------------------------
147
148 void
149 compute_nabla( const uint aIndex );
150
151//------------------------------------------------------------------------------
152
153 void
154 compute_E( const uint aIndex );
155
156//------------------------------------------------------------------------------
157
158 void
159 compute_E_xi( const uint aIndex );
160
161//------------------------------------------------------------------------------
162
163 void
164 compute_E_eta( const uint aIndex );
165
166//------------------------------------------------------------------------------
167
168 void
169 compute_C();
170
171//------------------------------------------------------------------------------
172
178 void
179 G_term1( const uint aIndex );
180
181//------------------------------------------------------------------------------
182
183 void
184 G_straight( const uint aIndex );
185
186//------------------------------------------------------------------------------
187
188 void
189 G_curved( const uint aIndex );
190
191//------------------------------------------------------------------------------
192 };
193
194
195//------------------------------------------------------------------------------
196
197 inline const Matrix< real > &
198 EF_TRI6::E( const uint aIndex )
199 {
200 ( this->*mFunInterpolation )( aIndex );
201 return mE ;
202 }
203
204//------------------------------------------------------------------------------
205
206 inline const Matrix< real > &
207 EF_TRI6::C( const uint aIndex )
208 {
209 ( this->*mFunCurl )( aIndex );
210 return mC ;
211 }
212
213//------------------------------------------------------------------------------
214 } /* end namespace fem */
215} /* end namespace belfem */
216
217#endif //BELFEM_CL_EF_TRI6_HPP
~EF_TRI6() override=default
trivial destructor
const Matrix< real > & C(const uint aIndex=0) override
curl operator for h-field
Definition cl_EF_TRI6.hpp:207
const Matrix< real > & G(const uint aIndex=0) override
gradient operator for h-field ( straight path: signed term1 with frozen nablas; curved path: + the Q-...
Definition cl_EF_TRI6.cpp:554
const Matrix< real > & E(const uint aIndex) override
interpolation operator for h-field
Definition cl_EF_TRI6.hpp:198
void link(Element *aElement) override
connect function with element
Definition cl_EF_TRI6.cpp:156
EF_TRI6()
constructor
Definition cl_EF_TRI6.cpp:18
void precompute(const Matrix< real > &aXi) override
only needed for higher order elements
Definition cl_EF_TRI6.cpp:39
Matrix< real > mE
Definition cl_EF_EdgeFunction.hpp:50
EdgeFunction()=default
trivial constructor
Matrix< real > mC
matrix containing the curl for the H-Function
Definition cl_EF_EdgeFunction.hpp:53
Definition cl_FEM_Element.hpp:41
Definition cl_IFB_LINE3.hpp:21
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