9#include <kernel/shape.hpp> 
   10#include <kernel/meshopt/base.hpp> 
   11#include <kernel/meshopt/rumpf_functional.hpp> 
   25    template<
typename DataType_>
 
   26    class RumpfFunctionalUnrolled<DataType_,
 
   27    Trafo::Standard::Mapping<Geometry::ConformalMesh<Shape::Hypercube<2>, 2, DataType_>>> :
 
   28      public RumpfFunctionalBase<DataType_>
 
   32          typedef RumpfFunctionalBase<DataType_> BaseClass;
 
   35          typedef DataType_ DataType;
 
   37          typedef Shape::Hypercube<2> ShapeType;
 
   39          typedef Trafo::Standard::Mapping<Geometry::ConformalMesh<ShapeType, 2, DataType_>> TrafoType;
 
   41          static constexpr int world_dim = TrafoType::world_dim;
 
   43          static constexpr int shape_dim = ShapeType::dimension;
 
   45          typedef typename Intern::TrafoFE<TrafoType>::Space TrafoSpace;
 
   48          typedef Tiny::Matrix<DataType_, Shape::FaceTraits<ShapeType,0>::count, world_dim> Tx;
 
   50          typedef Tiny::Vector<DataType_, Shape::FaceTraits<ShapeType,0>::count*world_dim> Tgradh;
 
   53          typedef Tiny::Matrix<DataType_, shape_dim, world_dim> TgradR;
 
   56          typedef typename TrafoType::template Evaluator<ShapeType, DataType>::Type TrafoEvaluator;
 
   58          typedef typename TrafoSpace::template Evaluator<TrafoEvaluator>::Type SpaceEvaluator;
 
   62          const int _exponent_det;
 
   64          const bool _compute_frobenius;
 
   66          const bool _compute_cof;
 
   68          const bool _compute_det;
 
   74          explicit RumpfFunctionalUnrolled(
 
   75            const DataType fac_frobenius_,
 
   76            const DataType fac_det_,
 
   77            const DataType fac_cof_,
 
   78            const DataType fac_reg_,
 
   79            const int exponent_det_) :
 
   80            BaseClass( fac_frobenius_,
 
   82            fac_det_*(Math::
sqrt( Math::
sqr(fac_reg_) + DataType(1) )*Math::
pow( DataType(1) + Math::
sqrt(Math::
sqr(fac_reg_) + DataType(1)), DataType(exponent_det_))),
 
   85            _exponent_det(exponent_det_),
 
   86            _compute_frobenius( (fac_frobenius_ > DataType(0)) ),
 
   87            _compute_cof( false ),
 
   88            _compute_det( (fac_det_ > 0) )
 
   90              XASSERTM(exponent_det_ == 1 || exponent_det_ == 2,
"exponent_det must be 1 or 2!");
 
   91              XASSERTM(fac_cof_ == DataType(0), 
"In 2d, the cofactor term is redundant, so set fac_cof == 0.");
 
  101            return "RumpfFunctionalUnrolled<"+ShapeType::name()+
">";
 
  109            const Index pad_width(30);
 
  110            return name() + 
":" + BaseClass::info() + String(
"\nexponent_det").pad_back(pad_width, 
'.')
 
  111              + String(
": ") + 
stringify(_exponent_det);
 
  117          void eval_fval_grad(DataType& fval, Tx& grad, 
const TgradR& DOXY(mat_tensor), 
const TrafoEvaluator& DOXY(trafo_eval), 
const SpaceEvaluator& DOXY(space_eval), 
const Tx& x, 
const DataType& h)
 
  120            grad.format(DataType(0));
 
  122            DataType fval_frobenius(0);
 
  123            DataType fval_det(0);
 
  124            DataType fval_rec_det(0);
 
  126            if(_compute_frobenius)
 
  128              fval_frobenius = this->_fac_frobenius*compute_frobenius_part(x,h);
 
  129              add_grad_frobenius_part(grad, x, h);
 
  134              if(_exponent_det == 1)
 
  136                fval_det = this->_fac_det*compute_det_1_part(x,h);
 
  137                fval_rec_det = this->_fac_rec_det*compute_rec_det_1_part(x,h);
 
  138                add_grad_det_1_part(grad, x, h);
 
  139                add_grad_rec_det_1_part(grad, x, h);
 
  143                fval_det = this->_fac_det*compute_det_2_part(x,h);
 
  144                fval_rec_det = this->_fac_rec_det*compute_rec_det_2_part(x,h);
 
  145                add_grad_det_2_part(grad, x, h);
 
  146                add_grad_rec_det_2_part(grad, x, h);
 
  150            fval = fval_frobenius + fval_det + fval_rec_det;
 
  154          void eval_fval_cellwise(DataType& fval, 
const TgradR& DOXY(mat_tensor), 
const TrafoEvaluator& DOXY(trafo_eval), 
const SpaceEvaluator& DOXY(space_eval), 
const Tx& x, 
const DataType& h, DataType& fval_frobenius, DataType& fval_cof, DataType& fval_det)
 
  157            fval_frobenius = DataType(0);
 
  158            fval_cof = DataType(0);
 
  159            fval_det = DataType(0);
 
  161            if(_compute_frobenius)
 
  163              fval_frobenius = this->_fac_frobenius*compute_frobenius_part(x,h);
 
  168              if(_exponent_det == 1)
 
  170                fval_det = this->_fac_det*compute_det_1_part(x,h);
 
  171                fval_det += this->_fac_rec_det*compute_rec_det_1_part(x,h);
 
  175                fval_det = this->_fac_det*compute_det_2_part(x,h);
 
  176                fval_det += this->_fac_rec_det*compute_rec_det_2_part(x,h);
 
  180            fval = fval_frobenius + fval_det;
 
  187          void NOINLINE add_grad_h_part(Tx& grad, 
const TgradR& DOXY(mat_tensor), 
const TrafoEvaluator& DOXY(trafo_eval), 
const SpaceEvaluator& DOXY(space_eval), 
const Tx& x, 
const DataType& h, 
const Tgradh& grad_h)
 
  190            DataType frobenius_der_h(0);
 
  191            DataType det_der_h(0);
 
  192            DataType rec_det_der_h(0);
 
  194            if(_compute_frobenius)
 
  196              frobenius_der_h = this->_fac_frobenius*compute_frobenius_der_h_part(x,h);
 
  201              if(_exponent_det == 1)
 
  203                det_der_h = this->_fac_det * compute_det_1_der_h_part(x,h);
 
  204                rec_det_der_h = this->_fac_rec_det * compute_rec_det_1_der_h_part(x,h);
 
  208                det_der_h = this->_fac_det * compute_det_2_der_h_part(x,h);
 
  209                rec_det_der_h = this->_fac_rec_det * compute_rec_det_2_der_h_part(x,h);
 
  214            DataType der_h(frobenius_der_h + det_der_h + rec_det_der_h);
 
  216            for(
int i(0); i < Tx::m; ++i)
 
  218              for(
int d(0); d < Tx::n; ++d)
 
  220                grad(i,d) += der_h*grad_h(i*Tx::n + d);
 
  229          DataType NOINLINE compute_frobenius_part(
const Tx& x, 
const DataType& h)
 
  231            DataType fval_frobenius_part(0);
 
  232            fval_frobenius_part = (DataType(2880)*h*h*h*h-DataType(480)*h*h*Math::sqr(x(0,0))+DataType(240)*h*h*x(0,0)*x(1,0)+DataType(240)*h*h*x(0,0)*x(2,0)+DataType(480)*h*h*x(0,0)*x(3,0)-DataType(480)*h*h*Math::sqr(x(0,1))+DataType(240)*h*h*x(0,1)*x(1,1)+DataType(240)*h*h*x(0,1)*x(2,1)+DataType(480)*h*h*x(0,1)*x(3,1)-DataType(480)*h*h*Math::sqr(x(1,0))+DataType(480)*h*h*x(1,0)*x(2,0)+DataType(240)*h*h*x(1,0)*x(3,0)-DataType(480)*h*h*Math::sqr(x(1,1))+DataType(480)*h*h*x(1,1)*x(2,1)+DataType(240)*h*h*x(1,1)*x(3,1)-DataType(480)*h*h*Math::sqr(x(2,0))+DataType(240)*h*h*x(2,0)*x(3,0)-DataType(480)*h*h*Math::sqr(x(2,1))+DataType(240)*h*h*x(2,1)*x(3,1)-DataType(480)*h*h*Math::sqr(x(3,0))-DataType(480)*h*h*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(0,0),DataType(4))-DataType(37)*Math::pow(x(0,0),DataType(3))*x(1,0)-DataType(37)*Math::pow(x(0,0),DataType(3))*x(2,0)-DataType(38)*Math::pow(x(0,0),DataType(3))*x(3,0)+DataType(56)*Math::sqr(x(0,0))*Math::sqr(x(0,1))-DataType(37)*Math::sqr(x(0,0))*x(0,1)*x(1,1)-DataType(37)*Math::sqr(x(0,0))*x(0,1)*x(2,1)-DataType(38)*Math::sqr(x(0,0))*x(0,1)*x(3,1)+DataType(63)*Math::sqr(x(0,0))*Math::sqr(x(1,0))-DataType(24)*Math::sqr(x(0,0))*x(1,0)*x(2,0)+DataType(9)*Math::sqr(x(0,0))*x(1,0)*x(3,0)+DataType(41)*Math::sqr(x(0,0))*Math::sqr(x(1,1))-DataType(38)*Math::sqr(x(0,0))*x(1,1)*x(2,1)-DataType(7)*Math::sqr(x(0,0))*x(1,1)*x(3,1)+DataType(63)*Math::sqr(x(0,0))*Math::sqr(x(2,0))+DataType(9)*Math::sqr(x(0,0))*x(2,0)*x(3,0)+DataType(41)*Math::sqr(x(0,0))*Math::sqr(x(2,1))-DataType(7)*Math::sqr(x(0,0))*x(2,1)*x(3,1)+DataType(48)*Math::sqr(x(0,0))*Math::sqr(x(3,0))+DataType(26)*Math::sqr(x(0,0))*Math::sqr(x(3,1))-DataType(37)*x(0,0)*Math::sqr(x(0,1))*x(1,0)-DataType(37)*x(0,0)*Math::sqr(x(0,1))*x(2,0)-DataType(38)*x(0,0)*Math::sqr(x(0,1))*x(3,0)+DataType(44)*x(0,0)*x(0,1)*x(1,0)*x(1,1)+DataType(14)*x(0,0)*x(0,1)*x(1,0)*x(2,1)+DataType(16)*x(0,0)*x(0,1)*x(1,0)*x(3,1)+DataType(14)*x(0,0)*x(0,1)*x(1,1)*x(2,0)+DataType(16)*x(0,0)*x(0,1)*x(1,1)*x(3,0)+DataType(44)*x(0,0)*x(0,1)*x(2,0)*x(2,1)+DataType(16)*x(0,0)*x(0,1)*x(2,0)*x(3,1)+DataType(16)*x(0,0)*x(0,1)*x(2,1)*x(3,0)+DataType(44)*x(0,0)*x(0,1)*x(3,0)*x(3,1)-DataType(37)*x(0,0)*Math::pow(x(1,0),DataType(3))+DataType(9)*x(0,0)*Math::sqr(x(1,0))*x(2,0)-DataType(24)*x(0,0)*Math::sqr(x(1,0))*x(3,0)-DataType(37)*x(0,0)*x(1,0)*Math::sqr(x(1,1))+DataType(16)*x(0,0)*x(1,0)*x(1,1)*x(2,1)+DataType(14)*x(0,0)*x(1,0)*x(1,1)*x(3,1)+DataType(9)*x(0,0)*x(1,0)*Math::sqr(x(2,0))+DataType(12)*x(0,0)*x(1,0)*x(2,0)*x(3,0)-DataType(7)*x(0,0)*x(1,0)*Math::sqr(x(2,1))-DataType(16)*x(0,0)*x(1,0)*x(2,1)*x(3,1)+DataType(9)*x(0,0)*x(1,0)*Math::sqr(x(3,0))-DataType(7)*x(0,0)*x(1,0)*Math::sqr(x(3,1))-DataType(7)*x(0,0)*Math::sqr(x(1,1))*x(2,0)-DataType(38)*x(0,0)*Math::sqr(x(1,1))*x(3,0)+DataType(16)*x(0,0)*x(1,1)*x(2,0)*x(2,1)-DataType(16)*x(0,0)*x(1,1)*x(2,0)*x(3,1)+DataType(44)*x(0,0)*x(1,1)*x(2,1)*x(3,0)+DataType(16)*x(0,0)*x(1,1)*x(3,0)*x(3,1)-DataType(37)*x(0,0)*Math::pow(x(2,0),DataType(3))-DataType(24)*x(0,0)*Math::sqr(x(2,0))*x(3,0)-DataType(37)*x(0,0)*x(2,0)*Math::sqr(x(2,1))+DataType(14)*x(0,0)*x(2,0)*x(2,1)*x(3,1)+DataType(9)*x(0,0)*x(2,0)*Math::sqr(x(3,0))-DataType(7)*x(0,0)*x(2,0)*Math::sqr(x(3,1))-DataType(38)*x(0,0)*Math::sqr(x(2,1))*x(3,0)+DataType(16)*x(0,0)*x(2,1)*x(3,0)*x(3,1)-DataType(38)*x(0,0)*Math::pow(x(3,0),DataType(3))-DataType(38)*x(0,0)*x(3,0)*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(0,1),DataType(4))-DataType(37)*Math::pow(x(0,1),DataType(3))*x(1,1)-DataType(37)*Math::pow(x(0,1),DataType(3))*x(2,1)-DataType(38)*Math::pow(x(0,1),DataType(3))*x(3,1)+DataType(41)*Math::sqr(x(0,1))*Math::sqr(x(1,0))-DataType(38)*Math::sqr(x(0,1))*x(1,0)*x(2,0)-DataType(7)*Math::sqr(x(0,1))*x(1,0)*x(3,0)+DataType(63)*Math::sqr(x(0,1))*Math::sqr(x(1,1))-DataType(24)*Math::sqr(x(0,1))*x(1,1)*x(2,1)+DataType(9)*Math::sqr(x(0,1))*x(1,1)*x(3,1)+DataType(41)*Math::sqr(x(0,1))*Math::sqr(x(2,0))-DataType(7)*Math::sqr(x(0,1))*x(2,0)*x(3,0)+DataType(63)*Math::sqr(x(0,1))*Math::sqr(x(2,1))+DataType(9)*Math::sqr(x(0,1))*x(2,1)*x(3,1)+DataType(26)*Math::sqr(x(0,1))*Math::sqr(x(3,0))+DataType(48)*Math::sqr(x(0,1))*Math::sqr(x(3,1))-DataType(37)*x(0,1)*Math::sqr(x(1,0))*x(1,1)-DataType(7)*x(0,1)*Math::sqr(x(1,0))*x(2,1)-DataType(38)*x(0,1)*Math::sqr(x(1,0))*x(3,1)+DataType(16)*x(0,1)*x(1,0)*x(1,1)*x(2,0)+DataType(14)*x(0,1)*x(1,0)*x(1,1)*x(3,0)+DataType(16)*x(0,1)*x(1,0)*x(2,0)*x(2,1)+DataType(44)*x(0,1)*x(1,0)*x(2,0)*x(3,1)-DataType(16)*x(0,1)*x(1,0)*x(2,1)*x(3,0)+DataType(16)*x(0,1)*x(1,0)*x(3,0)*x(3,1)-DataType(37)*x(0,1)*Math::pow(x(1,1),DataType(3))+DataType(9)*x(0,1)*Math::sqr(x(1,1))*x(2,1)-DataType(24)*x(0,1)*Math::sqr(x(1,1))*x(3,1)-DataType(7)*x(0,1)*x(1,1)*Math::sqr(x(2,0))-DataType(16)*x(0,1)*x(1,1)*x(2,0)*x(3,0)+DataType(9)*x(0,1)*x(1,1)*Math::sqr(x(2,1))+DataType(12)*x(0,1)*x(1,1)*x(2,1)*x(3,1)-DataType(7)*x(0,1)*x(1,1)*Math::sqr(x(3,0))+DataType(9)*x(0,1)*x(1,1)*Math::sqr(x(3,1))-DataType(37)*x(0,1)*Math::sqr(x(2,0))*x(2,1)-DataType(38)*x(0,1)*Math::sqr(x(2,0))*x(3,1)+DataType(14)*x(0,1)*x(2,0)*x(2,1)*x(3,0)+DataType(16)*x(0,1)*x(2,0)*x(3,0)*x(3,1)-DataType(37)*x(0,1)*Math::pow(x(2,1),DataType(3))-DataType(24)*x(0,1)*Math::sqr(x(2,1))*x(3,1)-DataType(7)*x(0,1)*x(2,1)*Math::sqr(x(3,0))+DataType(9)*x(0,1)*x(2,1)*Math::sqr(x(3,1))-DataType(38)*x(0,1)*Math::sqr(x(3,0))*x(3,1)-DataType(38)*x(0,1)*Math::pow(x(3,1),DataType(3))+DataType(28)*Math::pow(x(1,0),DataType(4))-DataType(38)*Math::pow(x(1,0),DataType(3))*x(2,0)-DataType(37)*Math::pow(x(1,0),DataType(3))*x(3,0)+DataType(56)*Math::sqr(x(1,0))*Math::sqr(x(1,1))-DataType(38)*Math::sqr(x(1,0))*x(1,1)*x(2,1)-DataType(37)*Math::sqr(x(1,0))*x(1,1)*x(3,1)+DataType(48)*Math::sqr(x(1,0))*Math::sqr(x(2,0))+DataType(9)*Math::sqr(x(1,0))*x(2,0)*x(3,0)+DataType(26)*Math::sqr(x(1,0))*Math::sqr(x(2,1))-DataType(7)*Math::sqr(x(1,0))*x(2,1)*x(3,1)+DataType(63)*Math::sqr(x(1,0))*Math::sqr(x(3,0))+DataType(41)*Math::sqr(x(1,0))*Math::sqr(x(3,1))-DataType(38)*x(1,0)*Math::sqr(x(1,1))*x(2,0)-DataType(37)*x(1,0)*Math::sqr(x(1,1))*x(3,0)+DataType(44)*x(1,0)*x(1,1)*x(2,0)*x(2,1)+DataType(16)*x(1,0)*x(1,1)*x(2,0)*x(3,1)+DataType(16)*x(1,0)*x(1,1)*x(2,1)*x(3,0)+DataType(44)*x(1,0)*x(1,1)*x(3,0)*x(3,1)-DataType(38)*x(1,0)*Math::pow(x(2,0),DataType(3))+DataType(9)*x(1,0)*Math::sqr(x(2,0))*x(3,0)-DataType(38)*x(1,0)*x(2,0)*Math::sqr(x(2,1))+DataType(16)*x(1,0)*x(2,0)*x(2,1)*x(3,1)-DataType(24)*x(1,0)*x(2,0)*Math::sqr(x(3,0))-DataType(38)*x(1,0)*x(2,0)*Math::sqr(x(3,1))-DataType(7)*x(1,0)*Math::sqr(x(2,1))*x(3,0)+DataType(14)*x(1,0)*x(2,1)*x(3,0)*x(3,1)-DataType(37)*x(1,0)*Math::pow(x(3,0),DataType(3))-DataType(37)*x(1,0)*x(3,0)*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(1,1),DataType(4))-DataType(38)*Math::pow(x(1,1),DataType(3))*x(2,1)-DataType(37)*Math::pow(x(1,1),DataType(3))*x(3,1)+DataType(26)*Math::sqr(x(1,1))*Math::sqr(x(2,0))-DataType(7)*Math::sqr(x(1,1))*x(2,0)*x(3,0)+DataType(48)*Math::sqr(x(1,1))*Math::sqr(x(2,1))+DataType(9)*Math::sqr(x(1,1))*x(2,1)*x(3,1)+DataType(41)*Math::sqr(x(1,1))*Math::sqr(x(3,0))+DataType(63)*Math::sqr(x(1,1))*Math::sqr(x(3,1))-DataType(38)*x(1,1)*Math::sqr(x(2,0))*x(2,1)-DataType(7)*x(1,1)*Math::sqr(x(2,0))*x(3,1)+DataType(16)*x(1,1)*x(2,0)*x(2,1)*x(3,0)+DataType(14)*x(1,1)*x(2,0)*x(3,0)*x(3,1)-DataType(38)*x(1,1)*Math::pow(x(2,1),DataType(3))+DataType(9)*x(1,1)*Math::sqr(x(2,1))*x(3,1)-DataType(38)*x(1,1)*x(2,1)*Math::sqr(x(3,0))-DataType(24)*x(1,1)*x(2,1)*Math::sqr(x(3,1))-DataType(37)*x(1,1)*Math::sqr(x(3,0))*x(3,1)-DataType(37)*x(1,1)*Math::pow(x(3,1),DataType(3))+DataType(28)*Math::pow(x(2,0),DataType(4))-DataType(37)*Math::pow(x(2,0),DataType(3))*x(3,0)+DataType(56)*Math::sqr(x(2,0))*Math::sqr(x(2,1))-DataType(37)*Math::sqr(x(2,0))*x(2,1)*x(3,1)+DataType(63)*Math::sqr(x(2,0))*Math::sqr(x(3,0))+DataType(41)*Math::sqr(x(2,0))*Math::sqr(x(3,1))-DataType(37)*x(2,0)*Math::sqr(x(2,1))*x(3,0)+DataType(44)*x(2,0)*x(2,1)*x(3,0)*x(3,1)-DataType(37)*x(2,0)*Math::pow(x(3,0),DataType(3))-DataType(37)*x(2,0)*x(3,0)*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(2,1),DataType(4))-DataType(37)*Math::pow(x(2,1),DataType(3))*x(3,1)+DataType(41)*Math::sqr(x(2,1))*Math::sqr(x(3,0))+DataType(63)*Math::sqr(x(2,1))*Math::sqr(x(3,1))-DataType(37)*x(2,1)*Math::sqr(x(3,0))*x(3,1)-DataType(37)*x(2,1)*Math::pow(x(3,1),DataType(3))+DataType(28)*Math::pow(x(3,0),DataType(4))+DataType(56)*Math::sqr(x(3,0))*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(3,1),DataType(4)))/(h*h*h*h)/DataType(720);
 
  233            return fval_frobenius_part;
 
  240          DataType NOINLINE compute_det_1_part( 
const Tx& x, 
const DataType& h)
 
  242            DataType fval_det_1_part(0);
 
  243            fval_det_1_part = (x(0,0)*x(1,1)-x(0,0)*x(2,1)-x(0,1)*x(1,0)+x(0,1)*x(2,0)+x(1,0)*x(3,1)-x(1,1)*x(3,0)-x(2,0)*x(3,1)+x(2,1)*x(3,0))/Math::sqr(h)/DataType(8);
 
  244            return fval_det_1_part;
 
  249          DataType NOINLINE compute_det_2_part( 
const Tx& x, 
const DataType& h)
 
  251            DataType fval_det_2_part(0);
 
  252            fval_det_2_part = (DataType(2)*Math::sqr(x(0,0))*Math::sqr(x(1,1))-DataType(3)*Math::sqr(x(0,0))*x(1,1)*x(2,1)-Math::sqr(x(0,0))*x(1,1)*x(3,1)+DataType(2)*Math::sqr(x(0,0))*Math::sqr(x(2,1))-Math::sqr(x(0,0))*x(2,1)*x(3,1)+Math::sqr(x(0,0))*Math::sqr(x(3,1))-DataType(4)*x(0,0)*x(0,1)*x(1,0)*x(1,1)+DataType(3)*x(0,0)*x(0,1)*x(1,0)*x(2,1)+x(0,0)*x(0,1)*x(1,0)*x(3,1)+DataType(3)*x(0,0)*x(0,1)*x(1,1)*x(2,0)+x(0,0)*x(0,1)*x(1,1)*x(3,0)-DataType(4)*x(0,0)*x(0,1)*x(2,0)*x(2,1)+x(0,0)*x(0,1)*x(2,0)*x(3,1)+x(0,0)*x(0,1)*x(2,1)*x(3,0)-DataType(2)*x(0,0)*x(0,1)*x(3,0)*x(3,1)+x(0,0)*x(1,0)*x(1,1)*x(2,1)+DataType(3)*x(0,0)*x(1,0)*x(1,1)*x(3,1)-x(0,0)*x(1,0)*Math::sqr(x(2,1))-DataType(2)*x(0,0)*x(1,0)*x(2,1)*x(3,1)-x(0,0)*x(1,0)*Math::sqr(x(3,1))-x(0,0)*Math::sqr(x(1,1))*x(2,0)-DataType(3)*x(0,0)*Math::sqr(x(1,1))*x(3,0)+x(0,0)*x(1,1)*x(2,0)*x(2,1)-DataType(2)*x(0,0)*x(1,1)*x(2,0)*x(3,1)+DataType(4)*x(0,0)*x(1,1)*x(2,1)*x(3,0)+x(0,0)*x(1,1)*x(3,0)*x(3,1)+DataType(3)*x(0,0)*x(2,0)*x(2,1)*x(3,1)-x(0,0)*x(2,0)*Math::sqr(x(3,1))-DataType(3)*x(0,0)*Math::sqr(x(2,1))*x(3,0)+x(0,0)*x(2,1)*x(3,0)*x(3,1)+DataType(2)*Math::sqr(x(0,1))*Math::sqr(x(1,0))-DataType(3)*Math::sqr(x(0,1))*x(1,0)*x(2,0)-Math::sqr(x(0,1))*x(1,0)*x(3,0)+DataType(2)*Math::sqr(x(0,1))*Math::sqr(x(2,0))-Math::sqr(x(0,1))*x(2,0)*x(3,0)+Math::sqr(x(0,1))*Math::sqr(x(3,0))-x(0,1)*Math::sqr(x(1,0))*x(2,1)-DataType(3)*x(0,1)*Math::sqr(x(1,0))*x(3,1)+x(0,1)*x(1,0)*x(1,1)*x(2,0)+DataType(3)*x(0,1)*x(1,0)*x(1,1)*x(3,0)+x(0,1)*x(1,0)*x(2,0)*x(2,1)+DataType(4)*x(0,1)*x(1,0)*x(2,0)*x(3,1)-DataType(2)*x(0,1)*x(1,0)*x(2,1)*x(3,0)+x(0,1)*x(1,0)*x(3,0)*x(3,1)-x(0,1)*x(1,1)*Math::sqr(x(2,0))-DataType(2)*x(0,1)*x(1,1)*x(2,0)*x(3,0)-x(0,1)*x(1,1)*Math::sqr(x(3,0))-DataType(3)*x(0,1)*Math::sqr(x(2,0))*x(3,1)+DataType(3)*x(0,1)*x(2,0)*x(2,1)*x(3,0)+x(0,1)*x(2,0)*x(3,0)*x(3,1)-x(0,1)*x(2,1)*Math::sqr(x(3,0))+Math::sqr(x(1,0))*Math::sqr(x(2,1))-Math::sqr(x(1,0))*x(2,1)*x(3,1)+DataType(2)*Math::sqr(x(1,0))*Math::sqr(x(3,1))-DataType(2)*x(1,0)*x(1,1)*x(2,0)*x(2,1)+x(1,0)*x(1,1)*x(2,0)*x(3,1)+x(1,0)*x(1,1)*x(2,1)*x(3,0)-DataType(4)*x(1,0)*x(1,1)*x(3,0)*x(3,1)+x(1,0)*x(2,0)*x(2,1)*x(3,1)-DataType(3)*x(1,0)*x(2,0)*Math::sqr(x(3,1))-x(1,0)*Math::sqr(x(2,1))*x(3,0)+DataType(3)*x(1,0)*x(2,1)*x(3,0)*x(3,1)+Math::sqr(x(1,1))*Math::sqr(x(2,0))-Math::sqr(x(1,1))*x(2,0)*x(3,0)+DataType(2)*Math::sqr(x(1,1))*Math::sqr(x(3,0))-x(1,1)*Math::sqr(x(2,0))*x(3,1)+x(1,1)*x(2,0)*x(2,1)*x(3,0)+DataType(3)*x(1,1)*x(2,0)*x(3,0)*x(3,1)-DataType(3)*x(1,1)*x(2,1)*Math::sqr(x(3,0))+DataType(2)*Math::sqr(x(2,0))*Math::sqr(x(3,1))-DataType(4)*x(2,0)*x(2,1)*x(3,0)*x(3,1)+DataType(2)*Math::sqr(x(2,1))*Math::sqr(x(3,0)))/(h*h*h*h)/DataType(96);
 
  253            return fval_det_2_part;
 
  259          DataType NOINLINE compute_rec_det_1_part( 
const Tx& x, 
const DataType& h)
 
  261            DataType fval_rec_det_1_part(0);
 
  262            fval_rec_det_1_part = DataType(1)/(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8))/DataType(4)+DataType(1)/(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8))/DataType(4)+DataType(1)/(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8))/DataType(4)+DataType(1)/(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8))/DataType(4);
 
  263            return fval_rec_det_1_part;
 
  269          DataType NOINLINE compute_rec_det_2_part( 
const Tx& x, 
const DataType& h)
 
  271            DataType fval_rec_det_2_part(0);
 
  272            fval_rec_det_2_part = Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))/DataType(4)+Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))/DataType(4)+Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))/DataType(4)+Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))/DataType(4);
 
  273            return fval_rec_det_2_part;
 
  278          DataType NOINLINE compute_frobenius_der_h_part(
const Tx& x, 
const DataType& h)
 
  280            DataType frobenius_der_h_part(0);
 
  281            frobenius_der_h_part = (DataType(11520)*h*h*h-DataType(960)*h*Math::sqr(x(0,0))+DataType(480)*h*x(0,0)*x(1,0)+DataType(480)*h*x(0,0)*x(2,0)+DataType(960)*h*x(0,0)*x(3,0)-DataType(960)*h*Math::sqr(x(0,1))+DataType(480)*h*x(0,1)*x(1,1)+DataType(480)*h*x(0,1)*x(2,1)+DataType(960)*h*x(0,1)*x(3,1)-DataType(960)*h*Math::sqr(x(1,0))+DataType(960)*h*x(1,0)*x(2,0)+DataType(480)*h*x(1,0)*x(3,0)-DataType(960)*h*Math::sqr(x(1,1))+DataType(960)*h*x(1,1)*x(2,1)+DataType(480)*h*x(1,1)*x(3,1)-DataType(960)*h*Math::sqr(x(2,0))+DataType(480)*h*x(2,0)*x(3,0)-DataType(960)*h*Math::sqr(x(2,1))+DataType(480)*h*x(2,1)*x(3,1)-DataType(960)*h*Math::sqr(x(3,0))-DataType(960)*h*Math::sqr(x(3,1)))/(h*h*h*h)/DataType(720)-(DataType(2880)*h*h*h*h-DataType(480)*h*h*Math::sqr(x(0,0))+DataType(240)*h*h*x(0,0)*x(1,0)+DataType(240)*h*h*x(0,0)*x(2,0)+DataType(480)*h*h*x(0,0)*x(3,0)-DataType(480)*h*h*Math::sqr(x(0,1))+DataType(240)*h*h*x(0,1)*x(1,1)+DataType(240)*h*h*x(0,1)*x(2,1)+DataType(480)*h*h*x(0,1)*x(3,1)-DataType(480)*h*h*Math::sqr(x(1,0))+DataType(480)*h*h*x(1,0)*x(2,0)+DataType(240)*h*h*x(1,0)*x(3,0)-DataType(480)*h*h*Math::sqr(x(1,1))+DataType(480)*h*h*x(1,1)*x(2,1)+DataType(240)*h*h*x(1,1)*x(3,1)-DataType(480)*h*h*Math::sqr(x(2,0))+DataType(240)*h*h*x(2,0)*x(3,0)-DataType(480)*h*h*Math::sqr(x(2,1))+DataType(240)*h*h*x(2,1)*x(3,1)-DataType(480)*h*h*Math::sqr(x(3,0))-DataType(480)*h*h*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(0,0),DataType(4))-DataType(37)*Math::pow(x(0,0),DataType(3))*x(1,0)-DataType(37)*Math::pow(x(0,0),DataType(3))*x(2,0)-DataType(38)*Math::pow(x(0,0),DataType(3))*x(3,0)+DataType(56)*Math::sqr(x(0,0))*Math::sqr(x(0,1))-DataType(37)*Math::sqr(x(0,0))*x(0,1)*x(1,1)-DataType(37)*Math::sqr(x(0,0))*x(0,1)*x(2,1)-DataType(38)*Math::sqr(x(0,0))*x(0,1)*x(3,1)+DataType(63)*Math::sqr(x(0,0))*Math::sqr(x(1,0))-DataType(24)*Math::sqr(x(0,0))*x(1,0)*x(2,0)+DataType(9)*Math::sqr(x(0,0))*x(1,0)*x(3,0)+DataType(41)*Math::sqr(x(0,0))*Math::sqr(x(1,1))-DataType(38)*Math::sqr(x(0,0))*x(1,1)*x(2,1)-DataType(7)*Math::sqr(x(0,0))*x(1,1)*x(3,1)+DataType(63)*Math::sqr(x(0,0))*Math::sqr(x(2,0))+DataType(9)*Math::sqr(x(0,0))*x(2,0)*x(3,0)+DataType(41)*Math::sqr(x(0,0))*Math::sqr(x(2,1))-DataType(7)*Math::sqr(x(0,0))*x(2,1)*x(3,1)+DataType(48)*Math::sqr(x(0,0))*Math::sqr(x(3,0))+DataType(26)*Math::sqr(x(0,0))*Math::sqr(x(3,1))-DataType(37)*x(0,0)*Math::sqr(x(0,1))*x(1,0)-DataType(37)*x(0,0)*Math::sqr(x(0,1))*x(2,0)-DataType(38)*x(0,0)*Math::sqr(x(0,1))*x(3,0)+DataType(44)*x(0,0)*x(0,1)*x(1,0)*x(1,1)+DataType(14)*x(0,0)*x(0,1)*x(1,0)*x(2,1)+DataType(16)*x(0,0)*x(0,1)*x(1,0)*x(3,1)+DataType(14)*x(0,0)*x(0,1)*x(1,1)*x(2,0)+DataType(16)*x(0,0)*x(0,1)*x(1,1)*x(3,0)+DataType(44)*x(0,0)*x(0,1)*x(2,0)*x(2,1)+DataType(16)*x(0,0)*x(0,1)*x(2,0)*x(3,1)+DataType(16)*x(0,0)*x(0,1)*x(2,1)*x(3,0)+DataType(44)*x(0,0)*x(0,1)*x(3,0)*x(3,1)-DataType(37)*x(0,0)*Math::pow(x(1,0),DataType(3))+DataType(9)*x(0,0)*Math::sqr(x(1,0))*x(2,0)-DataType(24)*x(0,0)*Math::sqr(x(1,0))*x(3,0)-DataType(37)*x(0,0)*x(1,0)*Math::sqr(x(1,1))+DataType(16)*x(0,0)*x(1,0)*x(1,1)*x(2,1)+DataType(14)*x(0,0)*x(1,0)*x(1,1)*x(3,1)+DataType(9)*x(0,0)*x(1,0)*Math::sqr(x(2,0))+DataType(12)*x(0,0)*x(1,0)*x(2,0)*x(3,0)-DataType(7)*x(0,0)*x(1,0)*Math::sqr(x(2,1))-DataType(16)*x(0,0)*x(1,0)*x(2,1)*x(3,1)+DataType(9)*x(0,0)*x(1,0)*Math::sqr(x(3,0))-DataType(7)*x(0,0)*x(1,0)*Math::sqr(x(3,1))-DataType(7)*x(0,0)*Math::sqr(x(1,1))*x(2,0)-DataType(38)*x(0,0)*Math::sqr(x(1,1))*x(3,0)+DataType(16)*x(0,0)*x(1,1)*x(2,0)*x(2,1)-DataType(16)*x(0,0)*x(1,1)*x(2,0)*x(3,1)+DataType(44)*x(0,0)*x(1,1)*x(2,1)*x(3,0)+DataType(16)*x(0,0)*x(1,1)*x(3,0)*x(3,1)-DataType(37)*x(0,0)*Math::pow(x(2,0),DataType(3))-DataType(24)*x(0,0)*Math::sqr(x(2,0))*x(3,0)-DataType(37)*x(0,0)*x(2,0)*Math::sqr(x(2,1))+DataType(14)*x(0,0)*x(2,0)*x(2,1)*x(3,1)+DataType(9)*x(0,0)*x(2,0)*Math::sqr(x(3,0))-DataType(7)*x(0,0)*x(2,0)*Math::sqr(x(3,1))-DataType(38)*x(0,0)*Math::sqr(x(2,1))*x(3,0)+DataType(16)*x(0,0)*x(2,1)*x(3,0)*x(3,1)-DataType(38)*x(0,0)*Math::pow(x(3,0),DataType(3))-DataType(38)*x(0,0)*x(3,0)*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(0,1),DataType(4))-DataType(37)*Math::pow(x(0,1),DataType(3))*x(1,1)-DataType(37)*Math::pow(x(0,1),DataType(3))*x(2,1)-DataType(38)*Math::pow(x(0,1),DataType(3))*x(3,1)+DataType(41)*Math::sqr(x(0,1))*Math::sqr(x(1,0))-DataType(38)*Math::sqr(x(0,1))*x(1,0)*x(2,0)-DataType(7)*Math::sqr(x(0,1))*x(1,0)*x(3,0)+DataType(63)*Math::sqr(x(0,1))*Math::sqr(x(1,1))-DataType(24)*Math::sqr(x(0,1))*x(1,1)*x(2,1)+DataType(9)*Math::sqr(x(0,1))*x(1,1)*x(3,1)+DataType(41)*Math::sqr(x(0,1))*Math::sqr(x(2,0))-DataType(7)*Math::sqr(x(0,1))*x(2,0)*x(3,0)+DataType(63)*Math::sqr(x(0,1))*Math::sqr(x(2,1))+DataType(9)*Math::sqr(x(0,1))*x(2,1)*x(3,1)+DataType(26)*Math::sqr(x(0,1))*Math::sqr(x(3,0))+DataType(48)*Math::sqr(x(0,1))*Math::sqr(x(3,1))-DataType(37)*x(0,1)*Math::sqr(x(1,0))*x(1,1)-DataType(7)*x(0,1)*Math::sqr(x(1,0))*x(2,1)-DataType(38)*x(0,1)*Math::sqr(x(1,0))*x(3,1)+DataType(16)*x(0,1)*x(1,0)*x(1,1)*x(2,0)+DataType(14)*x(0,1)*x(1,0)*x(1,1)*x(3,0)+DataType(16)*x(0,1)*x(1,0)*x(2,0)*x(2,1)+DataType(44)*x(0,1)*x(1,0)*x(2,0)*x(3,1)-DataType(16)*x(0,1)*x(1,0)*x(2,1)*x(3,0)+DataType(16)*x(0,1)*x(1,0)*x(3,0)*x(3,1)-DataType(37)*x(0,1)*Math::pow(x(1,1),DataType(3))+DataType(9)*x(0,1)*Math::sqr(x(1,1))*x(2,1)-DataType(24)*x(0,1)*Math::sqr(x(1,1))*x(3,1)-DataType(7)*x(0,1)*x(1,1)*Math::sqr(x(2,0))-DataType(16)*x(0,1)*x(1,1)*x(2,0)*x(3,0)+DataType(9)*x(0,1)*x(1,1)*Math::sqr(x(2,1))+DataType(12)*x(0,1)*x(1,1)*x(2,1)*x(3,1)-DataType(7)*x(0,1)*x(1,1)*Math::sqr(x(3,0))+DataType(9)*x(0,1)*x(1,1)*Math::sqr(x(3,1))-DataType(37)*x(0,1)*Math::sqr(x(2,0))*x(2,1)-DataType(38)*x(0,1)*Math::sqr(x(2,0))*x(3,1)+DataType(14)*x(0,1)*x(2,0)*x(2,1)*x(3,0)+DataType(16)*x(0,1)*x(2,0)*x(3,0)*x(3,1)-DataType(37)*x(0,1)*Math::pow(x(2,1),DataType(3))-DataType(24)*x(0,1)*Math::sqr(x(2,1))*x(3,1)-DataType(7)*x(0,1)*x(2,1)*Math::sqr(x(3,0))+DataType(9)*x(0,1)*x(2,1)*Math::sqr(x(3,1))-DataType(38)*x(0,1)*Math::sqr(x(3,0))*x(3,1)-DataType(38)*x(0,1)*Math::pow(x(3,1),DataType(3))+DataType(28)*Math::pow(x(1,0),DataType(4))-DataType(38)*Math::pow(x(1,0),DataType(3))*x(2,0)-DataType(37)*Math::pow(x(1,0),DataType(3))*x(3,0)+DataType(56)*Math::sqr(x(1,0))*Math::sqr(x(1,1))-DataType(38)*Math::sqr(x(1,0))*x(1,1)*x(2,1)-DataType(37)*Math::sqr(x(1,0))*x(1,1)*x(3,1)+DataType(48)*Math::sqr(x(1,0))*Math::sqr(x(2,0))+DataType(9)*Math::sqr(x(1,0))*x(2,0)*x(3,0)+DataType(26)*Math::sqr(x(1,0))*Math::sqr(x(2,1))-DataType(7)*Math::sqr(x(1,0))*x(2,1)*x(3,1)+DataType(63)*Math::sqr(x(1,0))*Math::sqr(x(3,0))+DataType(41)*Math::sqr(x(1,0))*Math::sqr(x(3,1))-DataType(38)*x(1,0)*Math::sqr(x(1,1))*x(2,0)-DataType(37)*x(1,0)*Math::sqr(x(1,1))*x(3,0)+DataType(44)*x(1,0)*x(1,1)*x(2,0)*x(2,1)+DataType(16)*x(1,0)*x(1,1)*x(2,0)*x(3,1)+DataType(16)*x(1,0)*x(1,1)*x(2,1)*x(3,0)+DataType(44)*x(1,0)*x(1,1)*x(3,0)*x(3,1)-DataType(38)*x(1,0)*Math::pow(x(2,0),DataType(3))+DataType(9)*x(1,0)*Math::sqr(x(2,0))*x(3,0)-DataType(38)*x(1,0)*x(2,0)*Math::sqr(x(2,1))+DataType(16)*x(1,0)*x(2,0)*x(2,1)*x(3,1)-DataType(24)*x(1,0)*x(2,0)*Math::sqr(x(3,0))-DataType(38)*x(1,0)*x(2,0)*Math::sqr(x(3,1))-DataType(7)*x(1,0)*Math::sqr(x(2,1))*x(3,0)+DataType(14)*x(1,0)*x(2,1)*x(3,0)*x(3,1)-DataType(37)*x(1,0)*Math::pow(x(3,0),DataType(3))-DataType(37)*x(1,0)*x(3,0)*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(1,1),DataType(4))-DataType(38)*Math::pow(x(1,1),DataType(3))*x(2,1)-DataType(37)*Math::pow(x(1,1),DataType(3))*x(3,1)+DataType(26)*Math::sqr(x(1,1))*Math::sqr(x(2,0))-DataType(7)*Math::sqr(x(1,1))*x(2,0)*x(3,0)+DataType(48)*Math::sqr(x(1,1))*Math::sqr(x(2,1))+DataType(9)*Math::sqr(x(1,1))*x(2,1)*x(3,1)+DataType(41)*Math::sqr(x(1,1))*Math::sqr(x(3,0))+DataType(63)*Math::sqr(x(1,1))*Math::sqr(x(3,1))-DataType(38)*x(1,1)*Math::sqr(x(2,0))*x(2,1)-DataType(7)*x(1,1)*Math::sqr(x(2,0))*x(3,1)+DataType(16)*x(1,1)*x(2,0)*x(2,1)*x(3,0)+DataType(14)*x(1,1)*x(2,0)*x(3,0)*x(3,1)-DataType(38)*x(1,1)*Math::pow(x(2,1),DataType(3))+DataType(9)*x(1,1)*Math::sqr(x(2,1))*x(3,1)-DataType(38)*x(1,1)*x(2,1)*Math::sqr(x(3,0))-DataType(24)*x(1,1)*x(2,1)*Math::sqr(x(3,1))-DataType(37)*x(1,1)*Math::sqr(x(3,0))*x(3,1)-DataType(37)*x(1,1)*Math::pow(x(3,1),DataType(3))+DataType(28)*Math::pow(x(2,0),DataType(4))-DataType(37)*Math::pow(x(2,0),DataType(3))*x(3,0)+DataType(56)*Math::sqr(x(2,0))*Math::sqr(x(2,1))-DataType(37)*Math::sqr(x(2,0))*x(2,1)*x(3,1)+DataType(63)*Math::sqr(x(2,0))*Math::sqr(x(3,0))+DataType(41)*Math::sqr(x(2,0))*Math::sqr(x(3,1))-DataType(37)*x(2,0)*Math::sqr(x(2,1))*x(3,0)+DataType(44)*x(2,0)*x(2,1)*x(3,0)*x(3,1)-DataType(37)*x(2,0)*Math::pow(x(3,0),DataType(3))-DataType(37)*x(2,0)*x(3,0)*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(2,1),DataType(4))-DataType(37)*Math::pow(x(2,1),DataType(3))*x(3,1)+DataType(41)*Math::sqr(x(2,1))*Math::sqr(x(3,0))+DataType(63)*Math::sqr(x(2,1))*Math::sqr(x(3,1))-DataType(37)*x(2,1)*Math::sqr(x(3,0))*x(3,1)-DataType(37)*x(2,1)*Math::pow(x(3,1),DataType(3))+DataType(28)*Math::pow(x(3,0),DataType(4))+DataType(56)*Math::sqr(x(3,0))*Math::sqr(x(3,1))+DataType(28)*Math::pow(x(3,1),DataType(4)))/(h*h*h*h*h)/DataType(180);
 
  282            return frobenius_der_h_part;
 
  288          DataType NOINLINE compute_det_1_der_h_part( 
const Tx& x, 
const DataType& h)
 
  290            DataType det_1_der_h_part(0);
 
  291            det_1_der_h_part = -(x(0,0)*x(1,1)-x(0,0)*x(2,1)-x(0,1)*x(1,0)+x(0,1)*x(2,0)+x(1,0)*x(3,1)-x(1,1)*x(3,0)-x(2,0)*x(3,1)+x(2,1)*x(3,0))/(h*h*h)/DataType(4);
 
  292            return det_1_der_h_part;
 
  297          DataType NOINLINE compute_det_2_der_h_part( 
const Tx& x, 
const DataType& h)
 
  299            DataType det_2_der_h_part(0);
 
  300            det_2_der_h_part = -(DataType(2)*Math::sqr(x(0,0))*Math::sqr(x(1,1))-DataType(3)*Math::sqr(x(0,0))*x(1,1)*x(2,1)-Math::sqr(x(0,0))*x(1,1)*x(3,1)+DataType(2)*Math::sqr(x(0,0))*Math::sqr(x(2,1))-Math::sqr(x(0,0))*x(2,1)*x(3,1)+Math::sqr(x(0,0))*Math::sqr(x(3,1))-DataType(4)*x(0,0)*x(0,1)*x(1,0)*x(1,1)+DataType(3)*x(0,0)*x(0,1)*x(1,0)*x(2,1)+x(0,0)*x(0,1)*x(1,0)*x(3,1)+DataType(3)*x(0,0)*x(0,1)*x(1,1)*x(2,0)+x(0,0)*x(0,1)*x(1,1)*x(3,0)-DataType(4)*x(0,0)*x(0,1)*x(2,0)*x(2,1)+x(0,0)*x(0,1)*x(2,0)*x(3,1)+x(0,0)*x(0,1)*x(2,1)*x(3,0)-DataType(2)*x(0,0)*x(0,1)*x(3,0)*x(3,1)+x(0,0)*x(1,0)*x(1,1)*x(2,1)+DataType(3)*x(0,0)*x(1,0)*x(1,1)*x(3,1)-x(0,0)*x(1,0)*Math::sqr(x(2,1))-DataType(2)*x(0,0)*x(1,0)*x(2,1)*x(3,1)-x(0,0)*x(1,0)*Math::sqr(x(3,1))-x(0,0)*Math::sqr(x(1,1))*x(2,0)-DataType(3)*x(0,0)*Math::sqr(x(1,1))*x(3,0)+x(0,0)*x(1,1)*x(2,0)*x(2,1)-DataType(2)*x(0,0)*x(1,1)*x(2,0)*x(3,1)+DataType(4)*x(0,0)*x(1,1)*x(2,1)*x(3,0)+x(0,0)*x(1,1)*x(3,0)*x(3,1)+DataType(3)*x(0,0)*x(2,0)*x(2,1)*x(3,1)-x(0,0)*x(2,0)*Math::sqr(x(3,1))-DataType(3)*x(0,0)*Math::sqr(x(2,1))*x(3,0)+x(0,0)*x(2,1)*x(3,0)*x(3,1)+DataType(2)*Math::sqr(x(0,1))*Math::sqr(x(1,0))-DataType(3)*Math::sqr(x(0,1))*x(1,0)*x(2,0)-Math::sqr(x(0,1))*x(1,0)*x(3,0)+DataType(2)*Math::sqr(x(0,1))*Math::sqr(x(2,0))-Math::sqr(x(0,1))*x(2,0)*x(3,0)+Math::sqr(x(0,1))*Math::sqr(x(3,0))-x(0,1)*Math::sqr(x(1,0))*x(2,1)-DataType(3)*x(0,1)*Math::sqr(x(1,0))*x(3,1)+x(0,1)*x(1,0)*x(1,1)*x(2,0)+DataType(3)*x(0,1)*x(1,0)*x(1,1)*x(3,0)+x(0,1)*x(1,0)*x(2,0)*x(2,1)+DataType(4)*x(0,1)*x(1,0)*x(2,0)*x(3,1)-DataType(2)*x(0,1)*x(1,0)*x(2,1)*x(3,0)+x(0,1)*x(1,0)*x(3,0)*x(3,1)-x(0,1)*x(1,1)*Math::sqr(x(2,0))-DataType(2)*x(0,1)*x(1,1)*x(2,0)*x(3,0)-x(0,1)*x(1,1)*Math::sqr(x(3,0))-DataType(3)*x(0,1)*Math::sqr(x(2,0))*x(3,1)+DataType(3)*x(0,1)*x(2,0)*x(2,1)*x(3,0)+x(0,1)*x(2,0)*x(3,0)*x(3,1)-x(0,1)*x(2,1)*Math::sqr(x(3,0))+Math::sqr(x(1,0))*Math::sqr(x(2,1))-Math::sqr(x(1,0))*x(2,1)*x(3,1)+DataType(2)*Math::sqr(x(1,0))*Math::sqr(x(3,1))-DataType(2)*x(1,0)*x(1,1)*x(2,0)*x(2,1)+x(1,0)*x(1,1)*x(2,0)*x(3,1)+x(1,0)*x(1,1)*x(2,1)*x(3,0)-DataType(4)*x(1,0)*x(1,1)*x(3,0)*x(3,1)+x(1,0)*x(2,0)*x(2,1)*x(3,1)-DataType(3)*x(1,0)*x(2,0)*Math::sqr(x(3,1))-x(1,0)*Math::sqr(x(2,1))*x(3,0)+DataType(3)*x(1,0)*x(2,1)*x(3,0)*x(3,1)+Math::sqr(x(1,1))*Math::sqr(x(2,0))-Math::sqr(x(1,1))*x(2,0)*x(3,0)+DataType(2)*Math::sqr(x(1,1))*Math::sqr(x(3,0))-x(1,1)*Math::sqr(x(2,0))*x(3,1)+x(1,1)*x(2,0)*x(2,1)*x(3,0)+DataType(3)*x(1,1)*x(2,0)*x(3,0)*x(3,1)-DataType(3)*x(1,1)*x(2,1)*Math::sqr(x(3,0))+DataType(2)*Math::sqr(x(2,0))*Math::sqr(x(3,1))-DataType(4)*x(2,0)*x(2,1)*x(3,0)*x(3,1)+DataType(2)*Math::sqr(x(2,1))*Math::sqr(x(3,0)))/(h*h*h*h*h)/DataType(24);
 
  301            return det_2_der_h_part;
 
  307          DataType NOINLINE compute_rec_det_1_der_h_part( 
const Tx& x, 
const DataType& h)
 
  309            DataType rec_det_1_der_h_part(0);
 
  310            rec_det_1_der_h_part = -Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*((-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(4)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*((-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*((DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*((DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(4);
 
  311            return rec_det_1_der_h_part;
 
  317          DataType NOINLINE compute_rec_det_2_der_h_part( 
const Tx& x, 
const DataType& h)
 
  319            DataType rec_det_2_der_h_part(0);
 
  320            rec_det_2_der_h_part = -Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*((-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(2)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*((-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*((DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*((DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h)/DataType(4)-Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h*h)/DataType(4))/DataType(2);
 
  321            return rec_det_2_der_h_part;
 
  327          void NOINLINE add_grad_frobenius_part(Tx& grad_frobenius_part, 
const Tx& x, 
const DataType& h)
 
  329            grad_frobenius_part(0,0) += this->_fac_frobenius*(-DataType(960)*h*h*x(0,0)+DataType(240)*h*h*x(1,0)+DataType(240)*h*h*x(2,0)+DataType(480)*h*h*x(3,0)+DataType(112)*Math::pow(x(0,0),DataType(3))-DataType(111)*Math::sqr(x(0,0))*x(1,0)-DataType(111)*Math::sqr(x(0,0))*x(2,0)-DataType(114)*Math::sqr(x(0,0))*x(3,0)+DataType(112)*x(0,0)*Math::sqr(x(0,1))-DataType(74)*x(0,0)*x(0,1)*x(1,1)-DataType(74)*x(0,0)*x(0,1)*x(2,1)-DataType(76)*x(0,0)*x(0,1)*x(3,1)+DataType(126)*x(0,0)*Math::sqr(x(1,0))-DataType(48)*x(0,0)*x(1,0)*x(2,0)+DataType(18)*x(0,0)*x(1,0)*x(3,0)+DataType(82)*x(0,0)*Math::sqr(x(1,1))-DataType(76)*x(0,0)*x(1,1)*x(2,1)-DataType(14)*x(0,0)*x(1,1)*x(3,1)+DataType(126)*x(0,0)*Math::sqr(x(2,0))+DataType(18)*x(0,0)*x(2,0)*x(3,0)+DataType(82)*x(0,0)*Math::sqr(x(2,1))-DataType(14)*x(0,0)*x(2,1)*x(3,1)+DataType(96)*x(0,0)*Math::sqr(x(3,0))+DataType(52)*x(0,0)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(0,1))*x(1,0)-DataType(37)*Math::sqr(x(0,1))*x(2,0)-DataType(38)*Math::sqr(x(0,1))*x(3,0)+DataType(44)*x(0,1)*x(1,0)*x(1,1)+DataType(14)*x(0,1)*x(1,0)*x(2,1)+DataType(16)*x(0,1)*x(1,0)*x(3,1)+DataType(14)*x(0,1)*x(1,1)*x(2,0)+DataType(16)*x(0,1)*x(1,1)*x(3,0)+DataType(44)*x(0,1)*x(2,0)*x(2,1)+DataType(16)*x(0,1)*x(2,0)*x(3,1)+DataType(16)*x(0,1)*x(2,1)*x(3,0)+DataType(44)*x(0,1)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(1,0),DataType(3))+DataType(9)*Math::sqr(x(1,0))*x(2,0)-DataType(24)*Math::sqr(x(1,0))*x(3,0)-DataType(37)*x(1,0)*Math::sqr(x(1,1))+DataType(16)*x(1,0)*x(1,1)*x(2,1)+DataType(14)*x(1,0)*x(1,1)*x(3,1)+DataType(9)*x(1,0)*Math::sqr(x(2,0))+DataType(12)*x(1,0)*x(2,0)*x(3,0)-DataType(7)*x(1,0)*Math::sqr(x(2,1))-DataType(16)*x(1,0)*x(2,1)*x(3,1)+DataType(9)*x(1,0)*Math::sqr(x(3,0))-DataType(7)*x(1,0)*Math::sqr(x(3,1))-DataType(7)*Math::sqr(x(1,1))*x(2,0)-DataType(38)*Math::sqr(x(1,1))*x(3,0)+DataType(16)*x(1,1)*x(2,0)*x(2,1)-DataType(16)*x(1,1)*x(2,0)*x(3,1)+DataType(44)*x(1,1)*x(2,1)*x(3,0)+DataType(16)*x(1,1)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(2,0),DataType(3))-DataType(24)*Math::sqr(x(2,0))*x(3,0)-DataType(37)*x(2,0)*Math::sqr(x(2,1))+DataType(14)*x(2,0)*x(2,1)*x(3,1)+DataType(9)*x(2,0)*Math::sqr(x(3,0))-DataType(7)*x(2,0)*Math::sqr(x(3,1))-DataType(38)*Math::sqr(x(2,1))*x(3,0)+DataType(16)*x(2,1)*x(3,0)*x(3,1)-DataType(38)*Math::pow(x(3,0),DataType(3))-DataType(38)*x(3,0)*Math::sqr(x(3,1)))/(h*h*h*h)/DataType(720);
 
  331            grad_frobenius_part(0,1) += this->_fac_frobenius*(-DataType(960)*h*h*x(0,1)+DataType(240)*h*h*x(1,1)+DataType(240)*h*h*x(2,1)+DataType(480)*h*h*x(3,1)+DataType(112)*Math::sqr(x(0,0))*x(0,1)-DataType(37)*Math::sqr(x(0,0))*x(1,1)-DataType(37)*Math::sqr(x(0,0))*x(2,1)-DataType(38)*Math::sqr(x(0,0))*x(3,1)-DataType(74)*x(0,0)*x(0,1)*x(1,0)-DataType(74)*x(0,0)*x(0,1)*x(2,0)-DataType(76)*x(0,0)*x(0,1)*x(3,0)+DataType(44)*x(0,0)*x(1,0)*x(1,1)+DataType(14)*x(0,0)*x(1,0)*x(2,1)+DataType(16)*x(0,0)*x(1,0)*x(3,1)+DataType(14)*x(0,0)*x(1,1)*x(2,0)+DataType(16)*x(0,0)*x(1,1)*x(3,0)+DataType(44)*x(0,0)*x(2,0)*x(2,1)+DataType(16)*x(0,0)*x(2,0)*x(3,1)+DataType(16)*x(0,0)*x(2,1)*x(3,0)+DataType(44)*x(0,0)*x(3,0)*x(3,1)+DataType(112)*Math::pow(x(0,1),DataType(3))-DataType(111)*Math::sqr(x(0,1))*x(1,1)-DataType(111)*Math::sqr(x(0,1))*x(2,1)-DataType(114)*Math::sqr(x(0,1))*x(3,1)+DataType(82)*x(0,1)*Math::sqr(x(1,0))-DataType(76)*x(0,1)*x(1,0)*x(2,0)-DataType(14)*x(0,1)*x(1,0)*x(3,0)+DataType(126)*x(0,1)*Math::sqr(x(1,1))-DataType(48)*x(0,1)*x(1,1)*x(2,1)+DataType(18)*x(0,1)*x(1,1)*x(3,1)+DataType(82)*x(0,1)*Math::sqr(x(2,0))-DataType(14)*x(0,1)*x(2,0)*x(3,0)+DataType(126)*x(0,1)*Math::sqr(x(2,1))+DataType(18)*x(0,1)*x(2,1)*x(3,1)+DataType(52)*x(0,1)*Math::sqr(x(3,0))+DataType(96)*x(0,1)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(1,0))*x(1,1)-DataType(7)*Math::sqr(x(1,0))*x(2,1)-DataType(38)*Math::sqr(x(1,0))*x(3,1)+DataType(16)*x(1,0)*x(1,1)*x(2,0)+DataType(14)*x(1,0)*x(1,1)*x(3,0)+DataType(16)*x(1,0)*x(2,0)*x(2,1)+DataType(44)*x(1,0)*x(2,0)*x(3,1)-DataType(16)*x(1,0)*x(2,1)*x(3,0)+DataType(16)*x(1,0)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(1,1),DataType(3))+DataType(9)*Math::sqr(x(1,1))*x(2,1)-DataType(24)*Math::sqr(x(1,1))*x(3,1)-DataType(7)*x(1,1)*Math::sqr(x(2,0))-DataType(16)*x(1,1)*x(2,0)*x(3,0)+DataType(9)*x(1,1)*Math::sqr(x(2,1))+DataType(12)*x(1,1)*x(2,1)*x(3,1)-DataType(7)*x(1,1)*Math::sqr(x(3,0))+DataType(9)*x(1,1)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(2,0))*x(2,1)-DataType(38)*Math::sqr(x(2,0))*x(3,1)+DataType(14)*x(2,0)*x(2,1)*x(3,0)+DataType(16)*x(2,0)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(2,1),DataType(3))-DataType(24)*Math::sqr(x(2,1))*x(3,1)-DataType(7)*x(2,1)*Math::sqr(x(3,0))+DataType(9)*x(2,1)*Math::sqr(x(3,1))-DataType(38)*Math::sqr(x(3,0))*x(3,1)-DataType(38)*Math::pow(x(3,1),DataType(3)))/(h*h*h*h)/DataType(720);
 
  333            grad_frobenius_part(1,0) += this->_fac_frobenius*(DataType(240)*h*h*x(0,0)-DataType(960)*h*h*x(1,0)+DataType(480)*h*h*x(2,0)+DataType(240)*h*h*x(3,0)-DataType(37)*Math::pow(x(0,0),DataType(3))+DataType(126)*Math::sqr(x(0,0))*x(1,0)-DataType(24)*Math::sqr(x(0,0))*x(2,0)+DataType(9)*Math::sqr(x(0,0))*x(3,0)-DataType(37)*x(0,0)*Math::sqr(x(0,1))+DataType(44)*x(0,0)*x(0,1)*x(1,1)+DataType(14)*x(0,0)*x(0,1)*x(2,1)+DataType(16)*x(0,0)*x(0,1)*x(3,1)-DataType(111)*x(0,0)*Math::sqr(x(1,0))+DataType(18)*x(0,0)*x(1,0)*x(2,0)-DataType(48)*x(0,0)*x(1,0)*x(3,0)-DataType(37)*x(0,0)*Math::sqr(x(1,1))+DataType(16)*x(0,0)*x(1,1)*x(2,1)+DataType(14)*x(0,0)*x(1,1)*x(3,1)+DataType(9)*x(0,0)*Math::sqr(x(2,0))+DataType(12)*x(0,0)*x(2,0)*x(3,0)-DataType(7)*x(0,0)*Math::sqr(x(2,1))-DataType(16)*x(0,0)*x(2,1)*x(3,1)+DataType(9)*x(0,0)*Math::sqr(x(3,0))-DataType(7)*x(0,0)*Math::sqr(x(3,1))+DataType(82)*Math::sqr(x(0,1))*x(1,0)-DataType(38)*Math::sqr(x(0,1))*x(2,0)-DataType(7)*Math::sqr(x(0,1))*x(3,0)-DataType(74)*x(0,1)*x(1,0)*x(1,1)-DataType(14)*x(0,1)*x(1,0)*x(2,1)-DataType(76)*x(0,1)*x(1,0)*x(3,1)+DataType(16)*x(0,1)*x(1,1)*x(2,0)+DataType(14)*x(0,1)*x(1,1)*x(3,0)+DataType(16)*x(0,1)*x(2,0)*x(2,1)+DataType(44)*x(0,1)*x(2,0)*x(3,1)-DataType(16)*x(0,1)*x(2,1)*x(3,0)+DataType(16)*x(0,1)*x(3,0)*x(3,1)+DataType(112)*Math::pow(x(1,0),DataType(3))-DataType(114)*Math::sqr(x(1,0))*x(2,0)-DataType(111)*Math::sqr(x(1,0))*x(3,0)+DataType(112)*x(1,0)*Math::sqr(x(1,1))-DataType(76)*x(1,0)*x(1,1)*x(2,1)-DataType(74)*x(1,0)*x(1,1)*x(3,1)+DataType(96)*x(1,0)*Math::sqr(x(2,0))+DataType(18)*x(1,0)*x(2,0)*x(3,0)+DataType(52)*x(1,0)*Math::sqr(x(2,1))-DataType(14)*x(1,0)*x(2,1)*x(3,1)+DataType(126)*x(1,0)*Math::sqr(x(3,0))+DataType(82)*x(1,0)*Math::sqr(x(3,1))-DataType(38)*Math::sqr(x(1,1))*x(2,0)-DataType(37)*Math::sqr(x(1,1))*x(3,0)+DataType(44)*x(1,1)*x(2,0)*x(2,1)+DataType(16)*x(1,1)*x(2,0)*x(3,1)+DataType(16)*x(1,1)*x(2,1)*x(3,0)+DataType(44)*x(1,1)*x(3,0)*x(3,1)-DataType(38)*Math::pow(x(2,0),DataType(3))+DataType(9)*Math::sqr(x(2,0))*x(3,0)-DataType(38)*x(2,0)*Math::sqr(x(2,1))+DataType(16)*x(2,0)*x(2,1)*x(3,1)-DataType(24)*x(2,0)*Math::sqr(x(3,0))-DataType(38)*x(2,0)*Math::sqr(x(3,1))-DataType(7)*Math::sqr(x(2,1))*x(3,0)+DataType(14)*x(2,1)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(3,0),DataType(3))-DataType(37)*x(3,0)*Math::sqr(x(3,1)))/(h*h*h*h)/DataType(720);
 
  335            grad_frobenius_part(1,1) += this->_fac_frobenius*(DataType(240)*h*h*x(0,1)-DataType(960)*h*h*x(1,1)+DataType(480)*h*h*x(2,1)+DataType(240)*h*h*x(3,1)-DataType(37)*Math::sqr(x(0,0))*x(0,1)+DataType(82)*Math::sqr(x(0,0))*x(1,1)-DataType(38)*Math::sqr(x(0,0))*x(2,1)-DataType(7)*Math::sqr(x(0,0))*x(3,1)+DataType(44)*x(0,0)*x(0,1)*x(1,0)+DataType(14)*x(0,0)*x(0,1)*x(2,0)+DataType(16)*x(0,0)*x(0,1)*x(3,0)-DataType(74)*x(0,0)*x(1,0)*x(1,1)+DataType(16)*x(0,0)*x(1,0)*x(2,1)+DataType(14)*x(0,0)*x(1,0)*x(3,1)-DataType(14)*x(0,0)*x(1,1)*x(2,0)-DataType(76)*x(0,0)*x(1,1)*x(3,0)+DataType(16)*x(0,0)*x(2,0)*x(2,1)-DataType(16)*x(0,0)*x(2,0)*x(3,1)+DataType(44)*x(0,0)*x(2,1)*x(3,0)+DataType(16)*x(0,0)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(0,1),DataType(3))+DataType(126)*Math::sqr(x(0,1))*x(1,1)-DataType(24)*Math::sqr(x(0,1))*x(2,1)+DataType(9)*Math::sqr(x(0,1))*x(3,1)-DataType(37)*x(0,1)*Math::sqr(x(1,0))+DataType(16)*x(0,1)*x(1,0)*x(2,0)+DataType(14)*x(0,1)*x(1,0)*x(3,0)-DataType(111)*x(0,1)*Math::sqr(x(1,1))+DataType(18)*x(0,1)*x(1,1)*x(2,1)-DataType(48)*x(0,1)*x(1,1)*x(3,1)-DataType(7)*x(0,1)*Math::sqr(x(2,0))-DataType(16)*x(0,1)*x(2,0)*x(3,0)+DataType(9)*x(0,1)*Math::sqr(x(2,1))+DataType(12)*x(0,1)*x(2,1)*x(3,1)-DataType(7)*x(0,1)*Math::sqr(x(3,0))+DataType(9)*x(0,1)*Math::sqr(x(3,1))+DataType(112)*Math::sqr(x(1,0))*x(1,1)-DataType(38)*Math::sqr(x(1,0))*x(2,1)-DataType(37)*Math::sqr(x(1,0))*x(3,1)-DataType(76)*x(1,0)*x(1,1)*x(2,0)-DataType(74)*x(1,0)*x(1,1)*x(3,0)+DataType(44)*x(1,0)*x(2,0)*x(2,1)+DataType(16)*x(1,0)*x(2,0)*x(3,1)+DataType(16)*x(1,0)*x(2,1)*x(3,0)+DataType(44)*x(1,0)*x(3,0)*x(3,1)+DataType(112)*Math::pow(x(1,1),DataType(3))-DataType(114)*Math::sqr(x(1,1))*x(2,1)-DataType(111)*Math::sqr(x(1,1))*x(3,1)+DataType(52)*x(1,1)*Math::sqr(x(2,0))-DataType(14)*x(1,1)*x(2,0)*x(3,0)+DataType(96)*x(1,1)*Math::sqr(x(2,1))+DataType(18)*x(1,1)*x(2,1)*x(3,1)+DataType(82)*x(1,1)*Math::sqr(x(3,0))+DataType(126)*x(1,1)*Math::sqr(x(3,1))-DataType(38)*Math::sqr(x(2,0))*x(2,1)-DataType(7)*Math::sqr(x(2,0))*x(3,1)+DataType(16)*x(2,0)*x(2,1)*x(3,0)+DataType(14)*x(2,0)*x(3,0)*x(3,1)-DataType(38)*Math::pow(x(2,1),DataType(3))+DataType(9)*Math::sqr(x(2,1))*x(3,1)-DataType(38)*x(2,1)*Math::sqr(x(3,0))-DataType(24)*x(2,1)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(3,0))*x(3,1)-DataType(37)*Math::pow(x(3,1),DataType(3)))/(h*h*h*h)/DataType(720);
 
  337            grad_frobenius_part(2,0) += this->_fac_frobenius*(DataType(240)*h*h*x(0,0)+DataType(480)*h*h*x(1,0)-DataType(960)*h*h*x(2,0)+DataType(240)*h*h*x(3,0)-DataType(37)*Math::pow(x(0,0),DataType(3))-DataType(24)*Math::sqr(x(0,0))*x(1,0)+DataType(126)*Math::sqr(x(0,0))*x(2,0)+DataType(9)*Math::sqr(x(0,0))*x(3,0)-DataType(37)*x(0,0)*Math::sqr(x(0,1))+DataType(14)*x(0,0)*x(0,1)*x(1,1)+DataType(44)*x(0,0)*x(0,1)*x(2,1)+DataType(16)*x(0,0)*x(0,1)*x(3,1)+DataType(9)*x(0,0)*Math::sqr(x(1,0))+DataType(18)*x(0,0)*x(1,0)*x(2,0)+DataType(12)*x(0,0)*x(1,0)*x(3,0)-DataType(7)*x(0,0)*Math::sqr(x(1,1))+DataType(16)*x(0,0)*x(1,1)*x(2,1)-DataType(16)*x(0,0)*x(1,1)*x(3,1)-DataType(111)*x(0,0)*Math::sqr(x(2,0))-DataType(48)*x(0,0)*x(2,0)*x(3,0)-DataType(37)*x(0,0)*Math::sqr(x(2,1))+DataType(14)*x(0,0)*x(2,1)*x(3,1)+DataType(9)*x(0,0)*Math::sqr(x(3,0))-DataType(7)*x(0,0)*Math::sqr(x(3,1))-DataType(38)*Math::sqr(x(0,1))*x(1,0)+DataType(82)*Math::sqr(x(0,1))*x(2,0)-DataType(7)*Math::sqr(x(0,1))*x(3,0)+DataType(16)*x(0,1)*x(1,0)*x(1,1)+DataType(16)*x(0,1)*x(1,0)*x(2,1)+DataType(44)*x(0,1)*x(1,0)*x(3,1)-DataType(14)*x(0,1)*x(1,1)*x(2,0)-DataType(16)*x(0,1)*x(1,1)*x(3,0)-DataType(74)*x(0,1)*x(2,0)*x(2,1)-DataType(76)*x(0,1)*x(2,0)*x(3,1)+DataType(14)*x(0,1)*x(2,1)*x(3,0)+DataType(16)*x(0,1)*x(3,0)*x(3,1)-DataType(38)*Math::pow(x(1,0),DataType(3))+DataType(96)*Math::sqr(x(1,0))*x(2,0)+DataType(9)*Math::sqr(x(1,0))*x(3,0)-DataType(38)*x(1,0)*Math::sqr(x(1,1))+DataType(44)*x(1,0)*x(1,1)*x(2,1)+DataType(16)*x(1,0)*x(1,1)*x(3,1)-DataType(114)*x(1,0)*Math::sqr(x(2,0))+DataType(18)*x(1,0)*x(2,0)*x(3,0)-DataType(38)*x(1,0)*Math::sqr(x(2,1))+DataType(16)*x(1,0)*x(2,1)*x(3,1)-DataType(24)*x(1,0)*Math::sqr(x(3,0))-DataType(38)*x(1,0)*Math::sqr(x(3,1))+DataType(52)*Math::sqr(x(1,1))*x(2,0)-DataType(7)*Math::sqr(x(1,1))*x(3,0)-DataType(76)*x(1,1)*x(2,0)*x(2,1)-DataType(14)*x(1,1)*x(2,0)*x(3,1)+DataType(16)*x(1,1)*x(2,1)*x(3,0)+DataType(14)*x(1,1)*x(3,0)*x(3,1)+DataType(112)*Math::pow(x(2,0),DataType(3))-DataType(111)*Math::sqr(x(2,0))*x(3,0)+DataType(112)*x(2,0)*Math::sqr(x(2,1))-DataType(74)*x(2,0)*x(2,1)*x(3,1)+DataType(126)*x(2,0)*Math::sqr(x(3,0))+DataType(82)*x(2,0)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(2,1))*x(3,0)+DataType(44)*x(2,1)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(3,0),DataType(3))-DataType(37)*x(3,0)*Math::sqr(x(3,1)))/(h*h*h*h)/DataType(720);
 
  339            grad_frobenius_part(2,1) += this->_fac_frobenius*(DataType(240)*h*h*x(0,1)+DataType(480)*h*h*x(1,1)-DataType(960)*h*h*x(2,1)+DataType(240)*h*h*x(3,1)-DataType(37)*Math::sqr(x(0,0))*x(0,1)-DataType(38)*Math::sqr(x(0,0))*x(1,1)+DataType(82)*Math::sqr(x(0,0))*x(2,1)-DataType(7)*Math::sqr(x(0,0))*x(3,1)+DataType(14)*x(0,0)*x(0,1)*x(1,0)+DataType(44)*x(0,0)*x(0,1)*x(2,0)+DataType(16)*x(0,0)*x(0,1)*x(3,0)+DataType(16)*x(0,0)*x(1,0)*x(1,1)-DataType(14)*x(0,0)*x(1,0)*x(2,1)-DataType(16)*x(0,0)*x(1,0)*x(3,1)+DataType(16)*x(0,0)*x(1,1)*x(2,0)+DataType(44)*x(0,0)*x(1,1)*x(3,0)-DataType(74)*x(0,0)*x(2,0)*x(2,1)+DataType(14)*x(0,0)*x(2,0)*x(3,1)-DataType(76)*x(0,0)*x(2,1)*x(3,0)+DataType(16)*x(0,0)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(0,1),DataType(3))-DataType(24)*Math::sqr(x(0,1))*x(1,1)+DataType(126)*Math::sqr(x(0,1))*x(2,1)+DataType(9)*Math::sqr(x(0,1))*x(3,1)-DataType(7)*x(0,1)*Math::sqr(x(1,0))+DataType(16)*x(0,1)*x(1,0)*x(2,0)-DataType(16)*x(0,1)*x(1,0)*x(3,0)+DataType(9)*x(0,1)*Math::sqr(x(1,1))+DataType(18)*x(0,1)*x(1,1)*x(2,1)+DataType(12)*x(0,1)*x(1,1)*x(3,1)-DataType(37)*x(0,1)*Math::sqr(x(2,0))+DataType(14)*x(0,1)*x(2,0)*x(3,0)-DataType(111)*x(0,1)*Math::sqr(x(2,1))-DataType(48)*x(0,1)*x(2,1)*x(3,1)-DataType(7)*x(0,1)*Math::sqr(x(3,0))+DataType(9)*x(0,1)*Math::sqr(x(3,1))-DataType(38)*Math::sqr(x(1,0))*x(1,1)+DataType(52)*Math::sqr(x(1,0))*x(2,1)-DataType(7)*Math::sqr(x(1,0))*x(3,1)+DataType(44)*x(1,0)*x(1,1)*x(2,0)+DataType(16)*x(1,0)*x(1,1)*x(3,0)-DataType(76)*x(1,0)*x(2,0)*x(2,1)+DataType(16)*x(1,0)*x(2,0)*x(3,1)-DataType(14)*x(1,0)*x(2,1)*x(3,0)+DataType(14)*x(1,0)*x(3,0)*x(3,1)-DataType(38)*Math::pow(x(1,1),DataType(3))+DataType(96)*Math::sqr(x(1,1))*x(2,1)+DataType(9)*Math::sqr(x(1,1))*x(3,1)-DataType(38)*x(1,1)*Math::sqr(x(2,0))+DataType(16)*x(1,1)*x(2,0)*x(3,0)-DataType(114)*x(1,1)*Math::sqr(x(2,1))+DataType(18)*x(1,1)*x(2,1)*x(3,1)-DataType(38)*x(1,1)*Math::sqr(x(3,0))-DataType(24)*x(1,1)*Math::sqr(x(3,1))+DataType(112)*Math::sqr(x(2,0))*x(2,1)-DataType(37)*Math::sqr(x(2,0))*x(3,1)-DataType(74)*x(2,0)*x(2,1)*x(3,0)+DataType(44)*x(2,0)*x(3,0)*x(3,1)+DataType(112)*Math::pow(x(2,1),DataType(3))-DataType(111)*Math::sqr(x(2,1))*x(3,1)+DataType(82)*x(2,1)*Math::sqr(x(3,0))+DataType(126)*x(2,1)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(3,0))*x(3,1)-DataType(37)*Math::pow(x(3,1),DataType(3)))/(h*h*h*h)/DataType(720);
 
  341            grad_frobenius_part(3,0) += this->_fac_frobenius*(DataType(480)*h*h*x(0,0)+DataType(240)*h*h*x(1,0)+DataType(240)*h*h*x(2,0)-DataType(960)*h*h*x(3,0)-DataType(38)*Math::pow(x(0,0),DataType(3))+DataType(9)*Math::sqr(x(0,0))*x(1,0)+DataType(9)*Math::sqr(x(0,0))*x(2,0)+DataType(96)*Math::sqr(x(0,0))*x(3,0)-DataType(38)*x(0,0)*Math::sqr(x(0,1))+DataType(16)*x(0,0)*x(0,1)*x(1,1)+DataType(16)*x(0,0)*x(0,1)*x(2,1)+DataType(44)*x(0,0)*x(0,1)*x(3,1)-DataType(24)*x(0,0)*Math::sqr(x(1,0))+DataType(12)*x(0,0)*x(1,0)*x(2,0)+DataType(18)*x(0,0)*x(1,0)*x(3,0)-DataType(38)*x(0,0)*Math::sqr(x(1,1))+DataType(44)*x(0,0)*x(1,1)*x(2,1)+DataType(16)*x(0,0)*x(1,1)*x(3,1)-DataType(24)*x(0,0)*Math::sqr(x(2,0))+DataType(18)*x(0,0)*x(2,0)*x(3,0)-DataType(38)*x(0,0)*Math::sqr(x(2,1))+DataType(16)*x(0,0)*x(2,1)*x(3,1)-DataType(114)*x(0,0)*Math::sqr(x(3,0))-DataType(38)*x(0,0)*Math::sqr(x(3,1))-DataType(7)*Math::sqr(x(0,1))*x(1,0)-DataType(7)*Math::sqr(x(0,1))*x(2,0)+DataType(52)*Math::sqr(x(0,1))*x(3,0)+DataType(14)*x(0,1)*x(1,0)*x(1,1)-DataType(16)*x(0,1)*x(1,0)*x(2,1)+DataType(16)*x(0,1)*x(1,0)*x(3,1)-DataType(16)*x(0,1)*x(1,1)*x(2,0)-DataType(14)*x(0,1)*x(1,1)*x(3,0)+DataType(14)*x(0,1)*x(2,0)*x(2,1)+DataType(16)*x(0,1)*x(2,0)*x(3,1)-DataType(14)*x(0,1)*x(2,1)*x(3,0)-DataType(76)*x(0,1)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(1,0),DataType(3))+DataType(9)*Math::sqr(x(1,0))*x(2,0)+DataType(126)*Math::sqr(x(1,0))*x(3,0)-DataType(37)*x(1,0)*Math::sqr(x(1,1))+DataType(16)*x(1,0)*x(1,1)*x(2,1)+DataType(44)*x(1,0)*x(1,1)*x(3,1)+DataType(9)*x(1,0)*Math::sqr(x(2,0))-DataType(48)*x(1,0)*x(2,0)*x(3,0)-DataType(7)*x(1,0)*Math::sqr(x(2,1))+DataType(14)*x(1,0)*x(2,1)*x(3,1)-DataType(111)*x(1,0)*Math::sqr(x(3,0))-DataType(37)*x(1,0)*Math::sqr(x(3,1))-DataType(7)*Math::sqr(x(1,1))*x(2,0)+DataType(82)*Math::sqr(x(1,1))*x(3,0)+DataType(16)*x(1,1)*x(2,0)*x(2,1)+DataType(14)*x(1,1)*x(2,0)*x(3,1)-DataType(76)*x(1,1)*x(2,1)*x(3,0)-DataType(74)*x(1,1)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(2,0),DataType(3))+DataType(126)*Math::sqr(x(2,0))*x(3,0)-DataType(37)*x(2,0)*Math::sqr(x(2,1))+DataType(44)*x(2,0)*x(2,1)*x(3,1)-DataType(111)*x(2,0)*Math::sqr(x(3,0))-DataType(37)*x(2,0)*Math::sqr(x(3,1))+DataType(82)*Math::sqr(x(2,1))*x(3,0)-DataType(74)*x(2,1)*x(3,0)*x(3,1)+DataType(112)*Math::pow(x(3,0),DataType(3))+DataType(112)*x(3,0)*Math::sqr(x(3,1)))/(h*h*h*h)/DataType(720);
 
  343            grad_frobenius_part(3,1) += this->_fac_frobenius*(DataType(480)*h*h*x(0,1)+DataType(240)*h*h*x(1,1)+DataType(240)*h*h*x(2,1)-DataType(960)*h*h*x(3,1)-DataType(38)*Math::sqr(x(0,0))*x(0,1)-DataType(7)*Math::sqr(x(0,0))*x(1,1)-DataType(7)*Math::sqr(x(0,0))*x(2,1)+DataType(52)*Math::sqr(x(0,0))*x(3,1)+DataType(16)*x(0,0)*x(0,1)*x(1,0)+DataType(16)*x(0,0)*x(0,1)*x(2,0)+DataType(44)*x(0,0)*x(0,1)*x(3,0)+DataType(14)*x(0,0)*x(1,0)*x(1,1)-DataType(16)*x(0,0)*x(1,0)*x(2,1)-DataType(14)*x(0,0)*x(1,0)*x(3,1)-DataType(16)*x(0,0)*x(1,1)*x(2,0)+DataType(16)*x(0,0)*x(1,1)*x(3,0)+DataType(14)*x(0,0)*x(2,0)*x(2,1)-DataType(14)*x(0,0)*x(2,0)*x(3,1)+DataType(16)*x(0,0)*x(2,1)*x(3,0)-DataType(76)*x(0,0)*x(3,0)*x(3,1)-DataType(38)*Math::pow(x(0,1),DataType(3))+DataType(9)*Math::sqr(x(0,1))*x(1,1)+DataType(9)*Math::sqr(x(0,1))*x(2,1)+DataType(96)*Math::sqr(x(0,1))*x(3,1)-DataType(38)*x(0,1)*Math::sqr(x(1,0))+DataType(44)*x(0,1)*x(1,0)*x(2,0)+DataType(16)*x(0,1)*x(1,0)*x(3,0)-DataType(24)*x(0,1)*Math::sqr(x(1,1))+DataType(12)*x(0,1)*x(1,1)*x(2,1)+DataType(18)*x(0,1)*x(1,1)*x(3,1)-DataType(38)*x(0,1)*Math::sqr(x(2,0))+DataType(16)*x(0,1)*x(2,0)*x(3,0)-DataType(24)*x(0,1)*Math::sqr(x(2,1))+DataType(18)*x(0,1)*x(2,1)*x(3,1)-DataType(38)*x(0,1)*Math::sqr(x(3,0))-DataType(114)*x(0,1)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(1,0))*x(1,1)-DataType(7)*Math::sqr(x(1,0))*x(2,1)+DataType(82)*Math::sqr(x(1,0))*x(3,1)+DataType(16)*x(1,0)*x(1,1)*x(2,0)+DataType(44)*x(1,0)*x(1,1)*x(3,0)+DataType(16)*x(1,0)*x(2,0)*x(2,1)-DataType(76)*x(1,0)*x(2,0)*x(3,1)+DataType(14)*x(1,0)*x(2,1)*x(3,0)-DataType(74)*x(1,0)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(1,1),DataType(3))+DataType(9)*Math::sqr(x(1,1))*x(2,1)+DataType(126)*Math::sqr(x(1,1))*x(3,1)-DataType(7)*x(1,1)*Math::sqr(x(2,0))+DataType(14)*x(1,1)*x(2,0)*x(3,0)+DataType(9)*x(1,1)*Math::sqr(x(2,1))-DataType(48)*x(1,1)*x(2,1)*x(3,1)-DataType(37)*x(1,1)*Math::sqr(x(3,0))-DataType(111)*x(1,1)*Math::sqr(x(3,1))-DataType(37)*Math::sqr(x(2,0))*x(2,1)+DataType(82)*Math::sqr(x(2,0))*x(3,1)+DataType(44)*x(2,0)*x(2,1)*x(3,0)-DataType(74)*x(2,0)*x(3,0)*x(3,1)-DataType(37)*Math::pow(x(2,1),DataType(3))+DataType(126)*Math::sqr(x(2,1))*x(3,1)-DataType(37)*x(2,1)*Math::sqr(x(3,0))-DataType(111)*x(2,1)*Math::sqr(x(3,1))+DataType(112)*Math::sqr(x(3,0))*x(3,1)+DataType(112)*Math::pow(x(3,1),DataType(3)))/(h*h*h*h)/DataType(720);
 
  351          void NOINLINE add_grad_det_1_part(Tx& grad_det_1_part, 
const Tx& x, 
const DataType& h)
 
  353            grad_det_1_part(0,0) += this->_fac_det*(x(1,1)-x(2,1))/Math::sqr(h)/DataType(8);
 
  355            grad_det_1_part(0,1) += this->_fac_det*(-x(1,0)+x(2,0))/Math::sqr(h)/DataType(8);
 
  357            grad_det_1_part(1,0) += this->_fac_det*(-x(0,1)+x(3,1))/Math::sqr(h)/DataType(8);
 
  359            grad_det_1_part(1,1) += this->_fac_det*(x(0,0)-x(3,0))/Math::sqr(h)/DataType(8);
 
  361            grad_det_1_part(2,0) += this->_fac_det*(x(0,1)-x(3,1))/Math::sqr(h)/DataType(8);
 
  363            grad_det_1_part(2,1) += this->_fac_det*(-x(0,0)+x(3,0))/Math::sqr(h)/DataType(8);
 
  365            grad_det_1_part(3,0) += this->_fac_det*(-x(1,1)+x(2,1))/Math::sqr(h)/DataType(8);
 
  367            grad_det_1_part(3,1) += this->_fac_det*(x(1,0)-x(2,0))/Math::sqr(h)/DataType(8);
 
  373          void NOINLINE add_grad_det_2_part(Tx& grad_det_2_part, 
const Tx& x, 
const DataType& h)
 
  375            grad_det_2_part(0,0) += this->_fac_det*(DataType(4)*x(0,0)*Math::sqr(x(1,1))-DataType(6)*x(0,0)*x(1,1)*x(2,1)-DataType(2)*x(0,0)*x(1,1)*x(3,1)+DataType(4)*x(0,0)*Math::sqr(x(2,1))-DataType(2)*x(0,0)*x(2,1)*x(3,1)+DataType(2)*x(0,0)*Math::sqr(x(3,1))-DataType(4)*x(0,1)*x(1,0)*x(1,1)+DataType(3)*x(0,1)*x(1,0)*x(2,1)+x(0,1)*x(1,0)*x(3,1)+DataType(3)*x(0,1)*x(1,1)*x(2,0)+x(0,1)*x(1,1)*x(3,0)-DataType(4)*x(0,1)*x(2,0)*x(2,1)+x(0,1)*x(2,0)*x(3,1)+x(0,1)*x(2,1)*x(3,0)-DataType(2)*x(0,1)*x(3,0)*x(3,1)+x(1,0)*x(1,1)*x(2,1)+DataType(3)*x(1,0)*x(1,1)*x(3,1)-x(1,0)*Math::sqr(x(2,1))-DataType(2)*x(1,0)*x(2,1)*x(3,1)-x(1,0)*Math::sqr(x(3,1))-Math::sqr(x(1,1))*x(2,0)-DataType(3)*Math::sqr(x(1,1))*x(3,0)+x(1,1)*x(2,0)*x(2,1)-DataType(2)*x(1,1)*x(2,0)*x(3,1)+DataType(4)*x(1,1)*x(2,1)*x(3,0)+x(1,1)*x(3,0)*x(3,1)+DataType(3)*x(2,0)*x(2,1)*x(3,1)-x(2,0)*Math::sqr(x(3,1))-DataType(3)*Math::sqr(x(2,1))*x(3,0)+x(2,1)*x(3,0)*x(3,1))/(h*h*h*h)/DataType(96);
 
  377            grad_det_2_part(0,1) += this->_fac_det*(-DataType(4)*x(0,0)*x(1,0)*x(1,1)+DataType(3)*x(0,0)*x(1,0)*x(2,1)+x(0,0)*x(1,0)*x(3,1)+DataType(3)*x(0,0)*x(1,1)*x(2,0)+x(0,0)*x(1,1)*x(3,0)-DataType(4)*x(0,0)*x(2,0)*x(2,1)+x(0,0)*x(2,0)*x(3,1)+x(0,0)*x(2,1)*x(3,0)-DataType(2)*x(0,0)*x(3,0)*x(3,1)+DataType(4)*x(0,1)*Math::sqr(x(1,0))-DataType(6)*x(0,1)*x(1,0)*x(2,0)-DataType(2)*x(0,1)*x(1,0)*x(3,0)+DataType(4)*x(0,1)*Math::sqr(x(2,0))-DataType(2)*x(0,1)*x(2,0)*x(3,0)+DataType(2)*x(0,1)*Math::sqr(x(3,0))-Math::sqr(x(1,0))*x(2,1)-DataType(3)*Math::sqr(x(1,0))*x(3,1)+x(1,0)*x(1,1)*x(2,0)+DataType(3)*x(1,0)*x(1,1)*x(3,0)+x(1,0)*x(2,0)*x(2,1)+DataType(4)*x(1,0)*x(2,0)*x(3,1)-DataType(2)*x(1,0)*x(2,1)*x(3,0)+x(1,0)*x(3,0)*x(3,1)-x(1,1)*Math::sqr(x(2,0))-DataType(2)*x(1,1)*x(2,0)*x(3,0)-x(1,1)*Math::sqr(x(3,0))-DataType(3)*Math::sqr(x(2,0))*x(3,1)+DataType(3)*x(2,0)*x(2,1)*x(3,0)+x(2,0)*x(3,0)*x(3,1)-x(2,1)*Math::sqr(x(3,0)))/(h*h*h*h)/DataType(96);
 
  379            grad_det_2_part(1,0) += this->_fac_det*(-DataType(4)*x(0,0)*x(0,1)*x(1,1)+DataType(3)*x(0,0)*x(0,1)*x(2,1)+x(0,0)*x(0,1)*x(3,1)+x(0,0)*x(1,1)*x(2,1)+DataType(3)*x(0,0)*x(1,1)*x(3,1)-x(0,0)*Math::sqr(x(2,1))-DataType(2)*x(0,0)*x(2,1)*x(3,1)-x(0,0)*Math::sqr(x(3,1))+DataType(4)*Math::sqr(x(0,1))*x(1,0)-DataType(3)*Math::sqr(x(0,1))*x(2,0)-Math::sqr(x(0,1))*x(3,0)-DataType(2)*x(0,1)*x(1,0)*x(2,1)-DataType(6)*x(0,1)*x(1,0)*x(3,1)+x(0,1)*x(1,1)*x(2,0)+DataType(3)*x(0,1)*x(1,1)*x(3,0)+x(0,1)*x(2,0)*x(2,1)+DataType(4)*x(0,1)*x(2,0)*x(3,1)-DataType(2)*x(0,1)*x(2,1)*x(3,0)+x(0,1)*x(3,0)*x(3,1)+DataType(2)*x(1,0)*Math::sqr(x(2,1))-DataType(2)*x(1,0)*x(2,1)*x(3,1)+DataType(4)*x(1,0)*Math::sqr(x(3,1))-DataType(2)*x(1,1)*x(2,0)*x(2,1)+x(1,1)*x(2,0)*x(3,1)+x(1,1)*x(2,1)*x(3,0)-DataType(4)*x(1,1)*x(3,0)*x(3,1)+x(2,0)*x(2,1)*x(3,1)-DataType(3)*x(2,0)*Math::sqr(x(3,1))-Math::sqr(x(2,1))*x(3,0)+DataType(3)*x(2,1)*x(3,0)*x(3,1))/(h*h*h*h)/DataType(96);
 
  381            grad_det_2_part(1,1) += this->_fac_det*(DataType(4)*Math::sqr(x(0,0))*x(1,1)-DataType(3)*Math::sqr(x(0,0))*x(2,1)-Math::sqr(x(0,0))*x(3,1)-DataType(4)*x(0,0)*x(0,1)*x(1,0)+DataType(3)*x(0,0)*x(0,1)*x(2,0)+x(0,0)*x(0,1)*x(3,0)+x(0,0)*x(1,0)*x(2,1)+DataType(3)*x(0,0)*x(1,0)*x(3,1)-DataType(2)*x(0,0)*x(1,1)*x(2,0)-DataType(6)*x(0,0)*x(1,1)*x(3,0)+x(0,0)*x(2,0)*x(2,1)-DataType(2)*x(0,0)*x(2,0)*x(3,1)+DataType(4)*x(0,0)*x(2,1)*x(3,0)+x(0,0)*x(3,0)*x(3,1)+x(0,1)*x(1,0)*x(2,0)+DataType(3)*x(0,1)*x(1,0)*x(3,0)-x(0,1)*Math::sqr(x(2,0))-DataType(2)*x(0,1)*x(2,0)*x(3,0)-x(0,1)*Math::sqr(x(3,0))-DataType(2)*x(1,0)*x(2,0)*x(2,1)+x(1,0)*x(2,0)*x(3,1)+x(1,0)*x(2,1)*x(3,0)-DataType(4)*x(1,0)*x(3,0)*x(3,1)+DataType(2)*x(1,1)*Math::sqr(x(2,0))-DataType(2)*x(1,1)*x(2,0)*x(3,0)+DataType(4)*x(1,1)*Math::sqr(x(3,0))-Math::sqr(x(2,0))*x(3,1)+x(2,0)*x(2,1)*x(3,0)+DataType(3)*x(2,0)*x(3,0)*x(3,1)-DataType(3)*x(2,1)*Math::sqr(x(3,0)))/(h*h*h*h)/DataType(96);
 
  383            grad_det_2_part(2,0) += this->_fac_det*(DataType(3)*x(0,0)*x(0,1)*x(1,1)-DataType(4)*x(0,0)*x(0,1)*x(2,1)+x(0,0)*x(0,1)*x(3,1)-x(0,0)*Math::sqr(x(1,1))+x(0,0)*x(1,1)*x(2,1)-DataType(2)*x(0,0)*x(1,1)*x(3,1)+DataType(3)*x(0,0)*x(2,1)*x(3,1)-x(0,0)*Math::sqr(x(3,1))-DataType(3)*Math::sqr(x(0,1))*x(1,0)+DataType(4)*Math::sqr(x(0,1))*x(2,0)-Math::sqr(x(0,1))*x(3,0)+x(0,1)*x(1,0)*x(1,1)+x(0,1)*x(1,0)*x(2,1)+DataType(4)*x(0,1)*x(1,0)*x(3,1)-DataType(2)*x(0,1)*x(1,1)*x(2,0)-DataType(2)*x(0,1)*x(1,1)*x(3,0)-DataType(6)*x(0,1)*x(2,0)*x(3,1)+DataType(3)*x(0,1)*x(2,1)*x(3,0)+x(0,1)*x(3,0)*x(3,1)-DataType(2)*x(1,0)*x(1,1)*x(2,1)+x(1,0)*x(1,1)*x(3,1)+x(1,0)*x(2,1)*x(3,1)-DataType(3)*x(1,0)*Math::sqr(x(3,1))+DataType(2)*Math::sqr(x(1,1))*x(2,0)-Math::sqr(x(1,1))*x(3,0)-DataType(2)*x(1,1)*x(2,0)*x(3,1)+x(1,1)*x(2,1)*x(3,0)+DataType(3)*x(1,1)*x(3,0)*x(3,1)+DataType(4)*x(2,0)*Math::sqr(x(3,1))-DataType(4)*x(2,1)*x(3,0)*x(3,1))/(h*h*h*h)/DataType(96);
 
  385            grad_det_2_part(2,1) += this->_fac_det*(-DataType(3)*Math::sqr(x(0,0))*x(1,1)+DataType(4)*Math::sqr(x(0,0))*x(2,1)-Math::sqr(x(0,0))*x(3,1)+DataType(3)*x(0,0)*x(0,1)*x(1,0)-DataType(4)*x(0,0)*x(0,1)*x(2,0)+x(0,0)*x(0,1)*x(3,0)+x(0,0)*x(1,0)*x(1,1)-DataType(2)*x(0,0)*x(1,0)*x(2,1)-DataType(2)*x(0,0)*x(1,0)*x(3,1)+x(0,0)*x(1,1)*x(2,0)+DataType(4)*x(0,0)*x(1,1)*x(3,0)+DataType(3)*x(0,0)*x(2,0)*x(3,1)-DataType(6)*x(0,0)*x(2,1)*x(3,0)+x(0,0)*x(3,0)*x(3,1)-x(0,1)*Math::sqr(x(1,0))+x(0,1)*x(1,0)*x(2,0)-DataType(2)*x(0,1)*x(1,0)*x(3,0)+DataType(3)*x(0,1)*x(2,0)*x(3,0)-x(0,1)*Math::sqr(x(3,0))+DataType(2)*Math::sqr(x(1,0))*x(2,1)-Math::sqr(x(1,0))*x(3,1)-DataType(2)*x(1,0)*x(1,1)*x(2,0)+x(1,0)*x(1,1)*x(3,0)+x(1,0)*x(2,0)*x(3,1)-DataType(2)*x(1,0)*x(2,1)*x(3,0)+DataType(3)*x(1,0)*x(3,0)*x(3,1)+x(1,1)*x(2,0)*x(3,0)-DataType(3)*x(1,1)*Math::sqr(x(3,0))-DataType(4)*x(2,0)*x(3,0)*x(3,1)+DataType(4)*x(2,1)*Math::sqr(x(3,0)))/(h*h*h*h)/DataType(96);
 
  387            grad_det_2_part(3,0) += this->_fac_det*(x(0,0)*x(0,1)*x(1,1)+x(0,0)*x(0,1)*x(2,1)-DataType(2)*x(0,0)*x(0,1)*x(3,1)-DataType(3)*x(0,0)*Math::sqr(x(1,1))+DataType(4)*x(0,0)*x(1,1)*x(2,1)+x(0,0)*x(1,1)*x(3,1)-DataType(3)*x(0,0)*Math::sqr(x(2,1))+x(0,0)*x(2,1)*x(3,1)-Math::sqr(x(0,1))*x(1,0)-Math::sqr(x(0,1))*x(2,0)+DataType(2)*Math::sqr(x(0,1))*x(3,0)+DataType(3)*x(0,1)*x(1,0)*x(1,1)-DataType(2)*x(0,1)*x(1,0)*x(2,1)+x(0,1)*x(1,0)*x(3,1)-DataType(2)*x(0,1)*x(1,1)*x(2,0)-DataType(2)*x(0,1)*x(1,1)*x(3,0)+DataType(3)*x(0,1)*x(2,0)*x(2,1)+x(0,1)*x(2,0)*x(3,1)-DataType(2)*x(0,1)*x(2,1)*x(3,0)+x(1,0)*x(1,1)*x(2,1)-DataType(4)*x(1,0)*x(1,1)*x(3,1)-x(1,0)*Math::sqr(x(2,1))+DataType(3)*x(1,0)*x(2,1)*x(3,1)-Math::sqr(x(1,1))*x(2,0)+DataType(4)*Math::sqr(x(1,1))*x(3,0)+x(1,1)*x(2,0)*x(2,1)+DataType(3)*x(1,1)*x(2,0)*x(3,1)-DataType(6)*x(1,1)*x(2,1)*x(3,0)-DataType(4)*x(2,0)*x(2,1)*x(3,1)+DataType(4)*Math::sqr(x(2,1))*x(3,0))/(h*h*h*h)/DataType(96);
 
  389            grad_det_2_part(3,1) += this->_fac_det*(-Math::sqr(x(0,0))*x(1,1)-Math::sqr(x(0,0))*x(2,1)+DataType(2)*Math::sqr(x(0,0))*x(3,1)+x(0,0)*x(0,1)*x(1,0)+x(0,0)*x(0,1)*x(2,0)-DataType(2)*x(0,0)*x(0,1)*x(3,0)+DataType(3)*x(0,0)*x(1,0)*x(1,1)-DataType(2)*x(0,0)*x(1,0)*x(2,1)-DataType(2)*x(0,0)*x(1,0)*x(3,1)-DataType(2)*x(0,0)*x(1,1)*x(2,0)+x(0,0)*x(1,1)*x(3,0)+DataType(3)*x(0,0)*x(2,0)*x(2,1)-DataType(2)*x(0,0)*x(2,0)*x(3,1)+x(0,0)*x(2,1)*x(3,0)-DataType(3)*x(0,1)*Math::sqr(x(1,0))+DataType(4)*x(0,1)*x(1,0)*x(2,0)+x(0,1)*x(1,0)*x(3,0)-DataType(3)*x(0,1)*Math::sqr(x(2,0))+x(0,1)*x(2,0)*x(3,0)-Math::sqr(x(1,0))*x(2,1)+DataType(4)*Math::sqr(x(1,0))*x(3,1)+x(1,0)*x(1,1)*x(2,0)-DataType(4)*x(1,0)*x(1,1)*x(3,0)+x(1,0)*x(2,0)*x(2,1)-DataType(6)*x(1,0)*x(2,0)*x(3,1)+DataType(3)*x(1,0)*x(2,1)*x(3,0)-x(1,1)*Math::sqr(x(2,0))+DataType(3)*x(1,1)*x(2,0)*x(3,0)+DataType(4)*Math::sqr(x(2,0))*x(3,1)-DataType(4)*x(2,0)*x(2,1)*x(3,0))/(h*h*h*h)/DataType(96);
 
  395          void NOINLINE add_grad_rec_det_1_part(Tx& grad_rec_det_1_part, 
const Tx& x, 
const DataType& h)
 
  397            grad_rec_det_1_part(0,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(1,1)+DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(-DataType(2)*x(1,1)+DataType(2)*x(2,1))/DataType(8))/DataType(4)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(2,1)-DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(2,1)-DataType(2)*x(3,1))/DataType(8))/DataType(4));
 
  399            grad_rec_det_1_part(0,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(1,0)-DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(DataType(2)*x(1,0)-DataType(2)*x(2,0))/DataType(8))/DataType(4)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(1,0)-DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(1,0)-DataType(2)*x(3,0))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/DataType(8))/DataType(4));
 
  401            grad_rec_det_1_part(1,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(0,1)-DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(DataType(2)*x(0,1)-DataType(2)*x(2,1))/DataType(8))/DataType(4)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(0,1)-DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,1)-DataType(2)*x(3,1))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(2,1)-DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(2,1)-DataType(2)*x(3,1))/DataType(8))/DataType(4));
 
  403            grad_rec_det_1_part(1,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/DataType(8))/DataType(4)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(0,0)+DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,0)+DataType(2)*x(3,0))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/DataType(8))/DataType(4));
 
  405            grad_rec_det_1_part(2,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(0,1)+DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,1)+DataType(2)*x(3,1))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/DataType(8))/DataType(4));
 
  407            grad_rec_det_1_part(2,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(0,0)-DataType(2)*x(1,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(DataType(2)*x(0,0)-DataType(2)*x(1,0))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(0,0)-DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,0)-DataType(2)*x(3,0))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(1,0)-DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(1,0)-DataType(2)*x(3,0))/DataType(8))/DataType(4));
 
  409            grad_rec_det_1_part(3,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(0,1)-DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,1)-DataType(2)*x(2,1))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(1,1)-DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(1,1)-DataType(2)*x(2,1))/DataType(8))/DataType(4));
 
  411            grad_rec_det_1_part(3,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(DataType(2)*x(0,0)-DataType(2)*x(1,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,0)-DataType(2)*x(1,0))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/DataType(8))/DataType(4)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(2))*(-(-DataType(2)*x(1,0)+DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(1,0)+DataType(2)*x(2,0))/DataType(8))/DataType(4));
 
  417          void NOINLINE add_grad_rec_det_2_part(Tx& grad_rec_det_2_part, 
const Tx& x, 
const DataType& h)
 
  419            grad_rec_det_2_part(0,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(1,1)+DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(-DataType(2)*x(1,1)+DataType(2)*x(2,1))/DataType(8))/DataType(2)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(2,1)-DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(2,1)-DataType(2)*x(3,1))/DataType(8))/DataType(2));
 
  421            grad_rec_det_2_part(0,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(1,0)-DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(DataType(2)*x(1,0)-DataType(2)*x(2,0))/DataType(8))/DataType(2)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(1,0)-DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(1,0)-DataType(2)*x(3,0))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/DataType(8))/DataType(2));
 
  423            grad_rec_det_2_part(1,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(0,1)-DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(DataType(2)*x(0,1)-DataType(2)*x(2,1))/DataType(8))/DataType(2)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(0,1)-DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,1)-DataType(2)*x(3,1))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(2,1)-DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(2,1)-DataType(2)*x(3,1))/DataType(8))/DataType(2));
 
  425            grad_rec_det_2_part(1,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/DataType(8))/DataType(2)-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(0,0)+DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,0)+DataType(2)*x(3,0))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(2,0)+DataType(2)*x(3,0))/DataType(8))/DataType(2));
 
  427            grad_rec_det_2_part(2,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(0,1)+DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,1)+DataType(2)*x(3,1))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(1,1)+DataType(2)*x(3,1))/DataType(8))/DataType(2));
 
  429            grad_rec_det_2_part(2,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(0,0)-DataType(2)*x(1,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(2,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(2,0)-DataType(2)*x(1,0)*x(2,1)+DataType(2)*x(1,1)*x(2,0))/(h*h*h*h)*(DataType(2)*x(0,0)-DataType(2)*x(1,0))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(0,0)-DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,0)-DataType(2)*x(3,0))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(1,0)-DataType(2)*x(3,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(1,0)-DataType(2)*x(3,0))/DataType(8))/DataType(2));
 
  431            grad_rec_det_2_part(3,0) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,1)+DataType(2)*x(1,1))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(0,1)-DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,1)-DataType(2)*x(2,1))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(1,1)-DataType(2)*x(2,1))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(1,1)-DataType(2)*x(2,1))/DataType(8))/DataType(2));
 
  433            grad_rec_det_2_part(3,1) += this->_fac_rec_det*(-Math::pow(-(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(DataType(2)*x(0,0)-DataType(2)*x(1,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(-DataType(2)*x(0,0)*x(1,1)+DataType(2)*x(0,0)*x(3,1)+DataType(2)*x(0,1)*x(1,0)-DataType(2)*x(0,1)*x(3,0)-DataType(2)*x(1,0)*x(3,1)+DataType(2)*x(1,1)*x(3,0))/(h*h*h*h)*(DataType(2)*x(0,0)-DataType(2)*x(1,0))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(0,0)*x(2,1)-DataType(2)*x(0,0)*x(3,1)-DataType(2)*x(0,1)*x(2,0)+DataType(2)*x(0,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(0,0)+DataType(2)*x(2,0))/DataType(8))/DataType(2)-Math::pow(-(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/Math::sqr(h)/DataType(8)+Math::sqrt(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h))/DataType(8),-DataType(3))*(-(-DataType(2)*x(1,0)+DataType(2)*x(2,0))/Math::sqr(h)/DataType(8)+Math::pow(DataType(64)*this->_fac_reg*this->_fac_reg+Math::pow(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0),DataType(2))/(h*h*h*h),-DataType(1)/DataType(2))*(DataType(2)*x(1,0)*x(2,1)-DataType(2)*x(1,0)*x(3,1)-DataType(2)*x(1,1)*x(2,0)+DataType(2)*x(1,1)*x(3,0)+DataType(2)*x(2,0)*x(3,1)-DataType(2)*x(2,1)*x(3,0))/(h*h*h*h)*(-DataType(2)*x(1,0)+DataType(2)*x(2,0))/DataType(8))/DataType(2));
 
#define XASSERTM(expr, msg)
Assertion macro definition with custom message.
T_ sqrt(T_ x)
Returns the square-root of a value.
T_ pow(T_ x, T_ y)
Returns x raised to the power of y.
T_ sqr(T_ x)
Returns the square of a value.
String stringify(const T_ &item)
Converts an item into a String.
@ grad
specifies whether the space should supply basis function gradients
std::uint64_t Index
Index data type.