PolyFEM
Loading...
Searching...
No Matches
AMIPS2drest.hpp
Go to the documentation of this file.
1// Auto-generated code for AMIPS2drest energy
2#pragma once
3#include <Eigen/Dense>
4
5namespace polyfem {
6 namespace autogen {
7 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3> AMIPS2drest_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) + pow(F01, 2) + pow(F10, 2) + pow(F11, 2));
16result_0[0] = helper_0*(2*F00 - F11*helper_1);
17result_0[1] = helper_0*(2*F01 + F10*helper_1);
18result_0[2] = helper_0*(F01*helper_1 + 2*F10);
19result_0[3] = helper_0*(-F00*helper_1 + 2*F11);;
20 grad(0, 0) = result_0[0];
21 grad(0, 1) = result_0[1];
22 grad(1, 0) = result_0[2];
23 grad(1, 1) = result_0[3];
24 return grad;
25 }
26
27 inline Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9> AMIPS2drest_hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>& F) {
28 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9> hess(4,4);
29 std::array<double, 16> result_0;
30 const double F00 = F(0, 0);
31 const double F01 = F(0, 1);
32 const double F10 = F(1, 0);
33 const double F11 = F(1, 1);
34 const auto helper_0 = pow(F11, 2);
35const auto helper_1 = F00*F11;
36const auto helper_2 = F01*F10;
37const auto helper_3 = helper_1 - helper_2;
38const auto helper_4 = pow(helper_3, -2);
39const auto helper_5 = pow(F01, 2);
40const auto helper_6 = pow(F10, 2);
41const auto helper_7 = helper_5 + helper_6;
42const auto helper_8 = pow(F00, 2);
43const auto helper_9 = helper_0 + helper_8;
44const auto helper_10 = helper_7 + helper_9;
45const auto helper_11 = helper_10*helper_4;
46const auto helper_12 = 1.0/helper_3;
47const auto helper_13 = 2*helper_12;
48const auto helper_14 = -helper_1*helper_13 + 1;
49const auto helper_15 = F01*F11;
50const auto helper_16 = F00*F10;
51const auto helper_17 = F10*F11;
52const auto helper_18 = helper_10*helper_12;
53const auto helper_19 = 2*helper_4;
54const auto helper_20 = helper_19*(-helper_15 + helper_16 - helper_17*helper_18);
55const auto helper_21 = F00*F01;
56const auto helper_22 = helper_19*(-helper_15*helper_18 - helper_17 + helper_21);
57const auto helper_23 = helper_4*(2*F00*F11*helper_10*helper_12 - 3*helper_0 - helper_7 - 3*helper_8);
58const auto helper_24 = helper_13*helper_2;
59const auto helper_25 = helper_24 + 1;
60const auto helper_26 = helper_4*(helper_10*helper_24 + 3*helper_5 + 3*helper_6 + helper_9);
61const auto helper_27 = helper_19*(-helper_16*helper_18 + helper_17 - helper_21);
62const auto helper_28 = helper_19*(helper_15 - helper_16 - helper_18*helper_21);
63result_0[0] = helper_13*(helper_0*helper_11 + helper_14);
64result_0[1] = helper_20;
65result_0[2] = helper_22;
66result_0[3] = helper_23;
67result_0[4] = helper_20;
68result_0[5] = helper_13*(helper_11*helper_6 + helper_25);
69result_0[6] = helper_26;
70result_0[7] = helper_27;
71result_0[8] = helper_22;
72result_0[9] = helper_26;
73result_0[10] = helper_13*(helper_11*helper_5 + helper_25);
74result_0[11] = helper_28;
75result_0[12] = helper_23;
76result_0[13] = helper_27;
77result_0[14] = helper_28;
78result_0[15] = helper_13*(helper_11*helper_8 + helper_14);;
79 hess(0, 0) = result_0[0];
80 hess(0, 1) = result_0[1];
81 hess(0, 2) = result_0[2];
82 hess(0, 3) = result_0[3];
83 hess(1, 0) = result_0[4];
84 hess(1, 1) = result_0[5];
85 hess(1, 2) = result_0[6];
86 hess(1, 3) = result_0[7];
87 hess(2, 0) = result_0[8];
88 hess(2, 1) = result_0[9];
89 hess(2, 2) = result_0[10];
90 hess(2, 3) = result_0[11];
91 hess(3, 0) = result_0[12];
92 hess(3, 1) = result_0[13];
93 hess(3, 2) = result_0[14];
94 hess(3, 3) = result_0[15];
95 return hess;
96 }
97 }
98}
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > AMIPS2drest_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 > AMIPS2drest_hessian(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, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd
Definition Types.hpp:13