PACMAN 0.1.0
Portable Algorithms for Coupling, Mapping, and Adaptive iNterpolation
Loading...
Searching...
No Matches
FETools.hpp
Go to the documentation of this file.
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
6#pragma once
7
8// #include <memory>
9// #include <stdexcept>
10// #include <cmath>
11
12#include "common/types.hpp"
13#include <Kokkos_Core.hpp>
14
26namespace PACMAN {
27namespace FiniteElements {
28
29#define _EPS_BARY 1e-6
30
31template <GeoSupport T>
44 const fp_t phi) {
45 Kokkos::abort("not implemented in the field transfer");
46 return false;
47};
48
49template <>
52 const fp_t phi) {
53 return true;
54}
55
56template <>
59 const fp_t phi) {
60 return (Kokkos::abs(xi - 0.5) < 0.5 + _EPS_BARY);
61}
62
63template <>
66 const fp_t phi) {
67 return (xi + _EPS_BARY > 0.) && (eta + _EPS_BARY > 0.) &&
68 (xi + eta < 1.0 + _EPS_BARY);
69}
70
71template <>
74 const fp_t phi) {
75 return (Kokkos::abs(xi - 0.5) < 0.5 + _EPS_BARY) &&
76 (Kokkos::abs(eta - 0.5) < 0.5 + _EPS_BARY);
77}
78template <>
81 const fp_t phi) {
82 return (xi + _EPS_BARY > 0.) && (eta + _EPS_BARY > 0.) &&
83 (phi + _EPS_BARY > 0.) && (xi + eta + phi < 1.0 + _EPS_BARY);
84}
85
86template <>
89 const fp_t phi) {
90 return (Kokkos::abs(xi - 0.5) < 0.5 + _EPS_BARY) &&
91 (Kokkos::abs(eta - 0.5) < 0.5 + _EPS_BARY) &&
92 (Kokkos::abs(phi - 0.5) < 0.5 + _EPS_BARY);
93}
94
95template <>
98 const fp_t phi) {
99 return (xi + _EPS_BARY > 0.) && (eta + _EPS_BARY > 0.) &&
100 (xi + eta < 1.0 + _EPS_BARY) &&
101 (Kokkos::abs(phi - 0.5) < 0.5 + _EPS_BARY);
102}
103
104template <>
107 const fp_t phi) {
108 const auto x = 0.5 * (xi - eta);
109 const auto y = 0.5 * (xi + eta);
110 const auto z = phi;
111 const auto s = 1.0 - z;
112 return (Kokkos::abs(x) < 0.5 * s + _EPS_BARY) &&
113 (Kokkos::abs(y) < 0.5 * s + _EPS_BARY) &&
114 (Kokkos::abs(z - 0.5) < 0.5 + _EPS_BARY);
115}
116
128template <typename ExecSpace, CellType CT> struct LagrangeSpaceGeo;
129
130template <typename ExecSpace>
132public:
133 static constexpr unsigned int numberOfShapeFunctions = 0U;
134 static constexpr unsigned int dimensionality = 0;
135 KOKKOS_INLINE_FUNCTION static void
137 Kokkos::View<fp_t *, ExecSpace> sfv) {
138 return;
139 }
140 KOKKOS_INLINE_FUNCTION static void
142 Kokkos::View<fp_t *, ExecSpace> sfv) {
143 return;
144 }
145 KOKKOS_INLINE_FUNCTION static void
147 const fp_t phi,
148 Kokkos::View<fp_t **, ExecSpace> sfddv) {
149 return;
150 }
151 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
152 const fp_t phi) {
153 return false;
154 };
155};
156template <typename ExecSpace>
158public:
159 static constexpr unsigned int numberOfShapeFunctions = 1U;
160 static constexpr unsigned int dimensionality = 0;
161 KOKKOS_INLINE_FUNCTION static void
163 Kokkos::View<fp_t *, ExecSpace> sfv) {
164 sfv(0) = 1.0;
165 return;
166 };
167 KOKKOS_INLINE_FUNCTION static void
169 Kokkos::View<fp_t **, ExecSpace> sfdv) {
170 return;
171 };
172 KOKKOS_INLINE_FUNCTION static void
174 const fp_t phi,
175 Kokkos::View<fp_t **, ExecSpace> sfddv) {
176 return;
177 };
178 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
179 const fp_t phi) {
181 };
182};
183template <typename ExecSpace>
185public:
186 static constexpr unsigned int numberOfShapeFunctions = 2U;
187 static constexpr unsigned int dimensionality = 1U;
188 KOKKOS_INLINE_FUNCTION static void
190 Kokkos::View<fp_t *, ExecSpace> sfv) {
191 sfv(0) = 1.0 - xi;
192 sfv(1) = xi;
193 return;
194 };
195 KOKKOS_INLINE_FUNCTION static void
197 Kokkos::View<fp_t **, ExecSpace> sfdv) {
198 sfdv(0, 0) = -1.0;
199 sfdv(0, 1) = 1;
200 return;
201 };
202 KOKKOS_INLINE_FUNCTION static void
204 const fp_t phi,
205 Kokkos::View<fp_t **, ExecSpace> sfddv) {
206 return;
207 };
208 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
209 const fp_t phi) {
211 };
212};
213template <typename ExecSpace>
215public:
216 static constexpr unsigned int numberOfShapeFunctions = 3U;
217 static constexpr unsigned int dimensionality = 1U;
218 KOKKOS_INLINE_FUNCTION static void
220 Kokkos::View<fp_t *, ExecSpace> sfv) {
221 const fp_t x0 = 2.0 * xi - 1.0;
222 sfv(0) = -x0 * (1.0 - xi);
223 sfv(1) = x0 * xi;
224 sfv(2) = xi * (4.0 - 4.0 * xi);
225 return;
226 };
227 KOKKOS_INLINE_FUNCTION static void
229 Kokkos::View<fp_t **, ExecSpace> sfdv) {
230 const fp_t x0 = 4.0 * xi;
231 sfdv(0, 0) = x0 - 3.0;
232 sfdv(0, 1) = x0 - 1.0;
233 sfdv(0, 2) = 4.0 - 8.0 * xi;
234 return;
235 };
236 KOKKOS_INLINE_FUNCTION static void
238 const fp_t phi,
239 Kokkos::View<fp_t **, ExecSpace> sfddv) {
240 switch (i) {
241 case 0: {
242 sfddv(0, 0) = 4.0;
243 break;
244 }
245 case 1: {
246 sfddv(0, 0) = 4.0;
247 break;
248 }
249 case 2: {
250 sfddv(0, 0) = -8.0;
251 break;
252 }
253 }
254 return;
255 };
256 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
257 const fp_t phi) {
259 };
260};
261template <typename ExecSpace>
263public:
264 static constexpr unsigned int numberOfShapeFunctions = 3U;
265 static constexpr unsigned int dimensionality = 2U;
266 KOKKOS_INLINE_FUNCTION static void
268 Kokkos::View<fp_t *, ExecSpace> sfv) {
269 sfv(0) = -eta - xi + 1.0;
270 sfv(1) = xi;
271 sfv(2) = eta;
272 return;
273 };
274 KOKKOS_INLINE_FUNCTION static void
276 Kokkos::View<fp_t **, ExecSpace> sfdv) {
277 sfdv(0, 0) = -1.0;
278 sfdv(1, 0) = -1.0;
279 sfdv(0, 1) = 1.0;
280 sfdv(1, 1) = 0.0;
281 sfdv(0, 2) = 0.0;
282 sfdv(1, 2) = 1.0;
283 return;
284 };
285 KOKKOS_INLINE_FUNCTION static void
287 const fp_t phi,
288 Kokkos::View<fp_t **, ExecSpace> sfddv) {
289 return;
290 };
291 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
292 const fp_t phi) {
294 };
295};
296template <typename ExecSpace>
298public:
299 static constexpr unsigned int numberOfShapeFunctions = 6U;
300 static constexpr unsigned int dimensionality = 2U;
301 KOKKOS_INLINE_FUNCTION static void
303 Kokkos::View<fp_t *, ExecSpace> sfv) {
304 const fp_t x0 = 2 * eta;
305 const fp_t x1 = 2 * xi - 1;
306 const fp_t x2 = -eta - xi + 1;
307 const fp_t x3 = 4 * xi;
308 sfv(0) = x2 * (-x0 - x1);
309 sfv(1) = x1 * xi;
310 sfv(2) = eta * (x0 - 1.0);
311 sfv(3) = x2 * x3;
312 sfv(4) = eta * x3;
313 sfv(5) = 4.0 * eta * x2;
314 return;
315 };
316 KOKKOS_INLINE_FUNCTION static void
318 Kokkos::View<fp_t **, ExecSpace> sfdv) {
319 const fp_t x0 = 4.0 * eta;
320 const fp_t x1 = 4.0 * xi;
321 const fp_t x2 = x0 + x1 - 3.0;
322 sfdv(0, 0) = x2;
323 sfdv(1, 0) = x2;
324 sfdv(0, 1) = x1 - 1.0;
325 sfdv(1, 1) = 0.0;
326 sfdv(0, 2) = 0.0;
327 sfdv(1, 2) = x0 - 1.0;
328 sfdv(0, 3) = -x0 - 8.0 * xi + 4.0;
329 sfdv(1, 3) = -x1;
330 sfdv(0, 4) = x0;
331 sfdv(1, 4) = x1;
332 sfdv(0, 5) = -x0;
333 sfdv(1, 5) = -8.0 * eta - x1 + 4.0;
334 return;
335 };
336 KOKKOS_INLINE_FUNCTION static void
338 const fp_t phi,
339 Kokkos::View<fp_t **, ExecSpace> sfddv) {
340 switch (i) {
341 case 0: {
342 sfddv(0, 0) = 4.0;
343 sfddv(0, 1) = 4.0;
344 sfddv(1, 0) = 4.0;
345 sfddv(1, 1) = 4.0;
346 break;
347 }
348 case 1: {
349 sfddv(0, 0) = 4.0;
350 break;
351 }
352 case 2: {
353 sfddv(1, 1) = 4.0;
354 break;
355 }
356 case 3: {
357 sfddv(0, 0) = -8.0;
358 sfddv(0, 1) = -4.0;
359 sfddv(1, 0) = -4.0;
360 break;
361 }
362 case 4: {
363 sfddv(0, 1) = 4.0;
364 sfddv(1, 0) = 4.0;
365 break;
366 }
367 case 5: {
368 sfddv(0, 1) = -4.0;
369 sfddv(1, 0) = -4.0;
370 sfddv(1, 1) = -8.0;
371 break;
372 }
373 }
374 return;
375 };
376 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
377 const fp_t phi) {
379 };
380};
381template <typename ExecSpace>
383public:
384 static constexpr unsigned int numberOfShapeFunctions = 4U;
385 static constexpr unsigned int dimensionality = 2U;
386 KOKKOS_INLINE_FUNCTION static void
388 Kokkos::View<fp_t *, ExecSpace> sfv) {
389 const fp_t x0 = 1 - eta;
390 const fp_t x1 = 1 - xi;
391 sfv(0) = x0 * x1;
392 sfv(1) = x0 * xi;
393 sfv(2) = eta * xi;
394 sfv(3) = eta * x1;
395 return;
396 };
397 KOKKOS_INLINE_FUNCTION static void
399 Kokkos::View<fp_t **, ExecSpace> sfdv) {
400 const fp_t x0 = eta - 1;
401 const fp_t x1 = xi - 1;
402 sfdv(0, 0) = x0;
403 sfdv(1, 0) = x1;
404 sfdv(0, 1) = -x0;
405 sfdv(1, 1) = -xi;
406 sfdv(0, 2) = eta;
407 sfdv(1, 2) = xi;
408 sfdv(0, 3) = -eta;
409 sfdv(1, 3) = -x1;
410 return;
411 };
412 KOKKOS_INLINE_FUNCTION static void
414 const fp_t phi,
415 Kokkos::View<fp_t **, ExecSpace> sfddv) {
416 switch (i) {
417 case 0: {
418 sfddv(0, 1) = 1;
419 sfddv(1, 0) = 1;
420 break;
421 }
422 case 1: {
423 sfddv(0, 1) = -1;
424 sfddv(1, 0) = -1;
425 break;
426 }
427 case 2: {
428 sfddv(0, 1) = 1;
429 sfddv(1, 0) = 1;
430 break;
431 }
432 case 3: {
433 sfddv(0, 1) = -1;
434 sfddv(1, 0) = -1;
435 break;
436 }
437 }
438 return;
439 };
440 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
441 const fp_t phi) {
443 };
444};
445template <typename ExecSpace>
447public:
448 static constexpr unsigned int numberOfShapeFunctions = 8U;
449 static constexpr unsigned int dimensionality = 2U;
450 KOKKOS_INLINE_FUNCTION static void
452 Kokkos::View<fp_t *, ExecSpace> sfv) {
453 const fp_t x0 = 1.0 - eta;
454 const fp_t x1 = 1.0 - xi;
455 const fp_t x2 = 2.0 * eta;
456 const fp_t x3 = 2.0 * xi;
457 const fp_t x4 = x3 - 1.0;
458 const fp_t x5 = 1.0 - x4 * x4;
459 const fp_t x6 = 1.0 - (x2 - 1.0) * (x2 - 1.0);
460 sfv(0) = x0 * x1 * (-x2 - x4);
461 sfv(1) = x0 * xi * (-x2 + x3 - 1);
462 sfv(2) = eta * xi * (x2 + x3 - 3);
463 sfv(3) = eta * x1 * (x2 - x3 - 1);
464 sfv(4) = 0.5 * x5 * (2.0 - x2);
465 sfv(5) = x6 * xi;
466 sfv(6) = eta * x5;
467 sfv(7) = 0.5 * x6 * (2.0 - x3);
468 return;
469 };
470 KOKKOS_INLINE_FUNCTION static void
472 Kokkos::View<fp_t **, ExecSpace> sfdv) {
473 const fp_t x0 = 1.0 - eta;
474 const fp_t x1 = 1.0 - xi;
475 const fp_t x2 = 2.0 * x0 * x1;
476 const fp_t x3 = 2.0 * xi;
477 const fp_t x4 = 2.0 * eta;
478 const fp_t x5 = x4 - 1.0;
479 const fp_t x6 = -x3 - x5;
480 const fp_t x7 = x0 * x3;
481 const fp_t x8 = x3 - x4 - 1.0;
482 const fp_t x9 = x4 * xi;
483 const fp_t x10 = x3 + x4 - 3.0;
484 const fp_t x11 = x1 * x4;
485 const fp_t x12 = -x3 + x4 - 1.0;
486 const fp_t x13 = 4.0 - 8.0 * xi;
487 const fp_t x14 = x5 * x5 - 1;
488 const fp_t x15 = (x3 - 1.0) * (x3 - 1.0) - 1.0;
489 const fp_t x16 = 4.0 - 8.0 * eta;
490 sfdv(0, 0) = -x0 * x6 - x2;
491 sfdv(1, 0) = -x1 * x6 - x2;
492 sfdv(0, 1) = x0 * x8 + x7;
493 sfdv(1, 1) = -x7 - x8 * xi;
494 sfdv(0, 2) = eta * x10 + x9;
495 sfdv(1, 2) = x10 * xi + x9;
496 sfdv(0, 3) = -eta * x12 - x11;
497 sfdv(1, 3) = x1 * x12 + x11;
498 sfdv(0, 4) = 0.5 * x13 * (2.0 - x4);
499 sfdv(1, 4) = x15;
500 sfdv(0, 5) = -x14;
501 sfdv(1, 5) = x16 * xi;
502 sfdv(0, 6) = eta * x13;
503 sfdv(1, 6) = -x15;
504 sfdv(0, 7) = x14;
505 sfdv(1, 7) = 0.5 * x16 * (2.0 - x3);
506 return;
507 };
508 KOKKOS_INLINE_FUNCTION static void
510 const fp_t phi,
511 Kokkos::View<fp_t **, ExecSpace> sfddv) {
512 switch (i) {
513 case 0: {
514 const fp_t x0 = 4 * eta;
515 const fp_t x1 = 4 * xi;
516 const fp_t x2 = -x0 - x1 + 5;
517 sfddv(0, 0) = 4 - x0;
518 sfddv(0, 1) = x2;
519 sfddv(1, 0) = x2;
520 sfddv(1, 1) = 4 - x1;
521 break;
522 }
523 case 1: {
524 const fp_t x0 = 4 * eta;
525 const fp_t x1 = 4 * xi;
526 const fp_t x2 = x0 - x1 - 1;
527 sfddv(0, 0) = 4 - x0;
528 sfddv(0, 1) = x2;
529 sfddv(1, 0) = x2;
530 sfddv(1, 1) = x1;
531 break;
532 }
533 case 2: {
534 const fp_t x0 = 4 * eta;
535 const fp_t x1 = 4 * xi;
536 const fp_t x2 = x0 + x1 - 3;
537 sfddv(0, 0) = x0;
538 sfddv(0, 1) = x2;
539 sfddv(1, 0) = x2;
540 sfddv(1, 1) = x1;
541 break;
542 }
543 case 3: {
544 const fp_t x0 = 4 * eta;
545 const fp_t x1 = 4 * xi;
546 const fp_t x2 = -x0 + x1 - 1;
547 sfddv(0, 0) = x0;
548 sfddv(0, 1) = x2;
549 sfddv(1, 0) = x2;
550 sfddv(1, 1) = 4 - x1;
551 break;
552 }
553 case 4: {
554 const fp_t x0 = 8 * xi - 4;
555 sfddv(0, 0) = 8 * eta - 8;
556 sfddv(0, 1) = x0;
557 sfddv(1, 0) = x0;
558 break;
559 }
560 case 5: {
561 const fp_t x0 = 4 - 8 * eta;
562 sfddv(0, 1) = x0;
563 sfddv(1, 0) = x0;
564 sfddv(1, 1) = -8 * xi;
565 break;
566 }
567 case 6: {
568 const fp_t x0 = 4 - 8 * xi;
569 sfddv(0, 0) = -8 * eta;
570 sfddv(0, 1) = x0;
571 sfddv(1, 0) = x0;
572 break;
573 }
574 case 7: {
575 const fp_t x0 = 8 * eta - 4;
576 sfddv(0, 1) = x0;
577 sfddv(1, 0) = x0;
578 sfddv(1, 1) = 8 * xi - 8;
579 break;
580 }
581 }
582 return;
583 };
584 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
585 const fp_t phi) {
587 };
588};
589template <typename ExecSpace>
591public:
592 static constexpr unsigned int numberOfShapeFunctions = 4U;
593 static constexpr unsigned int dimensionality = 3U;
594 KOKKOS_INLINE_FUNCTION static void
596 Kokkos::View<fp_t *, ExecSpace> sfv) {
597 sfv(0) = -eta - phi - xi + 1.0;
598 sfv(1) = xi;
599 sfv(2) = eta;
600 sfv(3) = phi;
601 return;
602 };
603 KOKKOS_INLINE_FUNCTION static void
605 Kokkos::View<fp_t **, ExecSpace> sfdv) {
606 sfdv(0, 0) = -1.0;
607 sfdv(1, 0) = -1.0;
608 sfdv(2, 0) = -1.0;
609 sfdv(0, 1) = 1.0;
610 sfdv(1, 1) = 0.0;
611 sfdv(2, 1) = 0.0;
612 sfdv(0, 2) = 0.0;
613 sfdv(1, 2) = 1.0;
614 sfdv(2, 2) = 0.0;
615 sfdv(0, 3) = 0.0;
616 sfdv(1, 3) = 0.0;
617 sfdv(2, 3) = 1.0;
618 return;
619 };
620 KOKKOS_INLINE_FUNCTION static void
622 const fp_t phi,
623 Kokkos::View<fp_t **, ExecSpace> sfddv) {
624 return;
625 };
626 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
627 const fp_t phi) {
629 };
630};
631template <typename ExecSpace>
633public:
634 static constexpr unsigned int numberOfShapeFunctions = 10U;
635 static constexpr unsigned int dimensionality = 3U;
636 KOKKOS_INLINE_FUNCTION static void
638 Kokkos::View<fp_t *, ExecSpace> sfv) {
639 const fp_t x0 = 2.0 * eta - 1.0;
640 const fp_t x1 = 2.0 * xi;
641 const fp_t x2 = 2.0 * phi;
642 const fp_t x3 = -eta - phi - xi + 1.0;
643 const fp_t x4 = 4.0 * eta;
644 const fp_t x5 = 4.0 * phi;
645 const fp_t x6 = -x4 - x5 - 4.0 * xi + 4.0;
646 sfv(0) = eta * x0;
647 sfv(1) = x3 * (-x0 - x1 - x2);
648 sfv(2) = xi * (x1 - 1.0);
649 sfv(3) = phi * (x2 - 1.0);
650 sfv(4) = x3 * x4;
651 sfv(5) = x6 * xi;
652 sfv(6) = x4 * xi;
653 sfv(7) = phi * x4;
654 sfv(8) = phi * x6;
655 sfv(9) = x5 * xi;
656 return;
657 };
658 KOKKOS_INLINE_FUNCTION static void
660 Kokkos::View<fp_t **, ExecSpace> sfdv) {
661 const fp_t x0 = 4.0 * xi;
662 const fp_t x1 = 4.0 * eta;
663 const fp_t x2 = 4.0 * phi;
664 const fp_t x3 = x1 + x2;
665 const fp_t x4 = x0 + x3 - 3.0;
666 const fp_t x5 = -x1;
667 const fp_t x6 = -x2;
668 const fp_t x7 = x0 - 4.0;
669 const fp_t x8 = -x0;
670 sfdv(0, 0) = 0.0;
671 sfdv(1, 0) = x1 - 1.0;
672 sfdv(2, 0) = 0.0;
673 sfdv(0, 1) = x4;
674 sfdv(1, 1) = x4;
675 sfdv(2, 1) = x4;
676 sfdv(0, 2) = x0 - 1.0;
677 sfdv(1, 2) = 0.0;
678 sfdv(2, 2) = 0.0;
679 sfdv(0, 3) = 0.0;
680 sfdv(1, 3) = 0.0;
681 sfdv(2, 3) = x2 - 1.0;
682 sfdv(0, 4) = x5;
683 sfdv(1, 4) = -8.0 * eta - x2 - x7;
684 sfdv(2, 4) = x5;
685 sfdv(0, 5) = -x3 - 8.0 * xi + 4.0;
686 sfdv(1, 5) = x8;
687 sfdv(2, 5) = x8;
688 sfdv(0, 6) = x1;
689 sfdv(1, 6) = x0;
690 sfdv(2, 6) = 0.0;
691 sfdv(0, 7) = 0.0;
692 sfdv(1, 7) = x2;
693 sfdv(2, 7) = x1;
694 sfdv(0, 8) = x6;
695 sfdv(1, 8) = x6;
696 sfdv(2, 8) = -8.0 * phi - x1 - x7;
697 sfdv(0, 9) = x2;
698 sfdv(1, 9) = 0.0;
699 sfdv(2, 9) = x0;
700 return;
701 };
702 KOKKOS_INLINE_FUNCTION static void
704 const fp_t phi,
705 Kokkos::View<fp_t **, ExecSpace> sfddv) {
706 switch (i) {
707 case 0: {
708 sfddv(1, 1) = 4.0;
709 break;
710 }
711 case 1: {
712 sfddv(0, 0) = 4.0;
713 sfddv(0, 1) = 4.0;
714 sfddv(0, 2) = 4.0;
715 sfddv(1, 0) = 4.0;
716 sfddv(1, 1) = 4.0;
717 sfddv(1, 2) = 4.0;
718 sfddv(2, 0) = 4.0;
719 sfddv(2, 1) = 4.0;
720 sfddv(2, 2) = 4.0;
721 break;
722 }
723 case 2: {
724 sfddv(0, 0) = 4.0;
725 break;
726 }
727 case 3: {
728 sfddv(2, 2) = 4.0;
729 break;
730 }
731 case 4: {
732 sfddv(0, 1) = -4.0;
733 sfddv(1, 0) = -4.0;
734 sfddv(1, 1) = -8.0;
735 sfddv(1, 2) = -4.0;
736 sfddv(2, 1) = -4.0;
737 break;
738 }
739 case 5: {
740 sfddv(0, 0) = -8.0;
741 sfddv(0, 1) = -4.0;
742 sfddv(0, 2) = -4.0;
743 sfddv(1, 0) = -4.0;
744 sfddv(2, 0) = -4.0;
745 break;
746 }
747 case 6: {
748 sfddv(0, 1) = 4.0;
749 sfddv(1, 0) = 4.0;
750 break;
751 }
752 case 7: {
753 sfddv(1, 2) = 4.0;
754 sfddv(2, 1) = 4.0;
755 break;
756 }
757 case 8: {
758 sfddv(0, 2) = -4.0;
759 sfddv(1, 2) = -4.0;
760 sfddv(2, 0) = -4.0;
761 sfddv(2, 1) = -4.0;
762 sfddv(2, 2) = -8.0;
763 break;
764 }
765 case 9: {
766 sfddv(0, 2) = 4.0;
767 sfddv(2, 0) = 4.0;
768 break;
769 }
770 }
771 return;
772 };
773 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
774 const fp_t phi) {
776 };
777};
778template <typename ExecSpace>
780public:
781 static constexpr unsigned int numberOfShapeFunctions = 8U;
782 static constexpr unsigned int dimensionality = 3U;
783 KOKKOS_INLINE_FUNCTION static void
785 Kokkos::View<fp_t *, ExecSpace> sfv) {
786 const fp_t x0 = 1 - xi;
787 const fp_t x1 = 1 - eta;
788 const fp_t x2 = 1 - phi;
789 const fp_t x3 = x1 * x2;
790 const fp_t x4 = eta * x2;
791 const fp_t x5 = phi * x1;
792 const fp_t x6 = eta * phi;
793 sfv(0) = x0 * x3;
794 sfv(1) = x3 * xi;
795 sfv(2) = x4 * xi;
796 sfv(3) = x0 * x4;
797 sfv(4) = x0 * x5;
798 sfv(5) = x5 * xi;
799 sfv(6) = x6 * xi;
800 sfv(7) = x0 * x6;
801 return;
802 };
803 KOKKOS_INLINE_FUNCTION static void
805 Kokkos::View<fp_t **, ExecSpace> sfdv) {
806 const fp_t x0 = 1 - eta;
807 const fp_t x1 = 1 - phi;
808 const fp_t x2 = x0 * x1;
809 const fp_t x3 = eta * x1;
810 const fp_t x4 = phi * x0;
811 const fp_t x5 = eta * phi;
812 const fp_t x6 = 1 - xi;
813 const fp_t x7 = x1 * x6;
814 const fp_t x8 = x1 * xi;
815 const fp_t x9 = phi * x6;
816 const fp_t x10 = phi * xi;
817 const fp_t x11 = x0 * x6;
818 const fp_t x12 = x0 * xi;
819 const fp_t x13 = eta * xi;
820 const fp_t x14 = eta * x6;
821 sfdv(0, 0) = -x2;
822 sfdv(1, 0) = -x7;
823 sfdv(2, 0) = -x11;
824 sfdv(0, 1) = x2;
825 sfdv(1, 1) = -x8;
826 sfdv(2, 1) = -x12;
827 sfdv(0, 2) = x3;
828 sfdv(1, 2) = x8;
829 sfdv(2, 2) = -x13;
830 sfdv(0, 3) = -x3;
831 sfdv(1, 3) = x7;
832 sfdv(2, 3) = -x14;
833 sfdv(0, 4) = -x4;
834 sfdv(1, 4) = -x9;
835 sfdv(2, 4) = x11;
836 sfdv(0, 5) = x4;
837 sfdv(1, 5) = -x10;
838 sfdv(2, 5) = x12;
839 sfdv(0, 6) = x5;
840 sfdv(1, 6) = x10;
841 sfdv(2, 6) = x13;
842 sfdv(0, 7) = -x5;
843 sfdv(1, 7) = x9;
844 sfdv(2, 7) = x14;
845 return;
846 };
847 KOKKOS_INLINE_FUNCTION static void
849 const fp_t phi,
850 Kokkos::View<fp_t **, ExecSpace> sfddv) {
851 switch (i) {
852 case 0: {
853 const fp_t x0 = 1 - phi;
854 const fp_t x1 = 1 - eta;
855 const fp_t x2 = 1 - xi;
856 sfddv(0, 1) = x0;
857 sfddv(0, 2) = x1;
858 sfddv(1, 0) = x0;
859 sfddv(1, 2) = x2;
860 sfddv(2, 0) = x1;
861 sfddv(2, 1) = x2;
862 break;
863 }
864 case 1: {
865 const fp_t x0 = phi - 1;
866 const fp_t x1 = eta - 1;
867 sfddv(0, 1) = x0;
868 sfddv(0, 2) = x1;
869 sfddv(1, 0) = x0;
870 sfddv(1, 2) = xi;
871 sfddv(2, 0) = x1;
872 sfddv(2, 1) = xi;
873 break;
874 }
875 case 2: {
876 const fp_t x0 = 1 - phi;
877 const fp_t x1 = -eta;
878 const fp_t x2 = -xi;
879 sfddv(0, 1) = x0;
880 sfddv(0, 2) = x1;
881 sfddv(1, 0) = x0;
882 sfddv(1, 2) = x2;
883 sfddv(2, 0) = x1;
884 sfddv(2, 1) = x2;
885 break;
886 }
887 case 3: {
888 const fp_t x0 = phi - 1;
889 const fp_t x1 = xi - 1;
890 sfddv(0, 1) = x0;
891 sfddv(0, 2) = eta;
892 sfddv(1, 0) = x0;
893 sfddv(1, 2) = x1;
894 sfddv(2, 0) = eta;
895 sfddv(2, 1) = x1;
896 break;
897 }
898 case 4: {
899 const fp_t x0 = eta - 1;
900 const fp_t x1 = xi - 1;
901 sfddv(0, 1) = phi;
902 sfddv(0, 2) = x0;
903 sfddv(1, 0) = phi;
904 sfddv(1, 2) = x1;
905 sfddv(2, 0) = x0;
906 sfddv(2, 1) = x1;
907 break;
908 }
909 case 5: {
910 const fp_t x0 = -phi;
911 const fp_t x1 = 1 - eta;
912 const fp_t x2 = -xi;
913 sfddv(0, 1) = x0;
914 sfddv(0, 2) = x1;
915 sfddv(1, 0) = x0;
916 sfddv(1, 2) = x2;
917 sfddv(2, 0) = x1;
918 sfddv(2, 1) = x2;
919 break;
920 }
921 case 6: {
922 sfddv(0, 1) = phi;
923 sfddv(0, 2) = eta;
924 sfddv(1, 0) = phi;
925 sfddv(1, 2) = xi;
926 sfddv(2, 0) = eta;
927 sfddv(2, 1) = xi;
928 break;
929 }
930 case 7: {
931 const fp_t x0 = -phi;
932 const fp_t x1 = -eta;
933 const fp_t x2 = 1 - xi;
934 sfddv(0, 1) = x0;
935 sfddv(0, 2) = x1;
936 sfddv(1, 0) = x0;
937 sfddv(1, 2) = x2;
938 sfddv(2, 0) = x1;
939 sfddv(2, 1) = x2;
940 break;
941 }
942 }
943 return;
944 };
945 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
946 const fp_t phi) {
948 };
949};
950template <typename ExecSpace>
952public:
953 static constexpr unsigned int numberOfShapeFunctions = 20U;
954 static constexpr unsigned int dimensionality = 3U;
955 KOKKOS_INLINE_FUNCTION static void
957 Kokkos::View<fp_t *, ExecSpace> sfv) {
958 const fp_t x0 = 1 - xi;
959 const fp_t x1 = 2 * xi;
960 const fp_t x2 = 2 * eta;
961 const fp_t x3 = 2 * phi;
962 const fp_t x4 = x2 + x3;
963 const fp_t x5 = x1 + x4;
964 const fp_t x6 = 1 - eta;
965 const fp_t x7 = 1 - phi;
966 const fp_t x8 = x6 * x7;
967 const fp_t x9 = -x1;
968 const fp_t x10 = x4 + x9;
969 const fp_t x11 = x2 - x3;
970 const fp_t x12 = x1 + x11;
971 const fp_t x13 = eta * x7;
972 const fp_t x14 = x13 * xi;
973 const fp_t x15 = phi * x6;
974 const fp_t x16 = x15 * xi;
975 const fp_t x17 = eta * phi;
976 const fp_t x18 = x17 * xi;
977 const fp_t x19 = 2 - x2;
978 const fp_t x20 = 2 - x3;
979 const fp_t x21 = x20 * xi;
980 const fp_t x22 = x0 * x21;
981 const fp_t x23 = 2 - x1;
982 const fp_t x24 = x3 * xi;
983 const fp_t x25 = x19 * x7;
984 const fp_t x26 = phi * x23;
985 sfv(0) = x0 * x8 * (1 - x5);
986 sfv(1) = x8 * xi * (-x10 - 1);
987 sfv(2) = x14 * (x12 - 3);
988 sfv(3) = x0 * x13 * (-x1 + x2 - x3 - 1);
989 sfv(4) = x0 * x15 * (-x12 - 1);
990 sfv(5) = x16 * (-x11 - x9 - 3);
991 sfv(6) = x18 * (x5 - 5);
992 sfv(7) = x0 * x17 * (x10 - 3);
993 sfv(8) = x19 * x22;
994 sfv(9) = x2 * x21 * x6;
995 sfv(10) = x2 * x22;
996 sfv(11) = eta * x20 * x23 * x6;
997 sfv(12) = x0 * x19 * x24;
998 sfv(13) = 4 * eta * x16;
999 sfv(14) = 4 * x0 * x18;
1000 sfv(15) = x15 * x2 * x23;
1001 sfv(16) = x25 * x26;
1002 sfv(17) = x24 * x25;
1003 sfv(18) = 4 * phi * x14;
1004 sfv(19) = x2 * x26 * x7;
1005 return;
1006 };
1007 KOKKOS_INLINE_FUNCTION static void
1009 Kokkos::View<fp_t **, ExecSpace> sfdv) {
1010 const fp_t x0 = 1 - xi;
1011 const fp_t x1 = 1 - eta;
1012 const fp_t x2 = 1 - phi;
1013 const fp_t x3 = x1 * x2;
1014 const fp_t x4 = 2 * x0 * x3;
1015 const fp_t x5 = 2 * xi;
1016 const fp_t x6 = 2 * eta;
1017 const fp_t x7 = 2 * phi;
1018 const fp_t x8 = x6 + x7;
1019 const fp_t x9 = x5 + x8;
1020 const fp_t x10 = 1 - x9;
1021 const fp_t x11 = x3 * x5;
1022 const fp_t x12 = -x5;
1023 const fp_t x13 = x12 + x8;
1024 const fp_t x14 = -x13 - 1;
1025 const fp_t x15 = x2 * xi;
1026 const fp_t x16 = x15 * x6;
1027 const fp_t x17 = x6 - x7;
1028 const fp_t x18 = x17 + x5;
1029 const fp_t x19 = x18 - 3;
1030 const fp_t x20 = eta * x2;
1031 const fp_t x21 = x0 * x2;
1032 const fp_t x22 = x21 * x6;
1033 const fp_t x23 = -x5 + x6 - x7 - 1;
1034 const fp_t x24 = x0 * x1;
1035 const fp_t x25 = x24 * x7;
1036 const fp_t x26 = -x18 - 1;
1037 const fp_t x27 = phi * x1;
1038 const fp_t x28 = x1 * xi;
1039 const fp_t x29 = x28 * x7;
1040 const fp_t x30 = -x12 - x17 - 3;
1041 const fp_t x31 = phi * xi;
1042 const fp_t x32 = x31 * x6;
1043 const fp_t x33 = x9 - 5;
1044 const fp_t x34 = eta * phi;
1045 const fp_t x35 = phi * x0;
1046 const fp_t x36 = x35 * x6;
1047 const fp_t x37 = x13 - 3;
1048 const fp_t x38 = 2 - x6;
1049 const fp_t x39 = 2 - x7;
1050 const fp_t x40 = x39 * x6;
1051 const fp_t x41 = x1 * x40;
1052 const fp_t x42 = x40 * xi;
1053 const fp_t x43 = x38 * x7;
1054 const fp_t x44 = x43 * xi;
1055 const fp_t x45 = 4 * eta * x27;
1056 const fp_t x46 = 4 * x34 * xi;
1057 const fp_t x47 = x2 * x43;
1058 const fp_t x48 = 4 * phi;
1059 const fp_t x49 = x20 * x48;
1060 const fp_t x50 = x0 * x39 * x5;
1061 const fp_t x51 = 2 - x5;
1062 const fp_t x52 = 4 * x35 * xi;
1063 const fp_t x53 = x51 * x6;
1064 const fp_t x54 = phi * x53;
1065 const fp_t x55 = x2 * x51 * x7;
1066 const fp_t x56 = x15 * x48;
1067 const fp_t x57 = eta * xi;
1068 const fp_t x58 = eta * x0;
1069 const fp_t x59 = x0 * x38 * x5;
1070 const fp_t x60 = 4 * eta * x28;
1071 const fp_t x61 = 4 * x0 * x57;
1072 const fp_t x62 = x1 * x53;
1073 sfdv(0, 0) = -x10 * x3 - x4;
1074 sfdv(1, 0) = -x10 * x21 - x4;
1075 sfdv(2, 0) = -x10 * x24 - x4;
1076 sfdv(0, 1) = x11 + x14 * x3;
1077 sfdv(1, 1) = -x11 - x14 * x15;
1078 sfdv(2, 1) = -x11 - x14 * x28;
1079 sfdv(0, 2) = x16 + x19 * x20;
1080 sfdv(1, 2) = x15 * x19 + x16;
1081 sfdv(2, 2) = -x16 - x19 * x57;
1082 sfdv(0, 3) = -x20 * x23 - x22;
1083 sfdv(1, 3) = x21 * x23 + x22;
1084 sfdv(2, 3) = -x22 - x23 * x58;
1085 sfdv(0, 4) = -x25 - x26 * x27;
1086 sfdv(1, 4) = -x25 - x26 * x35;
1087 sfdv(2, 4) = x24 * x26 + x25;
1088 sfdv(0, 5) = x27 * x30 + x29;
1089 sfdv(1, 5) = -x29 - x30 * x31;
1090 sfdv(2, 5) = x28 * x30 + x29;
1091 sfdv(0, 6) = x32 + x33 * x34;
1092 sfdv(1, 6) = x31 * x33 + x32;
1093 sfdv(2, 6) = x32 + x33 * x57;
1094 sfdv(0, 7) = -x34 * x37 - x36;
1095 sfdv(1, 7) = x35 * x37 + x36;
1096 sfdv(2, 7) = x36 + x37 * x58;
1097 sfdv(0, 8) = x0 * x38 * x39 - x38 * x39 * xi;
1098 sfdv(1, 8) = -x50;
1099 sfdv(2, 8) = -x59;
1100 sfdv(0, 9) = x41;
1101 sfdv(1, 9) = 2 * x1 * x39 * xi - x42;
1102 sfdv(2, 9) = -x60;
1103 sfdv(0, 10) = 2 * eta * x0 * x39 - x42;
1104 sfdv(1, 10) = x50;
1105 sfdv(2, 10) = -x61;
1106 sfdv(0, 11) = -x41;
1107 sfdv(1, 11) = -eta * x39 * x51 + x1 * x39 * x51;
1108 sfdv(2, 11) = -x62;
1109 sfdv(0, 12) = 2 * phi * x0 * x38 - x44;
1110 sfdv(1, 12) = -x52;
1111 sfdv(2, 12) = x59;
1112 sfdv(0, 13) = x45;
1113 sfdv(1, 13) = 4 * phi * x1 * xi - x46;
1114 sfdv(2, 13) = x60;
1115 sfdv(0, 14) = 4 * eta * phi * x0 - x46;
1116 sfdv(1, 14) = x52;
1117 sfdv(2, 14) = x61;
1118 sfdv(0, 15) = -x45;
1119 sfdv(1, 15) = 2 * phi * x1 * x51 - x54;
1120 sfdv(2, 15) = x62;
1121 sfdv(0, 16) = -x47;
1122 sfdv(1, 16) = -x55;
1123 sfdv(2, 16) = -phi * x38 * x51 + x2 * x38 * x51;
1124 sfdv(0, 17) = x47;
1125 sfdv(1, 17) = -x56;
1126 sfdv(2, 17) = 2 * x2 * x38 * xi - x44;
1127 sfdv(0, 18) = x49;
1128 sfdv(1, 18) = x56;
1129 sfdv(2, 18) = 4 * eta * x2 * xi - x46;
1130 sfdv(0, 19) = -x49;
1131 sfdv(1, 19) = x55;
1132 sfdv(2, 19) = 2 * eta * x2 * x51 - x54;
1133 return;
1134 };
1135 KOKKOS_INLINE_FUNCTION static void
1137 const fp_t phi,
1138 Kokkos::View<fp_t **, ExecSpace> sfddv) {
1139 switch (i) {
1140 case 0: {
1141 const fp_t x0 = 1 - phi;
1142 const fp_t x1 = 1 - eta;
1143 const fp_t x2 = x0 * x1;
1144 const fp_t x3 = 2 * x2;
1145 const fp_t x4 = 1 - xi;
1146 const fp_t x5 = 2 * x4;
1147 const fp_t x6 = x0 * x5;
1148 const fp_t x7 = -2 * eta - 2 * phi - 2 * xi + 1;
1149 const fp_t x8 = x0 * x7 + x3 + x6;
1150 const fp_t x9 = x1 * x5;
1151 const fp_t x10 = x1 * x7 + x3 + x9;
1152 const fp_t x11 = 4 * x4;
1153 const fp_t x12 = x4 * x7 + x6 + x9;
1154 sfddv(0, 0) = 4 * x2;
1155 sfddv(0, 1) = x8;
1156 sfddv(0, 2) = x10;
1157 sfddv(1, 0) = x8;
1158 sfddv(1, 1) = x0 * x11;
1159 sfddv(1, 2) = x12;
1160 sfddv(2, 0) = x10;
1161 sfddv(2, 1) = x12;
1162 sfddv(2, 2) = x1 * x11;
1163 break;
1164 }
1165 case 1: {
1166 const fp_t x0 = 1 - phi;
1167 const fp_t x1 = 1 - eta;
1168 const fp_t x2 = x0 * x1;
1169 const fp_t x3 = 2 * xi;
1170 const fp_t x4 = x0 * x3;
1171 const fp_t x5 = 2 * x2;
1172 const fp_t x6 = -2 * eta - 2 * phi + 2 * xi - 1;
1173 const fp_t x7 = -x0 * x6 - x4 - x5;
1174 const fp_t x8 = x1 * x3;
1175 const fp_t x9 = -x1 * x6 - x5 - x8;
1176 const fp_t x10 = 4 * xi;
1177 const fp_t x11 = x4 + x6 * xi + x8;
1178 sfddv(0, 0) = 4 * x2;
1179 sfddv(0, 1) = x7;
1180 sfddv(0, 2) = x9;
1181 sfddv(1, 0) = x7;
1182 sfddv(1, 1) = x0 * x10;
1183 sfddv(1, 2) = x11;
1184 sfddv(2, 0) = x9;
1185 sfddv(2, 1) = x11;
1186 sfddv(2, 2) = x1 * x10;
1187 break;
1188 }
1189 case 2: {
1190 const fp_t x0 = 1 - phi;
1191 const fp_t x1 = 4 * x0;
1192 const fp_t x2 = 2 * eta;
1193 const fp_t x3 = x0 * x2;
1194 const fp_t x4 = 2 * xi;
1195 const fp_t x5 = x0 * x4;
1196 const fp_t x6 = -2 * phi + x2 + x4 - 3;
1197 const fp_t x7 = x0 * x6 + x3 + x5;
1198 const fp_t x8 = x2 * xi;
1199 const fp_t x9 = -eta * x6 - x3 - x8;
1200 const fp_t x10 = -x5 - x6 * xi - x8;
1201 sfddv(0, 0) = eta * x1;
1202 sfddv(0, 1) = x7;
1203 sfddv(0, 2) = x9;
1204 sfddv(1, 0) = x7;
1205 sfddv(1, 1) = x1 * xi;
1206 sfddv(1, 2) = x10;
1207 sfddv(2, 0) = x9;
1208 sfddv(2, 1) = x10;
1209 sfddv(2, 2) = 4 * eta * xi;
1210 break;
1211 }
1212 case 3: {
1213 const fp_t x0 = 1 - phi;
1214 const fp_t x1 = 4 * x0;
1215 const fp_t x2 = 2 * eta;
1216 const fp_t x3 = x0 * x2;
1217 const fp_t x4 = 1 - xi;
1218 const fp_t x5 = 2 * x0 * x4;
1219 const fp_t x6 = 2 * eta - 2 * phi - 2 * xi - 1;
1220 const fp_t x7 = -x0 * x6 - x3 - x5;
1221 const fp_t x8 = x2 * x4;
1222 const fp_t x9 = eta * x6 + x3 + x8;
1223 const fp_t x10 = -x4 * x6 - x5 - x8;
1224 sfddv(0, 0) = eta * x1;
1225 sfddv(0, 1) = x7;
1226 sfddv(0, 2) = x9;
1227 sfddv(1, 0) = x7;
1228 sfddv(1, 1) = x1 * x4;
1229 sfddv(1, 2) = x10;
1230 sfddv(2, 0) = x9;
1231 sfddv(2, 1) = x10;
1232 sfddv(2, 2) = 4 * eta * x4;
1233 break;
1234 }
1235 case 4: {
1236 const fp_t x0 = 1 - eta;
1237 const fp_t x1 = 4 * phi;
1238 const fp_t x2 = 2 * phi;
1239 const fp_t x3 = x0 * x2;
1240 const fp_t x4 = 1 - xi;
1241 const fp_t x5 = x2 * x4;
1242 const fp_t x6 = -2 * eta + 2 * phi - 2 * xi - 1;
1243 const fp_t x7 = phi * x6 + x3 + x5;
1244 const fp_t x8 = x0 * x4;
1245 const fp_t x9 = 2 * x8;
1246 const fp_t x10 = -x0 * x6 - x3 - x9;
1247 const fp_t x11 = -x4 * x6 - x5 - x9;
1248 sfddv(0, 0) = x0 * x1;
1249 sfddv(0, 1) = x7;
1250 sfddv(0, 2) = x10;
1251 sfddv(1, 0) = x7;
1252 sfddv(1, 1) = x1 * x4;
1253 sfddv(1, 2) = x11;
1254 sfddv(2, 0) = x10;
1255 sfddv(2, 1) = x11;
1256 sfddv(2, 2) = 4 * x8;
1257 break;
1258 }
1259 case 5: {
1260 const fp_t x0 = 1 - eta;
1261 const fp_t x1 = 4 * phi;
1262 const fp_t x2 = 2 * phi;
1263 const fp_t x3 = x2 * xi;
1264 const fp_t x4 = x0 * x2;
1265 const fp_t x5 = -2 * eta + 2 * phi + 2 * xi - 3;
1266 const fp_t x6 = -phi * x5 - x3 - x4;
1267 const fp_t x7 = 2 * x0 * xi;
1268 const fp_t x8 = x0 * x5 + x4 + x7;
1269 const fp_t x9 = -x3 - x5 * xi - x7;
1270 sfddv(0, 0) = x0 * x1;
1271 sfddv(0, 1) = x6;
1272 sfddv(0, 2) = x8;
1273 sfddv(1, 0) = x6;
1274 sfddv(1, 1) = x1 * xi;
1275 sfddv(1, 2) = x9;
1276 sfddv(2, 0) = x8;
1277 sfddv(2, 1) = x9;
1278 sfddv(2, 2) = 4 * x0 * xi;
1279 break;
1280 }
1281 case 6: {
1282 const fp_t x0 = 4 * phi;
1283 const fp_t x1 = 2 * eta;
1284 const fp_t x2 = phi * x1;
1285 const fp_t x3 = 2 * phi;
1286 const fp_t x4 = x3 * xi;
1287 const fp_t x5 = x1 + x3 + 2 * xi - 5;
1288 const fp_t x6 = phi * x5 + x2 + x4;
1289 const fp_t x7 = x1 * xi;
1290 const fp_t x8 = eta * x5 + x2 + x7;
1291 const fp_t x9 = x4 + x5 * xi + x7;
1292 sfddv(0, 0) = eta * x0;
1293 sfddv(0, 1) = x6;
1294 sfddv(0, 2) = x8;
1295 sfddv(1, 0) = x6;
1296 sfddv(1, 1) = x0 * xi;
1297 sfddv(1, 2) = x9;
1298 sfddv(2, 0) = x8;
1299 sfddv(2, 1) = x9;
1300 sfddv(2, 2) = 4 * eta * xi;
1301 break;
1302 }
1303 case 7: {
1304 const fp_t x0 = 4 * phi;
1305 const fp_t x1 = 2 * eta;
1306 const fp_t x2 = phi * x1;
1307 const fp_t x3 = 1 - xi;
1308 const fp_t x4 = 2 * phi;
1309 const fp_t x5 = x3 * x4;
1310 const fp_t x6 = x1 + x4 - 2 * xi - 3;
1311 const fp_t x7 = -phi * x6 - x2 - x5;
1312 const fp_t x8 = x1 * x3;
1313 const fp_t x9 = -eta * x6 - x2 - x8;
1314 const fp_t x10 = x3 * x6 + x5 + x8;
1315 sfddv(0, 0) = eta * x0;
1316 sfddv(0, 1) = x7;
1317 sfddv(0, 2) = x9;
1318 sfddv(1, 0) = x7;
1319 sfddv(1, 1) = x0 * x3;
1320 sfddv(1, 2) = x10;
1321 sfddv(2, 0) = x9;
1322 sfddv(2, 1) = x10;
1323 sfddv(2, 2) = 4 * eta * x3;
1324 break;
1325 }
1326 case 8: {
1327 const fp_t x0 = 2 - 2 * eta;
1328 const fp_t x1 = 4 - 4 * phi;
1329 const fp_t x2 = 1 - xi;
1330 const fp_t x3 = -x1 * x2 + x1 * xi;
1331 const fp_t x4 = 2 * x0;
1332 const fp_t x5 = -x2 * x4 + x4 * xi;
1333 const fp_t x6 = 4 * x2 * xi;
1334 sfddv(0, 0) = -x0 * x1;
1335 sfddv(0, 1) = x3;
1336 sfddv(0, 2) = x5;
1337 sfddv(1, 0) = x3;
1338 sfddv(1, 2) = x6;
1339 sfddv(2, 0) = x5;
1340 sfddv(2, 1) = x6;
1341 break;
1342 }
1343 case 9: {
1344 const fp_t x0 = 2.0 - 2.0 * phi;
1345 const fp_t x1 = 1.0 - eta;
1346 const fp_t x2 = -2.0 * eta * x0 + 2.0 * x0 * x1;
1347 const fp_t x3 = 4.0 * x1;
1348 const fp_t x4 = -eta * x3;
1349 const fp_t x5 = 4.0 * xi;
1350 const fp_t x6 = eta * x5 - x3 * xi;
1351 sfddv(0, 1) = x2;
1352 sfddv(0, 2) = x4;
1353 sfddv(1, 0) = x2;
1354 sfddv(1, 1) = -x0 * x5;
1355 sfddv(1, 2) = x6;
1356 sfddv(2, 0) = x4;
1357 sfddv(2, 1) = x6;
1358 break;
1359 }
1360 case 10: {
1361 const fp_t x0 = 2.0 - 2.0 * phi;
1362 const fp_t x1 = 4.0 * eta;
1363 const fp_t x2 = 1.0 - xi;
1364 const fp_t x3 = 2.0 * x0 * x2 - 2.0 * x0 * xi;
1365 const fp_t x4 = -x1 * x2 + x1 * xi;
1366 const fp_t x5 = -4.0 * x2 * xi;
1367 sfddv(0, 0) = -x0 * x1;
1368 sfddv(0, 1) = x3;
1369 sfddv(0, 2) = x4;
1370 sfddv(1, 0) = x3;
1371 sfddv(1, 2) = x5;
1372 sfddv(2, 0) = x4;
1373 sfddv(2, 1) = x5;
1374 break;
1375 }
1376 case 11: {
1377 const fp_t x0 = 4.0 - 4.0 * phi;
1378 const fp_t x1 = 1.0 - eta;
1379 const fp_t x2 = eta * x0 - x0 * x1;
1380 const fp_t x3 = 4.0 * eta * x1;
1381 const fp_t x4 = 2.0 - 2.0 * xi;
1382 const fp_t x5 = 2.0 * x4;
1383 const fp_t x6 = eta * x5 - x1 * x5;
1384 sfddv(0, 1) = x2;
1385 sfddv(0, 2) = x3;
1386 sfddv(1, 0) = x2;
1387 sfddv(1, 1) = -x0 * x4;
1388 sfddv(1, 2) = x6;
1389 sfddv(2, 0) = x3;
1390 sfddv(2, 1) = x6;
1391 break;
1392 }
1393 case 12: {
1394 const fp_t x0 = 2.0 - 2.0 * eta;
1395 const fp_t x1 = 4.0 * phi;
1396 const fp_t x2 = 1.0 - xi;
1397 const fp_t x3 = -x1 * x2 + x1 * xi;
1398 const fp_t x4 = 2.0 * x0 * x2 - 2.0 * x0 * xi;
1399 const fp_t x5 = -4.0 * x2 * xi;
1400 sfddv(0, 0) = -x0 * x1;
1401 sfddv(0, 1) = x3;
1402 sfddv(0, 2) = x4;
1403 sfddv(1, 0) = x3;
1404 sfddv(1, 2) = x5;
1405 sfddv(2, 0) = x4;
1406 sfddv(2, 1) = x5;
1407 break;
1408 }
1409 case 13: {
1410 const fp_t x0 = 1.0 - eta;
1411 const fp_t x1 = -4.0 * eta * phi + 4.0 * phi * x0;
1412 const fp_t x2 = 4.0 * eta;
1413 const fp_t x3 = x0 * x2;
1414 const fp_t x4 = 4.0 * x0 * xi - x2 * xi;
1415 sfddv(0, 1) = x1;
1416 sfddv(0, 2) = x3;
1417 sfddv(1, 0) = x1;
1418 sfddv(1, 1) = -8 * phi * xi;
1419 sfddv(1, 2) = x4;
1420 sfddv(2, 0) = x3;
1421 sfddv(2, 1) = x4;
1422 break;
1423 }
1424 case 14: {
1425 const fp_t x0 = 1.0 - xi;
1426 const fp_t x1 = 4.0 * phi * x0 - 4.0 * phi * xi;
1427 const fp_t x2 = 4.0 * eta * x0 - 4.0 * eta * xi;
1428 const fp_t x3 = 4.0 * x0 * xi;
1429 sfddv(0, 0) = -8 * eta * phi;
1430 sfddv(0, 1) = x1;
1431 sfddv(0, 2) = x2;
1432 sfddv(1, 0) = x1;
1433 sfddv(1, 2) = x3;
1434 sfddv(2, 0) = x2;
1435 sfddv(2, 1) = x3;
1436 break;
1437 }
1438 case 15: {
1439 const fp_t x0 = 4.0 * phi;
1440 const fp_t x1 = 1.0 - eta;
1441 const fp_t x2 = eta * x0 - x0 * x1;
1442 const fp_t x3 = -4.0 * eta * x1;
1443 const fp_t x4 = 2.0 - 2.0 * xi;
1444 const fp_t x5 = -2.0 * eta * x4 + 2.0 * x1 * x4;
1445 sfddv(0, 1) = x2;
1446 sfddv(0, 2) = x3;
1447 sfddv(1, 0) = x2;
1448 sfddv(1, 1) = -x0 * x4;
1449 sfddv(1, 2) = x5;
1450 sfddv(2, 0) = x3;
1451 sfddv(2, 1) = x5;
1452 break;
1453 }
1454 case 16: {
1455 const fp_t x0 = 1.0 - phi;
1456 const fp_t x1 = 4.0 * phi * x0;
1457 const fp_t x2 = 4.0 - 4.0 * eta;
1458 const fp_t x3 = phi * x2 - x0 * x2;
1459 const fp_t x4 = 2.0 - 2.0 * xi;
1460 const fp_t x5 = 2.0 * x4;
1461 const fp_t x6 = phi * x5 - x0 * x5;
1462 sfddv(0, 1) = x1;
1463 sfddv(0, 2) = x3;
1464 sfddv(1, 0) = x1;
1465 sfddv(1, 2) = x6;
1466 sfddv(2, 0) = x3;
1467 sfddv(2, 1) = x6;
1468 sfddv(2, 2) = -x2 * x4;
1469 break;
1470 }
1471 case 17: {
1472 const fp_t x0 = 1.0 - phi;
1473 const fp_t x1 = 4.0 * x0;
1474 const fp_t x2 = -phi * x1;
1475 const fp_t x3 = 2.0 - 2.0 * eta;
1476 const fp_t x4 = -2.0 * phi * x3 + 2.0 * x0 * x3;
1477 const fp_t x5 = 4.0 * xi;
1478 const fp_t x6 = phi * x5 - x1 * xi;
1479 sfddv(0, 1) = x2;
1480 sfddv(0, 2) = x4;
1481 sfddv(1, 0) = x2;
1482 sfddv(1, 2) = x6;
1483 sfddv(2, 0) = x4;
1484 sfddv(2, 1) = x6;
1485 sfddv(2, 2) = -x3 * x5;
1486 break;
1487 }
1488 case 18: {
1489 const fp_t x0 = 1.0 - phi;
1490 const fp_t x1 = 4.0 * phi;
1491 const fp_t x2 = x0 * x1;
1492 const fp_t x3 = 4.0 * eta * x0 - eta * x1;
1493 const fp_t x4 = 4.0 * x0 * xi - x1 * xi;
1494 sfddv(0, 1) = x2;
1495 sfddv(0, 2) = x3;
1496 sfddv(1, 0) = x2;
1497 sfddv(1, 2) = x4;
1498 sfddv(2, 0) = x3;
1499 sfddv(2, 1) = x4;
1500 sfddv(2, 2) = -8.0 * eta * xi;
1501 break;
1502 }
1503 case 19: {
1504 const fp_t x0 = 1 - phi;
1505 const fp_t x1 = 4.0 * x0;
1506 const fp_t x2 = -phi * x1;
1507 const fp_t x3 = 4.0 * eta;
1508 const fp_t x4 = -eta * x1 + phi * x3;
1509 const fp_t x5 = 2.0 - 2.0 * xi;
1510 const fp_t x6 = -2.0 * phi * x5 + 2.0 * x0 * x5;
1511 sfddv(0, 1) = x2;
1512 sfddv(0, 2) = x4;
1513 sfddv(1, 0) = x2;
1514 sfddv(1, 2) = x6;
1515 sfddv(2, 0) = x4;
1516 sfddv(2, 1) = x6;
1517 sfddv(2, 2) = -x3 * x5;
1518 break;
1519 }
1520 }
1521 return;
1522 };
1523 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
1524 const fp_t phi) {
1526 };
1527};
1528template <typename ExecSpace>
1530public:
1531 static constexpr unsigned int numberOfShapeFunctions = 6U;
1532 static constexpr unsigned int dimensionality = 3U;
1533 KOKKOS_INLINE_FUNCTION static void
1535 Kokkos::View<fp_t *, ExecSpace> sfv) {
1536 const fp_t x0 = 1.0 - phi;
1537 const fp_t x1 = -eta - xi + 1.0;
1538 sfv(0) = x0 * x1;
1539 sfv(1) = x0 * xi;
1540 sfv(2) = eta * x0;
1541 sfv(3) = phi * x1;
1542 sfv(4) = phi * xi;
1543 sfv(5) = eta * phi;
1544 return;
1545 };
1546 KOKKOS_INLINE_FUNCTION static void
1548 Kokkos::View<fp_t **, ExecSpace> sfdv) {
1549 const fp_t x0 = phi - 1.0;
1550 const fp_t x1 = -x0;
1551 const fp_t x2 = -phi;
1552 const fp_t x3 = eta + xi - 1.0;
1553 sfdv(0, 0) = x0;
1554 sfdv(1, 0) = x0;
1555 sfdv(2, 0) = x3;
1556 sfdv(0, 1) = x1;
1557 sfdv(1, 1) = 0.0;
1558 sfdv(2, 1) = -xi;
1559 sfdv(0, 2) = 0.0;
1560 sfdv(1, 2) = x1;
1561 sfdv(2, 2) = -eta;
1562 sfdv(0, 3) = x2;
1563 sfdv(1, 3) = x2;
1564 sfdv(2, 3) = -x3;
1565 sfdv(0, 4) = phi;
1566 sfdv(1, 4) = 0.0;
1567 sfdv(2, 4) = xi;
1568 sfdv(0, 5) = 0.0;
1569 sfdv(1, 5) = phi;
1570 sfdv(2, 5) = eta;
1571 return;
1572 };
1573 KOKKOS_INLINE_FUNCTION static void
1575 const fp_t phi,
1576 Kokkos::View<fp_t **, ExecSpace> sfddv) {
1577 switch (i) {
1578 case 0: {
1579 sfddv(0, 2) = 1;
1580 sfddv(1, 2) = 1;
1581 sfddv(2, 0) = 1;
1582 sfddv(2, 1) = 1;
1583 break;
1584 }
1585 case 1: {
1586 sfddv(0, 2) = -1;
1587 sfddv(2, 0) = -1;
1588 break;
1589 }
1590 case 2: {
1591 sfddv(1, 2) = -1;
1592 sfddv(2, 1) = -1;
1593 break;
1594 }
1595 case 3: {
1596 sfddv(0, 2) = -1;
1597 sfddv(1, 2) = -1;
1598 sfddv(2, 0) = -1;
1599 sfddv(2, 1) = -1;
1600 break;
1601 }
1602 case 4: {
1603 sfddv(0, 2) = 1;
1604 sfddv(2, 0) = 1;
1605 break;
1606 }
1607 case 5: {
1608 sfddv(1, 2) = 1;
1609 sfddv(2, 1) = 1;
1610 break;
1611 }
1612 }
1613 return;
1614 };
1615 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
1616 const fp_t phi) {
1618 };
1619};
1620template <typename ExecSpace>
1622public:
1623 static constexpr unsigned int numberOfShapeFunctions = 15U;
1624 static constexpr unsigned int dimensionality = 3U;
1625 KOKKOS_INLINE_FUNCTION static void
1627 Kokkos::View<fp_t *, ExecSpace> sfv) {
1628 const fp_t x0 = -eta - xi + 1;
1629 const fp_t x1 = 2 * phi;
1630 const fp_t x2 = 1 - Kokkos::pow(x1 - 1, 2);
1631 const fp_t x3 = x0 * x2;
1632 const fp_t x4 = 0.5 * x3;
1633 const fp_t x5 = 2 - x1;
1634 const fp_t x6 = 2 * eta;
1635 const fp_t x7 = 2 * xi;
1636 const fp_t x8 = x7 - 1;
1637 const fp_t x9 = -x6 - x8;
1638 const fp_t x10 = x2 * xi;
1639 const fp_t x11 = 0.5 * x10;
1640 const fp_t x12 = x6 - 1;
1641 const fp_t x13 = eta * x2;
1642 const fp_t x14 = 0.5 * x13;
1643 const fp_t x15 = 1.0 * phi;
1644 const fp_t x16 = -x6 - x7 + 2;
1645 const fp_t x17 = x5 * xi;
1646 const fp_t x18 = 4 * eta * phi;
1647 sfv(0) = 0.5 * x0 * x5 * x9 - x4;
1648 sfv(1) = -x11 + 0.5 * x5 * x8 * xi;
1649 sfv(2) = 0.5 * eta * x12 * x5 - x14;
1650 sfv(3) = x0 * x15 * x9 - x4;
1651 sfv(4) = -x11 + x15 * x8 * xi;
1652 sfv(5) = eta * x12 * x15 - x14;
1653 sfv(6) = x16 * x17;
1654 sfv(7) = x17 * x6;
1655 sfv(8) = x0 * x5 * x6;
1656 sfv(9) = x1 * x16 * xi;
1657 sfv(10) = x18 * xi;
1658 sfv(11) = x0 * x18;
1659 sfv(12) = x3;
1660 sfv(13) = x10;
1661 sfv(14) = x13;
1662 return;
1663 };
1664 KOKKOS_INLINE_FUNCTION static void
1666 Kokkos::View<fp_t **, ExecSpace> sfdv) {
1667 const fp_t x0 = 2 * eta;
1668 const fp_t x1 = 2 * xi;
1669 const fp_t x2 = x1 - 1;
1670 const fp_t x3 = -x0 - x2;
1671 const fp_t x4 = 2 * phi;
1672 const fp_t x5 = 2 - x4;
1673 const fp_t x6 = 0.5 * x5;
1674 const fp_t x7 = -eta - xi + 1;
1675 const fp_t x8 = 1.0 * x5;
1676 const fp_t x9 = Kokkos::pow(x4 - 1, 2);
1677 const fp_t x10 = 0.5 * x9 - 0.5;
1678 const fp_t x11 = -x10 - x3 * x6 - x7 * x8;
1679 const fp_t x12 = 1.0 * phi;
1680 const fp_t x13 = 2.0 * phi;
1681 const fp_t x14 = -x10 - x12 * x3 - x13 * x7;
1682 const fp_t x15 = x1 * x5;
1683 const fp_t x16 = -x0 - x1 + 2;
1684 const fp_t x17 = x0 * x5;
1685 const fp_t x18 = 4 * phi;
1686 const fp_t x19 = x18 * xi;
1687 const fp_t x20 = eta * x18;
1688 const fp_t x21 = x9 - 1;
1689 const fp_t x22 = -x21;
1690 const fp_t x23 = x0 - 1;
1691 const fp_t x24 = 4 - 8 * phi;
1692 const fp_t x25 = x24 * x7;
1693 const fp_t x26 = 0.5 * x25;
1694 const fp_t x27 = 1.0 * x3 * x7;
1695 const fp_t x28 = x24 * xi;
1696 const fp_t x29 = 0.5 * x28;
1697 const fp_t x30 = 1.0 * x2 * xi;
1698 const fp_t x31 = eta * x24;
1699 const fp_t x32 = 0.5 * x31;
1700 const fp_t x33 = 1.0 * eta * x23;
1701 const fp_t x34 = x1 * x16;
1702 const fp_t x35 = 4 * eta;
1703 const fp_t x36 = x35 * xi;
1704 const fp_t x37 = x35 * x7;
1705 sfdv(0, 0) = x11;
1706 sfdv(1, 0) = x11;
1707 sfdv(2, 0) = -x26 - x27;
1708 sfdv(0, 1) = x10 + x2 * x6 + x8 * xi;
1709 sfdv(1, 1) = 0;
1710 sfdv(2, 1) = -x29 - x30;
1711 sfdv(0, 2) = 0;
1712 sfdv(1, 2) = eta * x8 + x10 + x23 * x6;
1713 sfdv(2, 2) = -x32 - x33;
1714 sfdv(0, 3) = x14;
1715 sfdv(1, 3) = x14;
1716 sfdv(2, 3) = -x26 + x27;
1717 sfdv(0, 4) = x10 + x12 * x2 + x13 * xi;
1718 sfdv(1, 4) = 0;
1719 sfdv(2, 4) = -x29 + x30;
1720 sfdv(0, 5) = 0;
1721 sfdv(1, 5) = eta * x13 + x10 + x12 * x23;
1722 sfdv(2, 5) = -x32 + x33;
1723 sfdv(0, 6) = -x15 + x16 * x5;
1724 sfdv(1, 6) = -x15;
1725 sfdv(2, 6) = -x34;
1726 sfdv(0, 7) = x17;
1727 sfdv(1, 7) = x15;
1728 sfdv(2, 7) = -x36;
1729 sfdv(0, 8) = -x17;
1730 sfdv(1, 8) = -x17 + 2 * x5 * x7;
1731 sfdv(2, 8) = -x37;
1732 sfdv(0, 9) = 2 * phi * x16 - x19;
1733 sfdv(1, 9) = -x19;
1734 sfdv(2, 9) = x34;
1735 sfdv(0, 10) = x20;
1736 sfdv(1, 10) = x19;
1737 sfdv(2, 10) = x36;
1738 sfdv(0, 11) = -x20;
1739 sfdv(1, 11) = 4 * phi * x7 - x20;
1740 sfdv(2, 11) = x37;
1741 sfdv(0, 12) = x21;
1742 sfdv(1, 12) = x21;
1743 sfdv(2, 12) = x25;
1744 sfdv(0, 13) = x22;
1745 sfdv(1, 13) = 0;
1746 sfdv(2, 13) = x28;
1747 sfdv(0, 14) = 0;
1748 sfdv(1, 14) = x22;
1749 sfdv(2, 14) = x31;
1750 return;
1751 };
1752 KOKKOS_INLINE_FUNCTION static void
1754 const fp_t phi,
1755 Kokkos::View<fp_t **, ExecSpace> sfddv) {
1756 switch (i) {
1757 case 0: {
1758 const fp_t x0 = 4.0 * phi;
1759 const fp_t x1 = 4.0 - x0;
1760 const fp_t x2 = 4.0 * eta + 4.0 * xi;
1761 const fp_t x3 = -x0 - x2 + 5.0;
1762 sfddv(0, 0) = x1;
1763 sfddv(0, 1) = x1;
1764 sfddv(0, 2) = x3;
1765 sfddv(1, 0) = x1;
1766 sfddv(1, 1) = x1;
1767 sfddv(1, 2) = x3;
1768 sfddv(2, 0) = x3;
1769 sfddv(2, 1) = x3;
1770 sfddv(2, 2) = 4.0 - x2;
1771 break;
1772 }
1773 case 1: {
1774 const fp_t x0 = 4.0 * phi;
1775 const fp_t x1 = 4.0 * xi;
1776 const fp_t x2 = x0 - x1 - 1.0;
1777 sfddv(0, 0) = 4.0 - x0;
1778 sfddv(0, 2) = x2;
1779 sfddv(2, 0) = x2;
1780 sfddv(2, 2) = x1;
1781 break;
1782 }
1783 case 2: {
1784 const fp_t x0 = 4.0 * phi;
1785 const fp_t x1 = 4.0 * eta;
1786 const fp_t x2 = x0 - x1 - 1.0;
1787 sfddv(1, 1) = 4.0 - x0;
1788 sfddv(1, 2) = x2;
1789 sfddv(2, 1) = x2;
1790 sfddv(2, 2) = x1;
1791 break;
1792 }
1793 case 3: {
1794 const fp_t x0 = 4.0 * phi;
1795 const fp_t x1 = 4.0 * eta + 4.0 * xi;
1796 const fp_t x2 = -x0 + x1 - 1.0;
1797 sfddv(0, 0) = x0;
1798 sfddv(0, 1) = x0;
1799 sfddv(0, 2) = x2;
1800 sfddv(1, 0) = x0;
1801 sfddv(1, 1) = x0;
1802 sfddv(1, 2) = x2;
1803 sfddv(2, 0) = x2;
1804 sfddv(2, 1) = x2;
1805 sfddv(2, 2) = 4.0 - x1;
1806 break;
1807 }
1808 case 4: {
1809 const fp_t x0 = 4.0 * phi;
1810 const fp_t x1 = 4.0 * xi;
1811 const fp_t x2 = x0 + x1 - 3.0;
1812 sfddv(0, 0) = x0;
1813 sfddv(0, 2) = x2;
1814 sfddv(2, 0) = x2;
1815 sfddv(2, 2) = x1;
1816 break;
1817 }
1818 case 5: {
1819 const fp_t x0 = 4.0 * phi;
1820 const fp_t x1 = 4.0 * eta;
1821 const fp_t x2 = x0 + x1 - 3.0;
1822 sfddv(1, 1) = x0;
1823 sfddv(1, 2) = x2;
1824 sfddv(2, 1) = x2;
1825 sfddv(2, 2) = x1;
1826 break;
1827 }
1828 case 6: {
1829 const fp_t x0 = 4 * phi - 4;
1830 const fp_t x1 = 4 * eta + 8 * xi - 4;
1831 const fp_t x2 = 4 * xi;
1832 sfddv(0, 0) = 8 * phi - 8;
1833 sfddv(0, 1) = x0;
1834 sfddv(0, 2) = x1;
1835 sfddv(1, 0) = x0;
1836 sfddv(1, 2) = x2;
1837 sfddv(2, 0) = x1;
1838 sfddv(2, 1) = x2;
1839 break;
1840 }
1841 case 7: {
1842 const fp_t x0 = 4 - 4 * phi;
1843 const fp_t x1 = -4 * eta;
1844 const fp_t x2 = -4 * xi;
1845 sfddv(0, 1) = x0;
1846 sfddv(0, 2) = x1;
1847 sfddv(1, 0) = x0;
1848 sfddv(1, 2) = x2;
1849 sfddv(2, 0) = x1;
1850 sfddv(2, 1) = x2;
1851 break;
1852 }
1853 case 8: {
1854 const fp_t x0 = 4 * phi - 4;
1855 const fp_t x1 = 4 * eta;
1856 const fp_t x2 = 8 * eta + 4 * xi - 4;
1857 sfddv(0, 1) = x0;
1858 sfddv(0, 2) = x1;
1859 sfddv(1, 0) = x0;
1860 sfddv(1, 1) = 8 * phi - 8;
1861 sfddv(1, 2) = x2;
1862 sfddv(2, 0) = x1;
1863 sfddv(2, 1) = x2;
1864 break;
1865 }
1866 case 9: {
1867 const fp_t x0 = -4 * phi;
1868 const fp_t x1 = -4 * eta - 8 * xi + 4;
1869 const fp_t x2 = -4 * xi;
1870 sfddv(0, 0) = -8 * phi;
1871 sfddv(0, 1) = x0;
1872 sfddv(0, 2) = x1;
1873 sfddv(1, 0) = x0;
1874 sfddv(1, 2) = x2;
1875 sfddv(2, 0) = x1;
1876 sfddv(2, 1) = x2;
1877 break;
1878 }
1879 case 10: {
1880 const fp_t x0 = 4 * phi;
1881 const fp_t x1 = 4 * eta;
1882 const fp_t x2 = 4 * xi;
1883 sfddv(0, 1) = x0;
1884 sfddv(0, 2) = x1;
1885 sfddv(1, 0) = x0;
1886 sfddv(1, 2) = x2;
1887 sfddv(2, 0) = x1;
1888 sfddv(2, 1) = x2;
1889 break;
1890 }
1891 case 11: {
1892 const fp_t x0 = -4 * phi;
1893 const fp_t x1 = -4 * eta;
1894 const fp_t x2 = -8 * eta - 4 * xi + 4;
1895 sfddv(0, 1) = x0;
1896 sfddv(0, 2) = x1;
1897 sfddv(1, 0) = x0;
1898 sfddv(1, 1) = -8 * phi;
1899 sfddv(1, 2) = x2;
1900 sfddv(2, 0) = x1;
1901 sfddv(2, 1) = x2;
1902 break;
1903 }
1904 case 12: {
1905 const fp_t x0 = 8 * phi - 4;
1906 sfddv(0, 2) = x0;
1907 sfddv(1, 2) = x0;
1908 sfddv(2, 0) = x0;
1909 sfddv(2, 1) = x0;
1910 sfddv(2, 2) = 8 * eta + 8 * xi - 8;
1911 break;
1912 }
1913 case 13: {
1914 const fp_t x0 = 4 - 8 * phi;
1915 sfddv(0, 2) = x0;
1916 sfddv(2, 0) = x0;
1917 sfddv(2, 2) = -8 * xi;
1918 break;
1919 }
1920 case 14: {
1921 const fp_t x0 = 4 - 8 * phi;
1922 sfddv(1, 2) = x0;
1923 sfddv(2, 1) = x0;
1924 sfddv(2, 2) = -8 * eta;
1925 break;
1926 }
1927 }
1928 return;
1929 };
1930 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
1931 const fp_t phi) {
1933 };
1934};
1935template <typename ExecSpace>
1937public:
1938 static constexpr unsigned int numberOfShapeFunctions = 5U;
1939 static constexpr unsigned int dimensionality = 3U;
1940 KOKKOS_INLINE_FUNCTION static void
1942 Kokkos::View<fp_t *, ExecSpace> sfv) {
1943 const fp_t x = xi;
1944 const fp_t y = eta;
1945 const fp_t z = phi;
1946 if (Kokkos::abs(1 - z) < 1e-6) {
1947 sfv(0) = 0.0;
1948 sfv(1) = 0.0;
1949 sfv(2) = 0.0;
1950 sfv(3) = 0.0;
1951 sfv(4) = 1.0;
1952 return;
1953 }
1954 const fp_t denom = 0.25 / (1 - z);
1955 const fp_t x0 = -x + y + z - 1.0;
1956 const fp_t x1 = -x - y + z - 1.0;
1957 const fp_t x2 = x - y + z - 1.0;
1958 const fp_t x3 = x + y + z - 1.0;
1959 sfv(0) = x0 * x1 * denom;
1960 sfv(1) = x1 * x2 * denom;
1961 sfv(2) = x2 * x3 * denom;
1962 sfv(3) = x3 * x0 * denom;
1963 sfv(4) = z;
1964 return;
1965 };
1966 KOKKOS_INLINE_FUNCTION static void
1968 Kokkos::View<fp_t **, ExecSpace> sfdv) {
1969 const fp_t x = xi;
1970 const fp_t y = eta;
1971 const fp_t z = phi;
1972 if (Kokkos::abs(1 - phi) < 1e-6) {
1973 sfdv(0, 0) = 0.5;
1974 sfdv(0, 1) = 0.0;
1975 sfdv(0, 2) = -0.5;
1976 sfdv(0, 3) = 0.0;
1977 sfdv(0, 4) = 0.0;
1978
1979 sfdv(1, 0) = 0.0;
1980 sfdv(1, 1) = 0.5;
1981 sfdv(1, 2) = 0.0;
1982 sfdv(1, 3) = -0.5;
1983 sfdv(1, 4) = 0.0;
1984
1985 sfdv(2, 0) = -0.25;
1986 sfdv(2, 1) = -0.25;
1987 sfdv(2, 2) = -0.25;
1988 sfdv(2, 3) = -0.25;
1989 sfdv(2, 4) = 1.0;
1990 return;
1991 }
1992 const fp_t denom = 0.25 / (1.0 - z);
1993 const fp_t denom2 = 4.0 * denom;
1994 const fp_t x0 = x + y + z - 1.0;
1995 const fp_t x1 = -x + y + z - 1.0;
1996 const fp_t x2 = -x - y + z - 1.0;
1997 const fp_t x3 = x - y + z - 1.0;
1998
1999 sfdv(0, 0) = (-x1 - x2) * denom;
2000 sfdv(0, 1) = (x2 - x3) * denom;
2001 sfdv(0, 2) = (x0 + x3) * denom;
2002 sfdv(0, 3) = (x1 - x0) * denom;
2003 sfdv(0, 4) = 0.0;
2004
2005 sfdv(1, 0) = (x2 - x1) * denom;
2006 sfdv(1, 1) = (-x2 - x3) * denom;
2007 sfdv(1, 2) = (x3 - x0) * denom;
2008 sfdv(1, 3) = (x0 + x1) * denom;
2009 sfdv(1, 4) = 0.0;
2010
2011 sfdv(2, 0) = (x1 + x2 + x1 * x2 * denom2) * denom;
2012 sfdv(2, 1) = (x2 + x3 + x2 * x3 * denom2) * denom;
2013 sfdv(2, 2) = (x3 + x0 + x3 * x0 * denom2) * denom;
2014 sfdv(2, 3) = (x0 + x1 + x0 * x1 * denom2) * denom;
2015 sfdv(2, 4) = 1.0;
2016 return;
2017 };
2018 KOKKOS_INLINE_FUNCTION static void
2020 const fp_t phi,
2021 Kokkos::View<fp_t **, ExecSpace> sfddv) {
2022 if (Kokkos::abs(1.0 - phi) < 1e-6) {
2023 sfddv(0, 0) = 0.0;
2024 sfddv(0, 1) = 0.0;
2025 sfddv(0, 2) = 0.0;
2026 sfddv(1, 0) = 0.0;
2027 sfddv(1, 1) = 0.0;
2028 sfddv(1, 2) = 0.0;
2029 sfddv(2, 0) = 0.0;
2030 sfddv(2, 1) = 0.0;
2031 sfddv(2, 2) = 0.0;
2032 return;
2033 }
2034 // t = 1 - phi, N0=N2 and N1=N3 share the same Hessian structure.
2035 // Derived from N{0,2} = ((xi +/- t)^2 - eta^2) / (4t)
2036 // N{1,3} = ((eta +/- t)^2 - xi^2 ) / (4t)
2037 switch (i) {
2038 case 0:
2039 case 2: {
2040 const fp_t t = 1.0 - phi;
2041 const fp_t inv_2t = 0.5 / t;
2042 const fp_t inv_2t2 = 0.5 / (t * t);
2043 const fp_t inv_2t3 = 0.5 / (t * t * t);
2044 sfddv(0, 0) = inv_2t;
2045 sfddv(0, 1) = 0.0;
2046 sfddv(0, 2) = xi * inv_2t2;
2047 sfddv(1, 0) = 0.0;
2048 sfddv(1, 1) = -inv_2t;
2049 sfddv(1, 2) = -eta * inv_2t2;
2050 sfddv(2, 0) = xi * inv_2t2;
2051 sfddv(2, 1) = -eta * inv_2t2;
2052 sfddv(2, 2) = (xi * xi - eta * eta) * inv_2t3;
2053 break;
2054 }
2055 case 1:
2056 case 3: {
2057 const fp_t t = 1.0 - phi;
2058 const fp_t inv_2t = 0.5 / t;
2059 const fp_t inv_2t2 = 0.5 / (t * t);
2060 const fp_t inv_2t3 = 0.5 / (t * t * t);
2061 sfddv(0, 0) = -inv_2t;
2062 sfddv(0, 1) = 0.0;
2063 sfddv(0, 2) = -xi * inv_2t2;
2064 sfddv(1, 0) = 0.0;
2065 sfddv(1, 1) = inv_2t;
2066 sfddv(1, 2) = eta * inv_2t2;
2067 sfddv(2, 0) = -xi * inv_2t2;
2068 sfddv(2, 1) = eta * inv_2t2;
2069 sfddv(2, 2) = (eta * eta - xi * xi) * inv_2t3;
2070 break;
2071 }
2072 case 4: {
2073 sfddv(0, 0) = 0.0;
2074 sfddv(0, 1) = 0.0;
2075 sfddv(0, 2) = 0.0;
2076 sfddv(1, 0) = 0.0;
2077 sfddv(1, 1) = 0.0;
2078 sfddv(1, 2) = 0.0;
2079 sfddv(2, 0) = 0.0;
2080 sfddv(2, 1) = 0.0;
2081 sfddv(2, 2) = 0.0;
2082 break;
2083 }
2084 }
2085 return;
2086 };
2087 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
2088 const fp_t phi) {
2090 };
2091};
2092template <typename ExecSpace>
2094public:
2095 static constexpr unsigned int numberOfShapeFunctions = 13U;
2096 static constexpr unsigned int dimensionality = 3U;
2097 KOKKOS_INLINE_FUNCTION static void
2099 Kokkos::View<fp_t *, ExecSpace> sfv) {
2100 if (Kokkos::abs(1 - phi) < 1e-6) {
2101 sfv(0) = 0.0;
2102 sfv(1) = 0.0;
2103 sfv(2) = 0.0;
2104 sfv(3) = 0.0;
2105 sfv(4) = 1.0;
2106 sfv(5) = 0.0;
2107 sfv(6) = 0.0;
2108 sfv(7) = 0.0;
2109 sfv(8) = 0.0;
2110 sfv(9) = 0.0;
2111 sfv(10) = 0.0;
2112 sfv(11) = 0.0;
2113 sfv(12) = 0.0;
2114 return;
2115 }
2116 const fp_t x0 = 2 * phi;
2117 const fp_t x1 = x0 - 1;
2118 const fp_t x2 = 2 * eta;
2119 const fp_t x3 = 2 * xi;
2120 const fp_t x4 = x2 + x3;
2121 const fp_t x5 = x0 - 2;
2122 const fp_t x6 = x3 + x5;
2123 const fp_t x7 = -x6;
2124 const fp_t x8 = 1.0 / (phi - 1.0);
2125 const fp_t x9 = x8 * (-x2 - x5);
2126 const fp_t x10 = x7 * x9;
2127 const fp_t x11 = x9 * xi;
2128 const fp_t x12 = eta * x8;
2129 const fp_t x13 = 1.0 * xi;
2130 const fp_t x14 = x12 * x7;
2131 const fp_t x15 = 2.0 * x11;
2132 const fp_t x16 = x12 * xi;
2133 const fp_t x17 = 1.0 * x10;
2134 sfv(0) = 0.25 * x10 * (x1 + x4);
2135 sfv(1) = -0.5 * x11 * (-x2 + x3 - 1);
2136 sfv(2) = x12 * x13 * (-x0 - x4 + 3);
2137 sfv(3) = -0.5 * x14 * (x2 - x3 - 1);
2138 sfv(4) = phi * x1;
2139 sfv(5) = -x10 * x13;
2140 sfv(6) = -eta * x15;
2141 sfv(7) = 2.0 * x16 * x6;
2142 sfv(8) = -eta * x17;
2143 sfv(9) = -phi * x17;
2144 sfv(10) = -phi * x15;
2145 sfv(11) = -4.0 * phi * x16;
2146 sfv(12) = -2.0 * phi * x14;
2147 return;
2148 };
2149 KOKKOS_INLINE_FUNCTION static void
2151 Kokkos::View<fp_t **, ExecSpace> sfdv) {
2152 if (Kokkos::abs(1 - phi) < 1e-6) {
2153 sfdv(2, 0) = 1.0;
2154 sfdv(2, 0) = 1.0;
2155 sfdv(2, 0) = 0.5;
2156 sfdv(2, 1) = -1.0;
2157 sfdv(2, 1) = 0.0;
2158 sfdv(2, 1) = 0.0;
2159 sfdv(2, 2) = 0.0;
2160 sfdv(2, 2) = 0.0;
2161 sfdv(2, 2) = 0.0;
2162 sfdv(2, 3) = 0.0;
2163 sfdv(2, 3) = -1.0;
2164 sfdv(2, 3) = 0.0;
2165 sfdv(2, 4) = 0.0;
2166 sfdv(2, 4) = 0.0;
2167 sfdv(2, 4) = 1.5;
2168 sfdv(2, 5) = 0.0;
2169 sfdv(2, 5) = 0.0;
2170 sfdv(2, 5) = 0.0;
2171 sfdv(2, 6) = 0.0;
2172 sfdv(2, 6) = 0.0;
2173 sfdv(2, 6) = 0.0;
2174 sfdv(2, 7) = 0.0;
2175 sfdv(2, 7) = 0.0;
2176 sfdv(2, 7) = 0.0;
2177 sfdv(2, 8) = 0.0;
2178 sfdv(2, 8) = 0.0;
2179 sfdv(2, 8) = 0.0;
2180 sfdv(2, 9) = -4.0;
2181 sfdv(2, 9) = -4.0;
2182 sfdv(2, 9) = -2.0;
2183 sfdv(2, 10) = 4.0;
2184 sfdv(2, 10) = 0.0;
2185 sfdv(2, 10) = 0.0;
2186 sfdv(2, 11) = 0.0;
2187 sfdv(2, 11) = 0.0;
2188 sfdv(2, 11) = 0.0;
2189 sfdv(2, 12) = 0.0;
2190 sfdv(2, 12) = 4.0;
2191 sfdv(2, 12) = 0.0;
2192 return;
2193 }
2194 const fp_t x0 = phi - 1.0;
2195 const fp_t x1 = 1.0 / x0;
2196 const fp_t x2 = 2 * eta;
2197 const fp_t x3 = 2 * phi;
2198 const fp_t x4 = x3 - 2;
2199 const fp_t x5 = -x2 - x4;
2200 const fp_t x6 = x1 * x5;
2201 const fp_t x7 = 2 * xi;
2202 const fp_t x8 = x4 + x7;
2203 const fp_t x9 = -x8;
2204 const fp_t x10 = 0.5 * x9;
2205 const fp_t x11 = x10 * x6;
2206 const fp_t x12 = x2 + x3 + x7;
2207 const fp_t x13 = x12 - 1;
2208 const fp_t x14 = 0.5 * x6;
2209 const fp_t x15 = x13 * x14;
2210 const fp_t x16 = x6 * xi;
2211 const fp_t x17 = 1.0 * x16;
2212 const fp_t x18 = -x2 + x7 - 1;
2213 const fp_t x19 = eta * x1;
2214 const fp_t x20 = 2.0 * x19;
2215 const fp_t x21 = x20 * xi;
2216 const fp_t x22 = 3 - x12;
2217 const fp_t x23 = x2 - x7 - 1;
2218 const fp_t x24 = 1.0 * x19;
2219 const fp_t x25 = x23 * x24;
2220 const fp_t x26 = x24 * x9;
2221 const fp_t x27 = 2.0 * x16;
2222 const fp_t x28 = 1.0 * x9;
2223 const fp_t x29 = -x28 * x6;
2224 const fp_t x30 = 2.0 * x6;
2225 const fp_t x31 = eta * x30;
2226 const fp_t x32 = 4.0 * x19;
2227 const fp_t x33 = x32 * xi;
2228 const fp_t x34 = phi * x30;
2229 const fp_t x35 = phi * x32;
2230 const fp_t x36 = x1 * x10;
2231 const fp_t x37 = x13 * x36;
2232 const fp_t x38 = x1 * xi;
2233 const fp_t x39 = 1.0 * x18 * x38;
2234 const fp_t x40 = 2.0 * x38;
2235 const fp_t x41 = x40 * x9;
2236 const fp_t x42 = -x27;
2237 const fp_t x43 = x20 * x9;
2238 const fp_t x44 = 2.0 * phi;
2239 const fp_t x45 = x44 * x9;
2240 const fp_t x46 = x1 * x45;
2241 const fp_t x47 = 4.0 * phi;
2242 const fp_t x48 = x38 * x47;
2243 const fp_t x49 = Kokkos::pow(x0, -2);
2244 const fp_t x50 = x49 * x5;
2245 const fp_t x51 = x50 * xi;
2246 const fp_t x52 = eta * x49;
2247 const fp_t x53 = x52 * xi;
2248 const fp_t x54 = x28 * x50;
2249 sfdv(0, 0) = x11 - x15;
2250 sfdv(1, 0) = x11 - x37;
2251 sfdv(2, 0) = 0.5 * x1 * x5 * x9 - 0.25 * x13 * x50 * x9 - x15 - x37;
2252 sfdv(0, 1) = -x14 * x18 - x17;
2253 sfdv(1, 1) = x17 + x39;
2254 sfdv(2, 1) = 0.5 * x18 * x51 + x39;
2255 sfdv(0, 2) = 1.0 * eta * x1 * x22 - x21;
2256 sfdv(1, 2) = 1.0 * x1 * x22 * xi - x21;
2257 sfdv(2, 2) = -x21 - 1.0 * x22 * x53;
2258 sfdv(0, 3) = x25 + x26;
2259 sfdv(1, 3) = -x23 * x36 - x26;
2260 sfdv(2, 3) = x10 * x23 * x52 + x25;
2261 sfdv(0, 4) = 0;
2262 sfdv(1, 4) = 0;
2263 sfdv(2, 4) = 4 * phi - 1;
2264 sfdv(0, 5) = x27 + x29;
2265 sfdv(1, 5) = x41;
2266 sfdv(2, 5) = x27 + x28 * x51 + x41;
2267 sfdv(0, 6) = -x31;
2268 sfdv(1, 6) = x33 + x42;
2269 sfdv(2, 6) = 2.0 * eta * x51 + x33;
2270 sfdv(0, 7) = x20 * x8 + x33;
2271 sfdv(1, 7) = x40 * x8;
2272 sfdv(2, 7) = x33 - 2.0 * x53 * x8;
2273 sfdv(0, 8) = x31;
2274 sfdv(1, 8) = x29 + x43;
2275 sfdv(2, 8) = eta * x54 + x31 + x43;
2276 sfdv(0, 9) = x34;
2277 sfdv(1, 9) = x46;
2278 sfdv(2, 9) = phi * x54 + x29 + x34 + x46;
2279 sfdv(0, 10) = -x34;
2280 sfdv(1, 10) = x48;
2281 sfdv(2, 10) = x42 + x44 * x51 + x48;
2282 sfdv(0, 11) = -x35;
2283 sfdv(1, 11) = -x48;
2284 sfdv(2, 11) = -x33 + x47 * x53;
2285 sfdv(0, 12) = x35;
2286 sfdv(1, 12) = -x46;
2287 sfdv(2, 12) = x35 - x43 + x45 * x52;
2288 return;
2289 };
2290 KOKKOS_INLINE_FUNCTION static void
2292 const fp_t phi,
2293 Kokkos::View<fp_t **, ExecSpace> sfddv) {
2294 switch (i) {
2295 case 0: {
2296 const fp_t x0 = phi - 1.0;
2297 const fp_t x1 = 1.0 / x0;
2298 const fp_t x2 = 2 * eta;
2299 const fp_t x3 = 2 * phi;
2300 const fp_t x4 = x3 - 2;
2301 const fp_t x5 = -x2 - x4;
2302 const fp_t x6 = x1 * x5;
2303 const fp_t x7 = 2.0 * x6;
2304 const fp_t x8 = -x7;
2305 const fp_t x9 = 1.0 * x6;
2306 const fp_t x10 = 2 * xi;
2307 const fp_t x11 = -x10 - x4;
2308 const fp_t x12 = x10 + x2 + x3 - 1;
2309 const fp_t x13 = -1.0 * x1 * x12;
2310 const fp_t x14 = 1.0 * x1 * x11 + x13;
2311 const fp_t x15 = -x14 - x9;
2312 const fp_t x16 = 0.5 * x5;
2313 const fp_t x17 = Kokkos::pow(x0, -2);
2314 const fp_t x18 = x11 * x17;
2315 const fp_t x19 = x16 * x18;
2316 const fp_t x20 = 0.5 * x12 * x17 * x5 - x14 - x19 - x7;
2317 const fp_t x21 = 2.0 * x1;
2318 const fp_t x22 = x11 * x21;
2319 const fp_t x23 = -x22;
2320 const fp_t x24 = 0.5 * x11 * x12 * x17 - x13 - x19 - x22 - x9;
2321 const fp_t x25 = 1.0 * x5;
2322 const fp_t x26 = x12 * x17;
2323 sfddv(0, 0) = x8;
2324 sfddv(0, 1) = x15;
2325 sfddv(0, 2) = x20;
2326 sfddv(1, 0) = x15;
2327 sfddv(1, 1) = x23;
2328 sfddv(1, 2) = x24;
2329 sfddv(2, 0) = x20;
2330 sfddv(2, 1) = x24;
2331 sfddv(2, 2) = 1.0 * x11 * x26 + x12 * x21 - x18 * x25 + x23 + x25 * x26 +
2332 x8 + x11 * x12 * x16 / Kokkos::pow(x0, 3);
2333 break;
2334 }
2335 case 1: {
2336 const fp_t x0 = phi - 1.0;
2337 const fp_t x1 = 1.0 / x0;
2338 const fp_t x2 = 2 * eta;
2339 const fp_t x3 = -2 * phi - x2 + 2;
2340 const fp_t x4 = x1 * x3;
2341 const fp_t x5 = -x2 + 2 * xi - 1;
2342 const fp_t x6 = 1.0 * x5;
2343 const fp_t x7 = x1 * xi;
2344 const fp_t x8 = 2.0 * x7;
2345 const fp_t x9 = x1 * x6 + x8;
2346 const fp_t x10 = 1.0 * x4 + x9;
2347 const fp_t x11 = Kokkos::pow(x0, -2);
2348 const fp_t x12 = x11 * x3;
2349 const fp_t x13 = 1.0 * x12 * xi;
2350 const fp_t x14 = 0.5 * x12 * x5 + x13 + x9;
2351 const fp_t x15 = x11 * xi;
2352 const fp_t x16 = -x13 - x15 * x6 - x8;
2353 sfddv(0, 0) = -2.0 * x4;
2354 sfddv(0, 1) = x10;
2355 sfddv(0, 2) = x14;
2356 sfddv(1, 0) = x10;
2357 sfddv(1, 1) = -4.0 * x7;
2358 sfddv(1, 2) = x16;
2359 sfddv(2, 0) = x14;
2360 sfddv(2, 1) = x16;
2361 sfddv(2, 2) = -2.0 * x15 * x5 - x3 * x6 * xi / Kokkos::pow(x0, 3);
2362 break;
2363 }
2364 case 2: {
2365 const fp_t x0 = phi - 1.0;
2366 const fp_t x1 = 1.0 / x0;
2367 const fp_t x2 = eta * x1;
2368 const fp_t x3 = 2.0 * x2;
2369 const fp_t x4 = x1 * xi;
2370 const fp_t x5 = 2.0 * x4;
2371 const fp_t x6 = -2 * eta - 2 * phi - 2 * xi + 3;
2372 const fp_t x7 = 1.0 * x1 * x6 - x3 - x5;
2373 const fp_t x8 = Kokkos::pow(x0, -2);
2374 const fp_t x9 = -2.0 * eta * x8 * xi;
2375 const fp_t x10 = 1.0 * x6;
2376 const fp_t x11 = eta * x8;
2377 const fp_t x12 = -x10 * x11 - x3 - x9;
2378 const fp_t x13 = -x10 * x8 * xi - x5 - x9;
2379 sfddv(0, 0) = -4.0 * x2;
2380 sfddv(0, 1) = x7;
2381 sfddv(0, 2) = x12;
2382 sfddv(1, 0) = x7;
2383 sfddv(1, 1) = -4.0 * x4;
2384 sfddv(1, 2) = x13;
2385 sfddv(2, 0) = x12;
2386 sfddv(2, 1) = x13;
2387 sfddv(2, 2) = 2.0 * eta * x6 * xi / Kokkos::pow(x0, 3) + 4.0 * x11 * xi;
2388 break;
2389 }
2390 case 3: {
2391 const fp_t x0 = phi - 1.0;
2392 const fp_t x1 = 1.0 / x0;
2393 const fp_t x2 = eta * x1;
2394 const fp_t x3 = 2 * xi;
2395 const fp_t x4 = -2 * phi - x3 + 2;
2396 const fp_t x5 = 1.0 * x1;
2397 const fp_t x6 = 2 * eta - x3 - 1;
2398 const fp_t x7 = 2.0 * x2;
2399 const fp_t x8 = x5 * x6 + x7;
2400 const fp_t x9 = x4 * x5 + x8;
2401 const fp_t x10 = Kokkos::pow(x0, -2);
2402 const fp_t x11 = x10 * x6;
2403 const fp_t x12 = 1.0 * eta;
2404 const fp_t x13 = x12 * x4;
2405 const fp_t x14 = x10 * x13;
2406 const fp_t x15 = -x11 * x12 - x14 - x7;
2407 const fp_t x16 = 0.5 * x11 * x4 + x14 + x8;
2408 sfddv(0, 0) = -4.0 * x2;
2409 sfddv(0, 1) = x9;
2410 sfddv(0, 2) = x15;
2411 sfddv(1, 0) = x9;
2412 sfddv(1, 1) = -2.0 * x1 * x4;
2413 sfddv(1, 2) = x16;
2414 sfddv(2, 0) = x15;
2415 sfddv(2, 1) = x16;
2416 sfddv(2, 2) = -2.0 * eta * x11 - x13 * x6 / Kokkos::pow(x0, 3);
2417 break;
2418 }
2419 case 4: {
2420 sfddv(2, 2) = 4;
2421 break;
2422 }
2423 case 5: {
2424 const fp_t x0 = 2 * phi - 2;
2425 const fp_t x1 = -2 * eta - x0;
2426 const fp_t x2 = phi - 1.0;
2427 const fp_t x3 = 1.0 / x2;
2428 const fp_t x4 = 4.0 * x3;
2429 const fp_t x5 = x4 * xi;
2430 const fp_t x6 = -x0 - 2 * xi;
2431 const fp_t x7 = 2.0 * x3 * x6 - x5;
2432 const fp_t x8 = 2.0 * x3;
2433 const fp_t x9 = Kokkos::pow(x2, -2);
2434 const fp_t x10 = x1 * x9;
2435 const fp_t x11 = 2.0 * xi;
2436 const fp_t x12 = x1 * x8 - x10 * x11 + 1.0 * x10 * x6 - x5 + x6 * x8;
2437 const fp_t x13 = x6 * x9;
2438 const fp_t x14 = -x11 * x13 - x5;
2439 const fp_t x15 = 4.0 * xi;
2440 sfddv(0, 0) = x1 * x4;
2441 sfddv(0, 1) = x7;
2442 sfddv(0, 2) = x12;
2443 sfddv(1, 0) = x7;
2444 sfddv(1, 2) = x14;
2445 sfddv(2, 0) = x12;
2446 sfddv(2, 1) = x14;
2447 sfddv(2, 2) = -x1 * x11 * x6 / Kokkos::pow(x2, 3) - x10 * x15 -
2448 x13 * x15 - 8.0 * x3 * xi;
2449 break;
2450 }
2451 case 6: {
2452 const fp_t x0 = phi - 1.0;
2453 const fp_t x1 = 1.0 / x0;
2454 const fp_t x2 = 4.0 * x1;
2455 const fp_t x3 = eta * x2;
2456 const fp_t x4 = -2 * eta - 2 * phi + 2;
2457 const fp_t x5 = 2.0 * x4;
2458 const fp_t x6 = -x1 * x5 + x3;
2459 const fp_t x7 = Kokkos::pow(x0, -2);
2460 const fp_t x8 = x5 * x7;
2461 const fp_t x9 = eta * x8 + x3;
2462 const fp_t x10 = 8.0 * xi;
2463 const fp_t x11 = eta * x7;
2464 const fp_t x12 = 4.0 * xi;
2465 const fp_t x13 = -x11 * x12 + x2 * xi + x8 * xi;
2466 sfddv(0, 1) = x6;
2467 sfddv(0, 2) = x9;
2468 sfddv(1, 0) = x6;
2469 sfddv(1, 1) = x1 * x10;
2470 sfddv(1, 2) = x13;
2471 sfddv(2, 0) = x9;
2472 sfddv(2, 1) = x13;
2473 sfddv(2, 2) = -eta * x12 * x4 / Kokkos::pow(x0, 3) - x10 * x11;
2474 break;
2475 }
2476 case 7: {
2477 const fp_t x0 = phi - 1.0;
2478 const fp_t x1 = 1.0 / x0;
2479 const fp_t x2 = 4.0 * xi;
2480 const fp_t x3 = x1 * x2;
2481 const fp_t x4 = 2 * phi + 2 * xi - 2;
2482 const fp_t x5 = 2.0 * x4;
2483 const fp_t x6 = x1 * x5 + x3;
2484 const fp_t x7 = Kokkos::pow(x0, -2);
2485 const fp_t x8 = eta * x7;
2486 const fp_t x9 = 4.0 * eta * x1 - x2 * x8 - x5 * x8;
2487 const fp_t x10 = x3 - x5 * x7 * xi;
2488 sfddv(0, 0) = 8.0 * eta * x1;
2489 sfddv(0, 1) = x6;
2490 sfddv(0, 2) = x9;
2491 sfddv(1, 0) = x6;
2492 sfddv(1, 2) = x10;
2493 sfddv(2, 0) = x9;
2494 sfddv(2, 1) = x10;
2495 sfddv(2, 2) = 4.0 * eta * x4 * xi / Kokkos::pow(x0, 3) - 8.0 * x8 * xi;
2496 break;
2497 }
2498 case 8: {
2499 const fp_t x0 = phi - 1.0;
2500 const fp_t x1 = 1.0 / x0;
2501 const fp_t x2 = 4.0 * x1;
2502 const fp_t x3 = eta * x2;
2503 const fp_t x4 = 2 * phi - 2;
2504 const fp_t x5 = -2 * eta - x4;
2505 const fp_t x6 = 2.0 * x1 * x5 - x3;
2506 const fp_t x7 = Kokkos::pow(x0, -2);
2507 const fp_t x8 = x5 * x7;
2508 const fp_t x9 = 2.0 * eta;
2509 const fp_t x10 = -x3 - x8 * x9;
2510 const fp_t x11 = -x4 - 2 * xi;
2511 const fp_t x12 = 2.0 * x1;
2512 const fp_t x13 = x11 * x7;
2513 const fp_t x14 = x11 * x12 + 1.0 * x11 * x8 + x12 * x5 - x13 * x9 - x3;
2514 const fp_t x15 = 4.0 * eta;
2515 sfddv(0, 1) = x6;
2516 sfddv(0, 2) = x10;
2517 sfddv(1, 0) = x6;
2518 sfddv(1, 1) = x11 * x2;
2519 sfddv(1, 2) = x14;
2520 sfddv(2, 0) = x10;
2521 sfddv(2, 1) = x14;
2522 sfddv(2, 2) = -8.0 * eta * x1 - x13 * x15 - x15 * x8 -
2523 x11 * x5 * x9 / Kokkos::pow(x0, 3);
2524 break;
2525 }
2526 case 9: {
2527 const fp_t x0 = phi - 1.0;
2528 const fp_t x1 = 1.0 / x0;
2529 const fp_t x2 = 4.0 * phi * x1;
2530 const fp_t x3 = -x2;
2531 const fp_t x4 = 2 * phi - 2;
2532 const fp_t x5 = -2 * eta - x4;
2533 const fp_t x6 = Kokkos::pow(x0, -2);
2534 const fp_t x7 = phi * x6;
2535 const fp_t x8 = 2.0 * x7;
2536 const fp_t x9 = 2.0 * x1 * x5 - x2 - x5 * x8;
2537 const fp_t x10 = -x4 - 2 * xi;
2538 const fp_t x11 = 2.0 * x1 * x10 - x10 * x8 - x2;
2539 const fp_t x12 = 4.0 * x7;
2540 sfddv(0, 1) = x3;
2541 sfddv(0, 2) = x9;
2542 sfddv(1, 0) = x3;
2543 sfddv(1, 2) = x11;
2544 sfddv(2, 0) = x9;
2545 sfddv(2, 1) = x11;
2546 sfddv(2, 2) = -8.0 * phi * x1 -
2547 2.0 * phi * x10 * x5 / Kokkos::pow(x0, 3) + 4.0 * x1 * x10 +
2548 4.0 * x1 * x5 - x10 * x12 + 2.0 * x10 * x5 * x6 - x12 * x5;
2549 break;
2550 }
2551 case 10: {
2552 const fp_t x0 = phi - 1.0;
2553 const fp_t x1 = 1.0 / x0;
2554 const fp_t x2 = 4.0 * phi * x1;
2555 const fp_t x3 = -2 * eta - 2 * phi + 2;
2556 const fp_t x4 = 2.0 * x3;
2557 const fp_t x5 = Kokkos::pow(x0, -2);
2558 const fp_t x6 = phi * x5;
2559 const fp_t x7 = -x1 * x4 + x2 + x4 * x6;
2560 const fp_t x8 = 4.0 * xi;
2561 const fp_t x9 = 4.0 * x1 * xi - x6 * x8;
2562 sfddv(0, 1) = x2;
2563 sfddv(0, 2) = x7;
2564 sfddv(1, 0) = x2;
2565 sfddv(1, 2) = x9;
2566 sfddv(2, 0) = x7;
2567 sfddv(2, 1) = x9;
2568 sfddv(2, 2) = -phi * x3 * x8 / Kokkos::pow(x0, 3) + 8.0 * x1 * xi +
2569 4.0 * x3 * x5 * xi - 8.0 * x6 * xi;
2570 break;
2571 }
2572 case 11: {
2573 const fp_t x0 = phi - 1.0;
2574 const fp_t x1 = 4.0 / x0;
2575 const fp_t x2 = -phi * x1;
2576 const fp_t x3 = Kokkos::pow(x0, -2);
2577 const fp_t x4 = 4.0 * phi;
2578 const fp_t x5 = -eta * x1 + eta * x3 * x4;
2579 const fp_t x6 = -x1 * xi + x3 * x4 * xi;
2580 sfddv(0, 1) = x2;
2581 sfddv(0, 2) = x5;
2582 sfddv(1, 0) = x2;
2583 sfddv(1, 2) = x6;
2584 sfddv(2, 0) = x5;
2585 sfddv(2, 1) = x6;
2586 sfddv(2, 2) =
2587 -8.0 * eta * phi * xi / Kokkos::pow(x0, 3) + 8.0 * eta * x3 * xi;
2588 break;
2589 }
2590 case 12: {
2591 const fp_t x0 = phi - 1.0;
2592 const fp_t x1 = 1.0 / x0;
2593 const fp_t x2 = 4.0 * phi * x1;
2594 const fp_t x3 = Kokkos::pow(x0, -2);
2595 const fp_t x4 = phi * x3;
2596 const fp_t x5 = 4.0 * eta;
2597 const fp_t x6 = 4.0 * eta * x1 - x4 * x5;
2598 const fp_t x7 = -2 * phi - 2 * xi + 2;
2599 const fp_t x8 = 2.0 * x7;
2600 const fp_t x9 = -x1 * x8 + x2 + x4 * x8;
2601 sfddv(0, 1) = x2;
2602 sfddv(0, 2) = x6;
2603 sfddv(1, 0) = x2;
2604 sfddv(1, 2) = x9;
2605 sfddv(2, 0) = x6;
2606 sfddv(2, 1) = x9;
2607 sfddv(2, 2) = 8.0 * eta * x1 + 4.0 * eta * x3 * x7 - 8.0 * eta * x4 -
2608 phi * x5 * x7 / Kokkos::pow(x0, 3);
2609 break;
2610 }
2611 }
2612 return;
2613 };
2614 KOKKOS_INLINE_FUNCTION static bool isInside(const fp_t xi, const fp_t eta,
2615 const fp_t phi) {
2617 };
2618};
2619
2620} // namespace FiniteElements
2621} // namespace PACMAN
#define _EPS_BARY
Definition FETools.hpp:29
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::HEXAHEDRON >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:88
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::TETRA >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:80
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::POINT >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:51
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo(const fp_t xi, const fp_t eta, const fp_t phi)
Generic predicate to test if local coordinates lie inside a reference geometry.
Definition FETools.hpp:43
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::QUAD >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:73
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::TRIANGLE >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:65
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::LINE >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:58
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::PYRAMID >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:106
KOKKOS_INLINE_FUNCTION bool IsBaryCoordInsideGeo< GeoSupport::WEDGE >(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:97
CellType
Definition types.hpp:60
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:136
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:151
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:146
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:141
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:804
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:784
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:848
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:945
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:189
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:208
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:203
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:196
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:1967
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:1941
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:2087
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:2019
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:219
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:228
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:237
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:256
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:956
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:1008
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:1136
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:1523
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:2150
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:2291
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:2614
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:2098
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:471
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:509
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:584
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:451
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:659
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:773
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:703
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:637
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:376
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:317
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:302
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:337
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:1753
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:1665
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:1626
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:1930
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:398
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:387
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:440
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:413
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:595
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:626
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:621
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:604
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:286
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:267
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:275
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:291
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:168
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:178
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:162
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:173
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerDerValues(const int_t i, const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfddv)
Definition FETools.hpp:1574
static KOKKOS_INLINE_FUNCTION bool isInside(const fp_t xi, const fp_t eta, const fp_t phi)
Definition FETools.hpp:1615
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t *, ExecSpace > sfv)
Definition FETools.hpp:1534
static KOKKOS_INLINE_FUNCTION void UpdateShapeFunctionsDerValues(const fp_t xi, const fp_t eta, const fp_t phi, Kokkos::View< fp_t **, ExecSpace > sfdv)
Definition FETools.hpp:1547
Compile-time FE geometry interface for one cell type.
Definition FETools.hpp:128