BELFEM
0.9.0
Berkeley Lab Finite Element Framework
Toggle main menu visibility
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
8
#include "
nedelec/cl_EF_EdgeFunction.hpp
"
9
#include "
cl_FEM_Element.hpp
"
10
11
namespace
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
23
Vector< real >
mX;
24
Vector< real >
mY;
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
36
Matrix< real >
mG ;
37
Matrix< real >
mGxi ;
38
Matrix< real >
mGeta ;
39
40
Matrix< real >
mH ;
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
cl_EF_EdgeFunction.hpp
cl_FEM_Element.hpp
belfem::Matrix< real >
belfem::Vector< real >
belfem::fem::EF_TRI6::~EF_TRI6
~EF_TRI6() override=default
trivial destructor
belfem::fem::EF_TRI6::C
const Matrix< real > & C(const uint aIndex=0) override
curl operator for h-field
Definition
cl_EF_TRI6.hpp:207
belfem::fem::EF_TRI6::G
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
belfem::fem::EF_TRI6::E
const Matrix< real > & E(const uint aIndex) override
interpolation operator for h-field
Definition
cl_EF_TRI6.hpp:198
belfem::fem::EF_TRI6::link
void link(Element *aElement) override
connect function with element
Definition
cl_EF_TRI6.cpp:156
belfem::fem::EF_TRI6::EF_TRI6
EF_TRI6()
constructor
Definition
cl_EF_TRI6.cpp:18
belfem::fem::EF_TRI6::precompute
void precompute(const Matrix< real > &aXi) override
only needed for higher order elements
Definition
cl_EF_TRI6.cpp:39
belfem::fem::EdgeFunction::mE
Matrix< real > mE
Definition
cl_EF_EdgeFunction.hpp:50
belfem::fem::EdgeFunction::EdgeFunction
EdgeFunction()=default
trivial constructor
belfem::fem::EdgeFunction::mC
Matrix< real > mC
matrix containing the curl for the H-Function
Definition
cl_EF_EdgeFunction.hpp:53
belfem::fem::Element
Definition
cl_FEM_Element.hpp:41
belfem::fem
Definition
cl_IFB_LINE3.hpp:21
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_TRI6.hpp
Generated by
1.18.0