PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
Basis.h
Go to the documentation of this file.
1
14
15#ifndef PBAT_MATH_POLYNOMIAL_BASIS_H
16#define PBAT_MATH_POLYNOMIAL_BASIS_H
17
18#include "pbat/Aliases.h"
19
20#include <cmath>
21#include <numbers>
22
23namespace pbat {
24namespace math {
25namespace polynomial {
26
27namespace detail {
28
29template <int Dims, int Order>
30class MonomialBasis;
31
32template <int Dims, int Order>
34
35template <int Dims, int Order>
37
38} // namespace detail
39
49template <int Dims, int Order>
50struct MonomialBasis : detail::MonomialBasis<Dims, Order>
51{
52 public:
53 using BaseType = detail::MonomialBasis<Dims, Order>;
54 inline static constexpr int kDims = BaseType::kDims;
55 inline static constexpr int kOrder = BaseType::kOrder;
56 inline static constexpr int kSize = BaseType::kSize;
63 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
64 {
65 return BaseType::eval(X);
66 }
67
73 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
74 {
75 return BaseType::derivatives(X);
76 }
77
83 [[maybe_unused]] Matrix<kSize, kDims>
84 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
85 {
86 return BaseType::antiderivatives(X);
87 }
88};
89
124template <int Dims, int Order>
125struct OrthonormalBasis : detail::OrthonormalBasis<Dims, Order>
126{
127 public:
128 using BaseType = typename detail::OrthonormalBasis<Dims, Order>;
129 inline static constexpr int kDims = BaseType::kDims;
130 inline static constexpr int kOrder = BaseType::kOrder;
131 inline static constexpr int kSize = BaseType::kSize;
138 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
139 {
140 return BaseType::eval(X);
141 }
142
148 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
149 {
150 return BaseType::derivatives(X);
151 }
152
158 [[maybe_unused]] Matrix<kSize, kDims>
159 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
160 {
161 return BaseType::antiderivatives(X);
162 }
163};
164
189template <int Dims, int Order>
190struct DivergenceFreeBasis : detail::DivergenceFreeBasis<Dims, Order>
191{
192 public:
193 using BaseType = typename detail::DivergenceFreeBasis<Dims, Order>;
194 inline static constexpr int kDims = BaseType::kDims;
195 inline static constexpr int kOrder = BaseType::kOrder;
196 inline static constexpr int kSize = BaseType::kSize;
203 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
204 {
205 return BaseType::eval(X);
206 }
207};
208
209namespace detail {
210
214
215template <>
216class MonomialBasis<1, 1>
217{
218 public:
219 inline static constexpr int kDims = 1;
220 inline static constexpr int kOrder = 1;
221 inline static constexpr int kSize = 2;
222
223 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
224 {
226 P[0] = 1;
227 P[1] = X[0];
228 return P;
229 }
230
231 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
232 {
234 Scalar* G = Gm.data();
235 G[0] = 0;
236 G[1] = 1;
237 return Gm;
238 }
239
240 [[maybe_unused]] Matrix<kSize, kDims>
241 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
242 {
244 Scalar* P = Pm.data();
245 P[0] = X[0];
246 P[1] = (1.0 / 2.0) * ((X[0]) * (X[0]));
247 return Pm;
248 }
249};
250
251template <>
252class MonomialBasis<1, 2>
253{
254 public:
255 inline static constexpr int kDims = 1;
256 inline static constexpr int kOrder = 2;
257 inline static constexpr int kSize = 3;
258
259 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
260 {
262 P[0] = 1;
263 P[1] = X[0];
264 P[2] = ((X[0]) * (X[0]));
265 return P;
266 }
267
268 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
269 {
271 Scalar* G = Gm.data();
272 G[0] = 0;
273 G[1] = 1;
274 G[2] = 2 * X[0];
275 return Gm;
276 }
277
278 [[maybe_unused]] Matrix<kSize, kDims>
279 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
280 {
282 Scalar* P = Pm.data();
283 P[0] = X[0];
284 P[1] = (1.0 / 2.0) * ((X[0]) * (X[0]));
285 P[2] = (1.0 / 3.0) * ((X[0]) * (X[0]) * (X[0]));
286 return Pm;
287 }
288};
289
290template <>
291class MonomialBasis<1, 3>
292{
293 public:
294 inline static constexpr int kDims = 1;
295 inline static constexpr int kOrder = 3;
296 inline static constexpr int kSize = 4;
297
298 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
299 {
301 P[0] = 1;
302 P[1] = X[0];
303 P[2] = ((X[0]) * (X[0]));
304 P[3] = ((X[0]) * (X[0]) * (X[0]));
305 return P;
306 }
307
308 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
309 {
311 Scalar* G = Gm.data();
312 G[0] = 0;
313 G[1] = 1;
314 G[2] = 2 * X[0];
315 G[3] = 3 * ((X[0]) * (X[0]));
316 return Gm;
317 }
318
319 [[maybe_unused]] Matrix<kSize, kDims>
320 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
321 {
323 Scalar* P = Pm.data();
324 P[0] = X[0];
325 P[1] = (1.0 / 2.0) * ((X[0]) * (X[0]));
326 P[2] = (1.0 / 3.0) * ((X[0]) * (X[0]) * (X[0]));
327 P[3] = (1.0 / 4.0) * ((X[0]) * (X[0]) * (X[0]) * (X[0]));
328 return Pm;
329 }
330};
331
332template <>
333class MonomialBasis<1, 4>
334{
335 public:
336 inline static constexpr int kDims = 1;
337 inline static constexpr int kOrder = 4;
338 inline static constexpr int kSize = 5;
339
340 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
341 {
343 P[0] = 1;
344 P[1] = X[0];
345 P[2] = ((X[0]) * (X[0]));
346 P[3] = ((X[0]) * (X[0]) * (X[0]));
347 P[4] = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
348 return P;
349 }
350
351 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
352 {
354 Scalar* G = Gm.data();
355 G[0] = 0;
356 G[1] = 1;
357 G[2] = 2 * X[0];
358 G[3] = 3 * ((X[0]) * (X[0]));
359 G[4] = 4 * ((X[0]) * (X[0]) * (X[0]));
360 return Gm;
361 }
362
363 [[maybe_unused]] Matrix<kSize, kDims>
364 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
365 {
367 Scalar* P = Pm.data();
368 P[0] = X[0];
369 P[1] = (1.0 / 2.0) * ((X[0]) * (X[0]));
370 P[2] = (1.0 / 3.0) * ((X[0]) * (X[0]) * (X[0]));
371 P[3] = (1.0 / 4.0) * ((X[0]) * (X[0]) * (X[0]) * (X[0]));
372 P[4] = (1.0 / 5.0) * std::pow(X[0], 5);
373 return Pm;
374 }
375};
376
380
381template <>
382class MonomialBasis<2, 1>
383{
384 public:
385 inline static constexpr int kDims = 2;
386 inline static constexpr int kOrder = 1;
387 inline static constexpr int kSize = 3;
388
389 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
390 {
392 P[0] = 1;
393 P[1] = X[0];
394 P[2] = X[1];
395 return P;
396 }
397
398 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
399 {
401 Scalar* G = Gm.data();
402 G[0] = 0;
403 G[1] = 0;
404 G[2] = 1;
405 G[3] = 0;
406 G[4] = 0;
407 G[5] = 1;
408 return Gm;
409 }
410
411 [[maybe_unused]] Matrix<kSize, kDims>
412 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
413 {
415 Scalar* P = Pm.data();
416 Scalar const a0 = X[0] * X[1];
417 P[0] = X[0];
418 P[1] = (1.0 / 2.0) * ((X[0]) * (X[0]));
419 P[2] = a0;
420 P[3] = X[1];
421 P[4] = a0;
422 P[5] = (1.0 / 2.0) * ((X[1]) * (X[1]));
423 return Pm;
424 }
425};
426
427template <>
428class MonomialBasis<2, 2>
429{
430 public:
431 inline static constexpr int kDims = 2;
432 inline static constexpr int kOrder = 2;
433 inline static constexpr int kSize = 6;
434
435 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
436 {
438 P[0] = 1;
439 P[1] = X[0];
440 P[2] = ((X[0]) * (X[0]));
441 P[3] = X[1];
442 P[4] = X[0] * X[1];
443 P[5] = ((X[1]) * (X[1]));
444 return P;
445 }
446
447 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
448 {
450 Scalar* G = Gm.data();
451 G[0] = 0;
452 G[1] = 0;
453 G[2] = 1;
454 G[3] = 0;
455 G[4] = 2 * X[0];
456 G[5] = 0;
457 G[6] = 0;
458 G[7] = 1;
459 G[8] = X[1];
460 G[9] = X[0];
461 G[10] = 0;
462 G[11] = 2 * X[1];
463 return Gm;
464 }
465
466 [[maybe_unused]] Matrix<kSize, kDims>
467 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
468 {
470 Scalar* P = Pm.data();
471 Scalar const a0 = ((X[0]) * (X[0]));
472 Scalar const a1 = (1.0 / 2.0) * a0;
473 Scalar const a2 = X[0] * X[1];
474 Scalar const a3 = ((X[1]) * (X[1]));
475 Scalar const a4 = a3 * X[0];
476 P[0] = X[0];
477 P[1] = a1;
478 P[2] = (1.0 / 3.0) * ((X[0]) * (X[0]) * (X[0]));
479 P[3] = a2;
480 P[4] = a1 * X[1];
481 P[5] = a4;
482 P[6] = X[1];
483 P[7] = a2;
484 P[8] = a0 * X[1];
485 P[9] = (1.0 / 2.0) * a3;
486 P[10] = (1.0 / 2.0) * a4;
487 P[11] = (1.0 / 3.0) * ((X[1]) * (X[1]) * (X[1]));
488 return Pm;
489 }
490};
491
492template <>
493class MonomialBasis<2, 3>
494{
495 public:
496 inline static constexpr int kDims = 2;
497 inline static constexpr int kOrder = 3;
498 inline static constexpr int kSize = 10;
499
500 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
501 {
503 Scalar const a0 = ((X[0]) * (X[0]));
504 Scalar const a1 = ((X[1]) * (X[1]));
505 P[0] = 1;
506 P[1] = X[0];
507 P[2] = a0;
508 P[3] = ((X[0]) * (X[0]) * (X[0]));
509 P[4] = X[1];
510 P[5] = X[0] * X[1];
511 P[6] = a0 * X[1];
512 P[7] = a1;
513 P[8] = a1 * X[0];
514 P[9] = ((X[1]) * (X[1]) * (X[1]));
515 return P;
516 }
517
518 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
519 {
521 Scalar* G = Gm.data();
522 Scalar const a0 = 2 * X[0];
523 Scalar const a1 = ((X[0]) * (X[0]));
524 Scalar const a2 = a0 * X[1];
525 Scalar const a3 = ((X[1]) * (X[1]));
526 G[0] = 0;
527 G[1] = 0;
528 G[2] = 1;
529 G[3] = 0;
530 G[4] = a0;
531 G[5] = 0;
532 G[6] = 3 * a1;
533 G[7] = 0;
534 G[8] = 0;
535 G[9] = 1;
536 G[10] = X[1];
537 G[11] = X[0];
538 G[12] = a2;
539 G[13] = a1;
540 G[14] = 0;
541 G[15] = 2 * X[1];
542 G[16] = a3;
543 G[17] = a2;
544 G[18] = 0;
545 G[19] = 3 * a3;
546 return Gm;
547 }
548
549 [[maybe_unused]] Matrix<kSize, kDims>
550 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
551 {
553 Scalar* P = Pm.data();
554 Scalar const a0 = ((X[0]) * (X[0]));
555 Scalar const a1 = (1.0 / 2.0) * a0;
556 Scalar const a2 = ((X[0]) * (X[0]) * (X[0]));
557 Scalar const a3 = (1.0 / 3.0) * a2;
558 Scalar const a4 = X[0] * X[1];
559 Scalar const a5 = ((X[1]) * (X[1]));
560 Scalar const a6 = a5 * X[0];
561 Scalar const a7 = a1 * a5;
562 Scalar const a8 = ((X[1]) * (X[1]) * (X[1]));
563 Scalar const a9 = a8 * X[0];
564 P[0] = X[0];
565 P[1] = a1;
566 P[2] = a3;
567 P[3] = (1.0 / 4.0) * ((X[0]) * (X[0]) * (X[0]) * (X[0]));
568 P[4] = a4;
569 P[5] = a1 * X[1];
570 P[6] = a3 * X[1];
571 P[7] = a6;
572 P[8] = a7;
573 P[9] = a9;
574 P[10] = X[1];
575 P[11] = a4;
576 P[12] = a0 * X[1];
577 P[13] = a2 * X[1];
578 P[14] = (1.0 / 2.0) * a5;
579 P[15] = (1.0 / 2.0) * a6;
580 P[16] = a7;
581 P[17] = (1.0 / 3.0) * a8;
582 P[18] = (1.0 / 3.0) * a9;
583 P[19] = (1.0 / 4.0) * ((X[1]) * (X[1]) * (X[1]) * (X[1]));
584 return Pm;
585 }
586};
587
588template <>
589class MonomialBasis<2, 4>
590{
591 public:
592 inline static constexpr int kDims = 2;
593 inline static constexpr int kOrder = 4;
594 inline static constexpr int kSize = 15;
595
596 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
597 {
599 Scalar const a0 = ((X[0]) * (X[0]));
600 Scalar const a1 = ((X[0]) * (X[0]) * (X[0]));
601 Scalar const a2 = ((X[1]) * (X[1]));
602 Scalar const a3 = ((X[1]) * (X[1]) * (X[1]));
603 P[0] = 1;
604 P[1] = X[0];
605 P[2] = a0;
606 P[3] = a1;
607 P[4] = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
608 P[5] = X[1];
609 P[6] = X[0] * X[1];
610 P[7] = a0 * X[1];
611 P[8] = a1 * X[1];
612 P[9] = a2;
613 P[10] = a2 * X[0];
614 P[11] = a0 * a2;
615 P[12] = a3;
616 P[13] = a3 * X[0];
617 P[14] = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
618 return P;
619 }
620
621 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
622 {
624 Scalar* G = Gm.data();
625 Scalar const a0 = 2 * X[0];
626 Scalar const a1 = ((X[0]) * (X[0]));
627 Scalar const a2 = 3 * a1;
628 Scalar const a3 = ((X[0]) * (X[0]) * (X[0]));
629 Scalar const a4 = a0 * X[1];
630 Scalar const a5 = 2 * X[1];
631 Scalar const a6 = ((X[1]) * (X[1]));
632 Scalar const a7 = 3 * a6;
633 Scalar const a8 = ((X[1]) * (X[1]) * (X[1]));
634 G[0] = 0;
635 G[1] = 0;
636 G[2] = 1;
637 G[3] = 0;
638 G[4] = a0;
639 G[5] = 0;
640 G[6] = a2;
641 G[7] = 0;
642 G[8] = 4 * a3;
643 G[9] = 0;
644 G[10] = 0;
645 G[11] = 1;
646 G[12] = X[1];
647 G[13] = X[0];
648 G[14] = a4;
649 G[15] = a1;
650 G[16] = a2 * X[1];
651 G[17] = a3;
652 G[18] = 0;
653 G[19] = a5;
654 G[20] = a6;
655 G[21] = a4;
656 G[22] = a0 * a6;
657 G[23] = a1 * a5;
658 G[24] = 0;
659 G[25] = a7;
660 G[26] = a8;
661 G[27] = a7 * X[0];
662 G[28] = 0;
663 G[29] = 4 * a8;
664 return Gm;
665 }
666
667 [[maybe_unused]] Matrix<kSize, kDims>
668 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
669 {
671 Scalar* P = Pm.data();
672 Scalar const a0 = ((X[0]) * (X[0]));
673 Scalar const a1 = (1.0 / 2.0) * a0;
674 Scalar const a2 = ((X[0]) * (X[0]) * (X[0]));
675 Scalar const a3 = (1.0 / 3.0) * a2;
676 Scalar const a4 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
677 Scalar const a5 = (1.0 / 4.0) * a4;
678 Scalar const a6 = X[0] * X[1];
679 Scalar const a7 = ((X[1]) * (X[1]));
680 Scalar const a8 = a7 * X[0];
681 Scalar const a9 = a1 * a7;
682 Scalar const a10 = ((X[1]) * (X[1]) * (X[1]));
683 Scalar const a11 = a10 * X[0];
684 Scalar const a12 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
685 Scalar const a13 = a12 * X[0];
686 Scalar const a14 = (1.0 / 2.0) * a7;
687 Scalar const a15 = (1.0 / 3.0) * a10;
688 P[0] = X[0];
689 P[1] = a1;
690 P[2] = a3;
691 P[3] = a5;
692 P[4] = (1.0 / 5.0) * std::pow(X[0], 5);
693 P[5] = a6;
694 P[6] = a1 * X[1];
695 P[7] = a3 * X[1];
696 P[8] = a5 * X[1];
697 P[9] = a8;
698 P[10] = a9;
699 P[11] = a3 * a7;
700 P[12] = a11;
701 P[13] = a1 * a10;
702 P[14] = a13;
703 P[15] = X[1];
704 P[16] = a6;
705 P[17] = a0 * X[1];
706 P[18] = a2 * X[1];
707 P[19] = a4 * X[1];
708 P[20] = a14;
709 P[21] = (1.0 / 2.0) * a8;
710 P[22] = a9;
711 P[23] = a14 * a2;
712 P[24] = a15;
713 P[25] = (1.0 / 3.0) * a11;
714 P[26] = a0 * a15;
715 P[27] = (1.0 / 4.0) * a12;
716 P[28] = (1.0 / 4.0) * a13;
717 P[29] = (1.0 / 5.0) * std::pow(X[1], 5);
718 return Pm;
719 }
720};
721
725
726template <>
727class MonomialBasis<3, 1>
728{
729 public:
730 inline static constexpr int kDims = 3;
731 inline static constexpr int kOrder = 1;
732 inline static constexpr int kSize = 4;
733
734 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
735 {
737 P[0] = 1;
738 P[1] = X[0];
739 P[2] = X[1];
740 P[3] = X[2];
741 return P;
742 }
743
744 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
745 {
747 Scalar* G = Gm.data();
748 G[0] = 0;
749 G[1] = 0;
750 G[2] = 0;
751 G[3] = 1;
752 G[4] = 0;
753 G[5] = 0;
754 G[6] = 0;
755 G[7] = 1;
756 G[8] = 0;
757 G[9] = 0;
758 G[10] = 0;
759 G[11] = 1;
760 return Gm;
761 }
762
763 [[maybe_unused]] Matrix<kSize, kDims>
764 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
765 {
767 Scalar* P = Pm.data();
768 Scalar const a0 = X[0] * X[1];
769 Scalar const a1 = X[0] * X[2];
770 Scalar const a2 = X[1] * X[2];
771 P[0] = X[0];
772 P[1] = (1.0 / 2.0) * ((X[0]) * (X[0]));
773 P[2] = a0;
774 P[3] = a1;
775 P[4] = X[1];
776 P[5] = a0;
777 P[6] = (1.0 / 2.0) * ((X[1]) * (X[1]));
778 P[7] = a2;
779 P[8] = X[2];
780 P[9] = a1;
781 P[10] = a2;
782 P[11] = (1.0 / 2.0) * ((X[2]) * (X[2]));
783 return Pm;
784 }
785};
786
787template <>
788class MonomialBasis<3, 2>
789{
790 public:
791 inline static constexpr int kDims = 3;
792 inline static constexpr int kOrder = 2;
793 inline static constexpr int kSize = 10;
794
795 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
796 {
798 P[0] = 1;
799 P[1] = X[0];
800 P[2] = ((X[0]) * (X[0]));
801 P[3] = X[1];
802 P[4] = X[0] * X[1];
803 P[5] = ((X[1]) * (X[1]));
804 P[6] = X[2];
805 P[7] = X[0] * X[2];
806 P[8] = X[1] * X[2];
807 P[9] = ((X[2]) * (X[2]));
808 return P;
809 }
810
811 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
812 {
814 Scalar* G = Gm.data();
815 G[0] = 0;
816 G[1] = 0;
817 G[2] = 0;
818 G[3] = 1;
819 G[4] = 0;
820 G[5] = 0;
821 G[6] = 2 * X[0];
822 G[7] = 0;
823 G[8] = 0;
824 G[9] = 0;
825 G[10] = 1;
826 G[11] = 0;
827 G[12] = X[1];
828 G[13] = X[0];
829 G[14] = 0;
830 G[15] = 0;
831 G[16] = 2 * X[1];
832 G[17] = 0;
833 G[18] = 0;
834 G[19] = 0;
835 G[20] = 1;
836 G[21] = X[2];
837 G[22] = 0;
838 G[23] = X[0];
839 G[24] = 0;
840 G[25] = X[2];
841 G[26] = X[1];
842 G[27] = 0;
843 G[28] = 0;
844 G[29] = 2 * X[2];
845 return Gm;
846 }
847
848 [[maybe_unused]] Matrix<kSize, kDims>
849 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
850 {
852 Scalar* P = Pm.data();
853 Scalar const a0 = ((X[0]) * (X[0]));
854 Scalar const a1 = (1.0 / 2.0) * a0;
855 Scalar const a2 = X[0] * X[1];
856 Scalar const a3 = ((X[1]) * (X[1]));
857 Scalar const a4 = a3 * X[0];
858 Scalar const a5 = X[0] * X[2];
859 Scalar const a6 = a2 * X[2];
860 Scalar const a7 = ((X[2]) * (X[2]));
861 Scalar const a8 = a7 * X[0];
862 Scalar const a9 = (1.0 / 2.0) * a3;
863 Scalar const a10 = X[1] * X[2];
864 Scalar const a11 = a7 * X[1];
865 P[0] = X[0];
866 P[1] = a1;
867 P[2] = (1.0 / 3.0) * ((X[0]) * (X[0]) * (X[0]));
868 P[3] = a2;
869 P[4] = a1 * X[1];
870 P[5] = a4;
871 P[6] = a5;
872 P[7] = a1 * X[2];
873 P[8] = a6;
874 P[9] = a8;
875 P[10] = X[1];
876 P[11] = a2;
877 P[12] = a0 * X[1];
878 P[13] = a9;
879 P[14] = (1.0 / 2.0) * a4;
880 P[15] = (1.0 / 3.0) * ((X[1]) * (X[1]) * (X[1]));
881 P[16] = a10;
882 P[17] = a6;
883 P[18] = a9 * X[2];
884 P[19] = a11;
885 P[20] = X[2];
886 P[21] = a5;
887 P[22] = a0 * X[2];
888 P[23] = a10;
889 P[24] = a6;
890 P[25] = a3 * X[2];
891 P[26] = (1.0 / 2.0) * a7;
892 P[27] = (1.0 / 2.0) * a8;
893 P[28] = (1.0 / 2.0) * a11;
894 P[29] = (1.0 / 3.0) * ((X[2]) * (X[2]) * (X[2]));
895 return Pm;
896 }
897};
898
899template <>
900class MonomialBasis<3, 3>
901{
902 public:
903 inline static constexpr int kDims = 3;
904 inline static constexpr int kOrder = 3;
905 inline static constexpr int kSize = 20;
906
907 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
908 {
910 Scalar const a0 = ((X[0]) * (X[0]));
911 Scalar const a1 = X[0] * X[1];
912 Scalar const a2 = ((X[1]) * (X[1]));
913 Scalar const a3 = ((X[2]) * (X[2]));
914 P[0] = 1;
915 P[1] = X[0];
916 P[2] = a0;
917 P[3] = ((X[0]) * (X[0]) * (X[0]));
918 P[4] = X[1];
919 P[5] = a1;
920 P[6] = a0 * X[1];
921 P[7] = a2;
922 P[8] = a2 * X[0];
923 P[9] = ((X[1]) * (X[1]) * (X[1]));
924 P[10] = X[2];
925 P[11] = X[0] * X[2];
926 P[12] = a0 * X[2];
927 P[13] = X[1] * X[2];
928 P[14] = a1 * X[2];
929 P[15] = a2 * X[2];
930 P[16] = a3;
931 P[17] = a3 * X[0];
932 P[18] = a3 * X[1];
933 P[19] = ((X[2]) * (X[2]) * (X[2]));
934 return P;
935 }
936
937 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
938 {
940 Scalar* G = Gm.data();
941 Scalar const a0 = 2 * X[0];
942 Scalar const a1 = ((X[0]) * (X[0]));
943 Scalar const a2 = a0 * X[1];
944 Scalar const a3 = 2 * X[1];
945 Scalar const a4 = ((X[1]) * (X[1]));
946 Scalar const a5 = a0 * X[2];
947 Scalar const a6 = a3 * X[2];
948 Scalar const a7 = ((X[2]) * (X[2]));
949 G[0] = 0;
950 G[1] = 0;
951 G[2] = 0;
952 G[3] = 1;
953 G[4] = 0;
954 G[5] = 0;
955 G[6] = a0;
956 G[7] = 0;
957 G[8] = 0;
958 G[9] = 3 * a1;
959 G[10] = 0;
960 G[11] = 0;
961 G[12] = 0;
962 G[13] = 1;
963 G[14] = 0;
964 G[15] = X[1];
965 G[16] = X[0];
966 G[17] = 0;
967 G[18] = a2;
968 G[19] = a1;
969 G[20] = 0;
970 G[21] = 0;
971 G[22] = a3;
972 G[23] = 0;
973 G[24] = a4;
974 G[25] = a2;
975 G[26] = 0;
976 G[27] = 0;
977 G[28] = 3 * a4;
978 G[29] = 0;
979 G[30] = 0;
980 G[31] = 0;
981 G[32] = 1;
982 G[33] = X[2];
983 G[34] = 0;
984 G[35] = X[0];
985 G[36] = a5;
986 G[37] = 0;
987 G[38] = a1;
988 G[39] = 0;
989 G[40] = X[2];
990 G[41] = X[1];
991 G[42] = X[1] * X[2];
992 G[43] = X[0] * X[2];
993 G[44] = X[0] * X[1];
994 G[45] = 0;
995 G[46] = a6;
996 G[47] = a4;
997 G[48] = 0;
998 G[49] = 0;
999 G[50] = 2 * X[2];
1000 G[51] = a7;
1001 G[52] = 0;
1002 G[53] = a5;
1003 G[54] = 0;
1004 G[55] = a7;
1005 G[56] = a6;
1006 G[57] = 0;
1007 G[58] = 0;
1008 G[59] = 3 * a7;
1009 return Gm;
1010 }
1011
1012 [[maybe_unused]] Matrix<kSize, kDims>
1013 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1014 {
1016 Scalar* P = Pm.data();
1017 Scalar const a0 = ((X[0]) * (X[0]));
1018 Scalar const a1 = (1.0 / 2.0) * a0;
1019 Scalar const a2 = ((X[0]) * (X[0]) * (X[0]));
1020 Scalar const a3 = (1.0 / 3.0) * a2;
1021 Scalar const a4 = X[0] * X[1];
1022 Scalar const a5 = ((X[1]) * (X[1]));
1023 Scalar const a6 = a5 * X[0];
1024 Scalar const a7 = a1 * a5;
1025 Scalar const a8 = ((X[1]) * (X[1]) * (X[1]));
1026 Scalar const a9 = a8 * X[0];
1027 Scalar const a10 = X[0] * X[2];
1028 Scalar const a11 = a4 * X[2];
1029 Scalar const a12 = X[1] * X[2];
1030 Scalar const a13 = a6 * X[2];
1031 Scalar const a14 = ((X[2]) * (X[2]));
1032 Scalar const a15 = a14 * X[0];
1033 Scalar const a16 = a1 * a14;
1034 Scalar const a17 = a14 * a4;
1035 Scalar const a18 = ((X[2]) * (X[2]) * (X[2]));
1036 Scalar const a19 = a18 * X[0];
1037 Scalar const a20 = a0 * X[1];
1038 Scalar const a21 = (1.0 / 2.0) * a5;
1039 Scalar const a22 = (1.0 / 3.0) * a8;
1040 Scalar const a23 = a20 * X[2];
1041 Scalar const a24 = a14 * X[1];
1042 Scalar const a25 = a14 * a21;
1043 Scalar const a26 = a18 * X[1];
1044 Scalar const a27 = (1.0 / 2.0) * a14;
1045 P[0] = X[0];
1046 P[1] = a1;
1047 P[2] = a3;
1048 P[3] = (1.0 / 4.0) * ((X[0]) * (X[0]) * (X[0]) * (X[0]));
1049 P[4] = a4;
1050 P[5] = a1 * X[1];
1051 P[6] = a3 * X[1];
1052 P[7] = a6;
1053 P[8] = a7;
1054 P[9] = a9;
1055 P[10] = a10;
1056 P[11] = a1 * X[2];
1057 P[12] = a3 * X[2];
1058 P[13] = a11;
1059 P[14] = a1 * a12;
1060 P[15] = a13;
1061 P[16] = a15;
1062 P[17] = a16;
1063 P[18] = a17;
1064 P[19] = a19;
1065 P[20] = X[1];
1066 P[21] = a4;
1067 P[22] = a20;
1068 P[23] = a2 * X[1];
1069 P[24] = a21;
1070 P[25] = (1.0 / 2.0) * a6;
1071 P[26] = a7;
1072 P[27] = a22;
1073 P[28] = (1.0 / 3.0) * a9;
1074 P[29] = (1.0 / 4.0) * ((X[1]) * (X[1]) * (X[1]) * (X[1]));
1075 P[30] = a12;
1076 P[31] = a11;
1077 P[32] = a23;
1078 P[33] = a21 * X[2];
1079 P[34] = (1.0 / 2.0) * a13;
1080 P[35] = a22 * X[2];
1081 P[36] = a24;
1082 P[37] = a17;
1083 P[38] = a25;
1084 P[39] = a26;
1085 P[40] = X[2];
1086 P[41] = a10;
1087 P[42] = a0 * X[2];
1088 P[43] = a2 * X[2];
1089 P[44] = a12;
1090 P[45] = a11;
1091 P[46] = a23;
1092 P[47] = a5 * X[2];
1093 P[48] = a13;
1094 P[49] = a8 * X[2];
1095 P[50] = a27;
1096 P[51] = (1.0 / 2.0) * a15;
1097 P[52] = a16;
1098 P[53] = (1.0 / 2.0) * a24;
1099 P[54] = a27 * a4;
1100 P[55] = a25;
1101 P[56] = (1.0 / 3.0) * a18;
1102 P[57] = (1.0 / 3.0) * a19;
1103 P[58] = (1.0 / 3.0) * a26;
1104 P[59] = (1.0 / 4.0) * ((X[2]) * (X[2]) * (X[2]) * (X[2]));
1105 return Pm;
1106 }
1107};
1108
1109template <>
1110class MonomialBasis<3, 4>
1111{
1112 public:
1113 inline static constexpr int kDims = 3;
1114 inline static constexpr int kOrder = 4;
1115 inline static constexpr int kSize = 35;
1116
1117 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1118 {
1119 Vector<kSize> P;
1120 Scalar const a0 = ((X[0]) * (X[0]));
1121 Scalar const a1 = ((X[0]) * (X[0]) * (X[0]));
1122 Scalar const a2 = X[0] * X[1];
1123 Scalar const a3 = a0 * X[1];
1124 Scalar const a4 = ((X[1]) * (X[1]));
1125 Scalar const a5 = a4 * X[0];
1126 Scalar const a6 = ((X[1]) * (X[1]) * (X[1]));
1127 Scalar const a7 = ((X[2]) * (X[2]));
1128 Scalar const a8 = ((X[2]) * (X[2]) * (X[2]));
1129 P[0] = 1;
1130 P[1] = X[0];
1131 P[2] = a0;
1132 P[3] = a1;
1133 P[4] = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
1134 P[5] = X[1];
1135 P[6] = a2;
1136 P[7] = a3;
1137 P[8] = a1 * X[1];
1138 P[9] = a4;
1139 P[10] = a5;
1140 P[11] = a0 * a4;
1141 P[12] = a6;
1142 P[13] = a6 * X[0];
1143 P[14] = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
1144 P[15] = X[2];
1145 P[16] = X[0] * X[2];
1146 P[17] = a0 * X[2];
1147 P[18] = a1 * X[2];
1148 P[19] = X[1] * X[2];
1149 P[20] = a2 * X[2];
1150 P[21] = a3 * X[2];
1151 P[22] = a4 * X[2];
1152 P[23] = a5 * X[2];
1153 P[24] = a6 * X[2];
1154 P[25] = a7;
1155 P[26] = a7 * X[0];
1156 P[27] = a0 * a7;
1157 P[28] = a7 * X[1];
1158 P[29] = a2 * a7;
1159 P[30] = a4 * a7;
1160 P[31] = a8;
1161 P[32] = a8 * X[0];
1162 P[33] = a8 * X[1];
1163 P[34] = ((X[2]) * (X[2]) * (X[2]) * (X[2]));
1164 return P;
1165 }
1166
1167 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1168 {
1170 Scalar* G = Gm.data();
1171 Scalar const a0 = 2 * X[0];
1172 Scalar const a1 = ((X[0]) * (X[0]));
1173 Scalar const a2 = 3 * a1;
1174 Scalar const a3 = ((X[0]) * (X[0]) * (X[0]));
1175 Scalar const a4 = a0 * X[1];
1176 Scalar const a5 = 2 * X[1];
1177 Scalar const a6 = ((X[1]) * (X[1]));
1178 Scalar const a7 = 3 * a6;
1179 Scalar const a8 = ((X[1]) * (X[1]) * (X[1]));
1180 Scalar const a9 = a0 * X[2];
1181 Scalar const a10 = X[1] * X[2];
1182 Scalar const a11 = a0 * a10;
1183 Scalar const a12 = a1 * X[2];
1184 Scalar const a13 = a5 * X[2];
1185 Scalar const a14 = a6 * X[2];
1186 Scalar const a15 = ((X[2]) * (X[2]));
1187 Scalar const a16 = a15 * X[1];
1188 Scalar const a17 = a15 * X[0];
1189 Scalar const a18 = ((X[2]) * (X[2]) * (X[2]));
1190 G[0] = 0;
1191 G[1] = 0;
1192 G[2] = 0;
1193 G[3] = 1;
1194 G[4] = 0;
1195 G[5] = 0;
1196 G[6] = a0;
1197 G[7] = 0;
1198 G[8] = 0;
1199 G[9] = a2;
1200 G[10] = 0;
1201 G[11] = 0;
1202 G[12] = 4 * a3;
1203 G[13] = 0;
1204 G[14] = 0;
1205 G[15] = 0;
1206 G[16] = 1;
1207 G[17] = 0;
1208 G[18] = X[1];
1209 G[19] = X[0];
1210 G[20] = 0;
1211 G[21] = a4;
1212 G[22] = a1;
1213 G[23] = 0;
1214 G[24] = a2 * X[1];
1215 G[25] = a3;
1216 G[26] = 0;
1217 G[27] = 0;
1218 G[28] = a5;
1219 G[29] = 0;
1220 G[30] = a6;
1221 G[31] = a4;
1222 G[32] = 0;
1223 G[33] = a0 * a6;
1224 G[34] = a1 * a5;
1225 G[35] = 0;
1226 G[36] = 0;
1227 G[37] = a7;
1228 G[38] = 0;
1229 G[39] = a8;
1230 G[40] = a7 * X[0];
1231 G[41] = 0;
1232 G[42] = 0;
1233 G[43] = 4 * a8;
1234 G[44] = 0;
1235 G[45] = 0;
1236 G[46] = 0;
1237 G[47] = 1;
1238 G[48] = X[2];
1239 G[49] = 0;
1240 G[50] = X[0];
1241 G[51] = a9;
1242 G[52] = 0;
1243 G[53] = a1;
1244 G[54] = a2 * X[2];
1245 G[55] = 0;
1246 G[56] = a3;
1247 G[57] = 0;
1248 G[58] = X[2];
1249 G[59] = X[1];
1250 G[60] = a10;
1251 G[61] = X[0] * X[2];
1252 G[62] = X[0] * X[1];
1253 G[63] = a11;
1254 G[64] = a12;
1255 G[65] = a1 * X[1];
1256 G[66] = 0;
1257 G[67] = a13;
1258 G[68] = a6;
1259 G[69] = a14;
1260 G[70] = a11;
1261 G[71] = a6 * X[0];
1262 G[72] = 0;
1263 G[73] = a7 * X[2];
1264 G[74] = a8;
1265 G[75] = 0;
1266 G[76] = 0;
1267 G[77] = 2 * X[2];
1268 G[78] = a15;
1269 G[79] = 0;
1270 G[80] = a9;
1271 G[81] = a0 * a15;
1272 G[82] = 0;
1273 G[83] = 2 * a12;
1274 G[84] = 0;
1275 G[85] = a15;
1276 G[86] = a13;
1277 G[87] = a16;
1278 G[88] = a17;
1279 G[89] = a11;
1280 G[90] = 0;
1281 G[91] = a15 * a5;
1282 G[92] = 2 * a14;
1283 G[93] = 0;
1284 G[94] = 0;
1285 G[95] = 3 * a15;
1286 G[96] = a18;
1287 G[97] = 0;
1288 G[98] = 3 * a17;
1289 G[99] = 0;
1290 G[100] = a18;
1291 G[101] = 3 * a16;
1292 G[102] = 0;
1293 G[103] = 0;
1294 G[104] = 4 * a18;
1295 return Gm;
1296 }
1297
1298 [[maybe_unused]] Matrix<kSize, kDims>
1299 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1300 {
1302 Scalar* P = Pm.data();
1303 Scalar const a0 = ((X[0]) * (X[0]));
1304 Scalar const a1 = (1.0 / 2.0) * a0;
1305 Scalar const a2 = ((X[0]) * (X[0]) * (X[0]));
1306 Scalar const a3 = (1.0 / 3.0) * a2;
1307 Scalar const a4 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
1308 Scalar const a5 = (1.0 / 4.0) * a4;
1309 Scalar const a6 = X[0] * X[1];
1310 Scalar const a7 = ((X[1]) * (X[1]));
1311 Scalar const a8 = a7 * X[0];
1312 Scalar const a9 = a1 * a7;
1313 Scalar const a10 = ((X[1]) * (X[1]) * (X[1]));
1314 Scalar const a11 = a10 * X[0];
1315 Scalar const a12 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
1316 Scalar const a13 = a12 * X[0];
1317 Scalar const a14 = X[0] * X[2];
1318 Scalar const a15 = a6 * X[2];
1319 Scalar const a16 = X[1] * X[2];
1320 Scalar const a17 = a8 * X[2];
1321 Scalar const a18 = a7 * X[2];
1322 Scalar const a19 = a1 * a18;
1323 Scalar const a20 = a11 * X[2];
1324 Scalar const a21 = ((X[2]) * (X[2]));
1325 Scalar const a22 = a21 * X[0];
1326 Scalar const a23 = a1 * a21;
1327 Scalar const a24 = a21 * a6;
1328 Scalar const a25 = a21 * X[1];
1329 Scalar const a26 = a1 * a25;
1330 Scalar const a27 = ((X[2]) * (X[2]) * (X[2]));
1331 Scalar const a28 = a27 * X[0];
1332 Scalar const a29 = a27 * a6;
1333 Scalar const a30 = ((X[2]) * (X[2]) * (X[2]) * (X[2]));
1334 Scalar const a31 = a30 * X[0];
1335 Scalar const a32 = a0 * X[1];
1336 Scalar const a33 = a2 * X[1];
1337 Scalar const a34 = (1.0 / 2.0) * a7;
1338 Scalar const a35 = (1.0 / 3.0) * a10;
1339 Scalar const a36 = (1.0 / 4.0) * a12;
1340 Scalar const a37 = a32 * X[2];
1341 Scalar const a38 = a33 * X[2];
1342 Scalar const a39 = a21 * a34;
1343 Scalar const a40 = (1.0 / 2.0) * a21;
1344 Scalar const a41 = a40 * a8;
1345 Scalar const a42 = a27 * X[1];
1346 Scalar const a43 = a30 * X[1];
1347 Scalar const a44 = a0 * X[2];
1348 Scalar const a45 = (1.0 / 3.0) * a27;
1349 P[0] = X[0];
1350 P[1] = a1;
1351 P[2] = a3;
1352 P[3] = a5;
1353 P[4] = (1.0 / 5.0) * std::pow(X[0], 5);
1354 P[5] = a6;
1355 P[6] = a1 * X[1];
1356 P[7] = a3 * X[1];
1357 P[8] = a5 * X[1];
1358 P[9] = a8;
1359 P[10] = a9;
1360 P[11] = a3 * a7;
1361 P[12] = a11;
1362 P[13] = a1 * a10;
1363 P[14] = a13;
1364 P[15] = a14;
1365 P[16] = a1 * X[2];
1366 P[17] = a3 * X[2];
1367 P[18] = a5 * X[2];
1368 P[19] = a15;
1369 P[20] = a1 * a16;
1370 P[21] = a16 * a3;
1371 P[22] = a17;
1372 P[23] = a19;
1373 P[24] = a20;
1374 P[25] = a22;
1375 P[26] = a23;
1376 P[27] = a21 * a3;
1377 P[28] = a24;
1378 P[29] = a26;
1379 P[30] = a21 * a8;
1380 P[31] = a28;
1381 P[32] = a1 * a27;
1382 P[33] = a29;
1383 P[34] = a31;
1384 P[35] = X[1];
1385 P[36] = a6;
1386 P[37] = a32;
1387 P[38] = a33;
1388 P[39] = a4 * X[1];
1389 P[40] = a34;
1390 P[41] = (1.0 / 2.0) * a8;
1391 P[42] = a9;
1392 P[43] = a2 * a34;
1393 P[44] = a35;
1394 P[45] = (1.0 / 3.0) * a11;
1395 P[46] = a0 * a35;
1396 P[47] = a36;
1397 P[48] = (1.0 / 4.0) * a13;
1398 P[49] = (1.0 / 5.0) * std::pow(X[1], 5);
1399 P[50] = a16;
1400 P[51] = a15;
1401 P[52] = a37;
1402 P[53] = a38;
1403 P[54] = a34 * X[2];
1404 P[55] = (1.0 / 2.0) * a17;
1405 P[56] = a19;
1406 P[57] = a35 * X[2];
1407 P[58] = (1.0 / 3.0) * a20;
1408 P[59] = a36 * X[2];
1409 P[60] = a25;
1410 P[61] = a24;
1411 P[62] = a21 * a32;
1412 P[63] = a39;
1413 P[64] = a41;
1414 P[65] = a21 * a35;
1415 P[66] = a42;
1416 P[67] = a29;
1417 P[68] = a27 * a34;
1418 P[69] = a43;
1419 P[70] = X[2];
1420 P[71] = a14;
1421 P[72] = a44;
1422 P[73] = a2 * X[2];
1423 P[74] = a4 * X[2];
1424 P[75] = a16;
1425 P[76] = a15;
1426 P[77] = a37;
1427 P[78] = a38;
1428 P[79] = a18;
1429 P[80] = a17;
1430 P[81] = a44 * a7;
1431 P[82] = a10 * X[2];
1432 P[83] = a20;
1433 P[84] = a12 * X[2];
1434 P[85] = a40;
1435 P[86] = (1.0 / 2.0) * a22;
1436 P[87] = a23;
1437 P[88] = a2 * a40;
1438 P[89] = (1.0 / 2.0) * a25;
1439 P[90] = a40 * a6;
1440 P[91] = a26;
1441 P[92] = a39;
1442 P[93] = a41;
1443 P[94] = a10 * a40;
1444 P[95] = a45;
1445 P[96] = (1.0 / 3.0) * a28;
1446 P[97] = a0 * a45;
1447 P[98] = (1.0 / 3.0) * a42;
1448 P[99] = a45 * a6;
1449 P[100] = a45 * a7;
1450 P[101] = (1.0 / 4.0) * a30;
1451 P[102] = (1.0 / 4.0) * a31;
1452 P[103] = (1.0 / 4.0) * a43;
1453 P[104] = (1.0 / 5.0) * std::pow(X[2], 5);
1454 return Pm;
1455 }
1456};
1457
1461
1462template <>
1463class OrthonormalBasis<1, 1>
1464{
1465 public:
1466 inline static constexpr int kDims = 1;
1467 inline static constexpr int kOrder = 1;
1468 inline static constexpr int kSize = 2;
1469
1470 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1471 {
1472 Vector<kSize> P;
1473 P[0] = 1;
1474 P[1] = std::numbers::sqrt3_v<Scalar> * (2 * X[0] - 1);
1475 return P;
1476 }
1477
1478 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1479 {
1481 Scalar* G = Gm.data();
1482 G[0] = 0;
1483 G[1] = 2 * std::numbers::sqrt3_v<Scalar>;
1484 return Gm;
1485 }
1486
1487 [[maybe_unused]] Matrix<kSize, kDims>
1488 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1489 {
1491 Scalar* P = Pm.data();
1492 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1493 P[0] = X[0];
1494 P[1] = a0 * ((X[0]) * (X[0])) - a0 * X[0];
1495 return Pm;
1496 }
1497};
1498
1499template <>
1500class OrthonormalBasis<1, 2>
1501{
1502 public:
1503 inline static constexpr int kDims = 1;
1504 inline static constexpr int kOrder = 2;
1505 inline static constexpr int kSize = 3;
1506
1507 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1508 {
1509 Vector<kSize> P;
1510 P[0] = 1;
1511 P[1] = std::numbers::sqrt3_v<Scalar> * (2 * X[0] - 1);
1512 P[2] = std::sqrt(5) * (6 * ((X[0]) * (X[0])) - 6 * X[0] + 1);
1513 return P;
1514 }
1515
1516 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1517 {
1519 Scalar* G = Gm.data();
1520 G[0] = 0;
1521 G[1] = 2 * std::numbers::sqrt3_v<Scalar>;
1522 G[2] = std::sqrt(5) * (12 * X[0] - 6);
1523 return Gm;
1524 }
1525
1526 [[maybe_unused]] Matrix<kSize, kDims>
1527 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1528 {
1530 Scalar* P = Pm.data();
1531 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1532 Scalar const a1 = ((X[0]) * (X[0]));
1533 Scalar const a2 = std::sqrt(5);
1534 P[0] = X[0];
1535 P[1] = a0 * a1 - a0 * X[0];
1536 P[2] = -3 * a1 * a2 + 2 * a2 * ((X[0]) * (X[0]) * (X[0])) + a2 * X[0];
1537 return Pm;
1538 }
1539};
1540
1541template <>
1542class OrthonormalBasis<1, 3>
1543{
1544 public:
1545 inline static constexpr int kDims = 1;
1546 inline static constexpr int kOrder = 3;
1547 inline static constexpr int kSize = 4;
1548
1549 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1550 {
1551 Vector<kSize> P;
1552 Scalar const a0 = 2 * X[0] - 1;
1553 Scalar const a1 = ((X[0]) * (X[0]));
1554 P[0] = 1;
1555 P[1] = std::numbers::sqrt3_v<Scalar> * a0;
1556 P[2] = std::sqrt(5) * (6 * a1 - 6 * X[0] + 1);
1557 P[3] = std::sqrt(7) * a0 * (10 * a1 - 10 * X[0] + 1);
1558 return P;
1559 }
1560
1561 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1562 {
1564 Scalar* G = Gm.data();
1565 Scalar const a0 = std::sqrt(7);
1566 G[0] = 0;
1567 G[1] = 2 * std::numbers::sqrt3_v<Scalar>;
1568 G[2] = std::sqrt(5) * (12 * X[0] - 6);
1569 G[3] = a0 * (2 * X[0] - 1) * (20 * X[0] - 10) +
1570 2 * a0 * (10 * ((X[0]) * (X[0])) - 10 * X[0] + 1);
1571 return Gm;
1572 }
1573
1574 [[maybe_unused]] Matrix<kSize, kDims>
1575 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1576 {
1578 Scalar* P = Pm.data();
1579 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1580 Scalar const a1 = ((X[0]) * (X[0]));
1581 Scalar const a2 = std::sqrt(5);
1582 Scalar const a3 = ((X[0]) * (X[0]) * (X[0]));
1583 Scalar const a4 = std::sqrt(7);
1584 P[0] = X[0];
1585 P[1] = a0 * a1 - a0 * X[0];
1586 P[2] = -3 * a1 * a2 + 2 * a2 * a3 + a2 * X[0];
1587 P[3] =
1588 6 * a1 * a4 - 10 * a3 * a4 + 5 * a4 * ((X[0]) * (X[0]) * (X[0]) * (X[0])) - a4 * X[0];
1589 return Pm;
1590 }
1591};
1592
1593template <>
1594class OrthonormalBasis<1, 4>
1595{
1596 public:
1597 inline static constexpr int kDims = 1;
1598 inline static constexpr int kOrder = 4;
1599 inline static constexpr int kSize = 5;
1600
1601 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1602 {
1603 Vector<kSize> P;
1604 Scalar const a0 = 2 * X[0] - 1;
1605 Scalar const a1 = ((X[0]) * (X[0]));
1606 P[0] = 1;
1607 P[1] = std::numbers::sqrt3_v<Scalar> * a0;
1608 P[2] = std::sqrt(5) * (6 * a1 - 6 * X[0] + 1);
1609 P[3] = std::sqrt(7) * a0 * (10 * a1 - 10 * X[0] + 1);
1610 P[4] = 270 * a1 + 210 * ((X[0]) * (X[0]) * (X[0]) * (X[0])) -
1611 420 * ((X[0]) * (X[0]) * (X[0])) - 60 * X[0] + 3;
1612 return P;
1613 }
1614
1615 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1616 {
1618 Scalar* G = Gm.data();
1619 Scalar const a0 = std::sqrt(7);
1620 Scalar const a1 = ((X[0]) * (X[0]));
1621 G[0] = 0;
1622 G[1] = 2 * std::numbers::sqrt3_v<Scalar>;
1623 G[2] = std::sqrt(5) * (12 * X[0] - 6);
1624 G[3] = a0 * (2 * X[0] - 1) * (20 * X[0] - 10) + 2 * a0 * (10 * a1 - 10 * X[0] + 1);
1625 G[4] = -1260 * a1 + 840 * ((X[0]) * (X[0]) * (X[0])) + 540 * X[0] - 60;
1626 return Gm;
1627 }
1628
1629 [[maybe_unused]] Matrix<kSize, kDims>
1630 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1631 {
1633 Scalar* P = Pm.data();
1634 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1635 Scalar const a1 = ((X[0]) * (X[0]));
1636 Scalar const a2 = std::sqrt(5);
1637 Scalar const a3 = ((X[0]) * (X[0]) * (X[0]));
1638 Scalar const a4 = std::sqrt(7);
1639 Scalar const a5 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
1640 P[0] = X[0];
1641 P[1] = a0 * a1 - a0 * X[0];
1642 P[2] = -3 * a1 * a2 + 2 * a2 * a3 + a2 * X[0];
1643 P[3] = 6 * a1 * a4 - 10 * a3 * a4 + 5 * a4 * a5 - a4 * X[0];
1644 P[4] = -30 * a1 + 90 * a3 - 105 * a5 + 42 * std::pow(X[0], 5) + 3 * X[0];
1645 return Pm;
1646 }
1647};
1648
1652
1653template <>
1654class OrthonormalBasis<2, 1>
1655{
1656 public:
1657 inline static constexpr int kDims = 2;
1658 inline static constexpr int kOrder = 1;
1659 inline static constexpr int kSize = 3;
1660
1661 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1662 {
1663 Vector<kSize> P;
1664 P[0] = std::numbers::sqrt2_v<Scalar>;
1665 P[1] = 2 * (3 * X[0] - 1);
1666 P[2] = 2 * std::numbers::sqrt3_v<Scalar> * (X[0] + 2 * X[1] - 1);
1667 return P;
1668 }
1669
1670 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1671 {
1673 Scalar* G = Gm.data();
1674 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1675 G[0] = 0;
1676 G[1] = 0;
1677 G[2] = 6;
1678 G[3] = 0;
1679 G[4] = 2 * a0;
1680 G[5] = 4 * a0;
1681 return Gm;
1682 }
1683
1684 [[maybe_unused]] Matrix<kSize, kDims>
1685 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1686 {
1688 Scalar* P = Pm.data();
1689 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
1690 Scalar const a1 = 2 * X[0];
1691 Scalar const a2 = ((X[0]) * (X[0]));
1692 Scalar const a3 = std::numbers::sqrt3_v<Scalar>;
1693 Scalar const a4 = 2 * a3;
1694 Scalar const a5 = -a4;
1695 P[0] = a0 * X[0];
1696 P[1] = -a1 + 3 * a2;
1697 P[2] = a2 * a3 + (4 * a3 * X[1] + a5) * X[0];
1698 P[3] = a0 * X[1];
1699 P[4] = 2 * (3 * X[0] - 1) * X[1];
1700 P[5] = a4 * ((X[1]) * (X[1])) + (a1 * a3 + a5) * X[1];
1701 return Pm;
1702 }
1703};
1704
1705template <>
1706class OrthonormalBasis<2, 2>
1707{
1708 public:
1709 inline static constexpr int kDims = 2;
1710 inline static constexpr int kOrder = 2;
1711 inline static constexpr int kSize = 6;
1712
1713 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1714 {
1715 Vector<kSize> P;
1716 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
1717 Scalar const a1 = X[0] + 2 * X[1] - 1;
1718 Scalar const a2 = ((X[0]) * (X[0]));
1719 Scalar const a3 = 6 * X[1];
1720 P[0] = a0;
1721 P[1] = 2 * (3 * X[0] - 1);
1722 P[2] = 2 * std::numbers::sqrt3_v<Scalar> * a1;
1723 P[3] = std::sqrt(6) * (10 * a2 - 8 * X[0] + 1);
1724 P[4] = 3 * a0 * a1 * (5 * X[0] - 1);
1725 P[5] = std::sqrt(30) * (a2 + a3 * X[0] - a3 - 2 * X[0] + 6 * ((X[1]) * (X[1])) + 1);
1726 return P;
1727 }
1728
1729 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1730 {
1732 Scalar* G = Gm.data();
1733 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1734 Scalar const a1 = std::numbers::sqrt2_v<Scalar>;
1735 Scalar const a2 = a1 * (5 * X[0] - 1);
1736 Scalar const a3 = std::sqrt(30);
1737 G[0] = 0;
1738 G[1] = 0;
1739 G[2] = 6;
1740 G[3] = 0;
1741 G[4] = 2 * a0;
1742 G[5] = 4 * a0;
1743 G[6] = std::sqrt(6) * (20 * X[0] - 8);
1744 G[7] = 0;
1745 G[8] = 15 * a1 * (X[0] + 2 * X[1] - 1) + 3 * a2;
1746 G[9] = 6 * a2;
1747 G[10] = a3 * (2 * X[0] + 6 * X[1] - 2);
1748 G[11] = a3 * (6 * X[0] + 12 * X[1] - 6);
1749 return Gm;
1750 }
1751
1752 [[maybe_unused]] Matrix<kSize, kDims>
1753 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1754 {
1756 Scalar* P = Pm.data();
1757 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
1758 Scalar const a1 = a0 * X[0];
1759 Scalar const a2 = 2 * X[0];
1760 Scalar const a3 = ((X[0]) * (X[0]));
1761 Scalar const a4 = std::numbers::sqrt3_v<Scalar>;
1762 Scalar const a5 = 2 * a4;
1763 Scalar const a6 = -a5;
1764 Scalar const a7 = std::sqrt(6);
1765 Scalar const a8 = ((X[0]) * (X[0]) * (X[0]));
1766 Scalar const a9 = 3 * a0;
1767 Scalar const a10 = -a9;
1768 Scalar const a11 = a0 * X[1];
1769 Scalar const a12 = std::sqrt(30);
1770 Scalar const a13 = 3 * a12;
1771 Scalar const a14 = 6 * a12;
1772 Scalar const a15 = ((X[1]) * (X[1]));
1773 Scalar const a16 = 3 * X[0];
1774 P[0] = a1;
1775 P[1] = -a2 + 3 * a3;
1776 P[2] = a3 * a4 + (4 * a4 * X[1] + a6) * X[0];
1777 P[3] = -4 * a3 * a7 + (10.0 / 3.0) * a7 * a8 + a7 * X[0];
1778 P[4] = 5 * a0 * a8 + a3 * (-9 * a0 + 15 * a11) + (-a10 - 6 * a11) * X[0];
1779 P[5] = (1.0 / 3.0) * a12 * a8 + a3 * (-a12 + a13 * X[1]) +
1780 (a12 + a14 * a15 - a14 * X[1]) * X[0];
1781 P[6] = a11;
1782 P[7] = 2 * (a16 - 1) * X[1];
1783 P[8] = a15 * a5 + (a2 * a4 + a6) * X[1];
1784 P[9] = a7 * (10 * a3 - 8 * X[0] + 1) * X[1];
1785 P[10] = a15 * (15 * a1 + a10) + (15 * a0 * a3 - 18 * a1 + a9) * X[1];
1786 P[11] = 2 * a12 * ((X[1]) * (X[1]) * (X[1])) + a15 * (a12 * a16 - a13) +
1787 (-a12 * a2 + a12 * a3 + a12) * X[1];
1788 return Pm;
1789 }
1790};
1791
1792template <>
1793class OrthonormalBasis<2, 3>
1794{
1795 public:
1796 inline static constexpr int kDims = 2;
1797 inline static constexpr int kOrder = 3;
1798 inline static constexpr int kSize = 10;
1799
1800 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1801 {
1802 Vector<kSize> P;
1803 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
1804 Scalar const a1 = X[0] + 2 * X[1] - 1;
1805 Scalar const a2 = 2 * a1;
1806 Scalar const a3 = std::sqrt(6);
1807 Scalar const a4 = ((X[0]) * (X[0]));
1808 Scalar const a5 = 6 * X[1];
1809 Scalar const a6 = ((X[1]) * (X[1]));
1810 Scalar const a7 = a4 - 2 * X[0] + 1;
1811 Scalar const a8 = a5 * X[0] - a5 + 6 * a6 + a7;
1812 Scalar const a9 = 10 * X[1];
1813 P[0] = a0;
1814 P[1] = 2 * (3 * X[0] - 1);
1815 P[2] = std::numbers::sqrt3_v<Scalar> * a2;
1816 P[3] = a3 * (10 * a4 - 8 * X[0] + 1);
1817 P[4] = 3 * a0 * a1 * (5 * X[0] - 1);
1818 P[5] = std::sqrt(30) * a8;
1819 P[6] = 2 * a0 * (-45 * a4 + 35 * ((X[0]) * (X[0]) * (X[0])) + 15 * X[0] - 1);
1820 P[7] = a2 * a3 * (21 * a4 - 12 * X[0] + 1);
1821 P[8] = 2 * std::sqrt(10) * a8 * (7 * X[0] - 1);
1822 P[9] = std::sqrt(14) * a2 * (10 * a6 + a7 + a9 * X[0] - a9);
1823 return P;
1824 }
1825
1826 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
1827 {
1829 Scalar* G = Gm.data();
1830 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
1831 Scalar const a1 = std::sqrt(6);
1832 Scalar const a2 = std::numbers::sqrt2_v<Scalar>;
1833 Scalar const a3 = a2 * (5 * X[0] - 1);
1834 Scalar const a4 = X[0] + 2 * X[1] - 1;
1835 Scalar const a5 = std::sqrt(30);
1836 Scalar const a6 = 6 * X[1];
1837 Scalar const a7 = 2 * X[0];
1838 Scalar const a8 = a7 - 2;
1839 Scalar const a9 = a6 + a8;
1840 Scalar const a10 = 6 * X[0] + 12 * X[1] - 6;
1841 Scalar const a11 = ((X[0]) * (X[0]));
1842 Scalar const a12 = a1 * (21 * a11 - 12 * X[0] + 1);
1843 Scalar const a13 = 2 * a4;
1844 Scalar const a14 = std::sqrt(10);
1845 Scalar const a15 = 2 * a14 * (7 * X[0] - 1);
1846 Scalar const a16 = ((X[1]) * (X[1]));
1847 Scalar const a17 = a11 - a7 + 1;
1848 Scalar const a18 = 10 * X[1];
1849 Scalar const a19 = std::sqrt(14);
1850 Scalar const a20 = a13 * a19;
1851 Scalar const a21 = a19 * (10 * a16 + a17 + a18 * X[0] - a18);
1852 G[0] = 0;
1853 G[1] = 0;
1854 G[2] = 6;
1855 G[3] = 0;
1856 G[4] = 2 * a0;
1857 G[5] = 4 * a0;
1858 G[6] = a1 * (20 * X[0] - 8);
1859 G[7] = 0;
1860 G[8] = 15 * a2 * a4 + 3 * a3;
1861 G[9] = 6 * a3;
1862 G[10] = a5 * a9;
1863 G[11] = a10 * a5;
1864 G[12] = 2 * a2 * (105 * a11 - 90 * X[0] + 15);
1865 G[13] = 0;
1866 G[14] = a1 * a13 * (42 * X[0] - 12) + 2 * a12;
1867 G[15] = 4 * a12;
1868 G[16] = 14 * a14 * (6 * a16 + a17 + a6 * X[0] - a6) + a15 * a9;
1869 G[17] = a10 * a15;
1870 G[18] = a20 * (a18 + a8) + 2 * a21;
1871 G[19] = a20 * (10 * X[0] + 20 * X[1] - 10) + 4 * a21;
1872 return Gm;
1873 }
1874
1875 [[maybe_unused]] Matrix<kSize, kDims>
1876 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
1877 {
1879 Scalar* P = Pm.data();
1880 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
1881 Scalar const a1 = a0 * X[0];
1882 Scalar const a2 = 2 * X[0];
1883 Scalar const a3 = ((X[0]) * (X[0]));
1884 Scalar const a4 = std::numbers::sqrt3_v<Scalar>;
1885 Scalar const a5 = 2 * a4;
1886 Scalar const a6 = -a5;
1887 Scalar const a7 = 4 * X[1];
1888 Scalar const a8 = std::sqrt(6);
1889 Scalar const a9 = a8 * X[0];
1890 Scalar const a10 = a3 * a8;
1891 Scalar const a11 = ((X[0]) * (X[0]) * (X[0]));
1892 Scalar const a12 = a11 * a8;
1893 Scalar const a13 = a0 * a11;
1894 Scalar const a14 = 3 * a0;
1895 Scalar const a15 = -a14;
1896 Scalar const a16 = a0 * X[1];
1897 Scalar const a17 = std::sqrt(30);
1898 Scalar const a18 = 3 * a17;
1899 Scalar const a19 = 6 * a17;
1900 Scalar const a20 = ((X[1]) * (X[1]));
1901 Scalar const a21 = 15 * a0 * a3;
1902 Scalar const a22 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
1903 Scalar const a23 = 2 * a8;
1904 Scalar const a24 = -a23;
1905 Scalar const a25 = a8 * X[1];
1906 Scalar const a26 = std::sqrt(10);
1907 Scalar const a27 = a26 * X[1];
1908 Scalar const a28 = 2 * a26;
1909 Scalar const a29 = a20 * a26;
1910 Scalar const a30 = std::sqrt(14);
1911 Scalar const a31 = 2 * a30;
1912 Scalar const a32 = -a31;
1913 Scalar const a33 = a30 * X[1];
1914 Scalar const a34 = 24 * a33;
1915 Scalar const a35 = a20 * a30;
1916 Scalar const a36 = ((X[1]) * (X[1]) * (X[1]));
1917 Scalar const a37 = 3 * X[0];
1918 Scalar const a38 = a26 * X[0];
1919 Scalar const a39 = a26 * a3;
1920 Scalar const a40 = 20 * a30;
1921 Scalar const a41 = 12 * a30;
1922 Scalar const a42 = a30 * X[0];
1923 P[0] = a1;
1924 P[1] = -a2 + 3 * a3;
1925 P[2] = a3 * a4 + (a4 * a7 + a6) * X[0];
1926 P[3] = -4 * a10 + (10.0 / 3.0) * a12 + a9;
1927 P[4] = 5 * a13 + a3 * (-9 * a0 + 15 * a16) + (-a15 - 6 * a16) * X[0];
1928 P[5] = (1.0 / 3.0) * a11 * a17 + a3 * (-a17 + a18 * X[1]) +
1929 (a17 + a19 * a20 - a19 * X[1]) * X[0];
1930 P[6] = (35.0 / 2.0) * a0 * a22 - 2 * a1 - 30 * a13 + a21;
1931 P[7] = a11 * (28 * a25 - 22 * a8) + (21.0 / 2.0) * a22 * a8 + a3 * (-24 * a25 + 13 * a8) +
1932 (a24 + a7 * a8) * X[0];
1933 P[8] = a11 * (-10 * a26 + 28 * a27) + (7.0 / 2.0) * a22 * a26 +
1934 a3 * (9 * a26 - 48 * a27 + 42 * a29) + (12 * a26 * X[1] - a28 - 12 * a29) * X[0];
1935 P[9] = a11 * (a32 + 8 * a33) + (1.0 / 2.0) * a22 * a30 + a3 * (3 * a30 - a34 + 30 * a35) +
1936 (40 * a30 * a36 + a32 + a34 - 60 * a35) * X[0];
1937 P[10] = a16;
1938 P[11] = 2 * (a37 - 1) * X[1];
1939 P[12] = a20 * a5 + (a2 * a4 + a6) * X[1];
1940 P[13] = a25 * (10 * a3 - 8 * X[0] + 1);
1941 P[14] = a20 * (15 * a1 + a15) + (-18 * a1 + a14 + a21) * X[1];
1942 P[15] = 2 * a17 * a36 + a20 * (a17 * a37 - a18) + (-a17 * a2 + a17 * a3 + a17) * X[1];
1943 P[16] = 2 * a16 * (35 * a11 - 45 * a3 + 15 * X[0] - 1);
1944 P[17] = a20 * (42 * a10 + a23 - 24 * a9) + (-66 * a10 + 42 * a12 + a24 + 26 * a9) * X[1];
1945 P[18] = a20 * (6 * a26 - 48 * a38 + 42 * a39) + a36 * (-4 * a26 + 28 * a38) +
1946 (14 * a11 * a26 - a28 + 18 * a38 - 30 * a39) * X[1];
1947 P[19] = a20 * (a3 * a41 + a41 - 24 * a42) + 10 * a30 * ((X[1]) * (X[1]) * (X[1]) * (X[1])) +
1948 a36 * (a40 * X[0] - a40) + (a11 * a31 - 6 * a3 * a30 + a32 + 6 * a42) * X[1];
1949 return Pm;
1950 }
1951};
1952
1953template <>
1954class OrthonormalBasis<2, 4>
1955{
1956 public:
1957 inline static constexpr int kDims = 2;
1958 inline static constexpr int kOrder = 4;
1959 inline static constexpr int kSize = 15;
1960
1961 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
1962 {
1963 Vector<kSize> P;
1964 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
1965 Scalar const a1 = X[0] + 2 * X[1] - 1;
1966 Scalar const a2 = 2 * a1;
1967 Scalar const a3 = std::sqrt(6);
1968 Scalar const a4 = ((X[0]) * (X[0]));
1969 Scalar const a5 = std::sqrt(30);
1970 Scalar const a6 = 6 * X[1];
1971 Scalar const a7 = ((X[1]) * (X[1]));
1972 Scalar const a8 = a4 - 2 * X[0] + 1;
1973 Scalar const a9 = a6 * X[0] - a6 + 6 * a7 + a8;
1974 Scalar const a10 = ((X[0]) * (X[0]) * (X[0]));
1975 Scalar const a11 = std::sqrt(10);
1976 Scalar const a12 = 10 * X[1];
1977 Scalar const a13 = a12 * X[0] - a12 + 10 * a7 + a8;
1978 Scalar const a14 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
1979 Scalar const a15 = 20 * X[1];
1980 Scalar const a16 = 90 * a7;
1981 Scalar const a17 = 140 * ((X[1]) * (X[1]) * (X[1]));
1982 Scalar const a18 = 60 * X[1];
1983 P[0] = a0;
1984 P[1] = 2 * (3 * X[0] - 1);
1985 P[2] = std::numbers::sqrt3_v<Scalar> * a2;
1986 P[3] = a3 * (10 * a4 - 8 * X[0] + 1);
1987 P[4] = 3 * a0 * a1 * (5 * X[0] - 1);
1988 P[5] = a5 * a9;
1989 P[6] = 2 * a0 * (35 * a10 - 45 * a4 + 15 * X[0] - 1);
1990 P[7] = a2 * a3 * (21 * a4 - 12 * X[0] + 1);
1991 P[8] = 2 * a11 * a9 * (7 * X[0] - 1);
1992 P[9] = std::sqrt(14) * a13 * a2;
1993 P[10] = a11 * (-224 * a10 + 126 * a14 + 126 * a4 - 24 * X[0] + 1);
1994 P[11] = a1 * a5 * (84 * a10 - 84 * a4 + 21 * X[0] - 1);
1995 P[12] = 5 * a0 * a9 * (36 * a4 - 16 * X[0] + 1);
1996 P[13] = std::sqrt(70) * a1 * a13 * (9 * X[0] - 1);
1997 P[14] = 3 * a11 *
1998 (a10 * a15 - 4 * a10 + a14 - a15 + a16 * a4 + a16 + a17 * X[0] - a17 - a18 * a4 +
1999 a18 * X[0] + 6 * a4 - 180 * a7 * X[0] - 4 * X[0] +
2000 70 * ((X[1]) * (X[1]) * (X[1]) * (X[1])) + 1);
2001 return P;
2002 }
2003
2004 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
2005 {
2007 Scalar* G = Gm.data();
2008 Scalar const a0 = std::numbers::sqrt3_v<Scalar>;
2009 Scalar const a1 = std::sqrt(6);
2010 Scalar const a2 = std::numbers::sqrt2_v<Scalar>;
2011 Scalar const a3 = a2 * (5 * X[0] - 1);
2012 Scalar const a4 = X[0] + 2 * X[1] - 1;
2013 Scalar const a5 = std::sqrt(30);
2014 Scalar const a6 = 6 * X[1];
2015 Scalar const a7 = 2 * X[0];
2016 Scalar const a8 = a7 - 2;
2017 Scalar const a9 = a6 + a8;
2018 Scalar const a10 = 6 * X[0] + 12 * X[1] - 6;
2019 Scalar const a11 = ((X[0]) * (X[0]));
2020 Scalar const a12 = 12 * X[0];
2021 Scalar const a13 = a1 * (21 * a11 - a12 + 1);
2022 Scalar const a14 = 2 * a4;
2023 Scalar const a15 = std::sqrt(10);
2024 Scalar const a16 = 2 * a15 * (7 * X[0] - 1);
2025 Scalar const a17 = ((X[1]) * (X[1]));
2026 Scalar const a18 = a11 - a7 + 1;
2027 Scalar const a19 = 6 * a17 + a18 + a6 * X[0] - a6;
2028 Scalar const a20 = 10 * X[1];
2029 Scalar const a21 = a20 + a8;
2030 Scalar const a22 = std::sqrt(14);
2031 Scalar const a23 = a14 * a22;
2032 Scalar const a24 = 10 * a17 + a18 + a20 * X[0] - a20;
2033 Scalar const a25 = a22 * a24;
2034 Scalar const a26 = 10 * X[0] + 20 * X[1] - 10;
2035 Scalar const a27 = ((X[0]) * (X[0]) * (X[0]));
2036 Scalar const a28 = a5 * (-84 * a11 + 84 * a27 + 21 * X[0] - 1);
2037 Scalar const a29 = 5 * a2;
2038 Scalar const a30 = a29 * (36 * a11 - 16 * X[0] + 1);
2039 Scalar const a31 = std::sqrt(70);
2040 Scalar const a32 = 9 * X[0] - 1;
2041 Scalar const a33 = a31 * a32 * a4;
2042 Scalar const a34 = a24 * a31;
2043 Scalar const a35 = a32 * a34;
2044 Scalar const a36 = 60 * X[1];
2045 Scalar const a37 = 180 * a17;
2046 Scalar const a38 = ((X[1]) * (X[1]) * (X[1]));
2047 Scalar const a39 = X[0] * X[1];
2048 Scalar const a40 = 3 * a15;
2049 Scalar const a41 = 180 * X[1];
2050 Scalar const a42 = 420 * a17;
2051 G[0] = 0;
2052 G[1] = 0;
2053 G[2] = 6;
2054 G[3] = 0;
2055 G[4] = 2 * a0;
2056 G[5] = 4 * a0;
2057 G[6] = a1 * (20 * X[0] - 8);
2058 G[7] = 0;
2059 G[8] = 15 * a2 * a4 + 3 * a3;
2060 G[9] = 6 * a3;
2061 G[10] = a5 * a9;
2062 G[11] = a10 * a5;
2063 G[12] = 2 * a2 * (105 * a11 - 90 * X[0] + 15);
2064 G[13] = 0;
2065 G[14] = a1 * a14 * (42 * X[0] - 12) + 2 * a13;
2066 G[15] = 4 * a13;
2067 G[16] = 14 * a15 * a19 + a16 * a9;
2068 G[17] = a10 * a16;
2069 G[18] = a21 * a23 + 2 * a25;
2070 G[19] = a23 * a26 + 4 * a25;
2071 G[20] = a15 * (-672 * a11 + 504 * a27 + 252 * X[0] - 24);
2072 G[21] = 0;
2073 G[22] = a28 + a4 * a5 * (252 * a11 - 168 * X[0] + 21);
2074 G[23] = 2 * a28;
2075 G[24] = a19 * a29 * (72 * X[0] - 16) + a30 * a9;
2076 G[25] = a10 * a30;
2077 G[26] = a21 * a33 + 9 * a34 * a4 + a35;
2078 G[27] = a26 * a33 + 2 * a35;
2079 G[28] = a40 * (a11 * a36 - 12 * a11 + a12 + 4 * a27 + a36 + a37 * X[0] - a37 + 140 * a38 -
2080 120 * a39 - 4);
2081 G[29] = a40 * (a11 * a41 - 60 * a11 + 20 * a27 + 280 * a38 - 360 * a39 + a41 + a42 * X[0] -
2082 a42 + 60 * X[0] - 20);
2083 return Gm;
2084 }
2085
2086 [[maybe_unused]] Matrix<kSize, kDims>
2087 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
2088 {
2090 Scalar* P = Pm.data();
2091 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
2092 Scalar const a1 = a0 * X[0];
2093 Scalar const a2 = 2 * X[0];
2094 Scalar const a3 = ((X[0]) * (X[0]));
2095 Scalar const a4 = std::numbers::sqrt3_v<Scalar>;
2096 Scalar const a5 = 2 * a4;
2097 Scalar const a6 = -a5;
2098 Scalar const a7 = 4 * X[1];
2099 Scalar const a8 = std::sqrt(6);
2100 Scalar const a9 = a8 * X[0];
2101 Scalar const a10 = a3 * a8;
2102 Scalar const a11 = ((X[0]) * (X[0]) * (X[0]));
2103 Scalar const a12 = a11 * a8;
2104 Scalar const a13 = 5 * a0;
2105 Scalar const a14 = 3 * a0;
2106 Scalar const a15 = -a14;
2107 Scalar const a16 = a0 * X[1];
2108 Scalar const a17 = std::sqrt(30);
2109 Scalar const a18 = a11 * a17;
2110 Scalar const a19 = -a17;
2111 Scalar const a20 = 3 * a17;
2112 Scalar const a21 = 6 * a17;
2113 Scalar const a22 = ((X[1]) * (X[1]));
2114 Scalar const a23 = 15 * a0;
2115 Scalar const a24 = a23 * a3;
2116 Scalar const a25 = 30 * a0;
2117 Scalar const a26 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
2118 Scalar const a27 = a0 * a26;
2119 Scalar const a28 = 2 * a8;
2120 Scalar const a29 = -a28;
2121 Scalar const a30 = a8 * X[1];
2122 Scalar const a31 = std::sqrt(10);
2123 Scalar const a32 = a26 * a31;
2124 Scalar const a33 = a31 * X[1];
2125 Scalar const a34 = 2 * a31;
2126 Scalar const a35 = a22 * a31;
2127 Scalar const a36 = std::sqrt(14);
2128 Scalar const a37 = 2 * a36;
2129 Scalar const a38 = -a37;
2130 Scalar const a39 = a36 * X[1];
2131 Scalar const a40 = 24 * a39;
2132 Scalar const a41 = a22 * a36;
2133 Scalar const a42 = ((X[1]) * (X[1]) * (X[1]));
2134 Scalar const a43 = a31 * X[0];
2135 Scalar const a44 = a3 * a31;
2136 Scalar const a45 = a11 * a31;
2137 Scalar const a46 = std::pow(X[0], 5);
2138 Scalar const a47 = a31 * a46;
2139 Scalar const a48 = a17 * X[1];
2140 Scalar const a49 = 42 * a17;
2141 Scalar const a50 = a0 * a22;
2142 Scalar const a51 = std::sqrt(70);
2143 Scalar const a52 = a51 * X[1];
2144 Scalar const a53 = 10 * a51;
2145 Scalar const a54 = a22 * a51;
2146 Scalar const a55 = a42 * a51;
2147 Scalar const a56 = -6 * a51;
2148 Scalar const a57 = 3 * a31;
2149 Scalar const a58 = 6 * a31;
2150 Scalar const a59 = -60 * a33;
2151 Scalar const a60 = 90 * a31;
2152 Scalar const a61 = 270 * a35;
2153 Scalar const a62 = a31 * a42;
2154 Scalar const a63 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
2155 Scalar const a64 = 3 * X[0];
2156 Scalar const a65 = a17 * a3;
2157 Scalar const a66 = 30 * a31;
2158 Scalar const a67 = 20 * a36;
2159 Scalar const a68 = 12 * a36;
2160 Scalar const a69 = 24 * X[0];
2161 Scalar const a70 = 6 * a36;
2162 Scalar const a71 = a17 * X[0];
2163 Scalar const a72 = a0 * a3;
2164 Scalar const a73 = a0 * a11;
2165 Scalar const a74 = a51 * X[0];
2166 Scalar const a75 = a3 * a51;
2167 Scalar const a76 = a11 * a51;
2168 Scalar const a77 = a3 * a60;
2169 P[0] = a1;
2170 P[1] = -a2 + 3 * a3;
2171 P[2] = a3 * a4 + (a4 * a7 + a6) * X[0];
2172 P[3] = -4 * a10 + (10.0 / 3.0) * a12 + a9;
2173 P[4] = a11 * a13 + a3 * (-9 * a0 + 15 * a16) + (-a15 - 6 * a16) * X[0];
2174 P[5] = (1.0 / 3.0) * a18 + a3 * (a19 + a20 * X[1]) + (a17 + a21 * a22 - a21 * X[1]) * X[0];
2175 P[6] = -2 * a1 - a11 * a25 + a24 + (35.0 / 2.0) * a27;
2176 P[7] = a11 * (28 * a30 - 22 * a8) + (21.0 / 2.0) * a26 * a8 + a3 * (-24 * a30 + 13 * a8) +
2177 (a29 + a7 * a8) * X[0];
2178 P[8] = a11 * (-10 * a31 + 28 * a33) + a3 * (9 * a31 - 48 * a33 + 42 * a35) +
2179 (7.0 / 2.0) * a32 + (12 * a31 * X[1] - a34 - 12 * a35) * X[0];
2180 P[9] = a11 * (a38 + 8 * a39) + (1.0 / 2.0) * a26 * a36 + a3 * (3 * a36 - a40 + 30 * a41) +
2181 (40 * a36 * a42 + a38 + a40 - 60 * a41) * X[0];
2182 P[10] = -56 * a32 + a43 - 12 * a44 + 42 * a45 + (126.0 / 5.0) * a47;
2183 P[11] = a11 * (35 * a17 - 56 * a48) + (84.0 / 5.0) * a17 * a46 + a26 * (a49 * X[1] - a49) +
2184 a3 * (-11 * a17 + 21 * a48) + (-a19 - 2 * a48) * X[0];
2185 P[12] = 36 * a0 * a46 + a11 * (115 * a0 - 520 * a16 + 360 * a50) +
2186 a26 * (-110 * a0 + 270 * a16) + a3 * (255 * a0 * X[1] - 45 * a0 - 240 * a50) +
2187 (a13 - 30 * a16 + a22 * a25) * X[0];
2188 P[13] = a11 * (-76 * a52 + a53 + 90 * a54) + a26 * (-7 * a51 + 27 * a52) +
2189 a3 * (66 * a52 - 150 * a54 + 90 * a55 + a56) + (9.0 / 5.0) * a46 * a51 +
2190 (30 * a22 * a51 + a51 - 12 * a52 - 20 * a55) * X[0];
2191 P[14] = a11 * (a22 * a60 + a58 + a59) + a26 * (15 * a33 - a57) +
2192 a3 * (-a58 + a60 * X[1] - a61 + 210 * a62) + (3.0 / 5.0) * a47 +
2193 (210 * a31 * a63 + a57 + a59 + a61 - 420 * a62) * X[0];
2194 P[15] = a16;
2195 P[16] = 2 * (a64 - 1) * X[1];
2196 P[17] = a22 * a5 + (a2 * a4 + a6) * X[1];
2197 P[18] = a30 * (10 * a3 - 8 * X[0] + 1);
2198 P[19] = a22 * (15 * a1 + a15) + (-18 * a1 + a14 + a24) * X[1];
2199 P[20] = 2 * a17 * a42 + a22 * (a17 * a64 - a20) + (-a17 * a2 + a17 + a65) * X[1];
2200 P[21] = 2 * a16 * (35 * a11 - 45 * a3 + 15 * X[0] - 1);
2201 P[22] = a22 * (42 * a10 + a28 - 24 * a9) + (-66 * a10 + 42 * a12 + a29 + 26 * a9) * X[1];
2202 P[23] = a22 * (-48 * a43 + 42 * a44 + a58) + a42 * (-4 * a31 + 28 * a43) +
2203 (-a3 * a66 - a34 + 18 * a43 + 14 * a45) * X[1];
2204 P[24] = a22 * (a3 * a68 - a36 * a69 + a68) + 10 * a36 * a63 + a42 * (a67 * X[0] - a67) +
2205 (a11 * a37 - a3 * a70 + a38 + a70 * X[0]) * X[1];
2206 P[25] = a33 * (-224 * a11 + 126 * a26 + 126 * a3 - a69 + 1);
2207 P[26] = a22 * (84 * a18 + a19 - 84 * a65 + 21 * a71) +
2208 (84 * a17 * a26 + a17 - 168 * a18 + 105 * a65 - 22 * a71) * X[1];
2209 P[27] = a22 * (255 * a1 - a23 - 780 * a72 + 540 * a73) +
2210 a42 * (10 * a0 - 160 * a1 + 360 * a72) +
2211 (-90 * a1 + a13 + 180 * a27 + 345 * a72 - 440 * a73) * X[1];
2212 P[28] = a22 * (a56 + 66 * a74 - 114 * a75 + 54 * a76) + a42 * (a53 - 100 * a74 + 90 * a75) +
2213 a63 * (-5 * a51 + 45 * a74) +
2214 (9 * a26 * a51 + a51 - 12 * a74 + 30 * a75 - 28 * a76) * X[1];
2215 P[29] = a22 * (a11 * a66 + 90 * a43 - a66 - a77) + 42 * a31 * std::pow(X[1], 5) +
2216 a42 * (-180 * a43 + a60 + a77) + a63 * (-105 * a31 + 105 * a43) +
2217 (a26 * a57 - 12 * a43 + 18 * a44 - 12 * a45 + a57) * X[1];
2218 return Pm;
2219 }
2220};
2221
2225
2226template <>
2227class OrthonormalBasis<3, 1>
2228{
2229 public:
2230 inline static constexpr int kDims = 3;
2231 inline static constexpr int kOrder = 1;
2232 inline static constexpr int kSize = 4;
2233
2234 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
2235 {
2236 Vector<kSize> P;
2237 Scalar const a0 = X[0] - 1;
2238 P[0] = std::sqrt(6);
2239 P[1] = std::sqrt(10) * (4 * X[0] - 1);
2240 P[2] = 2 * std::sqrt(5) * (a0 + 3 * X[1]);
2241 P[3] = 2 * std::sqrt(15) * (a0 + X[1] + 2 * X[2]);
2242 return P;
2243 }
2244
2245 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
2246 {
2248 Scalar* G = Gm.data();
2249 Scalar const a0 = std::sqrt(5);
2250 Scalar const a1 = std::sqrt(15);
2251 Scalar const a2 = 2 * a1;
2252 G[0] = 0;
2253 G[1] = 0;
2254 G[2] = 0;
2255 G[3] = 4 * std::sqrt(10);
2256 G[4] = 0;
2257 G[5] = 0;
2258 G[6] = 2 * a0;
2259 G[7] = 6 * a0;
2260 G[8] = 0;
2261 G[9] = a2;
2262 G[10] = a2;
2263 G[11] = 4 * a1;
2264 return Gm;
2265 }
2266
2267 [[maybe_unused]] Matrix<kSize, kDims>
2268 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
2269 {
2271 Scalar* P = Pm.data();
2272 Scalar const a0 = std::sqrt(6);
2273 Scalar const a1 = std::sqrt(10);
2274 Scalar const a2 = ((X[0]) * (X[0]));
2275 Scalar const a3 = std::sqrt(5);
2276 Scalar const a4 = 2 * a3;
2277 Scalar const a5 = -a4;
2278 Scalar const a6 = std::sqrt(15);
2279 Scalar const a7 = 2 * a6;
2280 Scalar const a8 = a7 * X[1];
2281 Scalar const a9 = -a7;
2282 Scalar const a10 = 4 * a6 * X[2] + a9;
2283 Scalar const a11 = a1 * (4 * X[0] - 1);
2284 Scalar const a12 = ((X[1]) * (X[1]));
2285 Scalar const a13 = a7 * X[0];
2286 P[0] = a0 * X[0];
2287 P[1] = 2 * a1 * a2 - a1 * X[0];
2288 P[2] = a2 * a3 + (6 * a3 * X[1] + a5) * X[0];
2289 P[3] = a2 * a6 + (a10 + a8) * X[0];
2290 P[4] = a0 * X[1];
2291 P[5] = a11 * X[1];
2292 P[6] = 3 * a12 * a3 + (a4 * X[0] + a5) * X[1];
2293 P[7] = a12 * a6 + (a10 + a13) * X[1];
2294 P[8] = a0 * X[2];
2295 P[9] = a11 * X[2];
2296 P[10] = a4 * (X[0] + 3 * X[1] - 1) * X[2];
2297 P[11] = a7 * ((X[2]) * (X[2])) + (a13 + a8 + a9) * X[2];
2298 return Pm;
2299 }
2300};
2301
2302template <>
2303class OrthonormalBasis<3, 2>
2304{
2305 public:
2306 inline static constexpr int kDims = 3;
2307 inline static constexpr int kOrder = 2;
2308 inline static constexpr int kSize = 10;
2309
2310 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
2311 {
2312 Vector<kSize> P;
2313 Scalar const a0 = X[0] - 1;
2314 Scalar const a1 = 2 * a0 + 6 * X[1];
2315 Scalar const a2 = a0 + X[1] + 2 * X[2];
2316 Scalar const a3 = 2 * a2;
2317 Scalar const a4 = std::sqrt(14);
2318 Scalar const a5 = ((X[0]) * (X[0]));
2319 Scalar const a6 = 6 * X[0];
2320 Scalar const a7 = a6 - 1;
2321 Scalar const a8 = 8 * X[1];
2322 Scalar const a9 = ((X[1]) * (X[1]));
2323 Scalar const a10 = 2 * X[0];
2324 Scalar const a11 = -a10 + a5 + 1;
2325 Scalar const a12 = 6 * X[2];
2326 P[0] = std::sqrt(6);
2327 P[1] = std::sqrt(10) * (4 * X[0] - 1);
2328 P[2] = std::sqrt(5) * a1;
2329 P[3] = std::sqrt(15) * a3;
2330 P[4] = a4 * (15 * a5 - 10 * X[0] + 1);
2331 P[5] = std::sqrt(7) * a1 * a7;
2332 P[6] = std::sqrt(42) * (a11 + a8 * X[0] - a8 + 10 * a9);
2333 P[7] = std::sqrt(21) * a3 * a7;
2334 P[8] = 3 * a2 * a4 * (a0 + 5 * X[1]);
2335 P[9] = std::sqrt(210) * (a10 * X[1] + a11 + a12 * X[1] - a12 + a6 * X[2] + a9 - 2 * X[1] +
2336 6 * ((X[2]) * (X[2])));
2337 return P;
2338 }
2339
2340 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
2341 {
2343 Scalar* G = Gm.data();
2344 Scalar const a0 = std::sqrt(5);
2345 Scalar const a1 = std::sqrt(15);
2346 Scalar const a2 = 2 * a1;
2347 Scalar const a3 = std::sqrt(14);
2348 Scalar const a4 = std::sqrt(7);
2349 Scalar const a5 = 6 * X[0];
2350 Scalar const a6 = a5 - 1;
2351 Scalar const a7 = a4 * a6;
2352 Scalar const a8 = X[0] - 1;
2353 Scalar const a9 = std::sqrt(42);
2354 Scalar const a10 = 2 * X[0] - 2;
2355 Scalar const a11 = std::sqrt(21);
2356 Scalar const a12 = a11 * a6;
2357 Scalar const a13 = 2 * a12;
2358 Scalar const a14 = a8 + X[1] + 2 * X[2];
2359 Scalar const a15 = a8 + 5 * X[1];
2360 Scalar const a16 = 3 * a3;
2361 Scalar const a17 = a15 * a16;
2362 Scalar const a18 = std::sqrt(210);
2363 Scalar const a19 = a18 * (a10 + 2 * X[1] + 6 * X[2]);
2364 G[0] = 0;
2365 G[1] = 0;
2366 G[2] = 0;
2367 G[3] = 4 * std::sqrt(10);
2368 G[4] = 0;
2369 G[5] = 0;
2370 G[6] = 2 * a0;
2371 G[7] = 6 * a0;
2372 G[8] = 0;
2373 G[9] = a2;
2374 G[10] = a2;
2375 G[11] = 4 * a1;
2376 G[12] = a3 * (30 * X[0] - 10);
2377 G[13] = 0;
2378 G[14] = 0;
2379 G[15] = 12 * a4 * (a8 + 3 * X[1]) + 2 * a7;
2380 G[16] = 6 * a7;
2381 G[17] = 0;
2382 G[18] = a9 * (a10 + 8 * X[1]);
2383 G[19] = a9 * (8 * X[0] + 20 * X[1] - 8);
2384 G[20] = 0;
2385 G[21] = 12 * a11 * a14 + a13;
2386 G[22] = a13;
2387 G[23] = 4 * a12;
2388 G[24] = a14 * a16 + a17;
2389 G[25] = 15 * a14 * a3 + a17;
2390 G[26] = 6 * a15 * a3;
2391 G[27] = a19;
2392 G[28] = a19;
2393 G[29] = a18 * (a5 + 6 * X[1] + 12 * X[2] - 6);
2394 return Gm;
2395 }
2396
2397 [[maybe_unused]] Matrix<kSize, kDims>
2398 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
2399 {
2401 Scalar* P = Pm.data();
2402 Scalar const a0 = std::sqrt(6);
2403 Scalar const a1 = std::sqrt(10);
2404 Scalar const a2 = ((X[0]) * (X[0]));
2405 Scalar const a3 = std::sqrt(5);
2406 Scalar const a4 = 2 * a3;
2407 Scalar const a5 = -a4;
2408 Scalar const a6 = 6 * X[1];
2409 Scalar const a7 = std::sqrt(15);
2410 Scalar const a8 = 2 * a7;
2411 Scalar const a9 = a8 * X[1];
2412 Scalar const a10 = -a8;
2413 Scalar const a11 = 4 * X[2];
2414 Scalar const a12 = a10 + a11 * a7;
2415 Scalar const a13 = std::sqrt(14);
2416 Scalar const a14 = a13 * X[0];
2417 Scalar const a15 = 5 * a13;
2418 Scalar const a16 = ((X[0]) * (X[0]) * (X[0]));
2419 Scalar const a17 = a13 * a16;
2420 Scalar const a18 = std::sqrt(7);
2421 Scalar const a19 = 4 * a16;
2422 Scalar const a20 = 18 * X[1];
2423 Scalar const a21 = std::sqrt(42);
2424 Scalar const a22 = (1.0 / 3.0) * a16;
2425 Scalar const a23 = 4 * a21;
2426 Scalar const a24 = 8 * X[1];
2427 Scalar const a25 = ((X[1]) * (X[1]));
2428 Scalar const a26 = 10 * a25;
2429 Scalar const a27 = std::sqrt(21);
2430 Scalar const a28 = 2 * a27;
2431 Scalar const a29 = -a28;
2432 Scalar const a30 = a28 * X[1];
2433 Scalar const a31 = a11 * a27;
2434 Scalar const a32 = 12 * a27;
2435 Scalar const a33 = 3 * a13;
2436 Scalar const a34 = -a33;
2437 Scalar const a35 = 9 * a13;
2438 Scalar const a36 = 6 * X[2];
2439 Scalar const a37 = -a13 * a36 + a33;
2440 Scalar const a38 = 15 * a13;
2441 Scalar const a39 = -a13 * a20 + a25 * a38;
2442 Scalar const a40 = std::sqrt(210);
2443 Scalar const a41 = a40 * X[1];
2444 Scalar const a42 = 3 * a40;
2445 Scalar const a43 = -a40 + a42 * X[2];
2446 Scalar const a44 = ((X[2]) * (X[2]));
2447 Scalar const a45 = -a36 * a40 + 6 * a40 * a44 + a40;
2448 Scalar const a46 = a25 * a40 - 2 * a41;
2449 Scalar const a47 = 4 * X[0];
2450 Scalar const a48 = a1 * (a47 - 1);
2451 Scalar const a49 = a8 * X[0];
2452 Scalar const a50 = a13 * (15 * a2 - 10 * X[0] + 1);
2453 Scalar const a51 = a18 * X[0];
2454 Scalar const a52 = 2 * a18;
2455 Scalar const a53 = ((X[1]) * (X[1]) * (X[1]));
2456 Scalar const a54 = 2 * X[0];
2457 Scalar const a55 = 6 * X[0];
2458 Scalar const a56 = a27 * X[0];
2459 Scalar const a57 = a2 * a32 + a28 - 14 * a56;
2460 Scalar const a58 = -6 * a14 + a2 * a33;
2461 Scalar const a59 = a40 * X[0];
2462 Scalar const a60 = a2 * a40 - 2 * a59;
2463 Scalar const a61 = (X[0] + 3 * X[1] - 1) * X[2];
2464 Scalar const a62 = a32 * X[0];
2465 P[0] = a0 * X[0];
2466 P[1] = 2 * a1 * a2 - a1 * X[0];
2467 P[2] = a2 * a3 + (a3 * a6 + a5) * X[0];
2468 P[3] = a2 * a7 + (a12 + a9) * X[0];
2469 P[4] = a14 - a15 * a2 + 5 * a17;
2470 P[5] = a18 * a19 + a2 * (a18 * a20 - 7 * a18) + (-a18 * a6 + 2 * a18) * X[0];
2471 P[6] = a2 * (-a21 + a23 * X[1]) + a21 * a22 + (-a21 * a24 + a21 * a26 + a21) * X[0];
2472 P[7] = a19 * a27 + a2 * (a27 * a6 - 7 * a27 + a32 * X[2]) + (-a29 - a30 - a31) * X[0];
2473 P[8] = a17 + a2 * (a33 * X[2] + a34 + a35 * X[1]) +
2474 (30 * a13 * X[1] * X[2] + a37 + a39) * X[0];
2475 P[9] = a2 * (a41 + a43) + a22 * a40 + (a36 * a41 + a45 + a46) * X[0];
2476 P[10] = a0 * X[1];
2477 P[11] = a48 * X[1];
2478 P[12] = 3 * a25 * a3 + (a4 * X[0] + a5) * X[1];
2479 P[13] = a25 * a7 + (a12 + a49) * X[1];
2480 P[14] = a50 * X[1];
2481 P[15] = a25 * (-3 * a18 + 18 * a51) + (12 * a18 * a2 - 14 * a51 + a52) * X[1];
2482 P[16] = (10.0 / 3.0) * a21 * a53 + a25 * (a21 * a47 - a23) +
2483 (a2 * a21 - a21 * a54 + a21) * X[1];
2484 P[17] = a25 * (a27 * a55 - a27) + (-a31 + 24 * a56 * X[2] + a57) * X[1];
2485 P[18] = a15 * a53 + a25 * (9 * a14 - a35 + a38 * X[2]) + (a14 * a36 + a37 + a58) * X[1];
2486 P[19] = a25 * (a43 + a59) + (1.0 / 3.0) * a40 * a53 + (a36 * a59 + a45 + a60) * X[1];
2487 P[20] = a0 * X[2];
2488 P[21] = a48 * X[2];
2489 P[22] = a4 * a61;
2490 P[23] = a44 * a8 + (a10 + a49 + a9) * X[2];
2491 P[24] = a50 * X[2];
2492 P[25] = a52 * a61 * (a55 - 1);
2493 P[26] = a21 * (a2 + a24 * X[0] - a24 + a26 - a54 + 1) * X[2];
2494 P[27] = a44 * (a29 + a62) + (-a30 + a57 + a62 * X[1]) * X[2];
2495 P[28] = a44 * (3 * a14 + a34 + a38 * X[1]) + (a14 * a20 + a33 + a39 + a58) * X[2];
2496 P[29] = 2 * a40 * ((X[2]) * (X[2]) * (X[2])) + a44 * (3 * a41 - a42 + 3 * a59) +
2497 (a40 + a41 * a54 + a46 + a60) * X[2];
2498 return Pm;
2499 }
2500};
2501
2502template <>
2503class OrthonormalBasis<3, 3>
2504{
2505 public:
2506 inline static constexpr int kDims = 3;
2507 inline static constexpr int kOrder = 3;
2508 inline static constexpr int kSize = 20;
2509
2510 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
2511 {
2512 Vector<kSize> P;
2513 Scalar const a0 = std::sqrt(6);
2514 Scalar const a1 = std::sqrt(10);
2515 Scalar const a2 = X[0] - 1;
2516 Scalar const a3 = a2 + 3 * X[1];
2517 Scalar const a4 = 2 * a3;
2518 Scalar const a5 = a2 + X[1] + 2 * X[2];
2519 Scalar const a6 = 2 * a5;
2520 Scalar const a7 = std::sqrt(14);
2521 Scalar const a8 = 10 * X[0];
2522 Scalar const a9 = ((X[0]) * (X[0]));
2523 Scalar const a10 = 15 * a9;
2524 Scalar const a11 = 6 * X[0];
2525 Scalar const a12 = a11 - 1;
2526 Scalar const a13 = 8 * X[1];
2527 Scalar const a14 = ((X[1]) * (X[1]));
2528 Scalar const a15 = 2 * X[0];
2529 Scalar const a16 = -a15 + a9 + 1;
2530 Scalar const a17 = a13 * X[0] - a13 + 10 * a14 + a16;
2531 Scalar const a18 = a2 + 5 * X[1];
2532 Scalar const a19 = a5 * a7;
2533 Scalar const a20 = 6 * X[2];
2534 Scalar const a21 = ((X[2]) * (X[2]));
2535 Scalar const a22 = a14 + a15 * X[1] + a16 - 2 * X[1];
2536 Scalar const a23 = a11 * X[2] + a20 * X[1] - a20 + 6 * a21 + a22;
2537 Scalar const a24 = std::numbers::sqrt2_v<Scalar>;
2538 Scalar const a25 = ((X[0]) * (X[0]) * (X[0]));
2539 Scalar const a26 = 168 * a9 - 84 * X[0] + 6;
2540 Scalar const a27 = 8 * X[0] - 1;
2541 Scalar const a28 = 3 * a27;
2542 Scalar const a29 = 45 * a14;
2543 Scalar const a30 = 12 * X[1];
2544 Scalar const a31 = 10 * X[2];
2545 P[0] = a0;
2546 P[1] = a1 * (4 * X[0] - 1);
2547 P[2] = std::sqrt(5) * a4;
2548 P[3] = std::sqrt(15) * a6;
2549 P[4] = a7 * (a10 - a8 + 1);
2550 P[5] = std::sqrt(7) * a12 * a4;
2551 P[6] = std::sqrt(42) * a17;
2552 P[7] = std::sqrt(21) * a12 * a6;
2553 P[8] = 3 * a18 * a19;
2554 P[9] = std::sqrt(210) * a23;
2555 P[10] = 3 * a24 * (56 * a25 - 63 * a9 + 18 * X[0] - 1);
2556 P[11] = a26 * a3;
2557 P[12] = a0 * a17 * a28;
2558 P[13] = 6 * a24 *
2559 (a10 * X[1] + a25 + a29 * X[0] - a29 - 3 * a9 - 30 * X[0] * X[1] + 3 * X[0] +
2560 35 * ((X[1]) * (X[1]) * (X[1])) + 15 * X[1] - 1);
2561 P[14] = std::numbers::sqrt3_v<Scalar> * a26 * a5;
2562 P[15] = 9 * a18 * a24 * a27 * a5;
2563 P[16] = 6 * a0 * a5 * (21 * a14 + a16 + a30 * X[0] - a30);
2564 P[17] = std::sqrt(30) * a23 * a28;
2565 P[18] = 6 * a1 * a23 * (a2 + 7 * X[1]);
2566 P[19] = 6 * a19 * (10 * a21 + a22 + a31 * X[1] - a31 + a8 * X[2]);
2567 return P;
2568 }
2569
2570 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
2571 {
2573 Scalar* G = Gm.data();
2574 Scalar const a0 = std::sqrt(10);
2575 Scalar const a1 = std::sqrt(5);
2576 Scalar const a2 = std::sqrt(15);
2577 Scalar const a3 = 2 * a2;
2578 Scalar const a4 = std::sqrt(14);
2579 Scalar const a5 = 30 * X[0];
2580 Scalar const a6 = std::sqrt(7);
2581 Scalar const a7 = 6 * X[0];
2582 Scalar const a8 = a7 - 1;
2583 Scalar const a9 = a6 * a8;
2584 Scalar const a10 = X[0] - 1;
2585 Scalar const a11 = a10 + 3 * X[1];
2586 Scalar const a12 = std::sqrt(42);
2587 Scalar const a13 = 8 * X[1];
2588 Scalar const a14 = 2 * X[0];
2589 Scalar const a15 = a14 - 2;
2590 Scalar const a16 = a13 + a15;
2591 Scalar const a17 = 8 * X[0];
2592 Scalar const a18 = a17 + 20 * X[1] - 8;
2593 Scalar const a19 = std::sqrt(21);
2594 Scalar const a20 = a19 * a8;
2595 Scalar const a21 = 2 * a20;
2596 Scalar const a22 = a10 + X[1] + 2 * X[2];
2597 Scalar const a23 = a10 + 5 * X[1];
2598 Scalar const a24 = 3 * a4;
2599 Scalar const a25 = a23 * a24;
2600 Scalar const a26 = a22 * a4;
2601 Scalar const a27 = 6 * a4;
2602 Scalar const a28 = std::sqrt(210);
2603 Scalar const a29 = 6 * X[2];
2604 Scalar const a30 = 2 * X[1];
2605 Scalar const a31 = a15 + a30;
2606 Scalar const a32 = a29 + a31;
2607 Scalar const a33 = a28 * a32;
2608 Scalar const a34 = a7 + 6 * X[1] + 12 * X[2] - 6;
2609 Scalar const a35 = std::numbers::sqrt2_v<Scalar>;
2610 Scalar const a36 = ((X[0]) * (X[0]));
2611 Scalar const a37 = 168 * a36;
2612 Scalar const a38 = std::sqrt(6);
2613 Scalar const a39 = a17 - 1;
2614 Scalar const a40 = 3 * a39;
2615 Scalar const a41 = a38 * a40;
2616 Scalar const a42 = ((X[1]) * (X[1]));
2617 Scalar const a43 = -a14 + a36 + 1;
2618 Scalar const a44 = 6 * a35;
2619 Scalar const a45 = 90 * X[1];
2620 Scalar const a46 = std::numbers::sqrt3_v<Scalar>;
2621 Scalar const a47 = a46 * (28 * a36 - 14 * X[0] + 1);
2622 Scalar const a48 = 6 * a47;
2623 Scalar const a49 = 6 * a22;
2624 Scalar const a50 = a23 * a35;
2625 Scalar const a51 = 9 * a39;
2626 Scalar const a52 = a50 * a51;
2627 Scalar const a53 = a22 * a35;
2628 Scalar const a54 = 12 * X[1];
2629 Scalar const a55 = a38 * a49;
2630 Scalar const a56 = a38 * (21 * a42 + a43 + a54 * X[0] - a54);
2631 Scalar const a57 = 6 * a56;
2632 Scalar const a58 = std::sqrt(30);
2633 Scalar const a59 = a40 * a58;
2634 Scalar const a60 = a32 * a59;
2635 Scalar const a61 = ((X[2]) * (X[2]));
2636 Scalar const a62 = a14 * X[1] - a30 + a42 + a43;
2637 Scalar const a63 = a29 * X[1] - a29 + 6 * a61 + a62 + a7 * X[2];
2638 Scalar const a64 = 6 * a0 * (a10 + 7 * X[1]);
2639 Scalar const a65 = a32 * a64;
2640 Scalar const a66 = a0 * a63;
2641 Scalar const a67 = 10 * X[2];
2642 Scalar const a68 = 6 * a26;
2643 Scalar const a69 = 10 * a61 + a62 + a67 * X[0] + a67 * X[1] - a67;
2644 Scalar const a70 = a27 * a69 + a68 * (a31 + a67);
2645 G[0] = 0;
2646 G[1] = 0;
2647 G[2] = 0;
2648 G[3] = 4 * a0;
2649 G[4] = 0;
2650 G[5] = 0;
2651 G[6] = 2 * a1;
2652 G[7] = 6 * a1;
2653 G[8] = 0;
2654 G[9] = a3;
2655 G[10] = a3;
2656 G[11] = 4 * a2;
2657 G[12] = a4 * (a5 - 10);
2658 G[13] = 0;
2659 G[14] = 0;
2660 G[15] = 12 * a11 * a6 + 2 * a9;
2661 G[16] = 6 * a9;
2662 G[17] = 0;
2663 G[18] = a12 * a16;
2664 G[19] = a12 * a18;
2665 G[20] = 0;
2666 G[21] = 12 * a19 * a22 + a21;
2667 G[22] = a21;
2668 G[23] = 4 * a20;
2669 G[24] = a22 * a24 + a25;
2670 G[25] = a25 + 15 * a26;
2671 G[26] = a23 * a27;
2672 G[27] = a33;
2673 G[28] = a33;
2674 G[29] = a28 * a34;
2675 G[30] = 3 * a35 * (a37 - 126 * X[0] + 18);
2676 G[31] = 0;
2677 G[32] = 0;
2678 G[33] = a11 * (336 * X[0] - 84) + a37 - 84 * X[0] + 6;
2679 G[34] = 504 * a36 - 252 * X[0] + 18;
2680 G[35] = 0;
2681 G[36] = a16 * a41 + 24 * a38 * (a13 * X[0] - a13 + 10 * a42 + a43);
2682 G[37] = a18 * a41;
2683 G[38] = 0;
2684 G[39] = a44 * (3 * a36 + 45 * a42 + a5 * X[1] - a7 - 30 * X[1] + 3);
2685 G[40] = a44 * (15 * a36 + 105 * a42 + a45 * X[0] - a45 - a5 + 15);
2686 G[41] = 0;
2687 G[42] = a46 * a49 * (56 * X[0] - 14) + a48;
2688 G[43] = a48;
2689 G[44] = 12 * a47;
2690 G[45] = 72 * a22 * a50 + a51 * a53 + a52;
2691 G[46] = 45 * a39 * a53 + a52;
2692 G[47] = 18 * a39 * a50;
2693 G[48] = a55 * (a15 + a54) + a57;
2694 G[49] = a55 * (12 * X[0] + 42 * X[1] - 12) + a57;
2695 G[50] = 12 * a56;
2696 G[51] = 24 * a58 * a63 + a60;
2697 G[52] = a60;
2698 G[53] = a34 * a59;
2699 G[54] = a65 + 6 * a66;
2700 G[55] = a65 + 42 * a66;
2701 G[56] = a34 * a64;
2702 G[57] = a70;
2703 G[58] = a70;
2704 G[59] = 12 * a4 * a69 + a68 * (10 * X[0] + 10 * X[1] + 20 * X[2] - 10);
2705 return Gm;
2706 }
2707
2708 [[maybe_unused]] Matrix<kSize, kDims>
2709 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
2710 {
2712 Scalar* P = Pm.data();
2713 Scalar const a0 = std::sqrt(6);
2714 Scalar const a1 = a0 * X[0];
2715 Scalar const a2 = std::sqrt(10);
2716 Scalar const a3 = a2 * X[0];
2717 Scalar const a4 = ((X[0]) * (X[0]));
2718 Scalar const a5 = a2 * a4;
2719 Scalar const a6 = std::sqrt(5);
2720 Scalar const a7 = 2 * a6;
2721 Scalar const a8 = -a7;
2722 Scalar const a9 = 6 * X[1];
2723 Scalar const a10 = std::sqrt(15);
2724 Scalar const a11 = 2 * a10;
2725 Scalar const a12 = a11 * X[1];
2726 Scalar const a13 = -a11;
2727 Scalar const a14 = 4 * X[2];
2728 Scalar const a15 = a10 * a14 + a13;
2729 Scalar const a16 = std::sqrt(14);
2730 Scalar const a17 = a16 * X[0];
2731 Scalar const a18 = 5 * a16;
2732 Scalar const a19 = ((X[0]) * (X[0]) * (X[0]));
2733 Scalar const a20 = a16 * a19;
2734 Scalar const a21 = std::sqrt(7);
2735 Scalar const a22 = 4 * a19;
2736 Scalar const a23 = 18 * X[1];
2737 Scalar const a24 = std::sqrt(42);
2738 Scalar const a25 = (1.0 / 3.0) * a19;
2739 Scalar const a26 = 4 * a24;
2740 Scalar const a27 = 8 * X[1];
2741 Scalar const a28 = ((X[1]) * (X[1]));
2742 Scalar const a29 = 10 * a28;
2743 Scalar const a30 = std::sqrt(21);
2744 Scalar const a31 = 2 * a30;
2745 Scalar const a32 = -a31;
2746 Scalar const a33 = a31 * X[1];
2747 Scalar const a34 = a14 * a30;
2748 Scalar const a35 = 12 * X[2];
2749 Scalar const a36 = 3 * a16;
2750 Scalar const a37 = -a36;
2751 Scalar const a38 = 9 * a16;
2752 Scalar const a39 = a16 * X[2];
2753 Scalar const a40 = 30 * X[1];
2754 Scalar const a41 = 6 * a16;
2755 Scalar const a42 = a36 - a41 * X[2];
2756 Scalar const a43 = a16 * a23;
2757 Scalar const a44 = -a43;
2758 Scalar const a45 = a16 * a28;
2759 Scalar const a46 = a44 + 15 * a45;
2760 Scalar const a47 = std::sqrt(210);
2761 Scalar const a48 = a47 * X[1];
2762 Scalar const a49 = 3 * a47;
2763 Scalar const a50 = -a47 + a49 * X[2];
2764 Scalar const a51 = 6 * X[2];
2765 Scalar const a52 = 6 * a47;
2766 Scalar const a53 = ((X[2]) * (X[2]));
2767 Scalar const a54 = a47 + a52 * a53 - a52 * X[2];
2768 Scalar const a55 = a28 * a47 - 2 * a48;
2769 Scalar const a56 = std::numbers::sqrt2_v<Scalar>;
2770 Scalar const a57 = 3 * X[0];
2771 Scalar const a58 = 27 * a56;
2772 Scalar const a59 = a19 * a56;
2773 Scalar const a60 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
2774 Scalar const a61 = 42 * a60;
2775 Scalar const a62 = 168 * X[1];
2776 Scalar const a63 = 6 * a0;
2777 Scalar const a64 = a0 * X[1];
2778 Scalar const a65 = 3 * a0;
2779 Scalar const a66 = a0 * a28;
2780 Scalar const a67 = a56 * a60;
2781 Scalar const a68 = 6 * a56;
2782 Scalar const a69 = -a68;
2783 Scalar const a70 = a56 * X[1];
2784 Scalar const a71 = 9 * a56;
2785 Scalar const a72 = 90 * a56;
2786 Scalar const a73 = a72 * X[1];
2787 Scalar const a74 = a28 * a56;
2788 Scalar const a75 = ((X[1]) * (X[1]) * (X[1]));
2789 Scalar const a76 = std::numbers::sqrt3_v<Scalar>;
2790 Scalar const a77 = 6 * a76;
2791 Scalar const a78 = a77 * X[1];
2792 Scalar const a79 = -a77;
2793 Scalar const a80 = a35 * a76 + a79;
2794 Scalar const a81 = a76 * X[1];
2795 Scalar const a82 = 84 * a76;
2796 Scalar const a83 = a76 * X[2];
2797 Scalar const a84 = a56 * X[2];
2798 Scalar const a85 = 45 * a56;
2799 Scalar const a86 = a28 * a85;
2800 Scalar const a87 = 360 * a70;
2801 Scalar const a88 = (3.0 / 2.0) * a60;
2802 Scalar const a89 = -a63;
2803 Scalar const a90 = a0 * X[2];
2804 Scalar const a91 = 78 * a64;
2805 Scalar const a92 = 12 * a0;
2806 Scalar const a93 = a92 * X[2];
2807 Scalar const a94 = 72 * a64;
2808 Scalar const a95 = 144 * X[2];
2809 Scalar const a96 = a89 + a93;
2810 Scalar const a97 = 126 * a0 * a75 - 198 * a66 + a91;
2811 Scalar const a98 = std::sqrt(30);
2812 Scalar const a99 = 6 * a98;
2813 Scalar const a100 = a98 * X[1];
2814 Scalar const a101 = a98 * X[2];
2815 Scalar const a102 = 3 * a98;
2816 Scalar const a103 = a102 * a28;
2817 Scalar const a104 = a53 * a98;
2818 Scalar const a105 = 18 * a104;
2819 Scalar const a106 = a28 * a98;
2820 Scalar const a107 = 72 * a101;
2821 Scalar const a108 = 6 * a2;
2822 Scalar const a109 = -a108;
2823 Scalar const a110 = 12 * a2;
2824 Scalar const a111 = a2 * X[1];
2825 Scalar const a112 = 54 * a111;
2826 Scalar const a113 = 36 * a2;
2827 Scalar const a114 = a113 * X[2];
2828 Scalar const a115 = 45 * a28;
2829 Scalar const a116 = 18 * a2;
2830 Scalar const a117 = 144 * a111;
2831 Scalar const a118 = a2 * a28;
2832 Scalar const a119 = a109 - a113 * a53 + a114;
2833 Scalar const a120 = a112 - 90 * a118 + 42 * a2 * a75;
2834 Scalar const a121 = -a41;
2835 Scalar const a122 = a121 + 24 * a39;
2836 Scalar const a123 = 72 * a39;
2837 Scalar const a124 = a16 * a53;
2838 Scalar const a125 = -a123 + 90 * a124 + a38;
2839 Scalar const a126 = 144 * X[1];
2840 Scalar const a127 = 72 * X[2];
2841 Scalar const a128 = 180 * a124;
2842 Scalar const a129 = ((X[2]) * (X[2]) * (X[2]));
2843 Scalar const a130 = a121 + a123 - a128 + 120 * a129 * a16;
2844 Scalar const a131 = a41 * a75 + a43 - 18 * a45;
2845 Scalar const a132 = 4 * X[0];
2846 Scalar const a133 = a132 - 1;
2847 Scalar const a134 = a11 * X[0];
2848 Scalar const a135 = 15 * a4;
2849 Scalar const a136 = a135 - 10 * X[0] + 1;
2850 Scalar const a137 = a16 * X[1];
2851 Scalar const a138 = 18 * X[0];
2852 Scalar const a139 = 2 * a21;
2853 Scalar const a140 = 14 * X[0];
2854 Scalar const a141 = 12 * a4;
2855 Scalar const a142 = 2 * X[0];
2856 Scalar const a143 = 6 * X[0];
2857 Scalar const a144 = a30 * X[0];
2858 Scalar const a145 = 24 * X[2];
2859 Scalar const a146 = -a140 * a30 + a141 * a30 + a31;
2860 Scalar const a147 = 6 * a17;
2861 Scalar const a148 = -a147 + a36 * a4;
2862 Scalar const a149 = a47 * X[0];
2863 Scalar const a150 = -2 * a149 + a4 * a47;
2864 Scalar const a151 = a138 + 56 * a19 - 63 * a4 - 1;
2865 Scalar const a152 = 3 * X[1];
2866 Scalar const a153 = 252 * a4;
2867 Scalar const a154 = 90 * X[0];
2868 Scalar const a155 = 168 * a19;
2869 Scalar const a156 = a0 * a4;
2870 Scalar const a157 = 24 * a19;
2871 Scalar const a158 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
2872 Scalar const a159 = a154 * a56;
2873 Scalar const a160 = a4 * a56;
2874 Scalar const a161 = -a153 * a76 + a154 * a76 + a155 * a76;
2875 Scalar const a162 = a56 * X[0];
2876 Scalar const a163 = a84 * X[0];
2877 Scalar const a164 = 144 * a4;
2878 Scalar const a165 = a159 - 153 * a160 + 72 * a59 - a71;
2879 Scalar const a166 = 39 * a0;
2880 Scalar const a167 = 18 * a1 - 18 * a156 + a19 * a63;
2881 Scalar const a168 = 8 * X[0];
2882 Scalar const a169 = a98 * X[0];
2883 Scalar const a170 = 9 * a98;
2884 Scalar const a171 = a4 * a98;
2885 Scalar const a172 = -a102 + a157 * a98 + 30 * a169 - 51 * a171;
2886 Scalar const a173 = a2 * X[2];
2887 Scalar const a174 = 27 * a2;
2888 Scalar const a175 = 36 * a3;
2889 Scalar const a176 = a116 * a4;
2890 Scalar const a177 = a108 * a19 - a176 + 18 * a3;
2891 Scalar const a178 = 18 * a17;
2892 Scalar const a179 = 72 * a17;
2893 Scalar const a180 = -18 * a16 * a4 + a178 + 6 * a20;
2894 Scalar const a181 = a152 + X[0] - 1;
2895 Scalar const a182 = a181 * X[2];
2896 Scalar const a183 = (-a142 + a27 * X[0] - a27 + a29 + a4 + 1) * X[2];
2897 Scalar const a184 = 12 * a144;
2898 Scalar const a185 = 15 * X[1];
2899 Scalar const a186 = a82 * X[0];
2900 Scalar const a187 = a4 * a76;
2901 Scalar const a188 = a1 * X[1];
2902 Scalar const a189 = a100 * X[0];
2903 Scalar const a190 = 60 * a16;
2904 Scalar const a191 = 36 * a16;
2905 P[0] = a1;
2906 P[1] = -a3 + 2 * a5;
2907 P[2] = a4 * a6 + (a6 * a9 + a8) * X[0];
2908 P[3] = a10 * a4 + (a12 + a15) * X[0];
2909 P[4] = a17 - a18 * a4 + 5 * a20;
2910 P[5] = a21 * a22 + a4 * (a21 * a23 - 7 * a21) + (-a21 * a9 + 2 * a21) * X[0];
2911 P[6] = a24 * a25 + a4 * (-a24 + a26 * X[1]) + (-a24 * a27 + a24 * a29 + a24) * X[0];
2912 P[7] = a22 * a30 + a4 * (a30 * a35 + a30 * a9 - 7 * a30) + (-a32 - a33 - a34) * X[0];
2913 P[8] = a20 + a4 * (a36 * X[2] + a37 + a38 * X[1]) + (a39 * a40 + a42 + a46) * X[0];
2914 P[9] = a25 * a47 + a4 * (a48 + a50) + (a48 * a51 + a54 + a55) * X[0];
2915 P[10] = a4 * a58 - a56 * a57 + a56 * a61 - 63 * a59;
2916 P[11] = a19 * (a62 - 84) + a4 * (45 - 126 * X[1]) + a61 + (a23 - 6) * X[0];
2917 P[12] = a19 * (-17 * a0 + 64 * a64) + a4 * (15 * a0 - 108 * a64 + 120 * a66) + a60 * a63 +
2918 (24 * a0 * X[1] - a65 - 30 * a66) * X[0];
2919 P[13] = a19 * (a69 + 30 * a70) + a4 * (a71 - a73 + 135 * a74) + (3.0 / 2.0) * a67 +
2920 (210 * a56 * a75 + a69 + a73 - 270 * a74) * X[0];
2921 P[14] = a19 * (56 * a81 - a82 + 112 * a83) + a4 * (45 * a76 - 42 * a81 - a82 * X[2]) +
2922 a61 * a76 + (a78 + a80) * X[0];
2923 P[15] = a19 * (-51 * a56 + 144 * a70 + 48 * a84) +
2924 a4 * (-243 * a70 + 180 * a74 - 81 * a84 + a85 + a87 * X[2]) + 18 * a67 +
2925 (54 * a56 * X[1] + 18 * a56 * X[2] - a71 - a73 * X[2] - a86) * X[0];
2926 P[16] = a0 * a88 + a19 * (26 * a64 + a89 + 4 * a90) +
2927 a4 * (9 * a0 + 99 * a66 - a91 - a93 + a94 * X[2]) +
2928 (252 * a28 * a90 - a64 * a95 + a96 + a97) * X[0];
2929 P[17] = a19 * (16 * a100 + 48 * a101 - 17 * a98) +
2930 a4 * (-27 * a100 - 81 * a101 + 72 * a104 + 12 * a106 + a107 * X[1] + 15 * a98) +
2931 a60 * a99 +
2932 (-a101 * a23 - a102 - a103 - a105 + 6 * a98 * X[1] + 18 * a98 * X[2]) * X[0];
2933 P[18] = a19 * (a109 + a110 * X[2] + a2 * a23) + a2 * a88 +
2934 a4 * (-a112 - a114 + a115 * a2 + a116 * a53 + a117 * X[2] + 9 * a2) +
2935 (252 * a111 * a53 - 288 * a111 * X[2] + 252 * a118 * X[2] + a119 + a120) * X[0];
2936 P[19] = a16 * a88 + a19 * (a122 + a41 * X[1]) +
2937 a4 * (a123 * X[1] + a125 + a28 * a38 + a44) +
2938 (-a126 * a39 + a127 * a45 + a128 * X[1] + a130 + a131) * X[0];
2939 P[20] = a64;
2940 P[21] = a111 * a133;
2941 P[22] = 3 * a28 * a6 + (a7 * X[0] + a8) * X[1];
2942 P[23] = a10 * a28 + (a134 + a15) * X[1];
2943 P[24] = a136 * a137;
2944 P[25] = a28 * (a138 * a21 - 3 * a21) + (a139 - a140 * a21 + a141 * a21) * X[1];
2945 P[26] = (10.0 / 3.0) * a24 * a75 + a28 * (a132 * a24 - a26) +
2946 (-a142 * a24 + a24 * a4 + a24) * X[1];
2947 P[27] = a28 * (a143 * a30 - a30) + (a144 * a145 + a146 - a34) * X[1];
2948 P[28] = a18 * a75 + a28 * (9 * a17 - a38 + 15 * a39) + (a147 * X[2] + a148 + a42) * X[1];
2949 P[29] = a28 * (a149 + a50) + (1.0 / 3.0) * a47 * a75 + (a149 * a51 + a150 + a54) * X[1];
2950 P[30] = a151 * a152 * a56;
2951 P[31] = a28 * (a153 - 126 * X[0] + 9) + (-a153 + a154 + a155 - 6) * X[1];
2952 P[32] = a28 * (-108 * a1 + 96 * a156 + a92) + a75 * (-10 * a0 + 80 * a1) +
2953 (a0 * a157 + 30 * a1 - 51 * a156 - a65) * X[1];
2954 P[33] = (105.0 / 2.0) * a158 * a56 + a28 * (-a159 + a4 * a85 + a85) + a75 * (a159 - a72) +
2955 (a138 * a56 - 18 * a160 + a19 * a68 + a69) * X[1];
2956 P[34] = a28 * (a4 * a82 - 42 * a76 * X[0] + 3 * a76) +
2957 (a161 + 336 * a4 * a83 + a80 - 168 * a83 * X[0]) * X[1];
2958 P[35] = a28 * (216 * a160 - 243 * a162 + 360 * a163 + a58 - a85 * X[2]) +
2959 a75 * (120 * a162 - 15 * a56) + (-162 * a163 + a164 * a84 + a165 + 18 * a84) * X[1];
2960 P[36] = (63.0 / 2.0) * a0 * a158 +
2961 a28 * (a1 * a127 - 78 * a1 + a166 * a4 + a166 - 72 * a90) +
2962 a75 * (-66 * a0 + 66 * a1 + 84 * a90) + (-a1 * a145 + a167 + a4 * a93 + a96) * X[1];
2963 P[37] =
2964 a28 * (a102 + a107 * X[0] - 27 * a169 - a170 * X[2] + 24 * a171) +
2965 a75 * (a168 * a98 - a98) +
2966 (a101 * a164 - 162 * a101 * X[0] + 18 * a101 + 144 * a104 * X[0] - a105 + a172) * X[1];
2967 P[38] = (21.0 / 2.0) * a158 * a2 +
2968 a28 * (-144 * a173 + a174 * a4 + a174 + 126 * a2 * a53 + a3 * a95 - 54 * a3) +
2969 a75 * (84 * a173 - 30 * a2 + 30 * a3) +
2970 (a119 - a127 * a3 + a175 * a53 + a177 + 36 * a5 * X[2]) * X[1];
2971 P[39] = (3.0 / 2.0) * a158 * a16 + a28 * (a125 - a178 + a179 * X[2] + a38 * a4) +
2972 a75 * (a122 + a147) +
2973 (a123 * a4 + a130 + 180 * a17 * a53 - a17 * a95 + a180) * X[1];
2974 P[40] = a90;
2975 P[41] = a133 * a173;
2976 P[42] = a182 * a7;
2977 P[43] = a11 * a53 + (a12 + a13 + a134) * X[2];
2978 P[44] = a136 * a39;
2979 P[45] = a139 * a182 * (a143 - 1);
2980 P[46] = a183 * a24;
2981 P[47] = a53 * (a184 + a32) + (a146 + a184 * X[1] - a33) * X[2];
2982 P[48] = a53 * (a16 * a185 + 3 * a17 + a37) + (a148 + a17 * a23 + a36 + a46) * X[2];
2983 P[49] = 2 * a129 * a47 + a53 * (3 * a149 + 3 * a48 - a49) +
2984 (a142 * a48 + a150 + a47 + a55) * X[2];
2985 P[50] = 3 * a151 * a84;
2986 P[51] = a181 * a51 * (-a140 + 28 * a4 + 1);
2987 P[52] = a183 * a65 * (a168 - 1);
2988 P[53] = a68 *
2989 (a115 * X[0] - a115 + a135 * X[1] + a185 + a19 - 3 * a4 - a40 * X[0] + a57 +
2990 35 * a75 - 1) *
2991 X[2];
2992 P[54] =
2993 a53 * (-a186 + 168 * a187 + a77) + (a161 - a186 * X[1] + a187 * a62 + a78 + a79) * X[2];
2994 P[55] =
2995 a53 * (72 * a160 - 81 * a162 + a71 - a85 * X[1] + a87 * X[0]) +
2996 (a165 + 432 * a4 * a70 - 486 * a70 * X[0] + 54 * a70 + 360 * a74 * X[0] - a86) * X[2];
2997 P[56] = a53 * (-12 * a1 + 72 * a188 + a4 * a63 + a63 + 126 * a66 - a94) +
2998 (198 * a1 * a28 + a167 - 156 * a188 + a4 * a91 + a89 + a97) * X[2];
2999 P[57] = a129 * (48 * a169 - a99) +
3000 a53 * (-81 * a169 - a170 * X[1] + a170 + 72 * a171 + 72 * a189) +
3001 (48 * a100 * a4 - a103 + 24 * a106 * X[0] + a172 - 54 * a189 + a99 * X[1]) * X[2];
3002 P[58] = a129 * (-a110 + 84 * a111 + 12 * a3) +
3003 a53 * (a116 - a117 + 126 * a118 + a126 * a3 - a175 + a176) +
3004 (a109 + a120 + a177 + 90 * a28 * a3 - 108 * a3 * X[1] + 54 * a5 * X[1]) * X[2];
3005 P[59] = a129 * (60 * a17 + a190 * X[1] - a190) +
3006 30 * a16 * ((X[2]) * (X[2]) * (X[2]) * (X[2])) +
3007 a53 * (-72 * a137 + a179 * X[1] - a179 + a191 * a28 + a191 * a4 + a191) +
3008 (a121 + a131 - 36 * a17 * X[1] + a178 * a28 + a180 + a4 * a43) * X[2];
3009 return Pm;
3010 }
3011};
3012
3013template <>
3014class OrthonormalBasis<3, 4>
3015{
3016 public:
3017 inline static constexpr int kDims = 3;
3018 inline static constexpr int kOrder = 4;
3019 inline static constexpr int kSize = 35;
3020
3021 [[maybe_unused]] Vector<kSize> eval([[maybe_unused]] Vector<kDims> const& X) const
3022 {
3023 Vector<kSize> P;
3024 Scalar const a0 = std::sqrt(6);
3025 Scalar const a1 = std::sqrt(10);
3026 Scalar const a2 = 4 * X[0];
3027 Scalar const a3 = X[0] - 1;
3028 Scalar const a4 = a3 + 3 * X[1];
3029 Scalar const a5 = 2 * a4;
3030 Scalar const a6 = a3 + X[1] + 2 * X[2];
3031 Scalar const a7 = 2 * a6;
3032 Scalar const a8 = std::sqrt(14);
3033 Scalar const a9 = 10 * X[0];
3034 Scalar const a10 = ((X[0]) * (X[0]));
3035 Scalar const a11 = 15 * a10;
3036 Scalar const a12 = 6 * X[0];
3037 Scalar const a13 = a12 - 1;
3038 Scalar const a14 = 8 * X[1];
3039 Scalar const a15 = ((X[1]) * (X[1]));
3040 Scalar const a16 = 2 * X[0];
3041 Scalar const a17 = a10 - a16 + 1;
3042 Scalar const a18 = a14 * X[0] - a14 + 10 * a15 + a17;
3043 Scalar const a19 = a6 * a8;
3044 Scalar const a20 = a3 + 5 * X[1];
3045 Scalar const a21 = 3 * a20;
3046 Scalar const a22 = 6 * X[2];
3047 Scalar const a23 = ((X[2]) * (X[2]));
3048 Scalar const a24 = a15 + a16 * X[1] + a17 - 2 * X[1];
3049 Scalar const a25 = a12 * X[2] + a22 * X[1] - a22 + 6 * a23 + a24;
3050 Scalar const a26 = std::numbers::sqrt2_v<Scalar>;
3051 Scalar const a27 = ((X[0]) * (X[0]) * (X[0]));
3052 Scalar const a28 = 168 * a10 - 84 * X[0] + 6;
3053 Scalar const a29 = 8 * X[0] - 1;
3054 Scalar const a30 = 3 * a29;
3055 Scalar const a31 = 45 * a15;
3056 Scalar const a32 = ((X[1]) * (X[1]) * (X[1]));
3057 Scalar const a33 = X[0] * X[1];
3058 Scalar const a34 = 3 * X[0] - 1;
3059 Scalar const a35 = -3 * a10 + a27 + a34;
3060 Scalar const a36 = a11 * X[1] + a31 * X[0] - a31 + 35 * a32 - 30 * a33 + a35 + 15 * X[1];
3061 Scalar const a37 = 12 * X[1];
3062 Scalar const a38 = a37 * X[0];
3063 Scalar const a39 = 21 * a15 + a17 - a37 + a38;
3064 Scalar const a40 = a25 * (a3 + 7 * X[1]);
3065 Scalar const a41 = 10 * X[2];
3066 Scalar const a42 = 10 * a23 + a24 + a41 * X[1] - a41 + a9 * X[2];
3067 Scalar const a43 = std::sqrt(22);
3068 Scalar const a44 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
3069 Scalar const a45 = -108 * a10 + 120 * a27 + 24 * X[0] - 1;
3070 Scalar const a46 = std::sqrt(66);
3071 Scalar const a47 = a34 * (15 * X[0] - 1);
3072 Scalar const a48 = a9 - 1;
3073 Scalar const a49 = 2 * a48;
3074 Scalar const a50 = std::sqrt(110);
3075 Scalar const a51 = 224 * a32;
3076 Scalar const a52 = 24 * X[1];
3077 Scalar const a53 = 126 * a15;
3078 Scalar const a54 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
3079 Scalar const a55 = a15 * X[0];
3080 Scalar const a56 = a10 * X[1];
3081 Scalar const a57 = 4 * a27;
3082 Scalar const a58 = 6 * a10;
3083 Scalar const a59 = -a2 + a44 - a57 + a58 + 1;
3084 Scalar const a60 = a48 * a7;
3085 Scalar const a61 = std::sqrt(330);
3086 Scalar const a62 = 84 * a15;
3087 Scalar const a63 = 21 * X[1];
3088 Scalar const a64 = 16 * X[1];
3089 Scalar const a65 = 140 * ((X[2]) * (X[2]) * (X[2]));
3090 Scalar const a66 = 20 * X[2];
3091 Scalar const a67 = 90 * a23;
3092 Scalar const a68 = 180 * a23;
3093 Scalar const a69 = 60 * X[2];
3094 P[0] = a0;
3095 P[1] = a1 * (a2 - 1);
3096 P[2] = std::sqrt(5) * a5;
3097 P[3] = std::sqrt(15) * a7;
3098 P[4] = a8 * (a11 - a9 + 1);
3099 P[5] = std::sqrt(7) * a13 * a5;
3100 P[6] = std::sqrt(42) * a18;
3101 P[7] = std::sqrt(21) * a13 * a7;
3102 P[8] = a19 * a21;
3103 P[9] = std::sqrt(210) * a25;
3104 P[10] = 3 * a26 * (-63 * a10 + 56 * a27 + 18 * X[0] - 1);
3105 P[11] = a28 * a4;
3106 P[12] = a0 * a18 * a30;
3107 P[13] = 6 * a26 * a36;
3108 P[14] = std::numbers::sqrt3_v<Scalar> * a28 * a6;
3109 P[15] = 9 * a20 * a26 * a29 * a6;
3110 P[16] = 6 * a0 * a39 * a6;
3111 P[17] = std::sqrt(30) * a25 * a30;
3112 P[18] = 6 * a1 * a40;
3113 P[19] = 6 * a19 * a42;
3114 P[20] = a43 * (168 * a10 - 336 * a27 + 210 * a44 - 28 * X[0] + 1);
3115 P[21] = std::sqrt(11) * a45 * a5;
3116 P[22] = a18 * a46 * a47;
3117 P[23] = a36 * a43 * a49;
3118 P[24] = a50 * (a10 * a53 + a27 * a52 + 72 * a33 + a51 * X[0] - a51 - a52 + a53 + 126 * a54 -
3119 252 * a55 - 72 * a56 + a59);
3120 P[25] = std::sqrt(33) * a45 * a7;
3121 P[26] = a21 * a43 * a47 * a6;
3122 P[27] = a39 * a46 * a60;
3123 P[28] = a6 * a61 * (a10 * a63 + 84 * a32 - 42 * a33 + a35 + a62 * X[0] - a62 + a63);
3124 P[29] = a25 * a47 * a61;
3125 P[30] = a40 * a49 * a50;
3126 P[31] = 5 * a25 * a43 * (36 * a15 + a17 + a64 * X[0] - a64);
3127 P[32] = std::sqrt(154) * a42 * a60;
3128 P[33] = std::sqrt(770) * a42 * a6 * (a3 + 9 * X[1]);
3129 P[34] = 3 * a50 *
3130 (-a10 * a37 + a10 * a67 - a10 * a69 + a15 * a58 + a15 * a67 - a15 * a69 + 6 * a15 +
3131 a2 * a32 + a27 * a66 + a32 * a66 - 4 * a32 + a33 * a68 - 120 * a33 * X[2] + a38 +
3132 a54 + a55 * a69 - 12 * a55 + a56 * a69 + a57 * X[1] + a59 + a65 * X[0] +
3133 a65 * X[1] - a65 - a66 + a67 - a68 * X[0] - a68 * X[1] + a69 * X[0] + a69 * X[1] -
3134 4 * X[1] + 70 * ((X[2]) * (X[2]) * (X[2]) * (X[2])));
3135 return P;
3136 }
3137
3138 [[maybe_unused]] Matrix<kDims, kSize> derivatives([[maybe_unused]] Vector<kDims> const& X) const
3139 {
3141 Scalar* G = Gm.data();
3142 Scalar const a0 = std::sqrt(10);
3143 Scalar const a1 = std::sqrt(5);
3144 Scalar const a2 = std::sqrt(15);
3145 Scalar const a3 = 2 * a2;
3146 Scalar const a4 = std::sqrt(14);
3147 Scalar const a5 = 30 * X[0];
3148 Scalar const a6 = std::sqrt(7);
3149 Scalar const a7 = 6 * X[0];
3150 Scalar const a8 = a7 - 1;
3151 Scalar const a9 = a6 * a8;
3152 Scalar const a10 = X[0] - 1;
3153 Scalar const a11 = a10 + 3 * X[1];
3154 Scalar const a12 = std::sqrt(42);
3155 Scalar const a13 = 8 * X[1];
3156 Scalar const a14 = 2 * X[0];
3157 Scalar const a15 = a14 - 2;
3158 Scalar const a16 = a13 + a15;
3159 Scalar const a17 = 8 * X[0];
3160 Scalar const a18 = a17 + 20 * X[1] - 8;
3161 Scalar const a19 = std::sqrt(21);
3162 Scalar const a20 = a19 * a8;
3163 Scalar const a21 = 2 * a20;
3164 Scalar const a22 = a10 + X[1] + 2 * X[2];
3165 Scalar const a23 = a10 + 5 * X[1];
3166 Scalar const a24 = 3 * a4;
3167 Scalar const a25 = a23 * a24;
3168 Scalar const a26 = a22 * a4;
3169 Scalar const a27 = 6 * a4;
3170 Scalar const a28 = std::sqrt(210);
3171 Scalar const a29 = 6 * X[2];
3172 Scalar const a30 = 2 * X[1];
3173 Scalar const a31 = a15 + a30;
3174 Scalar const a32 = a29 + a31;
3175 Scalar const a33 = a28 * a32;
3176 Scalar const a34 = a7 + 6 * X[1] + 12 * X[2] - 6;
3177 Scalar const a35 = std::numbers::sqrt2_v<Scalar>;
3178 Scalar const a36 = ((X[0]) * (X[0]));
3179 Scalar const a37 = 168 * a36;
3180 Scalar const a38 = 84 * X[0];
3181 Scalar const a39 = 336 * X[0];
3182 Scalar const a40 = 252 * X[0];
3183 Scalar const a41 = std::sqrt(6);
3184 Scalar const a42 = a17 - 1;
3185 Scalar const a43 = 3 * a42;
3186 Scalar const a44 = a41 * a43;
3187 Scalar const a45 = ((X[1]) * (X[1]));
3188 Scalar const a46 = -a14 + a36 + 1;
3189 Scalar const a47 = a13 * X[0] - a13 + 10 * a45 + a46;
3190 Scalar const a48 = 45 * a45;
3191 Scalar const a49 = a5 * X[1];
3192 Scalar const a50 = 3 * a36;
3193 Scalar const a51 = a50 - a7 + 3;
3194 Scalar const a52 = a48 + a49 + a51 - 30 * X[1];
3195 Scalar const a53 = 6 * a35;
3196 Scalar const a54 = 90 * X[1];
3197 Scalar const a55 = 15 * a36;
3198 Scalar const a56 = 105 * a45 - a5 + a54 * X[0] - a54 + a55 + 15;
3199 Scalar const a57 = std::numbers::sqrt3_v<Scalar>;
3200 Scalar const a58 = a57 * (28 * a36 - 14 * X[0] + 1);
3201 Scalar const a59 = 6 * a58;
3202 Scalar const a60 = 6 * a22;
3203 Scalar const a61 = a23 * a35;
3204 Scalar const a62 = 9 * a42;
3205 Scalar const a63 = a61 * a62;
3206 Scalar const a64 = a22 * a35;
3207 Scalar const a65 = 12 * X[1];
3208 Scalar const a66 = a15 + a65;
3209 Scalar const a67 = a41 * a60;
3210 Scalar const a68 = 21 * a45 + a46 + a65 * X[0] - a65;
3211 Scalar const a69 = a41 * a68;
3212 Scalar const a70 = 6 * a69;
3213 Scalar const a71 = 12 * X[0];
3214 Scalar const a72 = 42 * X[1];
3215 Scalar const a73 = a71 + a72 - 12;
3216 Scalar const a74 = std::sqrt(30);
3217 Scalar const a75 = a43 * a74;
3218 Scalar const a76 = a32 * a75;
3219 Scalar const a77 = ((X[2]) * (X[2]));
3220 Scalar const a78 = a14 * X[1] - a30 + a45 + a46;
3221 Scalar const a79 = a29 * X[1] - a29 + a7 * X[2] + 6 * a77 + a78;
3222 Scalar const a80 = a10 + 7 * X[1];
3223 Scalar const a81 = a32 * a80;
3224 Scalar const a82 = 6 * a0;
3225 Scalar const a83 = a81 * a82;
3226 Scalar const a84 = a0 * a79;
3227 Scalar const a85 = a34 * a80;
3228 Scalar const a86 = 10 * X[2];
3229 Scalar const a87 = a31 + a86;
3230 Scalar const a88 = 6 * a26;
3231 Scalar const a89 = 10 * a77 + a78 + a86 * X[0] + a86 * X[1] - a86;
3232 Scalar const a90 = a27 * a89 + a87 * a88;
3233 Scalar const a91 = 10 * X[0];
3234 Scalar const a92 = a91 + 10 * X[1] + 20 * X[2] - 10;
3235 Scalar const a93 = std::sqrt(22);
3236 Scalar const a94 = ((X[0]) * (X[0]) * (X[0]));
3237 Scalar const a95 = std::sqrt(11);
3238 Scalar const a96 = 24 * X[0];
3239 Scalar const a97 = -108 * a36 + 120 * a94 + a96 - 1;
3240 Scalar const a98 = a95 * a97;
3241 Scalar const a99 = 720 * a36 - 432 * X[0] + 48;
3242 Scalar const a100 = std::sqrt(66);
3243 Scalar const a101 = 15 * X[0] - 1;
3244 Scalar const a102 = 3 * X[0] - 1;
3245 Scalar const a103 = a101 * a102;
3246 Scalar const a104 = a100 * a103;
3247 Scalar const a105 = a100 * a47;
3248 Scalar const a106 = 15 * a102;
3249 Scalar const a107 = 3 * a101;
3250 Scalar const a108 = a91 - 1;
3251 Scalar const a109 = 2 * a108;
3252 Scalar const a110 = a109 * a93;
3253 Scalar const a111 = ((X[1]) * (X[1]) * (X[1]));
3254 Scalar const a112 = a102 - a50 + a94;
3255 Scalar const a113 = std::sqrt(110);
3256 Scalar const a114 = 72 * X[1];
3257 Scalar const a115 = 252 * a45;
3258 Scalar const a116 = X[0] * X[1];
3259 Scalar const a117 = -12 * a36 + a71 + 4 * a94 - 4;
3260 Scalar const a118 = 252 * X[1];
3261 Scalar const a119 = 672 * a45;
3262 Scalar const a120 = std::sqrt(33);
3263 Scalar const a121 = a120 * a97;
3264 Scalar const a122 = 2 * a121;
3265 Scalar const a123 = a23 * a93;
3266 Scalar const a124 = a102 * a107;
3267 Scalar const a125 = a123 * a124;
3268 Scalar const a126 = a22 * a93;
3269 Scalar const a127 = a123 * a22;
3270 Scalar const a128 = a100 * a109 * a22;
3271 Scalar const a129 = a100 * a68;
3272 Scalar const a130 = a109 * a129;
3273 Scalar const a131 = 20 * a22;
3274 Scalar const a132 = 4 * a108;
3275 Scalar const a133 = 84 * a45;
3276 Scalar const a134 = a72 * X[0];
3277 Scalar const a135 = std::sqrt(330);
3278 Scalar const a136 = a135 * a22;
3279 Scalar const a137 = 21 * X[1];
3280 Scalar const a138 = a135 * (84 * a111 + a112 - a133 - a134 + a137 * a36 + a137 + a38 * a45);
3281 Scalar const a139 = 168 * X[1];
3282 Scalar const a140 = a103 * a135;
3283 Scalar const a141 = a140 * a32;
3284 Scalar const a142 = a135 * a79;
3285 Scalar const a143 = a109 * a113;
3286 Scalar const a144 = a143 * a81;
3287 Scalar const a145 = a113 * a79;
3288 Scalar const a146 = 16 * X[1];
3289 Scalar const a147 = 5 * a93;
3290 Scalar const a148 = a147 * (a146 * X[0] - a146 + 36 * a45 + a46);
3291 Scalar const a149 = a148 * a32;
3292 Scalar const a150 = a147 * a79;
3293 Scalar const a151 = std::sqrt(154);
3294 Scalar const a152 = a151 * a89;
3295 Scalar const a153 = a22 * a87;
3296 Scalar const a154 = a109 * a151;
3297 Scalar const a155 = a109 * a152 + a153 * a154;
3298 Scalar const a156 = a22 * a92;
3299 Scalar const a157 = std::sqrt(770);
3300 Scalar const a158 = a157 * a89;
3301 Scalar const a159 = a158 * a22;
3302 Scalar const a160 = a10 + 9 * X[1];
3303 Scalar const a161 = a158 * a160;
3304 Scalar const a162 = a157 * a160;
3305 Scalar const a163 = a153 * a162 + a161;
3306 Scalar const a164 = 180 * a77;
3307 Scalar const a165 = 60 * X[2];
3308 Scalar const a166 = ((X[2]) * (X[2]) * (X[2]));
3309 Scalar const a167 = 120 * X[2];
3310 Scalar const a168 = 3 * a113;
3311 Scalar const a169 =
3312 a168 * (4 * a111 + a116 * a167 + a117 + a164 * X[0] + a164 * X[1] - a164 + a165 * a36 +
3313 a165 * a45 + a165 + 140 * a166 - a167 * X[0] - a167 * X[1] + a36 * a65 +
3314 a45 * a71 - 12 * a45 + a65 - a96 * X[1]);
3315 Scalar const a170 = 180 * X[2];
3316 Scalar const a171 = 60 * a36;
3317 Scalar const a172 = 60 * a45;
3318 Scalar const a173 = 420 * a77;
3319 Scalar const a174 = 360 * X[2];
3320 G[0] = 0;
3321 G[1] = 0;
3322 G[2] = 0;
3323 G[3] = 4 * a0;
3324 G[4] = 0;
3325 G[5] = 0;
3326 G[6] = 2 * a1;
3327 G[7] = 6 * a1;
3328 G[8] = 0;
3329 G[9] = a3;
3330 G[10] = a3;
3331 G[11] = 4 * a2;
3332 G[12] = a4 * (a5 - 10);
3333 G[13] = 0;
3334 G[14] = 0;
3335 G[15] = 12 * a11 * a6 + 2 * a9;
3336 G[16] = 6 * a9;
3337 G[17] = 0;
3338 G[18] = a12 * a16;
3339 G[19] = a12 * a18;
3340 G[20] = 0;
3341 G[21] = 12 * a19 * a22 + a21;
3342 G[22] = a21;
3343 G[23] = 4 * a20;
3344 G[24] = a22 * a24 + a25;
3345 G[25] = a25 + 15 * a26;
3346 G[26] = a23 * a27;
3347 G[27] = a33;
3348 G[28] = a33;
3349 G[29] = a28 * a34;
3350 G[30] = 3 * a35 * (a37 - 126 * X[0] + 18);
3351 G[31] = 0;
3352 G[32] = 0;
3353 G[33] = a11 * (a39 - 84) + a37 - a38 + 6;
3354 G[34] = 504 * a36 - a40 + 18;
3355 G[35] = 0;
3356 G[36] = a16 * a44 + 24 * a41 * a47;
3357 G[37] = a18 * a44;
3358 G[38] = 0;
3359 G[39] = a52 * a53;
3360 G[40] = a53 * a56;
3361 G[41] = 0;
3362 G[42] = a57 * a60 * (56 * X[0] - 14) + a59;
3363 G[43] = a59;
3364 G[44] = 12 * a58;
3365 G[45] = 72 * a22 * a61 + a62 * a64 + a63;
3366 G[46] = 45 * a42 * a64 + a63;
3367 G[47] = 18 * a42 * a61;
3368 G[48] = a66 * a67 + a70;
3369 G[49] = a67 * a73 + a70;
3370 G[50] = 12 * a69;
3371 G[51] = 24 * a74 * a79 + a76;
3372 G[52] = a76;
3373 G[53] = a34 * a75;
3374 G[54] = a83 + 6 * a84;
3375 G[55] = a83 + 42 * a84;
3376 G[56] = a82 * a85;
3377 G[57] = a90;
3378 G[58] = a90;
3379 G[59] = 12 * a4 * a89 + a88 * a92;
3380 G[60] = a93 * (-1008 * a36 + a39 + 840 * a94 - 28);
3381 G[61] = 0;
3382 G[62] = 0;
3383 G[63] = a11 * a95 * a99 + 2 * a98;
3384 G[64] = 6 * a98;
3385 G[65] = 0;
3386 G[66] = a104 * a16 + a105 * a106 + a105 * a107;
3387 G[67] = a104 * a18;
3388 G[68] = 0;
3389 G[69] = a110 * a52 +
3390 20 * a93 * (35 * a111 + a112 + a48 * X[0] - a48 - a49 + a55 * X[1] + 15 * X[1]);
3391 G[70] = a110 * a56;
3392 G[71] = 0;
3393 G[72] = a113 * (224 * a111 + a114 * a36 + a114 - a115 - 144 * a116 + a117 + a40 * a45);
3394 G[73] = a113 * (504 * a111 - 504 * a116 + a118 * a36 + a118 + a119 * X[0] - a119 -
3395 72 * a36 + 24 * a94 + 72 * X[0] - 24);
3396 G[74] = 0;
3397 G[75] = a120 * a22 * a99 + a122;
3398 G[76] = a122;
3399 G[77] = 4 * a121;
3400 G[78] = 9 * a101 * a127 + 45 * a102 * a127 + a124 * a126 + a125;
3401 G[79] = a101 * a106 * a126 + a125;
3402 G[80] = 6 * a103 * a123;
3403 G[81] = a128 * a66 + a129 * a131 + a130;
3404 G[82] = a128 * a73 + a130;
3405 G[83] = a129 * a132;
3406 G[84] = a136 * (a133 + a134 + a51 - a72) + a138;
3407 G[85] = a136 * (a115 + a139 * X[0] - a139 + 21 * a36 - 42 * X[0] + 21) + a138;
3408 G[86] = 2 * a138;
3409 G[87] = a106 * a142 + a107 * a142 + a141;
3410 G[88] = a141;
3411 G[89] = a140 * a34;
3412 G[90] = a109 * a145 + a144 + 20 * a145 * a80;
3413 G[91] = 14 * a108 * a145 + a144;
3414 G[92] = a143 * a85;
3415 G[93] = a149 + a150 * (a146 + a15);
3416 G[94] = a149 + a150 * (a114 + 16 * X[0] - 16);
3417 G[95] = a148 * a34;
3418 G[96] = a131 * a152 + a155;
3419 G[97] = a155;
3420 G[98] = a132 * a152 + a154 * a156;
3421 G[99] = a159 + a163;
3422 G[100] = 9 * a159 + a163;
3423 G[101] = a156 * a162 + 2 * a161;
3424 G[102] = a169;
3425 G[103] = a169;
3426 G[104] =
3427 a168 * (20 * a111 + a116 * a174 - 120 * a116 + 280 * a166 + a170 * a36 + a170 * a45 +
3428 a170 + a171 * X[1] - a171 + a172 * X[0] - a172 + a173 * X[0] + a173 * X[1] -
3429 a173 - a174 * X[0] - a174 * X[1] + 20 * a94 + 60 * X[0] + 60 * X[1] - 20);
3430 return Gm;
3431 }
3432
3433 [[maybe_unused]] Matrix<kSize, kDims>
3434 antiderivatives([[maybe_unused]] Vector<kDims> const& X) const
3435 {
3437 Scalar* P = Pm.data();
3438 Scalar const a0 = std::sqrt(6);
3439 Scalar const a1 = a0 * X[0];
3440 Scalar const a2 = std::sqrt(10);
3441 Scalar const a3 = a2 * X[0];
3442 Scalar const a4 = ((X[0]) * (X[0]));
3443 Scalar const a5 = a2 * a4;
3444 Scalar const a6 = std::sqrt(5);
3445 Scalar const a7 = 2 * a6;
3446 Scalar const a8 = -a7;
3447 Scalar const a9 = 6 * X[1];
3448 Scalar const a10 = std::sqrt(15);
3449 Scalar const a11 = 2 * a10;
3450 Scalar const a12 = a11 * X[1];
3451 Scalar const a13 = -a11;
3452 Scalar const a14 = 4 * X[2];
3453 Scalar const a15 = a10 * a14 + a13;
3454 Scalar const a16 = std::sqrt(14);
3455 Scalar const a17 = a16 * X[0];
3456 Scalar const a18 = 5 * a16;
3457 Scalar const a19 = ((X[0]) * (X[0]) * (X[0]));
3458 Scalar const a20 = a16 * a19;
3459 Scalar const a21 = std::sqrt(7);
3460 Scalar const a22 = 4 * a19;
3461 Scalar const a23 = 18 * X[1];
3462 Scalar const a24 = std::sqrt(42);
3463 Scalar const a25 = (1.0 / 3.0) * a19;
3464 Scalar const a26 = 4 * a24;
3465 Scalar const a27 = 8 * X[1];
3466 Scalar const a28 = ((X[1]) * (X[1]));
3467 Scalar const a29 = 10 * a28;
3468 Scalar const a30 = std::sqrt(21);
3469 Scalar const a31 = 2 * a30;
3470 Scalar const a32 = -a31;
3471 Scalar const a33 = a31 * X[1];
3472 Scalar const a34 = a14 * a30;
3473 Scalar const a35 = 12 * X[2];
3474 Scalar const a36 = 3 * a16;
3475 Scalar const a37 = -a36;
3476 Scalar const a38 = 9 * a16;
3477 Scalar const a39 = a16 * X[2];
3478 Scalar const a40 = a39 * X[1];
3479 Scalar const a41 = 6 * a16;
3480 Scalar const a42 = a36 - a41 * X[2];
3481 Scalar const a43 = a16 * a23;
3482 Scalar const a44 = -a43;
3483 Scalar const a45 = a16 * a28;
3484 Scalar const a46 = a44 + 15 * a45;
3485 Scalar const a47 = std::sqrt(210);
3486 Scalar const a48 = a47 * X[1];
3487 Scalar const a49 = 3 * a47;
3488 Scalar const a50 = -a47 + a49 * X[2];
3489 Scalar const a51 = 6 * X[2];
3490 Scalar const a52 = 6 * a47;
3491 Scalar const a53 = ((X[2]) * (X[2]));
3492 Scalar const a54 = a47 + a52 * a53 - a52 * X[2];
3493 Scalar const a55 = a28 * a47 - 2 * a48;
3494 Scalar const a56 = std::numbers::sqrt2_v<Scalar>;
3495 Scalar const a57 = 3 * X[0];
3496 Scalar const a58 = 27 * a56;
3497 Scalar const a59 = a19 * a56;
3498 Scalar const a60 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
3499 Scalar const a61 = 42 * a60;
3500 Scalar const a62 = 126 * X[1];
3501 Scalar const a63 = 168 * X[1];
3502 Scalar const a64 = 6 * a0;
3503 Scalar const a65 = a0 * X[1];
3504 Scalar const a66 = 3 * a0;
3505 Scalar const a67 = a0 * a28;
3506 Scalar const a68 = a56 * a60;
3507 Scalar const a69 = 6 * a56;
3508 Scalar const a70 = -a69;
3509 Scalar const a71 = a56 * X[1];
3510 Scalar const a72 = 9 * a56;
3511 Scalar const a73 = 90 * a56;
3512 Scalar const a74 = a73 * X[1];
3513 Scalar const a75 = a28 * a56;
3514 Scalar const a76 = ((X[1]) * (X[1]) * (X[1]));
3515 Scalar const a77 = 210 * a76;
3516 Scalar const a78 = std::numbers::sqrt3_v<Scalar>;
3517 Scalar const a79 = 6 * a78;
3518 Scalar const a80 = a79 * X[1];
3519 Scalar const a81 = -a79;
3520 Scalar const a82 = a35 * a78 + a81;
3521 Scalar const a83 = a78 * X[1];
3522 Scalar const a84 = 84 * a78;
3523 Scalar const a85 = a78 * X[2];
3524 Scalar const a86 = a56 * X[2];
3525 Scalar const a87 = 45 * a56;
3526 Scalar const a88 = a28 * a87;
3527 Scalar const a89 = 360 * a71;
3528 Scalar const a90 = (3.0 / 2.0) * a60;
3529 Scalar const a91 = -a64;
3530 Scalar const a92 = a0 * X[2];
3531 Scalar const a93 = 78 * a65;
3532 Scalar const a94 = 12 * a0;
3533 Scalar const a95 = a94 * X[2];
3534 Scalar const a96 = 72 * a65;
3535 Scalar const a97 = 144 * X[2];
3536 Scalar const a98 = 252 * a28;
3537 Scalar const a99 = a91 + a95;
3538 Scalar const a100 = 126 * a0 * a76 - 198 * a67 + a93;
3539 Scalar const a101 = std::sqrt(30);
3540 Scalar const a102 = 6 * a101;
3541 Scalar const a103 = a101 * X[1];
3542 Scalar const a104 = a101 * X[2];
3543 Scalar const a105 = 3 * a101;
3544 Scalar const a106 = a105 * a28;
3545 Scalar const a107 = a101 * a53;
3546 Scalar const a108 = 18 * a107;
3547 Scalar const a109 = a101 * a28;
3548 Scalar const a110 = 72 * X[1];
3549 Scalar const a111 = 6 * a2;
3550 Scalar const a112 = -a111;
3551 Scalar const a113 = 12 * a2;
3552 Scalar const a114 = a2 * X[1];
3553 Scalar const a115 = 54 * a114;
3554 Scalar const a116 = 36 * a2;
3555 Scalar const a117 = a116 * X[2];
3556 Scalar const a118 = 45 * a28;
3557 Scalar const a119 = 18 * a2;
3558 Scalar const a120 = 144 * a114;
3559 Scalar const a121 = a2 * X[2];
3560 Scalar const a122 = a112 - a116 * a53 + a117;
3561 Scalar const a123 = 90 * a28;
3562 Scalar const a124 = 42 * a76;
3563 Scalar const a125 = a115 - a123 * a2 + a124 * a2;
3564 Scalar const a126 = -a41;
3565 Scalar const a127 = a126 + 24 * a39;
3566 Scalar const a128 = 72 * a39;
3567 Scalar const a129 = a16 * a53;
3568 Scalar const a130 = -a128 + 90 * a129 + a38;
3569 Scalar const a131 = 72 * X[2];
3570 Scalar const a132 = 180 * a129;
3571 Scalar const a133 = ((X[2]) * (X[2]) * (X[2]));
3572 Scalar const a134 = a126 + a128 - a132 + 120 * a133 * a16;
3573 Scalar const a135 = a41 * a76 + a43 - 18 * a45;
3574 Scalar const a136 = std::sqrt(22);
3575 Scalar const a137 = a136 * X[0];
3576 Scalar const a138 = a136 * a4;
3577 Scalar const a139 = 56 * a19;
3578 Scalar const a140 = a136 * a60;
3579 Scalar const a141 = std::pow(X[0], 5);
3580 Scalar const a142 = a136 * a141;
3581 Scalar const a143 = std::sqrt(11);
3582 Scalar const a144 = 48 * a141;
3583 Scalar const a145 = a143 * X[1];
3584 Scalar const a146 = std::sqrt(66);
3585 Scalar const a147 = 9 * a141;
3586 Scalar const a148 = a146 * X[1];
3587 Scalar const a149 = 10 * a146;
3588 Scalar const a150 = a146 * a28;
3589 Scalar const a151 = a136 * X[1];
3590 Scalar const a152 = a136 * a28;
3591 Scalar const a153 = 30 * a136;
3592 Scalar const a154 = a153 * X[1];
3593 Scalar const a155 = a136 * a76;
3594 Scalar const a156 = std::sqrt(110);
3595 Scalar const a157 = (1.0 / 5.0) * a141;
3596 Scalar const a158 = 6 * a156;
3597 Scalar const a159 = 2 * a156;
3598 Scalar const a160 = 24 * X[1];
3599 Scalar const a161 = -a156 * a160;
3600 Scalar const a162 = 42 * a156;
3601 Scalar const a163 = a162 * a28;
3602 Scalar const a164 = -a159;
3603 Scalar const a165 = a156 * X[1];
3604 Scalar const a166 = 36 * a165;
3605 Scalar const a167 = 126 * a28;
3606 Scalar const a168 = a156 * a167;
3607 Scalar const a169 = a156 * a76;
3608 Scalar const a170 = 224 * a76;
3609 Scalar const a171 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
3610 Scalar const a172 = 126 * a171;
3611 Scalar const a173 = std::sqrt(33);
3612 Scalar const a174 = 2 * a173;
3613 Scalar const a175 = -a174;
3614 Scalar const a176 = a174 * X[1];
3615 Scalar const a177 = a14 * a173;
3616 Scalar const a178 = a173 * X[1];
3617 Scalar const a179 = a173 * X[2];
3618 Scalar const a180 = a136 * X[2];
3619 Scalar const a181 = 3 * a136;
3620 Scalar const a182 = -6 * a180 + a181;
3621 Scalar const a183 = 15 * a136;
3622 Scalar const a184 = -a136 * a23 + a183 * a28;
3623 Scalar const a185 = a151 * X[2];
3624 Scalar const a186 = 4 * a146;
3625 Scalar const a187 = a148 * X[2];
3626 Scalar const a188 = a146 * X[2];
3627 Scalar const a189 = 22 * a146 - 28 * a188;
3628 Scalar const a190 = 2 * a146;
3629 Scalar const a191 = -a190;
3630 Scalar const a192 = 26 * a148;
3631 Scalar const a193 = a186 * X[2];
3632 Scalar const a194 = a124 * a146;
3633 Scalar const a195 = a150 * X[2];
3634 Scalar const a196 = -13 * a146 + 24 * a188;
3635 Scalar const a197 = std::sqrt(330);
3636 Scalar const a198 = -a197;
3637 Scalar const a199 = a197 * X[1];
3638 Scalar const a200 = a197 * X[2];
3639 Scalar const a201 = 2 * a197;
3640 Scalar const a202 = a197 * a28;
3641 Scalar const a203 = a199 * X[2];
3642 Scalar const a204 = -22 * a199;
3643 Scalar const a205 = a201 * X[2];
3644 Scalar const a206 = -a205;
3645 Scalar const a207 = a204 + a206;
3646 Scalar const a208 = 3 * a197;
3647 Scalar const a209 = a208 * X[2];
3648 Scalar const a210 = 105 * a202;
3649 Scalar const a211 = a197 * a76;
3650 Scalar const a212 = 84 * a211;
3651 Scalar const a213 = 42 * a197;
3652 Scalar const a214 = a213 * X[1];
3653 Scalar const a215 = a214 * X[2];
3654 Scalar const a216 = 84 * a202;
3655 Scalar const a217 = 168 * a211;
3656 Scalar const a218 = 84 * a171 * a197 + a197 + a210 - a217;
3657 Scalar const a219 = a197 * a53;
3658 Scalar const a220 = a197 - 6 * a200 + 6 * a219;
3659 Scalar const a221 = -a201 * X[1] + a202;
3660 Scalar const a222 = 4 * a156;
3661 Scalar const a223 = 30 * a156;
3662 Scalar const a224 = a156 * X[2];
3663 Scalar const a225 = a156 * a28;
3664 Scalar const a226 = a156 * a53;
3665 Scalar const a227 = a165 * X[2];
3666 Scalar const a228 = a156 * a23;
3667 Scalar const a229 = 12 * a156;
3668 Scalar const a230 = a229 * X[2];
3669 Scalar const a231 = 14 * a169;
3670 Scalar const a232 = a165 * a53;
3671 Scalar const a233 = a225 * X[2];
3672 Scalar const a234 = 5 * a136;
3673 Scalar const a235 = 10 * a136;
3674 Scalar const a236 = 115 * a136;
3675 Scalar const a237 = 90 * a151;
3676 Scalar const a238 = -a237;
3677 Scalar const a239 = a153 * X[2];
3678 Scalar const a240 = -a239;
3679 Scalar const a241 = a238 + a240;
3680 Scalar const a242 = 45 * a136;
3681 Scalar const a243 = 345 * a152;
3682 Scalar const a244 = a153 * a53;
3683 Scalar const a245 = 510 * a185;
3684 Scalar const a246 = a151 * a53;
3685 Scalar const a247 = 780 * a152;
3686 Scalar const a248 = a234 + a244;
3687 Scalar const a249 = 180 * a136 * a171 - 440 * a155 + a243;
3688 Scalar const a250 = std::sqrt(154);
3689 Scalar const a251 = 15 * X[1];
3690 Scalar const a252 = a250 * X[2];
3691 Scalar const a253 = 22 * a250;
3692 Scalar const a254 = a250 * X[1];
3693 Scalar const a255 = 20 * a250;
3694 Scalar const a256 = a250 * a53;
3695 Scalar const a257 = a254 * X[2];
3696 Scalar const a258 = a250 * a9;
3697 Scalar const a259 = 24 * a252;
3698 Scalar const a260 = 2 * a250;
3699 Scalar const a261 = a260 * a76;
3700 Scalar const a262 = a133 * a250;
3701 Scalar const a263 = 40 * a262;
3702 Scalar const a264 = 60 * a256;
3703 Scalar const a265 = a250 * a28;
3704 Scalar const a266 = a265 * X[2];
3705 Scalar const a267 = 10 * a250;
3706 Scalar const a268 = 300 * a256;
3707 Scalar const a269 = std::sqrt(770);
3708 Scalar const a270 = 3 * X[1];
3709 Scalar const a271 = a269 * X[2];
3710 Scalar const a272 = 2 * a269;
3711 Scalar const a273 = 10 * a269;
3712 Scalar const a274 = a271 * X[1];
3713 Scalar const a275 = a269 * X[1];
3714 Scalar const a276 = 12 * a275;
3715 Scalar const a277 = -a276;
3716 Scalar const a278 = a269 * a35;
3717 Scalar const a279 = -a278;
3718 Scalar const a280 = a277 + a279;
3719 Scalar const a281 = 30 * a269;
3720 Scalar const a282 = a28 * a281;
3721 Scalar const a283 = a269 * a76;
3722 Scalar const a284 = a281 * a53;
3723 Scalar const a285 = 132 * a274;
3724 Scalar const a286 = a275 * a53;
3725 Scalar const a287 = 114 * a28;
3726 Scalar const a288 = a269 * a53;
3727 Scalar const a289 = 270 * a28;
3728 Scalar const a290 = a133 * a269;
3729 Scalar const a291 = 20 * a290;
3730 Scalar const a292 = a269 + a284 - a291;
3731 Scalar const a293 = 9 * a171 * a269 + a282 - 28 * a283;
3732 Scalar const a294 = (3.0 / 5.0) * a156;
3733 Scalar const a295 = 3 * a156;
3734 Scalar const a296 = 15 * a224 - a295;
3735 Scalar const a297 = 60 * a224;
3736 Scalar const a298 = -a297;
3737 Scalar const a299 = a229 * X[1];
3738 Scalar const a300 = -a299;
3739 Scalar const a301 = a298 + a300;
3740 Scalar const a302 = 90 * a156;
3741 Scalar const a303 = a158 + a302 * a53;
3742 Scalar const a304 = 18 * a225;
3743 Scalar const a305 = 180 * a165;
3744 Scalar const a306 = a305 * X[2];
3745 Scalar const a307 = a302 * X[2];
3746 Scalar const a308 = -a158;
3747 Scalar const a309 = 270 * a226;
3748 Scalar const a310 = a133 * a156;
3749 Scalar const a311 = a307 + a308 - a309 + 210 * a310;
3750 Scalar const a312 = 420 * a310;
3751 Scalar const a313 = ((X[2]) * (X[2]) * (X[2]) * (X[2]));
3752 Scalar const a314 = 210 * a156 * a313 + a295 + a309 - a312;
3753 Scalar const a315 = a229 * a76;
3754 Scalar const a316 = a171 * a295 + a304 - a315;
3755 Scalar const a317 = 4 * X[0];
3756 Scalar const a318 = a317 - 1;
3757 Scalar const a319 = a11 * X[0];
3758 Scalar const a320 = 10 * X[0];
3759 Scalar const a321 = 15 * a4;
3760 Scalar const a322 = -a320 + a321 + 1;
3761 Scalar const a323 = a16 * X[1];
3762 Scalar const a324 = 18 * X[0];
3763 Scalar const a325 = 2 * a21;
3764 Scalar const a326 = 14 * X[0];
3765 Scalar const a327 = 12 * a4;
3766 Scalar const a328 = 2 * X[0];
3767 Scalar const a329 = 6 * X[0];
3768 Scalar const a330 = 24 * X[0];
3769 Scalar const a331 = -a30 * a326 + a30 * a327 + a31;
3770 Scalar const a332 = 6 * a17;
3771 Scalar const a333 = -a332 + a36 * a4;
3772 Scalar const a334 = a47 * X[0];
3773 Scalar const a335 = -2 * a334 + a4 * a47;
3774 Scalar const a336 = 63 * a4;
3775 Scalar const a337 = a139 + a324 - a336 - 1;
3776 Scalar const a338 = 252 * a4;
3777 Scalar const a339 = 90 * X[0];
3778 Scalar const a340 = 168 * a19;
3779 Scalar const a341 = a0 * a4;
3780 Scalar const a342 = 24 * a19;
3781 Scalar const a343 = a339 * a56;
3782 Scalar const a344 = a4 * a56;
3783 Scalar const a345 = -a338 * a78 + a339 * a78 + a340 * a78;
3784 Scalar const a346 = a56 * X[0];
3785 Scalar const a347 = a86 * X[0];
3786 Scalar const a348 = 144 * a4;
3787 Scalar const a349 = a343 - 153 * a344 + 72 * a59 - a72;
3788 Scalar const a350 = 39 * a0;
3789 Scalar const a351 = 18 * a1 + a19 * a64 - 18 * a341;
3790 Scalar const a352 = 8 * X[0];
3791 Scalar const a353 = a101 * X[0];
3792 Scalar const a354 = 9 * a101;
3793 Scalar const a355 = a101 * a4;
3794 Scalar const a356 = a104 * X[0];
3795 Scalar const a357 = 144 * X[0];
3796 Scalar const a358 = a101 * a342 - a105 + 30 * a353 - 51 * a355;
3797 Scalar const a359 = 27 * a2;
3798 Scalar const a360 = 36 * a3;
3799 Scalar const a361 = a119 * a4;
3800 Scalar const a362 = a111 * a19 + 18 * a3 - a361;
3801 Scalar const a363 = 18 * a17;
3802 Scalar const a364 = 72 * a17;
3803 Scalar const a365 = 18 * a4;
3804 Scalar const a366 = -a16 * a365 + 6 * a20 + a363;
3805 Scalar const a367 = 28 * X[0];
3806 Scalar const a368 = 168 * a4;
3807 Scalar const a369 = -336 * a19 - a367 + a368 + 210 * a60 + 1;
3808 Scalar const a370 = a143 * X[0];
3809 Scalar const a371 = a143 * a4;
3810 Scalar const a372 = a143 * a19;
3811 Scalar const a373 = 2 * a143;
3812 Scalar const a374 = 240 * a60;
3813 Scalar const a375 = a146 * X[0];
3814 Scalar const a376 = a146 * a4;
3815 Scalar const a377 = a146 * a19;
3816 Scalar const a378 = a146 * a60;
3817 Scalar const a379 = -a183;
3818 Scalar const a380 = a136 * a19;
3819 Scalar const a381 = 2 * a136;
3820 Scalar const a382 = std::pow(X[1], 5);
3821 Scalar const a383 = 56 * a156;
3822 Scalar const a384 = a156 * X[0];
3823 Scalar const a385 = 36 * a156;
3824 Scalar const a386 = a19 * a229;
3825 Scalar const a387 = a156 * a60;
3826 Scalar const a388 = a158 * a4;
3827 Scalar const a389 = 108 * a4;
3828 Scalar const a390 = 120 * a19;
3829 Scalar const a391 = 432 * a4;
3830 Scalar const a392 = a173 * a19;
3831 Scalar const a393 = a173 * X[0];
3832 Scalar const a394 = a173 * a4;
3833 Scalar const a395 = a173 * a374 + a174 - 456 * a392 - 50 * a393 + 264 * a394;
3834 Scalar const a396 = 90 * a137;
3835 Scalar const a397 = a137 * X[2];
3836 Scalar const a398 = a138 * X[2];
3837 Scalar const a399 = 270 * a180;
3838 Scalar const a400 = 60 * a137;
3839 Scalar const a401 = 246 * a138 + 135 * a140 - 324 * a380 - a400;
3840 Scalar const a402 = a188 * X[0];
3841 Scalar const a403 = a188 * a4;
3842 Scalar const a404 = a190 - 26 * a375 + 66 * a376 - 62 * a377 + 20 * a378;
3843 Scalar const a405 = a213 * X[0];
3844 Scalar const a406 = 35 * a197;
3845 Scalar const a407 = a197 * X[0];
3846 Scalar const a408 = 56 * a200;
3847 Scalar const a409 = 11 * a197;
3848 Scalar const a410 = 33 * a197;
3849 Scalar const a411 = 21 * a200;
3850 Scalar const a412 = 6 * a4;
3851 Scalar const a413 = a197 * a60;
3852 Scalar const a414 = -a197 * a22 - a197 * a317 + a197 * a412 + a413;
3853 Scalar const a415 = a19 * a197;
3854 Scalar const a416 = a200 * X[0];
3855 Scalar const a417 = a200 * a4;
3856 Scalar const a418 = a197 * a4;
3857 Scalar const a419 = -20 * a407 + 45 * a413 - 108 * a415 + 82 * a418;
3858 Scalar const a420 = a156 * a4;
3859 Scalar const a421 = a224 * X[0];
3860 Scalar const a422 = a226 * X[0];
3861 Scalar const a423 = a224 * a4;
3862 Scalar const a424 = 62 * a19;
3863 Scalar const a425 = -a156 * a424 + a159 - 26 * a384 + 20 * a387 + 66 * a420;
3864 Scalar const a426 = a136 * a53;
3865 Scalar const a427 = -20 * a137;
3866 Scalar const a428 = a153 * a4 + a234 * a60 - 20 * a380 + a427;
3867 Scalar const a429 = a250 * X[0];
3868 Scalar const a430 = a252 * X[0];
3869 Scalar const a431 = a252 * a4;
3870 Scalar const a432 = 240 * a19;
3871 Scalar const a433 = a250 * a4;
3872 Scalar const a434 = -a250 * a424 + a255 * a60 + a260 - 26 * a429 + 66 * a433;
3873 Scalar const a435 = 7 * a269;
3874 Scalar const a436 = 76 * a271;
3875 Scalar const a437 = a269 * X[0];
3876 Scalar const a438 = a273 * a4 + a273 - 20 * a437;
3877 Scalar const a439 = 150 * a288;
3878 Scalar const a440 = 66 * a271;
3879 Scalar const a441 = a271 * X[0];
3880 Scalar const a442 = 6 * a269;
3881 Scalar const a443 = a19 * a442 + a269 * a324 - a269 * a365 - a442;
3882 Scalar const a444 = 36 * a4;
3883 Scalar const a445 = -a22 * a269 - a269 * a317 + a269 * a60 + a4 * a442;
3884 Scalar const a446 = -a229 * X[0];
3885 Scalar const a447 = a298 + a446;
3886 Scalar const a448 = a156 * a365;
3887 Scalar const a449 = 180 * a421;
3888 Scalar const a450 = a295 * a60 - a386 + a448;
3889 Scalar const a451 = a270 + X[0] - 1;
3890 Scalar const a452 = a451 * X[2];
3891 Scalar const a453 = a27 * X[0] - a27 + a29 - a328 + a4 + 1;
3892 Scalar const a454 = a453 * X[2];
3893 Scalar const a455 = 12 * a30 * X[0];
3894 Scalar const a456 = 3 * a4;
3895 Scalar const a457 = X[0] * X[1];
3896 Scalar const a458 = a57 - 1;
3897 Scalar const a459 =
3898 (a118 * X[0] - a118 + a19 + a251 + a321 * X[1] - a456 - 30 * a457 + a458 + 35 * a76) *
3899 X[2];
3900 Scalar const a460 = a103 * X[0];
3901 Scalar const a461 = a3 * X[1];
3902 Scalar const a462 = 60 * a16;
3903 Scalar const a463 = 36 * a16;
3904 Scalar const a464 = a137 * X[1];
3905 Scalar const a465 = 270 * a464;
3906 Scalar const a466 = a138 * X[1];
3907 Scalar const a467 = a138 * a28;
3908 Scalar const a468 = a148 * X[0];
3909 Scalar const a469 = a150 * X[0];
3910 Scalar const a470 = a148 * a4;
3911 Scalar const a471 = 21 * a199;
3912 Scalar const a472 = 66 * a199;
3913 Scalar const a473 = a415 * X[1];
3914 Scalar const a474 = a199 * X[0];
3915 Scalar const a475 = a165 * X[0];
3916 Scalar const a476 = 60 * a19;
3917 Scalar const a477 = a225 * X[0];
3918 Scalar const a478 = a165 * a4;
3919 Scalar const a479 = a137 * a28;
3920 Scalar const a480 = a254 * X[0];
3921 Scalar const a481 = 12 * a250;
3922 Scalar const a482 = a265 * X[0];
3923 Scalar const a483 = 5 * a269;
3924 Scalar const a484 = 100 * a275;
3925 Scalar const a485 = 66 * a275;
3926 Scalar const a486 = a275 * X[0];
3927 Scalar const a487 = 105 * a156;
3928 Scalar const a488 = a302 * a4;
3929 Scalar const a489 = a28 * a302;
3930 Scalar const a490 = a305 * X[0];
3931 P[0] = a1;
3932 P[1] = -a3 + 2 * a5;
3933 P[2] = a4 * a6 + (a6 * a9 + a8) * X[0];
3934 P[3] = a10 * a4 + (a12 + a15) * X[0];
3935 P[4] = a17 - a18 * a4 + 5 * a20;
3936 P[5] = a21 * a22 + a4 * (a21 * a23 - 7 * a21) + (-a21 * a9 + 2 * a21) * X[0];
3937 P[6] = a24 * a25 + a4 * (-a24 + a26 * X[1]) + (-a24 * a27 + a24 * a29 + a24) * X[0];
3938 P[7] = a22 * a30 + a4 * (a30 * a35 + a30 * a9 - 7 * a30) + (-a32 - a33 - a34) * X[0];
3939 P[8] = a20 + a4 * (a36 * X[2] + a37 + a38 * X[1]) + (30 * a40 + a42 + a46) * X[0];
3940 P[9] = a25 * a47 + a4 * (a48 + a50) + (a48 * a51 + a54 + a55) * X[0];
3941 P[10] = a4 * a58 - a56 * a57 + a56 * a61 - 63 * a59;
3942 P[11] = a19 * (a63 - 84) + a4 * (45 - a62) + a61 + (a23 - 6) * X[0];
3943 P[12] = a19 * (-17 * a0 + 64 * a65) + a4 * (15 * a0 - 108 * a65 + 120 * a67) + a60 * a64 +
3944 (24 * a0 * X[1] - a66 - 30 * a67) * X[0];
3945 P[13] = a19 * (a70 + 30 * a71) + a4 * (a72 - a74 + 135 * a75) + (3.0 / 2.0) * a68 +
3946 (a56 * a77 + a70 + a74 - 270 * a75) * X[0];
3947 P[14] = a19 * (56 * a83 - a84 + 112 * a85) + a4 * (45 * a78 - 42 * a83 - a84 * X[2]) +
3948 a61 * a78 + (a80 + a82) * X[0];
3949 P[15] = a19 * (-51 * a56 + 144 * a71 + 48 * a86) +
3950 a4 * (-243 * a71 + 180 * a75 - 81 * a86 + a87 + a89 * X[2]) + 18 * a68 +
3951 (54 * a56 * X[1] + 18 * a56 * X[2] - a72 - a74 * X[2] - a88) * X[0];
3952 P[16] = a0 * a90 + a19 * (26 * a65 + a91 + 4 * a92) +
3953 a4 * (9 * a0 + 99 * a67 - a93 - a95 + a96 * X[2]) +
3954 (a100 - a65 * a97 + a92 * a98 + a99) * X[0];
3955 P[17] = a102 * a60 + a19 * (-17 * a101 + 16 * a103 + 48 * a104) +
3956 a4 * (15 * a101 - 27 * a103 + a104 * a110 - 81 * a104 + 72 * a107 + 12 * a109) +
3957 (6 * a101 * X[1] + 18 * a101 * X[2] - a104 * a23 - a105 - a106 - a108) * X[0];
3958 P[18] = a19 * (a112 + a113 * X[2] + a2 * a23) + a2 * a90 +
3959 a4 * (-a115 - a117 + a118 * a2 + a119 * a53 + a120 * X[2] + 9 * a2) +
3960 (252 * a114 * a53 - 288 * a114 * X[2] + a121 * a98 + a122 + a125) * X[0];
3961 P[19] = a16 * a90 + a19 * (a127 + a41 * X[1]) +
3962 a4 * (a128 * X[1] + a130 + a28 * a38 + a44) +
3963 (a131 * a45 + a132 * X[1] + a134 + a135 - 144 * a40) * X[0];
3964 P[20] = a136 * a139 + a137 - 14 * a138 - 84 * a140 + 42 * a142;
3965 P[21] = a143 * a144 + a19 * (88 * a143 - 216 * a145) + a4 * (-25 * a143 + 72 * a145) +
3966 a60 * (-114 * a143 + 180 * a145) + (-a143 * a9 + 2 * a143) * X[0];
3967 P[22] = a146 * a147 + a19 * (-a146 * a63 + (82.0 / 3.0) * a146 + 150 * a150) +
3968 a4 * (-a123 * a146 + 76 * a146 * X[1] - a149) + a60 * (-27 * a146 + 90 * a148) +
3969 (-a146 * a27 + a146 + a149 * a28) * X[0];
3970 P[23] = 4 * a142 + a19 * (22 * a136 - 210 * a151 + 300 * a152) +
3971 a4 * (-13 * a136 + 180 * a151 - 495 * a152 + 350 * a155) +
3972 a60 * (-31.0 / 2.0 * a136 + 75 * a151) +
3973 (90 * a136 * a28 + 2 * a136 - a154 - 70 * a155) * X[0];
3974 P[24] = a156 * a157 + a19 * (a159 + a161 + a163) + a4 * (a164 + a166 - a168 + 112 * a169) +
3975 a60 * (-a156 + a158 * X[1]) +
3976 (-a156 * a170 + a156 * a172 + a156 + a161 + a168) * X[0];
3977 P[25] = a144 * a173 + a19 * (88 * a173 - 72 * a178 - 144 * a179) +
3978 a4 * (a160 * a173 - 25 * a173 + 48 * a179) +
3979 a60 * (-114 * a173 + 60 * a178 + 120 * a179) + (-a175 - a176 - a177) * X[0];
3980 P[26] = 27 * a142 + a19 * (82 * a136 - 378 * a151 + 225 * a152 - 126 * a180 + 450 * a185) +
3981 a4 * (171 * a136 * X[1] + 57 * a136 * X[2] - 135 * a152 - a153 - 270 * a185) +
3982 a60 * (-81 * a136 + (405.0 / 2.0) * a151 + (135.0 / 2.0) * a180) +
3983 (a154 * X[2] + a182 + a184) * X[0];
3984 P[27] =
3985 a141 * a186 + a19 * (-182 * a148 + 220 * a150 + 160 * a187 + a189) +
3986 a4 * (a146 * a77 + 156 * a148 - 363 * a150 - 264 * a187 + 420 * a195 + a196) +
3987 a60 * (-31.0 / 2.0 * a146 + 65 * a148 + a149 * X[2]) +
3988 (66 * a146 * a28 + 48 * a146 * X[1] * X[2] - a191 - a192 - a193 - a194 - 84 * a195) *
3989 X[0];
3990 P[28] = a157 * a197 + a19 * (a201 + 35 * a202 + 14 * a203 + a207) +
3991 a4 * (33 * a199 - a201 + a209 - a210 + a212 - a215 + a216 * X[2]) +
3992 a60 * (a198 + (11.0 / 2.0) * a199 + (1.0 / 2.0) * a200) +
3993 (-168 * a202 * X[2] + a207 + a215 + a217 * X[2] + a218) * X[0];
3994 P[29] =
3995 a147 * a197 +
3996 a19 * ((82.0 / 3.0) * a197 - 126 * a200 + 15 * a202 + 90 * a203 - a214 + 90 * a219) +
3997 a4 * (19 * a197 * X[1] + 57 * a197 * X[2] - 10 * a197 - 9 * a202 - 54 * a203 -
3998 54 * a219) +
3999 a60 * (-27 * a197 + (45.0 / 2.0) * a199 + (135.0 / 2.0) * a200) +
4000 (a200 * a9 + a220 + a221) * X[0];
4001 P[30] = a141 * a222 +
4002 a19 * (-a156 * a62 + 22 * a156 - 84 * a224 + 100 * a225 + 40 * a226 + 320 * a227) +
4003 a4 * (-13 * a156 + 108 * a165 + 70 * a169 + 72 * a224 - 165 * a225 - 66 * a226 -
4004 528 * a227 + 420 * a232 + 420 * a233) +
4005 a60 * (-31.0 / 2.0 * a156 + 45 * a165 + a223 * X[2]) +
4006 (30 * a156 * a28 + 12 * a156 * a53 + 96 * a156 * X[1] * X[2] - a164 - a228 - a230 -
4007 a231 - 84 * a232 - 84 * a233) *
4008 X[0];
4009 P[31] = a142 + a19 * (170 * a185 + a235 * a53 + a235 + a236 * a28 + a241) +
4010 a4 * (135 * a151 + 220 * a155 - a235 + a242 * X[2] - a243 - a244 - a245 +
4011 240 * a246 + a247 * X[2]) +
4012 a60 * ((45.0 / 2.0) * a151 + (15.0 / 2.0) * a180 - a234) +
4013 (1080 * a152 * a53 - 1560 * a152 * X[2] + 1080 * a155 * X[2] + a241 + a245 -
4014 480 * a246 + a248 + a249) *
4015 X[0];
4016 P[32] = 4 * a141 * a250 +
4017 a19 * (-168 * a252 + a253 - 42 * a254 + a255 * a28 + 200 * a256 + 160 * a257) +
4018 a4 * (-13 * a250 + 144 * a252 + 36 * a254 - 330 * a256 - 264 * a257 + 200 * a262 -
4019 33 * a265 + 120 * a266 + a267 * a76 + a268 * X[1]) +
4020 a60 * (a250 * a251 - 31.0 / 2.0 * a250 + 60 * a252) +
4021 (6 * a250 * a28 + 60 * a250 * a53 + 48 * a250 * X[1] * X[2] + 2 * a250 - a258 -
4022 a259 - a261 - a263 - a264 * X[1] - 24 * a266) *
4023 X[0];
4024 P[33] = a157 * a269 + a19 * (a272 + a273 * a28 + a273 * a53 + 44 * a274 + a280) +
4025 a4 * (a133 * a273 + a23 * a269 + a271 * a287 + 18 * a271 - a272 - a282 + 14 * a283 -
4026 a284 - a285 + 150 * a286) +
4027 a60 * (a269 * a270 - a269 + 3 * a271) +
4028 (180 * a133 * a275 - 228 * a271 * a28 + a280 + 108 * a283 * X[2] + a285 -
4029 300 * a286 + a288 * a289 + a292 + a293) *
4030 X[0];
4031 P[34] = a141 * a294 + a19 * (a158 * a28 + 60 * a227 + a301 + a303) +
4032 a4 * (a158 * a76 + a228 + 270 * a232 + a28 * a307 - a304 - a306 + a311) +
4033 a60 * (a295 * X[1] + a296) +
4034 (420 * a133 * a165 + 60 * a169 * X[2] + 270 * a225 * a53 - 540 * a232 - 180 * a233 +
4035 a301 + a306 + a314 + a316) *
4036 X[0];
4037 P[35] = a65;
4038 P[36] = a114 * a318;
4039 P[37] = 3 * a28 * a6 + (a7 * X[0] + a8) * X[1];
4040 P[38] = a10 * a28 + (a15 + a319) * X[1];
4041 P[39] = a322 * a323;
4042 P[40] = a28 * (a21 * a324 - 3 * a21) + (-a21 * a326 + a21 * a327 + a325) * X[1];
4043 P[41] = (10.0 / 3.0) * a24 * a76 + a28 * (a24 * a317 - a26) +
4044 (-a24 * a328 + a24 * a4 + a24) * X[1];
4045 P[42] = a28 * (a30 * a329 - a30) + (a30 * a330 * X[2] + a331 - a34) * X[1];
4046 P[43] = a18 * a76 + a28 * (9 * a17 - a38 + 15 * a39) + (a332 * X[2] + a333 + a42) * X[1];
4047 P[44] = a28 * (a334 + a50) + (1.0 / 3.0) * a47 * a76 + (a334 * a51 + a335 + a54) * X[1];
4048 P[45] = a270 * a337 * a56;
4049 P[46] = a28 * (a338 - 126 * X[0] + 9) + (-a338 + a339 + a340 - 6) * X[1];
4050 P[47] = a28 * (-108 * a1 + 96 * a341 + a94) + a76 * (-10 * a0 + 80 * a1) +
4051 (a0 * a342 + 30 * a1 - 51 * a341 - a66) * X[1];
4052 P[48] = (105.0 / 2.0) * a171 * a56 + a28 * (-a343 + a4 * a87 + a87) + a76 * (a343 - a73) +
4053 (a19 * a69 + a324 * a56 - 18 * a344 + a70) * X[1];
4054 P[49] = a28 * (a4 * a84 - 42 * a78 * X[0] + 3 * a78) +
4055 (a345 + 336 * a4 * a85 + a82 - 168 * a85 * X[0]) * X[1];
4056 P[50] = a28 * (216 * a344 - 243 * a346 + 360 * a347 + a58 - a87 * X[2]) +
4057 a76 * (120 * a346 - 15 * a56) + (-162 * a347 + a348 * a86 + a349 + 18 * a86) * X[1];
4058 P[51] = (63.0 / 2.0) * a0 * a171 +
4059 a28 * (a1 * a131 - 78 * a1 + a350 * a4 + a350 - 72 * a92) +
4060 a76 * (-66 * a0 + 66 * a1 + 84 * a92) +
4061 (-24 * a1 * X[2] + a351 + a4 * a95 + a99) * X[1];
4062 P[52] = a28 * (a105 - 27 * a353 - a354 * X[2] + 24 * a355 + 72 * a356) +
4063 a76 * (a101 * a352 - a101) +
4064 (a104 * a348 + 18 * a104 + a107 * a357 - a108 - 162 * a356 + a358) * X[1];
4065 P[53] = (21.0 / 2.0) * a171 * a2 +
4066 a28 * (-144 * a121 + 126 * a2 * a53 + a3 * a97 - 54 * a3 + a359 * a4 + a359) +
4067 a76 * (84 * a121 - 30 * a2 + 30 * a3) +
4068 (a122 - a131 * a3 + a360 * a53 + a362 + 36 * a5 * X[2]) * X[1];
4069 P[54] = (3.0 / 2.0) * a16 * a171 + a28 * (a130 - a363 + a364 * X[2] + a38 * a4) +
4070 a76 * (a127 + a332) +
4071 (a128 * a4 + a134 + 180 * a17 * a53 - a17 * a97 + a366) * X[1];
4072 P[55] = a151 * a369;
4073 P[56] = a28 * (-3 * a143 + 72 * a370 - 324 * a371 + 360 * a372) +
4074 (a143 * a374 - 50 * a370 + 264 * a371 - 456 * a372 + a373) * X[1];
4075 P[57] = a28 * (-a146 * a338 - a186 + 76 * a375 + 180 * a377) +
4076 a76 * ((10.0 / 3.0) * a146 - 60 * a375 + 150 * a376) +
4077 (a146 - 20 * a375 + 82 * a376 - 108 * a377 + 45 * a378) * X[1];
4078 P[58] = a171 * (-35.0 / 2.0 * a136 + 175 * a137) +
4079 a28 * (180 * a137 - 315 * a138 + a379 + 150 * a380) +
4080 a76 * (-330 * a137 + 300 * a138 + a153) +
4081 (-26 * a137 + 66 * a138 + 20 * a140 - 62 * a380 + a381) * X[1];
4082 P[59] = (126.0 / 5.0) * a156 * a382 + a171 * (a383 * X[0] - a383) +
4083 a28 * (-a229 - a385 * a4 + a385 * X[0] + a386) +
4084 a76 * (a162 * a4 + a162 - 84 * a384) +
4085 (-a156 * a22 - a156 * a317 + a156 + a387 + a388) * X[1];
4086 P[60] = a28 * (a173 * a330 - a173 * a389 + a173 * a390 - a173) +
4087 (-a177 + 480 * a179 * a19 - a179 * a391 + 96 * a179 * X[0] + a395) * X[1];
4088 P[61] = a28 * (-9 * a136 + 171 * a137 - 567 * a138 + a183 * X[2] + 405 * a380 - 270 * a397 +
4089 675 * a398) +
4090 a76 * (225 * a138 + a234 - a396) +
4091 (a182 + a19 * a399 + 114 * a397 - 378 * a398 + a401) * X[1];
4092 P[62] = a171 * (-21.0 / 2.0 * a146 + 105 * a375) +
4093 a28 * (a196 + 156 * a375 - 273 * a376 + 130 * a377 - 264 * a402 + 240 * a403) +
4094 a76 * (a189 - 242 * a375 + 220 * a376 + 280 * a402) +
4095 (40 * a188 * a19 - a193 + 48 * a402 - 84 * a403 + a404) * X[1];
4096 P[63] =
4097 a171 * (a213 * X[2] - a213 + a405) + (84.0 / 5.0) * a197 * a382 +
4098 a28 * (a19 * a409 - a4 * a410 + a4 * a411 - a405 * X[2] - a409 + a410 * X[0] + a411) +
4099 a76 * (a4 * a406 + a406 - 70 * a407 + a408 * X[0] - a408) +
4100 (a19 * a205 + a197 + a200 * a329 - a200 * a412 + a206 + a414) * X[1];
4101 P[64] =
4102 a28 * (-a197 * a336 + a198 + a209 + 19 * a407 + 45 * a415 - 54 * a416 + 135 * a417) +
4103 a76 * (a197 * a321 - a197 * a329 + (1.0 / 3.0) * a197) +
4104 (270 * a219 * a4 - 108 * a219 * X[0] + a220 + 270 * a415 * X[2] + 114 * a416 -
4105 378 * a417 + a419) *
4106 X[1];
4107 P[65] = a171 * (-7.0 / 2.0 * a156 + 35 * a384) +
4108 a28 * (-9 * a156 - a162 * a53 + a19 * a302 + 48 * a224 + 108 * a384 - 189 * a420 -
4109 528 * a421 + 420 * a422 + 480 * a423) +
4110 a76 * (10 * a156 - 28 * a224 - 110 * a384 + 100 * a420 + 280 * a421) +
4111 (-a224 * a338 + a224 * a357 + a224 * a390 + 120 * a226 * a4 + a229 * a53 - a230 -
4112 132 * a422 + a425) *
4113 X[1];
4114 P[66] =
4115 36 * a136 * a382 + a171 * (-110 * a136 + 110 * a137 + a399) +
4116 a28 * (240 * a137 * a53 + 135 * a137 - 135 * a138 + 255 * a180 + a19 * a242 - a242 -
4117 510 * a397 + 255 * a398 - 240 * a426) +
4118 a76 * (-230 * a137 - 520 * a180 + a236 * a4 + a236 + 520 * a397 + 360 * a426) +
4119 (a19 * a239 + a240 + a244 * a4 + a248 + a396 * X[2] - 90 * a398 - a400 * a53 + a428) *
4120 X[1];
4121 P[67] = a171 * (-1.0 / 2.0 * a250 + 5 * a429) +
4122 a28 * (30 * a19 * a250 - a250 * a336 - 3 * a250 - 30 * a256 + a259 + a268 * X[0] +
4123 36 * a429 - 264 * a430 + 240 * a431) +
4124 a76 * (-8 * a252 - a253 * X[0] + a255 * a4 + a260 + 80 * a430) +
4125 (a252 * a432 + 600 * a256 * a4 - 660 * a256 * X[0] - a259 + 400 * a262 * X[0] -
4126 a263 + a264 + 288 * a430 - 504 * a431 + a434) *
4127 X[1];
4128 P[68] = a171 * (27 * a271 + a435 * X[0] - a435) + (9.0 / 5.0) * a269 * a382 +
4129 a28 * (90 * a290 + a4 * a440 + a439 * X[0] - a439 + a440 - 132 * a441 + a443) +
4130 a76 * (90 * a288 + a436 * X[0] - a436 + a438) +
4131 (a19 * a278 - a271 * a444 + a279 + a284 * a4 - 60 * a288 * X[0] + a291 * X[0] +
4132 a292 + 36 * a441 + a445) *
4133 X[1];
4134 P[69] = a171 * (a295 * X[0] + a296) +
4135 a28 * (a156 * a324 + a158 * a19 + a307 * a4 + a309 * X[0] + a311 - a448 - a449) +
4136 a294 * a382 + a76 * (a297 * X[0] + a303 + a388 + a447) +
4137 (a19 * a297 + a309 * a4 + a312 * X[0] + a314 - 540 * a422 - 180 * a423 + a447 +
4138 a449 + a450) *
4139 X[1];
4140 P[70] = a92;
4141 P[71] = a121 * a318;
4142 P[72] = a452 * a7;
4143 P[73] = a11 * a53 + (a12 + a13 + a319) * X[2];
4144 P[74] = a322 * a39;
4145 P[75] = a325 * a452 * (a329 - 1);
4146 P[76] = a24 * a454;
4147 P[77] = a53 * (a32 + a455) + (-a33 + a331 + a455 * X[1]) * X[2];
4148 P[78] = a53 * (a16 * a251 + 3 * a17 + a37) + (a17 * a23 + a333 + a36 + a46) * X[2];
4149 P[79] = 2 * a133 * a47 + a53 * (3 * a334 + 3 * a48 - a49) +
4150 (a328 * a48 + a335 + a47 + a55) * X[2];
4151 P[80] = 3 * a337 * a86;
4152 P[81] = a451 * a51 * (-a326 + 28 * a4 + 1);
4153 P[82] = a454 * a66 * (a352 - 1);
4154 P[83] = a459 * a69;
4155 P[84] = a53 * (a368 * a78 + a79 - a84 * X[0]) +
4156 (a345 + a4 * a63 * a78 - a457 * a84 + a80 + a81) * X[2];
4157 P[85] = a53 * (72 * a344 - 81 * a346 + a72 - a87 * X[1] + a89 * X[0]) +
4158 (a349 + a391 * a71 - 486 * a71 * X[0] + 54 * a71 + 360 * a75 * X[0] - a88) * X[2];
4159 P[86] = a53 * (a0 * a167 + a1 * a110 - 12 * a1 + a4 * a64 + a64 - a96) +
4160 (198 * a1 * a28 - 156 * a1 * X[1] + a100 + a351 + a4 * a93 + a91) * X[2];
4161 P[87] = a133 * (-a102 + 48 * a353) +
4162 a53 * (-81 * a353 - a354 * X[1] + a354 + 72 * a355 + 72 * a460) +
4163 (a102 * X[1] + 48 * a103 * a4 - a106 + a109 * a330 + a358 - 54 * a460) * X[2];
4164 P[88] = a133 * (-a113 + 84 * a114 + 12 * a3) +
4165 a53 * (a119 - a120 + a167 * a2 - a360 + a361 + 144 * a461) +
4166 (a112 + a123 * a3 + a125 + a362 - 108 * a461 + 54 * a5 * X[1]) * X[2];
4167 P[89] = a133 * (60 * a17 + a462 * X[1] - a462) + 30 * a16 * a313 +
4168 a53 * (a28 * a463 - 72 * a323 + a364 * X[1] - a364 + a4 * a463 + a463) +
4169 (a126 + a135 - 36 * a17 * X[1] + a28 * a363 + a366 + a4 * a43) * X[2];
4170 P[90] = a180 * a369;
4171 P[91] = a373 * a452 * (a330 - a389 + a390 - 1);
4172 P[92] = a188 * a453 * a458 * (15 * X[0] - 1);
4173 P[93] = a381 * a459 * (a320 - 1);
4174 P[94] = a224 * (-a110 * a4 + a160 * a19 - a160 + a167 * a4 + a167 + a170 * X[0] - a170 +
4175 a172 - a22 - a317 + a412 + 72 * a457 + a60 - a98 * X[0] + 1);
4176 P[95] = a53 * (a175 + 240 * a392 + 48 * a393 - 216 * a394) +
4177 (-a176 - 216 * a178 * a4 + a178 * a432 + 48 * a178 * X[0] + a395) * X[2];
4178 P[96] =
4179 a53 * (57 * a137 - 189 * a138 - a181 + a183 * X[1] + 135 * a380 - a465 + 675 * a466) +
4180 (-a137 * a289 + 810 * a151 * a19 + a181 + a184 + a401 + 342 * a464 - 1134 * a466 +
4181 675 * a467) *
4182 X[2];
4183 P[97] = a53 * (a146 * a160 + a146 * a330 - 42 * a150 + a191 - 42 * a376 + 20 * a377 -
4184 264 * a468 + 420 * a469 + 240 * a470) +
4185 (260 * a148 * a19 + 660 * a150 * a4 + 66 * a150 - a192 - a194 + 420 * a375 * a76 +
4186 a404 + 312 * a468 - 726 * a469 - 546 * a470) *
4187 X[2];
4188 P[98] = a53 * (-a197 * a456 + a197 * a57 + a198 + a212 - a214 * X[0] + a216 * X[0] - a216 +
4189 a4 * a471 + a415 + a471) +
4190 (-210 * a202 * X[0] + a204 + a210 * a4 + a217 * X[0] + a218 - a4 * a472 + a414 +
4191 a472 * X[0] + 22 * a473) *
4192 X[2];
4193 P[99] = a133 * (a201 - 36 * a407 + 90 * a418) +
4194 a53 * (a197 * a270 + 135 * a199 * a4 - a208 + 57 * a407 + 135 * a415 - 189 * a418 -
4195 54 * a474) +
4196 (a197 - a202 * a324 + 45 * a202 * a4 + a221 - a418 * a62 + a419 + 90 * a473 +
4197 38 * a474) *
4198 X[2];
4199 P[100] = a133 * (-28 * a165 + a222 - 44 * a384 + 40 * a420 + 280 * a475) +
4200 a53 * (a156 * a476 - a163 + 48 * a165 + a308 + 72 * a384 - 126 * a420 -
4201 528 * a475 + 420 * a477 + 480 * a478) +
4202 (140 * a169 * X[0] + a19 * a305 + a223 * a28 + 300 * a225 * a4 - a228 - a231 +
4203 a425 + 216 * a475 - 330 * a477 - 378 * a478) *
4204 X[2];
4205 P[101] = a133 * (-160 * a151 + 360 * a152 + a235 * a4 + a235 + a427 + 160 * a464) +
4206 a53 * (45 * a137 + 255 * a151 + 540 * a155 + a183 * a19 - a242 * a4 - a247 + a379 -
4207 510 * a464 + 255 * a466 + 780 * a479) +
4208 (440 * a137 * a76 + a19 * a237 + a234 + a238 + a249 + a428 + a465 - 270 * a466 +
4209 345 * a467 - 690 * a479) *
4210 X[2];
4211 P[102] = a133 * (-a255 * X[1] + a255 - 220 * a429 + 200 * a433 + 200 * a480) +
4212 a313 * (-a267 + 100 * a429) +
4213 a53 * (a160 * a250 - a250 * a338 + a250 * a390 + 240 * a254 * a4 - a28 * a481 +
4214 144 * a429 - 264 * a480 - a481 + 120 * a482) +
4215 (a254 * a476 + a255 * a76 * X[0] - a258 - a261 + 60 * a265 * a4 + 6 * a265 -
4216 a433 * a62 + a434 + 72 * a480 - 66 * a482) *
4217 X[2];
4218 P[103] =
4219 a133 * (a123 * a269 + a438 + a484 * X[0] - a484) +
4220 a313 * (45 * a275 + a483 * X[0] - a483) +
4221 a53 * (-a269 * a287 + 54 * a283 + a287 * a437 + a4 * a485 + a443 + a485 - 132 * a486) +
4222 (a19 * a276 + a269 - a275 * a444 + a277 - 60 * a28 * a437 + a282 * a4 + a283 * a367 +
4223 a293 + a445 + 36 * a486) *
4224 X[2];
4225 P[104] = a133 * (a302 - a305 - 180 * a384 + a488 + a489 + a490) + a162 * std::pow(X[2], 5) +
4226 a313 * (a487 * X[0] + a487 * X[1] - a487) +
4227 a53 * (a156 * a339 + a19 * a223 + a223 * a76 - a223 + a225 * a339 + a302 * X[1] +
4228 a488 * X[1] - a488 - a489 - a490) +
4229 (-a166 * a4 + a166 * X[0] + a19 * a299 + a295 + a300 + a304 * a4 + a315 * X[0] +
4230 a316 + a446 + a450 - 36 * a477) *
4231 X[2];
4232 return Pm;
4233 }
4234};
4235
4239
4240template <>
4241class DivergenceFreeBasis<1, 1>
4242{
4243 public:
4244 inline static constexpr int kDims = 1;
4245 inline static constexpr int kOrder = 1;
4246 inline static constexpr int kSize = 1;
4247
4248 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4249 {
4251 Scalar* P = Pm.data();
4252 P[0] = 1;
4253 return Pm;
4254 }
4255};
4256
4257template <>
4258class DivergenceFreeBasis<1, 2>
4259{
4260 public:
4261 inline static constexpr int kDims = 1;
4262 inline static constexpr int kOrder = 2;
4263 inline static constexpr int kSize = 1;
4264
4265 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4266 {
4268 Scalar* P = Pm.data();
4269 P[0] = 1;
4270 return Pm;
4271 }
4272};
4273
4274template <>
4275class DivergenceFreeBasis<1, 3>
4276{
4277 public:
4278 inline static constexpr int kDims = 1;
4279 inline static constexpr int kOrder = 3;
4280 inline static constexpr int kSize = 1;
4281
4282 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4283 {
4285 Scalar* P = Pm.data();
4286 P[0] = 1;
4287 return Pm;
4288 }
4289};
4290
4291template <>
4292class DivergenceFreeBasis<1, 4>
4293{
4294 public:
4295 inline static constexpr int kDims = 1;
4296 inline static constexpr int kOrder = 4;
4297 inline static constexpr int kSize = 1;
4298
4299 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4300 {
4302 Scalar* P = Pm.data();
4303 P[0] = 1;
4304 return Pm;
4305 }
4306};
4307
4311
4312template <>
4313class DivergenceFreeBasis<2, 1>
4314{
4315 public:
4316 inline static constexpr int kDims = 2;
4317 inline static constexpr int kOrder = 1;
4318 inline static constexpr int kSize = 5;
4319
4320 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4321 {
4323 Scalar* P = Pm.data();
4324 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
4325 Scalar const a1 = std::numbers::sqrt3_v<Scalar>;
4326 P[0] = a0;
4327 P[1] = 0;
4328 P[2] = 0;
4329 P[3] = a0;
4330 P[4] = 0;
4331 P[5] = 6 * X[0] - 2;
4332 P[6] = a1 * (4 * X[1] - 4.0 / 3.0);
4333 P[7] = 0;
4334 P[8] = a1 * (4.0 / 3.0 - 4 * X[0]);
4335 P[9] = 2 * a1 * (X[0] + 2 * X[1] - 1);
4336 return Pm;
4337 }
4338};
4339
4340template <>
4341class DivergenceFreeBasis<2, 2>
4342{
4343 public:
4344 inline static constexpr int kDims = 2;
4345 inline static constexpr int kOrder = 2;
4346 inline static constexpr int kSize = 9;
4347
4348 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4349 {
4351 Scalar* P = Pm.data();
4352 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
4353 Scalar const a1 = 6 * X[0];
4354 Scalar const a2 = std::numbers::sqrt3_v<Scalar>;
4355 Scalar const a3 = X[0] + 2 * X[1] - 1;
4356 Scalar const a4 = ((X[0]) * (X[0]));
4357 Scalar const a5 = 30 * a4;
4358 Scalar const a6 = std::sqrt(30);
4359 Scalar const a7 = ((X[1]) * (X[1]));
4360 P[0] = a0;
4361 P[1] = 0;
4362 P[2] = 0;
4363 P[3] = a0;
4364 P[4] = 0;
4365 P[5] = a1 - 2;
4366 P[6] = a2 * (4 * X[1] - 4.0 / 3.0);
4367 P[7] = 0;
4368 P[8] = a2 * (4.0 / 3.0 - 4 * X[0]);
4369 P[9] = 2 * a2 * a3;
4370 P[10] = 0;
4371 P[11] = std::sqrt(6) * (10 * a4 - 8 * X[0] + 1);
4372 P[12] = (1.0 / 2.0) * a0 * (-a5 + 12 * X[0] + 1);
4373 P[13] = 3 * a0 * a3 * (5 * X[0] - 1);
4374 P[14] = (3.0 / 5.0) * a6 * (10 * a7 - 8 * X[1] + 1);
4375 P[15] = 0;
4376 P[16] = (1.0 / 10.0) * a6 * (-a5 - 120 * X[0] * X[1] + 60 * X[0] + 24 * X[1] - 13);
4377 P[17] = a6 * (a1 * X[1] + a4 + 6 * a7 - 2 * X[0] - 6 * X[1] + 1);
4378 return Pm;
4379 }
4380};
4381
4382template <>
4383class DivergenceFreeBasis<2, 3>
4384{
4385 public:
4386 inline static constexpr int kDims = 2;
4387 inline static constexpr int kOrder = 3;
4388 inline static constexpr int kSize = 14;
4389
4390 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4391 {
4393 Scalar* P = Pm.data();
4394 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
4395 Scalar const a1 = 6 * X[0];
4396 Scalar const a2 = std::numbers::sqrt3_v<Scalar>;
4397 Scalar const a3 = 4 * X[0];
4398 Scalar const a4 = X[0] + 2 * X[1] - 1;
4399 Scalar const a5 = 2 * a4;
4400 Scalar const a6 = std::sqrt(6);
4401 Scalar const a7 = ((X[0]) * (X[0]));
4402 Scalar const a8 = 12 * X[0];
4403 Scalar const a9 = 30 * a7;
4404 Scalar const a10 = std::sqrt(30);
4405 Scalar const a11 = ((X[1]) * (X[1]));
4406 Scalar const a12 = 10 * a11 + 1;
4407 Scalar const a13 = -6 * X[1];
4408 Scalar const a14 = a7 - 2 * X[0];
4409 Scalar const a15 = a1 * X[1] + 6 * a11 + a13 + a14 + 1;
4410 Scalar const a16 = ((X[0]) * (X[0]) * (X[0]));
4411 Scalar const a17 = std::sqrt(10);
4412 Scalar const a18 = 210 * a16;
4413 Scalar const a19 = std::sqrt(14);
4414 Scalar const a20 = 10 * X[1];
4415 P[0] = a0;
4416 P[1] = 0;
4417 P[2] = 0;
4418 P[3] = a0;
4419 P[4] = 0;
4420 P[5] = a1 - 2;
4421 P[6] = a2 * (4 * X[1] - 4.0 / 3.0);
4422 P[7] = 0;
4423 P[8] = a2 * (4.0 / 3.0 - a3);
4424 P[9] = a2 * a5;
4425 P[10] = 0;
4426 P[11] = a6 * (10 * a7 - 8 * X[0] + 1);
4427 P[12] = (1.0 / 2.0) * a0 * (a8 - a9 + 1);
4428 P[13] = 3 * a0 * a4 * (5 * X[0] - 1);
4429 P[14] = (3.0 / 5.0) * a10 * (a12 - 8 * X[1]);
4430 P[15] = 0;
4431 P[16] = (1.0 / 10.0) * a10 * (-a9 - 120 * X[0] * X[1] + 60 * X[0] + 24 * X[1] - 13);
4432 P[17] = a10 * a15;
4433 P[18] = 0;
4434 P[19] = a0 * (70 * a16 - 90 * a7 + 30 * X[0] - 2);
4435 P[20] = a6 * (-28 * a16 - a3 + 24 * a7 + 2.0 / 15.0);
4436 P[21] = a5 * a6 * (21 * a7 - a8 + 1);
4437 P[22] = (2.0 / 15.0) * a17 *
4438 (-a13 - a18 - 630 * a7 * X[1] + 360 * a7 + 180 * X[0] * X[1] - 90 * X[0] - 5);
4439 P[23] = 2 * a15 * a17 * (7 * X[0] - 1);
4440 P[24] = (8.0 / 7.0) * a19 * (-45 * a11 + 35 * ((X[1]) * (X[1]) * (X[1])) + 15 * X[1] - 1);
4441 P[25] = 0;
4442 P[26] = (4.0 / 105.0) * a19 *
4443 (-3150 * a11 * X[0] + 450 * a11 - a18 - 1575 * a7 * X[1] + 630 * a7 +
4444 3150 * X[0] * X[1] - 630 * X[0] - 465 * X[1] + 101);
4445 P[27] = a19 * a5 * (a12 + a14 + a20 * X[0] - a20);
4446 return Pm;
4447 }
4448};
4449
4450template <>
4451class DivergenceFreeBasis<2, 4>
4452{
4453 public:
4454 inline static constexpr int kDims = 2;
4455 inline static constexpr int kOrder = 4;
4456 inline static constexpr int kSize = 20;
4457
4458 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4459 {
4461 Scalar* P = Pm.data();
4462 Scalar const a0 = std::numbers::sqrt2_v<Scalar>;
4463 Scalar const a1 = 6 * X[0];
4464 Scalar const a2 = std::numbers::sqrt3_v<Scalar>;
4465 Scalar const a3 = 4 * X[0];
4466 Scalar const a4 = X[0] + 2 * X[1] - 1;
4467 Scalar const a5 = 2 * a4;
4468 Scalar const a6 = std::sqrt(6);
4469 Scalar const a7 = ((X[0]) * (X[0]));
4470 Scalar const a8 = 12 * X[0];
4471 Scalar const a9 = 30 * a7;
4472 Scalar const a10 = std::sqrt(30);
4473 Scalar const a11 = ((X[1]) * (X[1]));
4474 Scalar const a12 = 10 * a11 + 1;
4475 Scalar const a13 = -24 * X[1];
4476 Scalar const a14 = X[0] * X[1];
4477 Scalar const a15 = -6 * X[1];
4478 Scalar const a16 = a7 - 2 * X[0];
4479 Scalar const a17 = a1 * X[1] + 6 * a11 + a15 + a16 + 1;
4480 Scalar const a18 = 90 * a7;
4481 Scalar const a19 = ((X[0]) * (X[0]) * (X[0]));
4482 Scalar const a20 = std::sqrt(10);
4483 Scalar const a21 = 210 * a19;
4484 Scalar const a22 = 630 * a7;
4485 Scalar const a23 = std::sqrt(14);
4486 Scalar const a24 = ((X[1]) * (X[1]) * (X[1]));
4487 Scalar const a25 = -a22;
4488 Scalar const a26 = -450 * a11;
4489 Scalar const a27 = a11 * X[0];
4490 Scalar const a28 = a7 * X[1];
4491 Scalar const a29 = 10 * X[1];
4492 Scalar const a30 = a12 + a16 + a29 * X[0] - a29;
4493 Scalar const a31 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
4494 Scalar const a32 = 60 * X[0];
4495 Scalar const a33 = 1260 * a31;
4496 Scalar const a34 = 11340 * a31;
4497 Scalar const a35 = a19 * X[1];
4498 Scalar const a36 = std::sqrt(70);
4499 Scalar const a37 = -5040 * X[0];
4500 Scalar const a38 = a11 * a7;
4501 Scalar const a39 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
4502 Scalar const a40 = 20 * X[1];
4503 Scalar const a41 = 140 * a24;
4504 P[0] = a0;
4505 P[1] = 0;
4506 P[2] = 0;
4507 P[3] = a0;
4508 P[4] = 0;
4509 P[5] = a1 - 2;
4510 P[6] = a2 * (4 * X[1] - 4.0 / 3.0);
4511 P[7] = 0;
4512 P[8] = a2 * (4.0 / 3.0 - a3);
4513 P[9] = a2 * a5;
4514 P[10] = 0;
4515 P[11] = a6 * (10 * a7 - 8 * X[0] + 1);
4516 P[12] = (1.0 / 2.0) * a0 * (a8 - a9 + 1);
4517 P[13] = 3 * a0 * a4 * (5 * X[0] - 1);
4518 P[14] = (3.0 / 5.0) * a10 * (a12 - 8 * X[1]);
4519 P[15] = 0;
4520 P[16] = (1.0 / 10.0) * a10 * (-a13 - 120 * a14 - a9 + 60 * X[0] - 13);
4521 P[17] = a10 * a17;
4522 P[18] = 0;
4523 P[19] = a0 * (-a18 + 70 * a19 + 30 * X[0] - 2);
4524 P[20] = a6 * (-28 * a19 - a3 + 24 * a7 + 2.0 / 15.0);
4525 P[21] = a5 * a6 * (21 * a7 - a8 + 1);
4526 P[22] = (2.0 / 15.0) * a20 *
4527 (-a15 - a21 - a22 * X[1] + 360 * a7 + 180 * X[0] * X[1] - 90 * X[0] - 5);
4528 P[23] = 2 * a17 * a20 * (7 * X[0] - 1);
4529 P[24] = (8.0 / 7.0) * a23 * (-45 * a11 + 35 * a24 + 15 * X[1] - 1);
4530 P[25] = 0;
4531 P[26] = (4.0 / 105.0) * a23 *
4532 (-a21 - a25 - a26 - 3150 * a27 - 1575 * a28 + 3150 * X[0] * X[1] - 630 * X[0] -
4533 465 * X[1] + 101);
4534 P[27] = a23 * a30 * a5;
4535 P[28] = 0;
4536 P[29] = a20 * (-224 * a19 + 126 * a31 + 126 * a7 - 24 * X[0] + 1);
4537 P[30] = (1.0 / 30.0) * a10 * (1680 * a19 + a25 + a32 - a33 + 1);
4538 P[31] = a10 * a4 * (84 * a19 - 84 * a7 + 21 * X[0] - 1);
4539 P[32] = (1.0 / 42.0) * a0 *
4540 (-a13 - 2520 * a14 + 21840 * a19 - a34 - 30240 * a35 + 20160 * a7 * X[1] -
4541 10710 * a7 + 1260 * X[0] - 29);
4542 P[33] = 5 * a0 * a17 * (36 * a7 - 16 * X[0] + 1);
4543 P[34] = (1.0 / 420.0) * a36 *
4544 (25200 * a11 * X[0] - 25200 * a14 + 31920 * a19 - a26 - a34 - 75600 * a35 - a37 -
4545 113400 * a38 + 126000 * a7 * X[1] - 27720 * a7 - 600 * X[1] + 209);
4546 P[35] = a30 * a36 * a4 * (9 * X[0] - 1);
4547 P[36] = (5.0 / 3.0) * a20 * (126 * a11 + a13 - 224 * a24 + 126 * a39 + 1);
4548 P[37] = 0;
4549 P[38] = (1.0 / 84.0) * a20 *
4550 (105840 * a11 * X[0] - 11970 * a11 - 45360 * a14 + 5040 * a19 - 70560 * a24 * X[0] +
4551 7840 * a24 - a33 - 15120 * a35 - a37 - 52920 * a38 + 45360 * a7 * X[1] -
4552 7560 * a7 + 5304 * X[1] - 641);
4553 P[39] = 3 * a20 *
4554 (a11 * a18 + 90 * a11 + a19 * a40 - 4 * a19 - 180 * a27 - 60 * a28 - a3 + a31 +
4555 a32 * X[1] + 70 * a39 - a40 + a41 * X[0] - a41 + 6 * a7 + 1);
4556 return Pm;
4557 }
4558};
4559
4563
4564template <>
4565class DivergenceFreeBasis<3, 1>
4566{
4567 public:
4568 inline static constexpr int kDims = 3;
4569 inline static constexpr int kOrder = 1;
4570 inline static constexpr int kSize = 11;
4571
4572 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4573 {
4575 Scalar* P = Pm.data();
4576 Scalar const a0 = std::sqrt(6);
4577 Scalar const a1 = 4 * X[0] - 1;
4578 Scalar const a2 = std::sqrt(10) * a1;
4579 Scalar const a3 = std::sqrt(5);
4580 Scalar const a4 = X[0] - 1;
4581 Scalar const a5 = 2 * a3 * (a4 + 3 * X[1]);
4582 Scalar const a6 = std::sqrt(15);
4583 Scalar const a7 = -a1 * a6;
4584 Scalar const a8 = 2 * a6 * (a4 + X[1] + 2 * X[2]);
4585 P[0] = a0;
4586 P[1] = 0;
4587 P[2] = 0;
4588 P[3] = 0;
4589 P[4] = a0;
4590 P[5] = 0;
4591 P[6] = 0;
4592 P[7] = 0;
4593 P[8] = a0;
4594 P[9] = 0;
4595 P[10] = a2;
4596 P[11] = 0;
4597 P[12] = 0;
4598 P[13] = 0;
4599 P[14] = a2;
4600 P[15] = a3 * (6 * X[1] - 3.0 / 2.0);
4601 P[16] = 0;
4602 P[17] = 0;
4603 P[18] = a3 * (3.0 / 2.0 - 6 * X[0]);
4604 P[19] = a5;
4605 P[20] = 0;
4606 P[21] = 0;
4607 P[22] = 0;
4608 P[23] = a5;
4609 P[24] = (1.0 / 2.0) * a6 * (4 * X[1] + 8 * X[2] - 3);
4610 P[25] = 0;
4611 P[26] = 0;
4612 P[27] = (1.0 / 2.0) * a7;
4613 P[28] = a8;
4614 P[29] = 0;
4615 P[30] = a7;
4616 P[31] = 0;
4617 P[32] = a8;
4618 return Pm;
4619 }
4620};
4621
4622template <>
4623class DivergenceFreeBasis<3, 2>
4624{
4625 public:
4626 inline static constexpr int kDims = 3;
4627 inline static constexpr int kOrder = 2;
4628 inline static constexpr int kSize = 26;
4629
4630 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4631 {
4633 Scalar* P = Pm.data();
4634 Scalar const a0 = std::sqrt(6);
4635 Scalar const a1 = 4 * X[0] - 1;
4636 Scalar const a2 = std::sqrt(10) * a1;
4637 Scalar const a3 = std::sqrt(5);
4638 Scalar const a4 = 6 * X[1];
4639 Scalar const a5 = 6 * X[0];
4640 Scalar const a6 = X[0] - 1;
4641 Scalar const a7 = 2 * a6 + 6 * X[1];
4642 Scalar const a8 = a3 * a7;
4643 Scalar const a9 = std::sqrt(15);
4644 Scalar const a10 = -a1 * a9;
4645 Scalar const a11 = a6 + X[1] + 2 * X[2];
4646 Scalar const a12 = 2 * a11 * a9;
4647 Scalar const a13 = std::sqrt(14);
4648 Scalar const a14 = ((X[0]) * (X[0]));
4649 Scalar const a15 = a13 * (15 * a14 - 10 * X[0] + 1);
4650 Scalar const a16 = std::sqrt(7);
4651 Scalar const a17 = a5 - 1;
4652 Scalar const a18 = a16 * a17 * a7;
4653 Scalar const a19 = std::sqrt(42);
4654 Scalar const a20 = ((X[1]) * (X[1]));
4655 Scalar const a21 = 15 * a20;
4656 Scalar const a22 = X[0] * X[1];
4657 Scalar const a23 = 600 * a22 - 100 * X[1];
4658 Scalar const a24 = 8 * X[1];
4659 Scalar const a25 = 2 * X[0];
4660 Scalar const a26 = a14 - a25;
4661 Scalar const a27 = a26 + 1;
4662 Scalar const a28 = a19 * (10 * a20 + a24 * X[0] - a24 + a27);
4663 Scalar const a29 = std::sqrt(21);
4664 Scalar const a30 = 60 * a14;
4665 Scalar const a31 = a29 * (-a30 + 20 * X[0] + 1);
4666 Scalar const a32 = a11 * a17;
4667 Scalar const a33 = 2 * a29 * a32;
4668 Scalar const a34 = X[1] * X[2];
4669 Scalar const a35 = 5 * X[1];
4670 Scalar const a36 = 3 * a11 * a13 * (a35 + a6);
4671 Scalar const a37 = std::sqrt(210);
4672 Scalar const a38 = ((X[2]) * (X[2]));
4673 Scalar const a39 = a25 * X[1] + a5 * X[2];
4674 Scalar const a40 = a37 * (a20 + a27 + 6 * a38 + a39 + a4 * X[2] - 2 * X[1] - 6 * X[2]);
4675 P[0] = a0;
4676 P[1] = 0;
4677 P[2] = 0;
4678 P[3] = 0;
4679 P[4] = a0;
4680 P[5] = 0;
4681 P[6] = 0;
4682 P[7] = 0;
4683 P[8] = a0;
4684 P[9] = 0;
4685 P[10] = a2;
4686 P[11] = 0;
4687 P[12] = 0;
4688 P[13] = 0;
4689 P[14] = a2;
4690 P[15] = a3 * (a4 - 3.0 / 2.0);
4691 P[16] = 0;
4692 P[17] = 0;
4693 P[18] = a3 * (3.0 / 2.0 - a5);
4694 P[19] = a8;
4695 P[20] = 0;
4696 P[21] = 0;
4697 P[22] = 0;
4698 P[23] = a8;
4699 P[24] = (1.0 / 2.0) * a9 * (4 * X[1] + 8 * X[2] - 3);
4700 P[25] = 0;
4701 P[26] = 0;
4702 P[27] = (1.0 / 2.0) * a10;
4703 P[28] = a12;
4704 P[29] = 0;
4705 P[30] = a10;
4706 P[31] = 0;
4707 P[32] = a12;
4708 P[33] = 0;
4709 P[34] = a15;
4710 P[35] = 0;
4711 P[36] = 0;
4712 P[37] = 0;
4713 P[38] = a15;
4714 P[39] = a16 * (-18 * a14 + a5 + 3.0 / 10.0);
4715 P[40] = a18;
4716 P[41] = 0;
4717 P[42] = 0;
4718 P[43] = 0;
4719 P[44] = a18;
4720 P[45] = (2.0 / 3.0) * a19 * (a21 - 10 * X[1] + 1);
4721 P[46] = 0;
4722 P[47] = 0;
4723 P[48] = (1.0 / 30.0) * a19 * (-120 * a14 - a23 + 240 * X[0] - 43);
4724 P[49] = a28;
4725 P[50] = 0;
4726 P[51] = 0;
4727 P[52] = 0;
4728 P[53] = a28;
4729 P[54] = (1.0 / 10.0) * a31;
4730 P[55] = a33;
4731 P[56] = 0;
4732 P[57] = (1.0 / 5.0) * a31;
4733 P[58] = 0;
4734 P[59] = a33;
4735 P[60] = a13 * (a21 + 30 * a34 - 15 * X[1] - 5 * X[2] + 2);
4736 P[61] = 0;
4737 P[62] = 0;
4738 P[63] =
4739 (1.0 / 10.0) * a13 *
4740 (-90 * a14 - 300 * a22 - 300 * X[0] * X[2] + 180 * X[0] + 50 * X[1] + 50 * X[2] - 31);
4741 P[64] = a36;
4742 P[65] = 0;
4743 P[66] = (1.0 / 20.0) * a13 * (-a23 - a30 + 120 * X[0] - 19);
4744 P[67] = 0;
4745 P[68] = a36;
4746 P[69] = (1.0 / 3.0) * a37 * (3 * a20 + 18 * a34 - a35 + 18 * a38 - 15 * X[2] + 2);
4747 P[70] = 0;
4748 P[71] = 0;
4749 P[72] = a37 * (-a26 - a39 + (1.0 / 3.0) * X[1] + X[2] - 1.0 / 3.0);
4750 P[73] = a40;
4751 P[74] = 0;
4752 P[75] = a37 * (3 * a14 - a32 - X[0] - 1.0 / 20.0);
4753 P[76] = 0;
4754 P[77] = a40;
4755 return Pm;
4756 }
4757};
4758
4759template <>
4760class DivergenceFreeBasis<3, 3>
4761{
4762 public:
4763 inline static constexpr int kDims = 3;
4764 inline static constexpr int kOrder = 3;
4765 inline static constexpr int kSize = 50;
4766
4767 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
4768 {
4770 Scalar* P = Pm.data();
4771 Scalar const a0 = std::sqrt(6);
4772 Scalar const a1 = std::sqrt(10);
4773 Scalar const a2 = 4 * X[0] - 1;
4774 Scalar const a3 = a1 * a2;
4775 Scalar const a4 = std::sqrt(5);
4776 Scalar const a5 = 6 * X[1];
4777 Scalar const a6 = 6 * X[0];
4778 Scalar const a7 = X[0] - 1;
4779 Scalar const a8 = a7 + 3 * X[1];
4780 Scalar const a9 = 2 * a8;
4781 Scalar const a10 = a4 * a9;
4782 Scalar const a11 = std::sqrt(15);
4783 Scalar const a12 = -a11 * a2;
4784 Scalar const a13 = a7 + X[1] + 2 * X[2];
4785 Scalar const a14 = 2 * a11 * a13;
4786 Scalar const a15 = std::sqrt(14);
4787 Scalar const a16 = 10 * X[0];
4788 Scalar const a17 = ((X[0]) * (X[0]));
4789 Scalar const a18 = 15 * a17;
4790 Scalar const a19 = a15 * (-a16 + a18 + 1);
4791 Scalar const a20 = std::sqrt(7);
4792 Scalar const a21 = a6 - 1;
4793 Scalar const a22 = a20 * a21 * a9;
4794 Scalar const a23 = std::sqrt(42);
4795 Scalar const a24 = 10 * X[1];
4796 Scalar const a25 = ((X[1]) * (X[1]));
4797 Scalar const a26 = 15 * a25;
4798 Scalar const a27 = -100 * X[1];
4799 Scalar const a28 = X[0] * X[1];
4800 Scalar const a29 = a27 + 600 * a28;
4801 Scalar const a30 = 8 * X[1];
4802 Scalar const a31 = 2 * X[0];
4803 Scalar const a32 = a17 - a31;
4804 Scalar const a33 = a32 + 1;
4805 Scalar const a34 = 10 * a25 + a30 * X[0] - a30 + a33;
4806 Scalar const a35 = a23 * a34;
4807 Scalar const a36 = std::sqrt(21);
4808 Scalar const a37 = 60 * a17;
4809 Scalar const a38 = a36 * (-a37 + 20 * X[0] + 1);
4810 Scalar const a39 = a13 * a21;
4811 Scalar const a40 = 2 * a36 * a39;
4812 Scalar const a41 = 15 * X[1];
4813 Scalar const a42 = X[1] * X[2];
4814 Scalar const a43 = -50 * X[1] - 50 * X[2];
4815 Scalar const a44 = 5 * X[1];
4816 Scalar const a45 = a44 + a7;
4817 Scalar const a46 = a13 * a15;
4818 Scalar const a47 = 3 * a45 * a46;
4819 Scalar const a48 = std::sqrt(210);
4820 Scalar const a49 = ((X[2]) * (X[2]));
4821 Scalar const a50 = 18 * X[1];
4822 Scalar const a51 = a31 * X[1];
4823 Scalar const a52 = a51 + a6 * X[2];
4824 Scalar const a53 = a25 + a33 - 2 * X[1];
4825 Scalar const a54 = 6 * a49 + a5 * X[2] + a52 + a53 - 6 * X[2];
4826 Scalar const a55 = a48 * a54;
4827 Scalar const a56 = -3 * a17;
4828 Scalar const a57 = std::numbers::sqrt2_v<Scalar>;
4829 Scalar const a58 = -189 * a17;
4830 Scalar const a59 = ((X[0]) * (X[0]) * (X[0]));
4831 Scalar const a60 = 168 * a59;
4832 Scalar const a61 = a57 * (a58 + a60 + 54 * X[0] - 3);
4833 Scalar const a62 = 168 * a17 - 84 * X[0] + 6;
4834 Scalar const a63 = a62 * a8;
4835 Scalar const a64 = 1680 * X[0];
4836 Scalar const a65 = a17 * X[1];
4837 Scalar const a66 = a27 + 16800 * a65 - 4200 * X[0] * X[1];
4838 Scalar const a67 = (1.0 / 70.0) * a0;
4839 Scalar const a68 = 8 * X[0] - 1;
4840 Scalar const a69 = 3 * a68;
4841 Scalar const a70 = a0 * a34 * a69;
4842 Scalar const a71 = ((X[1]) * (X[1]) * (X[1]));
4843 Scalar const a72 = 56 * a71;
4844 Scalar const a73 = a25 * X[0];
4845 Scalar const a74 = 840 * X[0];
4846 Scalar const a75 = -840 * a17 + 280 * a59 + a74;
4847 Scalar const a76 = -735 * a25 + 5880 * a73 + a75;
4848 Scalar const a77 = 45 * a25;
4849 Scalar const a78 =
4850 6 * a57 *
4851 (a18 * X[1] - 30 * a28 + a41 + a56 + a59 + 35 * a71 + a77 * X[0] - a77 + 3 * X[0] - 1);
4852 Scalar const a79 = std::numbers::sqrt3_v<Scalar>;
4853 Scalar const a80 = 560 * a59;
4854 Scalar const a81 = a79 * (420 * a17 - a80 - 60 * X[0] + 1);
4855 Scalar const a82 = a13 * a62 * a79;
4856 Scalar const a83 = a17 * X[2];
4857 Scalar const a84 = 9 * a13 * a45 * a57 * a68;
4858 Scalar const a85 = -3780 * a17 + 2240 * a59 + a74;
4859 Scalar const a86 = -168 * a42;
4860 Scalar const a87 = a25 * X[2];
4861 Scalar const a88 = 336 * a87 - 5;
4862 Scalar const a89 = a28 * X[2];
4863 Scalar const a90 = 12 * X[1];
4864 Scalar const a91 = 21 * a25;
4865 Scalar const a92 = 6 * a0 * a13 * (a33 + a90 * X[0] - a90 + a91);
4866 Scalar const a93 = std::sqrt(30);
4867 Scalar const a94 = a54 * a69 * a93;
4868 Scalar const a95 = 3360 * a65 - 1680 * X[0] * X[2];
4869 Scalar const a96 = a49 * X[1];
4870 Scalar const a97 = a49 * X[0];
4871 Scalar const a98 = 840 * a17;
4872 Scalar const a99 = 6 * a1 * a54 * (a7 + 7 * X[1]);
4873 Scalar const a100 = (3.0 / 4.0) * a15;
4874 Scalar const a101 = 24 * X[0];
4875 Scalar const a102 = 6 * a46 * (a16 * X[2] + a24 * X[2] + 10 * a49 + a51 + a53 - 10 * X[2]);
4876 P[0] = a0;
4877 P[1] = 0;
4878 P[2] = 0;
4879 P[3] = 0;
4880 P[4] = a0;
4881 P[5] = 0;
4882 P[6] = 0;
4883 P[7] = 0;
4884 P[8] = a0;
4885 P[9] = 0;
4886 P[10] = a3;
4887 P[11] = 0;
4888 P[12] = 0;
4889 P[13] = 0;
4890 P[14] = a3;
4891 P[15] = a4 * (a5 - 3.0 / 2.0);
4892 P[16] = 0;
4893 P[17] = 0;
4894 P[18] = a4 * (3.0 / 2.0 - a6);
4895 P[19] = a10;
4896 P[20] = 0;
4897 P[21] = 0;
4898 P[22] = 0;
4899 P[23] = a10;
4900 P[24] = (1.0 / 2.0) * a11 * (4 * X[1] + 8 * X[2] - 3);
4901 P[25] = 0;
4902 P[26] = 0;
4903 P[27] = (1.0 / 2.0) * a12;
4904 P[28] = a14;
4905 P[29] = 0;
4906 P[30] = a12;
4907 P[31] = 0;
4908 P[32] = a14;
4909 P[33] = 0;
4910 P[34] = a19;
4911 P[35] = 0;
4912 P[36] = 0;
4913 P[37] = 0;
4914 P[38] = a19;
4915 P[39] = a20 * (-18 * a17 + a6 + 3.0 / 10.0);
4916 P[40] = a22;
4917 P[41] = 0;
4918 P[42] = 0;
4919 P[43] = 0;
4920 P[44] = a22;
4921 P[45] = (2.0 / 3.0) * a23 * (-a24 + a26 + 1);
4922 P[46] = 0;
4923 P[47] = 0;
4924 P[48] = (1.0 / 30.0) * a23 * (-120 * a17 - a29 + 240 * X[0] - 43);
4925 P[49] = a35;
4926 P[50] = 0;
4927 P[51] = 0;
4928 P[52] = 0;
4929 P[53] = a35;
4930 P[54] = (1.0 / 10.0) * a38;
4931 P[55] = a40;
4932 P[56] = 0;
4933 P[57] = (1.0 / 5.0) * a38;
4934 P[58] = 0;
4935 P[59] = a40;
4936 P[60] = a15 * (a26 - a41 + 30 * a42 - 5 * X[2] + 2);
4937 P[61] = 0;
4938 P[62] = 0;
4939 P[63] = (1.0 / 10.0) * a15 *
4940 (-90 * a17 - 300 * a28 - a43 - 300 * X[0] * X[2] + 180 * X[0] - 31);
4941 P[64] = a47;
4942 P[65] = 0;
4943 P[66] = (1.0 / 20.0) * a15 * (-a29 - a37 + 120 * X[0] - 19);
4944 P[67] = 0;
4945 P[68] = a47;
4946 P[69] = (1.0 / 3.0) * a48 * (3 * a25 - a44 + 18 * a49 + a50 * X[2] - 15 * X[2] + 2);
4947 P[70] = 0;
4948 P[71] = 0;
4949 P[72] = a48 * (-a32 - a52 + (1.0 / 3.0) * X[1] + X[2] - 1.0 / 3.0);
4950 P[73] = a55;
4951 P[74] = 0;
4952 P[75] = a48 * (-a39 - a56 - X[0] - 1.0 / 20.0);
4953 P[76] = 0;
4954 P[77] = a55;
4955 P[78] = 0;
4956 P[79] = a61;
4957 P[80] = 0;
4958 P[81] = 0;
4959 P[82] = 0;
4960 P[83] = a61;
4961 P[84] = 126 * a17 - a60 - 18 * X[0] + 3.0 / 10.0;
4962 P[85] = a63;
4963 P[86] = 0;
4964 P[87] = 0;
4965 P[88] = 0;
4966 P[89] = a63;
4967 P[90] = a67 * (7560 * a17 - 4480 * a59 - a64 - a66 - 67);
4968 P[91] = a70;
4969 P[92] = 0;
4970 P[93] = 0;
4971 P[94] = 0;
4972 P[95] = a70;
4973 P[96] = (15.0 / 4.0) * a57 * (-63 * a25 + a50 + a72 - 1);
4974 P[97] = 0;
4975 P[98] = 0;
4976 P[99] = (3.0 / 28.0) * a57 * (-2520 * a65 - a76 + 5040 * X[0] * X[1] - 650 * X[1] + 117);
4977 P[100] = a78;
4978 P[101] = 0;
4979 P[102] = 0;
4980 P[103] = 0;
4981 P[104] = a78;
4982 P[105] = (1.0 / 10.0) * a81;
4983 P[106] = a82;
4984 P[107] = 0;
4985 P[108] = (1.0 / 5.0) * a81;
4986 P[109] = 0;
4987 P[110] = a82;
4988 P[111] = (3.0 / 70.0) * a57 *
4989 (5670 * a17 - a43 - 3360 * a59 - 8400 * a65 - 8400 * a83 + 2100 * X[0] * X[1] +
4990 2100 * X[0] * X[2] - 1260 * X[0] - 39);
4991 P[112] = a84;
4992 P[113] = 0;
4993 P[114] = (3.0 / 140.0) * a57 * (-a66 - a85 - 11);
4994 P[115] = 0;
4995 P[116] = a84;
4996 P[117] = (3.0 / 4.0) * a0 * (-231 * a25 + 168 * a71 + a86 + a88 + 78 * X[1] + 12 * X[2]);
4997 P[118] = 0;
4998 P[119] = 0;
4999 P[120] = (1.0 / 28.0) * a0 *
5000 (2184 * a17 + 1323 * a25 - 728 * a59 - 5544 * a65 - 10584 * a73 - 2016 * a83 -
5001 14112 * a89 + 11088 * X[0] * X[1] + 4032 * X[0] * X[2] - 2184 * X[0] +
5002 1764 * X[1] * X[2] - 1416 * X[1] - 534 * X[2] + 295);
5003 P[121] = a92;
5004 P[122] = 0;
5005 P[123] = a67 * (2205 * a25 - 5040 * a65 - 17640 * a73 - a75 + 10080 * X[0] * X[1] -
5006 1230 * X[1] + 101);
5007 P[124] = 0;
5008 P[125] = a92;
5009 P[126] = (1.0 / 7.0) * a93 *
5010 (-504 * a17 * X[2] - a58 - 112 * a59 - 168 * a65 + 42 * X[0] * X[1] +
5011 126 * X[0] * X[2] - 42 * X[0] + X[1] + 3 * X[2] - 1);
5012 P[127] = a94;
5013 P[128] = 0;
5014 P[129] = (3.0 / 140.0) * a93 *
5015 (-6720 * a83 - a85 - a95 + 840 * X[0] * X[1] + 20 * X[1] + 40 * X[2] - 29);
5016 P[130] = 0;
5017 P[131] = a94;
5018 P[132] =
5019 (3.0 / 4.0) * a1 *
5020 (-105 * a25 - 336 * a42 - 42 * a49 + a72 + a88 + 336 * a96 + 54 * X[1] + 36 * X[2]);
5021 P[133] = 0;
5022 P[134] = 0;
5023 P[135] = (3.0 / 28.0) * a1 *
5024 (504 * a17 + 147 * a25 + 294 * a49 - a60 - 1176 * a73 - 1344 * a83 - 4704 * a89 -
5025 2352 * a97 - a98 * X[1] + 1680 * X[0] * X[1] + 2688 * X[0] * X[2] - 504 * X[0] +
5026 588 * X[1] * X[2] - 212 * X[1] - 342 * X[2] + 65);
5027 P[136] = a99;
5028 P[137] = 0;
5029 P[138] = (3.0 / 70.0) * a1 *
5030 (-a76 - 11760 * a89 - a95 - a98 * X[2] + 6720 * X[0] * X[1] + 1470 * X[1] * X[2] -
5031 855 * X[1] - 205 * X[2] + 104);
5032 P[139] = 0;
5033 P[140] = a99;
5034 P[141] = a100 * (-210 * a49 + a50 + 8 * a71 + a86 + 96 * a87 - a91 + 240 * a96 +
5035 160 * ((X[2]) * (X[2]) * (X[2])) + 72 * X[2] - 5);
5036 P[142] = 0;
5037 P[143] = 0;
5038 P[144] = a100 * (-a101 * a25 - a101 - 24 * a17 * X[1] + 24 * a17 + 3 * a25 -
5039 240 * a49 * X[0] + 30 * a49 - a5 - 8 * a59 - 96 * a83 - 192 * a89 +
5040 48 * X[0] * X[1] + 192 * X[0] * X[2] + 24 * X[1] * X[2] - 24 * X[2] + 3);
5041 P[145] = a102;
5042 P[146] = 0;
5043 P[147] = (3.0 / 70.0) * a15 *
5044 (-1680 * a17 * X[1] + 1680 * a17 - a25 * a64 + 210 * a25 + 1050 * a49 - a64 - a80 -
5045 4200 * a83 - 8400 * a89 - 8400 * a97 + 3360 * X[0] * X[1] + 8400 * X[0] * X[2] +
5046 1050 * X[1] * X[2] - 435 * X[1] - 1075 * X[2] + 227);
5047 P[148] = 0;
5048 P[149] = a102;
5049 return Pm;
5050 }
5051};
5052
5053template <>
5054class DivergenceFreeBasis<3, 4>
5055{
5056 public:
5057 inline static constexpr int kDims = 3;
5058 inline static constexpr int kOrder = 4;
5059 inline static constexpr int kSize = 85;
5060
5061 [[maybe_unused]] Matrix<kSize, kDims> eval([[maybe_unused]] Vector<kDims> const& X) const
5062 {
5064 Scalar* P = Pm.data();
5065 Scalar const a0 = std::sqrt(6);
5066 Scalar const a1 = std::sqrt(10);
5067 Scalar const a2 = 4 * X[0];
5068 Scalar const a3 = a2 - 1;
5069 Scalar const a4 = a1 * a3;
5070 Scalar const a5 = std::sqrt(5);
5071 Scalar const a6 = 6 * X[1];
5072 Scalar const a7 = 6 * X[0];
5073 Scalar const a8 = X[0] - 1;
5074 Scalar const a9 = a8 + 3 * X[1];
5075 Scalar const a10 = 2 * a9;
5076 Scalar const a11 = a10 * a5;
5077 Scalar const a12 = std::sqrt(15);
5078 Scalar const a13 = 4 * X[1];
5079 Scalar const a14 = 8 * X[2];
5080 Scalar const a15 = -a12 * a3;
5081 Scalar const a16 = a8 + X[1] + 2 * X[2];
5082 Scalar const a17 = 2 * a16;
5083 Scalar const a18 = a12 * a17;
5084 Scalar const a19 = std::sqrt(14);
5085 Scalar const a20 = 10 * X[0];
5086 Scalar const a21 = ((X[0]) * (X[0]));
5087 Scalar const a22 = 15 * a21;
5088 Scalar const a23 = a19 * (-a20 + a22 + 1);
5089 Scalar const a24 = std::sqrt(7);
5090 Scalar const a25 = a7 - 1;
5091 Scalar const a26 = a10 * a24 * a25;
5092 Scalar const a27 = std::sqrt(42);
5093 Scalar const a28 = 10 * X[1];
5094 Scalar const a29 = ((X[1]) * (X[1]));
5095 Scalar const a30 = 15 * a29;
5096 Scalar const a31 = -100 * X[1];
5097 Scalar const a32 = X[0] * X[1];
5098 Scalar const a33 = a31 + 600 * a32;
5099 Scalar const a34 = 8 * X[1];
5100 Scalar const a35 = 2 * X[0];
5101 Scalar const a36 = a21 - a35;
5102 Scalar const a37 = a36 + 1;
5103 Scalar const a38 = 10 * a29 + a34 * X[0] - a34 + a37;
5104 Scalar const a39 = a27 * a38;
5105 Scalar const a40 = std::sqrt(21);
5106 Scalar const a41 = 20 * X[0];
5107 Scalar const a42 = 60 * a21;
5108 Scalar const a43 = a40 * (a41 - a42 + 1);
5109 Scalar const a44 = a16 * a25;
5110 Scalar const a45 = 2 * a40 * a44;
5111 Scalar const a46 = 15 * X[1];
5112 Scalar const a47 = 90 * a21;
5113 Scalar const a48 = X[0] * X[2];
5114 Scalar const a49 = 300 * a48;
5115 Scalar const a50 = -50 * X[1] - 50 * X[2];
5116 Scalar const a51 = a16 * a19;
5117 Scalar const a52 = 5 * X[1];
5118 Scalar const a53 = a52 + a8;
5119 Scalar const a54 = 3 * a53;
5120 Scalar const a55 = a51 * a54;
5121 Scalar const a56 = std::sqrt(210);
5122 Scalar const a57 = ((X[2]) * (X[2]));
5123 Scalar const a58 = 18 * X[1];
5124 Scalar const a59 = a35 * X[1];
5125 Scalar const a60 = a59 + a7 * X[2];
5126 Scalar const a61 = 2 * X[1];
5127 Scalar const a62 = a29 + a37 - a61;
5128 Scalar const a63 = 6 * a57 + a6 * X[2] + a60 + a62 - 6 * X[2];
5129 Scalar const a64 = a56 * a63;
5130 Scalar const a65 = -3 * a21;
5131 Scalar const a66 = std::numbers::sqrt2_v<Scalar>;
5132 Scalar const a67 = -189 * a21;
5133 Scalar const a68 = ((X[0]) * (X[0]) * (X[0]));
5134 Scalar const a69 = 168 * a68;
5135 Scalar const a70 = a66 * (a67 + a69 + 54 * X[0] - 3);
5136 Scalar const a71 = 168 * a21 - 84 * X[0] + 6;
5137 Scalar const a72 = a71 * a9;
5138 Scalar const a73 = 1680 * X[0];
5139 Scalar const a74 = a21 * X[1];
5140 Scalar const a75 = a31 + 16800 * a74 - 4200 * X[0] * X[1];
5141 Scalar const a76 = (1.0 / 70.0) * a0;
5142 Scalar const a77 = 8 * X[0] - 1;
5143 Scalar const a78 = 3 * a77;
5144 Scalar const a79 = a0 * a38 * a78;
5145 Scalar const a80 = ((X[1]) * (X[1]) * (X[1]));
5146 Scalar const a81 = 56 * a80;
5147 Scalar const a82 = -735 * a29;
5148 Scalar const a83 = a29 * X[0];
5149 Scalar const a84 = 840 * X[0];
5150 Scalar const a85 = -840 * a21 + 280 * a68 + a84;
5151 Scalar const a86 = a82 + 5880 * a83 + a85;
5152 Scalar const a87 = 45 * a29;
5153 Scalar const a88 = 3 * X[0] - 1;
5154 Scalar const a89 = a65 + a68 + a88;
5155 Scalar const a90 = a22 * X[1] - 30 * a32 + a46 + 35 * a80 + a87 * X[0] - a87 + a89;
5156 Scalar const a91 = 6 * a66 * a90;
5157 Scalar const a92 = std::numbers::sqrt3_v<Scalar>;
5158 Scalar const a93 = 60 * X[0];
5159 Scalar const a94 = 560 * a68;
5160 Scalar const a95 = a92 * (420 * a21 - a93 - a94 + 1);
5161 Scalar const a96 = a16 * a71 * a92;
5162 Scalar const a97 = a21 * X[2];
5163 Scalar const a98 = 9 * a16 * a53 * a66 * a77;
5164 Scalar const a99 = -3780 * a21 + 2240 * a68 + a84;
5165 Scalar const a100 = X[1] * X[2];
5166 Scalar const a101 = 168 * a100;
5167 Scalar const a102 = -a101;
5168 Scalar const a103 = a29 * X[2];
5169 Scalar const a104 = 336 * a103 - 5;
5170 Scalar const a105 = 10584 * a83;
5171 Scalar const a106 = a32 * X[2];
5172 Scalar const a107 = 12 * X[1];
5173 Scalar const a108 = 21 * a29;
5174 Scalar const a109 = a107 * X[0];
5175 Scalar const a110 = -a107 + a108 + a109 + a37;
5176 Scalar const a111 = 6 * a0 * a110 * a16;
5177 Scalar const a112 = std::sqrt(30);
5178 Scalar const a113 = 42 * X[0];
5179 Scalar const a114 = -a113 * X[1];
5180 Scalar const a115 = 168 * a21;
5181 Scalar const a116 = -X[1] - 3 * X[2] + 1;
5182 Scalar const a117 = a112 * a63 * a78;
5183 Scalar const a118 = -20 * X[1] - 40 * X[2];
5184 Scalar const a119 = 3360 * a74 - 1680 * X[0] * X[2];
5185 Scalar const a120 = a57 * X[1];
5186 Scalar const a121 = 342 * X[2];
5187 Scalar const a122 = 504 * X[0];
5188 Scalar const a123 = 840 * a21;
5189 Scalar const a124 = a57 * X[0];
5190 Scalar const a125 = -588 * X[1] * X[2];
5191 Scalar const a126 = a125 - 147 * a29 - 294 * a57;
5192 Scalar const a127 = a63 * (a8 + 7 * X[1]);
5193 Scalar const a128 = 6 * a1 * a127;
5194 Scalar const a129 = -1470 * X[1] * X[2];
5195 Scalar const a130 = ((X[2]) * (X[2]) * (X[2]));
5196 Scalar const a131 = (3.0 / 4.0) * a19;
5197 Scalar const a132 = 24 * X[0];
5198 Scalar const a133 = a20 * X[2] + a28 * X[2] + 10 * a57 + a59 + a62 - 10 * X[2];
5199 Scalar const a134 = 6 * a133 * a51;
5200 Scalar const a135 = 1680 * a21;
5201 Scalar const a136 = -a135;
5202 Scalar const a137 = 8400 * a48;
5203 Scalar const a138 = 3360 * X[0] * X[1];
5204 Scalar const a139 = 8400 * a32;
5205 Scalar const a140 = -210 * a29 - 1050 * a57 - 1050 * X[1] * X[2];
5206 Scalar const a141 = std::sqrt(22);
5207 Scalar const a142 = ((X[0]) * (X[0]) * (X[0]) * (X[0]));
5208 Scalar const a143 = a141 * (a115 + 210 * a142 - 336 * a68 - 28 * X[0] + 1);
5209 Scalar const a144 = std::sqrt(11);
5210 Scalar const a145 = 72 * a21;
5211 Scalar const a146 = 180 * a142;
5212 Scalar const a147 = a132 - 108 * a21 + 120 * a68 - 1;
5213 Scalar const a148 = a10 * a144 * a147;
5214 Scalar const a149 = std::sqrt(66);
5215 Scalar const a150 = a68 * X[1];
5216 Scalar const a151 = 252000 * a150 - 151200 * a21 * X[1] + a31 + 16800 * a32;
5217 Scalar const a152 = a88 * (15 * X[0] - 1);
5218 Scalar const a153 = a149 * a152 * a38;
5219 Scalar const a154 = 45360 * a21;
5220 Scalar const a155 = a21 * a29;
5221 Scalar const a156 = 264600 * a155 - 52920 * a29 * X[0] + a82;
5222 Scalar const a157 = 18900 * a142 + a154 + a156 - 52920 * a68 - 7560 * X[0];
5223 Scalar const a158 = a20 - 1;
5224 Scalar const a159 = 2 * a158;
5225 Scalar const a160 = a141 * a159 * a90;
5226 Scalar const a161 = ((X[1]) * (X[1]) * (X[1]) * (X[1]));
5227 Scalar const a162 = std::sqrt(110);
5228 Scalar const a163 = (3.0 / 5.0) * a162;
5229 Scalar const a164 = 90720 * a21;
5230 Scalar const a165 = a80 * X[0];
5231 Scalar const a166 = 224 * a80;
5232 Scalar const a167 = 24 * X[1];
5233 Scalar const a168 = 6 * a21;
5234 Scalar const a169 = a142 + a168 - a2 - 4 * a68 + 1;
5235 Scalar const a170 =
5236 a162 * (-a145 * X[1] + 126 * a161 + a166 * X[0] - a166 + a167 * a68 - a167 + a169 +
5237 126 * a21 * a29 + 126 * a29 - 252 * a83 + 72 * X[0] * X[1]);
5238 Scalar const a171 = std::sqrt(33);
5239 Scalar const a172 = 140 * X[0];
5240 Scalar const a173 = a171 * (a136 - 4200 * a142 + a172 + 5040 * a68 + 1);
5241 Scalar const a174 = a147 * a17 * a171;
5242 Scalar const a175 = -105840 * a68;
5243 Scalar const a176 = a68 * X[2];
5244 Scalar const a177 = a141 * a152 * a16 * a54;
5245 Scalar const a178 = 37800 * a142;
5246 Scalar const a179 = a178 + 31920 * a21 - 70560 * a68 - 3360 * X[0];
5247 Scalar const a180 = 110880 * a150;
5248 Scalar const a181 = 211680 * a74 * X[2] - 42336 * X[0] * X[1] * X[2];
5249 Scalar const a182 = a158 * a17;
5250 Scalar const a183 = a110 * a149 * a182;
5251 Scalar const a184 = 15120 * a21;
5252 Scalar const a185 = 30240 * X[0] * X[1];
5253 Scalar const a186 = a184 + a185;
5254 Scalar const a187 = 100800 * a150 - 166320 * a21 * X[1];
5255 Scalar const a188 = std::sqrt(330);
5256 Scalar const a189 = a80 * X[2];
5257 Scalar const a190 = a74 * X[2];
5258 Scalar const a191 = a29 * a48;
5259 Scalar const a192 = 846720 * a165 - 84672 * a80;
5260 Scalar const a193 = 84 * a29;
5261 Scalar const a194 = 21 * X[1];
5262 Scalar const a195 =
5263 a16 * a188 * (a114 + a193 * X[0] - a193 + a194 * a21 + a194 + 84 * a80 + a89);
5264 Scalar const a196 = 211680 * a32;
5265 Scalar const a197 = 2520 * a142 - 10080 * a68 - 10080 * X[0];
5266 Scalar const a198 = a152 * a188 * a63;
5267 Scalar const a199 = -60480 * a21 * X[2];
5268 Scalar const a200 = -30240 * a21 * X[1];
5269 Scalar const a201 = 50400 * a150;
5270 Scalar const a202 = 15120 * X[0];
5271 Scalar const a203 = a21 * a57;
5272 Scalar const a204 = 105840 * a203;
5273 Scalar const a205 = a127 * a159 * a162;
5274 Scalar const a206 = 60480 * X[0];
5275 Scalar const a207 = 50400 * a176 - 332640 * a21 * X[1];
5276 Scalar const a208 = a29 * a57;
5277 Scalar const a209 = a32 * a57;
5278 Scalar const a210 = 16 * X[1];
5279 Scalar const a211 = 5 * a141 * a63 * (a210 * X[0] - a210 + 36 * a29 + a37);
5280 Scalar const a212 = 7560 * a142 + a154 - 30240 * a68 - 30240 * X[0];
5281 Scalar const a213 = std::sqrt(154);
5282 Scalar const a214 = a133 * a182 * a213;
5283 Scalar const a215 = std::sqrt(770);
5284 Scalar const a216 = a130 * X[1];
5285 Scalar const a217 = 450 * a208 - 14 * X[1];
5286 Scalar const a218 = a130 * X[0];
5287 Scalar const a219 = a133 * a16 * a215 * (a8 + 9 * X[1]);
5288 Scalar const a220 = ((X[2]) * (X[2]) * (X[2]) * (X[2]));
5289 Scalar const a221 = 30 * a21;
5290 Scalar const a222 = 90 * a57;
5291 Scalar const a223 = 60 * a100 + a222 + 6 * a29;
5292 Scalar const a224 = 140 * a130;
5293 Scalar const a225 = 20 * X[2];
5294 Scalar const a226 = 180 * X[0];
5295 Scalar const a227 = 3 * a162 *
5296 (a100 * a42 - 120 * a100 * X[0] + a103 * a93 - 60 * a103 - a107 * a21 +
5297 a109 + a120 * a226 - 180 * a120 + a13 * a68 - a13 + a130 * a172 +
5298 a161 + a168 * a29 + a169 + a2 * a80 + 70 * a220 + a222 * a29 + a223 +
5299 a224 * X[1] - a224 + a225 * a80 - a225 - a226 * a57 - a42 * X[2] +
5300 a47 * a57 + 20 * a68 * X[2] - 4 * a80 - 12 * a83 + a93 * X[2]);
5301 Scalar const a228 = 90720 * a48;
5302 P[0] = a0;
5303 P[1] = 0;
5304 P[2] = 0;
5305 P[3] = 0;
5306 P[4] = a0;
5307 P[5] = 0;
5308 P[6] = 0;
5309 P[7] = 0;
5310 P[8] = a0;
5311 P[9] = 0;
5312 P[10] = a4;
5313 P[11] = 0;
5314 P[12] = 0;
5315 P[13] = 0;
5316 P[14] = a4;
5317 P[15] = a5 * (a6 - 3.0 / 2.0);
5318 P[16] = 0;
5319 P[17] = 0;
5320 P[18] = a5 * (3.0 / 2.0 - a7);
5321 P[19] = a11;
5322 P[20] = 0;
5323 P[21] = 0;
5324 P[22] = 0;
5325 P[23] = a11;
5326 P[24] = (1.0 / 2.0) * a12 * (a13 + a14 - 3);
5327 P[25] = 0;
5328 P[26] = 0;
5329 P[27] = (1.0 / 2.0) * a15;
5330 P[28] = a18;
5331 P[29] = 0;
5332 P[30] = a15;
5333 P[31] = 0;
5334 P[32] = a18;
5335 P[33] = 0;
5336 P[34] = a23;
5337 P[35] = 0;
5338 P[36] = 0;
5339 P[37] = 0;
5340 P[38] = a23;
5341 P[39] = a24 * (-18 * a21 + a7 + 3.0 / 10.0);
5342 P[40] = a26;
5343 P[41] = 0;
5344 P[42] = 0;
5345 P[43] = 0;
5346 P[44] = a26;
5347 P[45] = (2.0 / 3.0) * a27 * (-a28 + a30 + 1);
5348 P[46] = 0;
5349 P[47] = 0;
5350 P[48] = (1.0 / 30.0) * a27 * (-120 * a21 - a33 + 240 * X[0] - 43);
5351 P[49] = a39;
5352 P[50] = 0;
5353 P[51] = 0;
5354 P[52] = 0;
5355 P[53] = a39;
5356 P[54] = (1.0 / 10.0) * a43;
5357 P[55] = a45;
5358 P[56] = 0;
5359 P[57] = (1.0 / 5.0) * a43;
5360 P[58] = 0;
5361 P[59] = a45;
5362 P[60] = a19 * (a30 - a46 + 30 * X[1] * X[2] - 5 * X[2] + 2);
5363 P[61] = 0;
5364 P[62] = 0;
5365 P[63] = (1.0 / 10.0) * a19 * (-300 * a32 - a47 - a49 - a50 + 180 * X[0] - 31);
5366 P[64] = a55;
5367 P[65] = 0;
5368 P[66] = (1.0 / 20.0) * a19 * (-a33 - a42 + 120 * X[0] - 19);
5369 P[67] = 0;
5370 P[68] = a55;
5371 P[69] = (1.0 / 3.0) * a56 * (3 * a29 - a52 + 18 * a57 + a58 * X[2] - 15 * X[2] + 2);
5372 P[70] = 0;
5373 P[71] = 0;
5374 P[72] = a56 * (-a36 - a60 + (1.0 / 3.0) * X[1] + X[2] - 1.0 / 3.0);
5375 P[73] = a64;
5376 P[74] = 0;
5377 P[75] = a56 * (-a44 - a65 - X[0] - 1.0 / 20.0);
5378 P[76] = 0;
5379 P[77] = a64;
5380 P[78] = 0;
5381 P[79] = a70;
5382 P[80] = 0;
5383 P[81] = 0;
5384 P[82] = 0;
5385 P[83] = a70;
5386 P[84] = 126 * a21 - a69 - 18 * X[0] + 3.0 / 10.0;
5387 P[85] = a72;
5388 P[86] = 0;
5389 P[87] = 0;
5390 P[88] = 0;
5391 P[89] = a72;
5392 P[90] = a76 * (7560 * a21 - 4480 * a68 - a73 - a75 - 67);
5393 P[91] = a79;
5394 P[92] = 0;
5395 P[93] = 0;
5396 P[94] = 0;
5397 P[95] = a79;
5398 P[96] = (15.0 / 4.0) * a66 * (-63 * a29 + a58 + a81 - 1);
5399 P[97] = 0;
5400 P[98] = 0;
5401 P[99] = (3.0 / 28.0) * a66 * (-2520 * a74 - a86 + 5040 * X[0] * X[1] - 650 * X[1] + 117);
5402 P[100] = a91;
5403 P[101] = 0;
5404 P[102] = 0;
5405 P[103] = 0;
5406 P[104] = a91;
5407 P[105] = (1.0 / 10.0) * a95;
5408 P[106] = a96;
5409 P[107] = 0;
5410 P[108] = (1.0 / 5.0) * a95;
5411 P[109] = 0;
5412 P[110] = a96;
5413 P[111] = (3.0 / 70.0) * a66 *
5414 (5670 * a21 - a50 - 3360 * a68 - 8400 * a74 - 8400 * a97 + 2100 * X[0] * X[1] +
5415 2100 * X[0] * X[2] - 1260 * X[0] - 39);
5416 P[112] = a98;
5417 P[113] = 0;
5418 P[114] = (3.0 / 140.0) * a66 * (-a75 - a99 - 11);
5419 P[115] = 0;
5420 P[116] = a98;
5421 P[117] = (3.0 / 4.0) * a0 * (a102 + a104 - 231 * a29 + 168 * a80 + 78 * X[1] + 12 * X[2]);
5422 P[118] = 0;
5423 P[119] = 0;
5424 P[120] = (1.0 / 28.0) * a0 *
5425 (-a105 - 14112 * a106 + 2184 * a21 + 1323 * a29 - 728 * a68 - 5544 * a74 -
5426 2016 * a97 + 11088 * X[0] * X[1] + 4032 * X[0] * X[2] - 2184 * X[0] +
5427 1764 * X[1] * X[2] - 1416 * X[1] - 534 * X[2] + 295);
5428 P[121] = a111;
5429 P[122] = 0;
5430 P[123] = a76 * (2205 * a29 - 5040 * a74 - 17640 * a83 - a85 + 10080 * X[0] * X[1] -
5431 1230 * X[1] + 101);
5432 P[124] = 0;
5433 P[125] = a111;
5434 P[126] = (1.0 / 7.0) * a112 *
5435 (-a113 - a114 - a115 * X[1] - a116 - 504 * a21 * X[2] - a67 - 112 * a68 +
5436 126 * X[0] * X[2]);
5437 P[127] = a117;
5438 P[128] = 0;
5439 P[129] = (3.0 / 140.0) * a112 * (-a118 - a119 - 6720 * a97 - a99 + 840 * X[0] * X[1] - 29);
5440 P[130] = 0;
5441 P[131] = a117;
5442 P[132] =
5443 (3.0 / 4.0) * a1 *
5444 (-336 * a100 + a104 + 336 * a120 - 105 * a29 - 42 * a57 + a81 + 54 * X[1] + 36 * X[2]);
5445 P[133] = 0;
5446 P[134] = 0;
5447 P[135] =
5448 (3.0 / 28.0) * a1 *
5449 (-4704 * a106 - a121 - a122 - a123 * X[1] - 2352 * a124 - a126 + 504 * a21 - a69 -
5450 1176 * a83 - 1344 * a97 + 1680 * X[0] * X[1] + 2688 * X[0] * X[2] - 212 * X[1] + 65);
5451 P[136] = a128;
5452 P[137] = 0;
5453 P[138] = (3.0 / 70.0) * a1 *
5454 (-11760 * a106 - a119 - a123 * X[2] - a129 - a86 + 6720 * X[0] * X[1] -
5455 855 * X[1] - 205 * X[2] + 104);
5456 P[139] = 0;
5457 P[140] = a128;
5458 P[141] = a131 * (a102 + 96 * a103 - a108 + 240 * a120 + 160 * a130 - 210 * a57 + a58 +
5459 8 * a80 + 72 * X[2] - 5);
5460 P[142] = 0;
5461 P[143] = 0;
5462 P[144] = a131 * (-192 * a106 - a132 * a29 - a132 - 24 * a21 * X[1] + 24 * a21 + 3 * a29 -
5463 240 * a57 * X[0] + 30 * a57 - a6 - 8 * a68 - 96 * a97 + 48 * X[0] * X[1] +
5464 192 * X[0] * X[2] + 24 * X[1] * X[2] - 24 * X[2] + 3);
5465 P[145] = a134;
5466 P[146] = 0;
5467 P[147] = (3.0 / 70.0) * a19 *
5468 (-8400 * a124 - a135 * X[1] - a136 + a137 + a138 - a139 * X[2] - a140 - a29 * a73 -
5469 a73 - a94 - 4200 * a97 - 435 * X[1] - 1075 * X[2] + 227);
5470 P[148] = 0;
5471 P[149] = a134;
5472 P[150] = 0;
5473 P[151] = a143;
5474 P[152] = 0;
5475 P[153] = 0;
5476 P[154] = 0;
5477 P[155] = a143;
5478 P[156] = a144 * (-a145 - a146 + 216 * a68 + a7 + 3.0 / 70.0);
5479 P[157] = a148;
5480 P[158] = 0;
5481 P[159] = 0;
5482 P[160] = 0;
5483 P[161] = a148;
5484 P[162] = (1.0 / 840.0) * a149 *
5485 (-75600 * a142 - a151 - 63840 * a21 + 141120 * a68 + 6720 * X[0] - 97);
5486 P[163] = a153;
5487 P[164] = 0;
5488 P[165] = 0;
5489 P[166] = 0;
5490 P[167] = a153;
5491 P[168] = (1.0 / 252.0) * a141 *
5492 (-151200 * a150 - a157 + 249480 * a21 * X[1] - 45360 * a32 - 850 * X[1] + 247);
5493 P[169] = a160;
5494 P[170] = 0;
5495 P[171] = 0;
5496 P[172] = 0;
5497 P[173] = a160;
5498 P[174] = a163 * (210 * a161 + 168 * a29 - 336 * a80 - 28 * X[1] + 1);
5499 P[175] = 0;
5500 P[176] = 0;
5501 P[177] = (1.0 / 2520.0) * a162 *
5502 (-15120 * a142 - 211680 * a150 - 846720 * a155 - a164 - 1270080 * a165 +
5503 635040 * a21 * X[1] + 1693440 * a29 * X[0] - 172284 * a29 - 635040 * a32 +
5504 60480 * a68 + 127008 * a80 + 60480 * X[0] + 66724 * X[1] - 6883);
5505 P[178] = a170;
5506 P[179] = 0;
5507 P[180] = 0;
5508 P[181] = 0;
5509 P[182] = a170;
5510 P[183] = (1.0 / 70.0) * a173;
5511 P[184] = a174;
5512 P[185] = 0;
5513 P[186] = (1.0 / 35.0) * a173;
5514 P[187] = 0;
5515 P[188] = a174;
5516 P[189] = (1.0 / 280.0) * a141 *
5517 (-a137 - a139 - 56700 * a142 - 126000 * a150 - a175 - 126000 * a176 +
5518 75600 * a21 * X[1] + 75600 * a21 * X[2] - 47880 * a21 - a50 + 5040 * X[0] - 49);
5519 P[190] = a177;
5520 P[191] = 0;
5521 P[192] = (1.0 / 560.0) * a141 * (-a151 - a179 - 1);
5522 P[193] = 0;
5523 P[194] = a177;
5524 P[195] = (1.0 / 252.0) * a149 *
5525 (-a125 - 16380 * a142 - 158760 * a155 - 40320 * a176 - a180 - a181 +
5526 182952 * a21 * X[1] + 66528 * a21 * X[2] - 39312 * a21 + 31752 * a29 * X[0] +
5527 441 * a29 - 33264 * a32 - 12096 * a48 + 45864 * a68 + 6552 * X[0] - 572 * X[1] -
5528 278 * X[2] + 175);
5529 P[196] = a183;
5530 P[197] = 0;
5531 P[198] = (1.0 / 630.0) * a149 *
5532 (-6300 * a142 - a156 - a186 - a187 + 17640 * a68 + 2520 * X[0] - 310 * X[1] + 22);
5533 P[199] = 0;
5534 P[200] = a183;
5535 P[201] = (1.0 / 5.0) * a188 *
5536 (a101 - 756 * a103 + 420 * a161 + 840 * a189 + 420 * a29 - 756 * a80 - 77 * X[1] -
5537 7 * X[2] + 3);
5538 P[202] = 0;
5539 P[203] = 0;
5540 P[204] = (1.0 / 2520.0) * a188 *
5541 (-87024 * a100 - 13860 * a142 - 176400 * a150 - 635040 * a155 - 35280 * a176 -
5542 423360 * a190 - 1270080 * a191 - a192 + 529200 * a21 * X[1] +
5543 105840 * a21 * X[2] - 83160 * a21 + 1270080 * a29 * X[0] + 127008 * a29 * X[2] -
5544 128772 * a29 - 529200 * a32 - 105840 * a48 + 55440 * a68 +
5545 846720 * X[0] * X[1] * X[2] + 55440 * X[0] + 55118 * X[1] + 11606 * X[2] - 6163);
5546 P[205] = a195;
5547 P[206] = 0;
5548 P[207] = (1.0 / 5040.0) * a188 *
5549 (-423360 * a155 - a184 - a192 - a196 - a197 + 211680 * a21 * X[1] +
5550 846720 * a29 * X[0] - 83496 * a29 - 70560 * a68 * X[1] + 20636 * X[1] - 971);
5551 P[208] = 0;
5552 P[209] = a195;
5553 P[210] =
5554 (1.0 / 84.0) * a188 *
5555 (-a116 - a122 * X[2] - 1890 * a142 - 2520 * a150 - 7560 * a176 + 1512 * a21 * X[1] +
5556 4536 * a21 * X[2] - 1596 * a21 + 3528 * a68 - 168 * X[0] * X[1] + 168 * X[0]);
5557 P[211] = a198;
5558 P[212] = 0;
5559 P[213] =
5560 (1.0 / 560.0) * a188 *
5561 (-a118 - a138 - 100800 * a176 - a179 - a199 - a200 - a201 - 6720 * X[0] * X[2] - 39);
5562 P[214] = 0;
5563 P[215] = a198;
5564 P[216] =
5565 (1.0 / 252.0) * a162 *
5566 (a105 - a126 - 11340 * a142 - 52920 * a155 - 80640 * a176 - a181 - a201 - a202 * X[1] -
5567 a204 + 83160 * a21 * X[1] + 133056 * a21 * X[2] - 27216 * a21 - 24192 * a48 +
5568 21168 * a57 * X[0] + 31752 * a68 + 4536 * X[0] - 232 * X[1] - 402 * X[2] + 85);
5569 P[217] = a205;
5570 P[218] = 0;
5571 P[219] =
5572 (1.0 / 630.0) * a162 *
5573 (-a129 - 201600 * a150 - a157 - a202 * X[2] - a206 * X[1] - a207 + 83160 * a21 * X[2] -
5574 529200 * a74 * X[2] + 105840 * X[0] * X[1] * X[2] - 1005 * X[1] - 155 * X[2] + 89);
5575 P[220] = 0;
5576 P[221] = a205;
5577 P[222] =
5578 a141 * (408 * a100 - 1404 * a103 - 432 * a120 + 180 * a161 + 1080 * a189 + 1080 * a208 +
5579 276 * a29 + 24 * a57 - 396 * a80 - 63 * X[1] - 21 * X[2] + 3);
5580 P[223] = 0;
5581 P[224] = 0;
5582 P[225] = (1.0 / 36.0) * a141 *
5583 (-11400 * a100 - 810 * a142 - 8280 * a150 - 23760 * a155 - 25920 * a165 -
5584 6120 * a176 - 56160 * a190 - 116640 * a191 - 8640 * a203 - 77760 * a209 +
5585 24840 * a21 * X[1] + 18360 * a21 * X[2] - 4860 * a21 + 47520 * a29 * X[0] +
5586 11664 * a29 * X[2] - 4794 * a29 - 24840 * a32 - 18360 * a48 + 17280 * a57 * X[0] +
5587 7776 * a57 * X[1] - 1812 * a57 + 3240 * a68 + 2592 * a80 +
5588 112320 * X[0] * X[1] * X[2] + 3240 * X[0] + 2549 * X[1] + 1947 * X[2] - 347);
5589 P[226] = a211;
5590 P[227] = 0;
5591 P[228] = (1.0 / 1008.0) * a141 *
5592 (-95424 * a100 - 171360 * a150 - 786240 * a155 - 1088640 * a165 - 20160 * a176 -
5593 483840 * a190 - 2177280 * a191 - a199 - a206 * X[2] + 514080 * a21 * X[1] - a212 +
5594 1572480 * a29 * X[0] + 217728 * a29 * X[2] - 158088 * a29 - 514080 * a32 +
5595 108864 * a80 + 967680 * X[0] * X[1] * X[2] + 51204 * X[1] + 5896 * X[2] - 2983);
5596 P[229] = 0;
5597 P[230] = a211;
5598 P[231] = (1.0 / 12.0) * a213 *
5599 (-a14 - a146 - 480 * a150 - 360 * a155 - 1920 * a176 - 2880 * a190 - 3600 * a203 +
5600 792 * a21 * X[1] + 3168 * a21 * X[2] - 432 * a21 + 72 * a29 * X[0] + a29 -
5601 144 * a32 - 576 * a48 + 720 * a57 * X[0] + 10 * a57 - a61 + 504 * a68 +
5602 576 * X[0] * X[1] * X[2] + 72 * X[0] + 8 * X[1] * X[2] + 1);
5603 P[232] = a214;
5604 P[233] = 0;
5605 P[234] = (1.0 / 630.0) * a213 *
5606 (-a140 - 75600 * a155 - a164 - a175 - 252000 * a176 - a178 - a185 - a187 -
5607 378000 * a190 - 378000 * a203 + 415800 * a21 * X[2] + 15120 * a29 * X[0] -
5608 75600 * a48 + 75600 * a57 * X[0] + 75600 * X[0] * X[1] * X[2] + 15120 * X[0] -
5609 585 * X[1] - 1325 * X[2] + 407);
5610 P[235] = 0;
5611 P[236] = a214;
5612 P[237] = (3.0 / 5.0) * a215 *
5613 (176 * a100 - 450 * a120 - a121 * a29 - 30 * a130 + 15 * a161 + 180 * a189 +
5614 300 * a216 + a217 + 40 * a29 + 40 * a57 - 42 * a80 - 14 * X[2] + 1);
5615 P[238] = 0;
5616 P[239] = 0;
5617 P[240] = (1.0 / 30.0) * a215 *
5618 (-1376 * a100 + 540 * a130 - 90 * a142 - 600 * a150 - 1260 * a155 - 1080 * a165 -
5619 1320 * a176 - 6840 * a190 - 9720 * a191 - 4500 * a203 - 16200 * a209 +
5620 1800 * a21 * X[1] + 3960 * a21 * X[2] - 540 * a21 - 5400 * a218 +
5621 2520 * a29 * X[0] + 972 * a29 * X[2] - 253 * a29 - 1800 * a32 - 3960 * a48 +
5622 9000 * a57 * X[0] + 1620 * a57 * X[1] - 910 * a57 + 360 * a68 + 108 * a80 +
5623 13680 * X[0] * X[1] * X[2] + 360 * X[0] + 182 * X[1] + 404 * X[2] - 37);
5624 P[241] = a219;
5625 P[242] = 0;
5626 P[243] = (1.0 / 2520.0) * a215 *
5627 (-152880 * a100 - 287280 * a155 - 272160 * a165 - a180 - 756000 * a190 -
5628 1360800 * a191 - 75600 * a203 - a207 - 1360800 * a209 + 151200 * a21 * X[2] -
5629 a212 + 574560 * a29 * X[0] + 136080 * a29 * X[2] - 58548 * a29 - 332640 * a32 -
5630 151200 * a48 + 151200 * a57 * X[0] + 136080 * a57 * X[1] - 14910 * a57 +
5631 27216 * a80 + 1512000 * X[0] * X[1] * X[2] + 34488 * X[1] + 15080 * X[2] - 3083);
5632 P[244] = 0;
5633 P[245] = a219;
5634 P[246] = a163 *
5635 (240 * a100 - 270 * a103 - 810 * a120 - 630 * a130 + 5 * a161 + 100 * a189 +
5636 700 * a216 + a217 + 350 * a220 + 24 * a29 + 360 * a57 - 18 * a80 - 70 * X[2] + 3);
5637 P[247] = 0;
5638 P[248] = 0;
5639 P[249] =
5640 a163 * (70 * a130 - 5 * a142 - 100 * a176 - 300 * a190 - 450 * a203 - 900 * a209 +
5641 60 * a21 * X[1] + 300 * a21 * X[2] - 700 * a218 - a221 * a29 - a221 - a223 -
5642 a29 * a49 + 60 * a29 * X[0] + 30 * a29 * X[2] - a41 * a80 - a49 +
5643 900 * a57 * X[0] + 90 * a57 * X[1] + a6 - 20 * a68 * X[1] + 20 * a68 + 2 * a80 -
5644 a93 * X[1] + 600 * X[0] * X[1] * X[2] + 20 * X[0] + 30 * X[2] - 2);
5645 P[250] = a227;
5646 P[251] = 0;
5647 P[252] = (1.0 / 168.0) * a162 *
5648 (-a100 * a164 - 18480 * a100 + 14112 * a130 - a184 * a29 - a186 - a196 * a57 -
5649 a197 - a200 - a204 + 90720 * a21 * X[2] - 141120 * a218 - a228 * a29 - a228 +
5650 30240 * a29 * X[0] + 9072 * a29 * X[2] - 3108 * a29 + 211680 * a57 * X[0] +
5651 21168 * a57 * X[1] - 21462 * a57 - 10080 * a68 * X[1] - 30240 * a68 * X[2] -
5652 10080 * a80 * X[0] + 1008 * a80 + 181440 * X[0] * X[1] * X[2] + 3208 * X[1] +
5653 9432 * X[2] - 1111);
5654 P[253] = 0;
5655 P[254] = a227;
5656 return Pm;
5657 }
5658};
5659
5660} // namespace detail
5661} // namespace polynomial
5662} // namespace math
5663} // namespace pbat
5664
5665#endif // PBAT_MATH_POLYNOMIAL_BASIS_H
The namespace for the Polynomial module.
Definition Basis.h:25
Math related functionality.
Definition Concepts.h:19
The main namespace of the library.
Definition Aliases.h:15
Eigen::Vector< Scalar, N > Vector
Fixed-size vector type.
Definition Aliases.h:24
double Scalar
Scalar type.
Definition Aliases.h:18
Eigen::Matrix< Scalar, Rows, Cols > Matrix
Fixed-size matrix type.
Definition Aliases.h:31
Divergence-free polynomial basis in dimensions and order .
Definition Basis.h:191
static constexpr int kSize
Number of basis functions.
Definition Basis.h:196
Matrix< kSize, kDims > eval(Vector< kDims > const &X) const
Definition Basis.h:203
static constexpr int kOrder
Polynomial order.
Definition Basis.h:195
static constexpr int kDims
Spatial dimensions.
Definition Basis.h:194
typename detail::DivergenceFreeBasis< Dims, Order > BaseType
Base type.
Definition Basis.h:193
Polynomial basis in dimensions and order .
Definition Basis.h:51
detail::MonomialBasis< Dims, Order > BaseType
Base type.
Definition Basis.h:53
Matrix< kDims, kSize > derivatives(Vector< kDims > const &X) const
Definition Basis.h:73
Vector< kSize > eval(Vector< kDims > const &X) const
Definition Basis.h:63
Matrix< kSize, kDims > antiderivatives(Vector< kDims > const &X) const
Definition Basis.h:84
Orthonormal polynomial basis in dimensions and order .
Definition Basis.h:126
static constexpr int kSize
Number of basis functions.
Definition Basis.h:131
Matrix< kSize, kDims > antiderivatives(Vector< kDims > const &X) const
Definition Basis.h:159
Vector< kSize > eval(Vector< kDims > const &X) const
Definition Basis.h:138
typename detail::OrthonormalBasis< Dims, Order > BaseType
Base type.
Definition Basis.h:128
static constexpr int kOrder
Polynomial order.
Definition Basis.h:130
Matrix< kDims, kSize > derivatives(Vector< kDims > const &X) const
Definition Basis.h:148
static constexpr int kDims
Spatial dimensions.
Definition Basis.h:129