9#include <kernel/space/parametric_evaluator.hpp>
33 return T_(0.5) + T_(0.25) * x * (x*x - T_(3));
39 return T_(0.5) - T_(0.25) * x * (x*x - T_(3));
45 return T_(0.25) * (x + T_(1)) * Math::sqr(x - T_(1));
51 return T_(0.25) * (x - T_(1)) * Math::sqr(x + T_(1));
58 return +T_(0.75) * (x*x - T_(1));
64 return -T_(0.75) * (x*x - T_(1));
70 return T_(0.25) * (T_(3)*x + T_(1)) * (x - T_(1));
76 return T_(0.25) * (T_(3)*x - T_(1)) * (x + T_(1));
95 return T_(0.5) * (T_(3)*x - T_(1));
101 return T_(0.5) * (T_(3)*x + T_(1));
113 typename TrafoEvaluator_,
114 typename SpaceEvalTraits_,
115 typename Shape_ =
typename Space_::ShapeType>
125 typename TrafoEvaluator_,
126 typename SpaceEvalTraits_>
127 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<1> > :
133 Shape::Hypercube<1> >,
158 typedef typename SpaceEvalTraits::DataType
DataType;
199 CoeffEvalData coeff_data;
203 _coeff = coeff_data.jac_mat(0,0);
215 template<
typename EvalData_>
221 data.phi[0].ref_value = Intern::p1(
DataType(point[0]));
223 data.phi[1].ref_value = _coeff * Intern::q1(
DataType(point[0]));
225 data.phi[2].ref_value = Intern::p2(
DataType(point[0]));
227 data.phi[3].ref_value = _coeff * Intern::q2(
DataType(point[0]));
239 template<
typename EvalData_>
245 data.phi[0].ref_grad[0] = Intern::dp1(
DataType(point[0]));
247 data.phi[1].ref_grad[0] = _coeff * Intern::dq1(
DataType(point[0]));
249 data.phi[2].ref_grad[0] = Intern::dp2(
DataType(point[0]));
251 data.phi[3].ref_grad[0] = _coeff * Intern::dq2(
DataType(point[0]));
263 template<
typename EvalData_>
269 data.phi[0].ref_hess[0][0] = Intern::ddp1(
DataType(point[0]));
271 data.phi[1].ref_hess[0][0] = _coeff * Intern::ddq1(
DataType(point[0]));
273 data.phi[2].ref_hess[0][0] = Intern::ddp2(
DataType(point[0]));
275 data.phi[3].ref_hess[0][0] = _coeff * Intern::ddq2(
DataType(point[0]));
286 typename TrafoEvaluator_,
287 typename SpaceEvalTraits_>
288 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hypercube<2> > :
294 Shape::Hypercube<2> >,
319 typedef typename SpaceEvalTraits::DataType
DataType;
339 return _coeff_fod[i](0,0) * rx + _coeff_fod[i](0,1) * ry;
356 return _coeff_fod[i](1,0) * rx + _coeff_fod[i](1,1) * ry;
394 CoeffEvalData coeff_data;
397 for(
int i(0); i < 4; ++i)
407 _coeff_fod[i] = coeff_data.jac_mat;
420 template<
typename EvalData_>
425 const DataType x(point[0]), y(point[1]);
429 data.phi[ 0].ref_value = Intern::p1(x) * Intern::p1(y);
430 d0 = Intern::q1(x) * Intern::p1(y);
431 d1 = Intern::p1(x) * Intern::q1(y);
432 data.phi[ 1].ref_value = _trans_dx(0, d0, d1);
433 data.phi[ 2].ref_value = _trans_dy(0, d0, d1);
436 data.phi[ 3].ref_value = Intern::p2(x) * Intern::p1(y);
437 d0 = Intern::q2(x) * Intern::p1(y);
438 d1 = Intern::p2(x) * Intern::q1(y);
439 data.phi[ 4].ref_value = _trans_dx(1, d0, d1);
440 data.phi[ 5].ref_value = _trans_dy(1, d0, d1);
443 data.phi[ 6].ref_value = Intern::p1(x) * Intern::p2(y);
444 d0 = Intern::q1(x) * Intern::p2(y);
445 d1 = Intern::p1(x) * Intern::q2(y);
446 data.phi[ 7].ref_value = _trans_dx(2, d0, d1);
447 data.phi[ 8].ref_value = _trans_dy(2, d0, d1);
450 data.phi[ 9].ref_value = Intern::p2(x) * Intern::p2(y);
451 d0 = Intern::q2(x) * Intern::p2(y);
452 d1 = Intern::p2(x) * Intern::q2(y);
453 data.phi[10].ref_value = _trans_dx(3, d0, d1);
454 data.phi[11].ref_value = _trans_dy(3, d0, d1);
457 data.phi[12].ref_value = Intern::q1(x) * Intern::q1(y);
458 data.phi[13].ref_value = Intern::q2(x) * Intern::q1(y);
459 data.phi[14].ref_value = Intern::q1(x) * Intern::q2(y);
460 data.phi[15].ref_value = Intern::q2(x) * Intern::q2(y);
472 template<
typename EvalData_>
477 const DataType x(point[0]), y(point[1]);
481 data.phi[ 0].ref_grad[0] = Intern::dp1(x) * Intern::p1(y);
482 data.phi[ 0].ref_grad[1] = Intern::p1(x) * Intern::dp1(y);
483 d0x = Intern::dq1(x) * Intern::p1(y);
484 d0y = Intern::q1(x) * Intern::dp1(y);
485 d1x = Intern::dp1(x) * Intern::q1(y);
486 d1y = Intern::p1(x) * Intern::dq1(y);
487 data.phi[ 1].ref_grad[0] = _trans_dx(0, d0x, d1x);
488 data.phi[ 1].ref_grad[1] = _trans_dx(0, d0y, d1y);
489 data.phi[ 2].ref_grad[0] = _trans_dy(0, d0x, d1x);
490 data.phi[ 2].ref_grad[1] = _trans_dy(0, d0y, d1y);
493 data.phi[ 3].ref_grad[0] = Intern::dp2(x) * Intern::p1(y);
494 data.phi[ 3].ref_grad[1] = Intern::p2(x) * Intern::dp1(y);
495 d0x = Intern::dq2(x) * Intern::p1(y);
496 d0y = Intern::q2(x) * Intern::dp1(y);
497 d1x = Intern::dp2(x) * Intern::q1(y);
498 d1y = Intern::p2(x) * Intern::dq1(y);
499 data.phi[ 4].ref_grad[0] = _trans_dx(1, d0x, d1x);
500 data.phi[ 4].ref_grad[1] = _trans_dx(1, d0y, d1y);
501 data.phi[ 5].ref_grad[0] = _trans_dy(1, d0x, d1x);
502 data.phi[ 5].ref_grad[1] = _trans_dy(1, d0y, d1y);
505 data.phi[ 6].ref_grad[0] = Intern::dp1(x) * Intern::p2(y);
506 data.phi[ 6].ref_grad[1] = Intern::p1(x) * Intern::dp2(y);
507 d0x = Intern::dq1(x) * Intern::p2(y);
508 d0y = Intern::q1(x) * Intern::dp2(y);
509 d1x = Intern::dp1(x) * Intern::q2(y);
510 d1y = Intern::p1(x) * Intern::dq2(y);
511 data.phi[ 7].ref_grad[0] = _trans_dx(2, d0x, d1x);
512 data.phi[ 7].ref_grad[1] = _trans_dx(2, d0y, d1y);
513 data.phi[ 8].ref_grad[0] = _trans_dy(2, d0x, d1x);
514 data.phi[ 8].ref_grad[1] = _trans_dy(2, d0y, d1y);
517 data.phi[ 9].ref_grad[0] = Intern::dp2(x) * Intern::p2(y);
518 data.phi[ 9].ref_grad[1] = Intern::p2(x) * Intern::dp2(y);
519 d0x = Intern::dq2(x) * Intern::p2(y);
520 d0y = Intern::q2(x) * Intern::dp2(y);
521 d1x = Intern::dp2(x) * Intern::q2(y);
522 d1y = Intern::p2(x) * Intern::dq2(y);
523 data.phi[10].ref_grad[0] = _trans_dx(3, d0x, d1x);
524 data.phi[10].ref_grad[1] = _trans_dx(3, d0y, d1y);
525 data.phi[11].ref_grad[0] = _trans_dy(3, d0x, d1x);
526 data.phi[11].ref_grad[1] = _trans_dy(3, d0y, d1y);
529 data.phi[12].ref_grad[0] = Intern::dq1(x) * Intern::q1(y);
530 data.phi[12].ref_grad[1] = Intern::q1(x) * Intern::dq1(y);
531 data.phi[13].ref_grad[0] = Intern::dq2(x) * Intern::q1(y);
532 data.phi[13].ref_grad[1] = Intern::q2(x) * Intern::dq1(y);
533 data.phi[14].ref_grad[0] = Intern::dq1(x) * Intern::q2(y);
534 data.phi[14].ref_grad[1] = Intern::q1(x) * Intern::dq2(y);
535 data.phi[15].ref_grad[0] = Intern::dq2(x) * Intern::q2(y);
536 data.phi[15].ref_grad[1] = Intern::q2(x) * Intern::dq2(y);
548 template<
typename EvalData_>
553 const DataType x(point[0]), y(point[1]);
554 DataType d0xx, d0xy, d0yy, d1xx, d1xy, d1yy;
557 data.phi[ 0].ref_hess[0][0] = Intern::ddp1(x) * Intern::p1(y);
558 data.phi[ 0].ref_hess[0][1] =
559 data.phi[ 0].ref_hess[1][0] = Intern::dp1(x) * Intern::dp1(y);
560 data.phi[ 0].ref_hess[1][1] = Intern::p1(x) * Intern::ddp1(y);
561 d0xx = Intern::ddq1(x) * Intern::p1(y);
562 d0xy = Intern::dq1(x) * Intern::dp1(y);
563 d0yy = Intern::q1(x) * Intern::ddp1(y);
564 d1xx = Intern::ddp1(x) * Intern::q1(y);
565 d1xy = Intern::dp1(x) * Intern::dq1(y);
566 d1yy = Intern::p1(x) * Intern::ddq1(y);
567 data.phi[ 1].ref_hess[0][0] = _trans_dx(0, d0xx, d1xx);
568 data.phi[ 1].ref_hess[0][1] =
569 data.phi[ 1].ref_hess[1][0] = _trans_dx(0, d0xy, d1xy);
570 data.phi[ 1].ref_hess[1][1] = _trans_dx(0, d0yy, d1yy);
571 data.phi[ 2].ref_hess[0][0] = _trans_dy(0, d0xx, d1xx);
572 data.phi[ 2].ref_hess[0][1] =
573 data.phi[ 2].ref_hess[1][0] = _trans_dy(0, d0xy, d1xy);
574 data.phi[ 2].ref_hess[1][1] = _trans_dy(0, d0yy, d1yy);
577 data.phi[ 3].ref_hess[0][0] = Intern::ddp2(x) * Intern::p1(y);
578 data.phi[ 3].ref_hess[0][1] =
579 data.phi[ 3].ref_hess[1][0] = Intern::dp2(x) * Intern::dp1(y);
580 data.phi[ 3].ref_hess[1][1] = Intern::p2(x) * Intern::ddp1(y);
581 d0xx = Intern::ddq2(x) * Intern::p1(y);
582 d0xy = Intern::dq2(x) * Intern::dp1(y);
583 d0yy = Intern::q2(x) * Intern::ddp1(y);
584 d1xx = Intern::ddp2(x) * Intern::q1(y);
585 d1xy = Intern::dp2(x) * Intern::dq1(y);
586 d1yy = Intern::p2(x) * Intern::ddq1(y);
587 data.phi[ 4].ref_hess[0][0] = _trans_dx(1, d0xx, d1xx);
588 data.phi[ 4].ref_hess[0][1] =
589 data.phi[ 4].ref_hess[1][0] = _trans_dx(1, d0xy, d1xy);
590 data.phi[ 4].ref_hess[1][1] = _trans_dx(1, d0yy, d1yy);
591 data.phi[ 5].ref_hess[0][0] = _trans_dy(1, d0xx, d1xx);
592 data.phi[ 5].ref_hess[0][1] =
593 data.phi[ 5].ref_hess[1][0] = _trans_dy(1, d0xy, d1xy);
594 data.phi[ 5].ref_hess[1][1] = _trans_dy(1, d0yy, d1yy);
597 data.phi[ 6].ref_hess[0][0] = Intern::ddp1(x) * Intern::p2(y);
598 data.phi[ 6].ref_hess[0][1] =
599 data.phi[ 6].ref_hess[1][0] = Intern::dp1(x) * Intern::dp2(y);
600 data.phi[ 6].ref_hess[1][1] = Intern::p1(x) * Intern::ddp2(y);
601 d0xx = Intern::ddq1(x) * Intern::p2(y);
602 d0xy = Intern::dq1(x) * Intern::dp2(y);
603 d0yy = Intern::q1(x) * Intern::ddp2(y);
604 d1xx = Intern::ddp1(x) * Intern::q2(y);
605 d1xy = Intern::dp1(x) * Intern::dq2(y);
606 d1yy = Intern::p1(x) * Intern::ddq2(y);
607 data.phi[ 7].ref_hess[0][0] = _trans_dx(2, d0xx, d1xx);
608 data.phi[ 7].ref_hess[0][1] =
609 data.phi[ 7].ref_hess[1][0] = _trans_dx(2, d0xy, d1xy);
610 data.phi[ 7].ref_hess[1][1] = _trans_dx(2, d0yy, d1yy);
611 data.phi[ 8].ref_hess[0][0] = _trans_dy(2, d0xx, d1xx);
612 data.phi[ 8].ref_hess[0][1] =
613 data.phi[ 8].ref_hess[1][0] = _trans_dy(2, d0xy, d1xy);
614 data.phi[ 8].ref_hess[1][1] = _trans_dy(2, d0yy, d1yy);
617 data.phi[ 9].ref_hess[0][0] = Intern::ddp2(x) * Intern::p2(y);
618 data.phi[ 9].ref_hess[0][1] =
619 data.phi[ 9].ref_hess[1][0] = Intern::dp2(x) * Intern::dp2(y);
620 data.phi[ 9].ref_hess[1][1] = Intern::p2(x) * Intern::ddp2(y);
621 d0xx = Intern::ddq2(x) * Intern::p2(y);
622 d0xy = Intern::dq2(x) * Intern::dp2(y);
623 d0yy = Intern::q2(x) * Intern::ddp2(y);
624 d1xx = Intern::ddp2(x) * Intern::q2(y);
625 d1xy = Intern::dp2(x) * Intern::dq2(y);
626 d1yy = Intern::p2(x) * Intern::ddq2(y);
627 data.phi[10].ref_hess[0][0] = _trans_dx(3, d0xx, d1xx);
628 data.phi[10].ref_hess[0][1] =
629 data.phi[10].ref_hess[1][0] = _trans_dx(3, d0xy, d1xy);
630 data.phi[10].ref_hess[1][1] = _trans_dx(3, d0yy, d1yy);
631 data.phi[11].ref_hess[0][0] = _trans_dy(3, d0xx, d1xx);
632 data.phi[11].ref_hess[0][1] =
633 data.phi[11].ref_hess[1][0] = _trans_dy(3, d0xy, d1xy);
634 data.phi[11].ref_hess[1][1] = _trans_dy(3, d0yy, d1yy);
637 data.phi[12].ref_hess[0][0] = Intern::ddq1(x) * Intern::q1(y);
638 data.phi[12].ref_hess[0][1] =
639 data.phi[12].ref_hess[1][0] = Intern::dq1(x) * Intern::dq1(y);
640 data.phi[12].ref_hess[1][1] = Intern::q1(x) * Intern::ddq1(y);
641 data.phi[13].ref_hess[0][0] = Intern::ddq2(x) * Intern::q1(y);
642 data.phi[13].ref_hess[0][1] =
643 data.phi[13].ref_hess[1][0] = Intern::dq2(x) * Intern::dq1(y);
644 data.phi[13].ref_hess[1][1] = Intern::q2(x) * Intern::ddq1(y);
645 data.phi[14].ref_hess[0][0] = Intern::ddq1(x) * Intern::q2(y);
646 data.phi[14].ref_hess[0][1] =
647 data.phi[14].ref_hess[1][0] = Intern::dq1(x) * Intern::dq2(y);
648 data.phi[14].ref_hess[1][1] = Intern::q1(x) * Intern::ddq2(y);
649 data.phi[15].ref_hess[0][0] = Intern::ddq2(x) * Intern::q2(y);
650 data.phi[15].ref_hess[0][1] =
651 data.phi[15].ref_hess[1][0] = Intern::dq2(x) * Intern::dq2(y);
652 data.phi[15].ref_hess[1][1] = Intern::q2(x) * Intern::ddq2(y);
663 typename TrafoEvaluator_,
664 typename SpaceEvalTraits_>
665 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Simplex<2> > :
696 typedef typename SpaceEvalTraits::DataType
DataType;
713 return _coeff_fod(0,0) * rx + _coeff_fod(0,1) * ry;
727 return _coeff_fod(1,0) * rx + _coeff_fod(1,1) * ry;
766 CoeffEvalData coeff_data;
772 _coeff_fod = coeff_data.jac_mat;
784 template<
typename EvalData_>
789 const DataType x(point[0]), y(point[1]);
800 data.phi[ 0].ref_value = T13*x*y*(x + y - T1) + y*y*(T2*y - T3) + x*x*(T2*x - T3) + T1;
801 d0 = x*(T1 + x*(x - T2) + y*(T3*(x - T1) + T2*y));
802 d1 = y*(T1 + y*(y - T2) + x*(T3*(y - T1) + T2*x));
803 data.phi[ 1].ref_value = _trans_dx(d0, d1);
804 data.phi[ 2].ref_value = _trans_dy(d0, d1);
807 data.phi[ 3].ref_value = x*(x*(T3 - T2*x) + T7*y*(x + y - T1));
808 d0 = x*(x*(x - T1) - T2*y*(x + y - T1));
809 d1 = x*y*(T2*x + y - T1);
810 data.phi[ 4].ref_value = _trans_dx(d0, d1);
811 data.phi[ 5].ref_value = _trans_dy(d0, d1);
814 data.phi[ 6].ref_value = y*(y*(T3 - T2*y) + T7*x*(y + x - T1));
815 d0 = y*x*(T2*y + x - T1);
816 d1 = y*(y*(y - T1) - T2*x*(y + x - T1));
817 data.phi[ 7].ref_value = _trans_dx(d0, d1);
818 data.phi[ 8].ref_value = _trans_dy(d0, d1);
821 data.phi[ 9].ref_value = T27*x*y*(T1 - x - y);
833 template<
typename EvalData_>
838 const DataType x(point[0]), y(point[1]);
851 data.phi[ 0].ref_grad[0] = T6*x*(x - T1) + T13*y*(T2*x + y - T1);
852 data.phi[ 0].ref_grad[1] = T6*y*(y - T1) + T13*x*(T2*y + x - T1);
853 d0x = x*(T3*x - T4) + y*(T6*x + T2*y - T3) + T1;
854 d0y = x*(T4*y + T3*(x - T1));
855 d1x = y*(T4*x + T3*(y - T1));
856 d1y = y*(T3*y - T4) + x*(T6*y + T2*x - T3) + T1;
857 data.phi[ 1].ref_grad[0] = _trans_dx(d0x, d1x);
858 data.phi[ 1].ref_grad[1] = _trans_dx(d0y, d1y);
859 data.phi[ 2].ref_grad[0] = _trans_dy(d0x, d1x);
860 data.phi[ 2].ref_grad[1] = _trans_dy(d0y, d1y);
863 data.phi[ 3].ref_grad[0] = T6*x*(T1 - x) + T7*y*(T2*x + y - T1);
864 data.phi[ 3].ref_grad[1] = T7*x*(T2*y + x - T1);
865 d0x = x*(T3*x - T2) + T2*y*(T1 - y - T2*x);
866 d0y = T2*x*(T1 - x - T2*y);
867 d1x = y*(T4*x + y - T1);
868 d1y = x*(T2*(y + x) - T1);
869 data.phi[ 4].ref_grad[0] = _trans_dx(d0x, d1x);
870 data.phi[ 4].ref_grad[1] = _trans_dx(d0y, d1y);
871 data.phi[ 5].ref_grad[0] = _trans_dy(d0x, d1x);
872 data.phi[ 5].ref_grad[1] = _trans_dy(d0y, d1y);
875 data.phi[ 6].ref_grad[0] = T7*y*(T2*x + y - T1);
876 data.phi[ 6].ref_grad[1] = T6*y*(T1 - y) + T7*x*(T2*y + x - T1);
877 d0x = y*(T2*(x + y) - T1);
878 d0y = x*(T4*y + x - T1);
879 d1x = T2*y*(T1 - y - T2*x);
880 d1y = y*(T3*y - T2) + T2*x*(T1 - x - T2*y);
881 data.phi[ 7].ref_grad[0] = _trans_dx(d0x, d1x);
882 data.phi[ 7].ref_grad[1] = _trans_dx(d0y, d1y);
883 data.phi[ 8].ref_grad[0] = _trans_dy(d0x, d1x);
884 data.phi[ 8].ref_grad[1] = _trans_dy(d0y, d1y);
887 data.phi[ 9].ref_grad[0] = T27*y*(T1 - T2*x - y);
888 data.phi[ 9].ref_grad[1] = T27*x*(T1 - T2*y - x);
900 template<
typename EvalData_>
905 const DataType x(point[0]), y(point[1]);
906 DataType d0xx, d0xy, d0yy, d1xx, d1xy, d1yy;
921 data.phi[ 0].ref_hess[0][0] = T26*y + T6*(T2*x - T1);
922 data.phi[ 0].ref_hess[0][1] =
923 data.phi[ 0].ref_hess[1][0] = T13*(T2*(x + y) - T1);
924 data.phi[ 0].ref_hess[1][1] = T26*x + T6*(T2*y - T1);
925 d0xx = T6*(x + y) - T4;
926 d0xy = T4*y + T3*(T2*x - T1);
929 d1xy = T4*x + T3*(T2*y - T1);
930 d1yy = T6*(x + y) - T4;
931 data.phi[ 1].ref_hess[0][0] = _trans_dx(d0xx, d1xx);
932 data.phi[ 1].ref_hess[0][1] =
933 data.phi[ 1].ref_hess[1][0] = _trans_dx(d0xy, d1xy);
934 data.phi[ 1].ref_hess[1][1] = _trans_dx(d0yy, d1yy);
935 data.phi[ 2].ref_hess[0][0] = _trans_dy(d0xx, d1xx);
936 data.phi[ 2].ref_hess[0][1] =
937 data.phi[ 2].ref_hess[1][0] = _trans_dy(d0xy, d1xy);
938 data.phi[ 2].ref_hess[1][1] = _trans_dy(d0yy, d1yy);
941 data.phi[ 3].ref_hess[0][0] = T14*y + T6*(T1 - T2*x);
942 data.phi[ 3].ref_hess[0][1] =
943 data.phi[ 3].ref_hess[1][0] = T7*(T2*(x + y) - T1);
944 data.phi[ 3].ref_hess[1][1] = T14*x;
945 d0xx = T6*x - T2*(T2*y + T1);
946 d0xy = T2 - T4*(x + y);
949 d1xy = T2*(T2*x + y) - T1;
951 data.phi[ 4].ref_hess[0][0] = _trans_dx(d0xx, d1xx);
952 data.phi[ 4].ref_hess[0][1] =
953 data.phi[ 4].ref_hess[1][0] = _trans_dx(d0xy, d1xy);
954 data.phi[ 4].ref_hess[1][1] = _trans_dx(d0yy, d1yy);
955 data.phi[ 5].ref_hess[0][0] = _trans_dy(d0xx, d1xx);
956 data.phi[ 5].ref_hess[0][1] =
957 data.phi[ 5].ref_hess[1][0] = _trans_dy(d0xy, d1xy);
958 data.phi[ 5].ref_hess[1][1] = _trans_dy(d0yy, d1yy);
961 data.phi[ 6].ref_hess[0][0] = T14*y;
962 data.phi[ 6].ref_hess[0][1] =
963 data.phi[ 6].ref_hess[1][0] = T7*(T2*(x + y) - T1);
964 data.phi[ 6].ref_hess[1][1] = T14*x + T6*(T1 - T2*y);
966 d0xy = T2*(T2*y + x) - T1;
969 d1xy = T2 - T4*(y + x);
970 d1yy = T6*y - T2*(T2*x + T1);
971 data.phi[ 7].ref_hess[0][0] = _trans_dx(d0xx, d1xx);
972 data.phi[ 7].ref_hess[0][1] =
973 data.phi[ 7].ref_hess[1][0] = _trans_dx(d0xy, d1xy);
974 data.phi[ 7].ref_hess[1][1] = _trans_dx(d0yy, d1yy);
975 data.phi[ 8].ref_hess[0][0] = _trans_dy(d0xx, d1xx);
976 data.phi[ 8].ref_hess[0][1] =
977 data.phi[ 8].ref_hess[1][0] = _trans_dy(d0xy, d1xy);
978 data.phi[ 8].ref_hess[1][1] = _trans_dy(d0yy, d1yy);
981 data.phi[ 9].ref_hess[0][0] = -T54*y;
982 data.phi[ 9].ref_hess[0][1] =
983 data.phi[ 9].ref_hess[1][0] = T27*(T1 - T2*(x + y));
984 data.phi[ 9].ref_hess[1][1] = -T54*x;
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
SpaceEvalTraits::DataType DataType
data type
TrafoEvaluator_ TrafoEvaluator
trafo evaluator type
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
int get_num_local_dofs() const
Returns the number of local DOFs.
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
Tiny::Matrix< DataType, 2, 2 > _coeff_fod
first-order derivative transform coefficients
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
void prepare(const TrafoEvaluator &trafo_eval)
Prepares the evaluator for a given cell.
DataType _trans_dy(DataType rx, DataType ry) const
Transforms the Y-derivative basis function.
DataType _trans_dx(DataType rx, DataType ry) const
Transforms the X-derivative basis function.
Space_ SpaceType
space type
Evaluator(const SpaceType &space)
Constructor.
EvalPolicy::DomainPointType DomainPointType
domain point type
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
TrafoEvaluator_ TrafoEvaluator
trafo evaluator type
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
void prepare(const TrafoEvaluator &trafo_eval)
Prepares the evaluator for a given cell.
EvalPolicy::DomainPointType DomainPointType
domain point type
int get_num_local_dofs() const
Returns the number of local DOFs.
DataType _trans_dx(Index i, DataType rx, DataType ry) const
Transforms the X-derivative basis function.
DataType _trans_dy(Index i, DataType rx, DataType ry) const
Transforms the Y-derivative basis function.
Evaluator(const SpaceType &space)
Constructor.
Space_ SpaceType
space type
SpaceEvalTraits::DataType DataType
data type
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
void prepare(const TrafoEvaluator &trafo_eval)
Prepares the evaluator for a given cell.
TrafoEvaluator_ TrafoEvaluator
trafo evaluator type
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
void eval_ref_hessians(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function hessians on the reference cell.
int get_num_local_dofs() const
Returns the number of local DOFs.
Evaluator(const SpaceType &space)
Constructor.
SpaceEvalTraits::DataType DataType
data type
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
EvalPolicy::DomainPointType DomainPointType
domain point type
DataType _coeff
first-order derivative transform coefficient
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
Space_ SpaceType
space type
Hermite-3 Element Evaluator class template declaration.
Finite-Element Parametric Evaluator CRTP base-class template.
Tiny Matrix class template.
static constexpr SpaceTags ref_caps
Hermite-3 Element Evaluator reference capabilities.
SpaceTags
Space configuration tags enum.
@ ref_value
specifies whether the space should supply reference basis function values
@ ref_hess
specifies whether the space should supply reference basis function hessians
@ ref_grad
specifies whether the space should supply reference basis function gradients
std::uint64_t Index
Index data type.
@ dom_point
specifies whether the trafo should supply domain point coordinates