DNDSR 0.2.1
Distributed Numeric Data Structure for CFV
Loading...
Searching...
No Matches
Hex27.hpp
Go to the documentation of this file.
1#pragma once
2// Auto-generated by tools/gen_shape_functions -- DO NOT EDIT
3// Element: Hex27
4// Regenerate: /usr/bin/python3 -m tools.gen_shape_functions.generate
5
6#include "DNDS/Defines.hpp"
7#include "Geom/Geometric.hpp"
8#include "Geom/ElemEnum.hpp"
10
11namespace DNDS::Geom::Elem
12{
13
14 // Forward declaration (primary template is in ElementTraitsBase.hpp)
15 template <ElemType>
16 struct ShapeFuncImpl;
17
18 // <GEN_SHAPE_FUNCS_BEGIN>
19 template <>
21 {
22 template <class TPoint, class TArray>
23 DNDS_DEVICE_CALLABLE static void Diff0(const TPoint &p, TArray &&v)
24 {
25 t_real xi = p[0];
26 t_real et = p[1];
27 t_real zt = p[2];
28 const t_real _t0 = xi - 1;
29 const t_real _t1 = et - 1;
30 const t_real _t2 = et * xi;
31 const t_real _t3 = _t1 * _t2;
32 const t_real _t4 = zt * (zt - 1);
33 const t_real _t5 = ((0.125)) * _t4;
34 const t_real _t6 = _t3 * _t5;
35 const t_real _t7 = xi + 1;
36 const t_real _t8 = et + 1;
37 const t_real _t9 = _t2 * _t8;
38 const t_real _t10 = _t5 * _t9;
39 const t_real _t11 = zt * (zt + 1);
40 const t_real _t12 = ((0.125)) * _t11;
41 const t_real _t13 = _t12 * _t3;
42 const t_real _t14 = _t12 * _t9;
43 const t_real _t15 = ((xi) * (xi)) - 1;
44 const t_real _t16 = _t15 * et;
45 const t_real _t17 = _t1 * _t16;
46 const t_real _t18 = ((0.25)) * _t4;
47 const t_real _t19 = ((et) * (et)) - 1;
48 const t_real _t20 = _t19 * xi;
49 const t_real _t21 = _t18 * _t20;
50 const t_real _t22 = _t16 * _t8;
51 const t_real _t23 = ((0.25)) * _t0;
52 const t_real _t24 = ((zt) * (zt)) - 1;
53 const t_real _t25 = _t24 * _t3;
54 const t_real _t26 = ((0.25)) * _t7;
55 const t_real _t27 = _t24 * _t9;
56 const t_real _t28 = ((0.25)) * _t11;
57 const t_real _t29 = _t11 * _t20;
58 const t_real _t30 = _t15 * _t19;
59 const t_real _t31 = ((0.5)) * _t30;
60 const t_real _t32 = ((0.5)) * _t24;
61 const t_real _t33 = _t20 * _t32;
62 v(0, 0) = _t0 * _t6;
63 v(0, 1) = _t6 * _t7;
64 v(0, 2) = _t10 * _t7;
65 v(0, 3) = _t0 * _t10;
66 v(0, 4) = _t0 * _t13;
67 v(0, 5) = _t13 * _t7;
68 v(0, 6) = _t14 * _t7;
69 v(0, 7) = _t0 * _t14;
70 v(0, 8) = -_t17 * _t18;
71 v(0, 9) = -_t21 * _t7;
72 v(0, 10) = -_t18 * _t22;
73 v(0, 11) = -_t0 * _t21;
74 v(0, 12) = -_t23 * _t25;
75 v(0, 13) = -_t25 * _t26;
76 v(0, 14) = -_t26 * _t27;
77 v(0, 15) = -_t23 * _t27;
78 v(0, 16) = -_t17 * _t28;
79 v(0, 17) = -_t26 * _t29;
80 v(0, 18) = -_t22 * _t28;
81 v(0, 19) = -_t23 * _t29;
82 v(0, 20) = _t31 * _t4;
83 v(0, 21) = _t17 * _t32;
84 v(0, 22) = _t33 * _t7;
85 v(0, 23) = _t22 * _t32;
86 v(0, 24) = _t0 * _t33;
87 v(0, 25) = _t11 * _t31;
88 v(0, 26) = -_t24 * _t30;
89 }
90
91 template <class TPoint, class TArray>
92 DNDS_DEVICE_CALLABLE static void Diff1(const TPoint &p, TArray &&v)
93 {
94 t_real xi = p[0];
95 t_real et = p[1];
96 t_real zt = p[2];
97 const t_real _t0 = 2 * xi;
98 const t_real _t1 = _t0 - 1;
99 const t_real _t2 = et * (et - 1);
100 const t_real _t3 = zt * (zt - 1);
101 const t_real _t4 = ((0.125)) * _t3;
102 const t_real _t5 = _t2 * _t4;
103 const t_real _t6 = _t0 + 1;
104 const t_real _t7 = et + 1;
105 const t_real _t8 = _t7 * et;
106 const t_real _t9 = _t4 * _t8;
107 const t_real _t10 = zt * (zt + 1);
108 const t_real _t11 = ((0.125)) * _t10;
109 const t_real _t12 = _t11 * _t2;
110 const t_real _t13 = _t11 * _t8;
111 const t_real _t14 = ((0.5)) * xi;
112 const t_real _t15 = _t14 * _t3;
113 const t_real _t16 = -(0.25) * _t6;
114 const t_real _t17 = ((et) * (et)) - 1;
115 const t_real _t18 = _t17 * _t3;
116 const t_real _t19 = -(0.25) * _t1;
117 const t_real _t20 = ((zt) * (zt)) - 1;
118 const t_real _t21 = _t2 * _t20;
119 const t_real _t22 = _t20 * _t8;
120 const t_real _t23 = _t10 * _t14;
121 const t_real _t24 = _t10 * _t17;
122 const t_real _t25 = _t17 * xi;
123 const t_real _t26 = _t20 * xi;
124 const t_real _t27 = _t17 * _t20;
125 const t_real _t28 = ((0.5)) * _t27;
126 const t_real _t29 = _t26 * et;
127 const t_real _t30 = xi - 1;
128 const t_real _t31 = 2 * et;
129 const t_real _t32 = _t31 - 1;
130 const t_real _t33 = _t4 * xi;
131 const t_real _t34 = _t32 * _t33;
132 const t_real _t35 = xi + 1;
133 const t_real _t36 = _t31 + 1;
134 const t_real _t37 = _t33 * _t36;
135 const t_real _t38 = _t11 * xi;
136 const t_real _t39 = _t32 * _t38;
137 const t_real _t40 = _t36 * _t38;
138 const t_real _t41 = -(0.25) * _t32;
139 const t_real _t42 = ((xi) * (xi)) - 1;
140 const t_real _t43 = _t3 * _t42;
141 const t_real _t44 = _t15 * et;
142 const t_real _t45 = -(0.25) * _t36;
143 const t_real _t46 = _t26 * _t41;
144 const t_real _t47 = _t26 * _t45;
145 const t_real _t48 = _t10 * _t42;
146 const t_real _t49 = _t23 * et;
147 const t_real _t50 = _t42 * et;
148 const t_real _t51 = _t20 * _t42;
149 const t_real _t52 = ((0.5)) * _t51;
150 const t_real _t53 = _t2 * _t30;
151 const t_real _t54 = 2 * zt;
152 const t_real _t55 = _t54 - 1;
153 const t_real _t56 = ((0.125)) * xi;
154 const t_real _t57 = _t55 * _t56;
155 const t_real _t58 = _t35 * _t57;
156 const t_real _t59 = _t30 * _t8;
157 const t_real _t60 = _t54 + 1;
158 const t_real _t61 = _t56 * _t60;
159 const t_real _t62 = _t35 * _t61;
160 const t_real _t63 = _t2 * _t42;
161 const t_real _t64 = -(0.25) * _t55;
162 const t_real _t65 = _t25 * _t64;
163 const t_real _t66 = _t50 * _t7;
164 const t_real _t67 = _t14 * zt;
165 const t_real _t68 = _t35 * _t67;
166 const t_real _t69 = -(0.25) * _t60;
167 const t_real _t70 = _t25 * _t69;
168 const t_real _t71 = _t17 * _t42;
169 const t_real _t72 = ((0.5)) * _t71;
170 const t_real _t73 = _t25 * zt;
171 v(0, 0) = _t1 * _t5;
172 v(0, 1) = _t5 * _t6;
173 v(0, 2) = _t6 * _t9;
174 v(0, 3) = _t1 * _t9;
175 v(0, 4) = _t1 * _t12;
176 v(0, 5) = _t12 * _t6;
177 v(0, 6) = _t13 * _t6;
178 v(0, 7) = _t1 * _t13;
179 v(0, 8) = -_t15 * _t2;
180 v(0, 9) = _t16 * _t18;
181 v(0, 10) = -_t15 * _t8;
182 v(0, 11) = _t18 * _t19;
183 v(0, 12) = _t19 * _t21;
184 v(0, 13) = _t16 * _t21;
185 v(0, 14) = _t16 * _t22;
186 v(0, 15) = _t19 * _t22;
187 v(0, 16) = -_t2 * _t23;
188 v(0, 17) = _t16 * _t24;
189 v(0, 18) = -_t23 * _t8;
190 v(0, 19) = _t19 * _t24;
191 v(0, 20) = _t25 * _t3;
192 v(0, 21) = _t2 * _t26;
193 v(0, 22) = _t28 * _t6;
194 v(0, 23) = _t29 * _t7;
195 v(0, 24) = _t1 * _t28;
196 v(0, 25) = _t10 * _t25;
197 v(0, 26) = -_t0 * _t27;
198 v(1, 0) = _t30 * _t34;
199 v(1, 1) = _t34 * _t35;
200 v(1, 2) = _t35 * _t37;
201 v(1, 3) = _t30 * _t37;
202 v(1, 4) = _t30 * _t39;
203 v(1, 5) = _t35 * _t39;
204 v(1, 6) = _t35 * _t40;
205 v(1, 7) = _t30 * _t40;
206 v(1, 8) = _t41 * _t43;
207 v(1, 9) = -_t35 * _t44;
208 v(1, 10) = _t43 * _t45;
209 v(1, 11) = -_t30 * _t44;
210 v(1, 12) = _t30 * _t46;
211 v(1, 13) = _t35 * _t46;
212 v(1, 14) = _t35 * _t47;
213 v(1, 15) = _t30 * _t47;
214 v(1, 16) = _t41 * _t48;
215 v(1, 17) = -_t35 * _t49;
216 v(1, 18) = _t45 * _t48;
217 v(1, 19) = -_t30 * _t49;
218 v(1, 20) = _t3 * _t50;
219 v(1, 21) = _t32 * _t52;
220 v(1, 22) = _t29 * _t35;
221 v(1, 23) = _t36 * _t52;
222 v(1, 24) = _t29 * _t30;
223 v(1, 25) = _t10 * _t50;
224 v(1, 26) = -_t31 * _t51;
225 v(2, 0) = _t53 * _t57;
226 v(2, 1) = _t2 * _t58;
227 v(2, 2) = _t58 * _t8;
228 v(2, 3) = _t57 * _t59;
229 v(2, 4) = _t53 * _t61;
230 v(2, 5) = _t2 * _t62;
231 v(2, 6) = _t62 * _t8;
232 v(2, 7) = _t59 * _t61;
233 v(2, 8) = _t63 * _t64;
234 v(2, 9) = _t35 * _t65;
235 v(2, 10) = _t64 * _t66;
236 v(2, 11) = _t30 * _t65;
237 v(2, 12) = -_t53 * _t67;
238 v(2, 13) = -_t2 * _t68;
239 v(2, 14) = -_t68 * _t8;
240 v(2, 15) = -_t59 * _t67;
241 v(2, 16) = _t63 * _t69;
242 v(2, 17) = _t35 * _t70;
243 v(2, 18) = _t66 * _t69;
244 v(2, 19) = _t30 * _t70;
245 v(2, 20) = _t55 * _t72;
246 v(2, 21) = _t63 * zt;
247 v(2, 22) = _t35 * _t73;
248 v(2, 23) = _t66 * zt;
249 v(2, 24) = _t30 * _t73;
250 v(2, 25) = _t60 * _t72;
251 v(2, 26) = -_t54 * _t71;
252 }
253
254 template <class TPoint, class TArray>
255 DNDS_DEVICE_CALLABLE static void Diff2(const TPoint &p, TArray &&v)
256 {
257 t_real xi = p[0];
258 t_real et = p[1];
259 t_real zt = p[2];
260 const t_real _t0 = et - 1;
261 const t_real _t1 = zt - 1;
262 const t_real _t2 = _t0 * _t1;
263 const t_real _t3 = et * zt;
264 const t_real _t4 = ((0.25)) * _t3;
265 const t_real _t5 = _t2 * _t4;
266 const t_real _t6 = et + 1;
267 const t_real _t7 = _t1 * _t6;
268 const t_real _t8 = _t4 * _t7;
269 const t_real _t9 = zt + 1;
270 const t_real _t10 = _t0 * _t9;
271 const t_real _t11 = _t10 * _t4;
272 const t_real _t12 = _t6 * _t9;
273 const t_real _t13 = _t12 * _t4;
274 const t_real _t14 = ((0.5)) * _t3;
275 const t_real _t15 = ((et) * (et)) - 1;
276 const t_real _t16 = _t15 * zt;
277 const t_real _t17 = _t1 * _t16;
278 const t_real _t18 = -(0.5) * _t17;
279 const t_real _t19 = ((zt) * (zt)) - 1;
280 const t_real _t20 = _t19 * et;
281 const t_real _t21 = _t0 * _t20;
282 const t_real _t22 = -(0.5) * _t21;
283 const t_real _t23 = _t20 * _t6;
284 const t_real _t24 = -(0.5) * _t23;
285 const t_real _t25 = _t16 * _t9;
286 const t_real _t26 = -(0.5) * _t25;
287 const t_real _t27 = _t15 * _t19;
288 const t_real _t28 = xi - 1;
289 const t_real _t29 = _t1 * _t28;
290 const t_real _t30 = xi * zt;
291 const t_real _t31 = ((0.25)) * _t30;
292 const t_real _t32 = _t29 * _t31;
293 const t_real _t33 = xi + 1;
294 const t_real _t34 = _t1 * _t33;
295 const t_real _t35 = _t31 * _t34;
296 const t_real _t36 = _t28 * _t9;
297 const t_real _t37 = _t31 * _t36;
298 const t_real _t38 = _t33 * _t9;
299 const t_real _t39 = _t31 * _t38;
300 const t_real _t40 = ((xi) * (xi)) - 1;
301 const t_real _t41 = _t40 * zt;
302 const t_real _t42 = _t1 * _t41;
303 const t_real _t43 = -(0.5) * _t42;
304 const t_real _t44 = ((0.5)) * _t30;
305 const t_real _t45 = _t19 * xi;
306 const t_real _t46 = _t28 * _t45;
307 const t_real _t47 = -(0.5) * _t46;
308 const t_real _t48 = _t33 * _t45;
309 const t_real _t49 = -(0.5) * _t48;
310 const t_real _t50 = _t41 * _t9;
311 const t_real _t51 = -(0.5) * _t50;
312 const t_real _t52 = _t19 * _t40;
313 const t_real _t53 = _t0 * _t28;
314 const t_real _t54 = et * xi;
315 const t_real _t55 = ((0.25)) * _t54;
316 const t_real _t56 = _t53 * _t55;
317 const t_real _t57 = _t0 * _t33;
318 const t_real _t58 = _t55 * _t57;
319 const t_real _t59 = _t33 * _t6;
320 const t_real _t60 = _t55 * _t59;
321 const t_real _t61 = _t28 * _t6;
322 const t_real _t62 = _t55 * _t61;
323 const t_real _t63 = _t40 * et;
324 const t_real _t64 = _t0 * _t63;
325 const t_real _t65 = -(0.5) * _t64;
326 const t_real _t66 = _t15 * xi;
327 const t_real _t67 = _t33 * _t66;
328 const t_real _t68 = -(0.5) * _t67;
329 const t_real _t69 = _t6 * _t63;
330 const t_real _t70 = -(0.5) * _t69;
331 const t_real _t71 = _t28 * _t66;
332 const t_real _t72 = -(0.5) * _t71;
333 const t_real _t73 = ((0.5)) * _t54;
334 const t_real _t74 = _t15 * _t40;
335 const t_real _t75 = _t28 * et;
336 const t_real _t76 = _t0 * xi + _t54;
337 const t_real _t77 = _t53 + _t75 + _t76;
338 const t_real _t78 = ((0.125)) * zt;
339 const t_real _t79 = _t1 * _t78;
340 const t_real _t80 = _t33 * et;
341 const t_real _t81 = _t57 + _t76 + _t80;
342 const t_real _t82 = _t54 + _t6 * xi;
343 const t_real _t83 = _t59 + _t80 + _t82;
344 const t_real _t84 = _t61 + _t75 + _t82;
345 const t_real _t85 = _t78 * _t9;
346 const t_real _t86 = 2 * et;
347 const t_real _t87 = _t86 - 1;
348 const t_real _t88 = -_t87;
349 const t_real _t89 = _t1 * _t44;
350 const t_real _t90 = 2 * xi;
351 const t_real _t91 = _t90 + 1;
352 const t_real _t92 = -_t91;
353 const t_real _t93 = _t1 * _t14;
354 const t_real _t94 = _t86 + 1;
355 const t_real _t95 = -_t94;
356 const t_real _t96 = _t90 - 1;
357 const t_real _t97 = -_t96;
358 const t_real _t98 = ((0.25)) * _t19;
359 const t_real _t99 = _t44 * _t9;
360 const t_real _t100 = _t14 * _t9;
361 const t_real _t101 = 2 * zt;
362 const t_real _t102 = _t101 * _t54;
363 const t_real _t103 = _t0 * zt;
364 const t_real _t104 = _t1 * et + _t3;
365 const t_real _t105 = _t103 + _t104 + _t2;
366 const t_real _t106 = ((0.125)) * xi;
367 const t_real _t107 = _t105 * _t106;
368 const t_real _t108 = _t6 * zt;
369 const t_real _t109 = _t104 + _t108 + _t7;
370 const t_real _t110 = _t106 * _t109;
371 const t_real _t111 = _t3 + _t9 * et;
372 const t_real _t112 = _t10 + _t103 + _t111;
373 const t_real _t113 = _t106 * _t112;
374 const t_real _t114 = _t108 + _t111 + _t12;
375 const t_real _t115 = _t106 * _t114;
376 const t_real _t116 = ((0.25)) * _t40;
377 const t_real _t117 = _t101 - 1;
378 const t_real _t118 = -_t117 * _t73;
379 const t_real _t119 = _t44 * _t88;
380 const t_real _t120 = _t44 * _t95;
381 const t_real _t121 = _t101 + 1;
382 const t_real _t122 = -_t121 * _t73;
383 const t_real _t123 = _t28 * zt;
384 const t_real _t124 = _t1 * xi + _t30;
385 const t_real _t125 = _t123 + _t124 + _t29;
386 const t_real _t126 = ((0.125)) * et;
387 const t_real _t127 = _t0 * _t126;
388 const t_real _t128 = _t33 * zt;
389 const t_real _t129 = _t124 + _t128 + _t34;
390 const t_real _t130 = _t126 * _t6;
391 const t_real _t131 = _t30 + _t9 * xi;
392 const t_real _t132 = _t123 + _t131 + _t36;
393 const t_real _t133 = _t128 + _t131 + _t38;
394 const t_real _t134 = ((0.25)) * _t15;
395 const t_real _t135 = _t0 * _t14;
396 const t_real _t136 = _t14 * _t6;
397 const t_real _t137 = 2 * _t54;
398 v(0, 0) = _t5;
399 v(0, 1) = _t5;
400 v(0, 2) = _t8;
401 v(0, 3) = _t8;
402 v(0, 4) = _t11;
403 v(0, 5) = _t11;
404 v(0, 6) = _t13;
405 v(0, 7) = _t13;
406 v(0, 8) = -_t14 * _t2;
407 v(0, 9) = _t18;
408 v(0, 10) = -_t14 * _t7;
409 v(0, 11) = _t18;
410 v(0, 12) = _t22;
411 v(0, 13) = _t22;
412 v(0, 14) = _t24;
413 v(0, 15) = _t24;
414 v(0, 16) = -_t10 * _t14;
415 v(0, 17) = _t26;
416 v(0, 18) = -_t12 * _t14;
417 v(0, 19) = _t26;
418 v(0, 20) = _t17;
419 v(0, 21) = _t21;
420 v(0, 22) = _t27;
421 v(0, 23) = _t23;
422 v(0, 24) = _t27;
423 v(0, 25) = _t25;
424 v(0, 26) = -2 * _t27;
425 v(1, 0) = _t32;
426 v(1, 1) = _t35;
427 v(1, 2) = _t35;
428 v(1, 3) = _t32;
429 v(1, 4) = _t37;
430 v(1, 5) = _t39;
431 v(1, 6) = _t39;
432 v(1, 7) = _t37;
433 v(1, 8) = _t43;
434 v(1, 9) = -_t34 * _t44;
435 v(1, 10) = _t43;
436 v(1, 11) = -_t29 * _t44;
437 v(1, 12) = _t47;
438 v(1, 13) = _t49;
439 v(1, 14) = _t49;
440 v(1, 15) = _t47;
441 v(1, 16) = _t51;
442 v(1, 17) = -_t38 * _t44;
443 v(1, 18) = _t51;
444 v(1, 19) = -_t36 * _t44;
445 v(1, 20) = _t42;
446 v(1, 21) = _t52;
447 v(1, 22) = _t48;
448 v(1, 23) = _t52;
449 v(1, 24) = _t46;
450 v(1, 25) = _t50;
451 v(1, 26) = -2 * _t52;
452 v(2, 0) = _t56;
453 v(2, 1) = _t58;
454 v(2, 2) = _t60;
455 v(2, 3) = _t62;
456 v(2, 4) = _t56;
457 v(2, 5) = _t58;
458 v(2, 6) = _t60;
459 v(2, 7) = _t62;
460 v(2, 8) = _t65;
461 v(2, 9) = _t68;
462 v(2, 10) = _t70;
463 v(2, 11) = _t72;
464 v(2, 12) = -_t53 * _t73;
465 v(2, 13) = -_t57 * _t73;
466 v(2, 14) = -_t59 * _t73;
467 v(2, 15) = -_t61 * _t73;
468 v(2, 16) = _t65;
469 v(2, 17) = _t68;
470 v(2, 18) = _t70;
471 v(2, 19) = _t72;
472 v(2, 20) = _t74;
473 v(2, 21) = _t64;
474 v(2, 22) = _t67;
475 v(2, 23) = _t69;
476 v(2, 24) = _t71;
477 v(2, 25) = _t74;
478 v(2, 26) = -2 * _t74;
479 v(3, 0) = _t77 * _t79;
480 v(3, 1) = _t79 * _t81;
481 v(3, 2) = _t79 * _t83;
482 v(3, 3) = _t79 * _t84;
483 v(3, 4) = _t77 * _t85;
484 v(3, 5) = _t81 * _t85;
485 v(3, 6) = _t83 * _t85;
486 v(3, 7) = _t84 * _t85;
487 v(3, 8) = _t88 * _t89;
488 v(3, 9) = _t92 * _t93;
489 v(3, 10) = _t89 * _t95;
490 v(3, 11) = _t93 * _t97;
491 v(3, 12) = -_t77 * _t98;
492 v(3, 13) = -_t81 * _t98;
493 v(3, 14) = -_t83 * _t98;
494 v(3, 15) = -_t84 * _t98;
495 v(3, 16) = _t88 * _t99;
496 v(3, 17) = _t100 * _t92;
497 v(3, 18) = _t95 * _t99;
498 v(3, 19) = _t100 * _t97;
499 v(3, 20) = _t1 * _t102;
500 v(3, 21) = _t45 * _t87;
501 v(3, 22) = _t20 * _t91;
502 v(3, 23) = _t45 * _t94;
503 v(3, 24) = _t20 * _t96;
504 v(3, 25) = _t102 * _t9;
505 v(3, 26) = -4 * _t19 * _t54;
506 v(4, 0) = _t107 * _t28;
507 v(4, 1) = _t107 * _t33;
508 v(4, 2) = _t110 * _t33;
509 v(4, 3) = _t110 * _t28;
510 v(4, 4) = _t113 * _t28;
511 v(4, 5) = _t113 * _t33;
512 v(4, 6) = _t115 * _t33;
513 v(4, 7) = _t115 * _t28;
514 v(4, 8) = -_t105 * _t116;
515 v(4, 9) = _t118 * _t33;
516 v(4, 10) = -_t109 * _t116;
517 v(4, 11) = _t118 * _t28;
518 v(4, 12) = _t119 * _t28;
519 v(4, 13) = _t119 * _t33;
520 v(4, 14) = _t120 * _t33;
521 v(4, 15) = _t120 * _t28;
522 v(4, 16) = -_t112 * _t116;
523 v(4, 17) = _t122 * _t33;
524 v(4, 18) = -_t114 * _t116;
525 v(4, 19) = _t122 * _t28;
526 v(4, 20) = _t117 * _t63;
527 v(4, 21) = _t41 * _t87;
528 v(4, 22) = _t102 * _t33;
529 v(4, 23) = _t41 * _t94;
530 v(4, 24) = _t102 * _t28;
531 v(4, 25) = _t121 * _t63;
532 v(4, 26) = -4 * _t3 * _t40;
533 v(5, 0) = _t125 * _t127;
534 v(5, 1) = _t127 * _t129;
535 v(5, 2) = _t129 * _t130;
536 v(5, 3) = _t125 * _t130;
537 v(5, 4) = _t127 * _t132;
538 v(5, 5) = _t127 * _t133;
539 v(5, 6) = _t130 * _t133;
540 v(5, 7) = _t130 * _t132;
541 v(5, 8) = _t0 * _t118;
542 v(5, 9) = -_t129 * _t134;
543 v(5, 10) = _t118 * _t6;
544 v(5, 11) = -_t125 * _t134;
545 v(5, 12) = _t135 * _t97;
546 v(5, 13) = _t135 * _t92;
547 v(5, 14) = _t136 * _t92;
548 v(5, 15) = _t136 * _t97;
549 v(5, 16) = _t0 * _t122;
550 v(5, 17) = -_t133 * _t134;
551 v(5, 18) = _t122 * _t6;
552 v(5, 19) = -_t132 * _t134;
553 v(5, 20) = _t117 * _t66;
554 v(5, 21) = _t103 * _t137;
555 v(5, 22) = _t16 * _t91;
556 v(5, 23) = _t108 * _t137;
557 v(5, 24) = _t16 * _t96;
558 v(5, 25) = _t121 * _t66;
559 v(5, 26) = -4 * _t15 * _t30;
560 }
561
562 template <class TPoint, class TArray>
563 DNDS_DEVICE_CALLABLE static void Diff3(const TPoint &p, TArray &&v)
564 {
565 t_real xi = p[0];
566 t_real et = p[1];
567 t_real zt = p[2];
568 const t_real _t0 = 2 * et;
569 const t_real _t1 = _t0 - 1;
570 const t_real _t2 = zt - 1;
571 const t_real _t3 = ((0.25)) * zt;
572 const t_real _t4 = _t2 * _t3;
573 const t_real _t5 = _t1 * _t4;
574 const t_real _t6 = _t0 + 1;
575 const t_real _t7 = _t4 * _t6;
576 const t_real _t8 = zt + 1;
577 const t_real _t9 = _t3 * _t8;
578 const t_real _t10 = _t1 * _t9;
579 const t_real _t11 = _t6 * _t9;
580 const t_real _t12 = -_t1;
581 const t_real _t13 = ((0.5)) * zt;
582 const t_real _t14 = _t13 * _t2;
583 const t_real _t15 = -_t2;
584 const t_real _t16 = et * zt;
585 const t_real _t17 = _t15 * _t16;
586 const t_real _t18 = -_t6;
587 const t_real _t19 = ((zt) * (zt)) - 1;
588 const t_real _t20 = ((0.5)) * _t19;
589 const t_real _t21 = _t12 * _t20;
590 const t_real _t22 = _t18 * _t20;
591 const t_real _t23 = _t13 * _t8;
592 const t_real _t24 = -_t16 * _t8;
593 const t_real _t25 = _t0 * zt;
594 const t_real _t26 = _t0 * _t19;
595 const t_real _t27 = -4 * _t19;
596 const t_real _t28 = 2 * xi;
597 const t_real _t29 = _t28 - 1;
598 const t_real _t30 = _t29 * _t4;
599 const t_real _t31 = _t28 + 1;
600 const t_real _t32 = _t31 * _t4;
601 const t_real _t33 = _t29 * _t9;
602 const t_real _t34 = _t31 * _t9;
603 const t_real _t35 = xi * zt;
604 const t_real _t36 = _t15 * _t35;
605 const t_real _t37 = -_t31;
606 const t_real _t38 = -_t29;
607 const t_real _t39 = _t20 * _t38;
608 const t_real _t40 = _t20 * _t37;
609 const t_real _t41 = -_t35 * _t8;
610 const t_real _t42 = _t28 * zt;
611 const t_real _t43 = _t19 * _t28;
612 const t_real _t44 = xi - 1;
613 const t_real _t45 = 2 * zt;
614 const t_real _t46 = _t45 - 1;
615 const t_real _t47 = ((0.25)) * xi;
616 const t_real _t48 = _t46 * _t47;
617 const t_real _t49 = _t44 * _t48;
618 const t_real _t50 = xi + 1;
619 const t_real _t51 = _t48 * _t50;
620 const t_real _t52 = _t45 + 1;
621 const t_real _t53 = _t47 * _t52;
622 const t_real _t54 = _t44 * _t53;
623 const t_real _t55 = _t50 * _t53;
624 const t_real _t56 = -_t46;
625 const t_real _t57 = ((xi) * (xi)) - 1;
626 const t_real _t58 = ((0.5)) * _t57;
627 const t_real _t59 = _t56 * _t58;
628 const t_real _t60 = ((0.5)) * xi;
629 const t_real _t61 = _t56 * _t60;
630 const t_real _t62 = -_t44;
631 const t_real _t63 = _t35 * _t62;
632 const t_real _t64 = -_t35 * _t50;
633 const t_real _t65 = -_t52;
634 const t_real _t66 = _t58 * _t65;
635 const t_real _t67 = _t60 * _t65;
636 const t_real _t68 = _t45 * _t57;
637 const t_real _t69 = -4 * _t57;
638 const t_real _t70 = _t1 * _t47;
639 const t_real _t71 = _t44 * _t70;
640 const t_real _t72 = _t50 * _t70;
641 const t_real _t73 = _t47 * _t6;
642 const t_real _t74 = _t50 * _t73;
643 const t_real _t75 = _t44 * _t73;
644 const t_real _t76 = _t12 * _t58;
645 const t_real _t77 = et * xi;
646 const t_real _t78 = -_t50 * _t77;
647 const t_real _t79 = _t18 * _t58;
648 const t_real _t80 = _t62 * _t77;
649 const t_real _t81 = _t12 * _t60;
650 const t_real _t82 = _t18 * _t60;
651 const t_real _t83 = _t0 * _t57;
652 const t_real _t84 = _t0 * xi;
653 const t_real _t85 = et - 1;
654 const t_real _t86 = ((0.25)) * et;
655 const t_real _t87 = _t85 * _t86;
656 const t_real _t88 = _t29 * _t87;
657 const t_real _t89 = _t31 * _t87;
658 const t_real _t90 = et + 1;
659 const t_real _t91 = _t86 * _t90;
660 const t_real _t92 = _t31 * _t91;
661 const t_real _t93 = _t29 * _t91;
662 const t_real _t94 = -_t85;
663 const t_real _t95 = _t77 * _t94;
664 const t_real _t96 = ((et) * (et)) - 1;
665 const t_real _t97 = ((0.5)) * _t96;
666 const t_real _t98 = _t37 * _t97;
667 const t_real _t99 = -_t77 * _t90;
668 const t_real _t100 = _t38 * _t97;
669 const t_real _t101 = ((0.5)) * et;
670 const t_real _t102 = _t101 * _t85;
671 const t_real _t103 = _t101 * _t90;
672 const t_real _t104 = _t28 * _t96;
673 const t_real _t105 = -4 * _t96;
674 const t_real _t106 = _t46 * _t87;
675 const t_real _t107 = _t46 * _t91;
676 const t_real _t108 = _t52 * _t87;
677 const t_real _t109 = _t52 * _t91;
678 const t_real _t110 = _t56 * _t97;
679 const t_real _t111 = _t16 * _t94;
680 const t_real _t112 = -_t16 * _t90;
681 const t_real _t113 = _t65 * _t97;
682 const t_real _t114 = _t45 * _t96;
683 const t_real _t115 = ((0.5)) * _t77;
684 const t_real _t116 = -_t115;
685 const t_real _t117 = ((0.5)) * _t35;
686 const t_real _t118 = -_t117;
687 const t_real _t119 = _t16 * xi;
688 const t_real _t120 = _t116 + _t118 + _t119 + _t47;
689 const t_real _t121 = _t3 + (-0.125);
690 const t_real _t122 = ((0.5)) * _t16;
691 const t_real _t123 = -_t122;
692 const t_real _t124 = _t123 + _t86;
693 const t_real _t125 = -_t86;
694 const t_real _t126 = _t122 + _t125;
695 const t_real _t127 = -_t3;
696 const t_real _t128 = _t127 + (0.125);
697 const t_real _t129 = _t119 - _t47;
698 const t_real _t130 = _t116 + _t117 + _t129;
699 const t_real _t131 = _t115 + _t118 + _t129;
700 const t_real _t132 = _t3 + (0.125);
701 const t_real _t133 = _t123 + _t125;
702 const t_real _t134 = _t122 + _t86;
703 const t_real _t135 = _t127 + (-0.125);
704 const t_real _t136 = _t115 + _t117 + _t119 + _t47;
705 const t_real _t137 = -_t0;
706 const t_real _t138 = 4 * _t16;
707 const t_real _t139 = _t137 + _t138;
708 const t_real _t140 = -_t45;
709 const t_real _t141 = _t140 + 1;
710 const t_real _t142 = -_t28;
711 const t_real _t143 = 4 * _t35;
712 const t_real _t144 = _t142 + _t143;
713 const t_real _t145 = 4 * _t77;
714 const t_real _t146 = _t142 + _t145;
715 v(3, 0) = _t5;
716 v(3, 1) = _t5;
717 v(3, 2) = _t7;
718 v(3, 3) = _t7;
719 v(3, 4) = _t10;
720 v(3, 5) = _t10;
721 v(3, 6) = _t11;
722 v(3, 7) = _t11;
723 v(3, 8) = _t12 * _t14;
724 v(3, 9) = _t17;
725 v(3, 10) = _t14 * _t18;
726 v(3, 11) = _t17;
727 v(3, 12) = _t21;
728 v(3, 13) = _t21;
729 v(3, 14) = _t22;
730 v(3, 15) = _t22;
731 v(3, 16) = _t12 * _t23;
732 v(3, 17) = _t24;
733 v(3, 18) = _t18 * _t23;
734 v(3, 19) = _t24;
735 v(3, 20) = _t2 * _t25;
736 v(3, 21) = _t1 * _t19;
737 v(3, 22) = _t26;
738 v(3, 23) = _t19 * _t6;
739 v(3, 24) = _t26;
740 v(3, 25) = _t25 * _t8;
741 v(3, 26) = _t27 * et;
742 v(4, 0) = _t30;
743 v(4, 1) = _t32;
744 v(4, 2) = _t32;
745 v(4, 3) = _t30;
746 v(4, 4) = _t33;
747 v(4, 5) = _t34;
748 v(4, 6) = _t34;
749 v(4, 7) = _t33;
750 v(4, 8) = _t36;
751 v(4, 9) = _t14 * _t37;
752 v(4, 10) = _t36;
753 v(4, 11) = _t14 * _t38;
754 v(4, 12) = _t39;
755 v(4, 13) = _t40;
756 v(4, 14) = _t40;
757 v(4, 15) = _t39;
758 v(4, 16) = _t41;
759 v(4, 17) = _t23 * _t37;
760 v(4, 18) = _t41;
761 v(4, 19) = _t23 * _t38;
762 v(4, 20) = _t2 * _t42;
763 v(4, 21) = _t43;
764 v(4, 22) = _t19 * _t31;
765 v(4, 23) = _t43;
766 v(4, 24) = _t19 * _t29;
767 v(4, 25) = _t42 * _t8;
768 v(4, 26) = _t27 * xi;
769 v(5, 0) = _t49;
770 v(5, 1) = _t51;
771 v(5, 2) = _t51;
772 v(5, 3) = _t49;
773 v(5, 4) = _t54;
774 v(5, 5) = _t55;
775 v(5, 6) = _t55;
776 v(5, 7) = _t54;
777 v(5, 8) = _t59;
778 v(5, 9) = _t50 * _t61;
779 v(5, 10) = _t59;
780 v(5, 11) = _t44 * _t61;
781 v(5, 12) = _t63;
782 v(5, 13) = _t64;
783 v(5, 14) = _t64;
784 v(5, 15) = _t63;
785 v(5, 16) = _t66;
786 v(5, 17) = _t50 * _t67;
787 v(5, 18) = _t66;
788 v(5, 19) = _t44 * _t67;
789 v(5, 20) = _t46 * _t57;
790 v(5, 21) = _t68;
791 v(5, 22) = _t42 * _t50;
792 v(5, 23) = _t68;
793 v(5, 24) = _t42 * _t44;
794 v(5, 25) = _t52 * _t57;
795 v(5, 26) = _t69 * zt;
796 v(6, 0) = _t71;
797 v(6, 1) = _t72;
798 v(6, 2) = _t74;
799 v(6, 3) = _t75;
800 v(6, 4) = _t71;
801 v(6, 5) = _t72;
802 v(6, 6) = _t74;
803 v(6, 7) = _t75;
804 v(6, 8) = _t76;
805 v(6, 9) = _t78;
806 v(6, 10) = _t79;
807 v(6, 11) = _t80;
808 v(6, 12) = _t44 * _t81;
809 v(6, 13) = _t50 * _t81;
810 v(6, 14) = _t50 * _t82;
811 v(6, 15) = _t44 * _t82;
812 v(6, 16) = _t76;
813 v(6, 17) = _t78;
814 v(6, 18) = _t79;
815 v(6, 19) = _t80;
816 v(6, 20) = _t83;
817 v(6, 21) = _t1 * _t57;
818 v(6, 22) = _t50 * _t84;
819 v(6, 23) = _t57 * _t6;
820 v(6, 24) = _t44 * _t84;
821 v(6, 25) = _t83;
822 v(6, 26) = _t69 * et;
823 v(7, 0) = _t88;
824 v(7, 1) = _t89;
825 v(7, 2) = _t92;
826 v(7, 3) = _t93;
827 v(7, 4) = _t88;
828 v(7, 5) = _t89;
829 v(7, 6) = _t92;
830 v(7, 7) = _t93;
831 v(7, 8) = _t95;
832 v(7, 9) = _t98;
833 v(7, 10) = _t99;
834 v(7, 11) = _t100;
835 v(7, 12) = _t102 * _t38;
836 v(7, 13) = _t102 * _t37;
837 v(7, 14) = _t103 * _t37;
838 v(7, 15) = _t103 * _t38;
839 v(7, 16) = _t95;
840 v(7, 17) = _t98;
841 v(7, 18) = _t99;
842 v(7, 19) = _t100;
843 v(7, 20) = _t104;
844 v(7, 21) = _t84 * _t85;
845 v(7, 22) = _t31 * _t96;
846 v(7, 23) = _t84 * _t90;
847 v(7, 24) = _t29 * _t96;
848 v(7, 25) = _t104;
849 v(7, 26) = _t105 * xi;
850 v(8, 0) = _t106;
851 v(8, 1) = _t106;
852 v(8, 2) = _t107;
853 v(8, 3) = _t107;
854 v(8, 4) = _t108;
855 v(8, 5) = _t108;
856 v(8, 6) = _t109;
857 v(8, 7) = _t109;
858 v(8, 8) = _t102 * _t56;
859 v(8, 9) = _t110;
860 v(8, 10) = _t103 * _t56;
861 v(8, 11) = _t110;
862 v(8, 12) = _t111;
863 v(8, 13) = _t111;
864 v(8, 14) = _t112;
865 v(8, 15) = _t112;
866 v(8, 16) = _t102 * _t65;
867 v(8, 17) = _t113;
868 v(8, 18) = _t103 * _t65;
869 v(8, 19) = _t113;
870 v(8, 20) = _t46 * _t96;
871 v(8, 21) = _t25 * _t85;
872 v(8, 22) = _t114;
873 v(8, 23) = _t25 * _t90;
874 v(8, 24) = _t114;
875 v(8, 25) = _t52 * _t96;
876 v(8, 26) = _t105 * zt;
877 v(9, 0) = _t120 + _t121 + _t124;
878 v(9, 1) = _t120 + _t126 + _t128;
879 v(9, 2) = _t121 + _t126 + _t130;
880 v(9, 3) = _t124 + _t128 + _t130;
881 v(9, 4) = _t131 + _t132 + _t133;
882 v(9, 5) = _t131 + _t134 + _t135;
883 v(9, 6) = _t132 + _t134 + _t136;
884 v(9, 7) = _t133 + _t135 + _t136;
885 v(9, 8) = _t60 * (-_t139 - _t141);
886 v(9, 9) = _t101 * (-_t144 - _t46);
887 v(9, 10) = _t60 * (-_t139 - _t46);
888 v(9, 11) = _t101 * (-_t141 - _t144);
889 v(9, 12) = _t13 * (-_t137 - _t146 - 1);
890 v(9, 13) = _t13 * (-_t1 - _t146);
891 v(9, 14) = _t13 * (-_t145 - _t28 - _t6);
892 v(9, 15) = _t13 * (-_t137 - _t145 - _t29);
893 v(9, 16) = _t60 * (-_t1 - _t138 - _t140);
894 v(9, 17) = _t101 * (-_t143 - _t31 - _t45);
895 v(9, 18) = _t60 * (-_t138 - _t45 - _t6);
896 v(9, 19) = _t101 * (-_t140 - _t143 - _t29);
897 v(9, 20) = _t46 * _t84;
898 v(9, 21) = _t1 * _t42;
899 v(9, 22) = _t25 * _t31;
900 v(9, 23) = _t42 * _t6;
901 v(9, 24) = _t25 * _t29;
902 v(9, 25) = _t52 * _t84;
903 v(9, 26) = -8 * _t119;
904 }
905 };
906 // <GEN_SHAPE_FUNCS_END>
907
908 // <GEN_ELEM_TRAITS_BEGIN>
909
910 template <>
912 {
913 static constexpr ElemType elemType = Hex27;
914 static constexpr int dim = 3;
915 static constexpr int order = 2;
916 static constexpr int numVertices = 8;
917 static constexpr int numNodes = 27;
918 static constexpr int numFaces = 6;
919 static constexpr int numEdges = 12;
920 static constexpr ParamSpace paramSpace = HexSpace;
921 static constexpr t_real paramSpaceVol = 8.0;
922 // 3 * NNodes is a compile-time constant; no overflow possible.
923 // NOLINTNEXTLINE(bugprone-implicit-widening-of-multiplication-result)
924 static constexpr std::array<t_real, 3 * 27> standardCoords = {
925 -1, -1, -1, // Node 0: vertex
926 1, -1, -1, // Node 1: vertex
927 1, 1, -1, // Node 2: vertex
928 -1, 1, -1, // Node 3: vertex
929 -1, -1, 1, // Node 4: vertex
930 1, -1, 1, // Node 5: vertex
931 1, 1, 1, // Node 6: vertex
932 -1, 1, 1, // Node 7: vertex
933 0, -1, -1, // Node 8
934 1, 0, -1, // Node 9
935 0, 1, -1, // Node 10
936 -1, 0, -1, // Node 11
937 -1, -1, 0, // Node 12
938 1, -1, 0, // Node 13
939 1, 1, 0, // Node 14
940 -1, 1, 0, // Node 15
941 0, -1, 1, // Node 16
942 1, 0, 1, // Node 17
943 0, 1, 1, // Node 18
944 -1, 0, 1, // Node 19
945 0, 0, -1, // Node 20
946 0, -1, 0, // Node 21
947 1, 0, 0, // Node 22
948 0, 1, 0, // Node 23
949 -1, 0, 0, // Node 24
950 0, 0, 1, // Node 25
951 0, 0, 0}; // Node 26
952
953 static constexpr ElemType GetFaceType(t_index /*iFace*/) { return Quad9; }
954
955 static constexpr std::array<std::array<t_index, 10>, 6> faceNodes = {{{0, 3, 2, 1, 11, 10, 9, 8, 20},
956 {0, 1, 5, 4, 8, 13, 16, 12, 21},
957 {1, 2, 6, 5, 9, 14, 17, 13, 22},
958 {2, 3, 7, 6, 10, 15, 18, 14, 23},
959 {0, 4, 7, 3, 12, 19, 15, 11, 24},
960 {4, 5, 6, 7, 16, 17, 18, 19, 25}}};
961
962 static constexpr ElemType GetEdgeType(t_index /*iEdge*/) { return Line3; }
963
964 static constexpr std::array<std::array<t_index, 3>, 12> edgeNodes = {{{0, 1, 8},
965 {1, 2, 9},
966 {2, 3, 10},
967 {3, 0, 11},
968 {0, 4, 12},
969 {1, 5, 13},
970 {2, 6, 14},
971 {3, 7, 15},
972 {4, 5, 16},
973 {5, 6, 17},
974 {6, 7, 18},
975 {7, 4, 19}}};
976
977 static constexpr ElemType elevatedType = UnknownElem;
978 static constexpr int numElevNodes = 0;
979
980 static constexpr int numBisect = 8;
981 static constexpr int numBisectVariants = 1;
982
983 static constexpr ElemType GetBisectElemType(t_index /*i*/) { return Hex8; }
984
985 static constexpr std::array<tBisectSub, 8> bisectElements = {{{0, 8, 20, 11, 12, 21, 26, 24},
986 {8, 1, 9, 20, 21, 13, 22, 26},
987 {11, 20, 10, 3, 24, 26, 23, 15},
988 {20, 9, 2, 10, 26, 22, 14, 23},
989 {12, 21, 26, 24, 4, 16, 25, 19},
990 {21, 13, 22, 26, 16, 5, 17, 25},
991 {24, 26, 23, 15, 19, 25, 18, 7},
992 {26, 22, 14, 23, 25, 17, 6, 18}}};
993
994 static constexpr int vtkCellType = 25;
995
996 static constexpr std::array<int, 20> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 12, 13, 14, 15};
997 };
998 // <GEN_ELEM_TRAITS_END>
999
1000} // namespace DNDS::Geom::Elem
Core type aliases, constants, and metaprogramming utilities for the DNDS framework.
#define DNDS_DEVICE_CALLABLE
Definition Defines.hpp:76
int32_t t_index
Definition Geometric.hpp:6
double t_real
Definition Geometric.hpp:8
static constexpr ElemType GetBisectElemType(t_index)
Definition Hex27.hpp:983
static constexpr ElemType GetFaceType(t_index)
Definition Hex27.hpp:953
static constexpr ElemType GetEdgeType(t_index)
Definition Hex27.hpp:962
static DNDS_DEVICE_CALLABLE void Diff1(const TPoint &p, TArray &&v)
Definition Hex27.hpp:92
static DNDS_DEVICE_CALLABLE void Diff2(const TPoint &p, TArray &&v)
Definition Hex27.hpp:255
static DNDS_DEVICE_CALLABLE void Diff0(const TPoint &p, TArray &&v)
Definition Hex27.hpp:23
static DNDS_DEVICE_CALLABLE void Diff3(const TPoint &p, TArray &&v)
Definition Hex27.hpp:563
Eigen::Matrix< real, 5, 1 > v
double order
Definition test_ODE.cpp:257
const tPoint const tPoint const tPoint & p