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