FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
2d_q1_unrolled.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
9#include <kernel/shape.hpp>
10#include <kernel/meshopt/base.hpp>
11#include <kernel/meshopt/rumpf_functional.hpp>
12
13namespace FEAT
14{
15 namespace Meshopt
16 {
18
25 template<typename DataType_>
26 class RumpfFunctionalUnrolled<DataType_,
27 Trafo::Standard::Mapping<Geometry::ConformalMesh<Shape::Hypercube<2>, 2, DataType_>>> :
28 public RumpfFunctionalBase<DataType_>
29 {
30 public:
32 typedef RumpfFunctionalBase<DataType_> BaseClass;
33
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;
46
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;
51
53 typedef Tiny::Matrix<DataType_, shape_dim, world_dim> TgradR;
54
56 typedef typename TrafoType::template Evaluator<ShapeType, DataType>::Type TrafoEvaluator;
58 typedef typename TrafoSpace::template Evaluator<TrafoEvaluator>::Type SpaceEvaluator;
59
60 private:
62 const int _exponent_det;
64 const bool _compute_frobenius;
66 const bool _compute_cof;
68 const bool _compute_det;
69
70 public:
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_,
81 fac_det_,
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_))),
83 fac_cof_,
84 fac_reg_),
85 _exponent_det(exponent_det_),
86 _compute_frobenius( (fac_frobenius_ > DataType(0)) ),
87 _compute_cof( false ),
88 _compute_det( (fac_det_ > 0) )
89 {
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.");
92 }
93
99 static String name()
100 {
101 return "RumpfFunctionalUnrolled<"+ShapeType::name()+">";
102 }
103
107 String info() const
108 {
109 const Index pad_width(30);
110 return name() + ":" + BaseClass::info() + String("\nexponent_det").pad_back(pad_width, '.')
111 + String(": ") + stringify(_exponent_det);
112 }
113
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)
118 {
119 fval = DataType(0);
120 grad.format(DataType(0));
121
122 DataType fval_frobenius(0);
123 DataType fval_det(0);
124 DataType fval_rec_det(0);
125
126 if(_compute_frobenius)
127 {
128 fval_frobenius = this->_fac_frobenius*compute_frobenius_part(x,h);
129 add_grad_frobenius_part(grad, x, h);
130 }
131
132 if(_compute_det)
133 {
134 if(_exponent_det == 1)
135 {
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);
140 }
141 else
142 {
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);
147 }
148 }
149
150 fval = fval_frobenius + fval_det + fval_rec_det;
151
152 }
153
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)
155 {
156 fval = DataType(0);
157 fval_frobenius = DataType(0);
158 fval_cof = DataType(0);
159 fval_det = DataType(0);
160
161 if(_compute_frobenius)
162 {
163 fval_frobenius = this->_fac_frobenius*compute_frobenius_part(x,h);
164 }
165
166 if(_compute_det)
167 {
168 if(_exponent_det == 1)
169 {
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);
172 }
173 else
174 {
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);
177 }
178 }
179
180 fval = fval_frobenius + fval_det;
181
182 }
183
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)
188 {
189
190 DataType frobenius_der_h(0);
191 DataType det_der_h(0);
192 DataType rec_det_der_h(0);
193
194 if(_compute_frobenius)
195 {
196 frobenius_der_h = this->_fac_frobenius*compute_frobenius_der_h_part(x,h);
197 }
198
199 if(_compute_det)
200 {
201 if(_exponent_det == 1)
202 {
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);
205 }
206 else
207 {
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);
210 }
211
212 }
213
214 DataType der_h(frobenius_der_h + det_der_h + rec_det_der_h);
215
216 for(int i(0); i < Tx::m; ++i)
217 {
218 for(int d(0); d < Tx::n; ++d)
219 {
220 grad(i,d) += der_h*grad_h(i*Tx::n + d);
221 }
222 }
223 } // add_grad_h_part
224
225
229 DataType NOINLINE compute_frobenius_part(const Tx& x, const DataType& h)
230 {
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;
234 }
235
236
240 DataType NOINLINE compute_det_1_part( const Tx& x, const DataType& h)
241 {
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;
245 }
249 DataType NOINLINE compute_det_2_part( const Tx& x, const DataType& h)
250 {
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;
254 }
255
259 DataType NOINLINE compute_rec_det_1_part( const Tx& x, const DataType& h)
260 {
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;
264 }
265
269 DataType NOINLINE compute_rec_det_2_part( const Tx& x, const DataType& h)
270 {
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;
274 }
278 DataType NOINLINE compute_frobenius_der_h_part(const Tx& x, const DataType& h)
279 {
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;
283 }
284
288 DataType NOINLINE compute_det_1_der_h_part( const Tx& x, const DataType& h)
289 {
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;
293 }
297 DataType NOINLINE compute_det_2_der_h_part( const Tx& x, const DataType& h)
298 {
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;
302 }
303
307 DataType NOINLINE compute_rec_det_1_der_h_part( const Tx& x, const DataType& h)
308 {
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;
312 }
313
317 DataType NOINLINE compute_rec_det_2_der_h_part( const Tx& x, const DataType& h)
318 {
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;
322 }
323
327 void NOINLINE add_grad_frobenius_part(Tx& grad_frobenius_part, const Tx& x, const DataType& h)
328 {
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);
330
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);
332
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);
334
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);
336
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);
338
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);
340
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);
342
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);
344
345 }
346
347
351 void NOINLINE add_grad_det_1_part(Tx& grad_det_1_part, const Tx& x, const DataType& h)
352 {
353 grad_det_1_part(0,0) += this->_fac_det*(x(1,1)-x(2,1))/Math::sqr(h)/DataType(8);
354
355 grad_det_1_part(0,1) += this->_fac_det*(-x(1,0)+x(2,0))/Math::sqr(h)/DataType(8);
356
357 grad_det_1_part(1,0) += this->_fac_det*(-x(0,1)+x(3,1))/Math::sqr(h)/DataType(8);
358
359 grad_det_1_part(1,1) += this->_fac_det*(x(0,0)-x(3,0))/Math::sqr(h)/DataType(8);
360
361 grad_det_1_part(2,0) += this->_fac_det*(x(0,1)-x(3,1))/Math::sqr(h)/DataType(8);
362
363 grad_det_1_part(2,1) += this->_fac_det*(-x(0,0)+x(3,0))/Math::sqr(h)/DataType(8);
364
365 grad_det_1_part(3,0) += this->_fac_det*(-x(1,1)+x(2,1))/Math::sqr(h)/DataType(8);
366
367 grad_det_1_part(3,1) += this->_fac_det*(x(1,0)-x(2,0))/Math::sqr(h)/DataType(8);
368 }
369
373 void NOINLINE add_grad_det_2_part(Tx& grad_det_2_part, const Tx& x, const DataType& h)
374 {
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);
376
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);
378
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);
380
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);
382
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);
384
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);
386
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);
388
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);
390 }
391
395 void NOINLINE add_grad_rec_det_1_part(Tx& grad_rec_det_1_part, const Tx& x, const DataType& h)
396 {
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));
398
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));
400
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));
402
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));
404
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));
406
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));
408
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));
410
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));
412 }
413
417 void NOINLINE add_grad_rec_det_2_part(Tx& grad_rec_det_2_part, const Tx& x, const DataType& h)
418 {
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));
420
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));
422
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));
424
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));
426
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));
428
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));
430
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));
432
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));
434 }
435
436 }; // class RumpfFunctionalUnrolled
437
438
439 //#ifdef FEAT_EICKT
440 // extern template class RumpfFunctionalUnrolled<double,
441 // Trafo::Standard::Mapping<Geometry::ConformalMesh<Shape::Hypercube<2>, 2, double>>>;
442 //#endif
444 } // namespace Meshopt
445} // namespace FEAT
#define XASSERTM(expr, msg)
Assertion macro definition with custom message.
Definition: assertion.hpp:263
FEAT Kernel base header.
T_ sqrt(T_ x)
Returns the square-root of a value.
Definition: math.hpp:300
T_ pow(T_ x, T_ y)
Returns x raised to the power of y.
Definition: math.hpp:643
T_ sqr(T_ x)
Returns the square of a value.
Definition: math.hpp:95
FEAT namespace.
Definition: adjactor.hpp:12
String stringify(const T_ &item)
Converts an item into a String.
Definition: string.hpp:944
@ grad
specifies whether the space should supply basis function gradients
std::uint64_t Index
Index data type.