7 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>
AMIPS2d_gradient(
const RowVectorNd &p,
const double t,
const int el_id,
const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>&
F) {
8 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> grad(2,2);
9 const double F00 =
F(0, 0);
10 const double F01 =
F(0, 1);
11 const double F10 =
F(1, 0);
12 const double F11 =
F(1, 1);
13 std::array<double, 4> result_0;
14 const auto helper_0 = F00*F11 - F01*F10;
15const auto helper_1 = pow(helper_0, -2);
16const auto helper_2 = 2*F01;
17const auto helper_3 = F10 - 2*F11;
18const auto helper_4 = (1.0/2.0)*(3*pow(F00, 2) + 3*pow(F10, 2) + pow(helper_3, 2) + pow(F00 - helper_2, 2))/helper_0;
19result_0[0] = helper_1*(2*F00 - F01 - F11*helper_4);
20result_0[1] = helper_1*(-F00 + F10*helper_4 + helper_2);
21result_0[2] = helper_1*(F01*helper_4 + 2*F10 - F11);
22result_0[3] = -helper_1*(F00*helper_4 + helper_3);;
23 grad(0, 0) = result_0[0];
24 grad(0, 1) = result_0[1];
25 grad(1, 0) = result_0[2];
26 grad(1, 1) = result_0[3];
30 inline Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9>
AMIPS2d_hessian(
const RowVectorNd &p,
const double t,
const int el_id,
const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>&
F) {
31 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9> hess(4,4);
32 std::array<double, 16> result_0;
33 const double F00 =
F(0, 0);
34 const double F01 =
F(0, 1);
35 const double F10 =
F(1, 0);
36 const double F11 =
F(1, 1);
37 const auto helper_0 = F01*F10;
38const auto helper_1 = F00*F11 - helper_0;
39const auto helper_2 = pow(helper_1, -2);
40const auto helper_3 = 2*F00;
41const auto helper_4 = -F01 + helper_3;
42const auto helper_5 = 1.0/helper_1;
43const auto helper_6 = pow(F00, 2);
44const auto helper_7 = pow(F10, 2);
45const auto helper_8 = 2*F01;
46const auto helper_9 = F00 - helper_8;
47const auto helper_10 = pow(helper_9, 2);
48const auto helper_11 = 2*F11;
49const auto helper_12 = F10 - helper_11;
50const auto helper_13 = pow(helper_12, 2);
51const auto helper_14 = helper_10 + helper_13 + 3*helper_6 + 3*helper_7;
52const auto helper_15 = helper_14*helper_2;
53const auto helper_16 = (3.0/2.0)*helper_15;
54const auto helper_17 = helper_2*(-F10*F11*helper_16 + 2*F10*helper_4*helper_5 + 2*F11*helper_5*helper_9 - 1);
55const auto helper_18 = pow(helper_1, -3);
56const auto helper_19 = 2*F10;
57const auto helper_20 = -F11 + helper_19;
58const auto helper_21 = (3.0/2.0)*helper_14*helper_5;
59const auto helper_22 = helper_18*(-F01*F11*helper_21 + 2*F01*helper_4 - helper_11*helper_20);
60const auto helper_23 = (3.0/2.0)*helper_6;
61const auto helper_24 = (3.0/2.0)*helper_7;
62const auto helper_25 = (1.0/2.0)*helper_10 + (1.0/2.0)*helper_13 + helper_23 + helper_24;
63const auto helper_26 = helper_18*((3.0/2.0)*F00*F11*helper_14*helper_5 + 2*F11*helper_12 - helper_25 - helper_3*helper_4);
64const auto helper_27 = helper_18*(helper_0*helper_21 + helper_19*helper_20 + helper_25 - helper_8*helper_9);
65const auto helper_28 = helper_18*(-F00*F10*helper_21 + 2*F00*helper_9 - helper_12*helper_19);
66const auto helper_29 = helper_20*helper_5;
67const auto helper_30 = helper_12*helper_5;
68const auto helper_31 = -helper_2*(F00*F01*helper_16 + helper_29*helper_3 + helper_30*helper_8 + 1);
69result_0[0] = helper_2*(pow(F11, 2)*helper_16 - 4*F11*helper_4*helper_5 + 2);
70result_0[1] = helper_17;
71result_0[2] = helper_22;
72result_0[3] = helper_26;
73result_0[4] = helper_17;
74result_0[5] = helper_2*(-4*F10*helper_5*helper_9 + helper_15*helper_24 + 2);
75result_0[6] = helper_27;
76result_0[7] = helper_28;
77result_0[8] = helper_22;
78result_0[9] = helper_27;
79result_0[10] = helper_2*(pow(F01, 2)*helper_16 + 4*F01*helper_29 + 2);
80result_0[11] = helper_31;
81result_0[12] = helper_26;
82result_0[13] = helper_28;
83result_0[14] = helper_31;
84result_0[15] = helper_2*(4*F00*helper_30 + helper_15*helper_23 + 2);;
85 hess(0, 0) = result_0[0];
86 hess(0, 1) = result_0[1];
87 hess(0, 2) = result_0[2];
88 hess(0, 3) = result_0[3];
89 hess(1, 0) = result_0[4];
90 hess(1, 1) = result_0[5];
91 hess(1, 2) = result_0[6];
92 hess(1, 3) = result_0[7];
93 hess(2, 0) = result_0[8];
94 hess(2, 1) = result_0[9];
95 hess(2, 2) = result_0[10];
96 hess(2, 3) = result_0[11];
97 hess(3, 0) = result_0[12];
98 hess(3, 1) = result_0[13];
99 hess(3, 2) = result_0[14];
100 hess(3, 3) = result_0[15];
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > AMIPS2d_gradient(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9 > AMIPS2d_hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F)