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