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