Loading [MathJax]/extensions/tex2jax.js
PolyFEM
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
auto_b_bases.cpp
Go to the documentation of this file.
1#include "auto_b_bases.hpp"
2
3
4namespace polyfem {
5namespace autogen {
6namespace {
7void b_0_basis_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
8
9auto x=uv.col(0).array();
10auto y=uv.col(1).array();
11
12result_0.resize(x.size(),1);
13switch(local_index){
14 case 0: {result_0.setOnes();} break;
15 default: assert(false);
16}}
17void b_0_basis_grad_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
18
19auto x=uv.col(0).array();
20auto y=uv.col(1).array();
21
22val.resize(uv.rows(), uv.cols());
23 Eigen::ArrayXd result_0(uv.rows());
24switch(local_index){
25 case 0: {{result_0.setZero();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }} break;
26 default: assert(false);
27}}
28
29
30void b_1_basis_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
31
32auto x=uv.col(0).array();
33auto y=uv.col(1).array();
34
35switch(local_index){
36 case 0: {result_0 = -x - y + 1;} break;
37 case 1: {result_0 = x;} break;
38 case 2: {result_0 = y;} break;
39 default: assert(false);
40}}
41void b_1_basis_grad_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
42
43auto x=uv.col(0).array();
44auto y=uv.col(1).array();
45
46val.resize(uv.rows(), uv.cols());
47 Eigen::ArrayXd result_0(uv.rows());
48switch(local_index){
49 case 0: {{result_0.setConstant(-1);val.col(0) = result_0; }{result_0.setConstant(-1);val.col(1) = result_0; }} break;
50 case 1: {{result_0.setOnes();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }} break;
51 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0.setOnes();val.col(1) = result_0; }} break;
52 default: assert(false);
53}}
54
55
56void b_2_basis_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
57
58auto x=uv.col(0).array();
59auto y=uv.col(1).array();
60
61switch(local_index){
62 case 0: {result_0 = pow(x + y - 1, 2);} break;
63 case 1: {result_0 = pow(x, 2);} break;
64 case 2: {result_0 = pow(y, 2);} break;
65 case 3: {result_0 = -2*x*(x + y - 1);} break;
66 case 4: {result_0 = 2*x*y;} break;
67 case 5: {result_0 = -2*y*(x + y - 1);} break;
68 default: assert(false);
69}}
70void b_2_basis_grad_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
71
72auto x=uv.col(0).array();
73auto y=uv.col(1).array();
74
75val.resize(uv.rows(), uv.cols());
76 Eigen::ArrayXd result_0(uv.rows());
77switch(local_index){
78 case 0: {{result_0 = 2*(x + y - 1);val.col(0) = result_0; }{result_0 = 2*(x + y - 1);val.col(1) = result_0; }} break;
79 case 1: {{result_0 = 2*x;val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }} break;
80 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 2*y;val.col(1) = result_0; }} break;
81 case 3: {{result_0 = 2*(-2*x - y + 1);val.col(0) = result_0; }{result_0 = -2*x;val.col(1) = result_0; }} break;
82 case 4: {{result_0 = 2*y;val.col(0) = result_0; }{result_0 = 2*x;val.col(1) = result_0; }} break;
83 case 5: {{result_0 = -2*y;val.col(0) = result_0; }{result_0 = 2*(-x - 2*y + 1);val.col(1) = result_0; }} break;
84 default: assert(false);
85}}
86
87
88void b_3_basis_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
89
90auto x=uv.col(0).array();
91auto y=uv.col(1).array();
92
93switch(local_index){
94 case 0: {result_0 = -pow(x + y - 1, 3);} break;
95 case 1: {result_0 = pow(x, 3);} break;
96 case 2: {result_0 = pow(y, 3);} break;
97 case 3: {result_0 = 3*x*pow(x + y - 1, 2);} break;
98 case 4: {result_0 = -3*pow(x, 2)*(x + y - 1);} break;
99 case 5: {result_0 = 3*pow(x, 2)*y;} break;
100 case 6: {result_0 = 3*x*pow(y, 2);} break;
101 case 7: {result_0 = -3*pow(y, 2)*(x + y - 1);} break;
102 case 8: {result_0 = 3*y*pow(x + y - 1, 2);} break;
103 case 9: {result_0 = -6*x*y*(x + y - 1);} break;
104 default: assert(false);
105}}
106void b_3_basis_grad_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
107
108auto x=uv.col(0).array();
109auto y=uv.col(1).array();
110
111val.resize(uv.rows(), uv.cols());
112 Eigen::ArrayXd result_0(uv.rows());
113switch(local_index){
114 case 0: {{result_0 = -3*pow(x + y - 1, 2);val.col(0) = result_0; }{result_0 = -3*pow(x + y - 1, 2);val.col(1) = result_0; }} break;
115 case 1: {{result_0 = 3*pow(x, 2);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }} break;
116 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 3*pow(y, 2);val.col(1) = result_0; }} break;
117 case 3: {{const auto helper_0 = y - 1;
118result_0 = 3*(helper_0 + x)*(helper_0 + 3*x);val.col(0) = result_0; }{result_0 = 6*x*(x + y - 1);val.col(1) = result_0; }} break;
119 case 4: {{const auto helper_0 = 3*x;
120result_0 = -helper_0*(helper_0 + 2*y - 2);val.col(0) = result_0; }{result_0 = -3*pow(x, 2);val.col(1) = result_0; }} break;
121 case 5: {{result_0 = 6*x*y;val.col(0) = result_0; }{result_0 = 3*pow(x, 2);val.col(1) = result_0; }} break;
122 case 6: {{result_0 = 3*pow(y, 2);val.col(0) = result_0; }{result_0 = 6*x*y;val.col(1) = result_0; }} break;
123 case 7: {{result_0 = -3*pow(y, 2);val.col(0) = result_0; }{const auto helper_0 = 3*y;
124result_0 = -helper_0*(helper_0 + 2*x - 2);val.col(1) = result_0; }} break;
125 case 8: {{result_0 = 6*y*(x + y - 1);val.col(0) = result_0; }{const auto helper_0 = x - 1;
126result_0 = 3*(helper_0 + y)*(helper_0 + 3*y);val.col(1) = result_0; }} break;
127 case 9: {{result_0 = -6*y*(2*x + y - 1);val.col(0) = result_0; }{result_0 = -6*x*(x + 2*y - 1);val.col(1) = result_0; }} break;
128 default: assert(false);
129}}
130
131
132void b_4_basis_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
133
134auto x=uv.col(0).array();
135auto y=uv.col(1).array();
136
137switch(local_index){
138 case 0: {result_0 = pow(x + y - 1, 4);} break;
139 case 1: {result_0 = pow(x, 4);} break;
140 case 2: {result_0 = pow(y, 4);} break;
141 case 3: {result_0 = -4*x*pow(x + y - 1, 3);} break;
142 case 4: {result_0 = 6*pow(x, 2)*pow(x + y - 1, 2);} break;
143 case 5: {result_0 = -4*pow(x, 3)*(x + y - 1);} break;
144 case 6: {result_0 = 4*pow(x, 3)*y;} break;
145 case 7: {result_0 = 6*pow(x, 2)*pow(y, 2);} break;
146 case 8: {result_0 = 4*x*pow(y, 3);} break;
147 case 9: {result_0 = -4*pow(y, 3)*(x + y - 1);} break;
148 case 10: {result_0 = 6*pow(y, 2)*pow(x + y - 1, 2);} break;
149 case 11: {result_0 = -4*y*pow(x + y - 1, 3);} break;
150 case 12: {result_0 = 12*x*y*pow(x + y - 1, 2);} break;
151 case 13: {result_0 = -12*x*pow(y, 2)*(x + y - 1);} break;
152 case 14: {result_0 = -12*pow(x, 2)*y*(x + y - 1);} break;
153 default: assert(false);
154}}
155void b_4_basis_grad_value_2d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
156
157auto x=uv.col(0).array();
158auto y=uv.col(1).array();
159
160val.resize(uv.rows(), uv.cols());
161 Eigen::ArrayXd result_0(uv.rows());
162switch(local_index){
163 case 0: {{result_0 = 4*pow(x + y - 1, 3);val.col(0) = result_0; }{result_0 = 4*pow(x + y - 1, 3);val.col(1) = result_0; }} break;
164 case 1: {{result_0 = 4*pow(x, 3);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }} break;
165 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 4*pow(y, 3);val.col(1) = result_0; }} break;
166 case 3: {{const auto helper_0 = y - 1;
167result_0 = -4*pow(helper_0 + x, 2)*(helper_0 + 4*x);val.col(0) = result_0; }{result_0 = -12*x*pow(x + y - 1, 2);val.col(1) = result_0; }} break;
168 case 4: {{const auto helper_0 = y - 1;
169result_0 = 12*x*(helper_0 + x)*(helper_0 + 2*x);val.col(0) = result_0; }{result_0 = 12*pow(x, 2)*(x + y - 1);val.col(1) = result_0; }} break;
170 case 5: {{result_0 = -4*pow(x, 2)*(4*x + 3*y - 3);val.col(0) = result_0; }{result_0 = -4*pow(x, 3);val.col(1) = result_0; }} break;
171 case 6: {{result_0 = 12*pow(x, 2)*y;val.col(0) = result_0; }{result_0 = 4*pow(x, 3);val.col(1) = result_0; }} break;
172 case 7: {{result_0 = 12*x*pow(y, 2);val.col(0) = result_0; }{result_0 = 12*pow(x, 2)*y;val.col(1) = result_0; }} break;
173 case 8: {{result_0 = 4*pow(y, 3);val.col(0) = result_0; }{result_0 = 12*x*pow(y, 2);val.col(1) = result_0; }} break;
174 case 9: {{result_0 = -4*pow(y, 3);val.col(0) = result_0; }{result_0 = -4*pow(y, 2)*(3*x + 4*y - 3);val.col(1) = result_0; }} break;
175 case 10: {{result_0 = 12*pow(y, 2)*(x + y - 1);val.col(0) = result_0; }{const auto helper_0 = x - 1;
176result_0 = 12*y*(helper_0 + y)*(helper_0 + 2*y);val.col(1) = result_0; }} break;
177 case 11: {{result_0 = -12*y*pow(x + y - 1, 2);val.col(0) = result_0; }{const auto helper_0 = x - 1;
178result_0 = -4*pow(helper_0 + y, 2)*(helper_0 + 4*y);val.col(1) = result_0; }} break;
179 case 12: {{const auto helper_0 = y - 1;
180result_0 = 12*y*(helper_0 + x)*(helper_0 + 3*x);val.col(0) = result_0; }{const auto helper_0 = x - 1;
181result_0 = 12*x*(helper_0 + y)*(helper_0 + 3*y);val.col(1) = result_0; }} break;
182 case 13: {{result_0 = -12*pow(y, 2)*(2*x + y - 1);val.col(0) = result_0; }{result_0 = -12*x*y*(2*x + 3*y - 2);val.col(1) = result_0; }} break;
183 case 14: {{result_0 = -12*x*y*(3*x + 2*y - 2);val.col(0) = result_0; }{result_0 = -12*pow(x, 2)*(x + 2*y - 1);val.col(1) = result_0; }} break;
184 default: assert(false);
185}}
186
187
188}
189
190
191void b_basis_value_2d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
192
193switch(b){
194 case 0: b_0_basis_value_2d(local_index, uv, val); break;
195 case 1: b_1_basis_value_2d(local_index, uv, val); break;
196 case 2: b_2_basis_value_2d(local_index, uv, val); break;
197 case 3: b_3_basis_value_2d(local_index, uv, val); break;
198 case 4: b_4_basis_value_2d(local_index, uv, val); break;
199 default: assert(false);
200}}
201
202void b_grad_basis_value_2d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
203
204switch(b){
205 case 0: b_0_basis_grad_value_2d(local_index, uv, val); break;
206 case 1: b_1_basis_grad_value_2d(local_index, uv, val); break;
207 case 2: b_2_basis_grad_value_2d(local_index, uv, val); break;
208 case 3: b_3_basis_grad_value_2d(local_index, uv, val); break;
209 case 4: b_4_basis_grad_value_2d(local_index, uv, val); break;
210 default: assert(false);
211}}
212
213namespace {
214void b_0_basis_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
215
216auto x=uv.col(0).array();
217auto y=uv.col(1).array();
218auto z=uv.col(2).array();
219
220result_0.resize(x.size(),1);
221switch(local_index){
222 case 0: {result_0.setOnes();} break;
223 default: assert(false);
224}}
225void b_0_basis_grad_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
226
227auto x=uv.col(0).array();
228auto y=uv.col(1).array();
229auto z=uv.col(2).array();
230
231val.resize(uv.rows(), uv.cols());
232 Eigen::ArrayXd result_0(uv.rows());
233switch(local_index){
234 case 0: {{result_0.setZero();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
235 default: assert(false);
236}}
237
238
239void b_1_basis_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
240
241auto x=uv.col(0).array();
242auto y=uv.col(1).array();
243auto z=uv.col(2).array();
244
245switch(local_index){
246 case 0: {result_0 = -x - y - z + 1;} break;
247 case 1: {result_0 = x;} break;
248 case 2: {result_0 = y;} break;
249 case 3: {result_0 = z;} break;
250 default: assert(false);
251}}
252void b_1_basis_grad_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
253
254auto x=uv.col(0).array();
255auto y=uv.col(1).array();
256auto z=uv.col(2).array();
257
258val.resize(uv.rows(), uv.cols());
259 Eigen::ArrayXd result_0(uv.rows());
260switch(local_index){
261 case 0: {{result_0.setConstant(-1);val.col(0) = result_0; }{result_0.setConstant(-1);val.col(1) = result_0; }{result_0.setConstant(-1);val.col(2) = result_0; }} break;
262 case 1: {{result_0.setOnes();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
263 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0.setOnes();val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
264 case 3: {{result_0.setZero();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0.setOnes();val.col(2) = result_0; }} break;
265 default: assert(false);
266}}
267
268
269void b_2_basis_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
270
271auto x=uv.col(0).array();
272auto y=uv.col(1).array();
273auto z=uv.col(2).array();
274
275switch(local_index){
276 case 0: {result_0 = pow(x + y + z - 1, 2);} break;
277 case 1: {result_0 = pow(x, 2);} break;
278 case 2: {result_0 = pow(y, 2);} break;
279 case 3: {result_0 = pow(z, 2);} break;
280 case 4: {result_0 = -2*x*(x + y + z - 1);} break;
281 case 5: {result_0 = 2*x*y;} break;
282 case 6: {result_0 = -2*y*(x + y + z - 1);} break;
283 case 7: {result_0 = -2*z*(x + y + z - 1);} break;
284 case 8: {result_0 = 2*x*z;} break;
285 case 9: {result_0 = 2*y*z;} break;
286 default: assert(false);
287}}
288void b_2_basis_grad_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
289
290auto x=uv.col(0).array();
291auto y=uv.col(1).array();
292auto z=uv.col(2).array();
293
294val.resize(uv.rows(), uv.cols());
295 Eigen::ArrayXd result_0(uv.rows());
296switch(local_index){
297 case 0: {{result_0 = 2*(x + y + z - 1);val.col(0) = result_0; }{result_0 = 2*(x + y + z - 1);val.col(1) = result_0; }{result_0 = 2*(x + y + z - 1);val.col(2) = result_0; }} break;
298 case 1: {{result_0 = 2*x;val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
299 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 2*y;val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
300 case 3: {{result_0.setZero();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 2*z;val.col(2) = result_0; }} break;
301 case 4: {{result_0 = 2*(-2*x - y - z + 1);val.col(0) = result_0; }{result_0 = -2*x;val.col(1) = result_0; }{result_0 = -2*x;val.col(2) = result_0; }} break;
302 case 5: {{result_0 = 2*y;val.col(0) = result_0; }{result_0 = 2*x;val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
303 case 6: {{result_0 = -2*y;val.col(0) = result_0; }{result_0 = 2*(-x - 2*y - z + 1);val.col(1) = result_0; }{result_0 = -2*y;val.col(2) = result_0; }} break;
304 case 7: {{result_0 = -2*z;val.col(0) = result_0; }{result_0 = -2*z;val.col(1) = result_0; }{result_0 = 2*(-x - y - 2*z + 1);val.col(2) = result_0; }} break;
305 case 8: {{result_0 = 2*z;val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 2*x;val.col(2) = result_0; }} break;
306 case 9: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 2*z;val.col(1) = result_0; }{result_0 = 2*y;val.col(2) = result_0; }} break;
307 default: assert(false);
308}}
309
310
311void b_3_basis_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
312
313auto x=uv.col(0).array();
314auto y=uv.col(1).array();
315auto z=uv.col(2).array();
316
317switch(local_index){
318 case 0: {result_0 = -pow(x + y + z - 1, 3);} break;
319 case 1: {result_0 = pow(x, 3);} break;
320 case 2: {result_0 = pow(y, 3);} break;
321 case 3: {result_0 = pow(z, 3);} break;
322 case 4: {result_0 = 3*x*pow(x + y + z - 1, 2);} break;
323 case 5: {result_0 = -3*pow(x, 2)*(x + y + z - 1);} break;
324 case 6: {result_0 = 3*pow(x, 2)*y;} break;
325 case 7: {result_0 = 3*x*pow(y, 2);} break;
326 case 8: {result_0 = -3*pow(y, 2)*(x + y + z - 1);} break;
327 case 9: {result_0 = 3*y*pow(x + y + z - 1, 2);} break;
328 case 10: {result_0 = 3*z*pow(x + y + z - 1, 2);} break;
329 case 11: {result_0 = -3*pow(z, 2)*(x + y + z - 1);} break;
330 case 12: {result_0 = 3*pow(x, 2)*z;} break;
331 case 13: {result_0 = 3*x*pow(z, 2);} break;
332 case 14: {result_0 = 3*pow(y, 2)*z;} break;
333 case 15: {result_0 = 3*y*pow(z, 2);} break;
334 case 16: {result_0 = -6*x*y*(x + y + z - 1);} break;
335 case 17: {result_0 = -6*x*z*(x + y + z - 1);} break;
336 case 18: {result_0 = 6*x*y*z;} break;
337 case 19: {result_0 = -6*y*z*(x + y + z - 1);} break;
338 default: assert(false);
339}}
340void b_3_basis_grad_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
341
342auto x=uv.col(0).array();
343auto y=uv.col(1).array();
344auto z=uv.col(2).array();
345
346val.resize(uv.rows(), uv.cols());
347 Eigen::ArrayXd result_0(uv.rows());
348switch(local_index){
349 case 0: {{result_0 = -3*pow(x + y + z - 1, 2);val.col(0) = result_0; }{result_0 = -3*pow(x + y + z - 1, 2);val.col(1) = result_0; }{result_0 = -3*pow(x + y + z - 1, 2);val.col(2) = result_0; }} break;
350 case 1: {{result_0 = 3*pow(x, 2);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
351 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 3*pow(y, 2);val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
352 case 3: {{result_0.setZero();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 3*pow(z, 2);val.col(2) = result_0; }} break;
353 case 4: {{const auto helper_0 = y + z - 1;
354result_0 = 3*(helper_0 + x)*(helper_0 + 3*x);val.col(0) = result_0; }{result_0 = 6*x*(x + y + z - 1);val.col(1) = result_0; }{result_0 = 6*x*(x + y + z - 1);val.col(2) = result_0; }} break;
355 case 5: {{const auto helper_0 = 3*x;
356result_0 = -helper_0*(helper_0 + 2*y + 2*z - 2);val.col(0) = result_0; }{result_0 = -3*pow(x, 2);val.col(1) = result_0; }{result_0 = -3*pow(x, 2);val.col(2) = result_0; }} break;
357 case 6: {{result_0 = 6*x*y;val.col(0) = result_0; }{result_0 = 3*pow(x, 2);val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
358 case 7: {{result_0 = 3*pow(y, 2);val.col(0) = result_0; }{result_0 = 6*x*y;val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
359 case 8: {{result_0 = -3*pow(y, 2);val.col(0) = result_0; }{const auto helper_0 = 3*y;
360result_0 = -helper_0*(helper_0 + 2*x + 2*z - 2);val.col(1) = result_0; }{result_0 = -3*pow(y, 2);val.col(2) = result_0; }} break;
361 case 9: {{result_0 = 6*y*(x + y + z - 1);val.col(0) = result_0; }{const auto helper_0 = x + z - 1;
362result_0 = 3*(helper_0 + y)*(helper_0 + 3*y);val.col(1) = result_0; }{result_0 = 6*y*(x + y + z - 1);val.col(2) = result_0; }} break;
363 case 10: {{result_0 = 6*z*(x + y + z - 1);val.col(0) = result_0; }{result_0 = 6*z*(x + y + z - 1);val.col(1) = result_0; }{const auto helper_0 = x + y - 1;
364result_0 = 3*(helper_0 + z)*(helper_0 + 3*z);val.col(2) = result_0; }} break;
365 case 11: {{result_0 = -3*pow(z, 2);val.col(0) = result_0; }{result_0 = -3*pow(z, 2);val.col(1) = result_0; }{const auto helper_0 = 3*z;
366result_0 = -helper_0*(helper_0 + 2*x + 2*y - 2);val.col(2) = result_0; }} break;
367 case 12: {{result_0 = 6*x*z;val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 3*pow(x, 2);val.col(2) = result_0; }} break;
368 case 13: {{result_0 = 3*pow(z, 2);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 6*x*z;val.col(2) = result_0; }} break;
369 case 14: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 6*y*z;val.col(1) = result_0; }{result_0 = 3*pow(y, 2);val.col(2) = result_0; }} break;
370 case 15: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 3*pow(z, 2);val.col(1) = result_0; }{result_0 = 6*y*z;val.col(2) = result_0; }} break;
371 case 16: {{result_0 = -6*y*(2*x + y + z - 1);val.col(0) = result_0; }{result_0 = -6*x*(x + 2*y + z - 1);val.col(1) = result_0; }{result_0 = -6*x*y;val.col(2) = result_0; }} break;
372 case 17: {{result_0 = -6*z*(2*x + y + z - 1);val.col(0) = result_0; }{result_0 = -6*x*z;val.col(1) = result_0; }{result_0 = -6*x*(x + y + 2*z - 1);val.col(2) = result_0; }} break;
373 case 18: {{result_0 = 6*y*z;val.col(0) = result_0; }{result_0 = 6*x*z;val.col(1) = result_0; }{result_0 = 6*x*y;val.col(2) = result_0; }} break;
374 case 19: {{result_0 = -6*y*z;val.col(0) = result_0; }{result_0 = -6*z*(x + 2*y + z - 1);val.col(1) = result_0; }{result_0 = -6*y*(x + y + 2*z - 1);val.col(2) = result_0; }} break;
375 default: assert(false);
376}}
377
378
379void b_4_basis_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &result_0){
380
381auto x=uv.col(0).array();
382auto y=uv.col(1).array();
383auto z=uv.col(2).array();
384
385switch(local_index){
386 case 0: {result_0 = pow(x + y + z - 1, 4);} break;
387 case 1: {result_0 = pow(x, 4);} break;
388 case 2: {result_0 = pow(y, 4);} break;
389 case 3: {result_0 = pow(z, 4);} break;
390 case 4: {result_0 = -4*x*pow(x + y + z - 1, 3);} break;
391 case 5: {result_0 = 6*pow(x, 2)*pow(x + y + z - 1, 2);} break;
392 case 6: {result_0 = -4*pow(x, 3)*(x + y + z - 1);} break;
393 case 7: {result_0 = 4*pow(x, 3)*y;} break;
394 case 8: {result_0 = 6*pow(x, 2)*pow(y, 2);} break;
395 case 9: {result_0 = 4*x*pow(y, 3);} break;
396 case 10: {result_0 = -4*pow(y, 3)*(x + y + z - 1);} break;
397 case 11: {result_0 = 6*pow(y, 2)*pow(x + y + z - 1, 2);} break;
398 case 12: {result_0 = -4*y*pow(x + y + z - 1, 3);} break;
399 case 13: {result_0 = -4*z*pow(x + y + z - 1, 3);} break;
400 case 14: {result_0 = 6*pow(z, 2)*pow(x + y + z - 1, 2);} break;
401 case 15: {result_0 = -4*pow(z, 3)*(x + y + z - 1);} break;
402 case 16: {result_0 = 4*pow(x, 3)*z;} break;
403 case 17: {result_0 = 6*pow(x, 2)*pow(z, 2);} break;
404 case 18: {result_0 = 4*x*pow(z, 3);} break;
405 case 19: {result_0 = 4*pow(y, 3)*z;} break;
406 case 20: {result_0 = 6*pow(y, 2)*pow(z, 2);} break;
407 case 21: {result_0 = 4*y*pow(z, 3);} break;
408 case 22: {result_0 = 12*x*y*pow(x + y + z - 1, 2);} break;
409 case 23: {result_0 = -12*x*pow(y, 2)*(x + y + z - 1);} break;
410 case 24: {result_0 = -12*pow(x, 2)*y*(x + y + z - 1);} break;
411 case 25: {result_0 = 12*x*z*pow(x + y + z - 1, 2);} break;
412 case 26: {result_0 = -12*x*pow(z, 2)*(x + y + z - 1);} break;
413 case 27: {result_0 = -12*pow(x, 2)*z*(x + y + z - 1);} break;
414 case 28: {result_0 = 12*pow(x, 2)*y*z;} break;
415 case 29: {result_0 = 12*x*y*pow(z, 2);} break;
416 case 30: {result_0 = 12*x*pow(y, 2)*z;} break;
417 case 31: {result_0 = -12*pow(y, 2)*z*(x + y + z - 1);} break;
418 case 32: {result_0 = -12*y*pow(z, 2)*(x + y + z - 1);} break;
419 case 33: {result_0 = 12*y*z*pow(x + y + z - 1, 2);} break;
420 case 34: {result_0 = -24*x*y*z*(x + y + z - 1);} break;
421 default: assert(false);
422}}
423void b_4_basis_grad_value_3d(const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
424
425auto x=uv.col(0).array();
426auto y=uv.col(1).array();
427auto z=uv.col(2).array();
428
429val.resize(uv.rows(), uv.cols());
430 Eigen::ArrayXd result_0(uv.rows());
431switch(local_index){
432 case 0: {{result_0 = 4*pow(x + y + z - 1, 3);val.col(0) = result_0; }{result_0 = 4*pow(x + y + z - 1, 3);val.col(1) = result_0; }{result_0 = 4*pow(x + y + z - 1, 3);val.col(2) = result_0; }} break;
433 case 1: {{result_0 = 4*pow(x, 3);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
434 case 2: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 4*pow(y, 3);val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
435 case 3: {{result_0.setZero();val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 4*pow(z, 3);val.col(2) = result_0; }} break;
436 case 4: {{const auto helper_0 = y + z - 1;
437result_0 = -4*pow(helper_0 + x, 2)*(helper_0 + 4*x);val.col(0) = result_0; }{result_0 = -12*x*pow(x + y + z - 1, 2);val.col(1) = result_0; }{result_0 = -12*x*pow(x + y + z - 1, 2);val.col(2) = result_0; }} break;
438 case 5: {{const auto helper_0 = y + z - 1;
439result_0 = 12*x*(helper_0 + x)*(helper_0 + 2*x);val.col(0) = result_0; }{result_0 = 12*pow(x, 2)*(x + y + z - 1);val.col(1) = result_0; }{result_0 = 12*pow(x, 2)*(x + y + z - 1);val.col(2) = result_0; }} break;
440 case 6: {{result_0 = -4*pow(x, 2)*(4*x + 3*y + 3*z - 3);val.col(0) = result_0; }{result_0 = -4*pow(x, 3);val.col(1) = result_0; }{result_0 = -4*pow(x, 3);val.col(2) = result_0; }} break;
441 case 7: {{result_0 = 12*pow(x, 2)*y;val.col(0) = result_0; }{result_0 = 4*pow(x, 3);val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
442 case 8: {{result_0 = 12*x*pow(y, 2);val.col(0) = result_0; }{result_0 = 12*pow(x, 2)*y;val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
443 case 9: {{result_0 = 4*pow(y, 3);val.col(0) = result_0; }{result_0 = 12*x*pow(y, 2);val.col(1) = result_0; }{result_0.setZero();val.col(2) = result_0; }} break;
444 case 10: {{result_0 = -4*pow(y, 3);val.col(0) = result_0; }{result_0 = -4*pow(y, 2)*(3*x + 4*y + 3*z - 3);val.col(1) = result_0; }{result_0 = -4*pow(y, 3);val.col(2) = result_0; }} break;
445 case 11: {{result_0 = 12*pow(y, 2)*(x + y + z - 1);val.col(0) = result_0; }{const auto helper_0 = x + z - 1;
446result_0 = 12*y*(helper_0 + y)*(helper_0 + 2*y);val.col(1) = result_0; }{result_0 = 12*pow(y, 2)*(x + y + z - 1);val.col(2) = result_0; }} break;
447 case 12: {{result_0 = -12*y*pow(x + y + z - 1, 2);val.col(0) = result_0; }{const auto helper_0 = x + z - 1;
448result_0 = -4*pow(helper_0 + y, 2)*(helper_0 + 4*y);val.col(1) = result_0; }{result_0 = -12*y*pow(x + y + z - 1, 2);val.col(2) = result_0; }} break;
449 case 13: {{result_0 = -12*z*pow(x + y + z - 1, 2);val.col(0) = result_0; }{result_0 = -12*z*pow(x + y + z - 1, 2);val.col(1) = result_0; }{const auto helper_0 = x + y - 1;
450result_0 = -4*pow(helper_0 + z, 2)*(helper_0 + 4*z);val.col(2) = result_0; }} break;
451 case 14: {{result_0 = 12*pow(z, 2)*(x + y + z - 1);val.col(0) = result_0; }{result_0 = 12*pow(z, 2)*(x + y + z - 1);val.col(1) = result_0; }{const auto helper_0 = x + y - 1;
452result_0 = 12*z*(helper_0 + z)*(helper_0 + 2*z);val.col(2) = result_0; }} break;
453 case 15: {{result_0 = -4*pow(z, 3);val.col(0) = result_0; }{result_0 = -4*pow(z, 3);val.col(1) = result_0; }{result_0 = -4*pow(z, 2)*(3*x + 3*y + 4*z - 3);val.col(2) = result_0; }} break;
454 case 16: {{result_0 = 12*pow(x, 2)*z;val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 4*pow(x, 3);val.col(2) = result_0; }} break;
455 case 17: {{result_0 = 12*x*pow(z, 2);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 12*pow(x, 2)*z;val.col(2) = result_0; }} break;
456 case 18: {{result_0 = 4*pow(z, 3);val.col(0) = result_0; }{result_0.setZero();val.col(1) = result_0; }{result_0 = 12*x*pow(z, 2);val.col(2) = result_0; }} break;
457 case 19: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 12*pow(y, 2)*z;val.col(1) = result_0; }{result_0 = 4*pow(y, 3);val.col(2) = result_0; }} break;
458 case 20: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 12*y*pow(z, 2);val.col(1) = result_0; }{result_0 = 12*pow(y, 2)*z;val.col(2) = result_0; }} break;
459 case 21: {{result_0.setZero();val.col(0) = result_0; }{result_0 = 4*pow(z, 3);val.col(1) = result_0; }{result_0 = 12*y*pow(z, 2);val.col(2) = result_0; }} break;
460 case 22: {{const auto helper_0 = y + z - 1;
461result_0 = 12*y*(helper_0 + x)*(helper_0 + 3*x);val.col(0) = result_0; }{const auto helper_0 = x + z - 1;
462result_0 = 12*x*(helper_0 + y)*(helper_0 + 3*y);val.col(1) = result_0; }{result_0 = 24*x*y*(x + y + z - 1);val.col(2) = result_0; }} break;
463 case 23: {{result_0 = -12*pow(y, 2)*(2*x + y + z - 1);val.col(0) = result_0; }{result_0 = -12*x*y*(2*x + 3*y + 2*z - 2);val.col(1) = result_0; }{result_0 = -12*x*pow(y, 2);val.col(2) = result_0; }} break;
464 case 24: {{result_0 = -12*x*y*(3*x + 2*y + 2*z - 2);val.col(0) = result_0; }{result_0 = -12*pow(x, 2)*(x + 2*y + z - 1);val.col(1) = result_0; }{result_0 = -12*pow(x, 2)*y;val.col(2) = result_0; }} break;
465 case 25: {{const auto helper_0 = y + z - 1;
466result_0 = 12*z*(helper_0 + x)*(helper_0 + 3*x);val.col(0) = result_0; }{result_0 = 24*x*z*(x + y + z - 1);val.col(1) = result_0; }{const auto helper_0 = x + y - 1;
467result_0 = 12*x*(helper_0 + z)*(helper_0 + 3*z);val.col(2) = result_0; }} break;
468 case 26: {{result_0 = -12*pow(z, 2)*(2*x + y + z - 1);val.col(0) = result_0; }{result_0 = -12*x*pow(z, 2);val.col(1) = result_0; }{result_0 = -12*x*z*(2*x + 2*y + 3*z - 2);val.col(2) = result_0; }} break;
469 case 27: {{result_0 = -12*x*z*(3*x + 2*y + 2*z - 2);val.col(0) = result_0; }{result_0 = -12*pow(x, 2)*z;val.col(1) = result_0; }{result_0 = -12*pow(x, 2)*(x + y + 2*z - 1);val.col(2) = result_0; }} break;
470 case 28: {{result_0 = 24*x*y*z;val.col(0) = result_0; }{result_0 = 12*pow(x, 2)*z;val.col(1) = result_0; }{result_0 = 12*pow(x, 2)*y;val.col(2) = result_0; }} break;
471 case 29: {{result_0 = 12*y*pow(z, 2);val.col(0) = result_0; }{result_0 = 12*x*pow(z, 2);val.col(1) = result_0; }{result_0 = 24*x*y*z;val.col(2) = result_0; }} break;
472 case 30: {{result_0 = 12*pow(y, 2)*z;val.col(0) = result_0; }{result_0 = 24*x*y*z;val.col(1) = result_0; }{result_0 = 12*x*pow(y, 2);val.col(2) = result_0; }} break;
473 case 31: {{result_0 = -12*pow(y, 2)*z;val.col(0) = result_0; }{result_0 = -12*y*z*(2*x + 3*y + 2*z - 2);val.col(1) = result_0; }{result_0 = -12*pow(y, 2)*(x + y + 2*z - 1);val.col(2) = result_0; }} break;
474 case 32: {{result_0 = -12*y*pow(z, 2);val.col(0) = result_0; }{result_0 = -12*pow(z, 2)*(x + 2*y + z - 1);val.col(1) = result_0; }{result_0 = -12*y*z*(2*x + 2*y + 3*z - 2);val.col(2) = result_0; }} break;
475 case 33: {{result_0 = 24*y*z*(x + y + z - 1);val.col(0) = result_0; }{const auto helper_0 = x + z - 1;
476result_0 = 12*z*(helper_0 + y)*(helper_0 + 3*y);val.col(1) = result_0; }{const auto helper_0 = x + y - 1;
477result_0 = 12*y*(helper_0 + z)*(helper_0 + 3*z);val.col(2) = result_0; }} break;
478 case 34: {{result_0 = -24*y*z*(2*x + y + z - 1);val.col(0) = result_0; }{result_0 = -24*x*z*(x + 2*y + z - 1);val.col(1) = result_0; }{result_0 = -24*x*y*(x + y + 2*z - 1);val.col(2) = result_0; }} break;
479 default: assert(false);
480}}
481
482
483}
484
485
486void b_basis_value_3d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
487
488switch(b){
489 case 0: b_0_basis_value_3d(local_index, uv, val); break;
490 case 1: b_1_basis_value_3d(local_index, uv, val); break;
491 case 2: b_2_basis_value_3d(local_index, uv, val); break;
492 case 3: b_3_basis_value_3d(local_index, uv, val); break;
493 case 4: b_4_basis_value_3d(local_index, uv, val); break;
494 default: assert(false);
495}}
496
497void b_grad_basis_value_3d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val){
498
499switch(b){
500 case 0: b_0_basis_grad_value_3d(local_index, uv, val); break;
501 case 1: b_1_basis_grad_value_3d(local_index, uv, val); break;
502 case 2: b_2_basis_grad_value_3d(local_index, uv, val); break;
503 case 3: b_3_basis_grad_value_3d(local_index, uv, val); break;
504 case 4: b_4_basis_grad_value_3d(local_index, uv, val); break;
505 default: assert(false);
506}}
507
508namespace {
509
510}}}
double val
Definition Assembler.cpp:86
int y
int z
int x
void b_basis_value_3d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val)
void b_grad_basis_value_3d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val)
void b_basis_value_2d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val)
void b_grad_basis_value_2d(const int b, const int local_index, const Eigen::MatrixXd &uv, Eigen::MatrixXd &val)