PolyFEM
Loading...
Searching...
No Matches
AMIPS3d.hpp
Go to the documentation of this file.
1// Auto-generated code for AMIPS3d 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> AMIPS3d_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(3,3);
9 const double F00 = F(0, 0);
10 const double F01 = F(0, 1);
11 const double F02 = F(0, 2);
12 const double F10 = F(1, 0);
13 const double F11 = F(1, 1);
14 const double F12 = F(1, 2);
15 const double F20 = F(2, 0);
16 const double F21 = F(2, 1);
17 const double F22 = F(2, 2);
18 std::array<double, 9> result_0;
19 const auto helper_0 = 72*F02;
20const auto helper_1 = F11*F22;
21const auto helper_2 = F12*F21;
22const auto helper_3 = F12*F20;
23const auto helper_4 = F10*F21;
24const auto helper_5 = F10*F22;
25const auto helper_6 = F11*F20;
26const auto helper_7 = F00*helper_1 - F00*helper_2 + F01*helper_3 - F01*helper_5 + F02*helper_4 - F02*helper_6;
27const auto helper_8 = 1.0/helper_7;
28const auto helper_9 = 27*pow(F00, 2) + 27*pow(F10, 2) + 27*pow(F20, 2) + 9*pow(F00 - 2*F01, 2) + 9*pow(F10 - 2*F11, 2) + 9*pow(F20 - 2*F21, 2) + 4*pow(F00 + F01 - 3*F02, 2) + 4*pow(F10 + F11 - 3*F12, 2) + 4*pow(F20 + F21 - 3*F22, 2);
29const auto helper_10 = 5*helper_8*helper_9;
30const auto helper_11 = (1.0/432.0)*pow(6, 2.0/3.0)/pow(helper_7, 5.0/3.0);
31const auto helper_12 = 72*F12;
32const auto helper_13 = 72*F22;
33result_0[0] = -helper_11*(-240*F00 + 84*F01 + helper_0 + helper_10*(helper_1 - helper_2));
34result_0[1] = helper_11*(-84*F00 + 240*F01 - helper_0 + 5*helper_8*helper_9*(-helper_3 + helper_5));
35result_0[2] = -helper_11*(72*F00 + 72*F01 - 216*F02 + helper_10*(helper_4 - helper_6));
36result_0[3] = helper_11*(240*F10 - 84*F11 + helper_10*(F01*F22 - F02*F21) - helper_12);
37result_0[4] = -helper_11*(84*F10 - 240*F11 + helper_10*(F00*F22 - F02*F20) + helper_12);
38result_0[5] = helper_11*(-72*F10 - 72*F11 + 216*F12 + 5*helper_8*helper_9*(F00*F21 - F01*F20));
39result_0[6] = -helper_11*(-240*F20 + 84*F21 + helper_10*(F01*F12 - F02*F11) + helper_13);
40result_0[7] = helper_11*(-84*F20 + 240*F21 - helper_13 + 5*helper_8*helper_9*(F00*F12 - F02*F10));
41result_0[8] = -helper_11*(72*F20 + 72*F21 - 216*F22 + helper_10*(F00*F11 - F01*F10));;
42 grad(0, 0) = result_0[0];
43 grad(0, 1) = result_0[1];
44 grad(0, 2) = result_0[2];
45 grad(1, 0) = result_0[3];
46 grad(1, 1) = result_0[4];
47 grad(1, 2) = result_0[5];
48 grad(2, 0) = result_0[6];
49 grad(2, 1) = result_0[7];
50 grad(2, 2) = result_0[8];
51 return grad;
52 }
53
54 inline Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9> AMIPS3d_hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3>& F) {
55 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9> hess(9,9);
56 std::array<double, 81> result_0;
57 const double F00 = F(0, 0);
58 const double F01 = F(0, 1);
59 const double F02 = F(0, 2);
60 const double F10 = F(1, 0);
61 const double F11 = F(1, 1);
62 const double F12 = F(1, 2);
63 const double F20 = F(2, 0);
64 const double F21 = F(2, 1);
65 const double F22 = F(2, 2);
66 const auto helper_0 = 6*F02;
67const auto helper_1 = -20*F00 + 7*F01 + helper_0;
68const auto helper_2 = 3*helper_1;
69const auto helper_3 = F11*F22;
70const auto helper_4 = F12*F21;
71const auto helper_5 = helper_3 - helper_4;
72const auto helper_6 = F12*F20;
73const auto helper_7 = F10*F21;
74const auto helper_8 = F10*F22;
75const auto helper_9 = F11*F20;
76const auto helper_10 = F00*helper_3 - F00*helper_4 + F01*helper_6 - F01*helper_8 + F02*helper_7 - F02*helper_9;
77const auto helper_11 = 1.0/helper_10;
78const auto helper_12 = helper_11*helper_5;
79const auto helper_13 = pow(helper_10, -2);
80const auto helper_14 = 3*F02;
81const auto helper_15 = F00 + F01 - helper_14;
82const auto helper_16 = 3*F12;
83const auto helper_17 = F10 + F11 - helper_16;
84const auto helper_18 = 3*F22;
85const auto helper_19 = F20 + F21 - helper_18;
86const auto helper_20 = 27*pow(F00, 2) + 27*pow(F10, 2) + 27*pow(F20, 2) + 4*pow(helper_15, 2) + 4*pow(helper_17, 2) + 4*pow(helper_19, 2) + 9*pow(F00 - 2*F01, 2) + 9*pow(F10 - 2*F11, 2) + 9*pow(F20 - 2*F21, 2);
87const auto helper_21 = helper_13*helper_20;
88const auto helper_22 = pow(6, 2.0/3.0);
89const auto helper_23 = helper_22/pow(helper_10, 5.0/3.0);
90const auto helper_24 = (5.0/162.0)*helper_23;
91const auto helper_25 = -helper_6 + helper_8;
92const auto helper_26 = helper_11*helper_25;
93const auto helper_27 = 15*helper_1;
94const auto helper_28 = 7*F00 - 20*F01 + helper_0;
95const auto helper_29 = 10*helper_21;
96const auto helper_30 = helper_29*helper_5;
97const auto helper_31 = (1.0/324.0)*helper_23;
98const auto helper_32 = helper_31*(15*helper_11*helper_28*helper_5 - helper_25*helper_30 - helper_26*helper_27 - 63);
99const auto helper_33 = 90*helper_15;
100const auto helper_34 = helper_7 - helper_9;
101const auto helper_35 = helper_11*helper_34;
102const auto helper_36 = helper_31*(helper_12*helper_33 + helper_27*helper_35 + helper_30*helper_34 - 54);
103const auto helper_37 = F01*F22 - F02*F21;
104const auto helper_38 = 6*F12;
105const auto helper_39 = -20*F10 + 7*F11 + helper_38;
106const auto helper_40 = helper_12*helper_20;
107const auto helper_41 = 2*helper_40;
108const auto helper_42 = helper_22/pow(helper_10, 8.0/3.0);
109const auto helper_43 = (5.0/324.0)*helper_42;
110const auto helper_44 = helper_43*(-helper_2*helper_37 - helper_37*helper_41 + 3*helper_39*helper_5);
111const auto helper_45 = F00*F22 - F02*F20;
112const auto helper_46 = 12*helper_1;
113const auto helper_47 = 7*F10 - 20*F11 + helper_38;
114const auto helper_48 = 12*helper_5;
115const auto helper_49 = helper_18*helper_20;
116const auto helper_50 = 8*helper_40;
117const auto helper_51 = (5.0/1296.0)*helper_42;
118const auto helper_52 = helper_51*(helper_45*helper_46 + helper_45*helper_50 + helper_47*helper_48 - helper_49);
119const auto helper_53 = 72*helper_5;
120const auto helper_54 = F00*F21 - F01*F20;
121const auto helper_55 = 3*helper_20;
122const auto helper_56 = F21*helper_55;
123const auto helper_57 = helper_51*(helper_17*helper_53 - helper_46*helper_54 - helper_50*helper_54 + helper_56);
124const auto helper_58 = F01*F12 - F02*F11;
125const auto helper_59 = 6*F22;
126const auto helper_60 = -20*F20 + 7*F21 + helper_59;
127const auto helper_61 = helper_43*(helper_2*helper_58 + helper_41*helper_58 + 3*helper_5*helper_60);
128const auto helper_62 = F00*F12 - F02*F10;
129const auto helper_63 = 7*F20 - 20*F21 + helper_59;
130const auto helper_64 = helper_16*helper_20;
131const auto helper_65 = helper_51*(-helper_46*helper_62 + helper_48*helper_63 - helper_50*helper_62 + helper_64);
132const auto helper_66 = F00*F11 - F01*F10;
133const auto helper_67 = F11*helper_55;
134const auto helper_68 = helper_20*helper_66;
135const auto helper_69 = 8*helper_68;
136const auto helper_70 = helper_51*(helper_12*helper_69 + helper_19*helper_53 + helper_46*helper_66 - helper_67);
137const auto helper_71 = 3*helper_25;
138const auto helper_72 = helper_31*(15*helper_11*helper_28*helper_34 - helper_25*helper_29*helper_34 - helper_26*helper_33 - 54);
139const auto helper_73 = 12*helper_28;
140const auto helper_74 = 12*helper_25;
141const auto helper_75 = helper_20*helper_26;
142const auto helper_76 = 8*helper_37;
143const auto helper_77 = helper_51*(-helper_37*helper_73 - helper_39*helper_74 + helper_49 + helper_75*helper_76);
144const auto helper_78 = helper_43*(3*helper_28*helper_45 - 2*helper_45*helper_75 - helper_47*helper_71);
145const auto helper_79 = 72*helper_25;
146const auto helper_80 = F20*helper_55;
147const auto helper_81 = helper_51*(8*helper_11*helper_20*helper_25*helper_54 - helper_17*helper_79 - helper_54*helper_73 - helper_80);
148const auto helper_82 = helper_51*(12*helper_28*helper_58 - 8*helper_58*helper_75 - helper_60*helper_74 - helper_64);
149const auto helper_83 = helper_43*(2*helper_11*helper_20*helper_25*helper_62 - 3*helper_28*helper_62 - helper_63*helper_71);
150const auto helper_84 = F10*helper_55;
151const auto helper_85 = helper_51*(-helper_19*helper_79 - helper_26*helper_69 + helper_66*helper_73 + helper_84);
152const auto helper_86 = 5*helper_21;
153const auto helper_87 = (1.0/162.0)*helper_23;
154const auto helper_88 = 72*helper_15;
155const auto helper_89 = helper_20*helper_35;
156const auto helper_90 = helper_51*(12*helper_34*helper_39 - helper_37*helper_88 - helper_56 - helper_76*helper_89);
157const auto helper_91 = 12*helper_34;
158const auto helper_92 = 8*helper_89;
159const auto helper_93 = helper_51*(helper_45*helper_88 + helper_45*helper_92 + helper_47*helper_91 + helper_80);
160const auto helper_94 = 9*helper_15;
161const auto helper_95 = (5.0/162.0)*helper_42;
162const auto helper_96 = helper_95*(9*helper_17*helper_34 - helper_54*helper_89 - helper_54*helper_94);
163const auto helper_97 = helper_51*(helper_58*helper_88 + helper_58*helper_92 + helper_60*helper_91 + helper_67);
164const auto helper_98 = helper_51*(12*helper_34*helper_63 - helper_62*helper_88 - helper_62*helper_92 - helper_84);
165const auto helper_99 = helper_95*(9*helper_19*helper_34 + helper_66*helper_89 + helper_66*helper_94);
166const auto helper_100 = 3*helper_37;
167const auto helper_101 = helper_11*helper_39;
168const auto helper_102 = helper_11*helper_37;
169const auto helper_103 = 15*helper_47;
170const auto helper_104 = helper_31*(-helper_102*helper_103 + 15*helper_11*helper_39*helper_45 - helper_29*helper_37*helper_45 - 63);
171const auto helper_105 = 90*helper_17;
172const auto helper_106 = helper_31*(-15*helper_101*helper_54 - helper_102*helper_105 + 10*helper_13*helper_20*helper_37*helper_54 - 54);
173const auto helper_107 = helper_43*(-helper_100*helper_60 - 2*helper_102*helper_20*helper_58 + 3*helper_39*helper_58);
174const auto helper_108 = 12*helper_39;
175const auto helper_109 = 12*helper_63;
176const auto helper_110 = helper_14*helper_20;
177const auto helper_111 = helper_51*(-helper_108*helper_62 - helper_109*helper_37 + 8*helper_11*helper_20*helper_37*helper_62 - helper_110);
178const auto helper_112 = 72*helper_19;
179const auto helper_113 = F01*helper_55;
180const auto helper_114 = helper_51*(-helper_102*helper_69 + helper_108*helper_66 - helper_112*helper_37 + helper_113);
181const auto helper_115 = 3*helper_47;
182const auto helper_116 = helper_11*helper_45;
183const auto helper_117 = helper_11*helper_54;
184const auto helper_118 = helper_31*(-helper_103*helper_117 + 90*helper_11*helper_17*helper_45 - helper_29*helper_45*helper_54 - 54);
185const auto helper_119 = 12*helper_60;
186const auto helper_120 = 12*helper_47;
187const auto helper_121 = helper_116*helper_20;
188const auto helper_122 = 8*helper_58;
189const auto helper_123 = helper_51*(helper_110 + helper_119*helper_45 + helper_120*helper_58 + helper_121*helper_122);
190const auto helper_124 = helper_43*(-helper_115*helper_62 - 2*helper_121*helper_62 + 3*helper_45*helper_63);
191const auto helper_125 = F00*helper_55;
192const auto helper_126 = helper_51*(helper_112*helper_45 + helper_116*helper_69 + helper_120*helper_66 - helper_125);
193const auto helper_127 = helper_117*helper_20;
194const auto helper_128 = helper_51*(-helper_113 - helper_119*helper_54 - helper_122*helper_127 + 72*helper_17*helper_58);
195const auto helper_129 = helper_51*(-helper_109*helper_54 + helper_125 + 8*helper_127*helper_62 - 72*helper_17*helper_62);
196const auto helper_130 = helper_95*(-helper_117*helper_68 + 9*helper_17*helper_66 - 9*helper_19*helper_54);
197const auto helper_131 = helper_11*helper_60;
198const auto helper_132 = 15*helper_131;
199const auto helper_133 = helper_29*helper_58;
200const auto helper_134 = helper_31*(15*helper_11*helper_58*helper_63 - helper_132*helper_62 - helper_133*helper_62 - 63);
201const auto helper_135 = 90*helper_19;
202const auto helper_136 = helper_31*(helper_11*helper_135*helper_58 + helper_132*helper_66 + helper_133*helper_66 - 54);
203const auto helper_137 = helper_11*helper_62;
204const auto helper_138 = helper_31*(15*helper_11*helper_63*helper_66 - helper_135*helper_137 - helper_29*helper_62*helper_66 - 54);
205result_0[0] = helper_24*(helper_12*helper_2 + helper_21*pow(helper_5, 2) + 18);
206result_0[1] = helper_32;
207result_0[2] = helper_36;
208result_0[3] = helper_44;
209result_0[4] = helper_52;
210result_0[5] = helper_57;
211result_0[6] = helper_61;
212result_0[7] = helper_65;
213result_0[8] = helper_70;
214result_0[9] = helper_32;
215result_0[10] = helper_24*(-helper_11*helper_28*helper_71 + helper_21*pow(helper_25, 2) + 18);
216result_0[11] = helper_72;
217result_0[12] = helper_77;
218result_0[13] = helper_78;
219result_0[14] = helper_81;
220result_0[15] = helper_82;
221result_0[16] = helper_83;
222result_0[17] = helper_85;
223result_0[18] = helper_36;
224result_0[19] = helper_72;
225result_0[20] = helper_87*(helper_33*helper_35 + pow(helper_34, 2)*helper_86 + 81);
226result_0[21] = helper_90;
227result_0[22] = helper_93;
228result_0[23] = helper_96;
229result_0[24] = helper_97;
230result_0[25] = helper_98;
231result_0[26] = helper_99;
232result_0[27] = helper_44;
233result_0[28] = helper_77;
234result_0[29] = helper_90;
235result_0[30] = helper_24*(-helper_100*helper_101 + helper_21*pow(helper_37, 2) + 18);
236result_0[31] = helper_104;
237result_0[32] = helper_106;
238result_0[33] = helper_107;
239result_0[34] = helper_111;
240result_0[35] = helper_114;
241result_0[36] = helper_52;
242result_0[37] = helper_78;
243result_0[38] = helper_93;
244result_0[39] = helper_104;
245result_0[40] = helper_24*(helper_115*helper_116 + helper_21*pow(helper_45, 2) + 18);
246result_0[41] = helper_118;
247result_0[42] = helper_123;
248result_0[43] = helper_124;
249result_0[44] = helper_126;
250result_0[45] = helper_57;
251result_0[46] = helper_81;
252result_0[47] = helper_96;
253result_0[48] = helper_106;
254result_0[49] = helper_118;
255result_0[50] = helper_87*(-helper_105*helper_117 + pow(helper_54, 2)*helper_86 + 81);
256result_0[51] = helper_128;
257result_0[52] = helper_129;
258result_0[53] = helper_130;
259result_0[54] = helper_61;
260result_0[55] = helper_82;
261result_0[56] = helper_97;
262result_0[57] = helper_107;
263result_0[58] = helper_123;
264result_0[59] = helper_128;
265result_0[60] = helper_24*(3*helper_131*helper_58 + helper_21*pow(helper_58, 2) + 18);
266result_0[61] = helper_134;
267result_0[62] = helper_136;
268result_0[63] = helper_65;
269result_0[64] = helper_83;
270result_0[65] = helper_98;
271result_0[66] = helper_111;
272result_0[67] = helper_124;
273result_0[68] = helper_129;
274result_0[69] = helper_134;
275result_0[70] = helper_24*(-3*helper_137*helper_63 + helper_21*pow(helper_62, 2) + 18);
276result_0[71] = helper_138;
277result_0[72] = helper_70;
278result_0[73] = helper_85;
279result_0[74] = helper_99;
280result_0[75] = helper_114;
281result_0[76] = helper_126;
282result_0[77] = helper_130;
283result_0[78] = helper_136;
284result_0[79] = helper_138;
285result_0[80] = helper_87*(helper_11*helper_135*helper_66 + pow(helper_66, 2)*helper_86 + 81);;
286 hess(0, 0) = result_0[0];
287 hess(0, 1) = result_0[1];
288 hess(0, 2) = result_0[2];
289 hess(0, 3) = result_0[3];
290 hess(0, 4) = result_0[4];
291 hess(0, 5) = result_0[5];
292 hess(0, 6) = result_0[6];
293 hess(0, 7) = result_0[7];
294 hess(0, 8) = result_0[8];
295 hess(1, 0) = result_0[9];
296 hess(1, 1) = result_0[10];
297 hess(1, 2) = result_0[11];
298 hess(1, 3) = result_0[12];
299 hess(1, 4) = result_0[13];
300 hess(1, 5) = result_0[14];
301 hess(1, 6) = result_0[15];
302 hess(1, 7) = result_0[16];
303 hess(1, 8) = result_0[17];
304 hess(2, 0) = result_0[18];
305 hess(2, 1) = result_0[19];
306 hess(2, 2) = result_0[20];
307 hess(2, 3) = result_0[21];
308 hess(2, 4) = result_0[22];
309 hess(2, 5) = result_0[23];
310 hess(2, 6) = result_0[24];
311 hess(2, 7) = result_0[25];
312 hess(2, 8) = result_0[26];
313 hess(3, 0) = result_0[27];
314 hess(3, 1) = result_0[28];
315 hess(3, 2) = result_0[29];
316 hess(3, 3) = result_0[30];
317 hess(3, 4) = result_0[31];
318 hess(3, 5) = result_0[32];
319 hess(3, 6) = result_0[33];
320 hess(3, 7) = result_0[34];
321 hess(3, 8) = result_0[35];
322 hess(4, 0) = result_0[36];
323 hess(4, 1) = result_0[37];
324 hess(4, 2) = result_0[38];
325 hess(4, 3) = result_0[39];
326 hess(4, 4) = result_0[40];
327 hess(4, 5) = result_0[41];
328 hess(4, 6) = result_0[42];
329 hess(4, 7) = result_0[43];
330 hess(4, 8) = result_0[44];
331 hess(5, 0) = result_0[45];
332 hess(5, 1) = result_0[46];
333 hess(5, 2) = result_0[47];
334 hess(5, 3) = result_0[48];
335 hess(5, 4) = result_0[49];
336 hess(5, 5) = result_0[50];
337 hess(5, 6) = result_0[51];
338 hess(5, 7) = result_0[52];
339 hess(5, 8) = result_0[53];
340 hess(6, 0) = result_0[54];
341 hess(6, 1) = result_0[55];
342 hess(6, 2) = result_0[56];
343 hess(6, 3) = result_0[57];
344 hess(6, 4) = result_0[58];
345 hess(6, 5) = result_0[59];
346 hess(6, 6) = result_0[60];
347 hess(6, 7) = result_0[61];
348 hess(6, 8) = result_0[62];
349 hess(7, 0) = result_0[63];
350 hess(7, 1) = result_0[64];
351 hess(7, 2) = result_0[65];
352 hess(7, 3) = result_0[66];
353 hess(7, 4) = result_0[67];
354 hess(7, 5) = result_0[68];
355 hess(7, 6) = result_0[69];
356 hess(7, 7) = result_0[70];
357 hess(7, 8) = result_0[71];
358 hess(8, 0) = result_0[72];
359 hess(8, 1) = result_0[73];
360 hess(8, 2) = result_0[74];
361 hess(8, 3) = result_0[75];
362 hess(8, 4) = result_0[76];
363 hess(8, 5) = result_0[77];
364 hess(8, 6) = result_0[78];
365 hess(8, 7) = result_0[79];
366 hess(8, 8) = result_0[80];
367 return hess;
368 }
369 }
370}
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 9, 9 > AMIPS3d_hessian(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F)
Definition AMIPS3d.hpp:54
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > AMIPS3d_gradient(const RowVectorNd &p, const double t, const int el_id, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, 0, 3, 3 > &F)
Definition AMIPS3d.hpp:7
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd
Definition Types.hpp:13