BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_IF_HEX64.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_HEX64_HPP
13#define BELFEM_CL_IF_HEX64_HPP
14
16
17namespace belfem
18{
19 namespace fem
20 {
21//------------------------------------------------------------------------------
22
23 template<>
31
32//------------------------------------------------------------------------------
33
34 template<>
39 {
40 return ElementType::HEX64;
41 }
42
43//------------------------------------------------------------------------------
44
45 template<>
46 void
50 {
51 const real c = 1.0/3.0;
52
53 aXiHat.set_size( 3, 64 );
54
55 aXiHat( 0, 0 ) = -1.0; aXiHat( 1, 0 ) = -1.0; aXiHat( 2, 0 ) = -1.0;
56 aXiHat( 0, 1 ) = 1.0; aXiHat( 1, 1 ) = -1.0; aXiHat( 2, 1 ) = -1.0;
57 aXiHat( 0, 2 ) = 1.0; aXiHat( 1, 2 ) = 1.0; aXiHat( 2, 2 ) = -1.0;
58 aXiHat( 0, 3 ) = -1.0; aXiHat( 1, 3 ) = 1.0; aXiHat( 2, 3 ) = -1.0;
59 aXiHat( 0, 4 ) = -1.0; aXiHat( 1, 4 ) = -1.0; aXiHat( 2, 4 ) = 1.0;
60 aXiHat( 0, 5 ) = 1.0; aXiHat( 1, 5 ) = -1.0; aXiHat( 2, 5 ) = 1.0;
61 aXiHat( 0, 6 ) = 1.0; aXiHat( 1, 6 ) = 1.0; aXiHat( 2, 6 ) = 1.0;
62 aXiHat( 0, 7 ) = -1.0; aXiHat( 1, 7 ) = 1.0; aXiHat( 2, 7 ) = 1.0;
63
64 aXiHat( 0, 8 ) = -c; aXiHat( 1, 8 ) = -1.0; aXiHat( 2, 8 ) = -1.0;
65 aXiHat( 0, 9 ) = c; aXiHat( 1, 9 ) = -1.0; aXiHat( 2, 9 ) = -1.0;
66 aXiHat( 0, 10 ) = -1.0; aXiHat( 1, 10 ) = -c; aXiHat( 2, 10 ) = -1.0;
67 aXiHat( 0, 11 ) = -1.0; aXiHat( 1, 11 ) = c; aXiHat( 2, 11 ) = -1.0;
68 aXiHat( 0, 12 ) = -1.0; aXiHat( 1, 12 ) = -1.0; aXiHat( 2, 12 ) = -c;
69 aXiHat( 0, 13 ) = -1.0; aXiHat( 1, 13 ) = -1.0; aXiHat( 2, 13 ) = c;
70 aXiHat( 0, 14 ) = 1.0; aXiHat( 1, 14 ) = -c; aXiHat( 2, 14 ) = -1.0;
71 aXiHat( 0, 15 ) = 1.0; aXiHat( 1, 15 ) = c; aXiHat( 2, 15 ) = -1.0;
72 aXiHat( 0, 16 ) = 1.0; aXiHat( 1, 16 ) = -1.0; aXiHat( 2, 16 ) = -c;
73 aXiHat( 0, 17 ) = 1.0; aXiHat( 1, 17 ) = -1.0; aXiHat( 2, 17 ) = c;
74 aXiHat( 0, 18 ) = c; aXiHat( 1, 18 ) = 1.0; aXiHat( 2, 18 ) = -1.0;
75 aXiHat( 0, 19 ) = -c; aXiHat( 1, 19 ) = 1.0; aXiHat( 2, 19 ) = -1.0;
76 aXiHat( 0, 20 ) = 1.0; aXiHat( 1, 20 ) = 1.0; aXiHat( 2, 20 ) = -c;
77 aXiHat( 0, 21 ) = 1.0; aXiHat( 1, 21 ) = 1.0; aXiHat( 2, 21 ) = c;
78 aXiHat( 0, 22 ) = -1.0; aXiHat( 1, 22 ) = 1.0; aXiHat( 2, 22 ) = -c;
79 aXiHat( 0, 23 ) = -1.0; aXiHat( 1, 23 ) = 1.0; aXiHat( 2, 23 ) = c;
80 aXiHat( 0, 24 ) = -c; aXiHat( 1, 24 ) = -1.0; aXiHat( 2, 24 ) = 1.0;
81 aXiHat( 0, 25 ) = c; aXiHat( 1, 25 ) = -1.0; aXiHat( 2, 25 ) = 1.0;
82 aXiHat( 0, 26 ) = -1.0; aXiHat( 1, 26 ) = -c; aXiHat( 2, 26 ) = 1.0;
83 aXiHat( 0, 27 ) = -1.0; aXiHat( 1, 27 ) = c; aXiHat( 2, 27 ) = 1.0;
84 aXiHat( 0, 28 ) = 1.0; aXiHat( 1, 28 ) = -c; aXiHat( 2, 28 ) = 1.0;
85 aXiHat( 0, 29 ) = 1.0; aXiHat( 1, 29 ) = c; aXiHat( 2, 29 ) = 1.0;
86 aXiHat( 0, 30 ) = c; aXiHat( 1, 30 ) = 1.0; aXiHat( 2, 30 ) = 1.0;
87 aXiHat( 0, 31 ) = -c; aXiHat( 1, 31 ) = 1.0; aXiHat( 2, 31 ) = 1.0;
88
89 aXiHat( 0, 32 ) = -c; aXiHat( 1, 32 ) = -c; aXiHat( 2, 32 ) = -1.0;
90 aXiHat( 0, 33 ) = -c; aXiHat( 1, 33 ) = c; aXiHat( 2, 33 ) = -1.0;
91 aXiHat( 0, 34 ) = c; aXiHat( 1, 34 ) = c; aXiHat( 2, 34 ) = -1.0;
92 aXiHat( 0, 35 ) = c; aXiHat( 1, 35 ) = -c; aXiHat( 2, 35 ) = -1.0;
93
94 aXiHat( 0, 36 ) = -c; aXiHat( 1, 36 ) = -1.0; aXiHat( 2, 36 ) = -c;
95 aXiHat( 0, 37 ) = c; aXiHat( 1, 37 ) = -1.0; aXiHat( 2, 37 ) = -c;
96 aXiHat( 0, 38 ) = c; aXiHat( 1, 38 ) = -1.0; aXiHat( 2, 38 ) = c;
97 aXiHat( 0, 39 ) = -c; aXiHat( 1, 39 ) = -1.0; aXiHat( 2, 39 ) = c;
98
99 aXiHat( 0, 40 ) = -1.0; aXiHat( 1, 40 ) = -c; aXiHat( 2, 40 ) = -c;
100 aXiHat( 0, 41 ) = -1.0; aXiHat( 1, 41 ) = -c; aXiHat( 2, 41 ) = c;
101 aXiHat( 0, 42 ) = -1.0; aXiHat( 1, 42 ) = c; aXiHat( 2, 42 ) = c;
102 aXiHat( 0, 43 ) = -1.0; aXiHat( 1, 43 ) = c; aXiHat( 2, 43 ) = -c;
103
104 aXiHat( 0, 44 ) = 1.0; aXiHat( 1, 44 ) = -c; aXiHat( 2, 44 ) = -c;
105 aXiHat( 0, 45 ) = 1.0; aXiHat( 1, 45 ) = c; aXiHat( 2, 45 ) = -c;
106 aXiHat( 0, 46 ) = 1.0; aXiHat( 1, 46 ) = c; aXiHat( 2, 46 ) = c;
107 aXiHat( 0, 47 ) = 1.0; aXiHat( 1, 47 ) = -c; aXiHat( 2, 47 ) = c;
108
109 aXiHat( 0, 48 ) = c; aXiHat( 1, 48 ) = 1.0; aXiHat( 2, 48 ) = -c;
110 aXiHat( 0, 49 ) = -c; aXiHat( 1, 49 ) = 1.0; aXiHat( 2, 49 ) = -c;
111 aXiHat( 0, 50 ) = -c; aXiHat( 1, 50 ) = 1.0; aXiHat( 2, 50 ) = c;
112 aXiHat( 0, 51 ) = c; aXiHat( 1, 51 ) = 1.0; aXiHat( 2, 51 ) = c;
113
114 aXiHat( 0, 52 ) = -c; aXiHat( 1, 52 ) = -c; aXiHat( 2, 52 ) = 1.0;
115 aXiHat( 0, 53 ) = c; aXiHat( 1, 53 ) = -c; aXiHat( 2, 53 ) = 1.0;
116 aXiHat( 0, 54 ) = c; aXiHat( 1, 54 ) = c; aXiHat( 2, 54 ) = 1.0;
117 aXiHat( 0, 55 ) = -c; aXiHat( 1, 55 ) = c; aXiHat( 2, 55 ) = 1.0;
118
119 aXiHat( 0, 56 ) = -c; aXiHat( 1, 56 ) = -c; aXiHat( 2, 56 ) = -c;
120 aXiHat( 0, 57 ) = c; aXiHat( 1, 57 ) = -c; aXiHat( 2, 57 ) = -c;
121 aXiHat( 0, 58 ) = c; aXiHat( 1, 58 ) = c; aXiHat( 2, 58 ) = -c;
122 aXiHat( 0, 59 ) = -c; aXiHat( 1, 59 ) = c; aXiHat( 2, 59 ) = -c;
123 aXiHat( 0, 60 ) = -c; aXiHat( 1, 60 ) = -c; aXiHat( 2, 60 ) = c;
124 aXiHat( 0, 61 ) = c; aXiHat( 1, 61 ) = -c; aXiHat( 2, 61 ) = c;
125 aXiHat( 0, 62 ) = c; aXiHat( 1, 62 ) = c; aXiHat( 2, 62 ) = c;
126 aXiHat( 0, 63 ) = -c; aXiHat( 1, 63 ) = c; aXiHat( 2, 63 ) = c;
127 }
128
129//------------------------------------------------------------------------------
130
131 template<>
132 void
135 const Vector< real > & aXi,
136 Matrix< real > & aN ) const
137 {
138 const real xi = aXi( 0 );
139 const real eta = aXi( 1 );
140 const real zeta = aXi( 2 );
141
142 const real a0 = ( xi*( 1.0 + 9.0 * xi * ( 1.0 - xi ) ) - 1.0 )*0.0625;
143 const real a1 = ( 9.0 - xi * ( 27.0 + xi*( 9.0 - 27.0*xi ) ) )*0.0625;
144 const real a2 = ( 9.0 + xi * ( 27.0 - xi*( 9.0 + 27.0*xi ) ) )*0.0625;
145 const real a3 = ( -xi*( 1.0 - 9.0 * xi * ( 1.0 + xi ) ) - 1.0 )*0.0625;
146
147 const real b0 = ( eta*( 1.0 + 9.0 * eta * ( 1.0 - eta ) ) - 1.0 )*0.0625;
148 const real b1 = ( 9.0 - eta * ( 27.0 + eta*( 9.0 - 27.0*eta ) ) )*0.0625;
149 const real b2 = ( 9.0 + eta * ( 27.0 - eta*( 9.0 + 27.0*eta ) ) )*0.0625;
150 const real b3 = ( -eta*( 1.0 - 9.0 * eta * ( 1.0 + eta ) ) - 1.0 )*0.0625;
151
152 const real c0 = ( zeta*( 1.0 + 9.0 * zeta * ( 1.0 - zeta ) ) - 1.0 )*0.0625;
153 const real c1 = ( 9.0 - zeta * ( 27.0 + zeta*( 9.0 - 27.0*zeta ) ) )*0.0625;
154 const real c2 = ( 9.0 + zeta * ( 27.0 - zeta*( 9.0 + 27.0*zeta ) ) )*0.0625;
155 const real c3 = ( -zeta*( 1.0 - 9.0 * zeta * ( 1.0 + zeta ) ) - 1.0 )*0.0625;
156
157 aN.set_size( 1, 64 );
158
159 aN( 0, 0 ) = a0 * b0 * c0;
160 aN( 0, 1 ) = a3 * b0 * c0;
161 aN( 0, 2 ) = a3 * b3 * c0;
162 aN( 0, 3 ) = a0 * b3 * c0;
163 aN( 0, 4 ) = a0 * b0 * c3;
164 aN( 0, 5 ) = a3 * b0 * c3;
165 aN( 0, 6 ) = a3 * b3 * c3;
166 aN( 0, 7 ) = a0 * b3 * c3;
167 aN( 0, 8 ) = a1 * b0 * c0;
168 aN( 0, 9 ) = a2 * b0 * c0;
169 aN( 0, 10 ) = a0 * b1 * c0;
170 aN( 0, 11 ) = a0 * b2 * c0;
171 aN( 0, 12 ) = a0 * b0 * c1;
172 aN( 0, 13 ) = a0 * b0 * c2;
173 aN( 0, 14 ) = a3 * b1 * c0;
174 aN( 0, 15 ) = a3 * b2 * c0;
175 aN( 0, 16 ) = a3 * b0 * c1;
176 aN( 0, 17 ) = a3 * b0 * c2;
177 aN( 0, 18 ) = a2 * b3 * c0;
178 aN( 0, 19 ) = a1 * b3 * c0;
179 aN( 0, 20 ) = a3 * b3 * c1;
180 aN( 0, 21 ) = a3 * b3 * c2;
181 aN( 0, 22 ) = a0 * b3 * c1;
182 aN( 0, 23 ) = a0 * b3 * c2;
183 aN( 0, 24 ) = a1 * b0 * c3;
184 aN( 0, 25 ) = a2 * b0 * c3;
185 aN( 0, 26 ) = a0 * b1 * c3;
186 aN( 0, 27 ) = a0 * b2 * c3;
187 aN( 0, 28 ) = a3 * b1 * c3;
188 aN( 0, 29 ) = a3 * b2 * c3;
189 aN( 0, 30 ) = a2 * b3 * c3;
190 aN( 0, 31 ) = a1 * b3 * c3;
191 aN( 0, 32 ) = a1 * b1 * c0;
192 aN( 0, 33 ) = a1 * b2 * c0;
193 aN( 0, 34 ) = a2 * b2 * c0;
194 aN( 0, 35 ) = a2 * b1 * c0;
195 aN( 0, 36 ) = a1 * b0 * c1;
196 aN( 0, 37 ) = a2 * b0 * c1;
197 aN( 0, 38 ) = a2 * b0 * c2;
198 aN( 0, 39 ) = a1 * b0 * c2;
199 aN( 0, 40 ) = a0 * b1 * c1;
200 aN( 0, 41 ) = a0 * b1 * c2;
201 aN( 0, 42 ) = a0 * b2 * c2;
202 aN( 0, 43 ) = a0 * b2 * c1;
203 aN( 0, 44 ) = a3 * b1 * c1;
204 aN( 0, 45 ) = a3 * b2 * c1;
205 aN( 0, 46 ) = a3 * b2 * c2;
206 aN( 0, 47 ) = a3 * b1 * c2;
207 aN( 0, 48 ) = a2 * b3 * c1;
208 aN( 0, 49 ) = a1 * b3 * c1;
209 aN( 0, 50 ) = a1 * b3 * c2;
210 aN( 0, 51 ) = a2 * b3 * c2;
211 aN( 0, 52 ) = a1 * b1 * c3;
212 aN( 0, 53 ) = a2 * b1 * c3;
213 aN( 0, 54 ) = a2 * b2 * c3;
214 aN( 0, 55 ) = a1 * b2 * c3;
215 aN( 0, 56 ) = a1 * b1 * c1;
216 aN( 0, 57 ) = a2 * b1 * c1;
217 aN( 0, 58 ) = a2 * b2 * c1;
218 aN( 0, 59 ) = a1 * b2 * c1;
219 aN( 0, 60 ) = a1 * b1 * c2;
220 aN( 0, 61 ) = a2 * b1 * c2;
221 aN( 0, 62 ) = a2 * b2 * c2;
222 aN( 0, 63 ) = a1 * b2 * c2;
223 }
224
225//------------------------------------------------------------------------------
226
227 template<>
228 void
231 const Vector< real > & aXi,
232 Matrix< real > & adNdXi ) const
233 {
234 const real xi = aXi( 0 );
235 const real eta = aXi( 1 );
236 const real zeta = aXi( 2 );
237
238 // often used parameters
239 const real a0 = ( xi*( 1.0 + 9.0 * xi * ( 1.0 - xi ) ) - 1.0 ) * 0.0625;
240 const real a1 = ( 9.0 - xi * ( 27.0 + xi*( 9.0 - 27.0*xi ) ) ) * 0.0625;
241 const real a2 = ( 9.0 + xi * ( 27.0 - xi*( 9.0 + 27.0*xi ) ) ) * 0.0625;
242 const real a3 = ( -xi*( 1.0 - 9.0 * xi * ( 1.0 + xi ) ) - 1.0 ) * 0.0625;
243
244 const real b0 = ( eta*( 1.0 + 9.0 * eta * ( 1.0 - eta ) ) - 1.0 ) * 0.0625;
245 const real b1 = ( 9.0 - eta * ( 27.0 + eta*( 9.0 - 27.0*eta ) ) ) * 0.0625;
246 const real b2 = ( 9.0 + eta * ( 27.0 - eta*( 9.0 + 27.0*eta ) ) ) * 0.0625;
247 const real b3 = ( -eta*( 1.0 - 9.0 * eta * ( 1.0 + eta ) ) - 1.0 ) * 0.0625;
248
249 const real c0 = ( zeta*( 1.0 + 9.0 * zeta * ( 1.0 - zeta ) ) - 1.0 )*0.0625;
250 const real c1 = ( 9.0 - zeta * ( 27.0 + zeta*( 9.0 - 27.0*zeta ) ) )*0.0625;
251 const real c2 = ( 9.0 + zeta * ( 27.0 - zeta*( 9.0 + 27.0*zeta ) ) )*0.0625;
252 const real c3 = ( -zeta*( 1.0 - 9.0 * zeta * ( 1.0 + zeta ) ) - 1.0 )*0.0625;
253
254 const real da0 = ( 1.0 + xi*( 18.0 - 27.0*xi )) * 0.0625;
255 const real da1 = ( -27.0 - xi*( 18.0 - 81.0*xi )) * 0.0625;
256 const real da2 = ( 27.0 - xi*( 18.0 + 81.0*xi )) * 0.0625;
257 const real da3 = ( -1.0 + xi*( 18.0 + 27.0*xi )) * 0.0625;
258
259 const real db0 = ( 1.0 + eta*( 18.0 - 27.0*eta )) * 0.0625;
260 const real db1 = ( -27.0 - eta*( 18.0 - 81.0*eta )) * 0.0625;
261 const real db2 = ( 27.0 - eta*( 18.0 + 81.0*eta )) * 0.0625;
262 const real db3 = ( -1.0 + eta*( 18.0 + 27.0*eta )) * 0.0625;
263
264 const real dc0 = ( 1.0 + zeta*( 18.0 - 27.0*zeta )) * 0.0625;
265 const real dc1 = ( -27.0 - zeta*( 18.0 - 81.0*zeta )) * 0.0625;
266 const real dc2 = ( 27.0 - zeta*( 18.0 + 81.0*zeta )) * 0.0625;
267 const real dc3 = ( -1.0 + zeta*( 18.0 + 27.0*zeta )) * 0.0625;
268
269 adNdXi.set_size( 3, 64 );
270
271 adNdXi( 0, 0 ) = b0*c0*da0;
272 adNdXi( 1, 0 ) = a0*c0*db0;
273 adNdXi( 2, 0 ) = a0*b0*dc0;
274
275 adNdXi( 0, 1 ) = b0*c0*da3;
276 adNdXi( 1, 1 ) = a3*c0*db0;
277 adNdXi( 2, 1 ) = a3*b0*dc0;
278
279 adNdXi( 0, 2 ) = b3*c0*da3;
280 adNdXi( 1, 2 ) = a3*c0*db3;
281 adNdXi( 2, 2 ) = a3*b3*dc0;
282
283 adNdXi( 0, 3 ) = b3*c0*da0;
284 adNdXi( 1, 3 ) = a0*c0*db3;
285 adNdXi( 2, 3 ) = a0*b3*dc0;
286
287 adNdXi( 0, 4 ) = b0*c3*da0;
288 adNdXi( 1, 4 ) = a0*c3*db0;
289 adNdXi( 2, 4 ) = a0*b0*dc3;
290
291 adNdXi( 0, 5 ) = b0*c3*da3;
292 adNdXi( 1, 5 ) = a3*c3*db0;
293 adNdXi( 2, 5 ) = a3*b0*dc3;
294
295 adNdXi( 0, 6 ) = b3*c3*da3;
296 adNdXi( 1, 6 ) = a3*c3*db3;
297 adNdXi( 2, 6 ) = a3*b3*dc3;
298
299 adNdXi( 0, 7 ) = b3*c3*da0;
300 adNdXi( 1, 7 ) = a0*c3*db3;
301 adNdXi( 2, 7 ) = a0*b3*dc3;
302
303 adNdXi( 0, 8 ) = b0*c0*da1;
304 adNdXi( 1, 8 ) = a1*c0*db0;
305 adNdXi( 2, 8 ) = a1*b0*dc0;
306
307 adNdXi( 0, 9 ) = b0*c0*da2;
308 adNdXi( 1, 9 ) = a2*c0*db0;
309 adNdXi( 2, 9 ) = a2*b0*dc0;
310
311 adNdXi( 0, 10 ) = b1*c0*da0;
312 adNdXi( 1, 10 ) = a0*c0*db1;
313 adNdXi( 2, 10 ) = a0*b1*dc0;
314
315 adNdXi( 0, 11 ) = b2*c0*da0;
316 adNdXi( 1, 11 ) = a0*c0*db2;
317 adNdXi( 2, 11 ) = a0*b2*dc0;
318
319 adNdXi( 0, 12 ) = b0*c1*da0;
320 adNdXi( 1, 12 ) = a0*c1*db0;
321 adNdXi( 2, 12 ) = a0*b0*dc1;
322
323 adNdXi( 0, 13 ) = b0*c2*da0;
324 adNdXi( 1, 13 ) = a0*c2*db0;
325 adNdXi( 2, 13 ) = a0*b0*dc2;
326
327 adNdXi( 0, 14 ) = b1*c0*da3;
328 adNdXi( 1, 14 ) = a3*c0*db1;
329 adNdXi( 2, 14 ) = a3*b1*dc0;
330
331 adNdXi( 0, 15 ) = b2*c0*da3;
332 adNdXi( 1, 15 ) = a3*c0*db2;
333 adNdXi( 2, 15 ) = a3*b2*dc0;
334
335 adNdXi( 0, 16 ) = b0*c1*da3;
336 adNdXi( 1, 16 ) = a3*c1*db0;
337 adNdXi( 2, 16 ) = a3*b0*dc1;
338
339 adNdXi( 0, 17 ) = b0*c2*da3;
340 adNdXi( 1, 17 ) = a3*c2*db0;
341 adNdXi( 2, 17 ) = a3*b0*dc2;
342
343 adNdXi( 0, 18 ) = b3*c0*da2;
344 adNdXi( 1, 18 ) = a2*c0*db3;
345 adNdXi( 2, 18 ) = a2*b3*dc0;
346
347 adNdXi( 0, 19 ) = b3*c0*da1;
348 adNdXi( 1, 19 ) = a1*c0*db3;
349 adNdXi( 2, 19 ) = a1*b3*dc0;
350
351 adNdXi( 0, 20 ) = b3*c1*da3;
352 adNdXi( 1, 20 ) = a3*c1*db3;
353 adNdXi( 2, 20 ) = a3*b3*dc1;
354
355 adNdXi( 0, 21 ) = b3*c2*da3;
356 adNdXi( 1, 21 ) = a3*c2*db3;
357 adNdXi( 2, 21 ) = a3*b3*dc2;
358
359 adNdXi( 0, 22 ) = b3*c1*da0;
360 adNdXi( 1, 22 ) = a0*c1*db3;
361 adNdXi( 2, 22 ) = a0*b3*dc1;
362
363 adNdXi( 0, 23 ) = b3*c2*da0;
364 adNdXi( 1, 23 ) = a0*c2*db3;
365 adNdXi( 2, 23 ) = a0*b3*dc2;
366
367 adNdXi( 0, 24 ) = b0*c3*da1;
368 adNdXi( 1, 24 ) = a1*c3*db0;
369 adNdXi( 2, 24 ) = a1*b0*dc3;
370
371 adNdXi( 0, 25 ) = b0*c3*da2;
372 adNdXi( 1, 25 ) = a2*c3*db0;
373 adNdXi( 2, 25 ) = a2*b0*dc3;
374
375 adNdXi( 0, 26 ) = b1*c3*da0;
376 adNdXi( 1, 26 ) = a0*c3*db1;
377 adNdXi( 2, 26 ) = a0*b1*dc3;
378
379 adNdXi( 0, 27 ) = b2*c3*da0;
380 adNdXi( 1, 27 ) = a0*c3*db2;
381 adNdXi( 2, 27 ) = a0*b2*dc3;
382
383 adNdXi( 0, 28 ) = b1*c3*da3;
384 adNdXi( 1, 28 ) = a3*c3*db1;
385 adNdXi( 2, 28 ) = a3*b1*dc3;
386
387 adNdXi( 0, 29 ) = b2*c3*da3;
388 adNdXi( 1, 29 ) = a3*c3*db2;
389 adNdXi( 2, 29 ) = a3*b2*dc3;
390
391 adNdXi( 0, 30 ) = b3*c3*da2;
392 adNdXi( 1, 30 ) = a2*c3*db3;
393 adNdXi( 2, 30 ) = a2*b3*dc3;
394
395 adNdXi( 0, 31 ) = b3*c3*da1;
396 adNdXi( 1, 31 ) = a1*c3*db3;
397 adNdXi( 2, 31 ) = a1*b3*dc3;
398
399 adNdXi( 0, 32 ) = b1*c0*da1;
400 adNdXi( 1, 32 ) = a1*c0*db1;
401 adNdXi( 2, 32 ) = a1*b1*dc0;
402
403 adNdXi( 0, 33 ) = b2*c0*da1;
404 adNdXi( 1, 33 ) = a1*c0*db2;
405 adNdXi( 2, 33 ) = a1*b2*dc0;
406
407 adNdXi( 0, 34 ) = b2*c0*da2;
408 adNdXi( 1, 34 ) = a2*c0*db2;
409 adNdXi( 2, 34 ) = a2*b2*dc0;
410
411 adNdXi( 0, 35 ) = b1*c0*da2;
412 adNdXi( 1, 35 ) = a2*c0*db1;
413 adNdXi( 2, 35 ) = a2*b1*dc0;
414
415 adNdXi( 0, 36 ) = b0*c1*da1;
416 adNdXi( 1, 36 ) = a1*c1*db0;
417 adNdXi( 2, 36 ) = a1*b0*dc1;
418
419 adNdXi( 0, 37 ) = b0*c1*da2;
420 adNdXi( 1, 37 ) = a2*c1*db0;
421 adNdXi( 2, 37 ) = a2*b0*dc1;
422
423 adNdXi( 0, 38 ) = b0*c2*da2;
424 adNdXi( 1, 38 ) = a2*c2*db0;
425 adNdXi( 2, 38 ) = a2*b0*dc2;
426
427 adNdXi( 0, 39 ) = b0*c2*da1;
428 adNdXi( 1, 39 ) = a1*c2*db0;
429 adNdXi( 2, 39 ) = a1*b0*dc2;
430
431 adNdXi( 0, 40 ) = b1*c1*da0;
432 adNdXi( 1, 40 ) = a0*c1*db1;
433 adNdXi( 2, 40 ) = a0*b1*dc1;
434
435 adNdXi( 0, 41 ) = b1*c2*da0;
436 adNdXi( 1, 41 ) = a0*c2*db1;
437 adNdXi( 2, 41 ) = a0*b1*dc2;
438
439 adNdXi( 0, 42 ) = b2*c2*da0;
440 adNdXi( 1, 42 ) = a0*c2*db2;
441 adNdXi( 2, 42 ) = a0*b2*dc2;
442
443 adNdXi( 0, 43 ) = b2*c1*da0;
444 adNdXi( 1, 43 ) = a0*c1*db2;
445 adNdXi( 2, 43 ) = a0*b2*dc1;
446
447 adNdXi( 0, 44 ) = b1*c1*da3;
448 adNdXi( 1, 44 ) = a3*c1*db1;
449 adNdXi( 2, 44 ) = a3*b1*dc1;
450
451 adNdXi( 0, 45 ) = b2*c1*da3;
452 adNdXi( 1, 45 ) = a3*c1*db2;
453 adNdXi( 2, 45 ) = a3*b2*dc1;
454
455 adNdXi( 0, 46 ) = b2*c2*da3;
456 adNdXi( 1, 46 ) = a3*c2*db2;
457 adNdXi( 2, 46 ) = a3*b2*dc2;
458
459 adNdXi( 0, 47 ) = b1*c2*da3;
460 adNdXi( 1, 47 ) = a3*c2*db1;
461 adNdXi( 2, 47 ) = a3*b1*dc2;
462
463 adNdXi( 0, 48 ) = b3*c1*da2;
464 adNdXi( 1, 48 ) = a2*c1*db3;
465 adNdXi( 2, 48 ) = a2*b3*dc1;
466
467 adNdXi( 0, 49 ) = b3*c1*da1;
468 adNdXi( 1, 49 ) = a1*c1*db3;
469 adNdXi( 2, 49 ) = a1*b3*dc1;
470
471 adNdXi( 0, 50 ) = b3*c2*da1;
472 adNdXi( 1, 50 ) = a1*c2*db3;
473 adNdXi( 2, 50 ) = a1*b3*dc2;
474
475 adNdXi( 0, 51 ) = b3*c2*da2;
476 adNdXi( 1, 51 ) = a2*c2*db3;
477 adNdXi( 2, 51 ) = a2*b3*dc2;
478
479 adNdXi( 0, 52 ) = b1*c3*da1;
480 adNdXi( 1, 52 ) = a1*c3*db1;
481 adNdXi( 2, 52 ) = a1*b1*dc3;
482
483 adNdXi( 0, 53 ) = b1*c3*da2;
484 adNdXi( 1, 53 ) = a2*c3*db1;
485 adNdXi( 2, 53 ) = a2*b1*dc3;
486
487 adNdXi( 0, 54 ) = b2*c3*da2;
488 adNdXi( 1, 54 ) = a2*c3*db2;
489 adNdXi( 2, 54 ) = a2*b2*dc3;
490
491 adNdXi( 0, 55 ) = b2*c3*da1;
492 adNdXi( 1, 55 ) = a1*c3*db2;
493 adNdXi( 2, 55 ) = a1*b2*dc3;
494
495 adNdXi( 0, 56 ) = b1*c1*da1;
496 adNdXi( 1, 56 ) = a1*c1*db1;
497 adNdXi( 2, 56 ) = a1*b1*dc1;
498
499 adNdXi( 0, 57 ) = b1*c1*da2;
500 adNdXi( 1, 57 ) = a2*c1*db1;
501 adNdXi( 2, 57 ) = a2*b1*dc1;
502
503 adNdXi( 0, 58 ) = b2*c1*da2;
504 adNdXi( 1, 58 ) = a2*c1*db2;
505 adNdXi( 2, 58 ) = a2*b2*dc1;
506
507 adNdXi( 0, 59 ) = b2*c1*da1;
508 adNdXi( 1, 59 ) = a1*c1*db2;
509 adNdXi( 2, 59 ) = a1*b2*dc1;
510
511 adNdXi( 0, 60 ) = b1*c2*da1;
512 adNdXi( 1, 60 ) = a1*c2*db1;
513 adNdXi( 2, 60 ) = a1*b1*dc2;
514
515 adNdXi( 0, 61 ) = b1*c2*da2;
516 adNdXi( 1, 61 ) = a2*c2*db1;
517 adNdXi( 2, 61 ) = a2*b1*dc2;
518
519 adNdXi( 0, 62 ) = b2*c2*da2;
520 adNdXi( 1, 62 ) = a2*c2*db2;
521 adNdXi( 2, 62 ) = a2*b2*dc2;
522
523 adNdXi( 0, 63 ) = b2*c2*da1;
524 adNdXi( 1, 63 ) = a1*c2*db2;
525 adNdXi( 2, 63 ) = a1*b2*dc2;
526 }
527
528//------------------------------------------------------------------------------
529
530 template<>
531 void
534 const Vector< real > & aXi,
535 Matrix< real > & ad2NdXi2 ) const
536 {
537 const real xi = aXi( 0 );
538 const real eta = aXi( 1 );
539 const real zeta = aXi( 2 );
540
541 const real a0 = ( xi*( 1.0 + 9.0 * xi * ( 1.0 - xi ) ) - 1.0 ) * 0.0625;
542 const real a1 = ( 9.0 - xi * ( 27.0 + xi*( 9.0 - 27.0*xi ) ) ) * 0.0625;
543 const real a2 = ( 9.0 + xi * ( 27.0 - xi*( 9.0 + 27.0*xi ) ) ) * 0.0625;
544 const real a3 = ( -xi*( 1.0 - 9.0 * xi * ( 1.0 + xi ) ) - 1.0 ) * 0.0625;
545
546 const real b0 = ( eta*( 1.0 + 9.0 * eta * ( 1.0 - eta ) ) - 1.0 ) * 0.0625;
547 const real b1 = ( 9.0 - eta * ( 27.0 + eta*( 9.0 - 27.0*eta ) ) ) * 0.0625;
548 const real b2 = ( 9.0 + eta * ( 27.0 - eta*( 9.0 + 27.0*eta ) ) ) * 0.0625;
549 const real b3 = ( -eta*( 1.0 - 9.0 * eta * ( 1.0 + eta ) ) - 1.0 ) * 0.0625;
550
551 const real c0 = ( zeta*( 1.0 + 9.0 * zeta * ( 1.0 - zeta ) ) - 1.0 )*0.0625;
552 const real c1 = ( 9.0 - zeta * ( 27.0 + zeta*( 9.0 - 27.0*zeta ) ) )*0.0625;
553 const real c2 = ( 9.0 + zeta * ( 27.0 - zeta*( 9.0 + 27.0*zeta ) ) )*0.0625;
554 const real c3 = ( -zeta*( 1.0 - 9.0 * zeta * ( 1.0 + zeta ) ) - 1.0 )*0.0625;
555
556 const real da0 = ( 1.0 + xi*( 18.0 - 27.0*xi )) * 0.0625;
557 const real da1 = ( -27.0 - xi*( 18.0 - 81.0*xi )) * 0.0625;
558 const real da2 = ( 27.0 - xi*( 18.0 + 81.0*xi )) * 0.0625;
559 const real da3 = ( -1.0 + xi*( 18.0 + 27.0*xi )) * 0.0625;
560
561 const real dda0 = ( 18.0 - 54.0*xi ) * 0.0625;
562 const real dda1 = ( 162.0*xi - 18.0 ) * 0.0625;
563 const real dda2 = ( - 162.0*xi - 18.0 ) * 0.0625;
564 const real dda3 = ( 54.0*xi + 18.0 ) * 0.0625;
565
566 const real db0 = ( 1.0 + eta*( 18.0 - 27.0*eta )) * 0.0625;
567 const real db1 = ( -27.0 - eta*( 18.0 - 81.0*eta )) * 0.0625;
568 const real db2 = ( 27.0 - eta*( 18.0 + 81.0*eta )) * 0.0625;
569 const real db3 = ( -1.0 + eta*( 18.0 + 27.0*eta )) * 0.0625;
570
571 const real ddb0 = ( 18.0 - 54.0*eta ) * 0.0625;
572 const real ddb1 = ( 162.0*eta - 18.0 ) * 0.0625;
573 const real ddb2 = ( - 162.0*eta - 18.0 ) * 0.0625;
574 const real ddb3 = ( 54.0*eta + 18.0 ) * 0.0625;
575
576 const real dc0 = ( 1.0 + zeta*( 18.0 - 27.0*zeta )) * 0.0625;
577 const real dc1 = ( -27.0 - zeta*( 18.0 - 81.0*zeta )) * 0.0625;
578 const real dc2 = ( 27.0 - zeta*( 18.0 + 81.0*zeta )) * 0.0625;
579 const real dc3 = ( -1.0 + zeta*( 18.0 + 27.0*zeta )) * 0.0625;
580
581 const real ddc0 = ( 18.0 - 54.0*zeta ) * 0.0625;
582 const real ddc1 = ( 162.0*zeta - 18.0 ) * 0.0625;
583 const real ddc2 = ( - 162.0*zeta - 18.0 ) * 0.0625;
584 const real ddc3 = ( 54.0*zeta + 18.0 ) * 0.0625;
585
586 ad2NdXi2.set_size( 6, 64 );
587
588 ad2NdXi2( 0, 0 ) = b0*c0*dda0;
589 ad2NdXi2( 1, 0 ) = a0*c0*ddb0;
590 ad2NdXi2( 2, 0 ) = a0*b0*ddc0;
591 ad2NdXi2( 3, 0 ) = a0*db0*dc0;
592 ad2NdXi2( 4, 0 ) = b0*da0*dc0;
593 ad2NdXi2( 5, 0 ) = c0*da0*db0;
594
595 ad2NdXi2( 0, 1 ) = b0*c0*dda3;
596 ad2NdXi2( 1, 1 ) = a3*c0*ddb0;
597 ad2NdXi2( 2, 1 ) = a3*b0*ddc0;
598 ad2NdXi2( 3, 1 ) = a3*db0*dc0;
599 ad2NdXi2( 4, 1 ) = b0*da3*dc0;
600 ad2NdXi2( 5, 1 ) = c0*da3*db0;
601
602 ad2NdXi2( 0, 2 ) = b3*c0*dda3;
603 ad2NdXi2( 1, 2 ) = a3*c0*ddb3;
604 ad2NdXi2( 2, 2 ) = a3*b3*ddc0;
605 ad2NdXi2( 3, 2 ) = a3*db3*dc0;
606 ad2NdXi2( 4, 2 ) = b3*da3*dc0;
607 ad2NdXi2( 5, 2 ) = c0*da3*db3;
608
609 ad2NdXi2( 0, 3 ) = b3*c0*dda0;
610 ad2NdXi2( 1, 3 ) = a0*c0*ddb3;
611 ad2NdXi2( 2, 3 ) = a0*b3*ddc0;
612 ad2NdXi2( 3, 3 ) = a0*db3*dc0;
613 ad2NdXi2( 4, 3 ) = b3*da0*dc0;
614 ad2NdXi2( 5, 3 ) = c0*da0*db3;
615
616 ad2NdXi2( 0, 4 ) = b0*c3*dda0;
617 ad2NdXi2( 1, 4 ) = a0*c3*ddb0;
618 ad2NdXi2( 2, 4 ) = a0*b0*ddc3;
619 ad2NdXi2( 3, 4 ) = a0*db0*dc3;
620 ad2NdXi2( 4, 4 ) = b0*da0*dc3;
621 ad2NdXi2( 5, 4 ) = c3*da0*db0;
622
623 ad2NdXi2( 0, 5 ) = b0*c3*dda3;
624 ad2NdXi2( 1, 5 ) = a3*c3*ddb0;
625 ad2NdXi2( 2, 5 ) = a3*b0*ddc3;
626 ad2NdXi2( 3, 5 ) = a3*db0*dc3;
627 ad2NdXi2( 4, 5 ) = b0*da3*dc3;
628 ad2NdXi2( 5, 5 ) = c3*da3*db0;
629
630 ad2NdXi2( 0, 6 ) = b3*c3*dda3;
631 ad2NdXi2( 1, 6 ) = a3*c3*ddb3;
632 ad2NdXi2( 2, 6 ) = a3*b3*ddc3;
633 ad2NdXi2( 3, 6 ) = a3*db3*dc3;
634 ad2NdXi2( 4, 6 ) = b3*da3*dc3;
635 ad2NdXi2( 5, 6 ) = c3*da3*db3;
636
637 ad2NdXi2( 0, 7 ) = b3*c3*dda0;
638 ad2NdXi2( 1, 7 ) = a0*c3*ddb3;
639 ad2NdXi2( 2, 7 ) = a0*b3*ddc3;
640 ad2NdXi2( 3, 7 ) = a0*db3*dc3;
641 ad2NdXi2( 4, 7 ) = b3*da0*dc3;
642 ad2NdXi2( 5, 7 ) = c3*da0*db3;
643
644 ad2NdXi2( 0, 8 ) = b0*c0*dda1;
645 ad2NdXi2( 1, 8 ) = a1*c0*ddb0;
646 ad2NdXi2( 2, 8 ) = a1*b0*ddc0;
647 ad2NdXi2( 3, 8 ) = a1*db0*dc0;
648 ad2NdXi2( 4, 8 ) = b0*da1*dc0;
649 ad2NdXi2( 5, 8 ) = c0*da1*db0;
650
651 ad2NdXi2( 0, 9 ) = b0*c0*dda2;
652 ad2NdXi2( 1, 9 ) = a2*c0*ddb0;
653 ad2NdXi2( 2, 9 ) = a2*b0*ddc0;
654 ad2NdXi2( 3, 9 ) = a2*db0*dc0;
655 ad2NdXi2( 4, 9 ) = b0*da2*dc0;
656 ad2NdXi2( 5, 9 ) = c0*da2*db0;
657
658 ad2NdXi2( 0, 10 ) = b1*c0*dda0;
659 ad2NdXi2( 1, 10 ) = a0*c0*ddb1;
660 ad2NdXi2( 2, 10 ) = a0*b1*ddc0;
661 ad2NdXi2( 3, 10 ) = a0*db1*dc0;
662 ad2NdXi2( 4, 10 ) = b1*da0*dc0;
663 ad2NdXi2( 5, 10 ) = c0*da0*db1;
664
665 ad2NdXi2( 0, 11 ) = b2*c0*dda0;
666 ad2NdXi2( 1, 11 ) = a0*c0*ddb2;
667 ad2NdXi2( 2, 11 ) = a0*b2*ddc0;
668 ad2NdXi2( 3, 11 ) = a0*db2*dc0;
669 ad2NdXi2( 4, 11 ) = b2*da0*dc0;
670 ad2NdXi2( 5, 11 ) = c0*da0*db2;
671
672 ad2NdXi2( 0, 12 ) = b0*c1*dda0;
673 ad2NdXi2( 1, 12 ) = a0*c1*ddb0;
674 ad2NdXi2( 2, 12 ) = a0*b0*ddc1;
675 ad2NdXi2( 3, 12 ) = a0*db0*dc1;
676 ad2NdXi2( 4, 12 ) = b0*da0*dc1;
677 ad2NdXi2( 5, 12 ) = c1*da0*db0;
678
679 ad2NdXi2( 0, 13 ) = b0*c2*dda0;
680 ad2NdXi2( 1, 13 ) = a0*c2*ddb0;
681 ad2NdXi2( 2, 13 ) = a0*b0*ddc2;
682 ad2NdXi2( 3, 13 ) = a0*db0*dc2;
683 ad2NdXi2( 4, 13 ) = b0*da0*dc2;
684 ad2NdXi2( 5, 13 ) = c2*da0*db0;
685
686 ad2NdXi2( 0, 14 ) = b1*c0*dda3;
687 ad2NdXi2( 1, 14 ) = a3*c0*ddb1;
688 ad2NdXi2( 2, 14 ) = a3*b1*ddc0;
689 ad2NdXi2( 3, 14 ) = a3*db1*dc0;
690 ad2NdXi2( 4, 14 ) = b1*da3*dc0;
691 ad2NdXi2( 5, 14 ) = c0*da3*db1;
692
693 ad2NdXi2( 0, 15 ) = b2*c0*dda3;
694 ad2NdXi2( 1, 15 ) = a3*c0*ddb2;
695 ad2NdXi2( 2, 15 ) = a3*b2*ddc0;
696 ad2NdXi2( 3, 15 ) = a3*db2*dc0;
697 ad2NdXi2( 4, 15 ) = b2*da3*dc0;
698 ad2NdXi2( 5, 15 ) = c0*da3*db2;
699
700 ad2NdXi2( 0, 16 ) = b0*c1*dda3;
701 ad2NdXi2( 1, 16 ) = a3*c1*ddb0;
702 ad2NdXi2( 2, 16 ) = a3*b0*ddc1;
703 ad2NdXi2( 3, 16 ) = a3*db0*dc1;
704 ad2NdXi2( 4, 16 ) = b0*da3*dc1;
705 ad2NdXi2( 5, 16 ) = c1*da3*db0;
706
707 ad2NdXi2( 0, 17 ) = b0*c2*dda3;
708 ad2NdXi2( 1, 17 ) = a3*c2*ddb0;
709 ad2NdXi2( 2, 17 ) = a3*b0*ddc2;
710 ad2NdXi2( 3, 17 ) = a3*db0*dc2;
711 ad2NdXi2( 4, 17 ) = b0*da3*dc2;
712 ad2NdXi2( 5, 17 ) = c2*da3*db0;
713
714 ad2NdXi2( 0, 18 ) = b3*c0*dda2;
715 ad2NdXi2( 1, 18 ) = a2*c0*ddb3;
716 ad2NdXi2( 2, 18 ) = a2*b3*ddc0;
717 ad2NdXi2( 3, 18 ) = a2*db3*dc0;
718 ad2NdXi2( 4, 18 ) = b3*da2*dc0;
719 ad2NdXi2( 5, 18 ) = c0*da2*db3;
720
721 ad2NdXi2( 0, 19 ) = b3*c0*dda1;
722 ad2NdXi2( 1, 19 ) = a1*c0*ddb3;
723 ad2NdXi2( 2, 19 ) = a1*b3*ddc0;
724 ad2NdXi2( 3, 19 ) = a1*db3*dc0;
725 ad2NdXi2( 4, 19 ) = b3*da1*dc0;
726 ad2NdXi2( 5, 19 ) = c0*da1*db3;
727
728 ad2NdXi2( 0, 20 ) = b3*c1*dda3;
729 ad2NdXi2( 1, 20 ) = a3*c1*ddb3;
730 ad2NdXi2( 2, 20 ) = a3*b3*ddc1;
731 ad2NdXi2( 3, 20 ) = a3*db3*dc1;
732 ad2NdXi2( 4, 20 ) = b3*da3*dc1;
733 ad2NdXi2( 5, 20 ) = c1*da3*db3;
734
735 ad2NdXi2( 0, 21 ) = b3*c2*dda3;
736 ad2NdXi2( 1, 21 ) = a3*c2*ddb3;
737 ad2NdXi2( 2, 21 ) = a3*b3*ddc2;
738 ad2NdXi2( 3, 21 ) = a3*db3*dc2;
739 ad2NdXi2( 4, 21 ) = b3*da3*dc2;
740 ad2NdXi2( 5, 21 ) = c2*da3*db3;
741
742 ad2NdXi2( 0, 22 ) = b3*c1*dda0;
743 ad2NdXi2( 1, 22 ) = a0*c1*ddb3;
744 ad2NdXi2( 2, 22 ) = a0*b3*ddc1;
745 ad2NdXi2( 3, 22 ) = a0*db3*dc1;
746 ad2NdXi2( 4, 22 ) = b3*da0*dc1;
747 ad2NdXi2( 5, 22 ) = c1*da0*db3;
748
749 ad2NdXi2( 0, 23 ) = b3*c2*dda0;
750 ad2NdXi2( 1, 23 ) = a0*c2*ddb3;
751 ad2NdXi2( 2, 23 ) = a0*b3*ddc2;
752 ad2NdXi2( 3, 23 ) = a0*db3*dc2;
753 ad2NdXi2( 4, 23 ) = b3*da0*dc2;
754 ad2NdXi2( 5, 23 ) = c2*da0*db3;
755
756 ad2NdXi2( 0, 24 ) = b0*c3*dda1;
757 ad2NdXi2( 1, 24 ) = a1*c3*ddb0;
758 ad2NdXi2( 2, 24 ) = a1*b0*ddc3;
759 ad2NdXi2( 3, 24 ) = a1*db0*dc3;
760 ad2NdXi2( 4, 24 ) = b0*da1*dc3;
761 ad2NdXi2( 5, 24 ) = c3*da1*db0;
762
763 ad2NdXi2( 0, 25 ) = b0*c3*dda2;
764 ad2NdXi2( 1, 25 ) = a2*c3*ddb0;
765 ad2NdXi2( 2, 25 ) = a2*b0*ddc3;
766 ad2NdXi2( 3, 25 ) = a2*db0*dc3;
767 ad2NdXi2( 4, 25 ) = b0*da2*dc3;
768 ad2NdXi2( 5, 25 ) = c3*da2*db0;
769
770 ad2NdXi2( 0, 26 ) = b1*c3*dda0;
771 ad2NdXi2( 1, 26 ) = a0*c3*ddb1;
772 ad2NdXi2( 2, 26 ) = a0*b1*ddc3;
773 ad2NdXi2( 3, 26 ) = a0*db1*dc3;
774 ad2NdXi2( 4, 26 ) = b1*da0*dc3;
775 ad2NdXi2( 5, 26 ) = c3*da0*db1;
776
777 ad2NdXi2( 0, 27 ) = b2*c3*dda0;
778 ad2NdXi2( 1, 27 ) = a0*c3*ddb2;
779 ad2NdXi2( 2, 27 ) = a0*b2*ddc3;
780 ad2NdXi2( 3, 27 ) = a0*db2*dc3;
781 ad2NdXi2( 4, 27 ) = b2*da0*dc3;
782 ad2NdXi2( 5, 27 ) = c3*da0*db2;
783
784 ad2NdXi2( 0, 28 ) = b1*c3*dda3;
785 ad2NdXi2( 1, 28 ) = a3*c3*ddb1;
786 ad2NdXi2( 2, 28 ) = a3*b1*ddc3;
787 ad2NdXi2( 3, 28 ) = a3*db1*dc3;
788 ad2NdXi2( 4, 28 ) = b1*da3*dc3;
789 ad2NdXi2( 5, 28 ) = c3*da3*db1;
790
791 ad2NdXi2( 0, 29 ) = b2*c3*dda3;
792 ad2NdXi2( 1, 29 ) = a3*c3*ddb2;
793 ad2NdXi2( 2, 29 ) = a3*b2*ddc3;
794 ad2NdXi2( 3, 29 ) = a3*db2*dc3;
795 ad2NdXi2( 4, 29 ) = b2*da3*dc3;
796 ad2NdXi2( 5, 29 ) = c3*da3*db2;
797
798 ad2NdXi2( 0, 30 ) = b3*c3*dda2;
799 ad2NdXi2( 1, 30 ) = a2*c3*ddb3;
800 ad2NdXi2( 2, 30 ) = a2*b3*ddc3;
801 ad2NdXi2( 3, 30 ) = a2*db3*dc3;
802 ad2NdXi2( 4, 30 ) = b3*da2*dc3;
803 ad2NdXi2( 5, 30 ) = c3*da2*db3;
804
805 ad2NdXi2( 0, 31 ) = b3*c3*dda1;
806 ad2NdXi2( 1, 31 ) = a1*c3*ddb3;
807 ad2NdXi2( 2, 31 ) = a1*b3*ddc3;
808 ad2NdXi2( 3, 31 ) = a1*db3*dc3;
809 ad2NdXi2( 4, 31 ) = b3*da1*dc3;
810 ad2NdXi2( 5, 31 ) = c3*da1*db3;
811
812 ad2NdXi2( 0, 32 ) = b1*c0*dda1;
813 ad2NdXi2( 1, 32 ) = a1*c0*ddb1;
814 ad2NdXi2( 2, 32 ) = a1*b1*ddc0;
815 ad2NdXi2( 3, 32 ) = a1*db1*dc0;
816 ad2NdXi2( 4, 32 ) = b1*da1*dc0;
817 ad2NdXi2( 5, 32 ) = c0*da1*db1;
818
819 ad2NdXi2( 0, 33 ) = b2*c0*dda1;
820 ad2NdXi2( 1, 33 ) = a1*c0*ddb2;
821 ad2NdXi2( 2, 33 ) = a1*b2*ddc0;
822 ad2NdXi2( 3, 33 ) = a1*db2*dc0;
823 ad2NdXi2( 4, 33 ) = b2*da1*dc0;
824 ad2NdXi2( 5, 33 ) = c0*da1*db2;
825
826 ad2NdXi2( 0, 34 ) = b2*c0*dda2;
827 ad2NdXi2( 1, 34 ) = a2*c0*ddb2;
828 ad2NdXi2( 2, 34 ) = a2*b2*ddc0;
829 ad2NdXi2( 3, 34 ) = a2*db2*dc0;
830 ad2NdXi2( 4, 34 ) = b2*da2*dc0;
831 ad2NdXi2( 5, 34 ) = c0*da2*db2;
832
833 ad2NdXi2( 0, 35 ) = b1*c0*dda2;
834 ad2NdXi2( 1, 35 ) = a2*c0*ddb1;
835 ad2NdXi2( 2, 35 ) = a2*b1*ddc0;
836 ad2NdXi2( 3, 35 ) = a2*db1*dc0;
837 ad2NdXi2( 4, 35 ) = b1*da2*dc0;
838 ad2NdXi2( 5, 35 ) = c0*da2*db1;
839
840 ad2NdXi2( 0, 36 ) = b0*c1*dda1;
841 ad2NdXi2( 1, 36 ) = a1*c1*ddb0;
842 ad2NdXi2( 2, 36 ) = a1*b0*ddc1;
843 ad2NdXi2( 3, 36 ) = a1*db0*dc1;
844 ad2NdXi2( 4, 36 ) = b0*da1*dc1;
845 ad2NdXi2( 5, 36 ) = c1*da1*db0;
846
847 ad2NdXi2( 0, 37 ) = b0*c1*dda2;
848 ad2NdXi2( 1, 37 ) = a2*c1*ddb0;
849 ad2NdXi2( 2, 37 ) = a2*b0*ddc1;
850 ad2NdXi2( 3, 37 ) = a2*db0*dc1;
851 ad2NdXi2( 4, 37 ) = b0*da2*dc1;
852 ad2NdXi2( 5, 37 ) = c1*da2*db0;
853
854 ad2NdXi2( 0, 38 ) = b0*c2*dda2;
855 ad2NdXi2( 1, 38 ) = a2*c2*ddb0;
856 ad2NdXi2( 2, 38 ) = a2*b0*ddc2;
857 ad2NdXi2( 3, 38 ) = a2*db0*dc2;
858 ad2NdXi2( 4, 38 ) = b0*da2*dc2;
859 ad2NdXi2( 5, 38 ) = c2*da2*db0;
860
861 ad2NdXi2( 0, 39 ) = b0*c2*dda1;
862 ad2NdXi2( 1, 39 ) = a1*c2*ddb0;
863 ad2NdXi2( 2, 39 ) = a1*b0*ddc2;
864 ad2NdXi2( 3, 39 ) = a1*db0*dc2;
865 ad2NdXi2( 4, 39 ) = b0*da1*dc2;
866 ad2NdXi2( 5, 39 ) = c2*da1*db0;
867
868 ad2NdXi2( 0, 40 ) = b1*c1*dda0;
869 ad2NdXi2( 1, 40 ) = a0*c1*ddb1;
870 ad2NdXi2( 2, 40 ) = a0*b1*ddc1;
871 ad2NdXi2( 3, 40 ) = a0*db1*dc1;
872 ad2NdXi2( 4, 40 ) = b1*da0*dc1;
873 ad2NdXi2( 5, 40 ) = c1*da0*db1;
874
875 ad2NdXi2( 0, 41 ) = b1*c2*dda0;
876 ad2NdXi2( 1, 41 ) = a0*c2*ddb1;
877 ad2NdXi2( 2, 41 ) = a0*b1*ddc2;
878 ad2NdXi2( 3, 41 ) = a0*db1*dc2;
879 ad2NdXi2( 4, 41 ) = b1*da0*dc2;
880 ad2NdXi2( 5, 41 ) = c2*da0*db1;
881
882 ad2NdXi2( 0, 42 ) = b2*c2*dda0;
883 ad2NdXi2( 1, 42 ) = a0*c2*ddb2;
884 ad2NdXi2( 2, 42 ) = a0*b2*ddc2;
885 ad2NdXi2( 3, 42 ) = a0*db2*dc2;
886 ad2NdXi2( 4, 42 ) = b2*da0*dc2;
887 ad2NdXi2( 5, 42 ) = c2*da0*db2;
888
889 ad2NdXi2( 0, 43 ) = b2*c1*dda0;
890 ad2NdXi2( 1, 43 ) = a0*c1*ddb2;
891 ad2NdXi2( 2, 43 ) = a0*b2*ddc1;
892 ad2NdXi2( 3, 43 ) = a0*db2*dc1;
893 ad2NdXi2( 4, 43 ) = b2*da0*dc1;
894 ad2NdXi2( 5, 43 ) = c1*da0*db2;
895
896 ad2NdXi2( 0, 44 ) = b1*c1*dda3;
897 ad2NdXi2( 1, 44 ) = a3*c1*ddb1;
898 ad2NdXi2( 2, 44 ) = a3*b1*ddc1;
899 ad2NdXi2( 3, 44 ) = a3*db1*dc1;
900 ad2NdXi2( 4, 44 ) = b1*da3*dc1;
901 ad2NdXi2( 5, 44 ) = c1*da3*db1;
902
903 ad2NdXi2( 0, 45 ) = b2*c1*dda3;
904 ad2NdXi2( 1, 45 ) = a3*c1*ddb2;
905 ad2NdXi2( 2, 45 ) = a3*b2*ddc1;
906 ad2NdXi2( 3, 45 ) = a3*db2*dc1;
907 ad2NdXi2( 4, 45 ) = b2*da3*dc1;
908 ad2NdXi2( 5, 45 ) = c1*da3*db2;
909
910 ad2NdXi2( 0, 46 ) = b2*c2*dda3;
911 ad2NdXi2( 1, 46 ) = a3*c2*ddb2;
912 ad2NdXi2( 2, 46 ) = a3*b2*ddc2;
913 ad2NdXi2( 3, 46 ) = a3*db2*dc2;
914 ad2NdXi2( 4, 46 ) = b2*da3*dc2;
915 ad2NdXi2( 5, 46 ) = c2*da3*db2;
916
917 ad2NdXi2( 0, 47 ) = b1*c2*dda3;
918 ad2NdXi2( 1, 47 ) = a3*c2*ddb1;
919 ad2NdXi2( 2, 47 ) = a3*b1*ddc2;
920 ad2NdXi2( 3, 47 ) = a3*db1*dc2;
921 ad2NdXi2( 4, 47 ) = b1*da3*dc2;
922 ad2NdXi2( 5, 47 ) = c2*da3*db1;
923
924 ad2NdXi2( 0, 48 ) = b3*c1*dda2;
925 ad2NdXi2( 1, 48 ) = a2*c1*ddb3;
926 ad2NdXi2( 2, 48 ) = a2*b3*ddc1;
927 ad2NdXi2( 3, 48 ) = a2*db3*dc1;
928 ad2NdXi2( 4, 48 ) = b3*da2*dc1;
929 ad2NdXi2( 5, 48 ) = c1*da2*db3;
930
931 ad2NdXi2( 0, 49 ) = b3*c1*dda1;
932 ad2NdXi2( 1, 49 ) = a1*c1*ddb3;
933 ad2NdXi2( 2, 49 ) = a1*b3*ddc1;
934 ad2NdXi2( 3, 49 ) = a1*db3*dc1;
935 ad2NdXi2( 4, 49 ) = b3*da1*dc1;
936 ad2NdXi2( 5, 49 ) = c1*da1*db3;
937
938 ad2NdXi2( 0, 50 ) = b3*c2*dda1;
939 ad2NdXi2( 1, 50 ) = a1*c2*ddb3;
940 ad2NdXi2( 2, 50 ) = a1*b3*ddc2;
941 ad2NdXi2( 3, 50 ) = a1*db3*dc2;
942 ad2NdXi2( 4, 50 ) = b3*da1*dc2;
943 ad2NdXi2( 5, 50 ) = c2*da1*db3;
944
945 ad2NdXi2( 0, 51 ) = b3*c2*dda2;
946 ad2NdXi2( 1, 51 ) = a2*c2*ddb3;
947 ad2NdXi2( 2, 51 ) = a2*b3*ddc2;
948 ad2NdXi2( 3, 51 ) = a2*db3*dc2;
949 ad2NdXi2( 4, 51 ) = b3*da2*dc2;
950 ad2NdXi2( 5, 51 ) = c2*da2*db3;
951
952 ad2NdXi2( 0, 52 ) = b1*c3*dda1;
953 ad2NdXi2( 1, 52 ) = a1*c3*ddb1;
954 ad2NdXi2( 2, 52 ) = a1*b1*ddc3;
955 ad2NdXi2( 3, 52 ) = a1*db1*dc3;
956 ad2NdXi2( 4, 52 ) = b1*da1*dc3;
957 ad2NdXi2( 5, 52 ) = c3*da1*db1;
958
959 ad2NdXi2( 0, 53 ) = b1*c3*dda2;
960 ad2NdXi2( 1, 53 ) = a2*c3*ddb1;
961 ad2NdXi2( 2, 53 ) = a2*b1*ddc3;
962 ad2NdXi2( 3, 53 ) = a2*db1*dc3;
963 ad2NdXi2( 4, 53 ) = b1*da2*dc3;
964 ad2NdXi2( 5, 53 ) = c3*da2*db1;
965
966 ad2NdXi2( 0, 54 ) = b2*c3*dda2;
967 ad2NdXi2( 1, 54 ) = a2*c3*ddb2;
968 ad2NdXi2( 2, 54 ) = a2*b2*ddc3;
969 ad2NdXi2( 3, 54 ) = a2*db2*dc3;
970 ad2NdXi2( 4, 54 ) = b2*da2*dc3;
971 ad2NdXi2( 5, 54 ) = c3*da2*db2;
972
973 ad2NdXi2( 0, 55 ) = b2*c3*dda1;
974 ad2NdXi2( 1, 55 ) = a1*c3*ddb2;
975 ad2NdXi2( 2, 55 ) = a1*b2*ddc3;
976 ad2NdXi2( 3, 55 ) = a1*db2*dc3;
977 ad2NdXi2( 4, 55 ) = b2*da1*dc3;
978 ad2NdXi2( 5, 55 ) = c3*da1*db2;
979
980 ad2NdXi2( 0, 56 ) = b1*c1*dda1;
981 ad2NdXi2( 1, 56 ) = a1*c1*ddb1;
982 ad2NdXi2( 2, 56 ) = a1*b1*ddc1;
983 ad2NdXi2( 3, 56 ) = a1*db1*dc1;
984 ad2NdXi2( 4, 56 ) = b1*da1*dc1;
985 ad2NdXi2( 5, 56 ) = c1*da1*db1;
986
987 ad2NdXi2( 0, 57 ) = b1*c1*dda2;
988 ad2NdXi2( 1, 57 ) = a2*c1*ddb1;
989 ad2NdXi2( 2, 57 ) = a2*b1*ddc1;
990 ad2NdXi2( 3, 57 ) = a2*db1*dc1;
991 ad2NdXi2( 4, 57 ) = b1*da2*dc1;
992 ad2NdXi2( 5, 57 ) = c1*da2*db1;
993
994 ad2NdXi2( 0, 58 ) = b2*c1*dda2;
995 ad2NdXi2( 1, 58 ) = a2*c1*ddb2;
996 ad2NdXi2( 2, 58 ) = a2*b2*ddc1;
997 ad2NdXi2( 3, 58 ) = a2*db2*dc1;
998 ad2NdXi2( 4, 58 ) = b2*da2*dc1;
999 ad2NdXi2( 5, 58 ) = c1*da2*db2;
1000
1001 ad2NdXi2( 0, 59 ) = b2*c1*dda1;
1002 ad2NdXi2( 1, 59 ) = a1*c1*ddb2;
1003 ad2NdXi2( 2, 59 ) = a1*b2*ddc1;
1004 ad2NdXi2( 3, 59 ) = a1*db2*dc1;
1005 ad2NdXi2( 4, 59 ) = b2*da1*dc1;
1006 ad2NdXi2( 5, 59 ) = c1*da1*db2;
1007
1008 ad2NdXi2( 0, 60 ) = b1*c2*dda1;
1009 ad2NdXi2( 1, 60 ) = a1*c2*ddb1;
1010 ad2NdXi2( 2, 60 ) = a1*b1*ddc2;
1011 ad2NdXi2( 3, 60 ) = a1*db1*dc2;
1012 ad2NdXi2( 4, 60 ) = b1*da1*dc2;
1013 ad2NdXi2( 5, 60 ) = c2*da1*db1;
1014
1015 ad2NdXi2( 0, 61 ) = b1*c2*dda2;
1016 ad2NdXi2( 1, 61 ) = a2*c2*ddb1;
1017 ad2NdXi2( 2, 61 ) = a2*b1*ddc2;
1018 ad2NdXi2( 3, 61 ) = a2*db1*dc2;
1019 ad2NdXi2( 4, 61 ) = b1*da2*dc2;
1020 ad2NdXi2( 5, 61 ) = c2*da2*db1;
1021
1022 ad2NdXi2( 0, 62 ) = b2*c2*dda2;
1023 ad2NdXi2( 1, 62 ) = a2*c2*ddb2;
1024 ad2NdXi2( 2, 62 ) = a2*b2*ddc2;
1025 ad2NdXi2( 3, 62 ) = a2*db2*dc2;
1026 ad2NdXi2( 4, 62 ) = b2*da2*dc2;
1027 ad2NdXi2( 5, 62 ) = c2*da2*db2;
1028
1029 ad2NdXi2( 0, 63 ) = b2*c2*dda1;
1030 ad2NdXi2( 1, 63 ) = a1*c2*ddb2;
1031 ad2NdXi2( 2, 63 ) = a1*b2*ddc2;
1032 ad2NdXi2( 3, 63 ) = a1*db2*dc2;
1033 ad2NdXi2( 4, 63 ) = b2*da1*dc2;
1034 ad2NdXi2( 5, 63 ) = c2*da1*db2;
1035 }
1036
1037//------------------------------------------------------------------------------
1038 }
1039}
1040
1041#endif //BELFEM_CL_IF_HEX64_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
@ HEX64
Definition Mesh_Enums.hpp:57
InterpolationOrder
Definition Mesh_Enums.hpp:85
@ CUBIC
Definition Mesh_Enums.hpp:90
double real
Definition typedefs.hpp:36
@ HEX
Definition Mesh_Enums.hpp:76