BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_IF_HEX20.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 BELFEM_CL_IF_HEX20_HPP
13#define BELFEM_CL_IF_HEX20_HPP
14
16
17namespace belfem
18{
19 namespace fem
20 {
21//------------------------------------------------------------------------------
22
23 template<>
31
32//------------------------------------------------------------------------------
33
34 template<>
39 {
40 return ElementType::HEX20;
41 }
42
43//------------------------------------------------------------------------------
44
45 template<>
46 void
50 {
51 aXiHat.set_size( 3, 20 );
52
53 aXiHat( 0, 0 ) = -1.000000;
54 aXiHat( 1, 0 ) = -1.000000;
55 aXiHat( 2, 0 ) = -1.000000;
56
57 aXiHat( 0, 1 ) = 1.000000;
58 aXiHat( 1, 1 ) = -1.000000;
59 aXiHat( 2, 1 ) = -1.000000;
60
61 aXiHat( 0, 2 ) = 1.000000;
62 aXiHat( 1, 2 ) = 1.000000;
63 aXiHat( 2, 2 ) = -1.000000;
64
65 aXiHat( 0, 3 ) = -1.000000;
66 aXiHat( 1, 3 ) = 1.000000;
67 aXiHat( 2, 3 ) = -1.000000;
68
69 aXiHat( 0, 4 ) = -1.000000;
70 aXiHat( 1, 4 ) = -1.000000;
71 aXiHat( 2, 4 ) = 1.000000;
72
73 aXiHat( 0, 5 ) = 1.000000;
74 aXiHat( 1, 5 ) = -1.000000;
75 aXiHat( 2, 5 ) = 1.000000;
76
77 aXiHat( 0, 6 ) = 1.000000;
78 aXiHat( 1, 6 ) = 1.000000;
79 aXiHat( 2, 6 ) = 1.000000;
80
81 aXiHat( 0, 7 ) = -1.000000;
82 aXiHat( 1, 7 ) = 1.000000;
83 aXiHat( 2, 7 ) = 1.000000;
84
85 aXiHat( 0, 8 ) = 0.000000;
86 aXiHat( 1, 8 ) = -1.000000;
87 aXiHat( 2, 8 ) = -1.000000;
88
89 aXiHat( 0, 9 ) = 1.000000;
90 aXiHat( 1, 9 ) = 0.000000;
91 aXiHat( 2, 9 ) = -1.000000;
92
93 aXiHat( 0, 10 ) = 0.000000;
94 aXiHat( 1, 10 ) = 1.000000;
95 aXiHat( 2, 10 ) = -1.000000;
96
97 aXiHat( 0, 11 ) = -1.000000;
98 aXiHat( 1, 11 ) = 0.000000;
99 aXiHat( 2, 11 ) = -1.000000;
100
101 aXiHat( 0, 12 ) = -1.000000;
102 aXiHat( 1, 12 ) = -1.000000;
103 aXiHat( 2, 12 ) = 0.000000;
104
105 aXiHat( 0, 13 ) = 1.000000;
106 aXiHat( 1, 13 ) = -1.000000;
107 aXiHat( 2, 13 ) = 0.000000;
108
109 aXiHat( 0, 14 ) = 1.000000;
110 aXiHat( 1, 14 ) = 1.000000;
111 aXiHat( 2, 14 ) = 0.000000;
112
113 aXiHat( 0, 15 ) = -1.000000;
114 aXiHat( 1, 15 ) = 1.000000;
115 aXiHat( 2, 15 ) = 0.000000;
116
117 aXiHat( 0, 16 ) = 0.000000;
118 aXiHat( 1, 16 ) = -1.000000;
119 aXiHat( 2, 16 ) = 1.000000;
120
121 aXiHat( 0, 17 ) = 1.000000;
122 aXiHat( 1, 17 ) = 0.000000;
123 aXiHat( 2, 17 ) = 1.000000;
124
125 aXiHat( 0, 18 ) = 0.000000;
126 aXiHat( 1, 18 ) = 1.000000;
127 aXiHat( 2, 18 ) = 1.000000;
128
129 aXiHat( 0, 19 ) = -1.000000;
130 aXiHat( 1, 19 ) = 0.000000;
131 aXiHat( 2, 19 ) = 1.000000;
132 }
133
134//------------------------------------------------------------------------------
135
136 template<>
137 void
140 const Vector< real > & aXi,
141 Matrix< real > & aN ) const
142 {
143 const real xi = aXi( 0 );
144 const real eta = aXi( 1 );
145 const real zeta = aXi( 2 );
146
147 const real xi2 = xi*xi;
148 const real eta2 = eta*eta;
149 const real zeta2 = zeta*zeta;
150
151 aN.set_size( 1, 20 );
152
153 aN( 0, 0 ) = ( eta - 1.0 ) * ( xi - 1.0 ) * ( zeta - 1.0 ) * ( eta + xi + zeta + 2.0 ) * 0.125;
154 aN( 0, 1 ) = - ( eta - 1.0 ) * ( xi + 1.0 ) * ( zeta - 1.0 ) * ( eta - xi + zeta + 2.0 ) * 0.125;
155 aN( 0, 2 ) = - ( eta + 1.0 ) * ( xi + 1.0 ) * ( zeta - 1.0 ) * ( eta + xi - zeta - 2.0 ) * 0.125;
156 aN( 0, 3 ) = - ( eta + 1.0 ) * ( xi - 1.0 ) * ( zeta - 1.0 ) * ( - eta + xi + zeta + 2.0 ) * 0.125;
157 aN( 0, 4 ) = - ( eta - 1.0 ) * ( xi - 1.0 ) * ( zeta + 1.0 ) * ( eta + xi - zeta + 2.0 ) * 0.125;
158 aN( 0, 5 ) = ( eta - 1.0 ) * ( xi + 1.0 ) * ( zeta + 1.0 ) * ( eta - xi - zeta + 2.0 ) * 0.125;
159 aN( 0, 6 ) = ( eta + 1.0 ) * ( xi + 1.0 ) * ( zeta + 1.0 ) * ( eta + xi + zeta - 2.0 ) * 0.125;
160 aN( 0, 7 ) = - ( eta + 1.0 ) * ( xi - 1.0 ) * ( zeta + 1.0 ) * ( eta - xi + zeta - 2.0 ) * 0.125;
161 aN( 0, 8 ) = - ( xi2 - 1.0 ) * ( eta - 1.0 ) * ( zeta - 1.0 ) * 0.25;
162 aN( 0, 9 ) = ( eta2 - 1.0 ) * ( xi + 1.0 ) * ( zeta - 1.0 ) * 0.25;
163 aN( 0, 10 ) = ( xi2 - 1.0 ) * ( eta + 1.0 ) * ( zeta - 1.0 ) * 0.25;
164 aN( 0, 11 ) = - ( eta2 - 1.0 ) * ( xi - 1.0 ) * ( zeta - 1.0 ) * 0.25;
165 aN( 0, 12 ) = - ( zeta2- 1.0 ) * ( eta - 1.0 ) * ( xi - 1.0 ) * 0.25;
166 aN( 0, 13 ) = ( zeta2- 1.0 ) * ( eta - 1.0 ) * ( xi + 1.0 ) * 0.25;
167 aN( 0, 14 ) = - ( zeta2- 1.0 ) * ( eta + 1.0 ) * ( xi + 1.0 ) * 0.25;
168 aN( 0, 15 ) = ( zeta2- 1.0 ) * ( eta + 1.0 ) * ( xi - 1.0 ) * 0.25;
169 aN( 0, 16 ) = ( xi2 - 1.0 ) * ( eta - 1.0 ) * ( zeta + 1.0 ) * 0.25;
170 aN( 0, 17 ) = - ( eta2 - 1.0 ) * ( xi + 1.0 ) * ( zeta + 1.0 ) * 0.25;
171 aN( 0, 18 ) = - ( xi2 - 1.0 ) * ( eta + 1.0 ) * ( zeta + 1.0 ) * 0.25;
172 aN( 0, 19 ) = ( eta2 - 1.0 ) * ( xi - 1.0 ) * ( zeta + 1.0 ) * 0.25;
173 }
174
175//------------------------------------------------------------------------------
176
177 template<>
178 void
181 const Vector< real > & aXi,
182 Matrix< real > & adNdXi ) const
183 {
184 const real xi = aXi( 0 );
185 const real eta = aXi( 1 );
186 const real zeta = aXi( 2 );
187
188 const real xi2 = xi*xi;
189 const real eta2 = eta*eta;
190 const real zeta2 = zeta*zeta;
191
192 adNdXi.set_size( 3, 20 );
193
194 adNdXi( 0, 0 ) = ( ( eta - 1.0 ) * ( zeta - 1.0 ) * ( eta + 2.0 * xi + zeta + 1.0 ) ) * 0.125;
195 adNdXi( 1, 0 ) = ( ( xi - 1.0 ) * ( zeta - 1.0 ) * ( 2.0 * eta + xi + zeta + 1.0 ) ) * 0.125;
196 adNdXi( 2, 0 ) = ( ( eta - 1.0 ) * ( xi - 1.0 ) * ( eta + xi + 2.0 * zeta + 1.0 ) ) * 0.125;
197
198 adNdXi( 0, 1 ) = - ( ( eta - 1.0 ) * ( zeta - 1.0 ) * ( eta - 2.0 * xi + zeta + 1.0 ) ) * 0.125;
199 adNdXi( 1, 1 ) = - ( ( xi + 1.0 ) * ( zeta - 1.0 ) * ( 2.0 * eta - xi + zeta + 1.0 ) ) * 0.125;
200 adNdXi( 2, 1 ) = - ( ( eta - 1.0 ) * ( xi + 1.0 ) * ( eta - xi + 2.0 * zeta + 1.0 ) ) * 0.125;
201
202 adNdXi( 0, 2 ) = - ( ( eta + 1.0 ) * ( zeta - 1.0 ) * ( eta + 2.0 * xi - zeta - 1.0 ) ) * 0.125;
203 adNdXi( 1, 2 ) = - ( ( xi + 1.0 ) * ( zeta - 1.0 ) * ( 2.0 * eta + xi - zeta - 1.0 ) ) * 0.125;
204 adNdXi( 2, 2 ) = - ( ( eta + 1.0 ) * ( xi + 1.0 ) * ( eta + xi - 2.0 * zeta - 1.0 ) ) * 0.125;
205
206 adNdXi( 0, 3 ) = - ( ( eta + 1.0 ) * ( zeta - 1.0 ) * ( 2.0 * xi - eta + zeta + 1.0 ) ) * 0.125;
207 adNdXi( 1, 3 ) = - ( ( xi - 1.0 ) * ( zeta - 1.0 ) * ( xi - 2.0 * eta + zeta + 1.0 ) ) * 0.125;
208 adNdXi( 2, 3 ) = - ( ( eta + 1.0 ) * ( xi - 1.0 ) * ( xi - eta + 2.0 * zeta + 1.0 ) ) * 0.125;
209
210 adNdXi( 0, 4 ) = - ( ( eta - 1.0 ) * ( zeta + 1.0 ) * ( eta + 2.0 * xi - zeta + 1.0 ) ) * 0.125;
211 adNdXi( 1, 4 ) = - ( ( xi - 1.0 ) * ( zeta + 1.0 ) * ( 2.0 * eta + xi - zeta + 1.0 ) ) * 0.125;
212 adNdXi( 2, 4 ) = - ( ( eta - 1.0 ) * ( xi - 1.0 ) * ( eta + xi - 2.0 * zeta + 1.0 ) ) * 0.125;
213
214 adNdXi( 0, 5 )= ( ( eta - 1.0 ) * ( zeta + 1.0 ) * ( eta - 2.0 * xi - zeta + 1.0 ) ) * 0.125;
215 adNdXi( 1, 5 )= ( ( xi + 1.0 ) * ( zeta + 1.0 ) * ( 2.0 * eta - xi - zeta + 1.0 ) ) * 0.125;
216 adNdXi( 2, 5 )= ( ( eta - 1.0 ) * ( xi + 1.0 ) * ( eta - xi - 2.0 * zeta + 1.0 ) ) * 0.125;
217
218 adNdXi( 0, 6 )= ( ( eta + 1.0 ) * ( zeta + 1.0 ) * ( eta + 2.0 * xi + zeta - 1.0 ) ) * 0.125;
219 adNdXi( 1, 6 )= ( ( xi + 1.0 ) * ( zeta + 1.0 ) * ( 2.0 * eta + xi + zeta - 1.0 ) ) * 0.125;
220 adNdXi( 2, 6 )= ( ( eta + 1.0 ) * ( xi + 1.0 ) * ( eta + xi + 2.0 * zeta - 1.0 ) ) * 0.125;
221
222 adNdXi( 0, 7 )= - ( ( eta + 1.0 ) * ( zeta + 1.0 ) * ( eta - 2.0 * xi + zeta - 1.0 ) ) * 0.125;
223 adNdXi( 1, 7 )= - ( ( xi - 1.0 ) * ( zeta + 1.0 ) * ( 2.0 * eta - xi + zeta - 1.0 ) ) * 0.125;
224 adNdXi( 2, 7 )= - ( ( eta + 1.0 ) * ( xi - 1.0 ) * ( eta - xi + 2.0 * zeta - 1.0 ) ) * 0.125;
225
226 adNdXi( 0, 8 )= - ( xi * ( eta - 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
227 adNdXi( 1, 8 )= - ( ( xi2 - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
228 adNdXi( 2, 8 )= - ( ( xi2 - 1.0 ) * ( eta - 1.0 ) ) * 0.25;
229
230 adNdXi( 0, 9 )= ( ( eta2 - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
231 adNdXi( 1, 9 )= ( eta * ( xi + 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
232 adNdXi( 2, 9 )= ( ( eta2 - 1.0 ) * ( xi + 1.0 ) ) * 0.25;
233
234 adNdXi( 0, 10 )= ( xi * ( eta + 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
235 adNdXi( 1, 10 )= ( ( xi2 - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
236 adNdXi( 2, 10 )= ( ( xi2 - 1.0 ) * ( eta + 1.0 ) ) * 0.25;
237
238 adNdXi( 0, 11 )= - ( ( eta2 - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
239 adNdXi( 1, 11 )= - ( eta * ( xi - 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
240 adNdXi( 2, 11 )= - ( ( eta2 - 1.0 ) * ( xi - 1.0 ) ) * 0.25;
241
242 adNdXi( 0, 12 )= - ( ( zeta2 - 1.0 ) * ( eta - 1.0 ) ) * 0.25;
243 adNdXi( 1, 12 )= - ( ( zeta2 - 1.0 ) * ( xi - 1.0 ) ) * 0.25;
244 adNdXi( 2, 12 )= - ( zeta * ( eta - 1.0 ) * ( xi - 1.0 ) ) * 0.5;
245
246 adNdXi( 0, 13 )= ( ( zeta2 - 1.0 ) * ( eta - 1.0 ) ) * 0.25;
247 adNdXi( 1, 13 )= ( ( zeta2 - 1.0 ) * ( xi + 1.0 ) ) * 0.25;
248 adNdXi( 2, 13 )= ( zeta * ( eta - 1.0 ) * ( xi + 1.0 ) ) * 0.5;
249
250 adNdXi( 0, 14 )= - ( ( zeta2 - 1.0 ) * ( eta + 1.0 ) ) * 0.25;
251 adNdXi( 1, 14 )= - ( ( zeta2 - 1.0 ) * ( xi + 1.0 ) ) * 0.25;
252 adNdXi( 2, 14 )= - ( zeta * ( eta + 1.0 ) * ( xi + 1.0 ) ) * 0.5;
253
254 adNdXi( 0, 15 )= ( ( zeta2 - 1.0 ) * ( eta + 1.0 ) ) * 0.25;
255 adNdXi( 1, 15 )= ( ( zeta2 - 1.0 ) * ( xi - 1.0 ) ) * 0.25;
256 adNdXi( 2, 15 )= ( zeta * ( eta + 1.0 ) * ( xi - 1.0 ) ) * 0.5;
257
258 adNdXi( 0, 16 )= ( xi * ( eta - 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
259 adNdXi( 1, 16 )= ( ( xi2 - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
260 adNdXi( 2, 16 )= ( ( xi2 - 1.0 ) * ( eta - 1.0 ) ) * 0.25;
261
262 adNdXi( 0, 17 )= - ( ( eta2 - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
263 adNdXi( 1, 17 )= - ( eta * ( xi + 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
264 adNdXi( 2, 17 )= - ( ( eta2 - 1.0 ) * ( xi + 1.0 ) ) * 0.25;
265
266 adNdXi( 0, 18 )= - ( xi * ( eta + 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
267 adNdXi( 1, 18 )= - ( ( xi2 - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
268 adNdXi( 2, 18 )= - ( ( xi2 - 1.0 ) * ( eta + 1.0 ) ) * 0.25;
269
270 adNdXi( 0, 19 )= ( ( eta2 - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
271 adNdXi( 1, 19 )= ( eta * ( xi - 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
272 adNdXi( 2, 19 )= ( ( eta2 - 1.0 ) * ( xi - 1.0 ) ) * 0.25;
273 }
274
275//------------------------------------------------------------------------------
276
277 template<>
278 void
281 const Vector< real > & aXi,
282 Matrix< real > & ad2NdXi2 ) const
283 {
284 const real xi = aXi( 0 );
285 const real eta = aXi( 1 );
286 const real zeta = aXi( 2 );
287
288 const real xi2 = xi*xi;
289 const real eta2 = eta*eta;
290 const real zeta2 = zeta*zeta;
291
292 ad2NdXi2.set_size( 6, 20 );
293
294 ad2NdXi2( 0, 0 ) = ( ( eta - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
295 ad2NdXi2( 1, 0 ) = ( ( xi - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
296 ad2NdXi2( 2, 0 ) = ( ( eta - 1.0 ) * ( xi - 1.0 ) ) * 0.25;
297 ad2NdXi2( 3, 0 ) = ( ( xi - 1.0 ) * ( 2.0 * ( eta + zeta ) + xi ) ) * 0.125;
298 ad2NdXi2( 4, 0 ) = ( ( eta - 1.0 ) * ( 2.0 * ( xi + zeta ) + eta ) ) * 0.125;
299 ad2NdXi2( 5, 0 ) = ( ( zeta - 1.0 ) * ( 2.0 * ( xi + eta ) + zeta ) ) * 0.125;
300
301 ad2NdXi2( 0, 1 ) = ( ( eta - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
302 ad2NdXi2( 1, 1 ) = - ( ( xi + 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
303 ad2NdXi2( 2, 1 ) = - ( ( eta - 1.0 ) * ( xi + 1.0 ) ) * 0.25;
304 ad2NdXi2( 3, 1 ) = - ( ( xi + 1.0 ) * ( 2.0 * ( eta + zeta ) - xi ) ) * 0.125;
305 ad2NdXi2( 4, 1 ) = - ( ( eta - 1.0 ) * ( eta - 2.0 * ( xi - zeta ) ) ) * 0.125;
306 ad2NdXi2( 5, 1 ) = - ( ( zeta - 1.0 ) * ( 2.0 * ( eta - xi ) + zeta ) ) * 0.125;
307
308 ad2NdXi2( 0, 2 ) = - ( ( eta + 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
309 ad2NdXi2( 1, 2 ) = - ( ( xi + 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
310 ad2NdXi2( 2, 2 ) = ( ( eta + 1.0 ) * ( xi + 1.0 ) ) * 0.25;
311 ad2NdXi2( 3, 2 ) = - ( ( xi + 1.0 ) * ( 2.0 * eta + xi - 2.0 * zeta ) ) * 0.125;
312 ad2NdXi2( 4, 2 ) = - ( ( eta + 1.0 ) * ( eta + 2.0 * xi - 2.0 * zeta ) ) * 0.125;
313 ad2NdXi2( 5, 2 ) = - ( ( zeta - 1.0 ) * ( 2.0 * eta + 2.0 * xi - zeta ) ) * 0.125;
314
315 ad2NdXi2( 0, 3 ) = - ( ( eta + 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
316 ad2NdXi2( 1, 3 ) = ( ( xi - 1.0 ) * ( zeta - 1.0 ) ) * 0.25;
317 ad2NdXi2( 2, 3 ) = - ( ( eta + 1.0 ) * ( xi - 1.0 ) ) * 0.25;
318 ad2NdXi2( 3, 3 ) = - ( ( xi - 1.0 ) * ( xi - 2.0 * ( eta - zeta ) ) ) * 0.125;
319 ad2NdXi2( 4, 3 ) = - ( ( eta + 1.0 ) * ( 2.0 * ( xi + zeta ) - eta ) ) * 0.125;
320 ad2NdXi2( 5, 3 ) = - ( ( zeta - 1.0 ) * ( zeta - 2.0 * ( eta - xi ) ) ) * 0.125;
321
322 ad2NdXi2( 0, 4 ) = - ( ( eta - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
323 ad2NdXi2( 1, 4 ) = - ( ( xi - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
324 ad2NdXi2( 2, 4 ) = ( ( eta - 1.0 ) * ( xi - 1.0 ) ) * 0.25;
325 ad2NdXi2( 3, 4 ) = - ( ( xi - 1.0 ) * ( 2.0 * eta + xi - 2.0 * zeta ) ) * 0.125;
326 ad2NdXi2( 4, 4 ) = - ( ( eta - 1.0 ) * ( eta + 2.0 * xi - 2.0 * zeta ) ) * 0.125;
327 ad2NdXi2( 5, 4 ) = - ( ( zeta + 1.0 ) * ( 2.0 * eta + 2.0 * xi - zeta ) ) * 0.125;
328
329 ad2NdXi2( 0, 5 ) = - ( ( eta - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
330 ad2NdXi2( 1, 5 ) = ( ( xi + 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
331 ad2NdXi2( 2, 5 ) = - ( ( eta - 1.0 ) * ( xi + 1.0 ) ) * 0.25;
332 ad2NdXi2( 3, 5 ) = - ( ( xi + 1.0 ) * ( xi - 2.0 * ( eta - zeta ) ) ) * 0.125;
333 ad2NdXi2( 4, 5 ) = - ( ( eta - 1.0 ) * ( 2.0 * ( xi + zeta ) - eta ) ) * 0.125;
334 ad2NdXi2( 5, 5 ) = - ( ( zeta + 1.0 ) * ( zeta - 2.0 * ( eta - xi ) ) ) * 0.125;
335
336 ad2NdXi2( 0, 6 ) = ( ( eta + 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
337 ad2NdXi2( 1, 6 ) = ( ( xi + 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
338 ad2NdXi2( 2, 6 ) = ( ( eta + 1.0 ) * ( xi + 1.0 ) ) * 0.25;
339 ad2NdXi2( 3, 6 ) = ( ( xi + 1.0 ) * ( 2.0 * ( eta + zeta ) + xi ) ) * 0.125;
340 ad2NdXi2( 4, 6 ) = ( ( eta + 1.0 ) * ( 2.0 * ( xi + zeta ) + eta ) ) * 0.125;
341 ad2NdXi2( 5, 6 ) = ( ( zeta + 1.0 ) * ( 2.0 * ( xi + eta ) + zeta ) ) * 0.125;
342
343 ad2NdXi2( 0, 7 ) = ( ( eta + 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
344 ad2NdXi2( 1, 7 ) = - ( ( xi - 1.0 ) * ( zeta + 1.0 ) ) * 0.25;
345 ad2NdXi2( 2, 7 ) = - ( ( eta + 1.0 ) * ( xi - 1.0 ) ) * 0.25;
346 ad2NdXi2( 3, 7 ) = - ( ( xi - 1.0 ) * ( 2.0 * ( eta + zeta ) - xi ) ) * 0.125;
347 ad2NdXi2( 4, 7 ) = - ( ( eta + 1.0 ) * ( eta - 2.0 * ( xi - zeta ) ) ) * 0.125;
348 ad2NdXi2( 5, 7 ) = - ( ( zeta + 1.0 ) * ( 2.0 * ( eta - xi ) + zeta ) ) * 0.125;
349
350 ad2NdXi2( 0, 8 ) = - ( ( eta - 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
351 ad2NdXi2( 1, 8 ) = 0.0;
352 ad2NdXi2( 2, 8 ) = 0.0;
353 ad2NdXi2( 3, 8 ) = 0.25 - xi2 * 0.25;
354 ad2NdXi2( 4, 8 ) = - ( xi * ( eta - 1.0 ) ) * 0.5;
355 ad2NdXi2( 5, 8 ) = - ( xi * ( zeta - 1.0 ) ) * 0.5;
356
357 ad2NdXi2( 0, 9 ) = 0.0;
358 ad2NdXi2( 1, 9 ) = ( ( xi + 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
359 ad2NdXi2( 2, 9 ) = 0.0;
360 ad2NdXi2( 3, 9 ) = ( eta * ( xi + 1.0 ) ) * 0.5;
361 ad2NdXi2( 4, 9 ) = eta2 * 0.25 - 0.25;
362 ad2NdXi2( 5, 9 ) = ( eta * ( zeta - 1.0 ) ) * 0.5;
363
364 ad2NdXi2( 0, 10 ) = ( ( eta + 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
365 ad2NdXi2( 1, 10 ) = 0.0;
366 ad2NdXi2( 2, 10 ) = 0.0;
367 ad2NdXi2( 3, 10 ) = xi2 * 0.25 - 0.25;
368 ad2NdXi2( 4, 10 ) = ( xi * ( eta + 1.0 ) ) * 0.5;
369 ad2NdXi2( 5, 10 ) = ( xi * ( zeta - 1.0 ) ) * 0.5;
370
371 ad2NdXi2( 0, 11 ) = 0.0;
372 ad2NdXi2( 1, 11 ) = - ( ( xi - 1.0 ) * ( zeta - 1.0 ) ) * 0.5;
373 ad2NdXi2( 2, 11 ) = 0.0;
374 ad2NdXi2( 3, 11 ) = - ( eta * ( xi - 1.0 ) ) * 0.5;
375 ad2NdXi2( 4, 11 ) = 0.25 - eta2 * 0.25;
376 ad2NdXi2( 5, 11 ) = - ( eta * ( zeta - 1.0 ) ) * 0.5;
377
378 ad2NdXi2( 0, 12 ) = 0.0;
379 ad2NdXi2( 1, 12 ) = 0.0;
380 ad2NdXi2( 2, 12 ) = - ( ( eta - 1.0 ) * ( xi - 1.0 ) ) * 0.5;
381 ad2NdXi2( 3, 12 ) = - ( zeta * ( xi - 1.0 ) ) * 0.5;
382 ad2NdXi2( 4, 12 ) = - ( zeta * ( eta - 1.0 ) ) * 0.5;
383 ad2NdXi2( 5, 12 ) = 0.25 - zeta2 * 0.25;
384
385 ad2NdXi2( 0, 13 ) = 0.0;
386 ad2NdXi2( 1, 13 ) = 0.0;
387 ad2NdXi2( 2, 13 ) = ( ( eta - 1.0 ) * ( xi + 1.0 ) ) * 0.5;
388 ad2NdXi2( 3, 13 ) = ( zeta * ( xi + 1.0 ) ) * 0.5;
389 ad2NdXi2( 4, 13 ) = ( zeta * ( eta - 1.0 ) ) * 0.5;
390 ad2NdXi2( 5, 13 ) = zeta2 * 0.25 - 0.25;
391
392 ad2NdXi2( 0, 14 ) = 0.0;
393 ad2NdXi2( 1, 14 ) = 0.0;
394 ad2NdXi2( 2, 14 ) = - ( ( eta + 1.0 ) * ( xi + 1.0 ) ) * 0.5;
395 ad2NdXi2( 3, 14 ) = - ( zeta * ( xi + 1.0 ) ) * 0.5;
396 ad2NdXi2( 4, 14 ) = - ( zeta * ( eta + 1.0 ) ) * 0.5;
397 ad2NdXi2( 5, 14 ) = 0.25 - zeta2 * 0.25;
398
399 ad2NdXi2( 0, 15 ) = 0.0;
400 ad2NdXi2( 1, 15 ) = 0.0;
401 ad2NdXi2( 2, 15 ) = ( ( eta + 1.0 ) * ( xi - 1.0 ) ) * 0.5;
402 ad2NdXi2( 3, 15 ) = ( zeta * ( xi - 1.0 ) ) * 0.5;
403 ad2NdXi2( 4, 15 ) = ( zeta * ( eta + 1.0 ) ) * 0.5;
404 ad2NdXi2( 5, 15 ) = zeta2 * 0.25 - 0.25;
405
406 ad2NdXi2( 0, 16 ) = ( ( eta - 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
407 ad2NdXi2( 1, 16 ) = 0.0;
408 ad2NdXi2( 2, 16 ) = 0.0;
409 ad2NdXi2( 3, 16 ) = xi2 * 0.25 - 0.25;
410 ad2NdXi2( 4, 16 ) = ( xi * ( eta - 1.0 ) ) * 0.5;
411 ad2NdXi2( 5, 16 ) = ( xi * ( zeta + 1.0 ) ) * 0.5;
412
413 ad2NdXi2( 0, 17 ) = 0.0;
414 ad2NdXi2( 1, 17 ) = - ( ( xi + 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
415 ad2NdXi2( 2, 17 ) = 0.0;
416 ad2NdXi2( 3, 17 ) = - ( eta * ( xi + 1.0 ) ) * 0.5;
417 ad2NdXi2( 4, 17 ) = 0.25 - eta2 * 0.25;
418 ad2NdXi2( 5, 17 ) = - ( eta * ( zeta + 1.0 ) ) * 0.5;
419
420 ad2NdXi2( 0, 18 ) = - ( ( eta + 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
421 ad2NdXi2( 1, 18 ) = 0.0;
422 ad2NdXi2( 2, 18 ) = 0.0;
423 ad2NdXi2( 3, 18 ) = 0.25 - xi2 * 0.25;
424 ad2NdXi2( 4, 18 ) = - ( xi * ( eta + 1.0 ) ) * 0.5;
425 ad2NdXi2( 5, 18 ) = - ( xi * ( zeta + 1.0 ) ) * 0.5;
426
427 ad2NdXi2( 0, 19 ) = 0.0;
428 ad2NdXi2( 1, 19 ) = ( ( xi - 1.0 ) * ( zeta + 1.0 ) ) * 0.5;
429 ad2NdXi2( 2, 19 ) = 0.0;
430 ad2NdXi2( 3, 19 ) = ( eta * ( xi - 1.0 ) ) * 0.5;
431 ad2NdXi2( 4, 19 ) = eta2 * 0.25 - 0.25;
432 ad2NdXi2( 5, 19 ) = ( eta * ( zeta + 1.0 ) ) * 0.5;
433 }
434
435//------------------------------------------------------------------------------
436 }
437}
438
439#endif //BELFEM_CL_IF_HEX20_HPP
void set_size(const size_t aNumRows, const size_t aNumCols)
Definition cl_AR_Matrix.hpp:186
shape function templated class G : Geometry T : Type D : Dimension B : Number of Basis
Definition cl_IF_InterpolationFunctionTemplate.hpp:25
void param_coords(Matrix< real > &aXiHat) const override
returns a matrix containing the parameter coordinates of the nodes < number of dimensions x number of...
Definition cl_IF_InterpolationFunctionTemplate.hpp:49
InterpolationOrder interpolation_order() const override
returns the interpolation order
Definition cl_IF_InterpolationFunctionTemplate.hpp:145
void d2NdXi2(const Vector< real > &aXi, Matrix< real > &ad2NdXi2) const override
calculates the second derivative of the shape function in parameter space
Definition cl_IF_InterpolationFunctionTemplate.hpp:110
void dNdXi(const Vector< real > &aXi, Matrix< real > &adNdXi) const override
calculates the first derivative of the shape function in parameter space
Definition cl_IF_InterpolationFunctionTemplate.hpp:89
void N(const Vector< real > &aXi, Matrix< real > &aN) const override
evaluates the shape function at a given point
Definition cl_IF_InterpolationFunctionTemplate.hpp:68
Definition cl_IFB_LINE3.hpp:21
USER GUIDES:
Definition cl_Capacitor.cpp:16
@ LAGRANGE
Definition Mesh_Enums.hpp:100
ElementType element_type(const std::string &aStr)
Definition Mesh_Enums.hpp:370
ElementType
Element types.
Definition Mesh_Enums.hpp:27
@ HEX20
Definition Mesh_Enums.hpp:45
InterpolationOrder
Definition Mesh_Enums.hpp:85
@ SERENDIPITY
Definition Mesh_Enums.hpp:89
double real
Definition typedefs.hpp:36
@ HEX
Definition Mesh_Enums.hpp:76