1
// This code conforms with the UFC specification version 1.4.2
2
// and was automatically generated by FFC version 0.9.4+.
4
// This code was generated with the option '-l dolfin' and
5
// contains DOLFIN-specific wrappers that depend on DOLFIN.
7
// This code was generated with the following parameters:
10
// convert_exceptions_to_warnings: False
11
// cpp_optimize: False
12
// cpp_optimize_flags: '-O2'
14
// error_control: False
23
// quadrature_degree: 'auto'
24
// quadrature_rule: 'auto'
25
// representation: 'auto'
36
/// This class defines the interface for a finite element.
38
class stokes_finite_element_0: public ufc::finite_element
43
stokes_finite_element_0() : ufc::finite_element()
49
virtual ~stokes_finite_element_0()
54
/// Return a string identifying the finite element
55
virtual const char* signature() const
57
return "FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2)";
60
/// Return the cell shape
61
virtual ufc::shape cell_shape() const
63
return ufc::tetrahedron;
66
/// Return the topological dimension of the cell shape
67
virtual unsigned int topological_dimension() const
72
/// Return the geometric dimension of the cell shape
73
virtual unsigned int geometric_dimension() const
78
/// Return the dimension of the finite element function space
79
virtual unsigned int space_dimension() const
84
/// Return the rank of the value space
85
virtual unsigned int value_rank() const
90
/// Return the dimension of the value space for axis i
91
virtual unsigned int value_dimension(unsigned int i) const
96
/// Evaluate basis function i at given point in cell
97
virtual void evaluate_basis(unsigned int i,
99
const double* coordinates,
100
const ufc::cell& c) const
102
// Extract vertex coordinates
103
const double * const * x = c.coordinates;
105
// Compute Jacobian of affine map from reference cell
106
const double J_00 = x[1][0] - x[0][0];
107
const double J_01 = x[2][0] - x[0][0];
108
const double J_02 = x[3][0] - x[0][0];
109
const double J_10 = x[1][1] - x[0][1];
110
const double J_11 = x[2][1] - x[0][1];
111
const double J_12 = x[3][1] - x[0][1];
112
const double J_20 = x[1][2] - x[0][2];
113
const double J_21 = x[2][2] - x[0][2];
114
const double J_22 = x[3][2] - x[0][2];
116
// Compute sub determinants
117
const double d_00 = J_11*J_22 - J_12*J_21;
118
const double d_01 = J_12*J_20 - J_10*J_22;
119
const double d_02 = J_10*J_21 - J_11*J_20;
120
const double d_10 = J_02*J_21 - J_01*J_22;
121
const double d_11 = J_00*J_22 - J_02*J_20;
122
const double d_12 = J_01*J_20 - J_00*J_21;
123
const double d_20 = J_01*J_12 - J_02*J_11;
124
const double d_21 = J_02*J_10 - J_00*J_12;
125
const double d_22 = J_00*J_11 - J_01*J_10;
127
// Compute determinant of Jacobian
128
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
130
// Compute inverse of Jacobian
133
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
134
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
135
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
137
// Get coordinates and map to the reference (FIAT) element
138
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
139
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
140
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
144
*values = 0.000000000000000;
150
// Array of basisvalues.
151
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
153
// Declare helper variables.
157
double tmp5 = 0.000000000000000;
158
double tmp6 = 0.000000000000000;
159
double tmp7 = 0.000000000000000;
160
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
161
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
162
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
163
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
164
double tmp4 = tmp3*tmp3;
166
// Compute basisvalues.
167
basisvalues[0] = 1.000000000000000;
168
basisvalues[1] = tmp0;
169
for (unsigned int r = 1; r < 2; r++)
171
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
172
ss = r*(r + 1)*(r + 2)/6;
173
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
174
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
175
}// end loop over 'r'
176
for (unsigned int r = 0; r < 2; r++)
178
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
179
ss = r*(r + 1)*(r + 2)/6;
180
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
181
}// end loop over 'r'
182
for (unsigned int r = 0; r < 1; r++)
184
for (unsigned int s = 1; s < 2 - r; s++)
186
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
187
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
188
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
189
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
190
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
191
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
192
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
193
}// end loop over 's'
194
}// end loop over 'r'
195
for (unsigned int r = 0; r < 2; r++)
197
for (unsigned int s = 0; s < 2 - r; s++)
199
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
200
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
201
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
202
}// end loop over 's'
203
}// end loop over 'r'
204
for (unsigned int r = 0; r < 1; r++)
206
for (unsigned int s = 0; s < 1 - r; s++)
208
for (unsigned int t = 1; t < 2 - r - s; t++)
210
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
211
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
212
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
213
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
214
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
215
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
216
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
217
}// end loop over 't'
218
}// end loop over 's'
219
}// end loop over 'r'
220
for (unsigned int r = 0; r < 3; r++)
222
for (unsigned int s = 0; s < 3 - r; s++)
224
for (unsigned int t = 0; t < 3 - r - s; t++)
226
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
227
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
228
}// end loop over 't'
229
}// end loop over 's'
230
}// end loop over 'r'
232
// Table(s) of coefficients.
233
static const double coefficients0[10] = \
234
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
237
for (unsigned int r = 0; r < 10; r++)
239
*values += coefficients0[r]*basisvalues[r];
240
}// end loop over 'r'
246
// Array of basisvalues.
247
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
249
// Declare helper variables.
253
double tmp5 = 0.000000000000000;
254
double tmp6 = 0.000000000000000;
255
double tmp7 = 0.000000000000000;
256
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
257
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
258
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
259
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
260
double tmp4 = tmp3*tmp3;
262
// Compute basisvalues.
263
basisvalues[0] = 1.000000000000000;
264
basisvalues[1] = tmp0;
265
for (unsigned int r = 1; r < 2; r++)
267
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
268
ss = r*(r + 1)*(r + 2)/6;
269
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
270
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
271
}// end loop over 'r'
272
for (unsigned int r = 0; r < 2; r++)
274
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
275
ss = r*(r + 1)*(r + 2)/6;
276
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
277
}// end loop over 'r'
278
for (unsigned int r = 0; r < 1; r++)
280
for (unsigned int s = 1; s < 2 - r; s++)
282
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
283
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
284
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
285
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
286
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
287
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
288
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
289
}// end loop over 's'
290
}// end loop over 'r'
291
for (unsigned int r = 0; r < 2; r++)
293
for (unsigned int s = 0; s < 2 - r; s++)
295
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
296
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
297
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
298
}// end loop over 's'
299
}// end loop over 'r'
300
for (unsigned int r = 0; r < 1; r++)
302
for (unsigned int s = 0; s < 1 - r; s++)
304
for (unsigned int t = 1; t < 2 - r - s; t++)
306
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
307
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
308
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
309
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
310
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
311
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
312
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
313
}// end loop over 't'
314
}// end loop over 's'
315
}// end loop over 'r'
316
for (unsigned int r = 0; r < 3; r++)
318
for (unsigned int s = 0; s < 3 - r; s++)
320
for (unsigned int t = 0; t < 3 - r - s; t++)
322
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
323
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
324
}// end loop over 't'
325
}// end loop over 's'
326
}// end loop over 'r'
328
// Table(s) of coefficients.
329
static const double coefficients0[10] = \
330
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
333
for (unsigned int r = 0; r < 10; r++)
335
*values += coefficients0[r]*basisvalues[r];
336
}// end loop over 'r'
342
// Array of basisvalues.
343
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
345
// Declare helper variables.
349
double tmp5 = 0.000000000000000;
350
double tmp6 = 0.000000000000000;
351
double tmp7 = 0.000000000000000;
352
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
353
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
354
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
355
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
356
double tmp4 = tmp3*tmp3;
358
// Compute basisvalues.
359
basisvalues[0] = 1.000000000000000;
360
basisvalues[1] = tmp0;
361
for (unsigned int r = 1; r < 2; r++)
363
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
364
ss = r*(r + 1)*(r + 2)/6;
365
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
366
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
367
}// end loop over 'r'
368
for (unsigned int r = 0; r < 2; r++)
370
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
371
ss = r*(r + 1)*(r + 2)/6;
372
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
373
}// end loop over 'r'
374
for (unsigned int r = 0; r < 1; r++)
376
for (unsigned int s = 1; s < 2 - r; s++)
378
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
379
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
380
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
381
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
382
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
383
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
384
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
385
}// end loop over 's'
386
}// end loop over 'r'
387
for (unsigned int r = 0; r < 2; r++)
389
for (unsigned int s = 0; s < 2 - r; s++)
391
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
392
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
393
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
394
}// end loop over 's'
395
}// end loop over 'r'
396
for (unsigned int r = 0; r < 1; r++)
398
for (unsigned int s = 0; s < 1 - r; s++)
400
for (unsigned int t = 1; t < 2 - r - s; t++)
402
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
403
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
404
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
405
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
406
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
407
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
408
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
409
}// end loop over 't'
410
}// end loop over 's'
411
}// end loop over 'r'
412
for (unsigned int r = 0; r < 3; r++)
414
for (unsigned int s = 0; s < 3 - r; s++)
416
for (unsigned int t = 0; t < 3 - r - s; t++)
418
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
419
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
420
}// end loop over 't'
421
}// end loop over 's'
422
}// end loop over 'r'
424
// Table(s) of coefficients.
425
static const double coefficients0[10] = \
426
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
429
for (unsigned int r = 0; r < 10; r++)
431
*values += coefficients0[r]*basisvalues[r];
432
}// end loop over 'r'
438
// Array of basisvalues.
439
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
441
// Declare helper variables.
445
double tmp5 = 0.000000000000000;
446
double tmp6 = 0.000000000000000;
447
double tmp7 = 0.000000000000000;
448
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
449
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
450
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
451
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
452
double tmp4 = tmp3*tmp3;
454
// Compute basisvalues.
455
basisvalues[0] = 1.000000000000000;
456
basisvalues[1] = tmp0;
457
for (unsigned int r = 1; r < 2; r++)
459
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
460
ss = r*(r + 1)*(r + 2)/6;
461
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
462
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
463
}// end loop over 'r'
464
for (unsigned int r = 0; r < 2; r++)
466
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
467
ss = r*(r + 1)*(r + 2)/6;
468
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
469
}// end loop over 'r'
470
for (unsigned int r = 0; r < 1; r++)
472
for (unsigned int s = 1; s < 2 - r; s++)
474
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
475
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
476
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
477
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
478
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
479
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
480
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
481
}// end loop over 's'
482
}// end loop over 'r'
483
for (unsigned int r = 0; r < 2; r++)
485
for (unsigned int s = 0; s < 2 - r; s++)
487
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
488
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
489
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
490
}// end loop over 's'
491
}// end loop over 'r'
492
for (unsigned int r = 0; r < 1; r++)
494
for (unsigned int s = 0; s < 1 - r; s++)
496
for (unsigned int t = 1; t < 2 - r - s; t++)
498
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
499
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
500
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
501
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
502
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
503
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
504
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
505
}// end loop over 't'
506
}// end loop over 's'
507
}// end loop over 'r'
508
for (unsigned int r = 0; r < 3; r++)
510
for (unsigned int s = 0; s < 3 - r; s++)
512
for (unsigned int t = 0; t < 3 - r - s; t++)
514
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
515
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
516
}// end loop over 't'
517
}// end loop over 's'
518
}// end loop over 'r'
520
// Table(s) of coefficients.
521
static const double coefficients0[10] = \
522
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
525
for (unsigned int r = 0; r < 10; r++)
527
*values += coefficients0[r]*basisvalues[r];
528
}// end loop over 'r'
534
// Array of basisvalues.
535
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
537
// Declare helper variables.
541
double tmp5 = 0.000000000000000;
542
double tmp6 = 0.000000000000000;
543
double tmp7 = 0.000000000000000;
544
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
545
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
546
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
547
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
548
double tmp4 = tmp3*tmp3;
550
// Compute basisvalues.
551
basisvalues[0] = 1.000000000000000;
552
basisvalues[1] = tmp0;
553
for (unsigned int r = 1; r < 2; r++)
555
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
556
ss = r*(r + 1)*(r + 2)/6;
557
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
558
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
559
}// end loop over 'r'
560
for (unsigned int r = 0; r < 2; r++)
562
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
563
ss = r*(r + 1)*(r + 2)/6;
564
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
565
}// end loop over 'r'
566
for (unsigned int r = 0; r < 1; r++)
568
for (unsigned int s = 1; s < 2 - r; s++)
570
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
571
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
572
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
573
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
574
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
575
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
576
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
577
}// end loop over 's'
578
}// end loop over 'r'
579
for (unsigned int r = 0; r < 2; r++)
581
for (unsigned int s = 0; s < 2 - r; s++)
583
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
584
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
585
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
586
}// end loop over 's'
587
}// end loop over 'r'
588
for (unsigned int r = 0; r < 1; r++)
590
for (unsigned int s = 0; s < 1 - r; s++)
592
for (unsigned int t = 1; t < 2 - r - s; t++)
594
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
595
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
596
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
597
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
598
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
599
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
600
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
601
}// end loop over 't'
602
}// end loop over 's'
603
}// end loop over 'r'
604
for (unsigned int r = 0; r < 3; r++)
606
for (unsigned int s = 0; s < 3 - r; s++)
608
for (unsigned int t = 0; t < 3 - r - s; t++)
610
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
611
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
612
}// end loop over 't'
613
}// end loop over 's'
614
}// end loop over 'r'
616
// Table(s) of coefficients.
617
static const double coefficients0[10] = \
618
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
621
for (unsigned int r = 0; r < 10; r++)
623
*values += coefficients0[r]*basisvalues[r];
624
}// end loop over 'r'
630
// Array of basisvalues.
631
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
633
// Declare helper variables.
637
double tmp5 = 0.000000000000000;
638
double tmp6 = 0.000000000000000;
639
double tmp7 = 0.000000000000000;
640
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
641
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
642
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
643
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
644
double tmp4 = tmp3*tmp3;
646
// Compute basisvalues.
647
basisvalues[0] = 1.000000000000000;
648
basisvalues[1] = tmp0;
649
for (unsigned int r = 1; r < 2; r++)
651
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
652
ss = r*(r + 1)*(r + 2)/6;
653
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
654
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
655
}// end loop over 'r'
656
for (unsigned int r = 0; r < 2; r++)
658
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
659
ss = r*(r + 1)*(r + 2)/6;
660
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
661
}// end loop over 'r'
662
for (unsigned int r = 0; r < 1; r++)
664
for (unsigned int s = 1; s < 2 - r; s++)
666
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
667
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
668
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
669
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
670
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
671
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
672
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
673
}// end loop over 's'
674
}// end loop over 'r'
675
for (unsigned int r = 0; r < 2; r++)
677
for (unsigned int s = 0; s < 2 - r; s++)
679
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
680
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
681
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
682
}// end loop over 's'
683
}// end loop over 'r'
684
for (unsigned int r = 0; r < 1; r++)
686
for (unsigned int s = 0; s < 1 - r; s++)
688
for (unsigned int t = 1; t < 2 - r - s; t++)
690
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
691
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
692
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
693
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
694
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
695
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
696
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
697
}// end loop over 't'
698
}// end loop over 's'
699
}// end loop over 'r'
700
for (unsigned int r = 0; r < 3; r++)
702
for (unsigned int s = 0; s < 3 - r; s++)
704
for (unsigned int t = 0; t < 3 - r - s; t++)
706
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
707
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
708
}// end loop over 't'
709
}// end loop over 's'
710
}// end loop over 'r'
712
// Table(s) of coefficients.
713
static const double coefficients0[10] = \
714
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
717
for (unsigned int r = 0; r < 10; r++)
719
*values += coefficients0[r]*basisvalues[r];
720
}// end loop over 'r'
726
// Array of basisvalues.
727
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
729
// Declare helper variables.
733
double tmp5 = 0.000000000000000;
734
double tmp6 = 0.000000000000000;
735
double tmp7 = 0.000000000000000;
736
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
737
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
738
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
739
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
740
double tmp4 = tmp3*tmp3;
742
// Compute basisvalues.
743
basisvalues[0] = 1.000000000000000;
744
basisvalues[1] = tmp0;
745
for (unsigned int r = 1; r < 2; r++)
747
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
748
ss = r*(r + 1)*(r + 2)/6;
749
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
750
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
751
}// end loop over 'r'
752
for (unsigned int r = 0; r < 2; r++)
754
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
755
ss = r*(r + 1)*(r + 2)/6;
756
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
757
}// end loop over 'r'
758
for (unsigned int r = 0; r < 1; r++)
760
for (unsigned int s = 1; s < 2 - r; s++)
762
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
763
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
764
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
765
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
766
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
767
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
768
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
769
}// end loop over 's'
770
}// end loop over 'r'
771
for (unsigned int r = 0; r < 2; r++)
773
for (unsigned int s = 0; s < 2 - r; s++)
775
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
776
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
777
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
778
}// end loop over 's'
779
}// end loop over 'r'
780
for (unsigned int r = 0; r < 1; r++)
782
for (unsigned int s = 0; s < 1 - r; s++)
784
for (unsigned int t = 1; t < 2 - r - s; t++)
786
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
787
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
788
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
789
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
790
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
791
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
792
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
793
}// end loop over 't'
794
}// end loop over 's'
795
}// end loop over 'r'
796
for (unsigned int r = 0; r < 3; r++)
798
for (unsigned int s = 0; s < 3 - r; s++)
800
for (unsigned int t = 0; t < 3 - r - s; t++)
802
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
803
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
804
}// end loop over 't'
805
}// end loop over 's'
806
}// end loop over 'r'
808
// Table(s) of coefficients.
809
static const double coefficients0[10] = \
810
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
813
for (unsigned int r = 0; r < 10; r++)
815
*values += coefficients0[r]*basisvalues[r];
816
}// end loop over 'r'
822
// Array of basisvalues.
823
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
825
// Declare helper variables.
829
double tmp5 = 0.000000000000000;
830
double tmp6 = 0.000000000000000;
831
double tmp7 = 0.000000000000000;
832
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
833
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
834
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
835
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
836
double tmp4 = tmp3*tmp3;
838
// Compute basisvalues.
839
basisvalues[0] = 1.000000000000000;
840
basisvalues[1] = tmp0;
841
for (unsigned int r = 1; r < 2; r++)
843
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
844
ss = r*(r + 1)*(r + 2)/6;
845
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
846
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
847
}// end loop over 'r'
848
for (unsigned int r = 0; r < 2; r++)
850
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
851
ss = r*(r + 1)*(r + 2)/6;
852
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
853
}// end loop over 'r'
854
for (unsigned int r = 0; r < 1; r++)
856
for (unsigned int s = 1; s < 2 - r; s++)
858
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
859
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
860
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
861
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
862
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
863
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
864
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
865
}// end loop over 's'
866
}// end loop over 'r'
867
for (unsigned int r = 0; r < 2; r++)
869
for (unsigned int s = 0; s < 2 - r; s++)
871
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
872
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
873
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
874
}// end loop over 's'
875
}// end loop over 'r'
876
for (unsigned int r = 0; r < 1; r++)
878
for (unsigned int s = 0; s < 1 - r; s++)
880
for (unsigned int t = 1; t < 2 - r - s; t++)
882
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
883
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
884
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
885
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
886
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
887
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
888
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
889
}// end loop over 't'
890
}// end loop over 's'
891
}// end loop over 'r'
892
for (unsigned int r = 0; r < 3; r++)
894
for (unsigned int s = 0; s < 3 - r; s++)
896
for (unsigned int t = 0; t < 3 - r - s; t++)
898
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
899
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
900
}// end loop over 't'
901
}// end loop over 's'
902
}// end loop over 'r'
904
// Table(s) of coefficients.
905
static const double coefficients0[10] = \
906
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
909
for (unsigned int r = 0; r < 10; r++)
911
*values += coefficients0[r]*basisvalues[r];
912
}// end loop over 'r'
918
// Array of basisvalues.
919
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
921
// Declare helper variables.
925
double tmp5 = 0.000000000000000;
926
double tmp6 = 0.000000000000000;
927
double tmp7 = 0.000000000000000;
928
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
929
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
930
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
931
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
932
double tmp4 = tmp3*tmp3;
934
// Compute basisvalues.
935
basisvalues[0] = 1.000000000000000;
936
basisvalues[1] = tmp0;
937
for (unsigned int r = 1; r < 2; r++)
939
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
940
ss = r*(r + 1)*(r + 2)/6;
941
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
942
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
943
}// end loop over 'r'
944
for (unsigned int r = 0; r < 2; r++)
946
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
947
ss = r*(r + 1)*(r + 2)/6;
948
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
949
}// end loop over 'r'
950
for (unsigned int r = 0; r < 1; r++)
952
for (unsigned int s = 1; s < 2 - r; s++)
954
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
955
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
956
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
957
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
958
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
959
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
960
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
961
}// end loop over 's'
962
}// end loop over 'r'
963
for (unsigned int r = 0; r < 2; r++)
965
for (unsigned int s = 0; s < 2 - r; s++)
967
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
968
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
969
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
970
}// end loop over 's'
971
}// end loop over 'r'
972
for (unsigned int r = 0; r < 1; r++)
974
for (unsigned int s = 0; s < 1 - r; s++)
976
for (unsigned int t = 1; t < 2 - r - s; t++)
978
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
979
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
980
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
981
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
982
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
983
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
984
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
985
}// end loop over 't'
986
}// end loop over 's'
987
}// end loop over 'r'
988
for (unsigned int r = 0; r < 3; r++)
990
for (unsigned int s = 0; s < 3 - r; s++)
992
for (unsigned int t = 0; t < 3 - r - s; t++)
994
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
995
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
996
}// end loop over 't'
997
}// end loop over 's'
998
}// end loop over 'r'
1000
// Table(s) of coefficients.
1001
static const double coefficients0[10] = \
1002
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
1004
// Compute value(s).
1005
for (unsigned int r = 0; r < 10; r++)
1007
*values += coefficients0[r]*basisvalues[r];
1008
}// end loop over 'r'
1014
// Array of basisvalues.
1015
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
1017
// Declare helper variables.
1018
unsigned int rr = 0;
1019
unsigned int ss = 0;
1020
unsigned int tt = 0;
1021
double tmp5 = 0.000000000000000;
1022
double tmp6 = 0.000000000000000;
1023
double tmp7 = 0.000000000000000;
1024
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
1025
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
1026
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
1027
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
1028
double tmp4 = tmp3*tmp3;
1030
// Compute basisvalues.
1031
basisvalues[0] = 1.000000000000000;
1032
basisvalues[1] = tmp0;
1033
for (unsigned int r = 1; r < 2; r++)
1035
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1036
ss = r*(r + 1)*(r + 2)/6;
1037
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1038
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
1039
}// end loop over 'r'
1040
for (unsigned int r = 0; r < 2; r++)
1042
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1043
ss = r*(r + 1)*(r + 2)/6;
1044
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
1045
}// end loop over 'r'
1046
for (unsigned int r = 0; r < 1; r++)
1048
for (unsigned int s = 1; s < 2 - r; s++)
1050
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1051
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1052
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1053
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1054
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1055
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1056
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1057
}// end loop over 's'
1058
}// end loop over 'r'
1059
for (unsigned int r = 0; r < 2; r++)
1061
for (unsigned int s = 0; s < 2 - r; s++)
1063
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1064
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1065
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
1066
}// end loop over 's'
1067
}// end loop over 'r'
1068
for (unsigned int r = 0; r < 1; r++)
1070
for (unsigned int s = 0; s < 1 - r; s++)
1072
for (unsigned int t = 1; t < 2 - r - s; t++)
1074
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
1075
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1076
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
1077
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1078
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1079
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1080
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1081
}// end loop over 't'
1082
}// end loop over 's'
1083
}// end loop over 'r'
1084
for (unsigned int r = 0; r < 3; r++)
1086
for (unsigned int s = 0; s < 3 - r; s++)
1088
for (unsigned int t = 0; t < 3 - r - s; t++)
1090
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1091
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
1092
}// end loop over 't'
1093
}// end loop over 's'
1094
}// end loop over 'r'
1096
// Table(s) of coefficients.
1097
static const double coefficients0[10] = \
1098
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
1100
// Compute value(s).
1101
for (unsigned int r = 0; r < 10; r++)
1103
*values += coefficients0[r]*basisvalues[r];
1104
}// end loop over 'r'
1111
/// Evaluate all basis functions at given point in cell
1112
virtual void evaluate_basis_all(double* values,
1113
const double* coordinates,
1114
const ufc::cell& c) const
1116
// Helper variable to hold values of a single dof.
1117
double dof_values = 0.000000000000000;
1119
// Loop dofs and call evaluate_basis.
1120
for (unsigned int r = 0; r < 10; r++)
1122
evaluate_basis(r, &dof_values, coordinates, c);
1123
values[r] = dof_values;
1124
}// end loop over 'r'
1127
/// Evaluate order n derivatives of basis function i at given point in cell
1128
virtual void evaluate_basis_derivatives(unsigned int i,
1131
const double* coordinates,
1132
const ufc::cell& c) const
1134
// Extract vertex coordinates
1135
const double * const * x = c.coordinates;
1137
// Compute Jacobian of affine map from reference cell
1138
const double J_00 = x[1][0] - x[0][0];
1139
const double J_01 = x[2][0] - x[0][0];
1140
const double J_02 = x[3][0] - x[0][0];
1141
const double J_10 = x[1][1] - x[0][1];
1142
const double J_11 = x[2][1] - x[0][1];
1143
const double J_12 = x[3][1] - x[0][1];
1144
const double J_20 = x[1][2] - x[0][2];
1145
const double J_21 = x[2][2] - x[0][2];
1146
const double J_22 = x[3][2] - x[0][2];
1148
// Compute sub determinants
1149
const double d_00 = J_11*J_22 - J_12*J_21;
1150
const double d_01 = J_12*J_20 - J_10*J_22;
1151
const double d_02 = J_10*J_21 - J_11*J_20;
1152
const double d_10 = J_02*J_21 - J_01*J_22;
1153
const double d_11 = J_00*J_22 - J_02*J_20;
1154
const double d_12 = J_01*J_20 - J_00*J_21;
1155
const double d_20 = J_01*J_12 - J_02*J_11;
1156
const double d_21 = J_02*J_10 - J_00*J_12;
1157
const double d_22 = J_00*J_11 - J_01*J_10;
1159
// Compute determinant of Jacobian
1160
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
1162
// Compute inverse of Jacobian
1163
const double K_00 = d_00 / detJ;
1164
const double K_01 = d_10 / detJ;
1165
const double K_02 = d_20 / detJ;
1166
const double K_10 = d_01 / detJ;
1167
const double K_11 = d_11 / detJ;
1168
const double K_12 = d_21 / detJ;
1169
const double K_20 = d_02 / detJ;
1170
const double K_21 = d_12 / detJ;
1171
const double K_22 = d_22 / detJ;
1173
// Compute constants
1174
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
1175
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
1176
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
1178
// Get coordinates and map to the reference (FIAT) element
1179
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
1180
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
1181
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
1184
// Compute number of derivatives.
1185
unsigned int num_derivatives = 1;
1186
for (unsigned int r = 0; r < n; r++)
1188
num_derivatives *= 3;
1189
}// end loop over 'r'
1191
// Declare pointer to two dimensional array that holds combinations of derivatives and initialise
1192
unsigned int **combinations = new unsigned int *[num_derivatives];
1193
for (unsigned int row = 0; row < num_derivatives; row++)
1195
combinations[row] = new unsigned int [n];
1196
for (unsigned int col = 0; col < n; col++)
1197
combinations[row][col] = 0;
1200
// Generate combinations of derivatives
1201
for (unsigned int row = 1; row < num_derivatives; row++)
1203
for (unsigned int num = 0; num < row; num++)
1205
for (unsigned int col = n-1; col+1 > 0; col--)
1207
if (combinations[row][col] + 1 > 2)
1208
combinations[row][col] = 0;
1211
combinations[row][col] += 1;
1218
// Compute inverse of Jacobian
1219
const double Jinv[3][3] = {{K_00, K_01, K_02}, {K_10, K_11, K_12}, {K_20, K_21, K_22}};
1221
// Declare transformation matrix
1222
// Declare pointer to two dimensional array and initialise
1223
double **transform = new double *[num_derivatives];
1225
for (unsigned int j = 0; j < num_derivatives; j++)
1227
transform[j] = new double [num_derivatives];
1228
for (unsigned int k = 0; k < num_derivatives; k++)
1229
transform[j][k] = 1;
1232
// Construct transformation matrix
1233
for (unsigned int row = 0; row < num_derivatives; row++)
1235
for (unsigned int col = 0; col < num_derivatives; col++)
1237
for (unsigned int k = 0; k < n; k++)
1238
transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
1242
// Reset values. Assuming that values is always an array.
1243
for (unsigned int r = 0; r < num_derivatives; r++)
1245
values[r] = 0.000000000000000;
1246
}// end loop over 'r'
1253
// Array of basisvalues.
1254
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
1256
// Declare helper variables.
1257
unsigned int rr = 0;
1258
unsigned int ss = 0;
1259
unsigned int tt = 0;
1260
double tmp5 = 0.000000000000000;
1261
double tmp6 = 0.000000000000000;
1262
double tmp7 = 0.000000000000000;
1263
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
1264
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
1265
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
1266
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
1267
double tmp4 = tmp3*tmp3;
1269
// Compute basisvalues.
1270
basisvalues[0] = 1.000000000000000;
1271
basisvalues[1] = tmp0;
1272
for (unsigned int r = 1; r < 2; r++)
1274
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1275
ss = r*(r + 1)*(r + 2)/6;
1276
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1277
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
1278
}// end loop over 'r'
1279
for (unsigned int r = 0; r < 2; r++)
1281
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1282
ss = r*(r + 1)*(r + 2)/6;
1283
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
1284
}// end loop over 'r'
1285
for (unsigned int r = 0; r < 1; r++)
1287
for (unsigned int s = 1; s < 2 - r; s++)
1289
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1290
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1291
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1292
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1293
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1294
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1295
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1296
}// end loop over 's'
1297
}// end loop over 'r'
1298
for (unsigned int r = 0; r < 2; r++)
1300
for (unsigned int s = 0; s < 2 - r; s++)
1302
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1303
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1304
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
1305
}// end loop over 's'
1306
}// end loop over 'r'
1307
for (unsigned int r = 0; r < 1; r++)
1309
for (unsigned int s = 0; s < 1 - r; s++)
1311
for (unsigned int t = 1; t < 2 - r - s; t++)
1313
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
1314
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1315
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
1316
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1317
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1318
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1319
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1320
}// end loop over 't'
1321
}// end loop over 's'
1322
}// end loop over 'r'
1323
for (unsigned int r = 0; r < 3; r++)
1325
for (unsigned int s = 0; s < 3 - r; s++)
1327
for (unsigned int t = 0; t < 3 - r - s; t++)
1329
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1330
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
1331
}// end loop over 't'
1332
}// end loop over 's'
1333
}// end loop over 'r'
1335
// Table(s) of coefficients.
1336
static const double coefficients0[10] = \
1337
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
1339
// Tables of derivatives of the polynomial base (transpose).
1340
static const double dmats0[10][10] = \
1341
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1342
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1343
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1344
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1345
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1346
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1347
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1348
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1349
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1350
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1352
static const double dmats1[10][10] = \
1353
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1354
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1355
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1356
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1357
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1358
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1359
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1360
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1361
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1362
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1364
static const double dmats2[10][10] = \
1365
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1366
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1367
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1368
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1369
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1370
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1371
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1372
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1373
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1374
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1376
// Compute reference derivatives.
1377
// Declare pointer to array of derivatives on FIAT element.
1378
double *derivatives = new double[num_derivatives];
1379
for (unsigned int r = 0; r < num_derivatives; r++)
1381
derivatives[r] = 0.000000000000000;
1382
}// end loop over 'r'
1384
// Declare derivative matrix (of polynomial basis).
1385
double dmats[10][10] = \
1386
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1387
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1388
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1389
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1390
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1391
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1392
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1393
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
1394
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
1395
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
1397
// Declare (auxiliary) derivative matrix (of polynomial basis).
1398
double dmats_old[10][10] = \
1399
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1400
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1401
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1402
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1403
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1404
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1405
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1406
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
1407
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
1408
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
1410
// Loop possible derivatives.
1411
for (unsigned int r = 0; r < num_derivatives; r++)
1413
// Resetting dmats values to compute next derivative.
1414
for (unsigned int t = 0; t < 10; t++)
1416
for (unsigned int u = 0; u < 10; u++)
1418
dmats[t][u] = 0.000000000000000;
1421
dmats[t][u] = 1.000000000000000;
1424
}// end loop over 'u'
1425
}// end loop over 't'
1427
// Looping derivative order to generate dmats.
1428
for (unsigned int s = 0; s < n; s++)
1430
// Updating dmats_old with new values and resetting dmats.
1431
for (unsigned int t = 0; t < 10; t++)
1433
for (unsigned int u = 0; u < 10; u++)
1435
dmats_old[t][u] = dmats[t][u];
1436
dmats[t][u] = 0.000000000000000;
1437
}// end loop over 'u'
1438
}// end loop over 't'
1440
// Update dmats using an inner product.
1441
if (combinations[r][s] == 0)
1443
for (unsigned int t = 0; t < 10; t++)
1445
for (unsigned int u = 0; u < 10; u++)
1447
for (unsigned int tu = 0; tu < 10; tu++)
1449
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1450
}// end loop over 'tu'
1451
}// end loop over 'u'
1452
}// end loop over 't'
1455
if (combinations[r][s] == 1)
1457
for (unsigned int t = 0; t < 10; t++)
1459
for (unsigned int u = 0; u < 10; u++)
1461
for (unsigned int tu = 0; tu < 10; tu++)
1463
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1464
}// end loop over 'tu'
1465
}// end loop over 'u'
1466
}// end loop over 't'
1469
if (combinations[r][s] == 2)
1471
for (unsigned int t = 0; t < 10; t++)
1473
for (unsigned int u = 0; u < 10; u++)
1475
for (unsigned int tu = 0; tu < 10; tu++)
1477
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
1478
}// end loop over 'tu'
1479
}// end loop over 'u'
1480
}// end loop over 't'
1483
}// end loop over 's'
1484
for (unsigned int s = 0; s < 10; s++)
1486
for (unsigned int t = 0; t < 10; t++)
1488
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1489
}// end loop over 't'
1490
}// end loop over 's'
1491
}// end loop over 'r'
1493
// Transform derivatives back to physical element
1494
for (unsigned int r = 0; r < num_derivatives; r++)
1496
for (unsigned int s = 0; s < num_derivatives; s++)
1498
values[r] += transform[r][s]*derivatives[s];
1499
}// end loop over 's'
1500
}// end loop over 'r'
1502
// Delete pointer to array of derivatives on FIAT element
1503
delete [] derivatives;
1505
// Delete pointer to array of combinations of derivatives and transform
1506
for (unsigned int r = 0; r < num_derivatives; r++)
1508
delete [] combinations[r];
1509
}// end loop over 'r'
1510
delete [] combinations;
1511
for (unsigned int r = 0; r < num_derivatives; r++)
1513
delete [] transform[r];
1514
}// end loop over 'r'
1515
delete [] transform;
1521
// Array of basisvalues.
1522
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
1524
// Declare helper variables.
1525
unsigned int rr = 0;
1526
unsigned int ss = 0;
1527
unsigned int tt = 0;
1528
double tmp5 = 0.000000000000000;
1529
double tmp6 = 0.000000000000000;
1530
double tmp7 = 0.000000000000000;
1531
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
1532
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
1533
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
1534
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
1535
double tmp4 = tmp3*tmp3;
1537
// Compute basisvalues.
1538
basisvalues[0] = 1.000000000000000;
1539
basisvalues[1] = tmp0;
1540
for (unsigned int r = 1; r < 2; r++)
1542
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1543
ss = r*(r + 1)*(r + 2)/6;
1544
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1545
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
1546
}// end loop over 'r'
1547
for (unsigned int r = 0; r < 2; r++)
1549
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1550
ss = r*(r + 1)*(r + 2)/6;
1551
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
1552
}// end loop over 'r'
1553
for (unsigned int r = 0; r < 1; r++)
1555
for (unsigned int s = 1; s < 2 - r; s++)
1557
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1558
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1559
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1560
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1561
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1562
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1563
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1564
}// end loop over 's'
1565
}// end loop over 'r'
1566
for (unsigned int r = 0; r < 2; r++)
1568
for (unsigned int s = 0; s < 2 - r; s++)
1570
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1571
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1572
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
1573
}// end loop over 's'
1574
}// end loop over 'r'
1575
for (unsigned int r = 0; r < 1; r++)
1577
for (unsigned int s = 0; s < 1 - r; s++)
1579
for (unsigned int t = 1; t < 2 - r - s; t++)
1581
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
1582
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1583
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
1584
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1585
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1586
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1587
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1588
}// end loop over 't'
1589
}// end loop over 's'
1590
}// end loop over 'r'
1591
for (unsigned int r = 0; r < 3; r++)
1593
for (unsigned int s = 0; s < 3 - r; s++)
1595
for (unsigned int t = 0; t < 3 - r - s; t++)
1597
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1598
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
1599
}// end loop over 't'
1600
}// end loop over 's'
1601
}// end loop over 'r'
1603
// Table(s) of coefficients.
1604
static const double coefficients0[10] = \
1605
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
1607
// Tables of derivatives of the polynomial base (transpose).
1608
static const double dmats0[10][10] = \
1609
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1610
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1611
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1612
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1613
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1614
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1615
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1616
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1617
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1618
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1620
static const double dmats1[10][10] = \
1621
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1622
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1623
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1624
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1625
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1626
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1627
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1628
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1629
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1630
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1632
static const double dmats2[10][10] = \
1633
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1634
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1635
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1636
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1637
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1638
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1639
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1640
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1641
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1642
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1644
// Compute reference derivatives.
1645
// Declare pointer to array of derivatives on FIAT element.
1646
double *derivatives = new double[num_derivatives];
1647
for (unsigned int r = 0; r < num_derivatives; r++)
1649
derivatives[r] = 0.000000000000000;
1650
}// end loop over 'r'
1652
// Declare derivative matrix (of polynomial basis).
1653
double dmats[10][10] = \
1654
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1655
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1656
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1657
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1658
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1659
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1660
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1661
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
1662
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
1663
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
1665
// Declare (auxiliary) derivative matrix (of polynomial basis).
1666
double dmats_old[10][10] = \
1667
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1668
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1669
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1670
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1671
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1672
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1673
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1674
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
1675
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
1676
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
1678
// Loop possible derivatives.
1679
for (unsigned int r = 0; r < num_derivatives; r++)
1681
// Resetting dmats values to compute next derivative.
1682
for (unsigned int t = 0; t < 10; t++)
1684
for (unsigned int u = 0; u < 10; u++)
1686
dmats[t][u] = 0.000000000000000;
1689
dmats[t][u] = 1.000000000000000;
1692
}// end loop over 'u'
1693
}// end loop over 't'
1695
// Looping derivative order to generate dmats.
1696
for (unsigned int s = 0; s < n; s++)
1698
// Updating dmats_old with new values and resetting dmats.
1699
for (unsigned int t = 0; t < 10; t++)
1701
for (unsigned int u = 0; u < 10; u++)
1703
dmats_old[t][u] = dmats[t][u];
1704
dmats[t][u] = 0.000000000000000;
1705
}// end loop over 'u'
1706
}// end loop over 't'
1708
// Update dmats using an inner product.
1709
if (combinations[r][s] == 0)
1711
for (unsigned int t = 0; t < 10; t++)
1713
for (unsigned int u = 0; u < 10; u++)
1715
for (unsigned int tu = 0; tu < 10; tu++)
1717
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1718
}// end loop over 'tu'
1719
}// end loop over 'u'
1720
}// end loop over 't'
1723
if (combinations[r][s] == 1)
1725
for (unsigned int t = 0; t < 10; t++)
1727
for (unsigned int u = 0; u < 10; u++)
1729
for (unsigned int tu = 0; tu < 10; tu++)
1731
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1732
}// end loop over 'tu'
1733
}// end loop over 'u'
1734
}// end loop over 't'
1737
if (combinations[r][s] == 2)
1739
for (unsigned int t = 0; t < 10; t++)
1741
for (unsigned int u = 0; u < 10; u++)
1743
for (unsigned int tu = 0; tu < 10; tu++)
1745
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
1746
}// end loop over 'tu'
1747
}// end loop over 'u'
1748
}// end loop over 't'
1751
}// end loop over 's'
1752
for (unsigned int s = 0; s < 10; s++)
1754
for (unsigned int t = 0; t < 10; t++)
1756
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1757
}// end loop over 't'
1758
}// end loop over 's'
1759
}// end loop over 'r'
1761
// Transform derivatives back to physical element
1762
for (unsigned int r = 0; r < num_derivatives; r++)
1764
for (unsigned int s = 0; s < num_derivatives; s++)
1766
values[r] += transform[r][s]*derivatives[s];
1767
}// end loop over 's'
1768
}// end loop over 'r'
1770
// Delete pointer to array of derivatives on FIAT element
1771
delete [] derivatives;
1773
// Delete pointer to array of combinations of derivatives and transform
1774
for (unsigned int r = 0; r < num_derivatives; r++)
1776
delete [] combinations[r];
1777
}// end loop over 'r'
1778
delete [] combinations;
1779
for (unsigned int r = 0; r < num_derivatives; r++)
1781
delete [] transform[r];
1782
}// end loop over 'r'
1783
delete [] transform;
1789
// Array of basisvalues.
1790
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
1792
// Declare helper variables.
1793
unsigned int rr = 0;
1794
unsigned int ss = 0;
1795
unsigned int tt = 0;
1796
double tmp5 = 0.000000000000000;
1797
double tmp6 = 0.000000000000000;
1798
double tmp7 = 0.000000000000000;
1799
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
1800
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
1801
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
1802
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
1803
double tmp4 = tmp3*tmp3;
1805
// Compute basisvalues.
1806
basisvalues[0] = 1.000000000000000;
1807
basisvalues[1] = tmp0;
1808
for (unsigned int r = 1; r < 2; r++)
1810
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1811
ss = r*(r + 1)*(r + 2)/6;
1812
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1813
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
1814
}// end loop over 'r'
1815
for (unsigned int r = 0; r < 2; r++)
1817
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1818
ss = r*(r + 1)*(r + 2)/6;
1819
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
1820
}// end loop over 'r'
1821
for (unsigned int r = 0; r < 1; r++)
1823
for (unsigned int s = 1; s < 2 - r; s++)
1825
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1826
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1827
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1828
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1829
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1830
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
1831
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1832
}// end loop over 's'
1833
}// end loop over 'r'
1834
for (unsigned int r = 0; r < 2; r++)
1836
for (unsigned int s = 0; s < 2 - r; s++)
1838
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1839
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1840
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
1841
}// end loop over 's'
1842
}// end loop over 'r'
1843
for (unsigned int r = 0; r < 1; r++)
1845
for (unsigned int s = 0; s < 1 - r; s++)
1847
for (unsigned int t = 1; t < 2 - r - s; t++)
1849
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
1850
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1851
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
1852
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1853
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1854
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
1855
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1856
}// end loop over 't'
1857
}// end loop over 's'
1858
}// end loop over 'r'
1859
for (unsigned int r = 0; r < 3; r++)
1861
for (unsigned int s = 0; s < 3 - r; s++)
1863
for (unsigned int t = 0; t < 3 - r - s; t++)
1865
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1866
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
1867
}// end loop over 't'
1868
}// end loop over 's'
1869
}// end loop over 'r'
1871
// Table(s) of coefficients.
1872
static const double coefficients0[10] = \
1873
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
1875
// Tables of derivatives of the polynomial base (transpose).
1876
static const double dmats0[10][10] = \
1877
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1878
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1879
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1880
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1881
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1882
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1883
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1884
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1885
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1886
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1888
static const double dmats1[10][10] = \
1889
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1890
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1891
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1892
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1893
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1894
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1895
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1896
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1897
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1898
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1900
static const double dmats2[10][10] = \
1901
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1902
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1903
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1904
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1905
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1906
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1907
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1908
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1909
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1910
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
1912
// Compute reference derivatives.
1913
// Declare pointer to array of derivatives on FIAT element.
1914
double *derivatives = new double[num_derivatives];
1915
for (unsigned int r = 0; r < num_derivatives; r++)
1917
derivatives[r] = 0.000000000000000;
1918
}// end loop over 'r'
1920
// Declare derivative matrix (of polynomial basis).
1921
double dmats[10][10] = \
1922
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1923
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1924
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1925
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1926
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1927
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1928
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1929
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
1930
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
1931
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
1933
// Declare (auxiliary) derivative matrix (of polynomial basis).
1934
double dmats_old[10][10] = \
1935
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1936
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1937
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1938
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1939
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1940
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1941
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
1942
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
1943
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
1944
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
1946
// Loop possible derivatives.
1947
for (unsigned int r = 0; r < num_derivatives; r++)
1949
// Resetting dmats values to compute next derivative.
1950
for (unsigned int t = 0; t < 10; t++)
1952
for (unsigned int u = 0; u < 10; u++)
1954
dmats[t][u] = 0.000000000000000;
1957
dmats[t][u] = 1.000000000000000;
1960
}// end loop over 'u'
1961
}// end loop over 't'
1963
// Looping derivative order to generate dmats.
1964
for (unsigned int s = 0; s < n; s++)
1966
// Updating dmats_old with new values and resetting dmats.
1967
for (unsigned int t = 0; t < 10; t++)
1969
for (unsigned int u = 0; u < 10; u++)
1971
dmats_old[t][u] = dmats[t][u];
1972
dmats[t][u] = 0.000000000000000;
1973
}// end loop over 'u'
1974
}// end loop over 't'
1976
// Update dmats using an inner product.
1977
if (combinations[r][s] == 0)
1979
for (unsigned int t = 0; t < 10; t++)
1981
for (unsigned int u = 0; u < 10; u++)
1983
for (unsigned int tu = 0; tu < 10; tu++)
1985
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1986
}// end loop over 'tu'
1987
}// end loop over 'u'
1988
}// end loop over 't'
1991
if (combinations[r][s] == 1)
1993
for (unsigned int t = 0; t < 10; t++)
1995
for (unsigned int u = 0; u < 10; u++)
1997
for (unsigned int tu = 0; tu < 10; tu++)
1999
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2000
}// end loop over 'tu'
2001
}// end loop over 'u'
2002
}// end loop over 't'
2005
if (combinations[r][s] == 2)
2007
for (unsigned int t = 0; t < 10; t++)
2009
for (unsigned int u = 0; u < 10; u++)
2011
for (unsigned int tu = 0; tu < 10; tu++)
2013
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
2014
}// end loop over 'tu'
2015
}// end loop over 'u'
2016
}// end loop over 't'
2019
}// end loop over 's'
2020
for (unsigned int s = 0; s < 10; s++)
2022
for (unsigned int t = 0; t < 10; t++)
2024
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2025
}// end loop over 't'
2026
}// end loop over 's'
2027
}// end loop over 'r'
2029
// Transform derivatives back to physical element
2030
for (unsigned int r = 0; r < num_derivatives; r++)
2032
for (unsigned int s = 0; s < num_derivatives; s++)
2034
values[r] += transform[r][s]*derivatives[s];
2035
}// end loop over 's'
2036
}// end loop over 'r'
2038
// Delete pointer to array of derivatives on FIAT element
2039
delete [] derivatives;
2041
// Delete pointer to array of combinations of derivatives and transform
2042
for (unsigned int r = 0; r < num_derivatives; r++)
2044
delete [] combinations[r];
2045
}// end loop over 'r'
2046
delete [] combinations;
2047
for (unsigned int r = 0; r < num_derivatives; r++)
2049
delete [] transform[r];
2050
}// end loop over 'r'
2051
delete [] transform;
2057
// Array of basisvalues.
2058
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
2060
// Declare helper variables.
2061
unsigned int rr = 0;
2062
unsigned int ss = 0;
2063
unsigned int tt = 0;
2064
double tmp5 = 0.000000000000000;
2065
double tmp6 = 0.000000000000000;
2066
double tmp7 = 0.000000000000000;
2067
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
2068
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
2069
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
2070
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
2071
double tmp4 = tmp3*tmp3;
2073
// Compute basisvalues.
2074
basisvalues[0] = 1.000000000000000;
2075
basisvalues[1] = tmp0;
2076
for (unsigned int r = 1; r < 2; r++)
2078
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2079
ss = r*(r + 1)*(r + 2)/6;
2080
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2081
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
2082
}// end loop over 'r'
2083
for (unsigned int r = 0; r < 2; r++)
2085
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2086
ss = r*(r + 1)*(r + 2)/6;
2087
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
2088
}// end loop over 'r'
2089
for (unsigned int r = 0; r < 1; r++)
2091
for (unsigned int s = 1; s < 2 - r; s++)
2093
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2094
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2095
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2096
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2097
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2098
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2099
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2100
}// end loop over 's'
2101
}// end loop over 'r'
2102
for (unsigned int r = 0; r < 2; r++)
2104
for (unsigned int s = 0; s < 2 - r; s++)
2106
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2107
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2108
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
2109
}// end loop over 's'
2110
}// end loop over 'r'
2111
for (unsigned int r = 0; r < 1; r++)
2113
for (unsigned int s = 0; s < 1 - r; s++)
2115
for (unsigned int t = 1; t < 2 - r - s; t++)
2117
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
2118
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2119
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
2120
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2121
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2122
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2123
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2124
}// end loop over 't'
2125
}// end loop over 's'
2126
}// end loop over 'r'
2127
for (unsigned int r = 0; r < 3; r++)
2129
for (unsigned int s = 0; s < 3 - r; s++)
2131
for (unsigned int t = 0; t < 3 - r - s; t++)
2133
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2134
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
2135
}// end loop over 't'
2136
}// end loop over 's'
2137
}// end loop over 'r'
2139
// Table(s) of coefficients.
2140
static const double coefficients0[10] = \
2141
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
2143
// Tables of derivatives of the polynomial base (transpose).
2144
static const double dmats0[10][10] = \
2145
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2146
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2147
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2148
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2149
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2150
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2151
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2152
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2153
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2154
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2156
static const double dmats1[10][10] = \
2157
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2158
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2159
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2160
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2161
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2162
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2163
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2164
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2165
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2166
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2168
static const double dmats2[10][10] = \
2169
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2170
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2171
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2172
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2173
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2174
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2175
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2176
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2177
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2178
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2180
// Compute reference derivatives.
2181
// Declare pointer to array of derivatives on FIAT element.
2182
double *derivatives = new double[num_derivatives];
2183
for (unsigned int r = 0; r < num_derivatives; r++)
2185
derivatives[r] = 0.000000000000000;
2186
}// end loop over 'r'
2188
// Declare derivative matrix (of polynomial basis).
2189
double dmats[10][10] = \
2190
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2191
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2192
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2193
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2194
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2195
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2196
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2197
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
2198
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
2199
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
2201
// Declare (auxiliary) derivative matrix (of polynomial basis).
2202
double dmats_old[10][10] = \
2203
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2204
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2205
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2206
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2207
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2208
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2209
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2210
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
2211
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
2212
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
2214
// Loop possible derivatives.
2215
for (unsigned int r = 0; r < num_derivatives; r++)
2217
// Resetting dmats values to compute next derivative.
2218
for (unsigned int t = 0; t < 10; t++)
2220
for (unsigned int u = 0; u < 10; u++)
2222
dmats[t][u] = 0.000000000000000;
2225
dmats[t][u] = 1.000000000000000;
2228
}// end loop over 'u'
2229
}// end loop over 't'
2231
// Looping derivative order to generate dmats.
2232
for (unsigned int s = 0; s < n; s++)
2234
// Updating dmats_old with new values and resetting dmats.
2235
for (unsigned int t = 0; t < 10; t++)
2237
for (unsigned int u = 0; u < 10; u++)
2239
dmats_old[t][u] = dmats[t][u];
2240
dmats[t][u] = 0.000000000000000;
2241
}// end loop over 'u'
2242
}// end loop over 't'
2244
// Update dmats using an inner product.
2245
if (combinations[r][s] == 0)
2247
for (unsigned int t = 0; t < 10; t++)
2249
for (unsigned int u = 0; u < 10; u++)
2251
for (unsigned int tu = 0; tu < 10; tu++)
2253
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2254
}// end loop over 'tu'
2255
}// end loop over 'u'
2256
}// end loop over 't'
2259
if (combinations[r][s] == 1)
2261
for (unsigned int t = 0; t < 10; t++)
2263
for (unsigned int u = 0; u < 10; u++)
2265
for (unsigned int tu = 0; tu < 10; tu++)
2267
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2268
}// end loop over 'tu'
2269
}// end loop over 'u'
2270
}// end loop over 't'
2273
if (combinations[r][s] == 2)
2275
for (unsigned int t = 0; t < 10; t++)
2277
for (unsigned int u = 0; u < 10; u++)
2279
for (unsigned int tu = 0; tu < 10; tu++)
2281
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
2282
}// end loop over 'tu'
2283
}// end loop over 'u'
2284
}// end loop over 't'
2287
}// end loop over 's'
2288
for (unsigned int s = 0; s < 10; s++)
2290
for (unsigned int t = 0; t < 10; t++)
2292
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2293
}// end loop over 't'
2294
}// end loop over 's'
2295
}// end loop over 'r'
2297
// Transform derivatives back to physical element
2298
for (unsigned int r = 0; r < num_derivatives; r++)
2300
for (unsigned int s = 0; s < num_derivatives; s++)
2302
values[r] += transform[r][s]*derivatives[s];
2303
}// end loop over 's'
2304
}// end loop over 'r'
2306
// Delete pointer to array of derivatives on FIAT element
2307
delete [] derivatives;
2309
// Delete pointer to array of combinations of derivatives and transform
2310
for (unsigned int r = 0; r < num_derivatives; r++)
2312
delete [] combinations[r];
2313
}// end loop over 'r'
2314
delete [] combinations;
2315
for (unsigned int r = 0; r < num_derivatives; r++)
2317
delete [] transform[r];
2318
}// end loop over 'r'
2319
delete [] transform;
2325
// Array of basisvalues.
2326
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
2328
// Declare helper variables.
2329
unsigned int rr = 0;
2330
unsigned int ss = 0;
2331
unsigned int tt = 0;
2332
double tmp5 = 0.000000000000000;
2333
double tmp6 = 0.000000000000000;
2334
double tmp7 = 0.000000000000000;
2335
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
2336
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
2337
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
2338
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
2339
double tmp4 = tmp3*tmp3;
2341
// Compute basisvalues.
2342
basisvalues[0] = 1.000000000000000;
2343
basisvalues[1] = tmp0;
2344
for (unsigned int r = 1; r < 2; r++)
2346
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2347
ss = r*(r + 1)*(r + 2)/6;
2348
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2349
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
2350
}// end loop over 'r'
2351
for (unsigned int r = 0; r < 2; r++)
2353
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2354
ss = r*(r + 1)*(r + 2)/6;
2355
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
2356
}// end loop over 'r'
2357
for (unsigned int r = 0; r < 1; r++)
2359
for (unsigned int s = 1; s < 2 - r; s++)
2361
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2362
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2363
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2364
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2365
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2366
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2367
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2368
}// end loop over 's'
2369
}// end loop over 'r'
2370
for (unsigned int r = 0; r < 2; r++)
2372
for (unsigned int s = 0; s < 2 - r; s++)
2374
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2375
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2376
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
2377
}// end loop over 's'
2378
}// end loop over 'r'
2379
for (unsigned int r = 0; r < 1; r++)
2381
for (unsigned int s = 0; s < 1 - r; s++)
2383
for (unsigned int t = 1; t < 2 - r - s; t++)
2385
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
2386
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2387
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
2388
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2389
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2390
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2391
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2392
}// end loop over 't'
2393
}// end loop over 's'
2394
}// end loop over 'r'
2395
for (unsigned int r = 0; r < 3; r++)
2397
for (unsigned int s = 0; s < 3 - r; s++)
2399
for (unsigned int t = 0; t < 3 - r - s; t++)
2401
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2402
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
2403
}// end loop over 't'
2404
}// end loop over 's'
2405
}// end loop over 'r'
2407
// Table(s) of coefficients.
2408
static const double coefficients0[10] = \
2409
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
2411
// Tables of derivatives of the polynomial base (transpose).
2412
static const double dmats0[10][10] = \
2413
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2414
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2415
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2416
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2417
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2418
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2419
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2420
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2421
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2422
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2424
static const double dmats1[10][10] = \
2425
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2426
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2427
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2428
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2429
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2430
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2431
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2432
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2433
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2434
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2436
static const double dmats2[10][10] = \
2437
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2438
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2439
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2440
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2441
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2442
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2443
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2444
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2445
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2446
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2448
// Compute reference derivatives.
2449
// Declare pointer to array of derivatives on FIAT element.
2450
double *derivatives = new double[num_derivatives];
2451
for (unsigned int r = 0; r < num_derivatives; r++)
2453
derivatives[r] = 0.000000000000000;
2454
}// end loop over 'r'
2456
// Declare derivative matrix (of polynomial basis).
2457
double dmats[10][10] = \
2458
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2459
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2460
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2461
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2462
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2463
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2464
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2465
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
2466
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
2467
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
2469
// Declare (auxiliary) derivative matrix (of polynomial basis).
2470
double dmats_old[10][10] = \
2471
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2472
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2473
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2474
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2475
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2476
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2477
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2478
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
2479
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
2480
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
2482
// Loop possible derivatives.
2483
for (unsigned int r = 0; r < num_derivatives; r++)
2485
// Resetting dmats values to compute next derivative.
2486
for (unsigned int t = 0; t < 10; t++)
2488
for (unsigned int u = 0; u < 10; u++)
2490
dmats[t][u] = 0.000000000000000;
2493
dmats[t][u] = 1.000000000000000;
2496
}// end loop over 'u'
2497
}// end loop over 't'
2499
// Looping derivative order to generate dmats.
2500
for (unsigned int s = 0; s < n; s++)
2502
// Updating dmats_old with new values and resetting dmats.
2503
for (unsigned int t = 0; t < 10; t++)
2505
for (unsigned int u = 0; u < 10; u++)
2507
dmats_old[t][u] = dmats[t][u];
2508
dmats[t][u] = 0.000000000000000;
2509
}// end loop over 'u'
2510
}// end loop over 't'
2512
// Update dmats using an inner product.
2513
if (combinations[r][s] == 0)
2515
for (unsigned int t = 0; t < 10; t++)
2517
for (unsigned int u = 0; u < 10; u++)
2519
for (unsigned int tu = 0; tu < 10; tu++)
2521
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2522
}// end loop over 'tu'
2523
}// end loop over 'u'
2524
}// end loop over 't'
2527
if (combinations[r][s] == 1)
2529
for (unsigned int t = 0; t < 10; t++)
2531
for (unsigned int u = 0; u < 10; u++)
2533
for (unsigned int tu = 0; tu < 10; tu++)
2535
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2536
}// end loop over 'tu'
2537
}// end loop over 'u'
2538
}// end loop over 't'
2541
if (combinations[r][s] == 2)
2543
for (unsigned int t = 0; t < 10; t++)
2545
for (unsigned int u = 0; u < 10; u++)
2547
for (unsigned int tu = 0; tu < 10; tu++)
2549
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
2550
}// end loop over 'tu'
2551
}// end loop over 'u'
2552
}// end loop over 't'
2555
}// end loop over 's'
2556
for (unsigned int s = 0; s < 10; s++)
2558
for (unsigned int t = 0; t < 10; t++)
2560
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2561
}// end loop over 't'
2562
}// end loop over 's'
2563
}// end loop over 'r'
2565
// Transform derivatives back to physical element
2566
for (unsigned int r = 0; r < num_derivatives; r++)
2568
for (unsigned int s = 0; s < num_derivatives; s++)
2570
values[r] += transform[r][s]*derivatives[s];
2571
}// end loop over 's'
2572
}// end loop over 'r'
2574
// Delete pointer to array of derivatives on FIAT element
2575
delete [] derivatives;
2577
// Delete pointer to array of combinations of derivatives and transform
2578
for (unsigned int r = 0; r < num_derivatives; r++)
2580
delete [] combinations[r];
2581
}// end loop over 'r'
2582
delete [] combinations;
2583
for (unsigned int r = 0; r < num_derivatives; r++)
2585
delete [] transform[r];
2586
}// end loop over 'r'
2587
delete [] transform;
2593
// Array of basisvalues.
2594
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
2596
// Declare helper variables.
2597
unsigned int rr = 0;
2598
unsigned int ss = 0;
2599
unsigned int tt = 0;
2600
double tmp5 = 0.000000000000000;
2601
double tmp6 = 0.000000000000000;
2602
double tmp7 = 0.000000000000000;
2603
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
2604
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
2605
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
2606
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
2607
double tmp4 = tmp3*tmp3;
2609
// Compute basisvalues.
2610
basisvalues[0] = 1.000000000000000;
2611
basisvalues[1] = tmp0;
2612
for (unsigned int r = 1; r < 2; r++)
2614
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2615
ss = r*(r + 1)*(r + 2)/6;
2616
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2617
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
2618
}// end loop over 'r'
2619
for (unsigned int r = 0; r < 2; r++)
2621
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2622
ss = r*(r + 1)*(r + 2)/6;
2623
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
2624
}// end loop over 'r'
2625
for (unsigned int r = 0; r < 1; r++)
2627
for (unsigned int s = 1; s < 2 - r; s++)
2629
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2630
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2631
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2632
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2633
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2634
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2635
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2636
}// end loop over 's'
2637
}// end loop over 'r'
2638
for (unsigned int r = 0; r < 2; r++)
2640
for (unsigned int s = 0; s < 2 - r; s++)
2642
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2643
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2644
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
2645
}// end loop over 's'
2646
}// end loop over 'r'
2647
for (unsigned int r = 0; r < 1; r++)
2649
for (unsigned int s = 0; s < 1 - r; s++)
2651
for (unsigned int t = 1; t < 2 - r - s; t++)
2653
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
2654
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2655
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
2656
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2657
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2658
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2659
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2660
}// end loop over 't'
2661
}// end loop over 's'
2662
}// end loop over 'r'
2663
for (unsigned int r = 0; r < 3; r++)
2665
for (unsigned int s = 0; s < 3 - r; s++)
2667
for (unsigned int t = 0; t < 3 - r - s; t++)
2669
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2670
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
2671
}// end loop over 't'
2672
}// end loop over 's'
2673
}// end loop over 'r'
2675
// Table(s) of coefficients.
2676
static const double coefficients0[10] = \
2677
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
2679
// Tables of derivatives of the polynomial base (transpose).
2680
static const double dmats0[10][10] = \
2681
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2682
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2683
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2684
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2685
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2686
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2687
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2688
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2689
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2690
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2692
static const double dmats1[10][10] = \
2693
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2694
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2695
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2696
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2697
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2698
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2699
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2700
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2701
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2702
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2704
static const double dmats2[10][10] = \
2705
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2706
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2707
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2708
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2709
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2710
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2711
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2712
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2713
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2714
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2716
// Compute reference derivatives.
2717
// Declare pointer to array of derivatives on FIAT element.
2718
double *derivatives = new double[num_derivatives];
2719
for (unsigned int r = 0; r < num_derivatives; r++)
2721
derivatives[r] = 0.000000000000000;
2722
}// end loop over 'r'
2724
// Declare derivative matrix (of polynomial basis).
2725
double dmats[10][10] = \
2726
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2727
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2728
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2729
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2730
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2731
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2732
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2733
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
2734
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
2735
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
2737
// Declare (auxiliary) derivative matrix (of polynomial basis).
2738
double dmats_old[10][10] = \
2739
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2740
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2741
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2742
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2743
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2744
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2745
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2746
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
2747
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
2748
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
2750
// Loop possible derivatives.
2751
for (unsigned int r = 0; r < num_derivatives; r++)
2753
// Resetting dmats values to compute next derivative.
2754
for (unsigned int t = 0; t < 10; t++)
2756
for (unsigned int u = 0; u < 10; u++)
2758
dmats[t][u] = 0.000000000000000;
2761
dmats[t][u] = 1.000000000000000;
2764
}// end loop over 'u'
2765
}// end loop over 't'
2767
// Looping derivative order to generate dmats.
2768
for (unsigned int s = 0; s < n; s++)
2770
// Updating dmats_old with new values and resetting dmats.
2771
for (unsigned int t = 0; t < 10; t++)
2773
for (unsigned int u = 0; u < 10; u++)
2775
dmats_old[t][u] = dmats[t][u];
2776
dmats[t][u] = 0.000000000000000;
2777
}// end loop over 'u'
2778
}// end loop over 't'
2780
// Update dmats using an inner product.
2781
if (combinations[r][s] == 0)
2783
for (unsigned int t = 0; t < 10; t++)
2785
for (unsigned int u = 0; u < 10; u++)
2787
for (unsigned int tu = 0; tu < 10; tu++)
2789
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2790
}// end loop over 'tu'
2791
}// end loop over 'u'
2792
}// end loop over 't'
2795
if (combinations[r][s] == 1)
2797
for (unsigned int t = 0; t < 10; t++)
2799
for (unsigned int u = 0; u < 10; u++)
2801
for (unsigned int tu = 0; tu < 10; tu++)
2803
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2804
}// end loop over 'tu'
2805
}// end loop over 'u'
2806
}// end loop over 't'
2809
if (combinations[r][s] == 2)
2811
for (unsigned int t = 0; t < 10; t++)
2813
for (unsigned int u = 0; u < 10; u++)
2815
for (unsigned int tu = 0; tu < 10; tu++)
2817
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
2818
}// end loop over 'tu'
2819
}// end loop over 'u'
2820
}// end loop over 't'
2823
}// end loop over 's'
2824
for (unsigned int s = 0; s < 10; s++)
2826
for (unsigned int t = 0; t < 10; t++)
2828
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2829
}// end loop over 't'
2830
}// end loop over 's'
2831
}// end loop over 'r'
2833
// Transform derivatives back to physical element
2834
for (unsigned int r = 0; r < num_derivatives; r++)
2836
for (unsigned int s = 0; s < num_derivatives; s++)
2838
values[r] += transform[r][s]*derivatives[s];
2839
}// end loop over 's'
2840
}// end loop over 'r'
2842
// Delete pointer to array of derivatives on FIAT element
2843
delete [] derivatives;
2845
// Delete pointer to array of combinations of derivatives and transform
2846
for (unsigned int r = 0; r < num_derivatives; r++)
2848
delete [] combinations[r];
2849
}// end loop over 'r'
2850
delete [] combinations;
2851
for (unsigned int r = 0; r < num_derivatives; r++)
2853
delete [] transform[r];
2854
}// end loop over 'r'
2855
delete [] transform;
2861
// Array of basisvalues.
2862
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
2864
// Declare helper variables.
2865
unsigned int rr = 0;
2866
unsigned int ss = 0;
2867
unsigned int tt = 0;
2868
double tmp5 = 0.000000000000000;
2869
double tmp6 = 0.000000000000000;
2870
double tmp7 = 0.000000000000000;
2871
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
2872
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
2873
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
2874
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
2875
double tmp4 = tmp3*tmp3;
2877
// Compute basisvalues.
2878
basisvalues[0] = 1.000000000000000;
2879
basisvalues[1] = tmp0;
2880
for (unsigned int r = 1; r < 2; r++)
2882
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2883
ss = r*(r + 1)*(r + 2)/6;
2884
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2885
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
2886
}// end loop over 'r'
2887
for (unsigned int r = 0; r < 2; r++)
2889
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2890
ss = r*(r + 1)*(r + 2)/6;
2891
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
2892
}// end loop over 'r'
2893
for (unsigned int r = 0; r < 1; r++)
2895
for (unsigned int s = 1; s < 2 - r; s++)
2897
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2898
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2899
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2900
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2901
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2902
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
2903
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2904
}// end loop over 's'
2905
}// end loop over 'r'
2906
for (unsigned int r = 0; r < 2; r++)
2908
for (unsigned int s = 0; s < 2 - r; s++)
2910
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2911
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2912
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
2913
}// end loop over 's'
2914
}// end loop over 'r'
2915
for (unsigned int r = 0; r < 1; r++)
2917
for (unsigned int s = 0; s < 1 - r; s++)
2919
for (unsigned int t = 1; t < 2 - r - s; t++)
2921
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
2922
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2923
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
2924
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2925
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2926
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
2927
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2928
}// end loop over 't'
2929
}// end loop over 's'
2930
}// end loop over 'r'
2931
for (unsigned int r = 0; r < 3; r++)
2933
for (unsigned int s = 0; s < 3 - r; s++)
2935
for (unsigned int t = 0; t < 3 - r - s; t++)
2937
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2938
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
2939
}// end loop over 't'
2940
}// end loop over 's'
2941
}// end loop over 'r'
2943
// Table(s) of coefficients.
2944
static const double coefficients0[10] = \
2945
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
2947
// Tables of derivatives of the polynomial base (transpose).
2948
static const double dmats0[10][10] = \
2949
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2950
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2951
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2952
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2953
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2954
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2955
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2956
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2957
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2958
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2960
static const double dmats1[10][10] = \
2961
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2962
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2963
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2964
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2965
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2966
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2967
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2968
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2969
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2970
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2972
static const double dmats2[10][10] = \
2973
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2974
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2975
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2976
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2977
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2978
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2979
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2980
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2981
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2982
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
2984
// Compute reference derivatives.
2985
// Declare pointer to array of derivatives on FIAT element.
2986
double *derivatives = new double[num_derivatives];
2987
for (unsigned int r = 0; r < num_derivatives; r++)
2989
derivatives[r] = 0.000000000000000;
2990
}// end loop over 'r'
2992
// Declare derivative matrix (of polynomial basis).
2993
double dmats[10][10] = \
2994
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2995
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2996
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2997
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2998
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
2999
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3000
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3001
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3002
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3003
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3005
// Declare (auxiliary) derivative matrix (of polynomial basis).
3006
double dmats_old[10][10] = \
3007
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3008
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3009
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3010
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3011
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3012
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3013
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3014
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3015
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3016
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3018
// Loop possible derivatives.
3019
for (unsigned int r = 0; r < num_derivatives; r++)
3021
// Resetting dmats values to compute next derivative.
3022
for (unsigned int t = 0; t < 10; t++)
3024
for (unsigned int u = 0; u < 10; u++)
3026
dmats[t][u] = 0.000000000000000;
3029
dmats[t][u] = 1.000000000000000;
3032
}// end loop over 'u'
3033
}// end loop over 't'
3035
// Looping derivative order to generate dmats.
3036
for (unsigned int s = 0; s < n; s++)
3038
// Updating dmats_old with new values and resetting dmats.
3039
for (unsigned int t = 0; t < 10; t++)
3041
for (unsigned int u = 0; u < 10; u++)
3043
dmats_old[t][u] = dmats[t][u];
3044
dmats[t][u] = 0.000000000000000;
3045
}// end loop over 'u'
3046
}// end loop over 't'
3048
// Update dmats using an inner product.
3049
if (combinations[r][s] == 0)
3051
for (unsigned int t = 0; t < 10; t++)
3053
for (unsigned int u = 0; u < 10; u++)
3055
for (unsigned int tu = 0; tu < 10; tu++)
3057
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3058
}// end loop over 'tu'
3059
}// end loop over 'u'
3060
}// end loop over 't'
3063
if (combinations[r][s] == 1)
3065
for (unsigned int t = 0; t < 10; t++)
3067
for (unsigned int u = 0; u < 10; u++)
3069
for (unsigned int tu = 0; tu < 10; tu++)
3071
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3072
}// end loop over 'tu'
3073
}// end loop over 'u'
3074
}// end loop over 't'
3077
if (combinations[r][s] == 2)
3079
for (unsigned int t = 0; t < 10; t++)
3081
for (unsigned int u = 0; u < 10; u++)
3083
for (unsigned int tu = 0; tu < 10; tu++)
3085
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
3086
}// end loop over 'tu'
3087
}// end loop over 'u'
3088
}// end loop over 't'
3091
}// end loop over 's'
3092
for (unsigned int s = 0; s < 10; s++)
3094
for (unsigned int t = 0; t < 10; t++)
3096
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3097
}// end loop over 't'
3098
}// end loop over 's'
3099
}// end loop over 'r'
3101
// Transform derivatives back to physical element
3102
for (unsigned int r = 0; r < num_derivatives; r++)
3104
for (unsigned int s = 0; s < num_derivatives; s++)
3106
values[r] += transform[r][s]*derivatives[s];
3107
}// end loop over 's'
3108
}// end loop over 'r'
3110
// Delete pointer to array of derivatives on FIAT element
3111
delete [] derivatives;
3113
// Delete pointer to array of combinations of derivatives and transform
3114
for (unsigned int r = 0; r < num_derivatives; r++)
3116
delete [] combinations[r];
3117
}// end loop over 'r'
3118
delete [] combinations;
3119
for (unsigned int r = 0; r < num_derivatives; r++)
3121
delete [] transform[r];
3122
}// end loop over 'r'
3123
delete [] transform;
3129
// Array of basisvalues.
3130
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
3132
// Declare helper variables.
3133
unsigned int rr = 0;
3134
unsigned int ss = 0;
3135
unsigned int tt = 0;
3136
double tmp5 = 0.000000000000000;
3137
double tmp6 = 0.000000000000000;
3138
double tmp7 = 0.000000000000000;
3139
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
3140
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
3141
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
3142
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
3143
double tmp4 = tmp3*tmp3;
3145
// Compute basisvalues.
3146
basisvalues[0] = 1.000000000000000;
3147
basisvalues[1] = tmp0;
3148
for (unsigned int r = 1; r < 2; r++)
3150
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
3151
ss = r*(r + 1)*(r + 2)/6;
3152
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
3153
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
3154
}// end loop over 'r'
3155
for (unsigned int r = 0; r < 2; r++)
3157
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
3158
ss = r*(r + 1)*(r + 2)/6;
3159
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
3160
}// end loop over 'r'
3161
for (unsigned int r = 0; r < 1; r++)
3163
for (unsigned int s = 1; s < 2 - r; s++)
3165
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
3166
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3167
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
3168
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3169
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3170
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3171
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
3172
}// end loop over 's'
3173
}// end loop over 'r'
3174
for (unsigned int r = 0; r < 2; r++)
3176
for (unsigned int s = 0; s < 2 - r; s++)
3178
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
3179
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3180
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
3181
}// end loop over 's'
3182
}// end loop over 'r'
3183
for (unsigned int r = 0; r < 1; r++)
3185
for (unsigned int s = 0; s < 1 - r; s++)
3187
for (unsigned int t = 1; t < 2 - r - s; t++)
3189
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
3190
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3191
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
3192
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3193
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3194
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3195
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
3196
}// end loop over 't'
3197
}// end loop over 's'
3198
}// end loop over 'r'
3199
for (unsigned int r = 0; r < 3; r++)
3201
for (unsigned int s = 0; s < 3 - r; s++)
3203
for (unsigned int t = 0; t < 3 - r - s; t++)
3205
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3206
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
3207
}// end loop over 't'
3208
}// end loop over 's'
3209
}// end loop over 'r'
3211
// Table(s) of coefficients.
3212
static const double coefficients0[10] = \
3213
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
3215
// Tables of derivatives of the polynomial base (transpose).
3216
static const double dmats0[10][10] = \
3217
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3218
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3219
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3220
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3221
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3222
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3223
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3224
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3225
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3226
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3228
static const double dmats1[10][10] = \
3229
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3230
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3231
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3232
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3233
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3234
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3235
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3236
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3237
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3238
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3240
static const double dmats2[10][10] = \
3241
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3242
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3243
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3244
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3245
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3246
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3247
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3248
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3249
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3250
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3252
// Compute reference derivatives.
3253
// Declare pointer to array of derivatives on FIAT element.
3254
double *derivatives = new double[num_derivatives];
3255
for (unsigned int r = 0; r < num_derivatives; r++)
3257
derivatives[r] = 0.000000000000000;
3258
}// end loop over 'r'
3260
// Declare derivative matrix (of polynomial basis).
3261
double dmats[10][10] = \
3262
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3263
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3264
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3265
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3266
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3267
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3268
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3269
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3270
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3271
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3273
// Declare (auxiliary) derivative matrix (of polynomial basis).
3274
double dmats_old[10][10] = \
3275
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3276
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3277
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3278
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3279
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3280
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3281
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3282
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3283
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3284
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3286
// Loop possible derivatives.
3287
for (unsigned int r = 0; r < num_derivatives; r++)
3289
// Resetting dmats values to compute next derivative.
3290
for (unsigned int t = 0; t < 10; t++)
3292
for (unsigned int u = 0; u < 10; u++)
3294
dmats[t][u] = 0.000000000000000;
3297
dmats[t][u] = 1.000000000000000;
3300
}// end loop over 'u'
3301
}// end loop over 't'
3303
// Looping derivative order to generate dmats.
3304
for (unsigned int s = 0; s < n; s++)
3306
// Updating dmats_old with new values and resetting dmats.
3307
for (unsigned int t = 0; t < 10; t++)
3309
for (unsigned int u = 0; u < 10; u++)
3311
dmats_old[t][u] = dmats[t][u];
3312
dmats[t][u] = 0.000000000000000;
3313
}// end loop over 'u'
3314
}// end loop over 't'
3316
// Update dmats using an inner product.
3317
if (combinations[r][s] == 0)
3319
for (unsigned int t = 0; t < 10; t++)
3321
for (unsigned int u = 0; u < 10; u++)
3323
for (unsigned int tu = 0; tu < 10; tu++)
3325
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3326
}// end loop over 'tu'
3327
}// end loop over 'u'
3328
}// end loop over 't'
3331
if (combinations[r][s] == 1)
3333
for (unsigned int t = 0; t < 10; t++)
3335
for (unsigned int u = 0; u < 10; u++)
3337
for (unsigned int tu = 0; tu < 10; tu++)
3339
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3340
}// end loop over 'tu'
3341
}// end loop over 'u'
3342
}// end loop over 't'
3345
if (combinations[r][s] == 2)
3347
for (unsigned int t = 0; t < 10; t++)
3349
for (unsigned int u = 0; u < 10; u++)
3351
for (unsigned int tu = 0; tu < 10; tu++)
3353
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
3354
}// end loop over 'tu'
3355
}// end loop over 'u'
3356
}// end loop over 't'
3359
}// end loop over 's'
3360
for (unsigned int s = 0; s < 10; s++)
3362
for (unsigned int t = 0; t < 10; t++)
3364
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3365
}// end loop over 't'
3366
}// end loop over 's'
3367
}// end loop over 'r'
3369
// Transform derivatives back to physical element
3370
for (unsigned int r = 0; r < num_derivatives; r++)
3372
for (unsigned int s = 0; s < num_derivatives; s++)
3374
values[r] += transform[r][s]*derivatives[s];
3375
}// end loop over 's'
3376
}// end loop over 'r'
3378
// Delete pointer to array of derivatives on FIAT element
3379
delete [] derivatives;
3381
// Delete pointer to array of combinations of derivatives and transform
3382
for (unsigned int r = 0; r < num_derivatives; r++)
3384
delete [] combinations[r];
3385
}// end loop over 'r'
3386
delete [] combinations;
3387
for (unsigned int r = 0; r < num_derivatives; r++)
3389
delete [] transform[r];
3390
}// end loop over 'r'
3391
delete [] transform;
3397
// Array of basisvalues.
3398
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
3400
// Declare helper variables.
3401
unsigned int rr = 0;
3402
unsigned int ss = 0;
3403
unsigned int tt = 0;
3404
double tmp5 = 0.000000000000000;
3405
double tmp6 = 0.000000000000000;
3406
double tmp7 = 0.000000000000000;
3407
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
3408
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
3409
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
3410
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
3411
double tmp4 = tmp3*tmp3;
3413
// Compute basisvalues.
3414
basisvalues[0] = 1.000000000000000;
3415
basisvalues[1] = tmp0;
3416
for (unsigned int r = 1; r < 2; r++)
3418
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
3419
ss = r*(r + 1)*(r + 2)/6;
3420
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
3421
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
3422
}// end loop over 'r'
3423
for (unsigned int r = 0; r < 2; r++)
3425
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
3426
ss = r*(r + 1)*(r + 2)/6;
3427
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
3428
}// end loop over 'r'
3429
for (unsigned int r = 0; r < 1; r++)
3431
for (unsigned int s = 1; s < 2 - r; s++)
3433
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
3434
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3435
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
3436
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3437
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3438
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3439
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
3440
}// end loop over 's'
3441
}// end loop over 'r'
3442
for (unsigned int r = 0; r < 2; r++)
3444
for (unsigned int s = 0; s < 2 - r; s++)
3446
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
3447
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3448
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
3449
}// end loop over 's'
3450
}// end loop over 'r'
3451
for (unsigned int r = 0; r < 1; r++)
3453
for (unsigned int s = 0; s < 1 - r; s++)
3455
for (unsigned int t = 1; t < 2 - r - s; t++)
3457
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
3458
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3459
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
3460
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3461
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3462
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3463
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
3464
}// end loop over 't'
3465
}// end loop over 's'
3466
}// end loop over 'r'
3467
for (unsigned int r = 0; r < 3; r++)
3469
for (unsigned int s = 0; s < 3 - r; s++)
3471
for (unsigned int t = 0; t < 3 - r - s; t++)
3473
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3474
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
3475
}// end loop over 't'
3476
}// end loop over 's'
3477
}// end loop over 'r'
3479
// Table(s) of coefficients.
3480
static const double coefficients0[10] = \
3481
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
3483
// Tables of derivatives of the polynomial base (transpose).
3484
static const double dmats0[10][10] = \
3485
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3486
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3487
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3488
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3489
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3490
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3491
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3492
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3493
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3494
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3496
static const double dmats1[10][10] = \
3497
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3498
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3499
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3500
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3501
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3502
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3503
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3504
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3505
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3506
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3508
static const double dmats2[10][10] = \
3509
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3510
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3511
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3512
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3513
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3514
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3515
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3516
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3517
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3518
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3520
// Compute reference derivatives.
3521
// Declare pointer to array of derivatives on FIAT element.
3522
double *derivatives = new double[num_derivatives];
3523
for (unsigned int r = 0; r < num_derivatives; r++)
3525
derivatives[r] = 0.000000000000000;
3526
}// end loop over 'r'
3528
// Declare derivative matrix (of polynomial basis).
3529
double dmats[10][10] = \
3530
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3531
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3532
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3533
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3534
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3535
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3536
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3537
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3538
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3539
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3541
// Declare (auxiliary) derivative matrix (of polynomial basis).
3542
double dmats_old[10][10] = \
3543
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3544
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3545
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3546
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3547
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3548
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3549
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3550
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3551
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3552
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3554
// Loop possible derivatives.
3555
for (unsigned int r = 0; r < num_derivatives; r++)
3557
// Resetting dmats values to compute next derivative.
3558
for (unsigned int t = 0; t < 10; t++)
3560
for (unsigned int u = 0; u < 10; u++)
3562
dmats[t][u] = 0.000000000000000;
3565
dmats[t][u] = 1.000000000000000;
3568
}// end loop over 'u'
3569
}// end loop over 't'
3571
// Looping derivative order to generate dmats.
3572
for (unsigned int s = 0; s < n; s++)
3574
// Updating dmats_old with new values and resetting dmats.
3575
for (unsigned int t = 0; t < 10; t++)
3577
for (unsigned int u = 0; u < 10; u++)
3579
dmats_old[t][u] = dmats[t][u];
3580
dmats[t][u] = 0.000000000000000;
3581
}// end loop over 'u'
3582
}// end loop over 't'
3584
// Update dmats using an inner product.
3585
if (combinations[r][s] == 0)
3587
for (unsigned int t = 0; t < 10; t++)
3589
for (unsigned int u = 0; u < 10; u++)
3591
for (unsigned int tu = 0; tu < 10; tu++)
3593
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3594
}// end loop over 'tu'
3595
}// end loop over 'u'
3596
}// end loop over 't'
3599
if (combinations[r][s] == 1)
3601
for (unsigned int t = 0; t < 10; t++)
3603
for (unsigned int u = 0; u < 10; u++)
3605
for (unsigned int tu = 0; tu < 10; tu++)
3607
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3608
}// end loop over 'tu'
3609
}// end loop over 'u'
3610
}// end loop over 't'
3613
if (combinations[r][s] == 2)
3615
for (unsigned int t = 0; t < 10; t++)
3617
for (unsigned int u = 0; u < 10; u++)
3619
for (unsigned int tu = 0; tu < 10; tu++)
3621
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
3622
}// end loop over 'tu'
3623
}// end loop over 'u'
3624
}// end loop over 't'
3627
}// end loop over 's'
3628
for (unsigned int s = 0; s < 10; s++)
3630
for (unsigned int t = 0; t < 10; t++)
3632
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3633
}// end loop over 't'
3634
}// end loop over 's'
3635
}// end loop over 'r'
3637
// Transform derivatives back to physical element
3638
for (unsigned int r = 0; r < num_derivatives; r++)
3640
for (unsigned int s = 0; s < num_derivatives; s++)
3642
values[r] += transform[r][s]*derivatives[s];
3643
}// end loop over 's'
3644
}// end loop over 'r'
3646
// Delete pointer to array of derivatives on FIAT element
3647
delete [] derivatives;
3649
// Delete pointer to array of combinations of derivatives and transform
3650
for (unsigned int r = 0; r < num_derivatives; r++)
3652
delete [] combinations[r];
3653
}// end loop over 'r'
3654
delete [] combinations;
3655
for (unsigned int r = 0; r < num_derivatives; r++)
3657
delete [] transform[r];
3658
}// end loop over 'r'
3659
delete [] transform;
3665
// Array of basisvalues.
3666
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
3668
// Declare helper variables.
3669
unsigned int rr = 0;
3670
unsigned int ss = 0;
3671
unsigned int tt = 0;
3672
double tmp5 = 0.000000000000000;
3673
double tmp6 = 0.000000000000000;
3674
double tmp7 = 0.000000000000000;
3675
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
3676
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
3677
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
3678
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
3679
double tmp4 = tmp3*tmp3;
3681
// Compute basisvalues.
3682
basisvalues[0] = 1.000000000000000;
3683
basisvalues[1] = tmp0;
3684
for (unsigned int r = 1; r < 2; r++)
3686
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
3687
ss = r*(r + 1)*(r + 2)/6;
3688
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
3689
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
3690
}// end loop over 'r'
3691
for (unsigned int r = 0; r < 2; r++)
3693
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
3694
ss = r*(r + 1)*(r + 2)/6;
3695
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
3696
}// end loop over 'r'
3697
for (unsigned int r = 0; r < 1; r++)
3699
for (unsigned int s = 1; s < 2 - r; s++)
3701
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
3702
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3703
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
3704
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3705
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3706
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
3707
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
3708
}// end loop over 's'
3709
}// end loop over 'r'
3710
for (unsigned int r = 0; r < 2; r++)
3712
for (unsigned int s = 0; s < 2 - r; s++)
3714
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
3715
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3716
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
3717
}// end loop over 's'
3718
}// end loop over 'r'
3719
for (unsigned int r = 0; r < 1; r++)
3721
for (unsigned int s = 0; s < 1 - r; s++)
3723
for (unsigned int t = 1; t < 2 - r - s; t++)
3725
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
3726
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3727
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
3728
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3729
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3730
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
3731
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
3732
}// end loop over 't'
3733
}// end loop over 's'
3734
}// end loop over 'r'
3735
for (unsigned int r = 0; r < 3; r++)
3737
for (unsigned int s = 0; s < 3 - r; s++)
3739
for (unsigned int t = 0; t < 3 - r - s; t++)
3741
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3742
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
3743
}// end loop over 't'
3744
}// end loop over 's'
3745
}// end loop over 'r'
3747
// Table(s) of coefficients.
3748
static const double coefficients0[10] = \
3749
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
3751
// Tables of derivatives of the polynomial base (transpose).
3752
static const double dmats0[10][10] = \
3753
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3754
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3755
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3756
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3757
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3758
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3759
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3760
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3761
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3762
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3764
static const double dmats1[10][10] = \
3765
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3766
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3767
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3768
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3769
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3770
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3771
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3772
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3773
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3774
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3776
static const double dmats2[10][10] = \
3777
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3778
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3779
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3780
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3781
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3782
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3783
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3784
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3785
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3786
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
3788
// Compute reference derivatives.
3789
// Declare pointer to array of derivatives on FIAT element.
3790
double *derivatives = new double[num_derivatives];
3791
for (unsigned int r = 0; r < num_derivatives; r++)
3793
derivatives[r] = 0.000000000000000;
3794
}// end loop over 'r'
3796
// Declare derivative matrix (of polynomial basis).
3797
double dmats[10][10] = \
3798
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3799
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3800
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3801
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3802
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3803
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3804
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3805
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3806
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3807
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3809
// Declare (auxiliary) derivative matrix (of polynomial basis).
3810
double dmats_old[10][10] = \
3811
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3812
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3813
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3814
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3815
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3816
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3817
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
3818
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
3819
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
3820
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
3822
// Loop possible derivatives.
3823
for (unsigned int r = 0; r < num_derivatives; r++)
3825
// Resetting dmats values to compute next derivative.
3826
for (unsigned int t = 0; t < 10; t++)
3828
for (unsigned int u = 0; u < 10; u++)
3830
dmats[t][u] = 0.000000000000000;
3833
dmats[t][u] = 1.000000000000000;
3836
}// end loop over 'u'
3837
}// end loop over 't'
3839
// Looping derivative order to generate dmats.
3840
for (unsigned int s = 0; s < n; s++)
3842
// Updating dmats_old with new values and resetting dmats.
3843
for (unsigned int t = 0; t < 10; t++)
3845
for (unsigned int u = 0; u < 10; u++)
3847
dmats_old[t][u] = dmats[t][u];
3848
dmats[t][u] = 0.000000000000000;
3849
}// end loop over 'u'
3850
}// end loop over 't'
3852
// Update dmats using an inner product.
3853
if (combinations[r][s] == 0)
3855
for (unsigned int t = 0; t < 10; t++)
3857
for (unsigned int u = 0; u < 10; u++)
3859
for (unsigned int tu = 0; tu < 10; tu++)
3861
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3862
}// end loop over 'tu'
3863
}// end loop over 'u'
3864
}// end loop over 't'
3867
if (combinations[r][s] == 1)
3869
for (unsigned int t = 0; t < 10; t++)
3871
for (unsigned int u = 0; u < 10; u++)
3873
for (unsigned int tu = 0; tu < 10; tu++)
3875
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3876
}// end loop over 'tu'
3877
}// end loop over 'u'
3878
}// end loop over 't'
3881
if (combinations[r][s] == 2)
3883
for (unsigned int t = 0; t < 10; t++)
3885
for (unsigned int u = 0; u < 10; u++)
3887
for (unsigned int tu = 0; tu < 10; tu++)
3889
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
3890
}// end loop over 'tu'
3891
}// end loop over 'u'
3892
}// end loop over 't'
3895
}// end loop over 's'
3896
for (unsigned int s = 0; s < 10; s++)
3898
for (unsigned int t = 0; t < 10; t++)
3900
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3901
}// end loop over 't'
3902
}// end loop over 's'
3903
}// end loop over 'r'
3905
// Transform derivatives back to physical element
3906
for (unsigned int r = 0; r < num_derivatives; r++)
3908
for (unsigned int s = 0; s < num_derivatives; s++)
3910
values[r] += transform[r][s]*derivatives[s];
3911
}// end loop over 's'
3912
}// end loop over 'r'
3914
// Delete pointer to array of derivatives on FIAT element
3915
delete [] derivatives;
3917
// Delete pointer to array of combinations of derivatives and transform
3918
for (unsigned int r = 0; r < num_derivatives; r++)
3920
delete [] combinations[r];
3921
}// end loop over 'r'
3922
delete [] combinations;
3923
for (unsigned int r = 0; r < num_derivatives; r++)
3925
delete [] transform[r];
3926
}// end loop over 'r'
3927
delete [] transform;
3934
/// Evaluate order n derivatives of all basis functions at given point in cell
3935
virtual void evaluate_basis_derivatives_all(unsigned int n,
3937
const double* coordinates,
3938
const ufc::cell& c) const
3940
// Compute number of derivatives.
3941
unsigned int num_derivatives = 1;
3942
for (unsigned int r = 0; r < n; r++)
3944
num_derivatives *= 3;
3945
}// end loop over 'r'
3947
// Helper variable to hold values of a single dof.
3948
double *dof_values = new double[num_derivatives];
3949
for (unsigned int r = 0; r < num_derivatives; r++)
3951
dof_values[r] = 0.000000000000000;
3952
}// end loop over 'r'
3954
// Loop dofs and call evaluate_basis_derivatives.
3955
for (unsigned int r = 0; r < 10; r++)
3957
evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
3958
for (unsigned int s = 0; s < num_derivatives; s++)
3960
values[r*num_derivatives + s] = dof_values[s];
3961
}// end loop over 's'
3962
}// end loop over 'r'
3965
delete [] dof_values;
3968
/// Evaluate linear functional for dof i on the function f
3969
virtual double evaluate_dof(unsigned int i,
3970
const ufc::function& f,
3971
const ufc::cell& c) const
3973
// Declare variables for result of evaluation.
3976
// Declare variable for physical coordinates.
3978
const double * const * x = c.coordinates;
3986
f.evaluate(vals, y, c);
3995
f.evaluate(vals, y, c);
4004
f.evaluate(vals, y, c);
4013
f.evaluate(vals, y, c);
4019
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
4020
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
4021
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
4022
f.evaluate(vals, y, c);
4028
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
4029
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
4030
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
4031
f.evaluate(vals, y, c);
4037
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
4038
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
4039
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
4040
f.evaluate(vals, y, c);
4046
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
4047
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
4048
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
4049
f.evaluate(vals, y, c);
4055
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
4056
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
4057
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
4058
f.evaluate(vals, y, c);
4064
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
4065
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
4066
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
4067
f.evaluate(vals, y, c);
4073
return 0.000000000000000;
4076
/// Evaluate linear functionals for all dofs on the function f
4077
virtual void evaluate_dofs(double* values,
4078
const ufc::function& f,
4079
const ufc::cell& c) const
4081
// Declare variables for result of evaluation.
4084
// Declare variable for physical coordinates.
4086
const double * const * x = c.coordinates;
4090
f.evaluate(vals, y, c);
4091
values[0] = vals[0];
4095
f.evaluate(vals, y, c);
4096
values[1] = vals[0];
4100
f.evaluate(vals, y, c);
4101
values[2] = vals[0];
4105
f.evaluate(vals, y, c);
4106
values[3] = vals[0];
4107
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
4108
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
4109
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
4110
f.evaluate(vals, y, c);
4111
values[4] = vals[0];
4112
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
4113
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
4114
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
4115
f.evaluate(vals, y, c);
4116
values[5] = vals[0];
4117
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
4118
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
4119
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
4120
f.evaluate(vals, y, c);
4121
values[6] = vals[0];
4122
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
4123
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
4124
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
4125
f.evaluate(vals, y, c);
4126
values[7] = vals[0];
4127
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
4128
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
4129
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
4130
f.evaluate(vals, y, c);
4131
values[8] = vals[0];
4132
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
4133
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
4134
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
4135
f.evaluate(vals, y, c);
4136
values[9] = vals[0];
4139
/// Interpolate vertex values from dof values
4140
virtual void interpolate_vertex_values(double* vertex_values,
4141
const double* dof_values,
4142
const ufc::cell& c) const
4144
// Evaluate function and change variables
4145
vertex_values[0] = dof_values[0];
4146
vertex_values[1] = dof_values[1];
4147
vertex_values[2] = dof_values[2];
4148
vertex_values[3] = dof_values[3];
4151
/// Map coordinate xhat from reference cell to coordinate x in cell
4152
virtual void map_from_reference_cell(double* x,
4156
throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
4159
/// Map from coordinate x in cell to coordinate xhat in reference cell
4160
virtual void map_to_reference_cell(double* xhat,
4164
throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
4167
/// Return the number of sub elements (for a mixed element)
4168
virtual unsigned int num_sub_elements() const
4173
/// Create a new finite element for sub element i (for a mixed element)
4174
virtual ufc::finite_element* create_sub_element(unsigned int i) const
4179
/// Create a new class instance
4180
virtual ufc::finite_element* create() const
4182
return new stokes_finite_element_0();
4187
/// This class defines the interface for a finite element.
4189
class stokes_finite_element_1: public ufc::finite_element
4194
stokes_finite_element_1() : ufc::finite_element()
4200
virtual ~stokes_finite_element_1()
4205
/// Return a string identifying the finite element
4206
virtual const char* signature() const
4208
return "VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3)";
4211
/// Return the cell shape
4212
virtual ufc::shape cell_shape() const
4214
return ufc::tetrahedron;
4217
/// Return the topological dimension of the cell shape
4218
virtual unsigned int topological_dimension() const
4223
/// Return the geometric dimension of the cell shape
4224
virtual unsigned int geometric_dimension() const
4229
/// Return the dimension of the finite element function space
4230
virtual unsigned int space_dimension() const
4235
/// Return the rank of the value space
4236
virtual unsigned int value_rank() const
4241
/// Return the dimension of the value space for axis i
4242
virtual unsigned int value_dimension(unsigned int i) const
4256
/// Evaluate basis function i at given point in cell
4257
virtual void evaluate_basis(unsigned int i,
4259
const double* coordinates,
4260
const ufc::cell& c) const
4262
// Extract vertex coordinates
4263
const double * const * x = c.coordinates;
4265
// Compute Jacobian of affine map from reference cell
4266
const double J_00 = x[1][0] - x[0][0];
4267
const double J_01 = x[2][0] - x[0][0];
4268
const double J_02 = x[3][0] - x[0][0];
4269
const double J_10 = x[1][1] - x[0][1];
4270
const double J_11 = x[2][1] - x[0][1];
4271
const double J_12 = x[3][1] - x[0][1];
4272
const double J_20 = x[1][2] - x[0][2];
4273
const double J_21 = x[2][2] - x[0][2];
4274
const double J_22 = x[3][2] - x[0][2];
4276
// Compute sub determinants
4277
const double d_00 = J_11*J_22 - J_12*J_21;
4278
const double d_01 = J_12*J_20 - J_10*J_22;
4279
const double d_02 = J_10*J_21 - J_11*J_20;
4280
const double d_10 = J_02*J_21 - J_01*J_22;
4281
const double d_11 = J_00*J_22 - J_02*J_20;
4282
const double d_12 = J_01*J_20 - J_00*J_21;
4283
const double d_20 = J_01*J_12 - J_02*J_11;
4284
const double d_21 = J_02*J_10 - J_00*J_12;
4285
const double d_22 = J_00*J_11 - J_01*J_10;
4287
// Compute determinant of Jacobian
4288
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
4290
// Compute inverse of Jacobian
4292
// Compute constants
4293
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
4294
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
4295
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
4297
// Get coordinates and map to the reference (FIAT) element
4298
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
4299
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
4300
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
4304
values[0] = 0.000000000000000;
4305
values[1] = 0.000000000000000;
4306
values[2] = 0.000000000000000;
4312
// Array of basisvalues.
4313
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4315
// Declare helper variables.
4316
unsigned int rr = 0;
4317
unsigned int ss = 0;
4318
unsigned int tt = 0;
4319
double tmp5 = 0.000000000000000;
4320
double tmp6 = 0.000000000000000;
4321
double tmp7 = 0.000000000000000;
4322
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4323
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4324
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4325
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4326
double tmp4 = tmp3*tmp3;
4328
// Compute basisvalues.
4329
basisvalues[0] = 1.000000000000000;
4330
basisvalues[1] = tmp0;
4331
for (unsigned int r = 1; r < 2; r++)
4333
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4334
ss = r*(r + 1)*(r + 2)/6;
4335
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4336
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4337
}// end loop over 'r'
4338
for (unsigned int r = 0; r < 2; r++)
4340
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4341
ss = r*(r + 1)*(r + 2)/6;
4342
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4343
}// end loop over 'r'
4344
for (unsigned int r = 0; r < 1; r++)
4346
for (unsigned int s = 1; s < 2 - r; s++)
4348
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4349
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4350
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4351
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4352
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4353
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4354
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4355
}// end loop over 's'
4356
}// end loop over 'r'
4357
for (unsigned int r = 0; r < 2; r++)
4359
for (unsigned int s = 0; s < 2 - r; s++)
4361
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4362
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4363
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4364
}// end loop over 's'
4365
}// end loop over 'r'
4366
for (unsigned int r = 0; r < 1; r++)
4368
for (unsigned int s = 0; s < 1 - r; s++)
4370
for (unsigned int t = 1; t < 2 - r - s; t++)
4372
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4373
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4374
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4375
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4376
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4377
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4378
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4379
}// end loop over 't'
4380
}// end loop over 's'
4381
}// end loop over 'r'
4382
for (unsigned int r = 0; r < 3; r++)
4384
for (unsigned int s = 0; s < 3 - r; s++)
4386
for (unsigned int t = 0; t < 3 - r - s; t++)
4388
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4389
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4390
}// end loop over 't'
4391
}// end loop over 's'
4392
}// end loop over 'r'
4394
// Table(s) of coefficients.
4395
static const double coefficients0[10] = \
4396
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
4398
// Compute value(s).
4399
for (unsigned int r = 0; r < 10; r++)
4401
values[0] += coefficients0[r]*basisvalues[r];
4402
}// end loop over 'r'
4408
// Array of basisvalues.
4409
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4411
// Declare helper variables.
4412
unsigned int rr = 0;
4413
unsigned int ss = 0;
4414
unsigned int tt = 0;
4415
double tmp5 = 0.000000000000000;
4416
double tmp6 = 0.000000000000000;
4417
double tmp7 = 0.000000000000000;
4418
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4419
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4420
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4421
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4422
double tmp4 = tmp3*tmp3;
4424
// Compute basisvalues.
4425
basisvalues[0] = 1.000000000000000;
4426
basisvalues[1] = tmp0;
4427
for (unsigned int r = 1; r < 2; r++)
4429
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4430
ss = r*(r + 1)*(r + 2)/6;
4431
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4432
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4433
}// end loop over 'r'
4434
for (unsigned int r = 0; r < 2; r++)
4436
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4437
ss = r*(r + 1)*(r + 2)/6;
4438
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4439
}// end loop over 'r'
4440
for (unsigned int r = 0; r < 1; r++)
4442
for (unsigned int s = 1; s < 2 - r; s++)
4444
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4445
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4446
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4447
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4448
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4449
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4450
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4451
}// end loop over 's'
4452
}// end loop over 'r'
4453
for (unsigned int r = 0; r < 2; r++)
4455
for (unsigned int s = 0; s < 2 - r; s++)
4457
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4458
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4459
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4460
}// end loop over 's'
4461
}// end loop over 'r'
4462
for (unsigned int r = 0; r < 1; r++)
4464
for (unsigned int s = 0; s < 1 - r; s++)
4466
for (unsigned int t = 1; t < 2 - r - s; t++)
4468
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4469
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4470
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4471
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4472
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4473
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4474
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4475
}// end loop over 't'
4476
}// end loop over 's'
4477
}// end loop over 'r'
4478
for (unsigned int r = 0; r < 3; r++)
4480
for (unsigned int s = 0; s < 3 - r; s++)
4482
for (unsigned int t = 0; t < 3 - r - s; t++)
4484
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4485
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4486
}// end loop over 't'
4487
}// end loop over 's'
4488
}// end loop over 'r'
4490
// Table(s) of coefficients.
4491
static const double coefficients0[10] = \
4492
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
4494
// Compute value(s).
4495
for (unsigned int r = 0; r < 10; r++)
4497
values[0] += coefficients0[r]*basisvalues[r];
4498
}// end loop over 'r'
4504
// Array of basisvalues.
4505
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4507
// Declare helper variables.
4508
unsigned int rr = 0;
4509
unsigned int ss = 0;
4510
unsigned int tt = 0;
4511
double tmp5 = 0.000000000000000;
4512
double tmp6 = 0.000000000000000;
4513
double tmp7 = 0.000000000000000;
4514
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4515
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4516
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4517
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4518
double tmp4 = tmp3*tmp3;
4520
// Compute basisvalues.
4521
basisvalues[0] = 1.000000000000000;
4522
basisvalues[1] = tmp0;
4523
for (unsigned int r = 1; r < 2; r++)
4525
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4526
ss = r*(r + 1)*(r + 2)/6;
4527
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4528
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4529
}// end loop over 'r'
4530
for (unsigned int r = 0; r < 2; r++)
4532
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4533
ss = r*(r + 1)*(r + 2)/6;
4534
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4535
}// end loop over 'r'
4536
for (unsigned int r = 0; r < 1; r++)
4538
for (unsigned int s = 1; s < 2 - r; s++)
4540
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4541
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4542
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4543
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4544
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4545
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4546
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4547
}// end loop over 's'
4548
}// end loop over 'r'
4549
for (unsigned int r = 0; r < 2; r++)
4551
for (unsigned int s = 0; s < 2 - r; s++)
4553
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4554
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4555
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4556
}// end loop over 's'
4557
}// end loop over 'r'
4558
for (unsigned int r = 0; r < 1; r++)
4560
for (unsigned int s = 0; s < 1 - r; s++)
4562
for (unsigned int t = 1; t < 2 - r - s; t++)
4564
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4565
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4566
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4567
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4568
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4569
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4570
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4571
}// end loop over 't'
4572
}// end loop over 's'
4573
}// end loop over 'r'
4574
for (unsigned int r = 0; r < 3; r++)
4576
for (unsigned int s = 0; s < 3 - r; s++)
4578
for (unsigned int t = 0; t < 3 - r - s; t++)
4580
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4581
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4582
}// end loop over 't'
4583
}// end loop over 's'
4584
}// end loop over 'r'
4586
// Table(s) of coefficients.
4587
static const double coefficients0[10] = \
4588
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
4590
// Compute value(s).
4591
for (unsigned int r = 0; r < 10; r++)
4593
values[0] += coefficients0[r]*basisvalues[r];
4594
}// end loop over 'r'
4600
// Array of basisvalues.
4601
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4603
// Declare helper variables.
4604
unsigned int rr = 0;
4605
unsigned int ss = 0;
4606
unsigned int tt = 0;
4607
double tmp5 = 0.000000000000000;
4608
double tmp6 = 0.000000000000000;
4609
double tmp7 = 0.000000000000000;
4610
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4611
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4612
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4613
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4614
double tmp4 = tmp3*tmp3;
4616
// Compute basisvalues.
4617
basisvalues[0] = 1.000000000000000;
4618
basisvalues[1] = tmp0;
4619
for (unsigned int r = 1; r < 2; r++)
4621
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4622
ss = r*(r + 1)*(r + 2)/6;
4623
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4624
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4625
}// end loop over 'r'
4626
for (unsigned int r = 0; r < 2; r++)
4628
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4629
ss = r*(r + 1)*(r + 2)/6;
4630
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4631
}// end loop over 'r'
4632
for (unsigned int r = 0; r < 1; r++)
4634
for (unsigned int s = 1; s < 2 - r; s++)
4636
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4637
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4638
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4639
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4640
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4641
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4642
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4643
}// end loop over 's'
4644
}// end loop over 'r'
4645
for (unsigned int r = 0; r < 2; r++)
4647
for (unsigned int s = 0; s < 2 - r; s++)
4649
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4650
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4651
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4652
}// end loop over 's'
4653
}// end loop over 'r'
4654
for (unsigned int r = 0; r < 1; r++)
4656
for (unsigned int s = 0; s < 1 - r; s++)
4658
for (unsigned int t = 1; t < 2 - r - s; t++)
4660
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4661
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4662
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4663
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4664
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4665
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4666
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4667
}// end loop over 't'
4668
}// end loop over 's'
4669
}// end loop over 'r'
4670
for (unsigned int r = 0; r < 3; r++)
4672
for (unsigned int s = 0; s < 3 - r; s++)
4674
for (unsigned int t = 0; t < 3 - r - s; t++)
4676
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4677
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4678
}// end loop over 't'
4679
}// end loop over 's'
4680
}// end loop over 'r'
4682
// Table(s) of coefficients.
4683
static const double coefficients0[10] = \
4684
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
4686
// Compute value(s).
4687
for (unsigned int r = 0; r < 10; r++)
4689
values[0] += coefficients0[r]*basisvalues[r];
4690
}// end loop over 'r'
4696
// Array of basisvalues.
4697
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4699
// Declare helper variables.
4700
unsigned int rr = 0;
4701
unsigned int ss = 0;
4702
unsigned int tt = 0;
4703
double tmp5 = 0.000000000000000;
4704
double tmp6 = 0.000000000000000;
4705
double tmp7 = 0.000000000000000;
4706
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4707
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4708
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4709
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4710
double tmp4 = tmp3*tmp3;
4712
// Compute basisvalues.
4713
basisvalues[0] = 1.000000000000000;
4714
basisvalues[1] = tmp0;
4715
for (unsigned int r = 1; r < 2; r++)
4717
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4718
ss = r*(r + 1)*(r + 2)/6;
4719
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4720
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4721
}// end loop over 'r'
4722
for (unsigned int r = 0; r < 2; r++)
4724
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4725
ss = r*(r + 1)*(r + 2)/6;
4726
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4727
}// end loop over 'r'
4728
for (unsigned int r = 0; r < 1; r++)
4730
for (unsigned int s = 1; s < 2 - r; s++)
4732
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4733
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4734
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4735
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4736
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4737
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4738
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4739
}// end loop over 's'
4740
}// end loop over 'r'
4741
for (unsigned int r = 0; r < 2; r++)
4743
for (unsigned int s = 0; s < 2 - r; s++)
4745
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4746
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4747
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4748
}// end loop over 's'
4749
}// end loop over 'r'
4750
for (unsigned int r = 0; r < 1; r++)
4752
for (unsigned int s = 0; s < 1 - r; s++)
4754
for (unsigned int t = 1; t < 2 - r - s; t++)
4756
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4757
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4758
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4759
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4760
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4761
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4762
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4763
}// end loop over 't'
4764
}// end loop over 's'
4765
}// end loop over 'r'
4766
for (unsigned int r = 0; r < 3; r++)
4768
for (unsigned int s = 0; s < 3 - r; s++)
4770
for (unsigned int t = 0; t < 3 - r - s; t++)
4772
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4773
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4774
}// end loop over 't'
4775
}// end loop over 's'
4776
}// end loop over 'r'
4778
// Table(s) of coefficients.
4779
static const double coefficients0[10] = \
4780
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
4782
// Compute value(s).
4783
for (unsigned int r = 0; r < 10; r++)
4785
values[0] += coefficients0[r]*basisvalues[r];
4786
}// end loop over 'r'
4792
// Array of basisvalues.
4793
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4795
// Declare helper variables.
4796
unsigned int rr = 0;
4797
unsigned int ss = 0;
4798
unsigned int tt = 0;
4799
double tmp5 = 0.000000000000000;
4800
double tmp6 = 0.000000000000000;
4801
double tmp7 = 0.000000000000000;
4802
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4803
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4804
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4805
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4806
double tmp4 = tmp3*tmp3;
4808
// Compute basisvalues.
4809
basisvalues[0] = 1.000000000000000;
4810
basisvalues[1] = tmp0;
4811
for (unsigned int r = 1; r < 2; r++)
4813
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4814
ss = r*(r + 1)*(r + 2)/6;
4815
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4816
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4817
}// end loop over 'r'
4818
for (unsigned int r = 0; r < 2; r++)
4820
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4821
ss = r*(r + 1)*(r + 2)/6;
4822
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4823
}// end loop over 'r'
4824
for (unsigned int r = 0; r < 1; r++)
4826
for (unsigned int s = 1; s < 2 - r; s++)
4828
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4829
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4830
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4831
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4832
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4833
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4834
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4835
}// end loop over 's'
4836
}// end loop over 'r'
4837
for (unsigned int r = 0; r < 2; r++)
4839
for (unsigned int s = 0; s < 2 - r; s++)
4841
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4842
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4843
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4844
}// end loop over 's'
4845
}// end loop over 'r'
4846
for (unsigned int r = 0; r < 1; r++)
4848
for (unsigned int s = 0; s < 1 - r; s++)
4850
for (unsigned int t = 1; t < 2 - r - s; t++)
4852
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4853
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4854
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4855
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4856
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4857
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4858
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4859
}// end loop over 't'
4860
}// end loop over 's'
4861
}// end loop over 'r'
4862
for (unsigned int r = 0; r < 3; r++)
4864
for (unsigned int s = 0; s < 3 - r; s++)
4866
for (unsigned int t = 0; t < 3 - r - s; t++)
4868
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4869
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4870
}// end loop over 't'
4871
}// end loop over 's'
4872
}// end loop over 'r'
4874
// Table(s) of coefficients.
4875
static const double coefficients0[10] = \
4876
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
4878
// Compute value(s).
4879
for (unsigned int r = 0; r < 10; r++)
4881
values[0] += coefficients0[r]*basisvalues[r];
4882
}// end loop over 'r'
4888
// Array of basisvalues.
4889
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4891
// Declare helper variables.
4892
unsigned int rr = 0;
4893
unsigned int ss = 0;
4894
unsigned int tt = 0;
4895
double tmp5 = 0.000000000000000;
4896
double tmp6 = 0.000000000000000;
4897
double tmp7 = 0.000000000000000;
4898
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4899
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4900
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4901
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4902
double tmp4 = tmp3*tmp3;
4904
// Compute basisvalues.
4905
basisvalues[0] = 1.000000000000000;
4906
basisvalues[1] = tmp0;
4907
for (unsigned int r = 1; r < 2; r++)
4909
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4910
ss = r*(r + 1)*(r + 2)/6;
4911
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4912
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
4913
}// end loop over 'r'
4914
for (unsigned int r = 0; r < 2; r++)
4916
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4917
ss = r*(r + 1)*(r + 2)/6;
4918
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
4919
}// end loop over 'r'
4920
for (unsigned int r = 0; r < 1; r++)
4922
for (unsigned int s = 1; s < 2 - r; s++)
4924
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4925
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4926
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4927
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4928
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4929
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
4930
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4931
}// end loop over 's'
4932
}// end loop over 'r'
4933
for (unsigned int r = 0; r < 2; r++)
4935
for (unsigned int s = 0; s < 2 - r; s++)
4937
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4938
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4939
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
4940
}// end loop over 's'
4941
}// end loop over 'r'
4942
for (unsigned int r = 0; r < 1; r++)
4944
for (unsigned int s = 0; s < 1 - r; s++)
4946
for (unsigned int t = 1; t < 2 - r - s; t++)
4948
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
4949
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4950
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
4951
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4952
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4953
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
4954
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4955
}// end loop over 't'
4956
}// end loop over 's'
4957
}// end loop over 'r'
4958
for (unsigned int r = 0; r < 3; r++)
4960
for (unsigned int s = 0; s < 3 - r; s++)
4962
for (unsigned int t = 0; t < 3 - r - s; t++)
4964
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4965
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
4966
}// end loop over 't'
4967
}// end loop over 's'
4968
}// end loop over 'r'
4970
// Table(s) of coefficients.
4971
static const double coefficients0[10] = \
4972
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
4974
// Compute value(s).
4975
for (unsigned int r = 0; r < 10; r++)
4977
values[0] += coefficients0[r]*basisvalues[r];
4978
}// end loop over 'r'
4984
// Array of basisvalues.
4985
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
4987
// Declare helper variables.
4988
unsigned int rr = 0;
4989
unsigned int ss = 0;
4990
unsigned int tt = 0;
4991
double tmp5 = 0.000000000000000;
4992
double tmp6 = 0.000000000000000;
4993
double tmp7 = 0.000000000000000;
4994
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
4995
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
4996
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
4997
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
4998
double tmp4 = tmp3*tmp3;
5000
// Compute basisvalues.
5001
basisvalues[0] = 1.000000000000000;
5002
basisvalues[1] = tmp0;
5003
for (unsigned int r = 1; r < 2; r++)
5005
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5006
ss = r*(r + 1)*(r + 2)/6;
5007
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5008
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5009
}// end loop over 'r'
5010
for (unsigned int r = 0; r < 2; r++)
5012
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5013
ss = r*(r + 1)*(r + 2)/6;
5014
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5015
}// end loop over 'r'
5016
for (unsigned int r = 0; r < 1; r++)
5018
for (unsigned int s = 1; s < 2 - r; s++)
5020
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5021
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5022
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5023
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5024
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5025
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5026
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5027
}// end loop over 's'
5028
}// end loop over 'r'
5029
for (unsigned int r = 0; r < 2; r++)
5031
for (unsigned int s = 0; s < 2 - r; s++)
5033
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5034
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5035
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5036
}// end loop over 's'
5037
}// end loop over 'r'
5038
for (unsigned int r = 0; r < 1; r++)
5040
for (unsigned int s = 0; s < 1 - r; s++)
5042
for (unsigned int t = 1; t < 2 - r - s; t++)
5044
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5045
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5046
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5047
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5048
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5049
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5050
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5051
}// end loop over 't'
5052
}// end loop over 's'
5053
}// end loop over 'r'
5054
for (unsigned int r = 0; r < 3; r++)
5056
for (unsigned int s = 0; s < 3 - r; s++)
5058
for (unsigned int t = 0; t < 3 - r - s; t++)
5060
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5061
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5062
}// end loop over 't'
5063
}// end loop over 's'
5064
}// end loop over 'r'
5066
// Table(s) of coefficients.
5067
static const double coefficients0[10] = \
5068
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
5070
// Compute value(s).
5071
for (unsigned int r = 0; r < 10; r++)
5073
values[0] += coefficients0[r]*basisvalues[r];
5074
}// end loop over 'r'
5080
// Array of basisvalues.
5081
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5083
// Declare helper variables.
5084
unsigned int rr = 0;
5085
unsigned int ss = 0;
5086
unsigned int tt = 0;
5087
double tmp5 = 0.000000000000000;
5088
double tmp6 = 0.000000000000000;
5089
double tmp7 = 0.000000000000000;
5090
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5091
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5092
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5093
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5094
double tmp4 = tmp3*tmp3;
5096
// Compute basisvalues.
5097
basisvalues[0] = 1.000000000000000;
5098
basisvalues[1] = tmp0;
5099
for (unsigned int r = 1; r < 2; r++)
5101
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5102
ss = r*(r + 1)*(r + 2)/6;
5103
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5104
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5105
}// end loop over 'r'
5106
for (unsigned int r = 0; r < 2; r++)
5108
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5109
ss = r*(r + 1)*(r + 2)/6;
5110
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5111
}// end loop over 'r'
5112
for (unsigned int r = 0; r < 1; r++)
5114
for (unsigned int s = 1; s < 2 - r; s++)
5116
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5117
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5118
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5119
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5120
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5121
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5122
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5123
}// end loop over 's'
5124
}// end loop over 'r'
5125
for (unsigned int r = 0; r < 2; r++)
5127
for (unsigned int s = 0; s < 2 - r; s++)
5129
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5130
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5131
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5132
}// end loop over 's'
5133
}// end loop over 'r'
5134
for (unsigned int r = 0; r < 1; r++)
5136
for (unsigned int s = 0; s < 1 - r; s++)
5138
for (unsigned int t = 1; t < 2 - r - s; t++)
5140
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5141
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5142
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5143
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5144
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5145
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5146
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5147
}// end loop over 't'
5148
}// end loop over 's'
5149
}// end loop over 'r'
5150
for (unsigned int r = 0; r < 3; r++)
5152
for (unsigned int s = 0; s < 3 - r; s++)
5154
for (unsigned int t = 0; t < 3 - r - s; t++)
5156
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5157
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5158
}// end loop over 't'
5159
}// end loop over 's'
5160
}// end loop over 'r'
5162
// Table(s) of coefficients.
5163
static const double coefficients0[10] = \
5164
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
5166
// Compute value(s).
5167
for (unsigned int r = 0; r < 10; r++)
5169
values[0] += coefficients0[r]*basisvalues[r];
5170
}// end loop over 'r'
5176
// Array of basisvalues.
5177
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5179
// Declare helper variables.
5180
unsigned int rr = 0;
5181
unsigned int ss = 0;
5182
unsigned int tt = 0;
5183
double tmp5 = 0.000000000000000;
5184
double tmp6 = 0.000000000000000;
5185
double tmp7 = 0.000000000000000;
5186
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5187
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5188
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5189
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5190
double tmp4 = tmp3*tmp3;
5192
// Compute basisvalues.
5193
basisvalues[0] = 1.000000000000000;
5194
basisvalues[1] = tmp0;
5195
for (unsigned int r = 1; r < 2; r++)
5197
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5198
ss = r*(r + 1)*(r + 2)/6;
5199
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5200
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5201
}// end loop over 'r'
5202
for (unsigned int r = 0; r < 2; r++)
5204
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5205
ss = r*(r + 1)*(r + 2)/6;
5206
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5207
}// end loop over 'r'
5208
for (unsigned int r = 0; r < 1; r++)
5210
for (unsigned int s = 1; s < 2 - r; s++)
5212
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5213
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5214
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5215
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5216
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5217
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5218
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5219
}// end loop over 's'
5220
}// end loop over 'r'
5221
for (unsigned int r = 0; r < 2; r++)
5223
for (unsigned int s = 0; s < 2 - r; s++)
5225
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5226
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5227
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5228
}// end loop over 's'
5229
}// end loop over 'r'
5230
for (unsigned int r = 0; r < 1; r++)
5232
for (unsigned int s = 0; s < 1 - r; s++)
5234
for (unsigned int t = 1; t < 2 - r - s; t++)
5236
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5237
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5238
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5239
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5240
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5241
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5242
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5243
}// end loop over 't'
5244
}// end loop over 's'
5245
}// end loop over 'r'
5246
for (unsigned int r = 0; r < 3; r++)
5248
for (unsigned int s = 0; s < 3 - r; s++)
5250
for (unsigned int t = 0; t < 3 - r - s; t++)
5252
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5253
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5254
}// end loop over 't'
5255
}// end loop over 's'
5256
}// end loop over 'r'
5258
// Table(s) of coefficients.
5259
static const double coefficients0[10] = \
5260
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
5262
// Compute value(s).
5263
for (unsigned int r = 0; r < 10; r++)
5265
values[0] += coefficients0[r]*basisvalues[r];
5266
}// end loop over 'r'
5272
// Array of basisvalues.
5273
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5275
// Declare helper variables.
5276
unsigned int rr = 0;
5277
unsigned int ss = 0;
5278
unsigned int tt = 0;
5279
double tmp5 = 0.000000000000000;
5280
double tmp6 = 0.000000000000000;
5281
double tmp7 = 0.000000000000000;
5282
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5283
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5284
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5285
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5286
double tmp4 = tmp3*tmp3;
5288
// Compute basisvalues.
5289
basisvalues[0] = 1.000000000000000;
5290
basisvalues[1] = tmp0;
5291
for (unsigned int r = 1; r < 2; r++)
5293
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5294
ss = r*(r + 1)*(r + 2)/6;
5295
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5296
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5297
}// end loop over 'r'
5298
for (unsigned int r = 0; r < 2; r++)
5300
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5301
ss = r*(r + 1)*(r + 2)/6;
5302
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5303
}// end loop over 'r'
5304
for (unsigned int r = 0; r < 1; r++)
5306
for (unsigned int s = 1; s < 2 - r; s++)
5308
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5309
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5310
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5311
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5312
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5313
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5314
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5315
}// end loop over 's'
5316
}// end loop over 'r'
5317
for (unsigned int r = 0; r < 2; r++)
5319
for (unsigned int s = 0; s < 2 - r; s++)
5321
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5322
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5323
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5324
}// end loop over 's'
5325
}// end loop over 'r'
5326
for (unsigned int r = 0; r < 1; r++)
5328
for (unsigned int s = 0; s < 1 - r; s++)
5330
for (unsigned int t = 1; t < 2 - r - s; t++)
5332
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5333
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5334
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5335
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5336
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5337
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5338
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5339
}// end loop over 't'
5340
}// end loop over 's'
5341
}// end loop over 'r'
5342
for (unsigned int r = 0; r < 3; r++)
5344
for (unsigned int s = 0; s < 3 - r; s++)
5346
for (unsigned int t = 0; t < 3 - r - s; t++)
5348
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5349
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5350
}// end loop over 't'
5351
}// end loop over 's'
5352
}// end loop over 'r'
5354
// Table(s) of coefficients.
5355
static const double coefficients0[10] = \
5356
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
5358
// Compute value(s).
5359
for (unsigned int r = 0; r < 10; r++)
5361
values[1] += coefficients0[r]*basisvalues[r];
5362
}// end loop over 'r'
5368
// Array of basisvalues.
5369
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5371
// Declare helper variables.
5372
unsigned int rr = 0;
5373
unsigned int ss = 0;
5374
unsigned int tt = 0;
5375
double tmp5 = 0.000000000000000;
5376
double tmp6 = 0.000000000000000;
5377
double tmp7 = 0.000000000000000;
5378
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5379
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5380
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5381
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5382
double tmp4 = tmp3*tmp3;
5384
// Compute basisvalues.
5385
basisvalues[0] = 1.000000000000000;
5386
basisvalues[1] = tmp0;
5387
for (unsigned int r = 1; r < 2; r++)
5389
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5390
ss = r*(r + 1)*(r + 2)/6;
5391
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5392
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5393
}// end loop over 'r'
5394
for (unsigned int r = 0; r < 2; r++)
5396
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5397
ss = r*(r + 1)*(r + 2)/6;
5398
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5399
}// end loop over 'r'
5400
for (unsigned int r = 0; r < 1; r++)
5402
for (unsigned int s = 1; s < 2 - r; s++)
5404
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5405
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5406
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5407
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5408
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5409
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5410
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5411
}// end loop over 's'
5412
}// end loop over 'r'
5413
for (unsigned int r = 0; r < 2; r++)
5415
for (unsigned int s = 0; s < 2 - r; s++)
5417
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5418
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5419
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5420
}// end loop over 's'
5421
}// end loop over 'r'
5422
for (unsigned int r = 0; r < 1; r++)
5424
for (unsigned int s = 0; s < 1 - r; s++)
5426
for (unsigned int t = 1; t < 2 - r - s; t++)
5428
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5429
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5430
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5431
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5432
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5433
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5434
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5435
}// end loop over 't'
5436
}// end loop over 's'
5437
}// end loop over 'r'
5438
for (unsigned int r = 0; r < 3; r++)
5440
for (unsigned int s = 0; s < 3 - r; s++)
5442
for (unsigned int t = 0; t < 3 - r - s; t++)
5444
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5445
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5446
}// end loop over 't'
5447
}// end loop over 's'
5448
}// end loop over 'r'
5450
// Table(s) of coefficients.
5451
static const double coefficients0[10] = \
5452
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
5454
// Compute value(s).
5455
for (unsigned int r = 0; r < 10; r++)
5457
values[1] += coefficients0[r]*basisvalues[r];
5458
}// end loop over 'r'
5464
// Array of basisvalues.
5465
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5467
// Declare helper variables.
5468
unsigned int rr = 0;
5469
unsigned int ss = 0;
5470
unsigned int tt = 0;
5471
double tmp5 = 0.000000000000000;
5472
double tmp6 = 0.000000000000000;
5473
double tmp7 = 0.000000000000000;
5474
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5475
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5476
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5477
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5478
double tmp4 = tmp3*tmp3;
5480
// Compute basisvalues.
5481
basisvalues[0] = 1.000000000000000;
5482
basisvalues[1] = tmp0;
5483
for (unsigned int r = 1; r < 2; r++)
5485
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5486
ss = r*(r + 1)*(r + 2)/6;
5487
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5488
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5489
}// end loop over 'r'
5490
for (unsigned int r = 0; r < 2; r++)
5492
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5493
ss = r*(r + 1)*(r + 2)/6;
5494
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5495
}// end loop over 'r'
5496
for (unsigned int r = 0; r < 1; r++)
5498
for (unsigned int s = 1; s < 2 - r; s++)
5500
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5501
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5502
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5503
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5504
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5505
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5506
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5507
}// end loop over 's'
5508
}// end loop over 'r'
5509
for (unsigned int r = 0; r < 2; r++)
5511
for (unsigned int s = 0; s < 2 - r; s++)
5513
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5514
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5515
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5516
}// end loop over 's'
5517
}// end loop over 'r'
5518
for (unsigned int r = 0; r < 1; r++)
5520
for (unsigned int s = 0; s < 1 - r; s++)
5522
for (unsigned int t = 1; t < 2 - r - s; t++)
5524
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5525
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5526
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5527
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5528
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5529
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5530
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5531
}// end loop over 't'
5532
}// end loop over 's'
5533
}// end loop over 'r'
5534
for (unsigned int r = 0; r < 3; r++)
5536
for (unsigned int s = 0; s < 3 - r; s++)
5538
for (unsigned int t = 0; t < 3 - r - s; t++)
5540
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5541
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5542
}// end loop over 't'
5543
}// end loop over 's'
5544
}// end loop over 'r'
5546
// Table(s) of coefficients.
5547
static const double coefficients0[10] = \
5548
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
5550
// Compute value(s).
5551
for (unsigned int r = 0; r < 10; r++)
5553
values[1] += coefficients0[r]*basisvalues[r];
5554
}// end loop over 'r'
5560
// Array of basisvalues.
5561
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5563
// Declare helper variables.
5564
unsigned int rr = 0;
5565
unsigned int ss = 0;
5566
unsigned int tt = 0;
5567
double tmp5 = 0.000000000000000;
5568
double tmp6 = 0.000000000000000;
5569
double tmp7 = 0.000000000000000;
5570
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5571
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5572
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5573
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5574
double tmp4 = tmp3*tmp3;
5576
// Compute basisvalues.
5577
basisvalues[0] = 1.000000000000000;
5578
basisvalues[1] = tmp0;
5579
for (unsigned int r = 1; r < 2; r++)
5581
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5582
ss = r*(r + 1)*(r + 2)/6;
5583
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5584
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5585
}// end loop over 'r'
5586
for (unsigned int r = 0; r < 2; r++)
5588
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5589
ss = r*(r + 1)*(r + 2)/6;
5590
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5591
}// end loop over 'r'
5592
for (unsigned int r = 0; r < 1; r++)
5594
for (unsigned int s = 1; s < 2 - r; s++)
5596
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5597
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5598
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5599
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5600
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5601
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5602
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5603
}// end loop over 's'
5604
}// end loop over 'r'
5605
for (unsigned int r = 0; r < 2; r++)
5607
for (unsigned int s = 0; s < 2 - r; s++)
5609
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5610
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5611
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5612
}// end loop over 's'
5613
}// end loop over 'r'
5614
for (unsigned int r = 0; r < 1; r++)
5616
for (unsigned int s = 0; s < 1 - r; s++)
5618
for (unsigned int t = 1; t < 2 - r - s; t++)
5620
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5621
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5622
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5623
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5624
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5625
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5626
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5627
}// end loop over 't'
5628
}// end loop over 's'
5629
}// end loop over 'r'
5630
for (unsigned int r = 0; r < 3; r++)
5632
for (unsigned int s = 0; s < 3 - r; s++)
5634
for (unsigned int t = 0; t < 3 - r - s; t++)
5636
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5637
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5638
}// end loop over 't'
5639
}// end loop over 's'
5640
}// end loop over 'r'
5642
// Table(s) of coefficients.
5643
static const double coefficients0[10] = \
5644
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
5646
// Compute value(s).
5647
for (unsigned int r = 0; r < 10; r++)
5649
values[1] += coefficients0[r]*basisvalues[r];
5650
}// end loop over 'r'
5656
// Array of basisvalues.
5657
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5659
// Declare helper variables.
5660
unsigned int rr = 0;
5661
unsigned int ss = 0;
5662
unsigned int tt = 0;
5663
double tmp5 = 0.000000000000000;
5664
double tmp6 = 0.000000000000000;
5665
double tmp7 = 0.000000000000000;
5666
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5667
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5668
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5669
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5670
double tmp4 = tmp3*tmp3;
5672
// Compute basisvalues.
5673
basisvalues[0] = 1.000000000000000;
5674
basisvalues[1] = tmp0;
5675
for (unsigned int r = 1; r < 2; r++)
5677
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5678
ss = r*(r + 1)*(r + 2)/6;
5679
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5680
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5681
}// end loop over 'r'
5682
for (unsigned int r = 0; r < 2; r++)
5684
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5685
ss = r*(r + 1)*(r + 2)/6;
5686
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5687
}// end loop over 'r'
5688
for (unsigned int r = 0; r < 1; r++)
5690
for (unsigned int s = 1; s < 2 - r; s++)
5692
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5693
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5694
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5695
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5696
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5697
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5698
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5699
}// end loop over 's'
5700
}// end loop over 'r'
5701
for (unsigned int r = 0; r < 2; r++)
5703
for (unsigned int s = 0; s < 2 - r; s++)
5705
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5706
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5707
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5708
}// end loop over 's'
5709
}// end loop over 'r'
5710
for (unsigned int r = 0; r < 1; r++)
5712
for (unsigned int s = 0; s < 1 - r; s++)
5714
for (unsigned int t = 1; t < 2 - r - s; t++)
5716
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5717
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5718
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5719
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5720
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5721
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5722
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5723
}// end loop over 't'
5724
}// end loop over 's'
5725
}// end loop over 'r'
5726
for (unsigned int r = 0; r < 3; r++)
5728
for (unsigned int s = 0; s < 3 - r; s++)
5730
for (unsigned int t = 0; t < 3 - r - s; t++)
5732
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5733
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5734
}// end loop over 't'
5735
}// end loop over 's'
5736
}// end loop over 'r'
5738
// Table(s) of coefficients.
5739
static const double coefficients0[10] = \
5740
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
5742
// Compute value(s).
5743
for (unsigned int r = 0; r < 10; r++)
5745
values[1] += coefficients0[r]*basisvalues[r];
5746
}// end loop over 'r'
5752
// Array of basisvalues.
5753
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5755
// Declare helper variables.
5756
unsigned int rr = 0;
5757
unsigned int ss = 0;
5758
unsigned int tt = 0;
5759
double tmp5 = 0.000000000000000;
5760
double tmp6 = 0.000000000000000;
5761
double tmp7 = 0.000000000000000;
5762
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5763
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5764
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5765
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5766
double tmp4 = tmp3*tmp3;
5768
// Compute basisvalues.
5769
basisvalues[0] = 1.000000000000000;
5770
basisvalues[1] = tmp0;
5771
for (unsigned int r = 1; r < 2; r++)
5773
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5774
ss = r*(r + 1)*(r + 2)/6;
5775
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5776
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5777
}// end loop over 'r'
5778
for (unsigned int r = 0; r < 2; r++)
5780
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5781
ss = r*(r + 1)*(r + 2)/6;
5782
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5783
}// end loop over 'r'
5784
for (unsigned int r = 0; r < 1; r++)
5786
for (unsigned int s = 1; s < 2 - r; s++)
5788
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5789
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5790
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5791
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5792
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5793
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5794
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5795
}// end loop over 's'
5796
}// end loop over 'r'
5797
for (unsigned int r = 0; r < 2; r++)
5799
for (unsigned int s = 0; s < 2 - r; s++)
5801
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5802
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5803
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5804
}// end loop over 's'
5805
}// end loop over 'r'
5806
for (unsigned int r = 0; r < 1; r++)
5808
for (unsigned int s = 0; s < 1 - r; s++)
5810
for (unsigned int t = 1; t < 2 - r - s; t++)
5812
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5813
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5814
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5815
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5816
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5817
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5818
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5819
}// end loop over 't'
5820
}// end loop over 's'
5821
}// end loop over 'r'
5822
for (unsigned int r = 0; r < 3; r++)
5824
for (unsigned int s = 0; s < 3 - r; s++)
5826
for (unsigned int t = 0; t < 3 - r - s; t++)
5828
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5829
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5830
}// end loop over 't'
5831
}// end loop over 's'
5832
}// end loop over 'r'
5834
// Table(s) of coefficients.
5835
static const double coefficients0[10] = \
5836
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
5838
// Compute value(s).
5839
for (unsigned int r = 0; r < 10; r++)
5841
values[1] += coefficients0[r]*basisvalues[r];
5842
}// end loop over 'r'
5848
// Array of basisvalues.
5849
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5851
// Declare helper variables.
5852
unsigned int rr = 0;
5853
unsigned int ss = 0;
5854
unsigned int tt = 0;
5855
double tmp5 = 0.000000000000000;
5856
double tmp6 = 0.000000000000000;
5857
double tmp7 = 0.000000000000000;
5858
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5859
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5860
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5861
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5862
double tmp4 = tmp3*tmp3;
5864
// Compute basisvalues.
5865
basisvalues[0] = 1.000000000000000;
5866
basisvalues[1] = tmp0;
5867
for (unsigned int r = 1; r < 2; r++)
5869
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5870
ss = r*(r + 1)*(r + 2)/6;
5871
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5872
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5873
}// end loop over 'r'
5874
for (unsigned int r = 0; r < 2; r++)
5876
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5877
ss = r*(r + 1)*(r + 2)/6;
5878
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5879
}// end loop over 'r'
5880
for (unsigned int r = 0; r < 1; r++)
5882
for (unsigned int s = 1; s < 2 - r; s++)
5884
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5885
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5886
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5887
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5888
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5889
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5890
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5891
}// end loop over 's'
5892
}// end loop over 'r'
5893
for (unsigned int r = 0; r < 2; r++)
5895
for (unsigned int s = 0; s < 2 - r; s++)
5897
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5898
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5899
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5900
}// end loop over 's'
5901
}// end loop over 'r'
5902
for (unsigned int r = 0; r < 1; r++)
5904
for (unsigned int s = 0; s < 1 - r; s++)
5906
for (unsigned int t = 1; t < 2 - r - s; t++)
5908
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
5909
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5910
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
5911
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5912
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5913
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
5914
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5915
}// end loop over 't'
5916
}// end loop over 's'
5917
}// end loop over 'r'
5918
for (unsigned int r = 0; r < 3; r++)
5920
for (unsigned int s = 0; s < 3 - r; s++)
5922
for (unsigned int t = 0; t < 3 - r - s; t++)
5924
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5925
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
5926
}// end loop over 't'
5927
}// end loop over 's'
5928
}// end loop over 'r'
5930
// Table(s) of coefficients.
5931
static const double coefficients0[10] = \
5932
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
5934
// Compute value(s).
5935
for (unsigned int r = 0; r < 10; r++)
5937
values[1] += coefficients0[r]*basisvalues[r];
5938
}// end loop over 'r'
5944
// Array of basisvalues.
5945
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
5947
// Declare helper variables.
5948
unsigned int rr = 0;
5949
unsigned int ss = 0;
5950
unsigned int tt = 0;
5951
double tmp5 = 0.000000000000000;
5952
double tmp6 = 0.000000000000000;
5953
double tmp7 = 0.000000000000000;
5954
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
5955
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
5956
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
5957
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
5958
double tmp4 = tmp3*tmp3;
5960
// Compute basisvalues.
5961
basisvalues[0] = 1.000000000000000;
5962
basisvalues[1] = tmp0;
5963
for (unsigned int r = 1; r < 2; r++)
5965
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5966
ss = r*(r + 1)*(r + 2)/6;
5967
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5968
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
5969
}// end loop over 'r'
5970
for (unsigned int r = 0; r < 2; r++)
5972
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5973
ss = r*(r + 1)*(r + 2)/6;
5974
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
5975
}// end loop over 'r'
5976
for (unsigned int r = 0; r < 1; r++)
5978
for (unsigned int s = 1; s < 2 - r; s++)
5980
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5981
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5982
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5983
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5984
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5985
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
5986
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5987
}// end loop over 's'
5988
}// end loop over 'r'
5989
for (unsigned int r = 0; r < 2; r++)
5991
for (unsigned int s = 0; s < 2 - r; s++)
5993
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5994
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5995
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
5996
}// end loop over 's'
5997
}// end loop over 'r'
5998
for (unsigned int r = 0; r < 1; r++)
6000
for (unsigned int s = 0; s < 1 - r; s++)
6002
for (unsigned int t = 1; t < 2 - r - s; t++)
6004
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6005
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6006
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6007
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6008
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6009
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6010
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6011
}// end loop over 't'
6012
}// end loop over 's'
6013
}// end loop over 'r'
6014
for (unsigned int r = 0; r < 3; r++)
6016
for (unsigned int s = 0; s < 3 - r; s++)
6018
for (unsigned int t = 0; t < 3 - r - s; t++)
6020
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6021
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6022
}// end loop over 't'
6023
}// end loop over 's'
6024
}// end loop over 'r'
6026
// Table(s) of coefficients.
6027
static const double coefficients0[10] = \
6028
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
6030
// Compute value(s).
6031
for (unsigned int r = 0; r < 10; r++)
6033
values[1] += coefficients0[r]*basisvalues[r];
6034
}// end loop over 'r'
6040
// Array of basisvalues.
6041
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6043
// Declare helper variables.
6044
unsigned int rr = 0;
6045
unsigned int ss = 0;
6046
unsigned int tt = 0;
6047
double tmp5 = 0.000000000000000;
6048
double tmp6 = 0.000000000000000;
6049
double tmp7 = 0.000000000000000;
6050
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6051
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6052
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6053
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6054
double tmp4 = tmp3*tmp3;
6056
// Compute basisvalues.
6057
basisvalues[0] = 1.000000000000000;
6058
basisvalues[1] = tmp0;
6059
for (unsigned int r = 1; r < 2; r++)
6061
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6062
ss = r*(r + 1)*(r + 2)/6;
6063
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6064
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6065
}// end loop over 'r'
6066
for (unsigned int r = 0; r < 2; r++)
6068
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6069
ss = r*(r + 1)*(r + 2)/6;
6070
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6071
}// end loop over 'r'
6072
for (unsigned int r = 0; r < 1; r++)
6074
for (unsigned int s = 1; s < 2 - r; s++)
6076
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6077
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6078
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6079
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6080
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6081
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6082
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6083
}// end loop over 's'
6084
}// end loop over 'r'
6085
for (unsigned int r = 0; r < 2; r++)
6087
for (unsigned int s = 0; s < 2 - r; s++)
6089
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6090
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6091
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6092
}// end loop over 's'
6093
}// end loop over 'r'
6094
for (unsigned int r = 0; r < 1; r++)
6096
for (unsigned int s = 0; s < 1 - r; s++)
6098
for (unsigned int t = 1; t < 2 - r - s; t++)
6100
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6101
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6102
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6103
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6104
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6105
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6106
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6107
}// end loop over 't'
6108
}// end loop over 's'
6109
}// end loop over 'r'
6110
for (unsigned int r = 0; r < 3; r++)
6112
for (unsigned int s = 0; s < 3 - r; s++)
6114
for (unsigned int t = 0; t < 3 - r - s; t++)
6116
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6117
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6118
}// end loop over 't'
6119
}// end loop over 's'
6120
}// end loop over 'r'
6122
// Table(s) of coefficients.
6123
static const double coefficients0[10] = \
6124
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
6126
// Compute value(s).
6127
for (unsigned int r = 0; r < 10; r++)
6129
values[1] += coefficients0[r]*basisvalues[r];
6130
}// end loop over 'r'
6136
// Array of basisvalues.
6137
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6139
// Declare helper variables.
6140
unsigned int rr = 0;
6141
unsigned int ss = 0;
6142
unsigned int tt = 0;
6143
double tmp5 = 0.000000000000000;
6144
double tmp6 = 0.000000000000000;
6145
double tmp7 = 0.000000000000000;
6146
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6147
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6148
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6149
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6150
double tmp4 = tmp3*tmp3;
6152
// Compute basisvalues.
6153
basisvalues[0] = 1.000000000000000;
6154
basisvalues[1] = tmp0;
6155
for (unsigned int r = 1; r < 2; r++)
6157
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6158
ss = r*(r + 1)*(r + 2)/6;
6159
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6160
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6161
}// end loop over 'r'
6162
for (unsigned int r = 0; r < 2; r++)
6164
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6165
ss = r*(r + 1)*(r + 2)/6;
6166
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6167
}// end loop over 'r'
6168
for (unsigned int r = 0; r < 1; r++)
6170
for (unsigned int s = 1; s < 2 - r; s++)
6172
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6173
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6174
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6175
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6176
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6177
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6178
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6179
}// end loop over 's'
6180
}// end loop over 'r'
6181
for (unsigned int r = 0; r < 2; r++)
6183
for (unsigned int s = 0; s < 2 - r; s++)
6185
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6186
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6187
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6188
}// end loop over 's'
6189
}// end loop over 'r'
6190
for (unsigned int r = 0; r < 1; r++)
6192
for (unsigned int s = 0; s < 1 - r; s++)
6194
for (unsigned int t = 1; t < 2 - r - s; t++)
6196
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6197
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6198
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6199
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6200
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6201
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6202
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6203
}// end loop over 't'
6204
}// end loop over 's'
6205
}// end loop over 'r'
6206
for (unsigned int r = 0; r < 3; r++)
6208
for (unsigned int s = 0; s < 3 - r; s++)
6210
for (unsigned int t = 0; t < 3 - r - s; t++)
6212
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6213
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6214
}// end loop over 't'
6215
}// end loop over 's'
6216
}// end loop over 'r'
6218
// Table(s) of coefficients.
6219
static const double coefficients0[10] = \
6220
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
6222
// Compute value(s).
6223
for (unsigned int r = 0; r < 10; r++)
6225
values[1] += coefficients0[r]*basisvalues[r];
6226
}// end loop over 'r'
6232
// Array of basisvalues.
6233
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6235
// Declare helper variables.
6236
unsigned int rr = 0;
6237
unsigned int ss = 0;
6238
unsigned int tt = 0;
6239
double tmp5 = 0.000000000000000;
6240
double tmp6 = 0.000000000000000;
6241
double tmp7 = 0.000000000000000;
6242
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6243
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6244
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6245
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6246
double tmp4 = tmp3*tmp3;
6248
// Compute basisvalues.
6249
basisvalues[0] = 1.000000000000000;
6250
basisvalues[1] = tmp0;
6251
for (unsigned int r = 1; r < 2; r++)
6253
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6254
ss = r*(r + 1)*(r + 2)/6;
6255
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6256
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6257
}// end loop over 'r'
6258
for (unsigned int r = 0; r < 2; r++)
6260
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6261
ss = r*(r + 1)*(r + 2)/6;
6262
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6263
}// end loop over 'r'
6264
for (unsigned int r = 0; r < 1; r++)
6266
for (unsigned int s = 1; s < 2 - r; s++)
6268
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6269
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6270
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6271
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6272
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6273
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6274
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6275
}// end loop over 's'
6276
}// end loop over 'r'
6277
for (unsigned int r = 0; r < 2; r++)
6279
for (unsigned int s = 0; s < 2 - r; s++)
6281
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6282
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6283
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6284
}// end loop over 's'
6285
}// end loop over 'r'
6286
for (unsigned int r = 0; r < 1; r++)
6288
for (unsigned int s = 0; s < 1 - r; s++)
6290
for (unsigned int t = 1; t < 2 - r - s; t++)
6292
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6293
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6294
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6295
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6296
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6297
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6298
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6299
}// end loop over 't'
6300
}// end loop over 's'
6301
}// end loop over 'r'
6302
for (unsigned int r = 0; r < 3; r++)
6304
for (unsigned int s = 0; s < 3 - r; s++)
6306
for (unsigned int t = 0; t < 3 - r - s; t++)
6308
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6309
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6310
}// end loop over 't'
6311
}// end loop over 's'
6312
}// end loop over 'r'
6314
// Table(s) of coefficients.
6315
static const double coefficients0[10] = \
6316
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
6318
// Compute value(s).
6319
for (unsigned int r = 0; r < 10; r++)
6321
values[2] += coefficients0[r]*basisvalues[r];
6322
}// end loop over 'r'
6328
// Array of basisvalues.
6329
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6331
// Declare helper variables.
6332
unsigned int rr = 0;
6333
unsigned int ss = 0;
6334
unsigned int tt = 0;
6335
double tmp5 = 0.000000000000000;
6336
double tmp6 = 0.000000000000000;
6337
double tmp7 = 0.000000000000000;
6338
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6339
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6340
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6341
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6342
double tmp4 = tmp3*tmp3;
6344
// Compute basisvalues.
6345
basisvalues[0] = 1.000000000000000;
6346
basisvalues[1] = tmp0;
6347
for (unsigned int r = 1; r < 2; r++)
6349
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6350
ss = r*(r + 1)*(r + 2)/6;
6351
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6352
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6353
}// end loop over 'r'
6354
for (unsigned int r = 0; r < 2; r++)
6356
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6357
ss = r*(r + 1)*(r + 2)/6;
6358
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6359
}// end loop over 'r'
6360
for (unsigned int r = 0; r < 1; r++)
6362
for (unsigned int s = 1; s < 2 - r; s++)
6364
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6365
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6366
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6367
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6368
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6369
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6370
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6371
}// end loop over 's'
6372
}// end loop over 'r'
6373
for (unsigned int r = 0; r < 2; r++)
6375
for (unsigned int s = 0; s < 2 - r; s++)
6377
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6378
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6379
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6380
}// end loop over 's'
6381
}// end loop over 'r'
6382
for (unsigned int r = 0; r < 1; r++)
6384
for (unsigned int s = 0; s < 1 - r; s++)
6386
for (unsigned int t = 1; t < 2 - r - s; t++)
6388
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6389
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6390
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6391
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6392
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6393
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6394
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6395
}// end loop over 't'
6396
}// end loop over 's'
6397
}// end loop over 'r'
6398
for (unsigned int r = 0; r < 3; r++)
6400
for (unsigned int s = 0; s < 3 - r; s++)
6402
for (unsigned int t = 0; t < 3 - r - s; t++)
6404
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6405
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6406
}// end loop over 't'
6407
}// end loop over 's'
6408
}// end loop over 'r'
6410
// Table(s) of coefficients.
6411
static const double coefficients0[10] = \
6412
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
6414
// Compute value(s).
6415
for (unsigned int r = 0; r < 10; r++)
6417
values[2] += coefficients0[r]*basisvalues[r];
6418
}// end loop over 'r'
6424
// Array of basisvalues.
6425
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6427
// Declare helper variables.
6428
unsigned int rr = 0;
6429
unsigned int ss = 0;
6430
unsigned int tt = 0;
6431
double tmp5 = 0.000000000000000;
6432
double tmp6 = 0.000000000000000;
6433
double tmp7 = 0.000000000000000;
6434
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6435
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6436
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6437
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6438
double tmp4 = tmp3*tmp3;
6440
// Compute basisvalues.
6441
basisvalues[0] = 1.000000000000000;
6442
basisvalues[1] = tmp0;
6443
for (unsigned int r = 1; r < 2; r++)
6445
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6446
ss = r*(r + 1)*(r + 2)/6;
6447
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6448
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6449
}// end loop over 'r'
6450
for (unsigned int r = 0; r < 2; r++)
6452
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6453
ss = r*(r + 1)*(r + 2)/6;
6454
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6455
}// end loop over 'r'
6456
for (unsigned int r = 0; r < 1; r++)
6458
for (unsigned int s = 1; s < 2 - r; s++)
6460
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6461
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6462
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6463
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6464
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6465
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6466
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6467
}// end loop over 's'
6468
}// end loop over 'r'
6469
for (unsigned int r = 0; r < 2; r++)
6471
for (unsigned int s = 0; s < 2 - r; s++)
6473
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6474
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6475
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6476
}// end loop over 's'
6477
}// end loop over 'r'
6478
for (unsigned int r = 0; r < 1; r++)
6480
for (unsigned int s = 0; s < 1 - r; s++)
6482
for (unsigned int t = 1; t < 2 - r - s; t++)
6484
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6485
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6486
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6487
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6488
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6489
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6490
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6491
}// end loop over 't'
6492
}// end loop over 's'
6493
}// end loop over 'r'
6494
for (unsigned int r = 0; r < 3; r++)
6496
for (unsigned int s = 0; s < 3 - r; s++)
6498
for (unsigned int t = 0; t < 3 - r - s; t++)
6500
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6501
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6502
}// end loop over 't'
6503
}// end loop over 's'
6504
}// end loop over 'r'
6506
// Table(s) of coefficients.
6507
static const double coefficients0[10] = \
6508
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
6510
// Compute value(s).
6511
for (unsigned int r = 0; r < 10; r++)
6513
values[2] += coefficients0[r]*basisvalues[r];
6514
}// end loop over 'r'
6520
// Array of basisvalues.
6521
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6523
// Declare helper variables.
6524
unsigned int rr = 0;
6525
unsigned int ss = 0;
6526
unsigned int tt = 0;
6527
double tmp5 = 0.000000000000000;
6528
double tmp6 = 0.000000000000000;
6529
double tmp7 = 0.000000000000000;
6530
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6531
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6532
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6533
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6534
double tmp4 = tmp3*tmp3;
6536
// Compute basisvalues.
6537
basisvalues[0] = 1.000000000000000;
6538
basisvalues[1] = tmp0;
6539
for (unsigned int r = 1; r < 2; r++)
6541
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6542
ss = r*(r + 1)*(r + 2)/6;
6543
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6544
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6545
}// end loop over 'r'
6546
for (unsigned int r = 0; r < 2; r++)
6548
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6549
ss = r*(r + 1)*(r + 2)/6;
6550
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6551
}// end loop over 'r'
6552
for (unsigned int r = 0; r < 1; r++)
6554
for (unsigned int s = 1; s < 2 - r; s++)
6556
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6557
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6558
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6559
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6560
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6561
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6562
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6563
}// end loop over 's'
6564
}// end loop over 'r'
6565
for (unsigned int r = 0; r < 2; r++)
6567
for (unsigned int s = 0; s < 2 - r; s++)
6569
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6570
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6571
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6572
}// end loop over 's'
6573
}// end loop over 'r'
6574
for (unsigned int r = 0; r < 1; r++)
6576
for (unsigned int s = 0; s < 1 - r; s++)
6578
for (unsigned int t = 1; t < 2 - r - s; t++)
6580
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6581
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6582
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6583
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6584
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6585
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6586
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6587
}// end loop over 't'
6588
}// end loop over 's'
6589
}// end loop over 'r'
6590
for (unsigned int r = 0; r < 3; r++)
6592
for (unsigned int s = 0; s < 3 - r; s++)
6594
for (unsigned int t = 0; t < 3 - r - s; t++)
6596
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6597
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6598
}// end loop over 't'
6599
}// end loop over 's'
6600
}// end loop over 'r'
6602
// Table(s) of coefficients.
6603
static const double coefficients0[10] = \
6604
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
6606
// Compute value(s).
6607
for (unsigned int r = 0; r < 10; r++)
6609
values[2] += coefficients0[r]*basisvalues[r];
6610
}// end loop over 'r'
6616
// Array of basisvalues.
6617
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6619
// Declare helper variables.
6620
unsigned int rr = 0;
6621
unsigned int ss = 0;
6622
unsigned int tt = 0;
6623
double tmp5 = 0.000000000000000;
6624
double tmp6 = 0.000000000000000;
6625
double tmp7 = 0.000000000000000;
6626
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6627
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6628
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6629
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6630
double tmp4 = tmp3*tmp3;
6632
// Compute basisvalues.
6633
basisvalues[0] = 1.000000000000000;
6634
basisvalues[1] = tmp0;
6635
for (unsigned int r = 1; r < 2; r++)
6637
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6638
ss = r*(r + 1)*(r + 2)/6;
6639
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6640
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6641
}// end loop over 'r'
6642
for (unsigned int r = 0; r < 2; r++)
6644
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6645
ss = r*(r + 1)*(r + 2)/6;
6646
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6647
}// end loop over 'r'
6648
for (unsigned int r = 0; r < 1; r++)
6650
for (unsigned int s = 1; s < 2 - r; s++)
6652
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6653
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6654
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6655
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6656
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6657
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6658
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6659
}// end loop over 's'
6660
}// end loop over 'r'
6661
for (unsigned int r = 0; r < 2; r++)
6663
for (unsigned int s = 0; s < 2 - r; s++)
6665
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6666
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6667
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6668
}// end loop over 's'
6669
}// end loop over 'r'
6670
for (unsigned int r = 0; r < 1; r++)
6672
for (unsigned int s = 0; s < 1 - r; s++)
6674
for (unsigned int t = 1; t < 2 - r - s; t++)
6676
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6677
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6678
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6679
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6680
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6681
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6682
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6683
}// end loop over 't'
6684
}// end loop over 's'
6685
}// end loop over 'r'
6686
for (unsigned int r = 0; r < 3; r++)
6688
for (unsigned int s = 0; s < 3 - r; s++)
6690
for (unsigned int t = 0; t < 3 - r - s; t++)
6692
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6693
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6694
}// end loop over 't'
6695
}// end loop over 's'
6696
}// end loop over 'r'
6698
// Table(s) of coefficients.
6699
static const double coefficients0[10] = \
6700
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
6702
// Compute value(s).
6703
for (unsigned int r = 0; r < 10; r++)
6705
values[2] += coefficients0[r]*basisvalues[r];
6706
}// end loop over 'r'
6712
// Array of basisvalues.
6713
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6715
// Declare helper variables.
6716
unsigned int rr = 0;
6717
unsigned int ss = 0;
6718
unsigned int tt = 0;
6719
double tmp5 = 0.000000000000000;
6720
double tmp6 = 0.000000000000000;
6721
double tmp7 = 0.000000000000000;
6722
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6723
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6724
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6725
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6726
double tmp4 = tmp3*tmp3;
6728
// Compute basisvalues.
6729
basisvalues[0] = 1.000000000000000;
6730
basisvalues[1] = tmp0;
6731
for (unsigned int r = 1; r < 2; r++)
6733
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6734
ss = r*(r + 1)*(r + 2)/6;
6735
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6736
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6737
}// end loop over 'r'
6738
for (unsigned int r = 0; r < 2; r++)
6740
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6741
ss = r*(r + 1)*(r + 2)/6;
6742
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6743
}// end loop over 'r'
6744
for (unsigned int r = 0; r < 1; r++)
6746
for (unsigned int s = 1; s < 2 - r; s++)
6748
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6749
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6750
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6751
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6752
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6753
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6754
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6755
}// end loop over 's'
6756
}// end loop over 'r'
6757
for (unsigned int r = 0; r < 2; r++)
6759
for (unsigned int s = 0; s < 2 - r; s++)
6761
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6762
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6763
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6764
}// end loop over 's'
6765
}// end loop over 'r'
6766
for (unsigned int r = 0; r < 1; r++)
6768
for (unsigned int s = 0; s < 1 - r; s++)
6770
for (unsigned int t = 1; t < 2 - r - s; t++)
6772
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6773
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6774
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6775
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6776
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6777
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6778
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6779
}// end loop over 't'
6780
}// end loop over 's'
6781
}// end loop over 'r'
6782
for (unsigned int r = 0; r < 3; r++)
6784
for (unsigned int s = 0; s < 3 - r; s++)
6786
for (unsigned int t = 0; t < 3 - r - s; t++)
6788
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6789
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6790
}// end loop over 't'
6791
}// end loop over 's'
6792
}// end loop over 'r'
6794
// Table(s) of coefficients.
6795
static const double coefficients0[10] = \
6796
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
6798
// Compute value(s).
6799
for (unsigned int r = 0; r < 10; r++)
6801
values[2] += coefficients0[r]*basisvalues[r];
6802
}// end loop over 'r'
6808
// Array of basisvalues.
6809
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6811
// Declare helper variables.
6812
unsigned int rr = 0;
6813
unsigned int ss = 0;
6814
unsigned int tt = 0;
6815
double tmp5 = 0.000000000000000;
6816
double tmp6 = 0.000000000000000;
6817
double tmp7 = 0.000000000000000;
6818
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6819
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6820
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6821
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6822
double tmp4 = tmp3*tmp3;
6824
// Compute basisvalues.
6825
basisvalues[0] = 1.000000000000000;
6826
basisvalues[1] = tmp0;
6827
for (unsigned int r = 1; r < 2; r++)
6829
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6830
ss = r*(r + 1)*(r + 2)/6;
6831
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6832
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6833
}// end loop over 'r'
6834
for (unsigned int r = 0; r < 2; r++)
6836
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6837
ss = r*(r + 1)*(r + 2)/6;
6838
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6839
}// end loop over 'r'
6840
for (unsigned int r = 0; r < 1; r++)
6842
for (unsigned int s = 1; s < 2 - r; s++)
6844
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6845
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6846
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6847
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6848
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6849
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6850
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6851
}// end loop over 's'
6852
}// end loop over 'r'
6853
for (unsigned int r = 0; r < 2; r++)
6855
for (unsigned int s = 0; s < 2 - r; s++)
6857
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6858
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6859
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6860
}// end loop over 's'
6861
}// end loop over 'r'
6862
for (unsigned int r = 0; r < 1; r++)
6864
for (unsigned int s = 0; s < 1 - r; s++)
6866
for (unsigned int t = 1; t < 2 - r - s; t++)
6868
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6869
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6870
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6871
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6872
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6873
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6874
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6875
}// end loop over 't'
6876
}// end loop over 's'
6877
}// end loop over 'r'
6878
for (unsigned int r = 0; r < 3; r++)
6880
for (unsigned int s = 0; s < 3 - r; s++)
6882
for (unsigned int t = 0; t < 3 - r - s; t++)
6884
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6885
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6886
}// end loop over 't'
6887
}// end loop over 's'
6888
}// end loop over 'r'
6890
// Table(s) of coefficients.
6891
static const double coefficients0[10] = \
6892
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
6894
// Compute value(s).
6895
for (unsigned int r = 0; r < 10; r++)
6897
values[2] += coefficients0[r]*basisvalues[r];
6898
}// end loop over 'r'
6904
// Array of basisvalues.
6905
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
6907
// Declare helper variables.
6908
unsigned int rr = 0;
6909
unsigned int ss = 0;
6910
unsigned int tt = 0;
6911
double tmp5 = 0.000000000000000;
6912
double tmp6 = 0.000000000000000;
6913
double tmp7 = 0.000000000000000;
6914
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
6915
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
6916
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
6917
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
6918
double tmp4 = tmp3*tmp3;
6920
// Compute basisvalues.
6921
basisvalues[0] = 1.000000000000000;
6922
basisvalues[1] = tmp0;
6923
for (unsigned int r = 1; r < 2; r++)
6925
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6926
ss = r*(r + 1)*(r + 2)/6;
6927
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6928
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
6929
}// end loop over 'r'
6930
for (unsigned int r = 0; r < 2; r++)
6932
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6933
ss = r*(r + 1)*(r + 2)/6;
6934
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
6935
}// end loop over 'r'
6936
for (unsigned int r = 0; r < 1; r++)
6938
for (unsigned int s = 1; s < 2 - r; s++)
6940
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6941
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6942
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6943
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6944
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6945
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
6946
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6947
}// end loop over 's'
6948
}// end loop over 'r'
6949
for (unsigned int r = 0; r < 2; r++)
6951
for (unsigned int s = 0; s < 2 - r; s++)
6953
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6954
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6955
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
6956
}// end loop over 's'
6957
}// end loop over 'r'
6958
for (unsigned int r = 0; r < 1; r++)
6960
for (unsigned int s = 0; s < 1 - r; s++)
6962
for (unsigned int t = 1; t < 2 - r - s; t++)
6964
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
6965
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6966
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
6967
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6968
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6969
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
6970
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6971
}// end loop over 't'
6972
}// end loop over 's'
6973
}// end loop over 'r'
6974
for (unsigned int r = 0; r < 3; r++)
6976
for (unsigned int s = 0; s < 3 - r; s++)
6978
for (unsigned int t = 0; t < 3 - r - s; t++)
6980
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6981
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
6982
}// end loop over 't'
6983
}// end loop over 's'
6984
}// end loop over 'r'
6986
// Table(s) of coefficients.
6987
static const double coefficients0[10] = \
6988
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
6990
// Compute value(s).
6991
for (unsigned int r = 0; r < 10; r++)
6993
values[2] += coefficients0[r]*basisvalues[r];
6994
}// end loop over 'r'
7000
// Array of basisvalues.
7001
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
7003
// Declare helper variables.
7004
unsigned int rr = 0;
7005
unsigned int ss = 0;
7006
unsigned int tt = 0;
7007
double tmp5 = 0.000000000000000;
7008
double tmp6 = 0.000000000000000;
7009
double tmp7 = 0.000000000000000;
7010
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
7011
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
7012
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
7013
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
7014
double tmp4 = tmp3*tmp3;
7016
// Compute basisvalues.
7017
basisvalues[0] = 1.000000000000000;
7018
basisvalues[1] = tmp0;
7019
for (unsigned int r = 1; r < 2; r++)
7021
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7022
ss = r*(r + 1)*(r + 2)/6;
7023
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7024
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
7025
}// end loop over 'r'
7026
for (unsigned int r = 0; r < 2; r++)
7028
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7029
ss = r*(r + 1)*(r + 2)/6;
7030
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
7031
}// end loop over 'r'
7032
for (unsigned int r = 0; r < 1; r++)
7034
for (unsigned int s = 1; s < 2 - r; s++)
7036
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7037
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7038
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7039
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7040
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7041
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7042
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7043
}// end loop over 's'
7044
}// end loop over 'r'
7045
for (unsigned int r = 0; r < 2; r++)
7047
for (unsigned int s = 0; s < 2 - r; s++)
7049
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7050
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7051
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
7052
}// end loop over 's'
7053
}// end loop over 'r'
7054
for (unsigned int r = 0; r < 1; r++)
7056
for (unsigned int s = 0; s < 1 - r; s++)
7058
for (unsigned int t = 1; t < 2 - r - s; t++)
7060
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
7061
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7062
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
7063
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7064
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7065
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7066
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7067
}// end loop over 't'
7068
}// end loop over 's'
7069
}// end loop over 'r'
7070
for (unsigned int r = 0; r < 3; r++)
7072
for (unsigned int s = 0; s < 3 - r; s++)
7074
for (unsigned int t = 0; t < 3 - r - s; t++)
7076
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7077
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
7078
}// end loop over 't'
7079
}// end loop over 's'
7080
}// end loop over 'r'
7082
// Table(s) of coefficients.
7083
static const double coefficients0[10] = \
7084
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
7086
// Compute value(s).
7087
for (unsigned int r = 0; r < 10; r++)
7089
values[2] += coefficients0[r]*basisvalues[r];
7090
}// end loop over 'r'
7096
// Array of basisvalues.
7097
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
7099
// Declare helper variables.
7100
unsigned int rr = 0;
7101
unsigned int ss = 0;
7102
unsigned int tt = 0;
7103
double tmp5 = 0.000000000000000;
7104
double tmp6 = 0.000000000000000;
7105
double tmp7 = 0.000000000000000;
7106
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
7107
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
7108
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
7109
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
7110
double tmp4 = tmp3*tmp3;
7112
// Compute basisvalues.
7113
basisvalues[0] = 1.000000000000000;
7114
basisvalues[1] = tmp0;
7115
for (unsigned int r = 1; r < 2; r++)
7117
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7118
ss = r*(r + 1)*(r + 2)/6;
7119
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7120
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
7121
}// end loop over 'r'
7122
for (unsigned int r = 0; r < 2; r++)
7124
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7125
ss = r*(r + 1)*(r + 2)/6;
7126
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
7127
}// end loop over 'r'
7128
for (unsigned int r = 0; r < 1; r++)
7130
for (unsigned int s = 1; s < 2 - r; s++)
7132
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7133
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7134
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7135
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7136
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7137
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7138
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7139
}// end loop over 's'
7140
}// end loop over 'r'
7141
for (unsigned int r = 0; r < 2; r++)
7143
for (unsigned int s = 0; s < 2 - r; s++)
7145
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7146
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7147
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
7148
}// end loop over 's'
7149
}// end loop over 'r'
7150
for (unsigned int r = 0; r < 1; r++)
7152
for (unsigned int s = 0; s < 1 - r; s++)
7154
for (unsigned int t = 1; t < 2 - r - s; t++)
7156
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
7157
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7158
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
7159
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7160
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7161
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7162
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7163
}// end loop over 't'
7164
}// end loop over 's'
7165
}// end loop over 'r'
7166
for (unsigned int r = 0; r < 3; r++)
7168
for (unsigned int s = 0; s < 3 - r; s++)
7170
for (unsigned int t = 0; t < 3 - r - s; t++)
7172
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7173
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
7174
}// end loop over 't'
7175
}// end loop over 's'
7176
}// end loop over 'r'
7178
// Table(s) of coefficients.
7179
static const double coefficients0[10] = \
7180
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
7182
// Compute value(s).
7183
for (unsigned int r = 0; r < 10; r++)
7185
values[2] += coefficients0[r]*basisvalues[r];
7186
}// end loop over 'r'
7193
/// Evaluate all basis functions at given point in cell
7194
virtual void evaluate_basis_all(double* values,
7195
const double* coordinates,
7196
const ufc::cell& c) const
7198
// Helper variable to hold values of a single dof.
7199
double dof_values[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
7201
// Loop dofs and call evaluate_basis.
7202
for (unsigned int r = 0; r < 30; r++)
7204
evaluate_basis(r, dof_values, coordinates, c);
7205
for (unsigned int s = 0; s < 3; s++)
7207
values[r*3 + s] = dof_values[s];
7208
}// end loop over 's'
7209
}// end loop over 'r'
7212
/// Evaluate order n derivatives of basis function i at given point in cell
7213
virtual void evaluate_basis_derivatives(unsigned int i,
7216
const double* coordinates,
7217
const ufc::cell& c) const
7219
// Extract vertex coordinates
7220
const double * const * x = c.coordinates;
7222
// Compute Jacobian of affine map from reference cell
7223
const double J_00 = x[1][0] - x[0][0];
7224
const double J_01 = x[2][0] - x[0][0];
7225
const double J_02 = x[3][0] - x[0][0];
7226
const double J_10 = x[1][1] - x[0][1];
7227
const double J_11 = x[2][1] - x[0][1];
7228
const double J_12 = x[3][1] - x[0][1];
7229
const double J_20 = x[1][2] - x[0][2];
7230
const double J_21 = x[2][2] - x[0][2];
7231
const double J_22 = x[3][2] - x[0][2];
7233
// Compute sub determinants
7234
const double d_00 = J_11*J_22 - J_12*J_21;
7235
const double d_01 = J_12*J_20 - J_10*J_22;
7236
const double d_02 = J_10*J_21 - J_11*J_20;
7237
const double d_10 = J_02*J_21 - J_01*J_22;
7238
const double d_11 = J_00*J_22 - J_02*J_20;
7239
const double d_12 = J_01*J_20 - J_00*J_21;
7240
const double d_20 = J_01*J_12 - J_02*J_11;
7241
const double d_21 = J_02*J_10 - J_00*J_12;
7242
const double d_22 = J_00*J_11 - J_01*J_10;
7244
// Compute determinant of Jacobian
7245
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
7247
// Compute inverse of Jacobian
7248
const double K_00 = d_00 / detJ;
7249
const double K_01 = d_10 / detJ;
7250
const double K_02 = d_20 / detJ;
7251
const double K_10 = d_01 / detJ;
7252
const double K_11 = d_11 / detJ;
7253
const double K_12 = d_21 / detJ;
7254
const double K_20 = d_02 / detJ;
7255
const double K_21 = d_12 / detJ;
7256
const double K_22 = d_22 / detJ;
7258
// Compute constants
7259
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
7260
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
7261
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
7263
// Get coordinates and map to the reference (FIAT) element
7264
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
7265
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
7266
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
7269
// Compute number of derivatives.
7270
unsigned int num_derivatives = 1;
7271
for (unsigned int r = 0; r < n; r++)
7273
num_derivatives *= 3;
7274
}// end loop over 'r'
7276
// Declare pointer to two dimensional array that holds combinations of derivatives and initialise
7277
unsigned int **combinations = new unsigned int *[num_derivatives];
7278
for (unsigned int row = 0; row < num_derivatives; row++)
7280
combinations[row] = new unsigned int [n];
7281
for (unsigned int col = 0; col < n; col++)
7282
combinations[row][col] = 0;
7285
// Generate combinations of derivatives
7286
for (unsigned int row = 1; row < num_derivatives; row++)
7288
for (unsigned int num = 0; num < row; num++)
7290
for (unsigned int col = n-1; col+1 > 0; col--)
7292
if (combinations[row][col] + 1 > 2)
7293
combinations[row][col] = 0;
7296
combinations[row][col] += 1;
7303
// Compute inverse of Jacobian
7304
const double Jinv[3][3] = {{K_00, K_01, K_02}, {K_10, K_11, K_12}, {K_20, K_21, K_22}};
7306
// Declare transformation matrix
7307
// Declare pointer to two dimensional array and initialise
7308
double **transform = new double *[num_derivatives];
7310
for (unsigned int j = 0; j < num_derivatives; j++)
7312
transform[j] = new double [num_derivatives];
7313
for (unsigned int k = 0; k < num_derivatives; k++)
7314
transform[j][k] = 1;
7317
// Construct transformation matrix
7318
for (unsigned int row = 0; row < num_derivatives; row++)
7320
for (unsigned int col = 0; col < num_derivatives; col++)
7322
for (unsigned int k = 0; k < n; k++)
7323
transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
7327
// Reset values. Assuming that values is always an array.
7328
for (unsigned int r = 0; r < 3*num_derivatives; r++)
7330
values[r] = 0.000000000000000;
7331
}// end loop over 'r'
7338
// Array of basisvalues.
7339
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
7341
// Declare helper variables.
7342
unsigned int rr = 0;
7343
unsigned int ss = 0;
7344
unsigned int tt = 0;
7345
double tmp5 = 0.000000000000000;
7346
double tmp6 = 0.000000000000000;
7347
double tmp7 = 0.000000000000000;
7348
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
7349
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
7350
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
7351
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
7352
double tmp4 = tmp3*tmp3;
7354
// Compute basisvalues.
7355
basisvalues[0] = 1.000000000000000;
7356
basisvalues[1] = tmp0;
7357
for (unsigned int r = 1; r < 2; r++)
7359
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7360
ss = r*(r + 1)*(r + 2)/6;
7361
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7362
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
7363
}// end loop over 'r'
7364
for (unsigned int r = 0; r < 2; r++)
7366
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7367
ss = r*(r + 1)*(r + 2)/6;
7368
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
7369
}// end loop over 'r'
7370
for (unsigned int r = 0; r < 1; r++)
7372
for (unsigned int s = 1; s < 2 - r; s++)
7374
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7375
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7376
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7377
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7378
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7379
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7380
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7381
}// end loop over 's'
7382
}// end loop over 'r'
7383
for (unsigned int r = 0; r < 2; r++)
7385
for (unsigned int s = 0; s < 2 - r; s++)
7387
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7388
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7389
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
7390
}// end loop over 's'
7391
}// end loop over 'r'
7392
for (unsigned int r = 0; r < 1; r++)
7394
for (unsigned int s = 0; s < 1 - r; s++)
7396
for (unsigned int t = 1; t < 2 - r - s; t++)
7398
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
7399
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7400
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
7401
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7402
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7403
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7404
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7405
}// end loop over 't'
7406
}// end loop over 's'
7407
}// end loop over 'r'
7408
for (unsigned int r = 0; r < 3; r++)
7410
for (unsigned int s = 0; s < 3 - r; s++)
7412
for (unsigned int t = 0; t < 3 - r - s; t++)
7414
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7415
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
7416
}// end loop over 't'
7417
}// end loop over 's'
7418
}// end loop over 'r'
7420
// Table(s) of coefficients.
7421
static const double coefficients0[10] = \
7422
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
7424
// Tables of derivatives of the polynomial base (transpose).
7425
static const double dmats0[10][10] = \
7426
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7427
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7428
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7429
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7430
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7431
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7432
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7433
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7434
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7435
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7437
static const double dmats1[10][10] = \
7438
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7439
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7440
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7441
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7442
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7443
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7444
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7445
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7446
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7447
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7449
static const double dmats2[10][10] = \
7450
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7451
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7452
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7453
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7454
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7455
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7456
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7457
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7458
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7459
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7461
// Compute reference derivatives.
7462
// Declare pointer to array of derivatives on FIAT element.
7463
double *derivatives = new double[num_derivatives];
7464
for (unsigned int r = 0; r < num_derivatives; r++)
7466
derivatives[r] = 0.000000000000000;
7467
}// end loop over 'r'
7469
// Declare derivative matrix (of polynomial basis).
7470
double dmats[10][10] = \
7471
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7472
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7473
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7474
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7475
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7476
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7477
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7478
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
7479
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
7480
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
7482
// Declare (auxiliary) derivative matrix (of polynomial basis).
7483
double dmats_old[10][10] = \
7484
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7485
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7486
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7487
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7488
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7489
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7490
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7491
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
7492
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
7493
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
7495
// Loop possible derivatives.
7496
for (unsigned int r = 0; r < num_derivatives; r++)
7498
// Resetting dmats values to compute next derivative.
7499
for (unsigned int t = 0; t < 10; t++)
7501
for (unsigned int u = 0; u < 10; u++)
7503
dmats[t][u] = 0.000000000000000;
7506
dmats[t][u] = 1.000000000000000;
7509
}// end loop over 'u'
7510
}// end loop over 't'
7512
// Looping derivative order to generate dmats.
7513
for (unsigned int s = 0; s < n; s++)
7515
// Updating dmats_old with new values and resetting dmats.
7516
for (unsigned int t = 0; t < 10; t++)
7518
for (unsigned int u = 0; u < 10; u++)
7520
dmats_old[t][u] = dmats[t][u];
7521
dmats[t][u] = 0.000000000000000;
7522
}// end loop over 'u'
7523
}// end loop over 't'
7525
// Update dmats using an inner product.
7526
if (combinations[r][s] == 0)
7528
for (unsigned int t = 0; t < 10; t++)
7530
for (unsigned int u = 0; u < 10; u++)
7532
for (unsigned int tu = 0; tu < 10; tu++)
7534
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
7535
}// end loop over 'tu'
7536
}// end loop over 'u'
7537
}// end loop over 't'
7540
if (combinations[r][s] == 1)
7542
for (unsigned int t = 0; t < 10; t++)
7544
for (unsigned int u = 0; u < 10; u++)
7546
for (unsigned int tu = 0; tu < 10; tu++)
7548
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
7549
}// end loop over 'tu'
7550
}// end loop over 'u'
7551
}// end loop over 't'
7554
if (combinations[r][s] == 2)
7556
for (unsigned int t = 0; t < 10; t++)
7558
for (unsigned int u = 0; u < 10; u++)
7560
for (unsigned int tu = 0; tu < 10; tu++)
7562
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
7563
}// end loop over 'tu'
7564
}// end loop over 'u'
7565
}// end loop over 't'
7568
}// end loop over 's'
7569
for (unsigned int s = 0; s < 10; s++)
7571
for (unsigned int t = 0; t < 10; t++)
7573
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
7574
}// end loop over 't'
7575
}// end loop over 's'
7576
}// end loop over 'r'
7578
// Transform derivatives back to physical element
7579
for (unsigned int r = 0; r < num_derivatives; r++)
7581
for (unsigned int s = 0; s < num_derivatives; s++)
7583
values[r] += transform[r][s]*derivatives[s];
7584
}// end loop over 's'
7585
}// end loop over 'r'
7587
// Delete pointer to array of derivatives on FIAT element
7588
delete [] derivatives;
7590
// Delete pointer to array of combinations of derivatives and transform
7591
for (unsigned int r = 0; r < num_derivatives; r++)
7593
delete [] combinations[r];
7594
}// end loop over 'r'
7595
delete [] combinations;
7596
for (unsigned int r = 0; r < num_derivatives; r++)
7598
delete [] transform[r];
7599
}// end loop over 'r'
7600
delete [] transform;
7606
// Array of basisvalues.
7607
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
7609
// Declare helper variables.
7610
unsigned int rr = 0;
7611
unsigned int ss = 0;
7612
unsigned int tt = 0;
7613
double tmp5 = 0.000000000000000;
7614
double tmp6 = 0.000000000000000;
7615
double tmp7 = 0.000000000000000;
7616
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
7617
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
7618
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
7619
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
7620
double tmp4 = tmp3*tmp3;
7622
// Compute basisvalues.
7623
basisvalues[0] = 1.000000000000000;
7624
basisvalues[1] = tmp0;
7625
for (unsigned int r = 1; r < 2; r++)
7627
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7628
ss = r*(r + 1)*(r + 2)/6;
7629
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7630
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
7631
}// end loop over 'r'
7632
for (unsigned int r = 0; r < 2; r++)
7634
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7635
ss = r*(r + 1)*(r + 2)/6;
7636
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
7637
}// end loop over 'r'
7638
for (unsigned int r = 0; r < 1; r++)
7640
for (unsigned int s = 1; s < 2 - r; s++)
7642
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7643
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7644
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7645
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7646
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7647
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7648
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7649
}// end loop over 's'
7650
}// end loop over 'r'
7651
for (unsigned int r = 0; r < 2; r++)
7653
for (unsigned int s = 0; s < 2 - r; s++)
7655
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7656
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7657
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
7658
}// end loop over 's'
7659
}// end loop over 'r'
7660
for (unsigned int r = 0; r < 1; r++)
7662
for (unsigned int s = 0; s < 1 - r; s++)
7664
for (unsigned int t = 1; t < 2 - r - s; t++)
7666
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
7667
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7668
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
7669
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7670
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7671
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7672
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7673
}// end loop over 't'
7674
}// end loop over 's'
7675
}// end loop over 'r'
7676
for (unsigned int r = 0; r < 3; r++)
7678
for (unsigned int s = 0; s < 3 - r; s++)
7680
for (unsigned int t = 0; t < 3 - r - s; t++)
7682
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7683
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
7684
}// end loop over 't'
7685
}// end loop over 's'
7686
}// end loop over 'r'
7688
// Table(s) of coefficients.
7689
static const double coefficients0[10] = \
7690
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
7692
// Tables of derivatives of the polynomial base (transpose).
7693
static const double dmats0[10][10] = \
7694
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7695
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7696
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7697
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7698
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7699
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7700
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7701
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7702
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7703
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7705
static const double dmats1[10][10] = \
7706
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7707
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7708
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7709
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7710
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7711
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7712
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7713
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7714
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7715
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7717
static const double dmats2[10][10] = \
7718
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7719
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7720
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7721
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7722
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7723
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7724
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7725
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7726
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7727
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7729
// Compute reference derivatives.
7730
// Declare pointer to array of derivatives on FIAT element.
7731
double *derivatives = new double[num_derivatives];
7732
for (unsigned int r = 0; r < num_derivatives; r++)
7734
derivatives[r] = 0.000000000000000;
7735
}// end loop over 'r'
7737
// Declare derivative matrix (of polynomial basis).
7738
double dmats[10][10] = \
7739
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7740
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7741
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7742
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7743
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7744
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7745
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7746
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
7747
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
7748
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
7750
// Declare (auxiliary) derivative matrix (of polynomial basis).
7751
double dmats_old[10][10] = \
7752
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7753
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7754
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7755
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7756
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7757
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7758
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7759
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
7760
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
7761
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
7763
// Loop possible derivatives.
7764
for (unsigned int r = 0; r < num_derivatives; r++)
7766
// Resetting dmats values to compute next derivative.
7767
for (unsigned int t = 0; t < 10; t++)
7769
for (unsigned int u = 0; u < 10; u++)
7771
dmats[t][u] = 0.000000000000000;
7774
dmats[t][u] = 1.000000000000000;
7777
}// end loop over 'u'
7778
}// end loop over 't'
7780
// Looping derivative order to generate dmats.
7781
for (unsigned int s = 0; s < n; s++)
7783
// Updating dmats_old with new values and resetting dmats.
7784
for (unsigned int t = 0; t < 10; t++)
7786
for (unsigned int u = 0; u < 10; u++)
7788
dmats_old[t][u] = dmats[t][u];
7789
dmats[t][u] = 0.000000000000000;
7790
}// end loop over 'u'
7791
}// end loop over 't'
7793
// Update dmats using an inner product.
7794
if (combinations[r][s] == 0)
7796
for (unsigned int t = 0; t < 10; t++)
7798
for (unsigned int u = 0; u < 10; u++)
7800
for (unsigned int tu = 0; tu < 10; tu++)
7802
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
7803
}// end loop over 'tu'
7804
}// end loop over 'u'
7805
}// end loop over 't'
7808
if (combinations[r][s] == 1)
7810
for (unsigned int t = 0; t < 10; t++)
7812
for (unsigned int u = 0; u < 10; u++)
7814
for (unsigned int tu = 0; tu < 10; tu++)
7816
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
7817
}// end loop over 'tu'
7818
}// end loop over 'u'
7819
}// end loop over 't'
7822
if (combinations[r][s] == 2)
7824
for (unsigned int t = 0; t < 10; t++)
7826
for (unsigned int u = 0; u < 10; u++)
7828
for (unsigned int tu = 0; tu < 10; tu++)
7830
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
7831
}// end loop over 'tu'
7832
}// end loop over 'u'
7833
}// end loop over 't'
7836
}// end loop over 's'
7837
for (unsigned int s = 0; s < 10; s++)
7839
for (unsigned int t = 0; t < 10; t++)
7841
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
7842
}// end loop over 't'
7843
}// end loop over 's'
7844
}// end loop over 'r'
7846
// Transform derivatives back to physical element
7847
for (unsigned int r = 0; r < num_derivatives; r++)
7849
for (unsigned int s = 0; s < num_derivatives; s++)
7851
values[r] += transform[r][s]*derivatives[s];
7852
}// end loop over 's'
7853
}// end loop over 'r'
7855
// Delete pointer to array of derivatives on FIAT element
7856
delete [] derivatives;
7858
// Delete pointer to array of combinations of derivatives and transform
7859
for (unsigned int r = 0; r < num_derivatives; r++)
7861
delete [] combinations[r];
7862
}// end loop over 'r'
7863
delete [] combinations;
7864
for (unsigned int r = 0; r < num_derivatives; r++)
7866
delete [] transform[r];
7867
}// end loop over 'r'
7868
delete [] transform;
7874
// Array of basisvalues.
7875
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
7877
// Declare helper variables.
7878
unsigned int rr = 0;
7879
unsigned int ss = 0;
7880
unsigned int tt = 0;
7881
double tmp5 = 0.000000000000000;
7882
double tmp6 = 0.000000000000000;
7883
double tmp7 = 0.000000000000000;
7884
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
7885
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
7886
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
7887
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
7888
double tmp4 = tmp3*tmp3;
7890
// Compute basisvalues.
7891
basisvalues[0] = 1.000000000000000;
7892
basisvalues[1] = tmp0;
7893
for (unsigned int r = 1; r < 2; r++)
7895
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7896
ss = r*(r + 1)*(r + 2)/6;
7897
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7898
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
7899
}// end loop over 'r'
7900
for (unsigned int r = 0; r < 2; r++)
7902
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7903
ss = r*(r + 1)*(r + 2)/6;
7904
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
7905
}// end loop over 'r'
7906
for (unsigned int r = 0; r < 1; r++)
7908
for (unsigned int s = 1; s < 2 - r; s++)
7910
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7911
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7912
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7913
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7914
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7915
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
7916
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7917
}// end loop over 's'
7918
}// end loop over 'r'
7919
for (unsigned int r = 0; r < 2; r++)
7921
for (unsigned int s = 0; s < 2 - r; s++)
7923
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7924
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7925
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
7926
}// end loop over 's'
7927
}// end loop over 'r'
7928
for (unsigned int r = 0; r < 1; r++)
7930
for (unsigned int s = 0; s < 1 - r; s++)
7932
for (unsigned int t = 1; t < 2 - r - s; t++)
7934
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
7935
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7936
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
7937
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7938
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7939
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
7940
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7941
}// end loop over 't'
7942
}// end loop over 's'
7943
}// end loop over 'r'
7944
for (unsigned int r = 0; r < 3; r++)
7946
for (unsigned int s = 0; s < 3 - r; s++)
7948
for (unsigned int t = 0; t < 3 - r - s; t++)
7950
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7951
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
7952
}// end loop over 't'
7953
}// end loop over 's'
7954
}// end loop over 'r'
7956
// Table(s) of coefficients.
7957
static const double coefficients0[10] = \
7958
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
7960
// Tables of derivatives of the polynomial base (transpose).
7961
static const double dmats0[10][10] = \
7962
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7963
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7964
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7965
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7966
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7967
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7968
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7969
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7970
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7971
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7973
static const double dmats1[10][10] = \
7974
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7975
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7976
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7977
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7978
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7979
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7980
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7981
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7982
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7983
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7985
static const double dmats2[10][10] = \
7986
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7987
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7988
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7989
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7990
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7991
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7992
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7993
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7994
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
7995
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
7997
// Compute reference derivatives.
7998
// Declare pointer to array of derivatives on FIAT element.
7999
double *derivatives = new double[num_derivatives];
8000
for (unsigned int r = 0; r < num_derivatives; r++)
8002
derivatives[r] = 0.000000000000000;
8003
}// end loop over 'r'
8005
// Declare derivative matrix (of polynomial basis).
8006
double dmats[10][10] = \
8007
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8008
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8009
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8010
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8011
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8012
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8013
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8014
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8015
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8016
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8018
// Declare (auxiliary) derivative matrix (of polynomial basis).
8019
double dmats_old[10][10] = \
8020
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8021
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8022
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8023
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8024
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8025
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8026
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8027
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8028
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8029
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8031
// Loop possible derivatives.
8032
for (unsigned int r = 0; r < num_derivatives; r++)
8034
// Resetting dmats values to compute next derivative.
8035
for (unsigned int t = 0; t < 10; t++)
8037
for (unsigned int u = 0; u < 10; u++)
8039
dmats[t][u] = 0.000000000000000;
8042
dmats[t][u] = 1.000000000000000;
8045
}// end loop over 'u'
8046
}// end loop over 't'
8048
// Looping derivative order to generate dmats.
8049
for (unsigned int s = 0; s < n; s++)
8051
// Updating dmats_old with new values and resetting dmats.
8052
for (unsigned int t = 0; t < 10; t++)
8054
for (unsigned int u = 0; u < 10; u++)
8056
dmats_old[t][u] = dmats[t][u];
8057
dmats[t][u] = 0.000000000000000;
8058
}// end loop over 'u'
8059
}// end loop over 't'
8061
// Update dmats using an inner product.
8062
if (combinations[r][s] == 0)
8064
for (unsigned int t = 0; t < 10; t++)
8066
for (unsigned int u = 0; u < 10; u++)
8068
for (unsigned int tu = 0; tu < 10; tu++)
8070
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
8071
}// end loop over 'tu'
8072
}// end loop over 'u'
8073
}// end loop over 't'
8076
if (combinations[r][s] == 1)
8078
for (unsigned int t = 0; t < 10; t++)
8080
for (unsigned int u = 0; u < 10; u++)
8082
for (unsigned int tu = 0; tu < 10; tu++)
8084
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
8085
}// end loop over 'tu'
8086
}// end loop over 'u'
8087
}// end loop over 't'
8090
if (combinations[r][s] == 2)
8092
for (unsigned int t = 0; t < 10; t++)
8094
for (unsigned int u = 0; u < 10; u++)
8096
for (unsigned int tu = 0; tu < 10; tu++)
8098
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
8099
}// end loop over 'tu'
8100
}// end loop over 'u'
8101
}// end loop over 't'
8104
}// end loop over 's'
8105
for (unsigned int s = 0; s < 10; s++)
8107
for (unsigned int t = 0; t < 10; t++)
8109
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
8110
}// end loop over 't'
8111
}// end loop over 's'
8112
}// end loop over 'r'
8114
// Transform derivatives back to physical element
8115
for (unsigned int r = 0; r < num_derivatives; r++)
8117
for (unsigned int s = 0; s < num_derivatives; s++)
8119
values[r] += transform[r][s]*derivatives[s];
8120
}// end loop over 's'
8121
}// end loop over 'r'
8123
// Delete pointer to array of derivatives on FIAT element
8124
delete [] derivatives;
8126
// Delete pointer to array of combinations of derivatives and transform
8127
for (unsigned int r = 0; r < num_derivatives; r++)
8129
delete [] combinations[r];
8130
}// end loop over 'r'
8131
delete [] combinations;
8132
for (unsigned int r = 0; r < num_derivatives; r++)
8134
delete [] transform[r];
8135
}// end loop over 'r'
8136
delete [] transform;
8142
// Array of basisvalues.
8143
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
8145
// Declare helper variables.
8146
unsigned int rr = 0;
8147
unsigned int ss = 0;
8148
unsigned int tt = 0;
8149
double tmp5 = 0.000000000000000;
8150
double tmp6 = 0.000000000000000;
8151
double tmp7 = 0.000000000000000;
8152
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
8153
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
8154
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
8155
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
8156
double tmp4 = tmp3*tmp3;
8158
// Compute basisvalues.
8159
basisvalues[0] = 1.000000000000000;
8160
basisvalues[1] = tmp0;
8161
for (unsigned int r = 1; r < 2; r++)
8163
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
8164
ss = r*(r + 1)*(r + 2)/6;
8165
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
8166
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
8167
}// end loop over 'r'
8168
for (unsigned int r = 0; r < 2; r++)
8170
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
8171
ss = r*(r + 1)*(r + 2)/6;
8172
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
8173
}// end loop over 'r'
8174
for (unsigned int r = 0; r < 1; r++)
8176
for (unsigned int s = 1; s < 2 - r; s++)
8178
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
8179
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8180
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
8181
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8182
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8183
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8184
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
8185
}// end loop over 's'
8186
}// end loop over 'r'
8187
for (unsigned int r = 0; r < 2; r++)
8189
for (unsigned int s = 0; s < 2 - r; s++)
8191
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
8192
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8193
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
8194
}// end loop over 's'
8195
}// end loop over 'r'
8196
for (unsigned int r = 0; r < 1; r++)
8198
for (unsigned int s = 0; s < 1 - r; s++)
8200
for (unsigned int t = 1; t < 2 - r - s; t++)
8202
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
8203
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8204
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
8205
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8206
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8207
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8208
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
8209
}// end loop over 't'
8210
}// end loop over 's'
8211
}// end loop over 'r'
8212
for (unsigned int r = 0; r < 3; r++)
8214
for (unsigned int s = 0; s < 3 - r; s++)
8216
for (unsigned int t = 0; t < 3 - r - s; t++)
8218
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8219
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
8220
}// end loop over 't'
8221
}// end loop over 's'
8222
}// end loop over 'r'
8224
// Table(s) of coefficients.
8225
static const double coefficients0[10] = \
8226
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
8228
// Tables of derivatives of the polynomial base (transpose).
8229
static const double dmats0[10][10] = \
8230
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8231
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8232
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8233
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8234
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8235
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8236
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8237
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8238
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8239
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8241
static const double dmats1[10][10] = \
8242
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8243
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8244
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8245
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8246
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8247
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8248
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8249
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8250
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8251
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8253
static const double dmats2[10][10] = \
8254
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8255
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8256
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8257
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8258
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8259
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8260
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8261
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8262
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8263
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8265
// Compute reference derivatives.
8266
// Declare pointer to array of derivatives on FIAT element.
8267
double *derivatives = new double[num_derivatives];
8268
for (unsigned int r = 0; r < num_derivatives; r++)
8270
derivatives[r] = 0.000000000000000;
8271
}// end loop over 'r'
8273
// Declare derivative matrix (of polynomial basis).
8274
double dmats[10][10] = \
8275
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8276
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8277
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8278
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8279
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8280
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8281
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8282
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8283
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8284
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8286
// Declare (auxiliary) derivative matrix (of polynomial basis).
8287
double dmats_old[10][10] = \
8288
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8289
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8290
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8291
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8292
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8293
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8294
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8295
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8296
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8297
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8299
// Loop possible derivatives.
8300
for (unsigned int r = 0; r < num_derivatives; r++)
8302
// Resetting dmats values to compute next derivative.
8303
for (unsigned int t = 0; t < 10; t++)
8305
for (unsigned int u = 0; u < 10; u++)
8307
dmats[t][u] = 0.000000000000000;
8310
dmats[t][u] = 1.000000000000000;
8313
}// end loop over 'u'
8314
}// end loop over 't'
8316
// Looping derivative order to generate dmats.
8317
for (unsigned int s = 0; s < n; s++)
8319
// Updating dmats_old with new values and resetting dmats.
8320
for (unsigned int t = 0; t < 10; t++)
8322
for (unsigned int u = 0; u < 10; u++)
8324
dmats_old[t][u] = dmats[t][u];
8325
dmats[t][u] = 0.000000000000000;
8326
}// end loop over 'u'
8327
}// end loop over 't'
8329
// Update dmats using an inner product.
8330
if (combinations[r][s] == 0)
8332
for (unsigned int t = 0; t < 10; t++)
8334
for (unsigned int u = 0; u < 10; u++)
8336
for (unsigned int tu = 0; tu < 10; tu++)
8338
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
8339
}// end loop over 'tu'
8340
}// end loop over 'u'
8341
}// end loop over 't'
8344
if (combinations[r][s] == 1)
8346
for (unsigned int t = 0; t < 10; t++)
8348
for (unsigned int u = 0; u < 10; u++)
8350
for (unsigned int tu = 0; tu < 10; tu++)
8352
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
8353
}// end loop over 'tu'
8354
}// end loop over 'u'
8355
}// end loop over 't'
8358
if (combinations[r][s] == 2)
8360
for (unsigned int t = 0; t < 10; t++)
8362
for (unsigned int u = 0; u < 10; u++)
8364
for (unsigned int tu = 0; tu < 10; tu++)
8366
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
8367
}// end loop over 'tu'
8368
}// end loop over 'u'
8369
}// end loop over 't'
8372
}// end loop over 's'
8373
for (unsigned int s = 0; s < 10; s++)
8375
for (unsigned int t = 0; t < 10; t++)
8377
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
8378
}// end loop over 't'
8379
}// end loop over 's'
8380
}// end loop over 'r'
8382
// Transform derivatives back to physical element
8383
for (unsigned int r = 0; r < num_derivatives; r++)
8385
for (unsigned int s = 0; s < num_derivatives; s++)
8387
values[r] += transform[r][s]*derivatives[s];
8388
}// end loop over 's'
8389
}// end loop over 'r'
8391
// Delete pointer to array of derivatives on FIAT element
8392
delete [] derivatives;
8394
// Delete pointer to array of combinations of derivatives and transform
8395
for (unsigned int r = 0; r < num_derivatives; r++)
8397
delete [] combinations[r];
8398
}// end loop over 'r'
8399
delete [] combinations;
8400
for (unsigned int r = 0; r < num_derivatives; r++)
8402
delete [] transform[r];
8403
}// end loop over 'r'
8404
delete [] transform;
8410
// Array of basisvalues.
8411
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
8413
// Declare helper variables.
8414
unsigned int rr = 0;
8415
unsigned int ss = 0;
8416
unsigned int tt = 0;
8417
double tmp5 = 0.000000000000000;
8418
double tmp6 = 0.000000000000000;
8419
double tmp7 = 0.000000000000000;
8420
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
8421
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
8422
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
8423
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
8424
double tmp4 = tmp3*tmp3;
8426
// Compute basisvalues.
8427
basisvalues[0] = 1.000000000000000;
8428
basisvalues[1] = tmp0;
8429
for (unsigned int r = 1; r < 2; r++)
8431
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
8432
ss = r*(r + 1)*(r + 2)/6;
8433
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
8434
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
8435
}// end loop over 'r'
8436
for (unsigned int r = 0; r < 2; r++)
8438
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
8439
ss = r*(r + 1)*(r + 2)/6;
8440
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
8441
}// end loop over 'r'
8442
for (unsigned int r = 0; r < 1; r++)
8444
for (unsigned int s = 1; s < 2 - r; s++)
8446
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
8447
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8448
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
8449
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8450
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8451
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8452
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
8453
}// end loop over 's'
8454
}// end loop over 'r'
8455
for (unsigned int r = 0; r < 2; r++)
8457
for (unsigned int s = 0; s < 2 - r; s++)
8459
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
8460
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8461
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
8462
}// end loop over 's'
8463
}// end loop over 'r'
8464
for (unsigned int r = 0; r < 1; r++)
8466
for (unsigned int s = 0; s < 1 - r; s++)
8468
for (unsigned int t = 1; t < 2 - r - s; t++)
8470
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
8471
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8472
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
8473
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8474
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8475
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8476
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
8477
}// end loop over 't'
8478
}// end loop over 's'
8479
}// end loop over 'r'
8480
for (unsigned int r = 0; r < 3; r++)
8482
for (unsigned int s = 0; s < 3 - r; s++)
8484
for (unsigned int t = 0; t < 3 - r - s; t++)
8486
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8487
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
8488
}// end loop over 't'
8489
}// end loop over 's'
8490
}// end loop over 'r'
8492
// Table(s) of coefficients.
8493
static const double coefficients0[10] = \
8494
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
8496
// Tables of derivatives of the polynomial base (transpose).
8497
static const double dmats0[10][10] = \
8498
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8499
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8500
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8501
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8502
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8503
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8504
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8505
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8506
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8507
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8509
static const double dmats1[10][10] = \
8510
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8511
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8512
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8513
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8514
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8515
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8516
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8517
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8518
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8519
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8521
static const double dmats2[10][10] = \
8522
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8523
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8524
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8525
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8526
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8527
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8528
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8529
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8530
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8531
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8533
// Compute reference derivatives.
8534
// Declare pointer to array of derivatives on FIAT element.
8535
double *derivatives = new double[num_derivatives];
8536
for (unsigned int r = 0; r < num_derivatives; r++)
8538
derivatives[r] = 0.000000000000000;
8539
}// end loop over 'r'
8541
// Declare derivative matrix (of polynomial basis).
8542
double dmats[10][10] = \
8543
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8544
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8545
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8546
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8547
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8548
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8549
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8550
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8551
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8552
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8554
// Declare (auxiliary) derivative matrix (of polynomial basis).
8555
double dmats_old[10][10] = \
8556
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8557
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8558
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8559
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8560
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8561
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8562
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8563
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8564
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8565
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8567
// Loop possible derivatives.
8568
for (unsigned int r = 0; r < num_derivatives; r++)
8570
// Resetting dmats values to compute next derivative.
8571
for (unsigned int t = 0; t < 10; t++)
8573
for (unsigned int u = 0; u < 10; u++)
8575
dmats[t][u] = 0.000000000000000;
8578
dmats[t][u] = 1.000000000000000;
8581
}// end loop over 'u'
8582
}// end loop over 't'
8584
// Looping derivative order to generate dmats.
8585
for (unsigned int s = 0; s < n; s++)
8587
// Updating dmats_old with new values and resetting dmats.
8588
for (unsigned int t = 0; t < 10; t++)
8590
for (unsigned int u = 0; u < 10; u++)
8592
dmats_old[t][u] = dmats[t][u];
8593
dmats[t][u] = 0.000000000000000;
8594
}// end loop over 'u'
8595
}// end loop over 't'
8597
// Update dmats using an inner product.
8598
if (combinations[r][s] == 0)
8600
for (unsigned int t = 0; t < 10; t++)
8602
for (unsigned int u = 0; u < 10; u++)
8604
for (unsigned int tu = 0; tu < 10; tu++)
8606
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
8607
}// end loop over 'tu'
8608
}// end loop over 'u'
8609
}// end loop over 't'
8612
if (combinations[r][s] == 1)
8614
for (unsigned int t = 0; t < 10; t++)
8616
for (unsigned int u = 0; u < 10; u++)
8618
for (unsigned int tu = 0; tu < 10; tu++)
8620
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
8621
}// end loop over 'tu'
8622
}// end loop over 'u'
8623
}// end loop over 't'
8626
if (combinations[r][s] == 2)
8628
for (unsigned int t = 0; t < 10; t++)
8630
for (unsigned int u = 0; u < 10; u++)
8632
for (unsigned int tu = 0; tu < 10; tu++)
8634
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
8635
}// end loop over 'tu'
8636
}// end loop over 'u'
8637
}// end loop over 't'
8640
}// end loop over 's'
8641
for (unsigned int s = 0; s < 10; s++)
8643
for (unsigned int t = 0; t < 10; t++)
8645
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
8646
}// end loop over 't'
8647
}// end loop over 's'
8648
}// end loop over 'r'
8650
// Transform derivatives back to physical element
8651
for (unsigned int r = 0; r < num_derivatives; r++)
8653
for (unsigned int s = 0; s < num_derivatives; s++)
8655
values[r] += transform[r][s]*derivatives[s];
8656
}// end loop over 's'
8657
}// end loop over 'r'
8659
// Delete pointer to array of derivatives on FIAT element
8660
delete [] derivatives;
8662
// Delete pointer to array of combinations of derivatives and transform
8663
for (unsigned int r = 0; r < num_derivatives; r++)
8665
delete [] combinations[r];
8666
}// end loop over 'r'
8667
delete [] combinations;
8668
for (unsigned int r = 0; r < num_derivatives; r++)
8670
delete [] transform[r];
8671
}// end loop over 'r'
8672
delete [] transform;
8678
// Array of basisvalues.
8679
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
8681
// Declare helper variables.
8682
unsigned int rr = 0;
8683
unsigned int ss = 0;
8684
unsigned int tt = 0;
8685
double tmp5 = 0.000000000000000;
8686
double tmp6 = 0.000000000000000;
8687
double tmp7 = 0.000000000000000;
8688
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
8689
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
8690
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
8691
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
8692
double tmp4 = tmp3*tmp3;
8694
// Compute basisvalues.
8695
basisvalues[0] = 1.000000000000000;
8696
basisvalues[1] = tmp0;
8697
for (unsigned int r = 1; r < 2; r++)
8699
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
8700
ss = r*(r + 1)*(r + 2)/6;
8701
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
8702
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
8703
}// end loop over 'r'
8704
for (unsigned int r = 0; r < 2; r++)
8706
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
8707
ss = r*(r + 1)*(r + 2)/6;
8708
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
8709
}// end loop over 'r'
8710
for (unsigned int r = 0; r < 1; r++)
8712
for (unsigned int s = 1; s < 2 - r; s++)
8714
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
8715
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8716
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
8717
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8718
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8719
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8720
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
8721
}// end loop over 's'
8722
}// end loop over 'r'
8723
for (unsigned int r = 0; r < 2; r++)
8725
for (unsigned int s = 0; s < 2 - r; s++)
8727
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
8728
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8729
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
8730
}// end loop over 's'
8731
}// end loop over 'r'
8732
for (unsigned int r = 0; r < 1; r++)
8734
for (unsigned int s = 0; s < 1 - r; s++)
8736
for (unsigned int t = 1; t < 2 - r - s; t++)
8738
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
8739
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8740
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
8741
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8742
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8743
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
8744
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
8745
}// end loop over 't'
8746
}// end loop over 's'
8747
}// end loop over 'r'
8748
for (unsigned int r = 0; r < 3; r++)
8750
for (unsigned int s = 0; s < 3 - r; s++)
8752
for (unsigned int t = 0; t < 3 - r - s; t++)
8754
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8755
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
8756
}// end loop over 't'
8757
}// end loop over 's'
8758
}// end loop over 'r'
8760
// Table(s) of coefficients.
8761
static const double coefficients0[10] = \
8762
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
8764
// Tables of derivatives of the polynomial base (transpose).
8765
static const double dmats0[10][10] = \
8766
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8767
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8768
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8769
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8770
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8771
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8772
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8773
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8774
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8775
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8777
static const double dmats1[10][10] = \
8778
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8779
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8780
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8781
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8782
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8783
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8784
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8785
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8786
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8787
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8789
static const double dmats2[10][10] = \
8790
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8791
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8792
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8793
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8794
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8795
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8796
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8797
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8798
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8799
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
8801
// Compute reference derivatives.
8802
// Declare pointer to array of derivatives on FIAT element.
8803
double *derivatives = new double[num_derivatives];
8804
for (unsigned int r = 0; r < num_derivatives; r++)
8806
derivatives[r] = 0.000000000000000;
8807
}// end loop over 'r'
8809
// Declare derivative matrix (of polynomial basis).
8810
double dmats[10][10] = \
8811
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8812
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8813
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8814
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8815
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8816
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8817
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8818
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8819
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8820
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8822
// Declare (auxiliary) derivative matrix (of polynomial basis).
8823
double dmats_old[10][10] = \
8824
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8825
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8826
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8827
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8828
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8829
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8830
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
8831
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
8832
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
8833
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
8835
// Loop possible derivatives.
8836
for (unsigned int r = 0; r < num_derivatives; r++)
8838
// Resetting dmats values to compute next derivative.
8839
for (unsigned int t = 0; t < 10; t++)
8841
for (unsigned int u = 0; u < 10; u++)
8843
dmats[t][u] = 0.000000000000000;
8846
dmats[t][u] = 1.000000000000000;
8849
}// end loop over 'u'
8850
}// end loop over 't'
8852
// Looping derivative order to generate dmats.
8853
for (unsigned int s = 0; s < n; s++)
8855
// Updating dmats_old with new values and resetting dmats.
8856
for (unsigned int t = 0; t < 10; t++)
8858
for (unsigned int u = 0; u < 10; u++)
8860
dmats_old[t][u] = dmats[t][u];
8861
dmats[t][u] = 0.000000000000000;
8862
}// end loop over 'u'
8863
}// end loop over 't'
8865
// Update dmats using an inner product.
8866
if (combinations[r][s] == 0)
8868
for (unsigned int t = 0; t < 10; t++)
8870
for (unsigned int u = 0; u < 10; u++)
8872
for (unsigned int tu = 0; tu < 10; tu++)
8874
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
8875
}// end loop over 'tu'
8876
}// end loop over 'u'
8877
}// end loop over 't'
8880
if (combinations[r][s] == 1)
8882
for (unsigned int t = 0; t < 10; t++)
8884
for (unsigned int u = 0; u < 10; u++)
8886
for (unsigned int tu = 0; tu < 10; tu++)
8888
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
8889
}// end loop over 'tu'
8890
}// end loop over 'u'
8891
}// end loop over 't'
8894
if (combinations[r][s] == 2)
8896
for (unsigned int t = 0; t < 10; t++)
8898
for (unsigned int u = 0; u < 10; u++)
8900
for (unsigned int tu = 0; tu < 10; tu++)
8902
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
8903
}// end loop over 'tu'
8904
}// end loop over 'u'
8905
}// end loop over 't'
8908
}// end loop over 's'
8909
for (unsigned int s = 0; s < 10; s++)
8911
for (unsigned int t = 0; t < 10; t++)
8913
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
8914
}// end loop over 't'
8915
}// end loop over 's'
8916
}// end loop over 'r'
8918
// Transform derivatives back to physical element
8919
for (unsigned int r = 0; r < num_derivatives; r++)
8921
for (unsigned int s = 0; s < num_derivatives; s++)
8923
values[r] += transform[r][s]*derivatives[s];
8924
}// end loop over 's'
8925
}// end loop over 'r'
8927
// Delete pointer to array of derivatives on FIAT element
8928
delete [] derivatives;
8930
// Delete pointer to array of combinations of derivatives and transform
8931
for (unsigned int r = 0; r < num_derivatives; r++)
8933
delete [] combinations[r];
8934
}// end loop over 'r'
8935
delete [] combinations;
8936
for (unsigned int r = 0; r < num_derivatives; r++)
8938
delete [] transform[r];
8939
}// end loop over 'r'
8940
delete [] transform;
8946
// Array of basisvalues.
8947
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
8949
// Declare helper variables.
8950
unsigned int rr = 0;
8951
unsigned int ss = 0;
8952
unsigned int tt = 0;
8953
double tmp5 = 0.000000000000000;
8954
double tmp6 = 0.000000000000000;
8955
double tmp7 = 0.000000000000000;
8956
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
8957
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
8958
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
8959
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
8960
double tmp4 = tmp3*tmp3;
8962
// Compute basisvalues.
8963
basisvalues[0] = 1.000000000000000;
8964
basisvalues[1] = tmp0;
8965
for (unsigned int r = 1; r < 2; r++)
8967
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
8968
ss = r*(r + 1)*(r + 2)/6;
8969
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
8970
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
8971
}// end loop over 'r'
8972
for (unsigned int r = 0; r < 2; r++)
8974
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
8975
ss = r*(r + 1)*(r + 2)/6;
8976
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
8977
}// end loop over 'r'
8978
for (unsigned int r = 0; r < 1; r++)
8980
for (unsigned int s = 1; s < 2 - r; s++)
8982
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
8983
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8984
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
8985
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8986
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8987
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
8988
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
8989
}// end loop over 's'
8990
}// end loop over 'r'
8991
for (unsigned int r = 0; r < 2; r++)
8993
for (unsigned int s = 0; s < 2 - r; s++)
8995
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
8996
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8997
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
8998
}// end loop over 's'
8999
}// end loop over 'r'
9000
for (unsigned int r = 0; r < 1; r++)
9002
for (unsigned int s = 0; s < 1 - r; s++)
9004
for (unsigned int t = 1; t < 2 - r - s; t++)
9006
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
9007
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9008
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
9009
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9010
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9011
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9012
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
9013
}// end loop over 't'
9014
}// end loop over 's'
9015
}// end loop over 'r'
9016
for (unsigned int r = 0; r < 3; r++)
9018
for (unsigned int s = 0; s < 3 - r; s++)
9020
for (unsigned int t = 0; t < 3 - r - s; t++)
9022
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9023
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
9024
}// end loop over 't'
9025
}// end loop over 's'
9026
}// end loop over 'r'
9028
// Table(s) of coefficients.
9029
static const double coefficients0[10] = \
9030
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
9032
// Tables of derivatives of the polynomial base (transpose).
9033
static const double dmats0[10][10] = \
9034
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9035
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9036
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9037
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9038
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9039
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9040
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9041
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9042
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9043
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9045
static const double dmats1[10][10] = \
9046
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9047
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9048
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9049
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9050
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9051
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9052
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9053
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9054
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9055
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9057
static const double dmats2[10][10] = \
9058
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9059
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9060
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9061
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9062
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9063
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9064
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9065
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9066
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9067
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9069
// Compute reference derivatives.
9070
// Declare pointer to array of derivatives on FIAT element.
9071
double *derivatives = new double[num_derivatives];
9072
for (unsigned int r = 0; r < num_derivatives; r++)
9074
derivatives[r] = 0.000000000000000;
9075
}// end loop over 'r'
9077
// Declare derivative matrix (of polynomial basis).
9078
double dmats[10][10] = \
9079
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9080
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9081
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9082
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9083
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9084
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9085
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9086
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9087
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9088
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9090
// Declare (auxiliary) derivative matrix (of polynomial basis).
9091
double dmats_old[10][10] = \
9092
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9093
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9094
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9095
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9096
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9097
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9098
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9099
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9100
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9101
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9103
// Loop possible derivatives.
9104
for (unsigned int r = 0; r < num_derivatives; r++)
9106
// Resetting dmats values to compute next derivative.
9107
for (unsigned int t = 0; t < 10; t++)
9109
for (unsigned int u = 0; u < 10; u++)
9111
dmats[t][u] = 0.000000000000000;
9114
dmats[t][u] = 1.000000000000000;
9117
}// end loop over 'u'
9118
}// end loop over 't'
9120
// Looping derivative order to generate dmats.
9121
for (unsigned int s = 0; s < n; s++)
9123
// Updating dmats_old with new values and resetting dmats.
9124
for (unsigned int t = 0; t < 10; t++)
9126
for (unsigned int u = 0; u < 10; u++)
9128
dmats_old[t][u] = dmats[t][u];
9129
dmats[t][u] = 0.000000000000000;
9130
}// end loop over 'u'
9131
}// end loop over 't'
9133
// Update dmats using an inner product.
9134
if (combinations[r][s] == 0)
9136
for (unsigned int t = 0; t < 10; t++)
9138
for (unsigned int u = 0; u < 10; u++)
9140
for (unsigned int tu = 0; tu < 10; tu++)
9142
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
9143
}// end loop over 'tu'
9144
}// end loop over 'u'
9145
}// end loop over 't'
9148
if (combinations[r][s] == 1)
9150
for (unsigned int t = 0; t < 10; t++)
9152
for (unsigned int u = 0; u < 10; u++)
9154
for (unsigned int tu = 0; tu < 10; tu++)
9156
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
9157
}// end loop over 'tu'
9158
}// end loop over 'u'
9159
}// end loop over 't'
9162
if (combinations[r][s] == 2)
9164
for (unsigned int t = 0; t < 10; t++)
9166
for (unsigned int u = 0; u < 10; u++)
9168
for (unsigned int tu = 0; tu < 10; tu++)
9170
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
9171
}// end loop over 'tu'
9172
}// end loop over 'u'
9173
}// end loop over 't'
9176
}// end loop over 's'
9177
for (unsigned int s = 0; s < 10; s++)
9179
for (unsigned int t = 0; t < 10; t++)
9181
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
9182
}// end loop over 't'
9183
}// end loop over 's'
9184
}// end loop over 'r'
9186
// Transform derivatives back to physical element
9187
for (unsigned int r = 0; r < num_derivatives; r++)
9189
for (unsigned int s = 0; s < num_derivatives; s++)
9191
values[r] += transform[r][s]*derivatives[s];
9192
}// end loop over 's'
9193
}// end loop over 'r'
9195
// Delete pointer to array of derivatives on FIAT element
9196
delete [] derivatives;
9198
// Delete pointer to array of combinations of derivatives and transform
9199
for (unsigned int r = 0; r < num_derivatives; r++)
9201
delete [] combinations[r];
9202
}// end loop over 'r'
9203
delete [] combinations;
9204
for (unsigned int r = 0; r < num_derivatives; r++)
9206
delete [] transform[r];
9207
}// end loop over 'r'
9208
delete [] transform;
9214
// Array of basisvalues.
9215
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
9217
// Declare helper variables.
9218
unsigned int rr = 0;
9219
unsigned int ss = 0;
9220
unsigned int tt = 0;
9221
double tmp5 = 0.000000000000000;
9222
double tmp6 = 0.000000000000000;
9223
double tmp7 = 0.000000000000000;
9224
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
9225
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
9226
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
9227
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
9228
double tmp4 = tmp3*tmp3;
9230
// Compute basisvalues.
9231
basisvalues[0] = 1.000000000000000;
9232
basisvalues[1] = tmp0;
9233
for (unsigned int r = 1; r < 2; r++)
9235
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
9236
ss = r*(r + 1)*(r + 2)/6;
9237
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
9238
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
9239
}// end loop over 'r'
9240
for (unsigned int r = 0; r < 2; r++)
9242
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
9243
ss = r*(r + 1)*(r + 2)/6;
9244
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
9245
}// end loop over 'r'
9246
for (unsigned int r = 0; r < 1; r++)
9248
for (unsigned int s = 1; s < 2 - r; s++)
9250
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
9251
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
9252
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
9253
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9254
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9255
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9256
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
9257
}// end loop over 's'
9258
}// end loop over 'r'
9259
for (unsigned int r = 0; r < 2; r++)
9261
for (unsigned int s = 0; s < 2 - r; s++)
9263
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
9264
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
9265
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
9266
}// end loop over 's'
9267
}// end loop over 'r'
9268
for (unsigned int r = 0; r < 1; r++)
9270
for (unsigned int s = 0; s < 1 - r; s++)
9272
for (unsigned int t = 1; t < 2 - r - s; t++)
9274
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
9275
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9276
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
9277
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9278
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9279
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9280
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
9281
}// end loop over 't'
9282
}// end loop over 's'
9283
}// end loop over 'r'
9284
for (unsigned int r = 0; r < 3; r++)
9286
for (unsigned int s = 0; s < 3 - r; s++)
9288
for (unsigned int t = 0; t < 3 - r - s; t++)
9290
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9291
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
9292
}// end loop over 't'
9293
}// end loop over 's'
9294
}// end loop over 'r'
9296
// Table(s) of coefficients.
9297
static const double coefficients0[10] = \
9298
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
9300
// Tables of derivatives of the polynomial base (transpose).
9301
static const double dmats0[10][10] = \
9302
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9303
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9304
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9305
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9306
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9307
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9308
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9309
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9310
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9311
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9313
static const double dmats1[10][10] = \
9314
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9315
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9316
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9317
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9318
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9319
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9320
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9321
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9322
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9323
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9325
static const double dmats2[10][10] = \
9326
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9327
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9328
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9329
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9330
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9331
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9332
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9333
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9334
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9335
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9337
// Compute reference derivatives.
9338
// Declare pointer to array of derivatives on FIAT element.
9339
double *derivatives = new double[num_derivatives];
9340
for (unsigned int r = 0; r < num_derivatives; r++)
9342
derivatives[r] = 0.000000000000000;
9343
}// end loop over 'r'
9345
// Declare derivative matrix (of polynomial basis).
9346
double dmats[10][10] = \
9347
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9348
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9349
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9350
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9351
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9352
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9353
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9354
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9355
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9356
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9358
// Declare (auxiliary) derivative matrix (of polynomial basis).
9359
double dmats_old[10][10] = \
9360
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9361
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9362
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9363
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9364
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9365
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9366
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9367
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9368
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9369
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9371
// Loop possible derivatives.
9372
for (unsigned int r = 0; r < num_derivatives; r++)
9374
// Resetting dmats values to compute next derivative.
9375
for (unsigned int t = 0; t < 10; t++)
9377
for (unsigned int u = 0; u < 10; u++)
9379
dmats[t][u] = 0.000000000000000;
9382
dmats[t][u] = 1.000000000000000;
9385
}// end loop over 'u'
9386
}// end loop over 't'
9388
// Looping derivative order to generate dmats.
9389
for (unsigned int s = 0; s < n; s++)
9391
// Updating dmats_old with new values and resetting dmats.
9392
for (unsigned int t = 0; t < 10; t++)
9394
for (unsigned int u = 0; u < 10; u++)
9396
dmats_old[t][u] = dmats[t][u];
9397
dmats[t][u] = 0.000000000000000;
9398
}// end loop over 'u'
9399
}// end loop over 't'
9401
// Update dmats using an inner product.
9402
if (combinations[r][s] == 0)
9404
for (unsigned int t = 0; t < 10; t++)
9406
for (unsigned int u = 0; u < 10; u++)
9408
for (unsigned int tu = 0; tu < 10; tu++)
9410
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
9411
}// end loop over 'tu'
9412
}// end loop over 'u'
9413
}// end loop over 't'
9416
if (combinations[r][s] == 1)
9418
for (unsigned int t = 0; t < 10; t++)
9420
for (unsigned int u = 0; u < 10; u++)
9422
for (unsigned int tu = 0; tu < 10; tu++)
9424
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
9425
}// end loop over 'tu'
9426
}// end loop over 'u'
9427
}// end loop over 't'
9430
if (combinations[r][s] == 2)
9432
for (unsigned int t = 0; t < 10; t++)
9434
for (unsigned int u = 0; u < 10; u++)
9436
for (unsigned int tu = 0; tu < 10; tu++)
9438
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
9439
}// end loop over 'tu'
9440
}// end loop over 'u'
9441
}// end loop over 't'
9444
}// end loop over 's'
9445
for (unsigned int s = 0; s < 10; s++)
9447
for (unsigned int t = 0; t < 10; t++)
9449
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
9450
}// end loop over 't'
9451
}// end loop over 's'
9452
}// end loop over 'r'
9454
// Transform derivatives back to physical element
9455
for (unsigned int r = 0; r < num_derivatives; r++)
9457
for (unsigned int s = 0; s < num_derivatives; s++)
9459
values[r] += transform[r][s]*derivatives[s];
9460
}// end loop over 's'
9461
}// end loop over 'r'
9463
// Delete pointer to array of derivatives on FIAT element
9464
delete [] derivatives;
9466
// Delete pointer to array of combinations of derivatives and transform
9467
for (unsigned int r = 0; r < num_derivatives; r++)
9469
delete [] combinations[r];
9470
}// end loop over 'r'
9471
delete [] combinations;
9472
for (unsigned int r = 0; r < num_derivatives; r++)
9474
delete [] transform[r];
9475
}// end loop over 'r'
9476
delete [] transform;
9482
// Array of basisvalues.
9483
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
9485
// Declare helper variables.
9486
unsigned int rr = 0;
9487
unsigned int ss = 0;
9488
unsigned int tt = 0;
9489
double tmp5 = 0.000000000000000;
9490
double tmp6 = 0.000000000000000;
9491
double tmp7 = 0.000000000000000;
9492
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
9493
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
9494
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
9495
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
9496
double tmp4 = tmp3*tmp3;
9498
// Compute basisvalues.
9499
basisvalues[0] = 1.000000000000000;
9500
basisvalues[1] = tmp0;
9501
for (unsigned int r = 1; r < 2; r++)
9503
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
9504
ss = r*(r + 1)*(r + 2)/6;
9505
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
9506
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
9507
}// end loop over 'r'
9508
for (unsigned int r = 0; r < 2; r++)
9510
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
9511
ss = r*(r + 1)*(r + 2)/6;
9512
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
9513
}// end loop over 'r'
9514
for (unsigned int r = 0; r < 1; r++)
9516
for (unsigned int s = 1; s < 2 - r; s++)
9518
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
9519
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
9520
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
9521
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9522
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9523
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9524
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
9525
}// end loop over 's'
9526
}// end loop over 'r'
9527
for (unsigned int r = 0; r < 2; r++)
9529
for (unsigned int s = 0; s < 2 - r; s++)
9531
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
9532
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
9533
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
9534
}// end loop over 's'
9535
}// end loop over 'r'
9536
for (unsigned int r = 0; r < 1; r++)
9538
for (unsigned int s = 0; s < 1 - r; s++)
9540
for (unsigned int t = 1; t < 2 - r - s; t++)
9542
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
9543
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9544
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
9545
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9546
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9547
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9548
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
9549
}// end loop over 't'
9550
}// end loop over 's'
9551
}// end loop over 'r'
9552
for (unsigned int r = 0; r < 3; r++)
9554
for (unsigned int s = 0; s < 3 - r; s++)
9556
for (unsigned int t = 0; t < 3 - r - s; t++)
9558
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9559
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
9560
}// end loop over 't'
9561
}// end loop over 's'
9562
}// end loop over 'r'
9564
// Table(s) of coefficients.
9565
static const double coefficients0[10] = \
9566
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
9568
// Tables of derivatives of the polynomial base (transpose).
9569
static const double dmats0[10][10] = \
9570
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9571
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9572
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9573
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9574
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9575
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9576
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9577
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9578
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9579
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9581
static const double dmats1[10][10] = \
9582
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9583
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9584
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9585
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9586
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9587
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9588
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9589
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9590
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9591
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9593
static const double dmats2[10][10] = \
9594
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9595
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9596
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9597
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9598
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9599
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9600
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9601
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9602
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9603
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9605
// Compute reference derivatives.
9606
// Declare pointer to array of derivatives on FIAT element.
9607
double *derivatives = new double[num_derivatives];
9608
for (unsigned int r = 0; r < num_derivatives; r++)
9610
derivatives[r] = 0.000000000000000;
9611
}// end loop over 'r'
9613
// Declare derivative matrix (of polynomial basis).
9614
double dmats[10][10] = \
9615
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9616
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9617
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9618
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9619
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9620
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9621
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9622
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9623
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9624
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9626
// Declare (auxiliary) derivative matrix (of polynomial basis).
9627
double dmats_old[10][10] = \
9628
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9629
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9630
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9631
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9632
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9633
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9634
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9635
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9636
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9637
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9639
// Loop possible derivatives.
9640
for (unsigned int r = 0; r < num_derivatives; r++)
9642
// Resetting dmats values to compute next derivative.
9643
for (unsigned int t = 0; t < 10; t++)
9645
for (unsigned int u = 0; u < 10; u++)
9647
dmats[t][u] = 0.000000000000000;
9650
dmats[t][u] = 1.000000000000000;
9653
}// end loop over 'u'
9654
}// end loop over 't'
9656
// Looping derivative order to generate dmats.
9657
for (unsigned int s = 0; s < n; s++)
9659
// Updating dmats_old with new values and resetting dmats.
9660
for (unsigned int t = 0; t < 10; t++)
9662
for (unsigned int u = 0; u < 10; u++)
9664
dmats_old[t][u] = dmats[t][u];
9665
dmats[t][u] = 0.000000000000000;
9666
}// end loop over 'u'
9667
}// end loop over 't'
9669
// Update dmats using an inner product.
9670
if (combinations[r][s] == 0)
9672
for (unsigned int t = 0; t < 10; t++)
9674
for (unsigned int u = 0; u < 10; u++)
9676
for (unsigned int tu = 0; tu < 10; tu++)
9678
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
9679
}// end loop over 'tu'
9680
}// end loop over 'u'
9681
}// end loop over 't'
9684
if (combinations[r][s] == 1)
9686
for (unsigned int t = 0; t < 10; t++)
9688
for (unsigned int u = 0; u < 10; u++)
9690
for (unsigned int tu = 0; tu < 10; tu++)
9692
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
9693
}// end loop over 'tu'
9694
}// end loop over 'u'
9695
}// end loop over 't'
9698
if (combinations[r][s] == 2)
9700
for (unsigned int t = 0; t < 10; t++)
9702
for (unsigned int u = 0; u < 10; u++)
9704
for (unsigned int tu = 0; tu < 10; tu++)
9706
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
9707
}// end loop over 'tu'
9708
}// end loop over 'u'
9709
}// end loop over 't'
9712
}// end loop over 's'
9713
for (unsigned int s = 0; s < 10; s++)
9715
for (unsigned int t = 0; t < 10; t++)
9717
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
9718
}// end loop over 't'
9719
}// end loop over 's'
9720
}// end loop over 'r'
9722
// Transform derivatives back to physical element
9723
for (unsigned int r = 0; r < num_derivatives; r++)
9725
for (unsigned int s = 0; s < num_derivatives; s++)
9727
values[r] += transform[r][s]*derivatives[s];
9728
}// end loop over 's'
9729
}// end loop over 'r'
9731
// Delete pointer to array of derivatives on FIAT element
9732
delete [] derivatives;
9734
// Delete pointer to array of combinations of derivatives and transform
9735
for (unsigned int r = 0; r < num_derivatives; r++)
9737
delete [] combinations[r];
9738
}// end loop over 'r'
9739
delete [] combinations;
9740
for (unsigned int r = 0; r < num_derivatives; r++)
9742
delete [] transform[r];
9743
}// end loop over 'r'
9744
delete [] transform;
9750
// Array of basisvalues.
9751
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
9753
// Declare helper variables.
9754
unsigned int rr = 0;
9755
unsigned int ss = 0;
9756
unsigned int tt = 0;
9757
double tmp5 = 0.000000000000000;
9758
double tmp6 = 0.000000000000000;
9759
double tmp7 = 0.000000000000000;
9760
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
9761
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
9762
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
9763
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
9764
double tmp4 = tmp3*tmp3;
9766
// Compute basisvalues.
9767
basisvalues[0] = 1.000000000000000;
9768
basisvalues[1] = tmp0;
9769
for (unsigned int r = 1; r < 2; r++)
9771
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
9772
ss = r*(r + 1)*(r + 2)/6;
9773
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
9774
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
9775
}// end loop over 'r'
9776
for (unsigned int r = 0; r < 2; r++)
9778
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
9779
ss = r*(r + 1)*(r + 2)/6;
9780
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
9781
}// end loop over 'r'
9782
for (unsigned int r = 0; r < 1; r++)
9784
for (unsigned int s = 1; s < 2 - r; s++)
9786
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
9787
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
9788
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
9789
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9790
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9791
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
9792
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
9793
}// end loop over 's'
9794
}// end loop over 'r'
9795
for (unsigned int r = 0; r < 2; r++)
9797
for (unsigned int s = 0; s < 2 - r; s++)
9799
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
9800
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
9801
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
9802
}// end loop over 's'
9803
}// end loop over 'r'
9804
for (unsigned int r = 0; r < 1; r++)
9806
for (unsigned int s = 0; s < 1 - r; s++)
9808
for (unsigned int t = 1; t < 2 - r - s; t++)
9810
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
9811
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9812
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
9813
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9814
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9815
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
9816
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
9817
}// end loop over 't'
9818
}// end loop over 's'
9819
}// end loop over 'r'
9820
for (unsigned int r = 0; r < 3; r++)
9822
for (unsigned int s = 0; s < 3 - r; s++)
9824
for (unsigned int t = 0; t < 3 - r - s; t++)
9826
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
9827
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
9828
}// end loop over 't'
9829
}// end loop over 's'
9830
}// end loop over 'r'
9832
// Table(s) of coefficients.
9833
static const double coefficients0[10] = \
9834
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
9836
// Tables of derivatives of the polynomial base (transpose).
9837
static const double dmats0[10][10] = \
9838
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9839
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9840
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9841
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9842
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9843
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9844
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9845
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9846
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9847
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9849
static const double dmats1[10][10] = \
9850
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9851
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9852
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9853
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9854
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9855
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9856
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9857
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9858
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9859
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9861
static const double dmats2[10][10] = \
9862
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9863
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9864
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9865
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9866
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9867
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9868
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9869
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9870
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9871
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
9873
// Compute reference derivatives.
9874
// Declare pointer to array of derivatives on FIAT element.
9875
double *derivatives = new double[num_derivatives];
9876
for (unsigned int r = 0; r < num_derivatives; r++)
9878
derivatives[r] = 0.000000000000000;
9879
}// end loop over 'r'
9881
// Declare derivative matrix (of polynomial basis).
9882
double dmats[10][10] = \
9883
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9884
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9885
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9886
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9887
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9888
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9889
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9890
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9891
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9892
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9894
// Declare (auxiliary) derivative matrix (of polynomial basis).
9895
double dmats_old[10][10] = \
9896
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9897
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9898
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9899
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9900
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9901
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9902
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
9903
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
9904
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
9905
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
9907
// Loop possible derivatives.
9908
for (unsigned int r = 0; r < num_derivatives; r++)
9910
// Resetting dmats values to compute next derivative.
9911
for (unsigned int t = 0; t < 10; t++)
9913
for (unsigned int u = 0; u < 10; u++)
9915
dmats[t][u] = 0.000000000000000;
9918
dmats[t][u] = 1.000000000000000;
9921
}// end loop over 'u'
9922
}// end loop over 't'
9924
// Looping derivative order to generate dmats.
9925
for (unsigned int s = 0; s < n; s++)
9927
// Updating dmats_old with new values and resetting dmats.
9928
for (unsigned int t = 0; t < 10; t++)
9930
for (unsigned int u = 0; u < 10; u++)
9932
dmats_old[t][u] = dmats[t][u];
9933
dmats[t][u] = 0.000000000000000;
9934
}// end loop over 'u'
9935
}// end loop over 't'
9937
// Update dmats using an inner product.
9938
if (combinations[r][s] == 0)
9940
for (unsigned int t = 0; t < 10; t++)
9942
for (unsigned int u = 0; u < 10; u++)
9944
for (unsigned int tu = 0; tu < 10; tu++)
9946
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
9947
}// end loop over 'tu'
9948
}// end loop over 'u'
9949
}// end loop over 't'
9952
if (combinations[r][s] == 1)
9954
for (unsigned int t = 0; t < 10; t++)
9956
for (unsigned int u = 0; u < 10; u++)
9958
for (unsigned int tu = 0; tu < 10; tu++)
9960
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
9961
}// end loop over 'tu'
9962
}// end loop over 'u'
9963
}// end loop over 't'
9966
if (combinations[r][s] == 2)
9968
for (unsigned int t = 0; t < 10; t++)
9970
for (unsigned int u = 0; u < 10; u++)
9972
for (unsigned int tu = 0; tu < 10; tu++)
9974
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
9975
}// end loop over 'tu'
9976
}// end loop over 'u'
9977
}// end loop over 't'
9980
}// end loop over 's'
9981
for (unsigned int s = 0; s < 10; s++)
9983
for (unsigned int t = 0; t < 10; t++)
9985
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
9986
}// end loop over 't'
9987
}// end loop over 's'
9988
}// end loop over 'r'
9990
// Transform derivatives back to physical element
9991
for (unsigned int r = 0; r < num_derivatives; r++)
9993
for (unsigned int s = 0; s < num_derivatives; s++)
9995
values[r] += transform[r][s]*derivatives[s];
9996
}// end loop over 's'
9997
}// end loop over 'r'
9999
// Delete pointer to array of derivatives on FIAT element
10000
delete [] derivatives;
10002
// Delete pointer to array of combinations of derivatives and transform
10003
for (unsigned int r = 0; r < num_derivatives; r++)
10005
delete [] combinations[r];
10006
}// end loop over 'r'
10007
delete [] combinations;
10008
for (unsigned int r = 0; r < num_derivatives; r++)
10010
delete [] transform[r];
10011
}// end loop over 'r'
10012
delete [] transform;
10018
// Array of basisvalues.
10019
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
10021
// Declare helper variables.
10022
unsigned int rr = 0;
10023
unsigned int ss = 0;
10024
unsigned int tt = 0;
10025
double tmp5 = 0.000000000000000;
10026
double tmp6 = 0.000000000000000;
10027
double tmp7 = 0.000000000000000;
10028
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
10029
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
10030
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
10031
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
10032
double tmp4 = tmp3*tmp3;
10034
// Compute basisvalues.
10035
basisvalues[0] = 1.000000000000000;
10036
basisvalues[1] = tmp0;
10037
for (unsigned int r = 1; r < 2; r++)
10039
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
10040
ss = r*(r + 1)*(r + 2)/6;
10041
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
10042
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
10043
}// end loop over 'r'
10044
for (unsigned int r = 0; r < 2; r++)
10046
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
10047
ss = r*(r + 1)*(r + 2)/6;
10048
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
10049
}// end loop over 'r'
10050
for (unsigned int r = 0; r < 1; r++)
10052
for (unsigned int s = 1; s < 2 - r; s++)
10054
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
10055
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10056
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
10057
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10058
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10059
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10060
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
10061
}// end loop over 's'
10062
}// end loop over 'r'
10063
for (unsigned int r = 0; r < 2; r++)
10065
for (unsigned int s = 0; s < 2 - r; s++)
10067
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
10068
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10069
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
10070
}// end loop over 's'
10071
}// end loop over 'r'
10072
for (unsigned int r = 0; r < 1; r++)
10074
for (unsigned int s = 0; s < 1 - r; s++)
10076
for (unsigned int t = 1; t < 2 - r - s; t++)
10078
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
10079
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10080
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
10081
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10082
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10083
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10084
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
10085
}// end loop over 't'
10086
}// end loop over 's'
10087
}// end loop over 'r'
10088
for (unsigned int r = 0; r < 3; r++)
10090
for (unsigned int s = 0; s < 3 - r; s++)
10092
for (unsigned int t = 0; t < 3 - r - s; t++)
10094
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10095
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
10096
}// end loop over 't'
10097
}// end loop over 's'
10098
}// end loop over 'r'
10100
// Table(s) of coefficients.
10101
static const double coefficients0[10] = \
10102
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
10104
// Tables of derivatives of the polynomial base (transpose).
10105
static const double dmats0[10][10] = \
10106
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10107
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10108
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10109
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10110
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10111
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10112
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10113
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10114
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10115
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10117
static const double dmats1[10][10] = \
10118
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10119
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10120
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10121
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10122
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10123
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10124
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10125
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10126
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10127
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10129
static const double dmats2[10][10] = \
10130
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10131
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10132
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10133
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10134
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10135
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10136
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10137
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10138
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10139
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10141
// Compute reference derivatives.
10142
// Declare pointer to array of derivatives on FIAT element.
10143
double *derivatives = new double[num_derivatives];
10144
for (unsigned int r = 0; r < num_derivatives; r++)
10146
derivatives[r] = 0.000000000000000;
10147
}// end loop over 'r'
10149
// Declare derivative matrix (of polynomial basis).
10150
double dmats[10][10] = \
10151
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10152
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10153
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10154
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10155
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10156
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10157
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10158
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10159
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10160
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10162
// Declare (auxiliary) derivative matrix (of polynomial basis).
10163
double dmats_old[10][10] = \
10164
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10165
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10166
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10167
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10168
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10169
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10170
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10171
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10172
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10173
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10175
// Loop possible derivatives.
10176
for (unsigned int r = 0; r < num_derivatives; r++)
10178
// Resetting dmats values to compute next derivative.
10179
for (unsigned int t = 0; t < 10; t++)
10181
for (unsigned int u = 0; u < 10; u++)
10183
dmats[t][u] = 0.000000000000000;
10186
dmats[t][u] = 1.000000000000000;
10189
}// end loop over 'u'
10190
}// end loop over 't'
10192
// Looping derivative order to generate dmats.
10193
for (unsigned int s = 0; s < n; s++)
10195
// Updating dmats_old with new values and resetting dmats.
10196
for (unsigned int t = 0; t < 10; t++)
10198
for (unsigned int u = 0; u < 10; u++)
10200
dmats_old[t][u] = dmats[t][u];
10201
dmats[t][u] = 0.000000000000000;
10202
}// end loop over 'u'
10203
}// end loop over 't'
10205
// Update dmats using an inner product.
10206
if (combinations[r][s] == 0)
10208
for (unsigned int t = 0; t < 10; t++)
10210
for (unsigned int u = 0; u < 10; u++)
10212
for (unsigned int tu = 0; tu < 10; tu++)
10214
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
10215
}// end loop over 'tu'
10216
}// end loop over 'u'
10217
}// end loop over 't'
10220
if (combinations[r][s] == 1)
10222
for (unsigned int t = 0; t < 10; t++)
10224
for (unsigned int u = 0; u < 10; u++)
10226
for (unsigned int tu = 0; tu < 10; tu++)
10228
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
10229
}// end loop over 'tu'
10230
}// end loop over 'u'
10231
}// end loop over 't'
10234
if (combinations[r][s] == 2)
10236
for (unsigned int t = 0; t < 10; t++)
10238
for (unsigned int u = 0; u < 10; u++)
10240
for (unsigned int tu = 0; tu < 10; tu++)
10242
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
10243
}// end loop over 'tu'
10244
}// end loop over 'u'
10245
}// end loop over 't'
10248
}// end loop over 's'
10249
for (unsigned int s = 0; s < 10; s++)
10251
for (unsigned int t = 0; t < 10; t++)
10253
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
10254
}// end loop over 't'
10255
}// end loop over 's'
10256
}// end loop over 'r'
10258
// Transform derivatives back to physical element
10259
for (unsigned int r = 0; r < num_derivatives; r++)
10261
for (unsigned int s = 0; s < num_derivatives; s++)
10263
values[num_derivatives + r] += transform[r][s]*derivatives[s];
10264
}// end loop over 's'
10265
}// end loop over 'r'
10267
// Delete pointer to array of derivatives on FIAT element
10268
delete [] derivatives;
10270
// Delete pointer to array of combinations of derivatives and transform
10271
for (unsigned int r = 0; r < num_derivatives; r++)
10273
delete [] combinations[r];
10274
}// end loop over 'r'
10275
delete [] combinations;
10276
for (unsigned int r = 0; r < num_derivatives; r++)
10278
delete [] transform[r];
10279
}// end loop over 'r'
10280
delete [] transform;
10286
// Array of basisvalues.
10287
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
10289
// Declare helper variables.
10290
unsigned int rr = 0;
10291
unsigned int ss = 0;
10292
unsigned int tt = 0;
10293
double tmp5 = 0.000000000000000;
10294
double tmp6 = 0.000000000000000;
10295
double tmp7 = 0.000000000000000;
10296
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
10297
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
10298
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
10299
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
10300
double tmp4 = tmp3*tmp3;
10302
// Compute basisvalues.
10303
basisvalues[0] = 1.000000000000000;
10304
basisvalues[1] = tmp0;
10305
for (unsigned int r = 1; r < 2; r++)
10307
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
10308
ss = r*(r + 1)*(r + 2)/6;
10309
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
10310
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
10311
}// end loop over 'r'
10312
for (unsigned int r = 0; r < 2; r++)
10314
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
10315
ss = r*(r + 1)*(r + 2)/6;
10316
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
10317
}// end loop over 'r'
10318
for (unsigned int r = 0; r < 1; r++)
10320
for (unsigned int s = 1; s < 2 - r; s++)
10322
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
10323
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10324
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
10325
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10326
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10327
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10328
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
10329
}// end loop over 's'
10330
}// end loop over 'r'
10331
for (unsigned int r = 0; r < 2; r++)
10333
for (unsigned int s = 0; s < 2 - r; s++)
10335
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
10336
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10337
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
10338
}// end loop over 's'
10339
}// end loop over 'r'
10340
for (unsigned int r = 0; r < 1; r++)
10342
for (unsigned int s = 0; s < 1 - r; s++)
10344
for (unsigned int t = 1; t < 2 - r - s; t++)
10346
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
10347
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10348
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
10349
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10350
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10351
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10352
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
10353
}// end loop over 't'
10354
}// end loop over 's'
10355
}// end loop over 'r'
10356
for (unsigned int r = 0; r < 3; r++)
10358
for (unsigned int s = 0; s < 3 - r; s++)
10360
for (unsigned int t = 0; t < 3 - r - s; t++)
10362
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10363
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
10364
}// end loop over 't'
10365
}// end loop over 's'
10366
}// end loop over 'r'
10368
// Table(s) of coefficients.
10369
static const double coefficients0[10] = \
10370
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
10372
// Tables of derivatives of the polynomial base (transpose).
10373
static const double dmats0[10][10] = \
10374
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10375
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10376
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10377
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10378
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10379
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10380
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10381
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10382
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10383
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10385
static const double dmats1[10][10] = \
10386
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10387
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10388
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10389
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10390
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10391
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10392
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10393
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10394
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10395
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10397
static const double dmats2[10][10] = \
10398
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10399
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10400
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10401
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10402
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10403
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10404
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10405
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10406
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10407
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10409
// Compute reference derivatives.
10410
// Declare pointer to array of derivatives on FIAT element.
10411
double *derivatives = new double[num_derivatives];
10412
for (unsigned int r = 0; r < num_derivatives; r++)
10414
derivatives[r] = 0.000000000000000;
10415
}// end loop over 'r'
10417
// Declare derivative matrix (of polynomial basis).
10418
double dmats[10][10] = \
10419
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10420
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10421
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10422
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10423
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10424
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10425
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10426
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10427
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10428
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10430
// Declare (auxiliary) derivative matrix (of polynomial basis).
10431
double dmats_old[10][10] = \
10432
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10433
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10434
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10435
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10436
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10437
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10438
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10439
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10440
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10441
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10443
// Loop possible derivatives.
10444
for (unsigned int r = 0; r < num_derivatives; r++)
10446
// Resetting dmats values to compute next derivative.
10447
for (unsigned int t = 0; t < 10; t++)
10449
for (unsigned int u = 0; u < 10; u++)
10451
dmats[t][u] = 0.000000000000000;
10454
dmats[t][u] = 1.000000000000000;
10457
}// end loop over 'u'
10458
}// end loop over 't'
10460
// Looping derivative order to generate dmats.
10461
for (unsigned int s = 0; s < n; s++)
10463
// Updating dmats_old with new values and resetting dmats.
10464
for (unsigned int t = 0; t < 10; t++)
10466
for (unsigned int u = 0; u < 10; u++)
10468
dmats_old[t][u] = dmats[t][u];
10469
dmats[t][u] = 0.000000000000000;
10470
}// end loop over 'u'
10471
}// end loop over 't'
10473
// Update dmats using an inner product.
10474
if (combinations[r][s] == 0)
10476
for (unsigned int t = 0; t < 10; t++)
10478
for (unsigned int u = 0; u < 10; u++)
10480
for (unsigned int tu = 0; tu < 10; tu++)
10482
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
10483
}// end loop over 'tu'
10484
}// end loop over 'u'
10485
}// end loop over 't'
10488
if (combinations[r][s] == 1)
10490
for (unsigned int t = 0; t < 10; t++)
10492
for (unsigned int u = 0; u < 10; u++)
10494
for (unsigned int tu = 0; tu < 10; tu++)
10496
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
10497
}// end loop over 'tu'
10498
}// end loop over 'u'
10499
}// end loop over 't'
10502
if (combinations[r][s] == 2)
10504
for (unsigned int t = 0; t < 10; t++)
10506
for (unsigned int u = 0; u < 10; u++)
10508
for (unsigned int tu = 0; tu < 10; tu++)
10510
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
10511
}// end loop over 'tu'
10512
}// end loop over 'u'
10513
}// end loop over 't'
10516
}// end loop over 's'
10517
for (unsigned int s = 0; s < 10; s++)
10519
for (unsigned int t = 0; t < 10; t++)
10521
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
10522
}// end loop over 't'
10523
}// end loop over 's'
10524
}// end loop over 'r'
10526
// Transform derivatives back to physical element
10527
for (unsigned int r = 0; r < num_derivatives; r++)
10529
for (unsigned int s = 0; s < num_derivatives; s++)
10531
values[num_derivatives + r] += transform[r][s]*derivatives[s];
10532
}// end loop over 's'
10533
}// end loop over 'r'
10535
// Delete pointer to array of derivatives on FIAT element
10536
delete [] derivatives;
10538
// Delete pointer to array of combinations of derivatives and transform
10539
for (unsigned int r = 0; r < num_derivatives; r++)
10541
delete [] combinations[r];
10542
}// end loop over 'r'
10543
delete [] combinations;
10544
for (unsigned int r = 0; r < num_derivatives; r++)
10546
delete [] transform[r];
10547
}// end loop over 'r'
10548
delete [] transform;
10554
// Array of basisvalues.
10555
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
10557
// Declare helper variables.
10558
unsigned int rr = 0;
10559
unsigned int ss = 0;
10560
unsigned int tt = 0;
10561
double tmp5 = 0.000000000000000;
10562
double tmp6 = 0.000000000000000;
10563
double tmp7 = 0.000000000000000;
10564
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
10565
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
10566
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
10567
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
10568
double tmp4 = tmp3*tmp3;
10570
// Compute basisvalues.
10571
basisvalues[0] = 1.000000000000000;
10572
basisvalues[1] = tmp0;
10573
for (unsigned int r = 1; r < 2; r++)
10575
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
10576
ss = r*(r + 1)*(r + 2)/6;
10577
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
10578
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
10579
}// end loop over 'r'
10580
for (unsigned int r = 0; r < 2; r++)
10582
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
10583
ss = r*(r + 1)*(r + 2)/6;
10584
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
10585
}// end loop over 'r'
10586
for (unsigned int r = 0; r < 1; r++)
10588
for (unsigned int s = 1; s < 2 - r; s++)
10590
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
10591
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10592
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
10593
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10594
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10595
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10596
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
10597
}// end loop over 's'
10598
}// end loop over 'r'
10599
for (unsigned int r = 0; r < 2; r++)
10601
for (unsigned int s = 0; s < 2 - r; s++)
10603
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
10604
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10605
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
10606
}// end loop over 's'
10607
}// end loop over 'r'
10608
for (unsigned int r = 0; r < 1; r++)
10610
for (unsigned int s = 0; s < 1 - r; s++)
10612
for (unsigned int t = 1; t < 2 - r - s; t++)
10614
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
10615
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10616
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
10617
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10618
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10619
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10620
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
10621
}// end loop over 't'
10622
}// end loop over 's'
10623
}// end loop over 'r'
10624
for (unsigned int r = 0; r < 3; r++)
10626
for (unsigned int s = 0; s < 3 - r; s++)
10628
for (unsigned int t = 0; t < 3 - r - s; t++)
10630
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10631
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
10632
}// end loop over 't'
10633
}// end loop over 's'
10634
}// end loop over 'r'
10636
// Table(s) of coefficients.
10637
static const double coefficients0[10] = \
10638
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
10640
// Tables of derivatives of the polynomial base (transpose).
10641
static const double dmats0[10][10] = \
10642
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10643
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10644
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10645
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10646
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10647
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10648
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10649
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10650
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10651
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10653
static const double dmats1[10][10] = \
10654
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10655
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10656
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10657
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10658
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10659
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10660
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10661
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10662
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10663
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10665
static const double dmats2[10][10] = \
10666
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10667
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10668
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10669
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10670
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10671
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10672
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10673
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10674
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10675
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10677
// Compute reference derivatives.
10678
// Declare pointer to array of derivatives on FIAT element.
10679
double *derivatives = new double[num_derivatives];
10680
for (unsigned int r = 0; r < num_derivatives; r++)
10682
derivatives[r] = 0.000000000000000;
10683
}// end loop over 'r'
10685
// Declare derivative matrix (of polynomial basis).
10686
double dmats[10][10] = \
10687
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10688
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10689
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10690
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10691
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10692
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10693
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10694
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10695
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10696
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10698
// Declare (auxiliary) derivative matrix (of polynomial basis).
10699
double dmats_old[10][10] = \
10700
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10701
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10702
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10703
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10704
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10705
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10706
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10707
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10708
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10709
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10711
// Loop possible derivatives.
10712
for (unsigned int r = 0; r < num_derivatives; r++)
10714
// Resetting dmats values to compute next derivative.
10715
for (unsigned int t = 0; t < 10; t++)
10717
for (unsigned int u = 0; u < 10; u++)
10719
dmats[t][u] = 0.000000000000000;
10722
dmats[t][u] = 1.000000000000000;
10725
}// end loop over 'u'
10726
}// end loop over 't'
10728
// Looping derivative order to generate dmats.
10729
for (unsigned int s = 0; s < n; s++)
10731
// Updating dmats_old with new values and resetting dmats.
10732
for (unsigned int t = 0; t < 10; t++)
10734
for (unsigned int u = 0; u < 10; u++)
10736
dmats_old[t][u] = dmats[t][u];
10737
dmats[t][u] = 0.000000000000000;
10738
}// end loop over 'u'
10739
}// end loop over 't'
10741
// Update dmats using an inner product.
10742
if (combinations[r][s] == 0)
10744
for (unsigned int t = 0; t < 10; t++)
10746
for (unsigned int u = 0; u < 10; u++)
10748
for (unsigned int tu = 0; tu < 10; tu++)
10750
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
10751
}// end loop over 'tu'
10752
}// end loop over 'u'
10753
}// end loop over 't'
10756
if (combinations[r][s] == 1)
10758
for (unsigned int t = 0; t < 10; t++)
10760
for (unsigned int u = 0; u < 10; u++)
10762
for (unsigned int tu = 0; tu < 10; tu++)
10764
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
10765
}// end loop over 'tu'
10766
}// end loop over 'u'
10767
}// end loop over 't'
10770
if (combinations[r][s] == 2)
10772
for (unsigned int t = 0; t < 10; t++)
10774
for (unsigned int u = 0; u < 10; u++)
10776
for (unsigned int tu = 0; tu < 10; tu++)
10778
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
10779
}// end loop over 'tu'
10780
}// end loop over 'u'
10781
}// end loop over 't'
10784
}// end loop over 's'
10785
for (unsigned int s = 0; s < 10; s++)
10787
for (unsigned int t = 0; t < 10; t++)
10789
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
10790
}// end loop over 't'
10791
}// end loop over 's'
10792
}// end loop over 'r'
10794
// Transform derivatives back to physical element
10795
for (unsigned int r = 0; r < num_derivatives; r++)
10797
for (unsigned int s = 0; s < num_derivatives; s++)
10799
values[num_derivatives + r] += transform[r][s]*derivatives[s];
10800
}// end loop over 's'
10801
}// end loop over 'r'
10803
// Delete pointer to array of derivatives on FIAT element
10804
delete [] derivatives;
10806
// Delete pointer to array of combinations of derivatives and transform
10807
for (unsigned int r = 0; r < num_derivatives; r++)
10809
delete [] combinations[r];
10810
}// end loop over 'r'
10811
delete [] combinations;
10812
for (unsigned int r = 0; r < num_derivatives; r++)
10814
delete [] transform[r];
10815
}// end loop over 'r'
10816
delete [] transform;
10822
// Array of basisvalues.
10823
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
10825
// Declare helper variables.
10826
unsigned int rr = 0;
10827
unsigned int ss = 0;
10828
unsigned int tt = 0;
10829
double tmp5 = 0.000000000000000;
10830
double tmp6 = 0.000000000000000;
10831
double tmp7 = 0.000000000000000;
10832
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
10833
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
10834
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
10835
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
10836
double tmp4 = tmp3*tmp3;
10838
// Compute basisvalues.
10839
basisvalues[0] = 1.000000000000000;
10840
basisvalues[1] = tmp0;
10841
for (unsigned int r = 1; r < 2; r++)
10843
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
10844
ss = r*(r + 1)*(r + 2)/6;
10845
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
10846
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
10847
}// end loop over 'r'
10848
for (unsigned int r = 0; r < 2; r++)
10850
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
10851
ss = r*(r + 1)*(r + 2)/6;
10852
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
10853
}// end loop over 'r'
10854
for (unsigned int r = 0; r < 1; r++)
10856
for (unsigned int s = 1; s < 2 - r; s++)
10858
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
10859
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10860
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
10861
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10862
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10863
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
10864
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
10865
}// end loop over 's'
10866
}// end loop over 'r'
10867
for (unsigned int r = 0; r < 2; r++)
10869
for (unsigned int s = 0; s < 2 - r; s++)
10871
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
10872
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
10873
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
10874
}// end loop over 's'
10875
}// end loop over 'r'
10876
for (unsigned int r = 0; r < 1; r++)
10878
for (unsigned int s = 0; s < 1 - r; s++)
10880
for (unsigned int t = 1; t < 2 - r - s; t++)
10882
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
10883
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10884
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
10885
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10886
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10887
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
10888
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
10889
}// end loop over 't'
10890
}// end loop over 's'
10891
}// end loop over 'r'
10892
for (unsigned int r = 0; r < 3; r++)
10894
for (unsigned int s = 0; s < 3 - r; s++)
10896
for (unsigned int t = 0; t < 3 - r - s; t++)
10898
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
10899
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
10900
}// end loop over 't'
10901
}// end loop over 's'
10902
}// end loop over 'r'
10904
// Table(s) of coefficients.
10905
static const double coefficients0[10] = \
10906
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
10908
// Tables of derivatives of the polynomial base (transpose).
10909
static const double dmats0[10][10] = \
10910
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10911
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10912
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10913
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10914
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10915
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10916
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10917
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10918
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10919
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10921
static const double dmats1[10][10] = \
10922
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10923
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10924
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10925
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10926
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10927
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10928
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10929
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10930
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10931
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10933
static const double dmats2[10][10] = \
10934
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10935
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10936
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10937
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10938
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10939
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10940
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10941
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10942
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10943
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
10945
// Compute reference derivatives.
10946
// Declare pointer to array of derivatives on FIAT element.
10947
double *derivatives = new double[num_derivatives];
10948
for (unsigned int r = 0; r < num_derivatives; r++)
10950
derivatives[r] = 0.000000000000000;
10951
}// end loop over 'r'
10953
// Declare derivative matrix (of polynomial basis).
10954
double dmats[10][10] = \
10955
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10956
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10957
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10958
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10959
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10960
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10961
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10962
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10963
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10964
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10966
// Declare (auxiliary) derivative matrix (of polynomial basis).
10967
double dmats_old[10][10] = \
10968
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10969
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10970
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10971
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10972
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10973
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10974
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
10975
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
10976
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
10977
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
10979
// Loop possible derivatives.
10980
for (unsigned int r = 0; r < num_derivatives; r++)
10982
// Resetting dmats values to compute next derivative.
10983
for (unsigned int t = 0; t < 10; t++)
10985
for (unsigned int u = 0; u < 10; u++)
10987
dmats[t][u] = 0.000000000000000;
10990
dmats[t][u] = 1.000000000000000;
10993
}// end loop over 'u'
10994
}// end loop over 't'
10996
// Looping derivative order to generate dmats.
10997
for (unsigned int s = 0; s < n; s++)
10999
// Updating dmats_old with new values and resetting dmats.
11000
for (unsigned int t = 0; t < 10; t++)
11002
for (unsigned int u = 0; u < 10; u++)
11004
dmats_old[t][u] = dmats[t][u];
11005
dmats[t][u] = 0.000000000000000;
11006
}// end loop over 'u'
11007
}// end loop over 't'
11009
// Update dmats using an inner product.
11010
if (combinations[r][s] == 0)
11012
for (unsigned int t = 0; t < 10; t++)
11014
for (unsigned int u = 0; u < 10; u++)
11016
for (unsigned int tu = 0; tu < 10; tu++)
11018
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
11019
}// end loop over 'tu'
11020
}// end loop over 'u'
11021
}// end loop over 't'
11024
if (combinations[r][s] == 1)
11026
for (unsigned int t = 0; t < 10; t++)
11028
for (unsigned int u = 0; u < 10; u++)
11030
for (unsigned int tu = 0; tu < 10; tu++)
11032
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
11033
}// end loop over 'tu'
11034
}// end loop over 'u'
11035
}// end loop over 't'
11038
if (combinations[r][s] == 2)
11040
for (unsigned int t = 0; t < 10; t++)
11042
for (unsigned int u = 0; u < 10; u++)
11044
for (unsigned int tu = 0; tu < 10; tu++)
11046
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
11047
}// end loop over 'tu'
11048
}// end loop over 'u'
11049
}// end loop over 't'
11052
}// end loop over 's'
11053
for (unsigned int s = 0; s < 10; s++)
11055
for (unsigned int t = 0; t < 10; t++)
11057
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
11058
}// end loop over 't'
11059
}// end loop over 's'
11060
}// end loop over 'r'
11062
// Transform derivatives back to physical element
11063
for (unsigned int r = 0; r < num_derivatives; r++)
11065
for (unsigned int s = 0; s < num_derivatives; s++)
11067
values[num_derivatives + r] += transform[r][s]*derivatives[s];
11068
}// end loop over 's'
11069
}// end loop over 'r'
11071
// Delete pointer to array of derivatives on FIAT element
11072
delete [] derivatives;
11074
// Delete pointer to array of combinations of derivatives and transform
11075
for (unsigned int r = 0; r < num_derivatives; r++)
11077
delete [] combinations[r];
11078
}// end loop over 'r'
11079
delete [] combinations;
11080
for (unsigned int r = 0; r < num_derivatives; r++)
11082
delete [] transform[r];
11083
}// end loop over 'r'
11084
delete [] transform;
11090
// Array of basisvalues.
11091
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
11093
// Declare helper variables.
11094
unsigned int rr = 0;
11095
unsigned int ss = 0;
11096
unsigned int tt = 0;
11097
double tmp5 = 0.000000000000000;
11098
double tmp6 = 0.000000000000000;
11099
double tmp7 = 0.000000000000000;
11100
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
11101
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
11102
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
11103
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
11104
double tmp4 = tmp3*tmp3;
11106
// Compute basisvalues.
11107
basisvalues[0] = 1.000000000000000;
11108
basisvalues[1] = tmp0;
11109
for (unsigned int r = 1; r < 2; r++)
11111
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
11112
ss = r*(r + 1)*(r + 2)/6;
11113
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
11114
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
11115
}// end loop over 'r'
11116
for (unsigned int r = 0; r < 2; r++)
11118
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
11119
ss = r*(r + 1)*(r + 2)/6;
11120
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
11121
}// end loop over 'r'
11122
for (unsigned int r = 0; r < 1; r++)
11124
for (unsigned int s = 1; s < 2 - r; s++)
11126
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
11127
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11128
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
11129
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11130
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11131
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11132
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
11133
}// end loop over 's'
11134
}// end loop over 'r'
11135
for (unsigned int r = 0; r < 2; r++)
11137
for (unsigned int s = 0; s < 2 - r; s++)
11139
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
11140
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11141
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
11142
}// end loop over 's'
11143
}// end loop over 'r'
11144
for (unsigned int r = 0; r < 1; r++)
11146
for (unsigned int s = 0; s < 1 - r; s++)
11148
for (unsigned int t = 1; t < 2 - r - s; t++)
11150
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
11151
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11152
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
11153
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11154
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11155
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11156
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
11157
}// end loop over 't'
11158
}// end loop over 's'
11159
}// end loop over 'r'
11160
for (unsigned int r = 0; r < 3; r++)
11162
for (unsigned int s = 0; s < 3 - r; s++)
11164
for (unsigned int t = 0; t < 3 - r - s; t++)
11166
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11167
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
11168
}// end loop over 't'
11169
}// end loop over 's'
11170
}// end loop over 'r'
11172
// Table(s) of coefficients.
11173
static const double coefficients0[10] = \
11174
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
11176
// Tables of derivatives of the polynomial base (transpose).
11177
static const double dmats0[10][10] = \
11178
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11179
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11180
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11181
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11182
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11183
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11184
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11185
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11186
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11187
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11189
static const double dmats1[10][10] = \
11190
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11191
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11192
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11193
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11194
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11195
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11196
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11197
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11198
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11199
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11201
static const double dmats2[10][10] = \
11202
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11203
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11204
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11205
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11206
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11207
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11208
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11209
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11210
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11211
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11213
// Compute reference derivatives.
11214
// Declare pointer to array of derivatives on FIAT element.
11215
double *derivatives = new double[num_derivatives];
11216
for (unsigned int r = 0; r < num_derivatives; r++)
11218
derivatives[r] = 0.000000000000000;
11219
}// end loop over 'r'
11221
// Declare derivative matrix (of polynomial basis).
11222
double dmats[10][10] = \
11223
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11224
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11225
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11226
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11227
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11228
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11229
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11230
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
11231
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
11232
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
11234
// Declare (auxiliary) derivative matrix (of polynomial basis).
11235
double dmats_old[10][10] = \
11236
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11237
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11238
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11239
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11240
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11241
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11242
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11243
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
11244
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
11245
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
11247
// Loop possible derivatives.
11248
for (unsigned int r = 0; r < num_derivatives; r++)
11250
// Resetting dmats values to compute next derivative.
11251
for (unsigned int t = 0; t < 10; t++)
11253
for (unsigned int u = 0; u < 10; u++)
11255
dmats[t][u] = 0.000000000000000;
11258
dmats[t][u] = 1.000000000000000;
11261
}// end loop over 'u'
11262
}// end loop over 't'
11264
// Looping derivative order to generate dmats.
11265
for (unsigned int s = 0; s < n; s++)
11267
// Updating dmats_old with new values and resetting dmats.
11268
for (unsigned int t = 0; t < 10; t++)
11270
for (unsigned int u = 0; u < 10; u++)
11272
dmats_old[t][u] = dmats[t][u];
11273
dmats[t][u] = 0.000000000000000;
11274
}// end loop over 'u'
11275
}// end loop over 't'
11277
// Update dmats using an inner product.
11278
if (combinations[r][s] == 0)
11280
for (unsigned int t = 0; t < 10; t++)
11282
for (unsigned int u = 0; u < 10; u++)
11284
for (unsigned int tu = 0; tu < 10; tu++)
11286
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
11287
}// end loop over 'tu'
11288
}// end loop over 'u'
11289
}// end loop over 't'
11292
if (combinations[r][s] == 1)
11294
for (unsigned int t = 0; t < 10; t++)
11296
for (unsigned int u = 0; u < 10; u++)
11298
for (unsigned int tu = 0; tu < 10; tu++)
11300
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
11301
}// end loop over 'tu'
11302
}// end loop over 'u'
11303
}// end loop over 't'
11306
if (combinations[r][s] == 2)
11308
for (unsigned int t = 0; t < 10; t++)
11310
for (unsigned int u = 0; u < 10; u++)
11312
for (unsigned int tu = 0; tu < 10; tu++)
11314
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
11315
}// end loop over 'tu'
11316
}// end loop over 'u'
11317
}// end loop over 't'
11320
}// end loop over 's'
11321
for (unsigned int s = 0; s < 10; s++)
11323
for (unsigned int t = 0; t < 10; t++)
11325
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
11326
}// end loop over 't'
11327
}// end loop over 's'
11328
}// end loop over 'r'
11330
// Transform derivatives back to physical element
11331
for (unsigned int r = 0; r < num_derivatives; r++)
11333
for (unsigned int s = 0; s < num_derivatives; s++)
11335
values[num_derivatives + r] += transform[r][s]*derivatives[s];
11336
}// end loop over 's'
11337
}// end loop over 'r'
11339
// Delete pointer to array of derivatives on FIAT element
11340
delete [] derivatives;
11342
// Delete pointer to array of combinations of derivatives and transform
11343
for (unsigned int r = 0; r < num_derivatives; r++)
11345
delete [] combinations[r];
11346
}// end loop over 'r'
11347
delete [] combinations;
11348
for (unsigned int r = 0; r < num_derivatives; r++)
11350
delete [] transform[r];
11351
}// end loop over 'r'
11352
delete [] transform;
11358
// Array of basisvalues.
11359
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
11361
// Declare helper variables.
11362
unsigned int rr = 0;
11363
unsigned int ss = 0;
11364
unsigned int tt = 0;
11365
double tmp5 = 0.000000000000000;
11366
double tmp6 = 0.000000000000000;
11367
double tmp7 = 0.000000000000000;
11368
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
11369
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
11370
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
11371
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
11372
double tmp4 = tmp3*tmp3;
11374
// Compute basisvalues.
11375
basisvalues[0] = 1.000000000000000;
11376
basisvalues[1] = tmp0;
11377
for (unsigned int r = 1; r < 2; r++)
11379
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
11380
ss = r*(r + 1)*(r + 2)/6;
11381
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
11382
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
11383
}// end loop over 'r'
11384
for (unsigned int r = 0; r < 2; r++)
11386
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
11387
ss = r*(r + 1)*(r + 2)/6;
11388
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
11389
}// end loop over 'r'
11390
for (unsigned int r = 0; r < 1; r++)
11392
for (unsigned int s = 1; s < 2 - r; s++)
11394
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
11395
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11396
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
11397
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11398
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11399
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11400
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
11401
}// end loop over 's'
11402
}// end loop over 'r'
11403
for (unsigned int r = 0; r < 2; r++)
11405
for (unsigned int s = 0; s < 2 - r; s++)
11407
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
11408
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11409
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
11410
}// end loop over 's'
11411
}// end loop over 'r'
11412
for (unsigned int r = 0; r < 1; r++)
11414
for (unsigned int s = 0; s < 1 - r; s++)
11416
for (unsigned int t = 1; t < 2 - r - s; t++)
11418
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
11419
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11420
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
11421
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11422
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11423
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11424
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
11425
}// end loop over 't'
11426
}// end loop over 's'
11427
}// end loop over 'r'
11428
for (unsigned int r = 0; r < 3; r++)
11430
for (unsigned int s = 0; s < 3 - r; s++)
11432
for (unsigned int t = 0; t < 3 - r - s; t++)
11434
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11435
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
11436
}// end loop over 't'
11437
}// end loop over 's'
11438
}// end loop over 'r'
11440
// Table(s) of coefficients.
11441
static const double coefficients0[10] = \
11442
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
11444
// Tables of derivatives of the polynomial base (transpose).
11445
static const double dmats0[10][10] = \
11446
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11447
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11448
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11449
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11450
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11451
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11452
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11453
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11454
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11455
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11457
static const double dmats1[10][10] = \
11458
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11459
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11460
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11461
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11462
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11463
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11464
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11465
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11466
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11467
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11469
static const double dmats2[10][10] = \
11470
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11471
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11472
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11473
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11474
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11475
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11476
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11477
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11478
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11479
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11481
// Compute reference derivatives.
11482
// Declare pointer to array of derivatives on FIAT element.
11483
double *derivatives = new double[num_derivatives];
11484
for (unsigned int r = 0; r < num_derivatives; r++)
11486
derivatives[r] = 0.000000000000000;
11487
}// end loop over 'r'
11489
// Declare derivative matrix (of polynomial basis).
11490
double dmats[10][10] = \
11491
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11492
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11493
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11494
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11495
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11496
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11497
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11498
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
11499
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
11500
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
11502
// Declare (auxiliary) derivative matrix (of polynomial basis).
11503
double dmats_old[10][10] = \
11504
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11505
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11506
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11507
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11508
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11509
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11510
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11511
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
11512
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
11513
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
11515
// Loop possible derivatives.
11516
for (unsigned int r = 0; r < num_derivatives; r++)
11518
// Resetting dmats values to compute next derivative.
11519
for (unsigned int t = 0; t < 10; t++)
11521
for (unsigned int u = 0; u < 10; u++)
11523
dmats[t][u] = 0.000000000000000;
11526
dmats[t][u] = 1.000000000000000;
11529
}// end loop over 'u'
11530
}// end loop over 't'
11532
// Looping derivative order to generate dmats.
11533
for (unsigned int s = 0; s < n; s++)
11535
// Updating dmats_old with new values and resetting dmats.
11536
for (unsigned int t = 0; t < 10; t++)
11538
for (unsigned int u = 0; u < 10; u++)
11540
dmats_old[t][u] = dmats[t][u];
11541
dmats[t][u] = 0.000000000000000;
11542
}// end loop over 'u'
11543
}// end loop over 't'
11545
// Update dmats using an inner product.
11546
if (combinations[r][s] == 0)
11548
for (unsigned int t = 0; t < 10; t++)
11550
for (unsigned int u = 0; u < 10; u++)
11552
for (unsigned int tu = 0; tu < 10; tu++)
11554
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
11555
}// end loop over 'tu'
11556
}// end loop over 'u'
11557
}// end loop over 't'
11560
if (combinations[r][s] == 1)
11562
for (unsigned int t = 0; t < 10; t++)
11564
for (unsigned int u = 0; u < 10; u++)
11566
for (unsigned int tu = 0; tu < 10; tu++)
11568
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
11569
}// end loop over 'tu'
11570
}// end loop over 'u'
11571
}// end loop over 't'
11574
if (combinations[r][s] == 2)
11576
for (unsigned int t = 0; t < 10; t++)
11578
for (unsigned int u = 0; u < 10; u++)
11580
for (unsigned int tu = 0; tu < 10; tu++)
11582
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
11583
}// end loop over 'tu'
11584
}// end loop over 'u'
11585
}// end loop over 't'
11588
}// end loop over 's'
11589
for (unsigned int s = 0; s < 10; s++)
11591
for (unsigned int t = 0; t < 10; t++)
11593
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
11594
}// end loop over 't'
11595
}// end loop over 's'
11596
}// end loop over 'r'
11598
// Transform derivatives back to physical element
11599
for (unsigned int r = 0; r < num_derivatives; r++)
11601
for (unsigned int s = 0; s < num_derivatives; s++)
11603
values[num_derivatives + r] += transform[r][s]*derivatives[s];
11604
}// end loop over 's'
11605
}// end loop over 'r'
11607
// Delete pointer to array of derivatives on FIAT element
11608
delete [] derivatives;
11610
// Delete pointer to array of combinations of derivatives and transform
11611
for (unsigned int r = 0; r < num_derivatives; r++)
11613
delete [] combinations[r];
11614
}// end loop over 'r'
11615
delete [] combinations;
11616
for (unsigned int r = 0; r < num_derivatives; r++)
11618
delete [] transform[r];
11619
}// end loop over 'r'
11620
delete [] transform;
11626
// Array of basisvalues.
11627
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
11629
// Declare helper variables.
11630
unsigned int rr = 0;
11631
unsigned int ss = 0;
11632
unsigned int tt = 0;
11633
double tmp5 = 0.000000000000000;
11634
double tmp6 = 0.000000000000000;
11635
double tmp7 = 0.000000000000000;
11636
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
11637
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
11638
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
11639
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
11640
double tmp4 = tmp3*tmp3;
11642
// Compute basisvalues.
11643
basisvalues[0] = 1.000000000000000;
11644
basisvalues[1] = tmp0;
11645
for (unsigned int r = 1; r < 2; r++)
11647
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
11648
ss = r*(r + 1)*(r + 2)/6;
11649
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
11650
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
11651
}// end loop over 'r'
11652
for (unsigned int r = 0; r < 2; r++)
11654
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
11655
ss = r*(r + 1)*(r + 2)/6;
11656
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
11657
}// end loop over 'r'
11658
for (unsigned int r = 0; r < 1; r++)
11660
for (unsigned int s = 1; s < 2 - r; s++)
11662
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
11663
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11664
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
11665
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11666
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11667
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11668
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
11669
}// end loop over 's'
11670
}// end loop over 'r'
11671
for (unsigned int r = 0; r < 2; r++)
11673
for (unsigned int s = 0; s < 2 - r; s++)
11675
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
11676
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11677
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
11678
}// end loop over 's'
11679
}// end loop over 'r'
11680
for (unsigned int r = 0; r < 1; r++)
11682
for (unsigned int s = 0; s < 1 - r; s++)
11684
for (unsigned int t = 1; t < 2 - r - s; t++)
11686
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
11687
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11688
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
11689
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11690
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11691
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11692
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
11693
}// end loop over 't'
11694
}// end loop over 's'
11695
}// end loop over 'r'
11696
for (unsigned int r = 0; r < 3; r++)
11698
for (unsigned int s = 0; s < 3 - r; s++)
11700
for (unsigned int t = 0; t < 3 - r - s; t++)
11702
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11703
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
11704
}// end loop over 't'
11705
}// end loop over 's'
11706
}// end loop over 'r'
11708
// Table(s) of coefficients.
11709
static const double coefficients0[10] = \
11710
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
11712
// Tables of derivatives of the polynomial base (transpose).
11713
static const double dmats0[10][10] = \
11714
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11715
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11716
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11717
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11718
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11719
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11720
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11721
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11722
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11723
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11725
static const double dmats1[10][10] = \
11726
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11727
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11728
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11729
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11730
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11731
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11732
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11733
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11734
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11735
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11737
static const double dmats2[10][10] = \
11738
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11739
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11740
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11741
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11742
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11743
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11744
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11745
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11746
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11747
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11749
// Compute reference derivatives.
11750
// Declare pointer to array of derivatives on FIAT element.
11751
double *derivatives = new double[num_derivatives];
11752
for (unsigned int r = 0; r < num_derivatives; r++)
11754
derivatives[r] = 0.000000000000000;
11755
}// end loop over 'r'
11757
// Declare derivative matrix (of polynomial basis).
11758
double dmats[10][10] = \
11759
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11760
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11761
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11762
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11763
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11764
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11765
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11766
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
11767
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
11768
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
11770
// Declare (auxiliary) derivative matrix (of polynomial basis).
11771
double dmats_old[10][10] = \
11772
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11773
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11774
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11775
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11776
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11777
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11778
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11779
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
11780
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
11781
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
11783
// Loop possible derivatives.
11784
for (unsigned int r = 0; r < num_derivatives; r++)
11786
// Resetting dmats values to compute next derivative.
11787
for (unsigned int t = 0; t < 10; t++)
11789
for (unsigned int u = 0; u < 10; u++)
11791
dmats[t][u] = 0.000000000000000;
11794
dmats[t][u] = 1.000000000000000;
11797
}// end loop over 'u'
11798
}// end loop over 't'
11800
// Looping derivative order to generate dmats.
11801
for (unsigned int s = 0; s < n; s++)
11803
// Updating dmats_old with new values and resetting dmats.
11804
for (unsigned int t = 0; t < 10; t++)
11806
for (unsigned int u = 0; u < 10; u++)
11808
dmats_old[t][u] = dmats[t][u];
11809
dmats[t][u] = 0.000000000000000;
11810
}// end loop over 'u'
11811
}// end loop over 't'
11813
// Update dmats using an inner product.
11814
if (combinations[r][s] == 0)
11816
for (unsigned int t = 0; t < 10; t++)
11818
for (unsigned int u = 0; u < 10; u++)
11820
for (unsigned int tu = 0; tu < 10; tu++)
11822
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
11823
}// end loop over 'tu'
11824
}// end loop over 'u'
11825
}// end loop over 't'
11828
if (combinations[r][s] == 1)
11830
for (unsigned int t = 0; t < 10; t++)
11832
for (unsigned int u = 0; u < 10; u++)
11834
for (unsigned int tu = 0; tu < 10; tu++)
11836
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
11837
}// end loop over 'tu'
11838
}// end loop over 'u'
11839
}// end loop over 't'
11842
if (combinations[r][s] == 2)
11844
for (unsigned int t = 0; t < 10; t++)
11846
for (unsigned int u = 0; u < 10; u++)
11848
for (unsigned int tu = 0; tu < 10; tu++)
11850
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
11851
}// end loop over 'tu'
11852
}// end loop over 'u'
11853
}// end loop over 't'
11856
}// end loop over 's'
11857
for (unsigned int s = 0; s < 10; s++)
11859
for (unsigned int t = 0; t < 10; t++)
11861
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
11862
}// end loop over 't'
11863
}// end loop over 's'
11864
}// end loop over 'r'
11866
// Transform derivatives back to physical element
11867
for (unsigned int r = 0; r < num_derivatives; r++)
11869
for (unsigned int s = 0; s < num_derivatives; s++)
11871
values[num_derivatives + r] += transform[r][s]*derivatives[s];
11872
}// end loop over 's'
11873
}// end loop over 'r'
11875
// Delete pointer to array of derivatives on FIAT element
11876
delete [] derivatives;
11878
// Delete pointer to array of combinations of derivatives and transform
11879
for (unsigned int r = 0; r < num_derivatives; r++)
11881
delete [] combinations[r];
11882
}// end loop over 'r'
11883
delete [] combinations;
11884
for (unsigned int r = 0; r < num_derivatives; r++)
11886
delete [] transform[r];
11887
}// end loop over 'r'
11888
delete [] transform;
11894
// Array of basisvalues.
11895
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
11897
// Declare helper variables.
11898
unsigned int rr = 0;
11899
unsigned int ss = 0;
11900
unsigned int tt = 0;
11901
double tmp5 = 0.000000000000000;
11902
double tmp6 = 0.000000000000000;
11903
double tmp7 = 0.000000000000000;
11904
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
11905
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
11906
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
11907
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
11908
double tmp4 = tmp3*tmp3;
11910
// Compute basisvalues.
11911
basisvalues[0] = 1.000000000000000;
11912
basisvalues[1] = tmp0;
11913
for (unsigned int r = 1; r < 2; r++)
11915
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
11916
ss = r*(r + 1)*(r + 2)/6;
11917
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
11918
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
11919
}// end loop over 'r'
11920
for (unsigned int r = 0; r < 2; r++)
11922
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
11923
ss = r*(r + 1)*(r + 2)/6;
11924
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
11925
}// end loop over 'r'
11926
for (unsigned int r = 0; r < 1; r++)
11928
for (unsigned int s = 1; s < 2 - r; s++)
11930
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
11931
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11932
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
11933
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11934
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11935
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
11936
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
11937
}// end loop over 's'
11938
}// end loop over 'r'
11939
for (unsigned int r = 0; r < 2; r++)
11941
for (unsigned int s = 0; s < 2 - r; s++)
11943
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
11944
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
11945
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
11946
}// end loop over 's'
11947
}// end loop over 'r'
11948
for (unsigned int r = 0; r < 1; r++)
11950
for (unsigned int s = 0; s < 1 - r; s++)
11952
for (unsigned int t = 1; t < 2 - r - s; t++)
11954
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
11955
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11956
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
11957
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11958
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11959
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
11960
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
11961
}// end loop over 't'
11962
}// end loop over 's'
11963
}// end loop over 'r'
11964
for (unsigned int r = 0; r < 3; r++)
11966
for (unsigned int s = 0; s < 3 - r; s++)
11968
for (unsigned int t = 0; t < 3 - r - s; t++)
11970
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
11971
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
11972
}// end loop over 't'
11973
}// end loop over 's'
11974
}// end loop over 'r'
11976
// Table(s) of coefficients.
11977
static const double coefficients0[10] = \
11978
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
11980
// Tables of derivatives of the polynomial base (transpose).
11981
static const double dmats0[10][10] = \
11982
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11983
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11984
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11985
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11986
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11987
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11988
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11989
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11990
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11991
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
11993
static const double dmats1[10][10] = \
11994
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11995
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11996
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11997
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11998
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
11999
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12000
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12001
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12002
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12003
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12005
static const double dmats2[10][10] = \
12006
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12007
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12008
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12009
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12010
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12011
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12012
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12013
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12014
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12015
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12017
// Compute reference derivatives.
12018
// Declare pointer to array of derivatives on FIAT element.
12019
double *derivatives = new double[num_derivatives];
12020
for (unsigned int r = 0; r < num_derivatives; r++)
12022
derivatives[r] = 0.000000000000000;
12023
}// end loop over 'r'
12025
// Declare derivative matrix (of polynomial basis).
12026
double dmats[10][10] = \
12027
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12028
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12029
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12030
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12031
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12032
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12033
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12034
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12035
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12036
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12038
// Declare (auxiliary) derivative matrix (of polynomial basis).
12039
double dmats_old[10][10] = \
12040
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12041
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12042
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12043
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12044
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12045
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12046
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12047
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12048
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12049
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12051
// Loop possible derivatives.
12052
for (unsigned int r = 0; r < num_derivatives; r++)
12054
// Resetting dmats values to compute next derivative.
12055
for (unsigned int t = 0; t < 10; t++)
12057
for (unsigned int u = 0; u < 10; u++)
12059
dmats[t][u] = 0.000000000000000;
12062
dmats[t][u] = 1.000000000000000;
12065
}// end loop over 'u'
12066
}// end loop over 't'
12068
// Looping derivative order to generate dmats.
12069
for (unsigned int s = 0; s < n; s++)
12071
// Updating dmats_old with new values and resetting dmats.
12072
for (unsigned int t = 0; t < 10; t++)
12074
for (unsigned int u = 0; u < 10; u++)
12076
dmats_old[t][u] = dmats[t][u];
12077
dmats[t][u] = 0.000000000000000;
12078
}// end loop over 'u'
12079
}// end loop over 't'
12081
// Update dmats using an inner product.
12082
if (combinations[r][s] == 0)
12084
for (unsigned int t = 0; t < 10; t++)
12086
for (unsigned int u = 0; u < 10; u++)
12088
for (unsigned int tu = 0; tu < 10; tu++)
12090
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
12091
}// end loop over 'tu'
12092
}// end loop over 'u'
12093
}// end loop over 't'
12096
if (combinations[r][s] == 1)
12098
for (unsigned int t = 0; t < 10; t++)
12100
for (unsigned int u = 0; u < 10; u++)
12102
for (unsigned int tu = 0; tu < 10; tu++)
12104
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
12105
}// end loop over 'tu'
12106
}// end loop over 'u'
12107
}// end loop over 't'
12110
if (combinations[r][s] == 2)
12112
for (unsigned int t = 0; t < 10; t++)
12114
for (unsigned int u = 0; u < 10; u++)
12116
for (unsigned int tu = 0; tu < 10; tu++)
12118
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
12119
}// end loop over 'tu'
12120
}// end loop over 'u'
12121
}// end loop over 't'
12124
}// end loop over 's'
12125
for (unsigned int s = 0; s < 10; s++)
12127
for (unsigned int t = 0; t < 10; t++)
12129
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
12130
}// end loop over 't'
12131
}// end loop over 's'
12132
}// end loop over 'r'
12134
// Transform derivatives back to physical element
12135
for (unsigned int r = 0; r < num_derivatives; r++)
12137
for (unsigned int s = 0; s < num_derivatives; s++)
12139
values[num_derivatives + r] += transform[r][s]*derivatives[s];
12140
}// end loop over 's'
12141
}// end loop over 'r'
12143
// Delete pointer to array of derivatives on FIAT element
12144
delete [] derivatives;
12146
// Delete pointer to array of combinations of derivatives and transform
12147
for (unsigned int r = 0; r < num_derivatives; r++)
12149
delete [] combinations[r];
12150
}// end loop over 'r'
12151
delete [] combinations;
12152
for (unsigned int r = 0; r < num_derivatives; r++)
12154
delete [] transform[r];
12155
}// end loop over 'r'
12156
delete [] transform;
12162
// Array of basisvalues.
12163
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
12165
// Declare helper variables.
12166
unsigned int rr = 0;
12167
unsigned int ss = 0;
12168
unsigned int tt = 0;
12169
double tmp5 = 0.000000000000000;
12170
double tmp6 = 0.000000000000000;
12171
double tmp7 = 0.000000000000000;
12172
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
12173
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
12174
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
12175
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
12176
double tmp4 = tmp3*tmp3;
12178
// Compute basisvalues.
12179
basisvalues[0] = 1.000000000000000;
12180
basisvalues[1] = tmp0;
12181
for (unsigned int r = 1; r < 2; r++)
12183
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
12184
ss = r*(r + 1)*(r + 2)/6;
12185
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
12186
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
12187
}// end loop over 'r'
12188
for (unsigned int r = 0; r < 2; r++)
12190
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
12191
ss = r*(r + 1)*(r + 2)/6;
12192
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
12193
}// end loop over 'r'
12194
for (unsigned int r = 0; r < 1; r++)
12196
for (unsigned int s = 1; s < 2 - r; s++)
12198
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
12199
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
12200
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
12201
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12202
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12203
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12204
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
12205
}// end loop over 's'
12206
}// end loop over 'r'
12207
for (unsigned int r = 0; r < 2; r++)
12209
for (unsigned int s = 0; s < 2 - r; s++)
12211
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
12212
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
12213
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
12214
}// end loop over 's'
12215
}// end loop over 'r'
12216
for (unsigned int r = 0; r < 1; r++)
12218
for (unsigned int s = 0; s < 1 - r; s++)
12220
for (unsigned int t = 1; t < 2 - r - s; t++)
12222
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
12223
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
12224
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
12225
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12226
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12227
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12228
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
12229
}// end loop over 't'
12230
}// end loop over 's'
12231
}// end loop over 'r'
12232
for (unsigned int r = 0; r < 3; r++)
12234
for (unsigned int s = 0; s < 3 - r; s++)
12236
for (unsigned int t = 0; t < 3 - r - s; t++)
12238
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
12239
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
12240
}// end loop over 't'
12241
}// end loop over 's'
12242
}// end loop over 'r'
12244
// Table(s) of coefficients.
12245
static const double coefficients0[10] = \
12246
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
12248
// Tables of derivatives of the polynomial base (transpose).
12249
static const double dmats0[10][10] = \
12250
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12251
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12252
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12253
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12254
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12255
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12256
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12257
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12258
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12259
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12261
static const double dmats1[10][10] = \
12262
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12263
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12264
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12265
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12266
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12267
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12268
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12269
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12270
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12271
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12273
static const double dmats2[10][10] = \
12274
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12275
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12276
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12277
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12278
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12279
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12280
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12281
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12282
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12283
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12285
// Compute reference derivatives.
12286
// Declare pointer to array of derivatives on FIAT element.
12287
double *derivatives = new double[num_derivatives];
12288
for (unsigned int r = 0; r < num_derivatives; r++)
12290
derivatives[r] = 0.000000000000000;
12291
}// end loop over 'r'
12293
// Declare derivative matrix (of polynomial basis).
12294
double dmats[10][10] = \
12295
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12296
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12297
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12298
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12299
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12300
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12301
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12302
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12303
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12304
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12306
// Declare (auxiliary) derivative matrix (of polynomial basis).
12307
double dmats_old[10][10] = \
12308
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12309
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12310
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12311
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12312
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12313
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12314
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12315
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12316
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12317
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12319
// Loop possible derivatives.
12320
for (unsigned int r = 0; r < num_derivatives; r++)
12322
// Resetting dmats values to compute next derivative.
12323
for (unsigned int t = 0; t < 10; t++)
12325
for (unsigned int u = 0; u < 10; u++)
12327
dmats[t][u] = 0.000000000000000;
12330
dmats[t][u] = 1.000000000000000;
12333
}// end loop over 'u'
12334
}// end loop over 't'
12336
// Looping derivative order to generate dmats.
12337
for (unsigned int s = 0; s < n; s++)
12339
// Updating dmats_old with new values and resetting dmats.
12340
for (unsigned int t = 0; t < 10; t++)
12342
for (unsigned int u = 0; u < 10; u++)
12344
dmats_old[t][u] = dmats[t][u];
12345
dmats[t][u] = 0.000000000000000;
12346
}// end loop over 'u'
12347
}// end loop over 't'
12349
// Update dmats using an inner product.
12350
if (combinations[r][s] == 0)
12352
for (unsigned int t = 0; t < 10; t++)
12354
for (unsigned int u = 0; u < 10; u++)
12356
for (unsigned int tu = 0; tu < 10; tu++)
12358
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
12359
}// end loop over 'tu'
12360
}// end loop over 'u'
12361
}// end loop over 't'
12364
if (combinations[r][s] == 1)
12366
for (unsigned int t = 0; t < 10; t++)
12368
for (unsigned int u = 0; u < 10; u++)
12370
for (unsigned int tu = 0; tu < 10; tu++)
12372
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
12373
}// end loop over 'tu'
12374
}// end loop over 'u'
12375
}// end loop over 't'
12378
if (combinations[r][s] == 2)
12380
for (unsigned int t = 0; t < 10; t++)
12382
for (unsigned int u = 0; u < 10; u++)
12384
for (unsigned int tu = 0; tu < 10; tu++)
12386
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
12387
}// end loop over 'tu'
12388
}// end loop over 'u'
12389
}// end loop over 't'
12392
}// end loop over 's'
12393
for (unsigned int s = 0; s < 10; s++)
12395
for (unsigned int t = 0; t < 10; t++)
12397
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
12398
}// end loop over 't'
12399
}// end loop over 's'
12400
}// end loop over 'r'
12402
// Transform derivatives back to physical element
12403
for (unsigned int r = 0; r < num_derivatives; r++)
12405
for (unsigned int s = 0; s < num_derivatives; s++)
12407
values[num_derivatives + r] += transform[r][s]*derivatives[s];
12408
}// end loop over 's'
12409
}// end loop over 'r'
12411
// Delete pointer to array of derivatives on FIAT element
12412
delete [] derivatives;
12414
// Delete pointer to array of combinations of derivatives and transform
12415
for (unsigned int r = 0; r < num_derivatives; r++)
12417
delete [] combinations[r];
12418
}// end loop over 'r'
12419
delete [] combinations;
12420
for (unsigned int r = 0; r < num_derivatives; r++)
12422
delete [] transform[r];
12423
}// end loop over 'r'
12424
delete [] transform;
12430
// Array of basisvalues.
12431
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
12433
// Declare helper variables.
12434
unsigned int rr = 0;
12435
unsigned int ss = 0;
12436
unsigned int tt = 0;
12437
double tmp5 = 0.000000000000000;
12438
double tmp6 = 0.000000000000000;
12439
double tmp7 = 0.000000000000000;
12440
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
12441
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
12442
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
12443
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
12444
double tmp4 = tmp3*tmp3;
12446
// Compute basisvalues.
12447
basisvalues[0] = 1.000000000000000;
12448
basisvalues[1] = tmp0;
12449
for (unsigned int r = 1; r < 2; r++)
12451
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
12452
ss = r*(r + 1)*(r + 2)/6;
12453
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
12454
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
12455
}// end loop over 'r'
12456
for (unsigned int r = 0; r < 2; r++)
12458
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
12459
ss = r*(r + 1)*(r + 2)/6;
12460
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
12461
}// end loop over 'r'
12462
for (unsigned int r = 0; r < 1; r++)
12464
for (unsigned int s = 1; s < 2 - r; s++)
12466
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
12467
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
12468
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
12469
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12470
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12471
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12472
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
12473
}// end loop over 's'
12474
}// end loop over 'r'
12475
for (unsigned int r = 0; r < 2; r++)
12477
for (unsigned int s = 0; s < 2 - r; s++)
12479
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
12480
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
12481
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
12482
}// end loop over 's'
12483
}// end loop over 'r'
12484
for (unsigned int r = 0; r < 1; r++)
12486
for (unsigned int s = 0; s < 1 - r; s++)
12488
for (unsigned int t = 1; t < 2 - r - s; t++)
12490
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
12491
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
12492
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
12493
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12494
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12495
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12496
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
12497
}// end loop over 't'
12498
}// end loop over 's'
12499
}// end loop over 'r'
12500
for (unsigned int r = 0; r < 3; r++)
12502
for (unsigned int s = 0; s < 3 - r; s++)
12504
for (unsigned int t = 0; t < 3 - r - s; t++)
12506
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
12507
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
12508
}// end loop over 't'
12509
}// end loop over 's'
12510
}// end loop over 'r'
12512
// Table(s) of coefficients.
12513
static const double coefficients0[10] = \
12514
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
12516
// Tables of derivatives of the polynomial base (transpose).
12517
static const double dmats0[10][10] = \
12518
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12519
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12520
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12521
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12522
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12523
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12524
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12525
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12526
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12527
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12529
static const double dmats1[10][10] = \
12530
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12531
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12532
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12533
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12534
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12535
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12536
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12537
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12538
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12539
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12541
static const double dmats2[10][10] = \
12542
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12543
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12544
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12545
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12546
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12547
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12548
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12549
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12550
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12551
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12553
// Compute reference derivatives.
12554
// Declare pointer to array of derivatives on FIAT element.
12555
double *derivatives = new double[num_derivatives];
12556
for (unsigned int r = 0; r < num_derivatives; r++)
12558
derivatives[r] = 0.000000000000000;
12559
}// end loop over 'r'
12561
// Declare derivative matrix (of polynomial basis).
12562
double dmats[10][10] = \
12563
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12564
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12565
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12566
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12567
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12568
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12569
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12570
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12571
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12572
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12574
// Declare (auxiliary) derivative matrix (of polynomial basis).
12575
double dmats_old[10][10] = \
12576
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12577
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12578
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12579
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12580
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12581
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12582
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12583
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12584
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12585
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12587
// Loop possible derivatives.
12588
for (unsigned int r = 0; r < num_derivatives; r++)
12590
// Resetting dmats values to compute next derivative.
12591
for (unsigned int t = 0; t < 10; t++)
12593
for (unsigned int u = 0; u < 10; u++)
12595
dmats[t][u] = 0.000000000000000;
12598
dmats[t][u] = 1.000000000000000;
12601
}// end loop over 'u'
12602
}// end loop over 't'
12604
// Looping derivative order to generate dmats.
12605
for (unsigned int s = 0; s < n; s++)
12607
// Updating dmats_old with new values and resetting dmats.
12608
for (unsigned int t = 0; t < 10; t++)
12610
for (unsigned int u = 0; u < 10; u++)
12612
dmats_old[t][u] = dmats[t][u];
12613
dmats[t][u] = 0.000000000000000;
12614
}// end loop over 'u'
12615
}// end loop over 't'
12617
// Update dmats using an inner product.
12618
if (combinations[r][s] == 0)
12620
for (unsigned int t = 0; t < 10; t++)
12622
for (unsigned int u = 0; u < 10; u++)
12624
for (unsigned int tu = 0; tu < 10; tu++)
12626
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
12627
}// end loop over 'tu'
12628
}// end loop over 'u'
12629
}// end loop over 't'
12632
if (combinations[r][s] == 1)
12634
for (unsigned int t = 0; t < 10; t++)
12636
for (unsigned int u = 0; u < 10; u++)
12638
for (unsigned int tu = 0; tu < 10; tu++)
12640
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
12641
}// end loop over 'tu'
12642
}// end loop over 'u'
12643
}// end loop over 't'
12646
if (combinations[r][s] == 2)
12648
for (unsigned int t = 0; t < 10; t++)
12650
for (unsigned int u = 0; u < 10; u++)
12652
for (unsigned int tu = 0; tu < 10; tu++)
12654
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
12655
}// end loop over 'tu'
12656
}// end loop over 'u'
12657
}// end loop over 't'
12660
}// end loop over 's'
12661
for (unsigned int s = 0; s < 10; s++)
12663
for (unsigned int t = 0; t < 10; t++)
12665
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
12666
}// end loop over 't'
12667
}// end loop over 's'
12668
}// end loop over 'r'
12670
// Transform derivatives back to physical element
12671
for (unsigned int r = 0; r < num_derivatives; r++)
12673
for (unsigned int s = 0; s < num_derivatives; s++)
12675
values[num_derivatives + r] += transform[r][s]*derivatives[s];
12676
}// end loop over 's'
12677
}// end loop over 'r'
12679
// Delete pointer to array of derivatives on FIAT element
12680
delete [] derivatives;
12682
// Delete pointer to array of combinations of derivatives and transform
12683
for (unsigned int r = 0; r < num_derivatives; r++)
12685
delete [] combinations[r];
12686
}// end loop over 'r'
12687
delete [] combinations;
12688
for (unsigned int r = 0; r < num_derivatives; r++)
12690
delete [] transform[r];
12691
}// end loop over 'r'
12692
delete [] transform;
12698
// Array of basisvalues.
12699
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
12701
// Declare helper variables.
12702
unsigned int rr = 0;
12703
unsigned int ss = 0;
12704
unsigned int tt = 0;
12705
double tmp5 = 0.000000000000000;
12706
double tmp6 = 0.000000000000000;
12707
double tmp7 = 0.000000000000000;
12708
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
12709
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
12710
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
12711
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
12712
double tmp4 = tmp3*tmp3;
12714
// Compute basisvalues.
12715
basisvalues[0] = 1.000000000000000;
12716
basisvalues[1] = tmp0;
12717
for (unsigned int r = 1; r < 2; r++)
12719
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
12720
ss = r*(r + 1)*(r + 2)/6;
12721
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
12722
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
12723
}// end loop over 'r'
12724
for (unsigned int r = 0; r < 2; r++)
12726
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
12727
ss = r*(r + 1)*(r + 2)/6;
12728
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
12729
}// end loop over 'r'
12730
for (unsigned int r = 0; r < 1; r++)
12732
for (unsigned int s = 1; s < 2 - r; s++)
12734
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
12735
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
12736
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
12737
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12738
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12739
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
12740
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
12741
}// end loop over 's'
12742
}// end loop over 'r'
12743
for (unsigned int r = 0; r < 2; r++)
12745
for (unsigned int s = 0; s < 2 - r; s++)
12747
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
12748
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
12749
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
12750
}// end loop over 's'
12751
}// end loop over 'r'
12752
for (unsigned int r = 0; r < 1; r++)
12754
for (unsigned int s = 0; s < 1 - r; s++)
12756
for (unsigned int t = 1; t < 2 - r - s; t++)
12758
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
12759
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
12760
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
12761
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12762
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12763
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
12764
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
12765
}// end loop over 't'
12766
}// end loop over 's'
12767
}// end loop over 'r'
12768
for (unsigned int r = 0; r < 3; r++)
12770
for (unsigned int s = 0; s < 3 - r; s++)
12772
for (unsigned int t = 0; t < 3 - r - s; t++)
12774
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
12775
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
12776
}// end loop over 't'
12777
}// end loop over 's'
12778
}// end loop over 'r'
12780
// Table(s) of coefficients.
12781
static const double coefficients0[10] = \
12782
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
12784
// Tables of derivatives of the polynomial base (transpose).
12785
static const double dmats0[10][10] = \
12786
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12787
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12788
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12789
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12790
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12791
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12792
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12793
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12794
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12795
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12797
static const double dmats1[10][10] = \
12798
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12799
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12800
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12801
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12802
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12803
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12804
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12805
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12806
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12807
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12809
static const double dmats2[10][10] = \
12810
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12811
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12812
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12813
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12814
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12815
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12816
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12817
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12818
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12819
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
12821
// Compute reference derivatives.
12822
// Declare pointer to array of derivatives on FIAT element.
12823
double *derivatives = new double[num_derivatives];
12824
for (unsigned int r = 0; r < num_derivatives; r++)
12826
derivatives[r] = 0.000000000000000;
12827
}// end loop over 'r'
12829
// Declare derivative matrix (of polynomial basis).
12830
double dmats[10][10] = \
12831
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12832
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12833
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12834
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12835
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12836
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12837
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12838
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12839
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12840
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12842
// Declare (auxiliary) derivative matrix (of polynomial basis).
12843
double dmats_old[10][10] = \
12844
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12845
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12846
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12847
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12848
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12849
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12850
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
12851
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
12852
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
12853
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
12855
// Loop possible derivatives.
12856
for (unsigned int r = 0; r < num_derivatives; r++)
12858
// Resetting dmats values to compute next derivative.
12859
for (unsigned int t = 0; t < 10; t++)
12861
for (unsigned int u = 0; u < 10; u++)
12863
dmats[t][u] = 0.000000000000000;
12866
dmats[t][u] = 1.000000000000000;
12869
}// end loop over 'u'
12870
}// end loop over 't'
12872
// Looping derivative order to generate dmats.
12873
for (unsigned int s = 0; s < n; s++)
12875
// Updating dmats_old with new values and resetting dmats.
12876
for (unsigned int t = 0; t < 10; t++)
12878
for (unsigned int u = 0; u < 10; u++)
12880
dmats_old[t][u] = dmats[t][u];
12881
dmats[t][u] = 0.000000000000000;
12882
}// end loop over 'u'
12883
}// end loop over 't'
12885
// Update dmats using an inner product.
12886
if (combinations[r][s] == 0)
12888
for (unsigned int t = 0; t < 10; t++)
12890
for (unsigned int u = 0; u < 10; u++)
12892
for (unsigned int tu = 0; tu < 10; tu++)
12894
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
12895
}// end loop over 'tu'
12896
}// end loop over 'u'
12897
}// end loop over 't'
12900
if (combinations[r][s] == 1)
12902
for (unsigned int t = 0; t < 10; t++)
12904
for (unsigned int u = 0; u < 10; u++)
12906
for (unsigned int tu = 0; tu < 10; tu++)
12908
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
12909
}// end loop over 'tu'
12910
}// end loop over 'u'
12911
}// end loop over 't'
12914
if (combinations[r][s] == 2)
12916
for (unsigned int t = 0; t < 10; t++)
12918
for (unsigned int u = 0; u < 10; u++)
12920
for (unsigned int tu = 0; tu < 10; tu++)
12922
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
12923
}// end loop over 'tu'
12924
}// end loop over 'u'
12925
}// end loop over 't'
12928
}// end loop over 's'
12929
for (unsigned int s = 0; s < 10; s++)
12931
for (unsigned int t = 0; t < 10; t++)
12933
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
12934
}// end loop over 't'
12935
}// end loop over 's'
12936
}// end loop over 'r'
12938
// Transform derivatives back to physical element
12939
for (unsigned int r = 0; r < num_derivatives; r++)
12941
for (unsigned int s = 0; s < num_derivatives; s++)
12943
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
12944
}// end loop over 's'
12945
}// end loop over 'r'
12947
// Delete pointer to array of derivatives on FIAT element
12948
delete [] derivatives;
12950
// Delete pointer to array of combinations of derivatives and transform
12951
for (unsigned int r = 0; r < num_derivatives; r++)
12953
delete [] combinations[r];
12954
}// end loop over 'r'
12955
delete [] combinations;
12956
for (unsigned int r = 0; r < num_derivatives; r++)
12958
delete [] transform[r];
12959
}// end loop over 'r'
12960
delete [] transform;
12966
// Array of basisvalues.
12967
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
12969
// Declare helper variables.
12970
unsigned int rr = 0;
12971
unsigned int ss = 0;
12972
unsigned int tt = 0;
12973
double tmp5 = 0.000000000000000;
12974
double tmp6 = 0.000000000000000;
12975
double tmp7 = 0.000000000000000;
12976
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
12977
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
12978
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
12979
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
12980
double tmp4 = tmp3*tmp3;
12982
// Compute basisvalues.
12983
basisvalues[0] = 1.000000000000000;
12984
basisvalues[1] = tmp0;
12985
for (unsigned int r = 1; r < 2; r++)
12987
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
12988
ss = r*(r + 1)*(r + 2)/6;
12989
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
12990
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
12991
}// end loop over 'r'
12992
for (unsigned int r = 0; r < 2; r++)
12994
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
12995
ss = r*(r + 1)*(r + 2)/6;
12996
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
12997
}// end loop over 'r'
12998
for (unsigned int r = 0; r < 1; r++)
13000
for (unsigned int s = 1; s < 2 - r; s++)
13002
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
13003
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13004
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
13005
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13006
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13007
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13008
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
13009
}// end loop over 's'
13010
}// end loop over 'r'
13011
for (unsigned int r = 0; r < 2; r++)
13013
for (unsigned int s = 0; s < 2 - r; s++)
13015
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
13016
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13017
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
13018
}// end loop over 's'
13019
}// end loop over 'r'
13020
for (unsigned int r = 0; r < 1; r++)
13022
for (unsigned int s = 0; s < 1 - r; s++)
13024
for (unsigned int t = 1; t < 2 - r - s; t++)
13026
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
13027
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13028
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
13029
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13030
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13031
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13032
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
13033
}// end loop over 't'
13034
}// end loop over 's'
13035
}// end loop over 'r'
13036
for (unsigned int r = 0; r < 3; r++)
13038
for (unsigned int s = 0; s < 3 - r; s++)
13040
for (unsigned int t = 0; t < 3 - r - s; t++)
13042
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13043
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
13044
}// end loop over 't'
13045
}// end loop over 's'
13046
}// end loop over 'r'
13048
// Table(s) of coefficients.
13049
static const double coefficients0[10] = \
13050
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
13052
// Tables of derivatives of the polynomial base (transpose).
13053
static const double dmats0[10][10] = \
13054
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13055
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13056
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13057
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13058
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13059
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13060
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13061
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13062
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13063
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13065
static const double dmats1[10][10] = \
13066
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13067
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13068
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13069
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13070
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13071
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13072
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13073
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13074
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13075
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13077
static const double dmats2[10][10] = \
13078
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13079
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13080
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13081
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13082
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13083
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13084
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13085
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13086
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13087
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13089
// Compute reference derivatives.
13090
// Declare pointer to array of derivatives on FIAT element.
13091
double *derivatives = new double[num_derivatives];
13092
for (unsigned int r = 0; r < num_derivatives; r++)
13094
derivatives[r] = 0.000000000000000;
13095
}// end loop over 'r'
13097
// Declare derivative matrix (of polynomial basis).
13098
double dmats[10][10] = \
13099
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13100
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13101
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13102
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13103
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13104
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13105
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13106
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13107
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13108
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13110
// Declare (auxiliary) derivative matrix (of polynomial basis).
13111
double dmats_old[10][10] = \
13112
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13113
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13114
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13115
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13116
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13117
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13118
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13119
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13120
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13121
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13123
// Loop possible derivatives.
13124
for (unsigned int r = 0; r < num_derivatives; r++)
13126
// Resetting dmats values to compute next derivative.
13127
for (unsigned int t = 0; t < 10; t++)
13129
for (unsigned int u = 0; u < 10; u++)
13131
dmats[t][u] = 0.000000000000000;
13134
dmats[t][u] = 1.000000000000000;
13137
}// end loop over 'u'
13138
}// end loop over 't'
13140
// Looping derivative order to generate dmats.
13141
for (unsigned int s = 0; s < n; s++)
13143
// Updating dmats_old with new values and resetting dmats.
13144
for (unsigned int t = 0; t < 10; t++)
13146
for (unsigned int u = 0; u < 10; u++)
13148
dmats_old[t][u] = dmats[t][u];
13149
dmats[t][u] = 0.000000000000000;
13150
}// end loop over 'u'
13151
}// end loop over 't'
13153
// Update dmats using an inner product.
13154
if (combinations[r][s] == 0)
13156
for (unsigned int t = 0; t < 10; t++)
13158
for (unsigned int u = 0; u < 10; u++)
13160
for (unsigned int tu = 0; tu < 10; tu++)
13162
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
13163
}// end loop over 'tu'
13164
}// end loop over 'u'
13165
}// end loop over 't'
13168
if (combinations[r][s] == 1)
13170
for (unsigned int t = 0; t < 10; t++)
13172
for (unsigned int u = 0; u < 10; u++)
13174
for (unsigned int tu = 0; tu < 10; tu++)
13176
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
13177
}// end loop over 'tu'
13178
}// end loop over 'u'
13179
}// end loop over 't'
13182
if (combinations[r][s] == 2)
13184
for (unsigned int t = 0; t < 10; t++)
13186
for (unsigned int u = 0; u < 10; u++)
13188
for (unsigned int tu = 0; tu < 10; tu++)
13190
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
13191
}// end loop over 'tu'
13192
}// end loop over 'u'
13193
}// end loop over 't'
13196
}// end loop over 's'
13197
for (unsigned int s = 0; s < 10; s++)
13199
for (unsigned int t = 0; t < 10; t++)
13201
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
13202
}// end loop over 't'
13203
}// end loop over 's'
13204
}// end loop over 'r'
13206
// Transform derivatives back to physical element
13207
for (unsigned int r = 0; r < num_derivatives; r++)
13209
for (unsigned int s = 0; s < num_derivatives; s++)
13211
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
13212
}// end loop over 's'
13213
}// end loop over 'r'
13215
// Delete pointer to array of derivatives on FIAT element
13216
delete [] derivatives;
13218
// Delete pointer to array of combinations of derivatives and transform
13219
for (unsigned int r = 0; r < num_derivatives; r++)
13221
delete [] combinations[r];
13222
}// end loop over 'r'
13223
delete [] combinations;
13224
for (unsigned int r = 0; r < num_derivatives; r++)
13226
delete [] transform[r];
13227
}// end loop over 'r'
13228
delete [] transform;
13234
// Array of basisvalues.
13235
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
13237
// Declare helper variables.
13238
unsigned int rr = 0;
13239
unsigned int ss = 0;
13240
unsigned int tt = 0;
13241
double tmp5 = 0.000000000000000;
13242
double tmp6 = 0.000000000000000;
13243
double tmp7 = 0.000000000000000;
13244
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
13245
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
13246
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
13247
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
13248
double tmp4 = tmp3*tmp3;
13250
// Compute basisvalues.
13251
basisvalues[0] = 1.000000000000000;
13252
basisvalues[1] = tmp0;
13253
for (unsigned int r = 1; r < 2; r++)
13255
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
13256
ss = r*(r + 1)*(r + 2)/6;
13257
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
13258
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
13259
}// end loop over 'r'
13260
for (unsigned int r = 0; r < 2; r++)
13262
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
13263
ss = r*(r + 1)*(r + 2)/6;
13264
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
13265
}// end loop over 'r'
13266
for (unsigned int r = 0; r < 1; r++)
13268
for (unsigned int s = 1; s < 2 - r; s++)
13270
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
13271
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13272
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
13273
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13274
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13275
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13276
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
13277
}// end loop over 's'
13278
}// end loop over 'r'
13279
for (unsigned int r = 0; r < 2; r++)
13281
for (unsigned int s = 0; s < 2 - r; s++)
13283
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
13284
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13285
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
13286
}// end loop over 's'
13287
}// end loop over 'r'
13288
for (unsigned int r = 0; r < 1; r++)
13290
for (unsigned int s = 0; s < 1 - r; s++)
13292
for (unsigned int t = 1; t < 2 - r - s; t++)
13294
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
13295
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13296
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
13297
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13298
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13299
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13300
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
13301
}// end loop over 't'
13302
}// end loop over 's'
13303
}// end loop over 'r'
13304
for (unsigned int r = 0; r < 3; r++)
13306
for (unsigned int s = 0; s < 3 - r; s++)
13308
for (unsigned int t = 0; t < 3 - r - s; t++)
13310
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13311
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
13312
}// end loop over 't'
13313
}// end loop over 's'
13314
}// end loop over 'r'
13316
// Table(s) of coefficients.
13317
static const double coefficients0[10] = \
13318
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
13320
// Tables of derivatives of the polynomial base (transpose).
13321
static const double dmats0[10][10] = \
13322
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13323
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13324
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13325
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13326
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13327
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13328
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13329
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13330
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13331
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13333
static const double dmats1[10][10] = \
13334
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13335
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13336
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13337
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13338
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13339
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13340
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13341
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13342
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13343
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13345
static const double dmats2[10][10] = \
13346
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13347
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13348
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13349
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13350
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13351
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13352
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13353
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13354
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13355
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13357
// Compute reference derivatives.
13358
// Declare pointer to array of derivatives on FIAT element.
13359
double *derivatives = new double[num_derivatives];
13360
for (unsigned int r = 0; r < num_derivatives; r++)
13362
derivatives[r] = 0.000000000000000;
13363
}// end loop over 'r'
13365
// Declare derivative matrix (of polynomial basis).
13366
double dmats[10][10] = \
13367
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13368
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13369
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13370
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13371
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13372
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13373
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13374
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13375
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13376
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13378
// Declare (auxiliary) derivative matrix (of polynomial basis).
13379
double dmats_old[10][10] = \
13380
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13381
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13382
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13383
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13384
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13385
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13386
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13387
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13388
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13389
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13391
// Loop possible derivatives.
13392
for (unsigned int r = 0; r < num_derivatives; r++)
13394
// Resetting dmats values to compute next derivative.
13395
for (unsigned int t = 0; t < 10; t++)
13397
for (unsigned int u = 0; u < 10; u++)
13399
dmats[t][u] = 0.000000000000000;
13402
dmats[t][u] = 1.000000000000000;
13405
}// end loop over 'u'
13406
}// end loop over 't'
13408
// Looping derivative order to generate dmats.
13409
for (unsigned int s = 0; s < n; s++)
13411
// Updating dmats_old with new values and resetting dmats.
13412
for (unsigned int t = 0; t < 10; t++)
13414
for (unsigned int u = 0; u < 10; u++)
13416
dmats_old[t][u] = dmats[t][u];
13417
dmats[t][u] = 0.000000000000000;
13418
}// end loop over 'u'
13419
}// end loop over 't'
13421
// Update dmats using an inner product.
13422
if (combinations[r][s] == 0)
13424
for (unsigned int t = 0; t < 10; t++)
13426
for (unsigned int u = 0; u < 10; u++)
13428
for (unsigned int tu = 0; tu < 10; tu++)
13430
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
13431
}// end loop over 'tu'
13432
}// end loop over 'u'
13433
}// end loop over 't'
13436
if (combinations[r][s] == 1)
13438
for (unsigned int t = 0; t < 10; t++)
13440
for (unsigned int u = 0; u < 10; u++)
13442
for (unsigned int tu = 0; tu < 10; tu++)
13444
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
13445
}// end loop over 'tu'
13446
}// end loop over 'u'
13447
}// end loop over 't'
13450
if (combinations[r][s] == 2)
13452
for (unsigned int t = 0; t < 10; t++)
13454
for (unsigned int u = 0; u < 10; u++)
13456
for (unsigned int tu = 0; tu < 10; tu++)
13458
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
13459
}// end loop over 'tu'
13460
}// end loop over 'u'
13461
}// end loop over 't'
13464
}// end loop over 's'
13465
for (unsigned int s = 0; s < 10; s++)
13467
for (unsigned int t = 0; t < 10; t++)
13469
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
13470
}// end loop over 't'
13471
}// end loop over 's'
13472
}// end loop over 'r'
13474
// Transform derivatives back to physical element
13475
for (unsigned int r = 0; r < num_derivatives; r++)
13477
for (unsigned int s = 0; s < num_derivatives; s++)
13479
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
13480
}// end loop over 's'
13481
}// end loop over 'r'
13483
// Delete pointer to array of derivatives on FIAT element
13484
delete [] derivatives;
13486
// Delete pointer to array of combinations of derivatives and transform
13487
for (unsigned int r = 0; r < num_derivatives; r++)
13489
delete [] combinations[r];
13490
}// end loop over 'r'
13491
delete [] combinations;
13492
for (unsigned int r = 0; r < num_derivatives; r++)
13494
delete [] transform[r];
13495
}// end loop over 'r'
13496
delete [] transform;
13502
// Array of basisvalues.
13503
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
13505
// Declare helper variables.
13506
unsigned int rr = 0;
13507
unsigned int ss = 0;
13508
unsigned int tt = 0;
13509
double tmp5 = 0.000000000000000;
13510
double tmp6 = 0.000000000000000;
13511
double tmp7 = 0.000000000000000;
13512
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
13513
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
13514
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
13515
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
13516
double tmp4 = tmp3*tmp3;
13518
// Compute basisvalues.
13519
basisvalues[0] = 1.000000000000000;
13520
basisvalues[1] = tmp0;
13521
for (unsigned int r = 1; r < 2; r++)
13523
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
13524
ss = r*(r + 1)*(r + 2)/6;
13525
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
13526
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
13527
}// end loop over 'r'
13528
for (unsigned int r = 0; r < 2; r++)
13530
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
13531
ss = r*(r + 1)*(r + 2)/6;
13532
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
13533
}// end loop over 'r'
13534
for (unsigned int r = 0; r < 1; r++)
13536
for (unsigned int s = 1; s < 2 - r; s++)
13538
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
13539
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13540
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
13541
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13542
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13543
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13544
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
13545
}// end loop over 's'
13546
}// end loop over 'r'
13547
for (unsigned int r = 0; r < 2; r++)
13549
for (unsigned int s = 0; s < 2 - r; s++)
13551
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
13552
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13553
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
13554
}// end loop over 's'
13555
}// end loop over 'r'
13556
for (unsigned int r = 0; r < 1; r++)
13558
for (unsigned int s = 0; s < 1 - r; s++)
13560
for (unsigned int t = 1; t < 2 - r - s; t++)
13562
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
13563
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13564
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
13565
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13566
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13567
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13568
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
13569
}// end loop over 't'
13570
}// end loop over 's'
13571
}// end loop over 'r'
13572
for (unsigned int r = 0; r < 3; r++)
13574
for (unsigned int s = 0; s < 3 - r; s++)
13576
for (unsigned int t = 0; t < 3 - r - s; t++)
13578
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13579
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
13580
}// end loop over 't'
13581
}// end loop over 's'
13582
}// end loop over 'r'
13584
// Table(s) of coefficients.
13585
static const double coefficients0[10] = \
13586
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
13588
// Tables of derivatives of the polynomial base (transpose).
13589
static const double dmats0[10][10] = \
13590
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13591
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13592
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13593
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13594
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13595
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13596
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13597
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13598
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13599
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13601
static const double dmats1[10][10] = \
13602
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13603
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13604
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13605
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13606
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13607
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13608
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13609
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13610
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13611
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13613
static const double dmats2[10][10] = \
13614
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13615
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13616
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13617
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13618
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13619
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13620
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13621
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13622
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13623
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13625
// Compute reference derivatives.
13626
// Declare pointer to array of derivatives on FIAT element.
13627
double *derivatives = new double[num_derivatives];
13628
for (unsigned int r = 0; r < num_derivatives; r++)
13630
derivatives[r] = 0.000000000000000;
13631
}// end loop over 'r'
13633
// Declare derivative matrix (of polynomial basis).
13634
double dmats[10][10] = \
13635
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13636
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13637
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13638
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13639
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13640
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13641
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13642
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13643
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13644
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13646
// Declare (auxiliary) derivative matrix (of polynomial basis).
13647
double dmats_old[10][10] = \
13648
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13649
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13650
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13651
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13652
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13653
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13654
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13655
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13656
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13657
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13659
// Loop possible derivatives.
13660
for (unsigned int r = 0; r < num_derivatives; r++)
13662
// Resetting dmats values to compute next derivative.
13663
for (unsigned int t = 0; t < 10; t++)
13665
for (unsigned int u = 0; u < 10; u++)
13667
dmats[t][u] = 0.000000000000000;
13670
dmats[t][u] = 1.000000000000000;
13673
}// end loop over 'u'
13674
}// end loop over 't'
13676
// Looping derivative order to generate dmats.
13677
for (unsigned int s = 0; s < n; s++)
13679
// Updating dmats_old with new values and resetting dmats.
13680
for (unsigned int t = 0; t < 10; t++)
13682
for (unsigned int u = 0; u < 10; u++)
13684
dmats_old[t][u] = dmats[t][u];
13685
dmats[t][u] = 0.000000000000000;
13686
}// end loop over 'u'
13687
}// end loop over 't'
13689
// Update dmats using an inner product.
13690
if (combinations[r][s] == 0)
13692
for (unsigned int t = 0; t < 10; t++)
13694
for (unsigned int u = 0; u < 10; u++)
13696
for (unsigned int tu = 0; tu < 10; tu++)
13698
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
13699
}// end loop over 'tu'
13700
}// end loop over 'u'
13701
}// end loop over 't'
13704
if (combinations[r][s] == 1)
13706
for (unsigned int t = 0; t < 10; t++)
13708
for (unsigned int u = 0; u < 10; u++)
13710
for (unsigned int tu = 0; tu < 10; tu++)
13712
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
13713
}// end loop over 'tu'
13714
}// end loop over 'u'
13715
}// end loop over 't'
13718
if (combinations[r][s] == 2)
13720
for (unsigned int t = 0; t < 10; t++)
13722
for (unsigned int u = 0; u < 10; u++)
13724
for (unsigned int tu = 0; tu < 10; tu++)
13726
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
13727
}// end loop over 'tu'
13728
}// end loop over 'u'
13729
}// end loop over 't'
13732
}// end loop over 's'
13733
for (unsigned int s = 0; s < 10; s++)
13735
for (unsigned int t = 0; t < 10; t++)
13737
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
13738
}// end loop over 't'
13739
}// end loop over 's'
13740
}// end loop over 'r'
13742
// Transform derivatives back to physical element
13743
for (unsigned int r = 0; r < num_derivatives; r++)
13745
for (unsigned int s = 0; s < num_derivatives; s++)
13747
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
13748
}// end loop over 's'
13749
}// end loop over 'r'
13751
// Delete pointer to array of derivatives on FIAT element
13752
delete [] derivatives;
13754
// Delete pointer to array of combinations of derivatives and transform
13755
for (unsigned int r = 0; r < num_derivatives; r++)
13757
delete [] combinations[r];
13758
}// end loop over 'r'
13759
delete [] combinations;
13760
for (unsigned int r = 0; r < num_derivatives; r++)
13762
delete [] transform[r];
13763
}// end loop over 'r'
13764
delete [] transform;
13770
// Array of basisvalues.
13771
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
13773
// Declare helper variables.
13774
unsigned int rr = 0;
13775
unsigned int ss = 0;
13776
unsigned int tt = 0;
13777
double tmp5 = 0.000000000000000;
13778
double tmp6 = 0.000000000000000;
13779
double tmp7 = 0.000000000000000;
13780
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
13781
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
13782
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
13783
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
13784
double tmp4 = tmp3*tmp3;
13786
// Compute basisvalues.
13787
basisvalues[0] = 1.000000000000000;
13788
basisvalues[1] = tmp0;
13789
for (unsigned int r = 1; r < 2; r++)
13791
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
13792
ss = r*(r + 1)*(r + 2)/6;
13793
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
13794
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
13795
}// end loop over 'r'
13796
for (unsigned int r = 0; r < 2; r++)
13798
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
13799
ss = r*(r + 1)*(r + 2)/6;
13800
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
13801
}// end loop over 'r'
13802
for (unsigned int r = 0; r < 1; r++)
13804
for (unsigned int s = 1; s < 2 - r; s++)
13806
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
13807
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13808
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
13809
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13810
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13811
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
13812
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
13813
}// end loop over 's'
13814
}// end loop over 'r'
13815
for (unsigned int r = 0; r < 2; r++)
13817
for (unsigned int s = 0; s < 2 - r; s++)
13819
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
13820
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
13821
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
13822
}// end loop over 's'
13823
}// end loop over 'r'
13824
for (unsigned int r = 0; r < 1; r++)
13826
for (unsigned int s = 0; s < 1 - r; s++)
13828
for (unsigned int t = 1; t < 2 - r - s; t++)
13830
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
13831
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13832
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
13833
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13834
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13835
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
13836
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
13837
}// end loop over 't'
13838
}// end loop over 's'
13839
}// end loop over 'r'
13840
for (unsigned int r = 0; r < 3; r++)
13842
for (unsigned int s = 0; s < 3 - r; s++)
13844
for (unsigned int t = 0; t < 3 - r - s; t++)
13846
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
13847
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
13848
}// end loop over 't'
13849
}// end loop over 's'
13850
}// end loop over 'r'
13852
// Table(s) of coefficients.
13853
static const double coefficients0[10] = \
13854
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
13856
// Tables of derivatives of the polynomial base (transpose).
13857
static const double dmats0[10][10] = \
13858
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13859
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13860
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13861
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13862
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13863
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13864
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13865
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13866
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13867
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13869
static const double dmats1[10][10] = \
13870
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13871
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13872
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13873
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13874
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13875
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13876
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13877
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13878
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13879
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13881
static const double dmats2[10][10] = \
13882
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13883
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13884
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13885
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13886
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13887
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13888
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13889
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13890
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13891
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
13893
// Compute reference derivatives.
13894
// Declare pointer to array of derivatives on FIAT element.
13895
double *derivatives = new double[num_derivatives];
13896
for (unsigned int r = 0; r < num_derivatives; r++)
13898
derivatives[r] = 0.000000000000000;
13899
}// end loop over 'r'
13901
// Declare derivative matrix (of polynomial basis).
13902
double dmats[10][10] = \
13903
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13904
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13905
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13906
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13907
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13908
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13909
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13910
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13911
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13912
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13914
// Declare (auxiliary) derivative matrix (of polynomial basis).
13915
double dmats_old[10][10] = \
13916
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13917
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13918
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13919
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13920
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13921
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13922
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
13923
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
13924
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
13925
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
13927
// Loop possible derivatives.
13928
for (unsigned int r = 0; r < num_derivatives; r++)
13930
// Resetting dmats values to compute next derivative.
13931
for (unsigned int t = 0; t < 10; t++)
13933
for (unsigned int u = 0; u < 10; u++)
13935
dmats[t][u] = 0.000000000000000;
13938
dmats[t][u] = 1.000000000000000;
13941
}// end loop over 'u'
13942
}// end loop over 't'
13944
// Looping derivative order to generate dmats.
13945
for (unsigned int s = 0; s < n; s++)
13947
// Updating dmats_old with new values and resetting dmats.
13948
for (unsigned int t = 0; t < 10; t++)
13950
for (unsigned int u = 0; u < 10; u++)
13952
dmats_old[t][u] = dmats[t][u];
13953
dmats[t][u] = 0.000000000000000;
13954
}// end loop over 'u'
13955
}// end loop over 't'
13957
// Update dmats using an inner product.
13958
if (combinations[r][s] == 0)
13960
for (unsigned int t = 0; t < 10; t++)
13962
for (unsigned int u = 0; u < 10; u++)
13964
for (unsigned int tu = 0; tu < 10; tu++)
13966
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
13967
}// end loop over 'tu'
13968
}// end loop over 'u'
13969
}// end loop over 't'
13972
if (combinations[r][s] == 1)
13974
for (unsigned int t = 0; t < 10; t++)
13976
for (unsigned int u = 0; u < 10; u++)
13978
for (unsigned int tu = 0; tu < 10; tu++)
13980
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
13981
}// end loop over 'tu'
13982
}// end loop over 'u'
13983
}// end loop over 't'
13986
if (combinations[r][s] == 2)
13988
for (unsigned int t = 0; t < 10; t++)
13990
for (unsigned int u = 0; u < 10; u++)
13992
for (unsigned int tu = 0; tu < 10; tu++)
13994
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
13995
}// end loop over 'tu'
13996
}// end loop over 'u'
13997
}// end loop over 't'
14000
}// end loop over 's'
14001
for (unsigned int s = 0; s < 10; s++)
14003
for (unsigned int t = 0; t < 10; t++)
14005
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
14006
}// end loop over 't'
14007
}// end loop over 's'
14008
}// end loop over 'r'
14010
// Transform derivatives back to physical element
14011
for (unsigned int r = 0; r < num_derivatives; r++)
14013
for (unsigned int s = 0; s < num_derivatives; s++)
14015
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
14016
}// end loop over 's'
14017
}// end loop over 'r'
14019
// Delete pointer to array of derivatives on FIAT element
14020
delete [] derivatives;
14022
// Delete pointer to array of combinations of derivatives and transform
14023
for (unsigned int r = 0; r < num_derivatives; r++)
14025
delete [] combinations[r];
14026
}// end loop over 'r'
14027
delete [] combinations;
14028
for (unsigned int r = 0; r < num_derivatives; r++)
14030
delete [] transform[r];
14031
}// end loop over 'r'
14032
delete [] transform;
14038
// Array of basisvalues.
14039
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
14041
// Declare helper variables.
14042
unsigned int rr = 0;
14043
unsigned int ss = 0;
14044
unsigned int tt = 0;
14045
double tmp5 = 0.000000000000000;
14046
double tmp6 = 0.000000000000000;
14047
double tmp7 = 0.000000000000000;
14048
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
14049
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
14050
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
14051
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
14052
double tmp4 = tmp3*tmp3;
14054
// Compute basisvalues.
14055
basisvalues[0] = 1.000000000000000;
14056
basisvalues[1] = tmp0;
14057
for (unsigned int r = 1; r < 2; r++)
14059
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
14060
ss = r*(r + 1)*(r + 2)/6;
14061
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
14062
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
14063
}// end loop over 'r'
14064
for (unsigned int r = 0; r < 2; r++)
14066
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
14067
ss = r*(r + 1)*(r + 2)/6;
14068
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
14069
}// end loop over 'r'
14070
for (unsigned int r = 0; r < 1; r++)
14072
for (unsigned int s = 1; s < 2 - r; s++)
14074
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
14075
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14076
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
14077
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14078
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14079
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14080
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
14081
}// end loop over 's'
14082
}// end loop over 'r'
14083
for (unsigned int r = 0; r < 2; r++)
14085
for (unsigned int s = 0; s < 2 - r; s++)
14087
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
14088
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14089
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
14090
}// end loop over 's'
14091
}// end loop over 'r'
14092
for (unsigned int r = 0; r < 1; r++)
14094
for (unsigned int s = 0; s < 1 - r; s++)
14096
for (unsigned int t = 1; t < 2 - r - s; t++)
14098
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
14099
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14100
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
14101
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14102
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14103
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14104
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
14105
}// end loop over 't'
14106
}// end loop over 's'
14107
}// end loop over 'r'
14108
for (unsigned int r = 0; r < 3; r++)
14110
for (unsigned int s = 0; s < 3 - r; s++)
14112
for (unsigned int t = 0; t < 3 - r - s; t++)
14114
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14115
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
14116
}// end loop over 't'
14117
}// end loop over 's'
14118
}// end loop over 'r'
14120
// Table(s) of coefficients.
14121
static const double coefficients0[10] = \
14122
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
14124
// Tables of derivatives of the polynomial base (transpose).
14125
static const double dmats0[10][10] = \
14126
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14127
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14128
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14129
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14130
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14131
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14132
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14133
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14134
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14135
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14137
static const double dmats1[10][10] = \
14138
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14139
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14140
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14141
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14142
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14143
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14144
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14145
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14146
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14147
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14149
static const double dmats2[10][10] = \
14150
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14151
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14152
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14153
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14154
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14155
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14156
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14157
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14158
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14159
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14161
// Compute reference derivatives.
14162
// Declare pointer to array of derivatives on FIAT element.
14163
double *derivatives = new double[num_derivatives];
14164
for (unsigned int r = 0; r < num_derivatives; r++)
14166
derivatives[r] = 0.000000000000000;
14167
}// end loop over 'r'
14169
// Declare derivative matrix (of polynomial basis).
14170
double dmats[10][10] = \
14171
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14172
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14173
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14174
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14175
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14176
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14177
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14178
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14179
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14180
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14182
// Declare (auxiliary) derivative matrix (of polynomial basis).
14183
double dmats_old[10][10] = \
14184
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14185
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14186
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14187
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14188
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14189
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14190
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14191
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14192
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14193
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14195
// Loop possible derivatives.
14196
for (unsigned int r = 0; r < num_derivatives; r++)
14198
// Resetting dmats values to compute next derivative.
14199
for (unsigned int t = 0; t < 10; t++)
14201
for (unsigned int u = 0; u < 10; u++)
14203
dmats[t][u] = 0.000000000000000;
14206
dmats[t][u] = 1.000000000000000;
14209
}// end loop over 'u'
14210
}// end loop over 't'
14212
// Looping derivative order to generate dmats.
14213
for (unsigned int s = 0; s < n; s++)
14215
// Updating dmats_old with new values and resetting dmats.
14216
for (unsigned int t = 0; t < 10; t++)
14218
for (unsigned int u = 0; u < 10; u++)
14220
dmats_old[t][u] = dmats[t][u];
14221
dmats[t][u] = 0.000000000000000;
14222
}// end loop over 'u'
14223
}// end loop over 't'
14225
// Update dmats using an inner product.
14226
if (combinations[r][s] == 0)
14228
for (unsigned int t = 0; t < 10; t++)
14230
for (unsigned int u = 0; u < 10; u++)
14232
for (unsigned int tu = 0; tu < 10; tu++)
14234
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
14235
}// end loop over 'tu'
14236
}// end loop over 'u'
14237
}// end loop over 't'
14240
if (combinations[r][s] == 1)
14242
for (unsigned int t = 0; t < 10; t++)
14244
for (unsigned int u = 0; u < 10; u++)
14246
for (unsigned int tu = 0; tu < 10; tu++)
14248
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
14249
}// end loop over 'tu'
14250
}// end loop over 'u'
14251
}// end loop over 't'
14254
if (combinations[r][s] == 2)
14256
for (unsigned int t = 0; t < 10; t++)
14258
for (unsigned int u = 0; u < 10; u++)
14260
for (unsigned int tu = 0; tu < 10; tu++)
14262
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
14263
}// end loop over 'tu'
14264
}// end loop over 'u'
14265
}// end loop over 't'
14268
}// end loop over 's'
14269
for (unsigned int s = 0; s < 10; s++)
14271
for (unsigned int t = 0; t < 10; t++)
14273
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
14274
}// end loop over 't'
14275
}// end loop over 's'
14276
}// end loop over 'r'
14278
// Transform derivatives back to physical element
14279
for (unsigned int r = 0; r < num_derivatives; r++)
14281
for (unsigned int s = 0; s < num_derivatives; s++)
14283
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
14284
}// end loop over 's'
14285
}// end loop over 'r'
14287
// Delete pointer to array of derivatives on FIAT element
14288
delete [] derivatives;
14290
// Delete pointer to array of combinations of derivatives and transform
14291
for (unsigned int r = 0; r < num_derivatives; r++)
14293
delete [] combinations[r];
14294
}// end loop over 'r'
14295
delete [] combinations;
14296
for (unsigned int r = 0; r < num_derivatives; r++)
14298
delete [] transform[r];
14299
}// end loop over 'r'
14300
delete [] transform;
14306
// Array of basisvalues.
14307
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
14309
// Declare helper variables.
14310
unsigned int rr = 0;
14311
unsigned int ss = 0;
14312
unsigned int tt = 0;
14313
double tmp5 = 0.000000000000000;
14314
double tmp6 = 0.000000000000000;
14315
double tmp7 = 0.000000000000000;
14316
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
14317
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
14318
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
14319
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
14320
double tmp4 = tmp3*tmp3;
14322
// Compute basisvalues.
14323
basisvalues[0] = 1.000000000000000;
14324
basisvalues[1] = tmp0;
14325
for (unsigned int r = 1; r < 2; r++)
14327
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
14328
ss = r*(r + 1)*(r + 2)/6;
14329
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
14330
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
14331
}// end loop over 'r'
14332
for (unsigned int r = 0; r < 2; r++)
14334
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
14335
ss = r*(r + 1)*(r + 2)/6;
14336
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
14337
}// end loop over 'r'
14338
for (unsigned int r = 0; r < 1; r++)
14340
for (unsigned int s = 1; s < 2 - r; s++)
14342
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
14343
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14344
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
14345
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14346
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14347
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14348
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
14349
}// end loop over 's'
14350
}// end loop over 'r'
14351
for (unsigned int r = 0; r < 2; r++)
14353
for (unsigned int s = 0; s < 2 - r; s++)
14355
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
14356
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14357
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
14358
}// end loop over 's'
14359
}// end loop over 'r'
14360
for (unsigned int r = 0; r < 1; r++)
14362
for (unsigned int s = 0; s < 1 - r; s++)
14364
for (unsigned int t = 1; t < 2 - r - s; t++)
14366
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
14367
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14368
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
14369
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14370
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14371
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14372
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
14373
}// end loop over 't'
14374
}// end loop over 's'
14375
}// end loop over 'r'
14376
for (unsigned int r = 0; r < 3; r++)
14378
for (unsigned int s = 0; s < 3 - r; s++)
14380
for (unsigned int t = 0; t < 3 - r - s; t++)
14382
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14383
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
14384
}// end loop over 't'
14385
}// end loop over 's'
14386
}// end loop over 'r'
14388
// Table(s) of coefficients.
14389
static const double coefficients0[10] = \
14390
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
14392
// Tables of derivatives of the polynomial base (transpose).
14393
static const double dmats0[10][10] = \
14394
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14395
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14396
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14397
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14398
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14399
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14400
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14401
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14402
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14403
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14405
static const double dmats1[10][10] = \
14406
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14407
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14408
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14409
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14410
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14411
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14412
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14413
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14414
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14415
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14417
static const double dmats2[10][10] = \
14418
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14419
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14420
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14421
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14422
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14423
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14424
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14425
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14426
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14427
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14429
// Compute reference derivatives.
14430
// Declare pointer to array of derivatives on FIAT element.
14431
double *derivatives = new double[num_derivatives];
14432
for (unsigned int r = 0; r < num_derivatives; r++)
14434
derivatives[r] = 0.000000000000000;
14435
}// end loop over 'r'
14437
// Declare derivative matrix (of polynomial basis).
14438
double dmats[10][10] = \
14439
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14440
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14441
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14442
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14443
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14444
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14445
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14446
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14447
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14448
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14450
// Declare (auxiliary) derivative matrix (of polynomial basis).
14451
double dmats_old[10][10] = \
14452
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14453
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14454
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14455
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14456
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14457
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14458
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14459
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14460
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14461
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14463
// Loop possible derivatives.
14464
for (unsigned int r = 0; r < num_derivatives; r++)
14466
// Resetting dmats values to compute next derivative.
14467
for (unsigned int t = 0; t < 10; t++)
14469
for (unsigned int u = 0; u < 10; u++)
14471
dmats[t][u] = 0.000000000000000;
14474
dmats[t][u] = 1.000000000000000;
14477
}// end loop over 'u'
14478
}// end loop over 't'
14480
// Looping derivative order to generate dmats.
14481
for (unsigned int s = 0; s < n; s++)
14483
// Updating dmats_old with new values and resetting dmats.
14484
for (unsigned int t = 0; t < 10; t++)
14486
for (unsigned int u = 0; u < 10; u++)
14488
dmats_old[t][u] = dmats[t][u];
14489
dmats[t][u] = 0.000000000000000;
14490
}// end loop over 'u'
14491
}// end loop over 't'
14493
// Update dmats using an inner product.
14494
if (combinations[r][s] == 0)
14496
for (unsigned int t = 0; t < 10; t++)
14498
for (unsigned int u = 0; u < 10; u++)
14500
for (unsigned int tu = 0; tu < 10; tu++)
14502
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
14503
}// end loop over 'tu'
14504
}// end loop over 'u'
14505
}// end loop over 't'
14508
if (combinations[r][s] == 1)
14510
for (unsigned int t = 0; t < 10; t++)
14512
for (unsigned int u = 0; u < 10; u++)
14514
for (unsigned int tu = 0; tu < 10; tu++)
14516
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
14517
}// end loop over 'tu'
14518
}// end loop over 'u'
14519
}// end loop over 't'
14522
if (combinations[r][s] == 2)
14524
for (unsigned int t = 0; t < 10; t++)
14526
for (unsigned int u = 0; u < 10; u++)
14528
for (unsigned int tu = 0; tu < 10; tu++)
14530
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
14531
}// end loop over 'tu'
14532
}// end loop over 'u'
14533
}// end loop over 't'
14536
}// end loop over 's'
14537
for (unsigned int s = 0; s < 10; s++)
14539
for (unsigned int t = 0; t < 10; t++)
14541
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
14542
}// end loop over 't'
14543
}// end loop over 's'
14544
}// end loop over 'r'
14546
// Transform derivatives back to physical element
14547
for (unsigned int r = 0; r < num_derivatives; r++)
14549
for (unsigned int s = 0; s < num_derivatives; s++)
14551
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
14552
}// end loop over 's'
14553
}// end loop over 'r'
14555
// Delete pointer to array of derivatives on FIAT element
14556
delete [] derivatives;
14558
// Delete pointer to array of combinations of derivatives and transform
14559
for (unsigned int r = 0; r < num_derivatives; r++)
14561
delete [] combinations[r];
14562
}// end loop over 'r'
14563
delete [] combinations;
14564
for (unsigned int r = 0; r < num_derivatives; r++)
14566
delete [] transform[r];
14567
}// end loop over 'r'
14568
delete [] transform;
14574
// Array of basisvalues.
14575
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
14577
// Declare helper variables.
14578
unsigned int rr = 0;
14579
unsigned int ss = 0;
14580
unsigned int tt = 0;
14581
double tmp5 = 0.000000000000000;
14582
double tmp6 = 0.000000000000000;
14583
double tmp7 = 0.000000000000000;
14584
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
14585
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
14586
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
14587
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
14588
double tmp4 = tmp3*tmp3;
14590
// Compute basisvalues.
14591
basisvalues[0] = 1.000000000000000;
14592
basisvalues[1] = tmp0;
14593
for (unsigned int r = 1; r < 2; r++)
14595
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
14596
ss = r*(r + 1)*(r + 2)/6;
14597
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
14598
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
14599
}// end loop over 'r'
14600
for (unsigned int r = 0; r < 2; r++)
14602
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
14603
ss = r*(r + 1)*(r + 2)/6;
14604
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
14605
}// end loop over 'r'
14606
for (unsigned int r = 0; r < 1; r++)
14608
for (unsigned int s = 1; s < 2 - r; s++)
14610
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
14611
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14612
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
14613
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14614
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14615
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14616
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
14617
}// end loop over 's'
14618
}// end loop over 'r'
14619
for (unsigned int r = 0; r < 2; r++)
14621
for (unsigned int s = 0; s < 2 - r; s++)
14623
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
14624
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14625
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
14626
}// end loop over 's'
14627
}// end loop over 'r'
14628
for (unsigned int r = 0; r < 1; r++)
14630
for (unsigned int s = 0; s < 1 - r; s++)
14632
for (unsigned int t = 1; t < 2 - r - s; t++)
14634
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
14635
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14636
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
14637
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14638
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14639
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14640
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
14641
}// end loop over 't'
14642
}// end loop over 's'
14643
}// end loop over 'r'
14644
for (unsigned int r = 0; r < 3; r++)
14646
for (unsigned int s = 0; s < 3 - r; s++)
14648
for (unsigned int t = 0; t < 3 - r - s; t++)
14650
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14651
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
14652
}// end loop over 't'
14653
}// end loop over 's'
14654
}// end loop over 'r'
14656
// Table(s) of coefficients.
14657
static const double coefficients0[10] = \
14658
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
14660
// Tables of derivatives of the polynomial base (transpose).
14661
static const double dmats0[10][10] = \
14662
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14663
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14664
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14665
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14666
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14667
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14668
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14669
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14670
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14671
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14673
static const double dmats1[10][10] = \
14674
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14675
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14676
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14677
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14678
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14679
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14680
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14681
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14682
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14683
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14685
static const double dmats2[10][10] = \
14686
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14687
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14688
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14689
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14690
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14691
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14692
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14693
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14694
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14695
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14697
// Compute reference derivatives.
14698
// Declare pointer to array of derivatives on FIAT element.
14699
double *derivatives = new double[num_derivatives];
14700
for (unsigned int r = 0; r < num_derivatives; r++)
14702
derivatives[r] = 0.000000000000000;
14703
}// end loop over 'r'
14705
// Declare derivative matrix (of polynomial basis).
14706
double dmats[10][10] = \
14707
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14708
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14709
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14710
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14711
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14712
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14713
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14714
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14715
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14716
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14718
// Declare (auxiliary) derivative matrix (of polynomial basis).
14719
double dmats_old[10][10] = \
14720
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14721
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14722
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14723
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14724
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14725
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14726
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14727
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14728
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14729
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14731
// Loop possible derivatives.
14732
for (unsigned int r = 0; r < num_derivatives; r++)
14734
// Resetting dmats values to compute next derivative.
14735
for (unsigned int t = 0; t < 10; t++)
14737
for (unsigned int u = 0; u < 10; u++)
14739
dmats[t][u] = 0.000000000000000;
14742
dmats[t][u] = 1.000000000000000;
14745
}// end loop over 'u'
14746
}// end loop over 't'
14748
// Looping derivative order to generate dmats.
14749
for (unsigned int s = 0; s < n; s++)
14751
// Updating dmats_old with new values and resetting dmats.
14752
for (unsigned int t = 0; t < 10; t++)
14754
for (unsigned int u = 0; u < 10; u++)
14756
dmats_old[t][u] = dmats[t][u];
14757
dmats[t][u] = 0.000000000000000;
14758
}// end loop over 'u'
14759
}// end loop over 't'
14761
// Update dmats using an inner product.
14762
if (combinations[r][s] == 0)
14764
for (unsigned int t = 0; t < 10; t++)
14766
for (unsigned int u = 0; u < 10; u++)
14768
for (unsigned int tu = 0; tu < 10; tu++)
14770
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
14771
}// end loop over 'tu'
14772
}// end loop over 'u'
14773
}// end loop over 't'
14776
if (combinations[r][s] == 1)
14778
for (unsigned int t = 0; t < 10; t++)
14780
for (unsigned int u = 0; u < 10; u++)
14782
for (unsigned int tu = 0; tu < 10; tu++)
14784
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
14785
}// end loop over 'tu'
14786
}// end loop over 'u'
14787
}// end loop over 't'
14790
if (combinations[r][s] == 2)
14792
for (unsigned int t = 0; t < 10; t++)
14794
for (unsigned int u = 0; u < 10; u++)
14796
for (unsigned int tu = 0; tu < 10; tu++)
14798
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
14799
}// end loop over 'tu'
14800
}// end loop over 'u'
14801
}// end loop over 't'
14804
}// end loop over 's'
14805
for (unsigned int s = 0; s < 10; s++)
14807
for (unsigned int t = 0; t < 10; t++)
14809
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
14810
}// end loop over 't'
14811
}// end loop over 's'
14812
}// end loop over 'r'
14814
// Transform derivatives back to physical element
14815
for (unsigned int r = 0; r < num_derivatives; r++)
14817
for (unsigned int s = 0; s < num_derivatives; s++)
14819
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
14820
}// end loop over 's'
14821
}// end loop over 'r'
14823
// Delete pointer to array of derivatives on FIAT element
14824
delete [] derivatives;
14826
// Delete pointer to array of combinations of derivatives and transform
14827
for (unsigned int r = 0; r < num_derivatives; r++)
14829
delete [] combinations[r];
14830
}// end loop over 'r'
14831
delete [] combinations;
14832
for (unsigned int r = 0; r < num_derivatives; r++)
14834
delete [] transform[r];
14835
}// end loop over 'r'
14836
delete [] transform;
14842
// Array of basisvalues.
14843
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
14845
// Declare helper variables.
14846
unsigned int rr = 0;
14847
unsigned int ss = 0;
14848
unsigned int tt = 0;
14849
double tmp5 = 0.000000000000000;
14850
double tmp6 = 0.000000000000000;
14851
double tmp7 = 0.000000000000000;
14852
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
14853
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
14854
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
14855
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
14856
double tmp4 = tmp3*tmp3;
14858
// Compute basisvalues.
14859
basisvalues[0] = 1.000000000000000;
14860
basisvalues[1] = tmp0;
14861
for (unsigned int r = 1; r < 2; r++)
14863
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
14864
ss = r*(r + 1)*(r + 2)/6;
14865
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
14866
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
14867
}// end loop over 'r'
14868
for (unsigned int r = 0; r < 2; r++)
14870
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
14871
ss = r*(r + 1)*(r + 2)/6;
14872
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
14873
}// end loop over 'r'
14874
for (unsigned int r = 0; r < 1; r++)
14876
for (unsigned int s = 1; s < 2 - r; s++)
14878
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
14879
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14880
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
14881
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14882
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14883
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
14884
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
14885
}// end loop over 's'
14886
}// end loop over 'r'
14887
for (unsigned int r = 0; r < 2; r++)
14889
for (unsigned int s = 0; s < 2 - r; s++)
14891
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
14892
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
14893
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
14894
}// end loop over 's'
14895
}// end loop over 'r'
14896
for (unsigned int r = 0; r < 1; r++)
14898
for (unsigned int s = 0; s < 1 - r; s++)
14900
for (unsigned int t = 1; t < 2 - r - s; t++)
14902
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
14903
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14904
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
14905
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14906
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14907
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
14908
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
14909
}// end loop over 't'
14910
}// end loop over 's'
14911
}// end loop over 'r'
14912
for (unsigned int r = 0; r < 3; r++)
14914
for (unsigned int s = 0; s < 3 - r; s++)
14916
for (unsigned int t = 0; t < 3 - r - s; t++)
14918
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
14919
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
14920
}// end loop over 't'
14921
}// end loop over 's'
14922
}// end loop over 'r'
14924
// Table(s) of coefficients.
14925
static const double coefficients0[10] = \
14926
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
14928
// Tables of derivatives of the polynomial base (transpose).
14929
static const double dmats0[10][10] = \
14930
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14931
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14932
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14933
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14934
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14935
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14936
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14937
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14938
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14939
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14941
static const double dmats1[10][10] = \
14942
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14943
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14944
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14945
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14946
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14947
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14948
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14949
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14950
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14951
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14953
static const double dmats2[10][10] = \
14954
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14955
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14956
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14957
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14958
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14959
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14960
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14961
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14962
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14963
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
14965
// Compute reference derivatives.
14966
// Declare pointer to array of derivatives on FIAT element.
14967
double *derivatives = new double[num_derivatives];
14968
for (unsigned int r = 0; r < num_derivatives; r++)
14970
derivatives[r] = 0.000000000000000;
14971
}// end loop over 'r'
14973
// Declare derivative matrix (of polynomial basis).
14974
double dmats[10][10] = \
14975
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14976
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14977
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14978
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14979
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14980
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14981
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14982
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14983
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14984
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14986
// Declare (auxiliary) derivative matrix (of polynomial basis).
14987
double dmats_old[10][10] = \
14988
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14989
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14990
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14991
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14992
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14993
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14994
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
14995
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
14996
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
14997
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
14999
// Loop possible derivatives.
15000
for (unsigned int r = 0; r < num_derivatives; r++)
15002
// Resetting dmats values to compute next derivative.
15003
for (unsigned int t = 0; t < 10; t++)
15005
for (unsigned int u = 0; u < 10; u++)
15007
dmats[t][u] = 0.000000000000000;
15010
dmats[t][u] = 1.000000000000000;
15013
}// end loop over 'u'
15014
}// end loop over 't'
15016
// Looping derivative order to generate dmats.
15017
for (unsigned int s = 0; s < n; s++)
15019
// Updating dmats_old with new values and resetting dmats.
15020
for (unsigned int t = 0; t < 10; t++)
15022
for (unsigned int u = 0; u < 10; u++)
15024
dmats_old[t][u] = dmats[t][u];
15025
dmats[t][u] = 0.000000000000000;
15026
}// end loop over 'u'
15027
}// end loop over 't'
15029
// Update dmats using an inner product.
15030
if (combinations[r][s] == 0)
15032
for (unsigned int t = 0; t < 10; t++)
15034
for (unsigned int u = 0; u < 10; u++)
15036
for (unsigned int tu = 0; tu < 10; tu++)
15038
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
15039
}// end loop over 'tu'
15040
}// end loop over 'u'
15041
}// end loop over 't'
15044
if (combinations[r][s] == 1)
15046
for (unsigned int t = 0; t < 10; t++)
15048
for (unsigned int u = 0; u < 10; u++)
15050
for (unsigned int tu = 0; tu < 10; tu++)
15052
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
15053
}// end loop over 'tu'
15054
}// end loop over 'u'
15055
}// end loop over 't'
15058
if (combinations[r][s] == 2)
15060
for (unsigned int t = 0; t < 10; t++)
15062
for (unsigned int u = 0; u < 10; u++)
15064
for (unsigned int tu = 0; tu < 10; tu++)
15066
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
15067
}// end loop over 'tu'
15068
}// end loop over 'u'
15069
}// end loop over 't'
15072
}// end loop over 's'
15073
for (unsigned int s = 0; s < 10; s++)
15075
for (unsigned int t = 0; t < 10; t++)
15077
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
15078
}// end loop over 't'
15079
}// end loop over 's'
15080
}// end loop over 'r'
15082
// Transform derivatives back to physical element
15083
for (unsigned int r = 0; r < num_derivatives; r++)
15085
for (unsigned int s = 0; s < num_derivatives; s++)
15087
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
15088
}// end loop over 's'
15089
}// end loop over 'r'
15091
// Delete pointer to array of derivatives on FIAT element
15092
delete [] derivatives;
15094
// Delete pointer to array of combinations of derivatives and transform
15095
for (unsigned int r = 0; r < num_derivatives; r++)
15097
delete [] combinations[r];
15098
}// end loop over 'r'
15099
delete [] combinations;
15100
for (unsigned int r = 0; r < num_derivatives; r++)
15102
delete [] transform[r];
15103
}// end loop over 'r'
15104
delete [] transform;
15110
// Array of basisvalues.
15111
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
15113
// Declare helper variables.
15114
unsigned int rr = 0;
15115
unsigned int ss = 0;
15116
unsigned int tt = 0;
15117
double tmp5 = 0.000000000000000;
15118
double tmp6 = 0.000000000000000;
15119
double tmp7 = 0.000000000000000;
15120
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
15121
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
15122
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
15123
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
15124
double tmp4 = tmp3*tmp3;
15126
// Compute basisvalues.
15127
basisvalues[0] = 1.000000000000000;
15128
basisvalues[1] = tmp0;
15129
for (unsigned int r = 1; r < 2; r++)
15131
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
15132
ss = r*(r + 1)*(r + 2)/6;
15133
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
15134
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
15135
}// end loop over 'r'
15136
for (unsigned int r = 0; r < 2; r++)
15138
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
15139
ss = r*(r + 1)*(r + 2)/6;
15140
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
15141
}// end loop over 'r'
15142
for (unsigned int r = 0; r < 1; r++)
15144
for (unsigned int s = 1; s < 2 - r; s++)
15146
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
15147
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
15148
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
15149
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
15150
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
15151
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
15152
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
15153
}// end loop over 's'
15154
}// end loop over 'r'
15155
for (unsigned int r = 0; r < 2; r++)
15157
for (unsigned int s = 0; s < 2 - r; s++)
15159
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
15160
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
15161
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
15162
}// end loop over 's'
15163
}// end loop over 'r'
15164
for (unsigned int r = 0; r < 1; r++)
15166
for (unsigned int s = 0; s < 1 - r; s++)
15168
for (unsigned int t = 1; t < 2 - r - s; t++)
15170
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
15171
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
15172
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
15173
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
15174
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
15175
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
15176
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
15177
}// end loop over 't'
15178
}// end loop over 's'
15179
}// end loop over 'r'
15180
for (unsigned int r = 0; r < 3; r++)
15182
for (unsigned int s = 0; s < 3 - r; s++)
15184
for (unsigned int t = 0; t < 3 - r - s; t++)
15186
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
15187
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
15188
}// end loop over 't'
15189
}// end loop over 's'
15190
}// end loop over 'r'
15192
// Table(s) of coefficients.
15193
static const double coefficients0[10] = \
15194
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
15196
// Tables of derivatives of the polynomial base (transpose).
15197
static const double dmats0[10][10] = \
15198
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15199
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15200
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15201
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15202
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15203
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15204
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15205
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15206
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15207
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
15209
static const double dmats1[10][10] = \
15210
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15211
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15212
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15213
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15214
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15215
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15216
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15217
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15218
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15219
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
15221
static const double dmats2[10][10] = \
15222
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15223
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15224
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15225
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15226
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15227
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15228
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15229
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15230
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15231
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
15233
// Compute reference derivatives.
15234
// Declare pointer to array of derivatives on FIAT element.
15235
double *derivatives = new double[num_derivatives];
15236
for (unsigned int r = 0; r < num_derivatives; r++)
15238
derivatives[r] = 0.000000000000000;
15239
}// end loop over 'r'
15241
// Declare derivative matrix (of polynomial basis).
15242
double dmats[10][10] = \
15243
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15244
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15245
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15246
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15247
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15248
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15249
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15250
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
15251
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
15252
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
15254
// Declare (auxiliary) derivative matrix (of polynomial basis).
15255
double dmats_old[10][10] = \
15256
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15257
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15258
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15259
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15260
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15261
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15262
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
15263
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
15264
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
15265
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
15267
// Loop possible derivatives.
15268
for (unsigned int r = 0; r < num_derivatives; r++)
15270
// Resetting dmats values to compute next derivative.
15271
for (unsigned int t = 0; t < 10; t++)
15273
for (unsigned int u = 0; u < 10; u++)
15275
dmats[t][u] = 0.000000000000000;
15278
dmats[t][u] = 1.000000000000000;
15281
}// end loop over 'u'
15282
}// end loop over 't'
15284
// Looping derivative order to generate dmats.
15285
for (unsigned int s = 0; s < n; s++)
15287
// Updating dmats_old with new values and resetting dmats.
15288
for (unsigned int t = 0; t < 10; t++)
15290
for (unsigned int u = 0; u < 10; u++)
15292
dmats_old[t][u] = dmats[t][u];
15293
dmats[t][u] = 0.000000000000000;
15294
}// end loop over 'u'
15295
}// end loop over 't'
15297
// Update dmats using an inner product.
15298
if (combinations[r][s] == 0)
15300
for (unsigned int t = 0; t < 10; t++)
15302
for (unsigned int u = 0; u < 10; u++)
15304
for (unsigned int tu = 0; tu < 10; tu++)
15306
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
15307
}// end loop over 'tu'
15308
}// end loop over 'u'
15309
}// end loop over 't'
15312
if (combinations[r][s] == 1)
15314
for (unsigned int t = 0; t < 10; t++)
15316
for (unsigned int u = 0; u < 10; u++)
15318
for (unsigned int tu = 0; tu < 10; tu++)
15320
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
15321
}// end loop over 'tu'
15322
}// end loop over 'u'
15323
}// end loop over 't'
15326
if (combinations[r][s] == 2)
15328
for (unsigned int t = 0; t < 10; t++)
15330
for (unsigned int u = 0; u < 10; u++)
15332
for (unsigned int tu = 0; tu < 10; tu++)
15334
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
15335
}// end loop over 'tu'
15336
}// end loop over 'u'
15337
}// end loop over 't'
15340
}// end loop over 's'
15341
for (unsigned int s = 0; s < 10; s++)
15343
for (unsigned int t = 0; t < 10; t++)
15345
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
15346
}// end loop over 't'
15347
}// end loop over 's'
15348
}// end loop over 'r'
15350
// Transform derivatives back to physical element
15351
for (unsigned int r = 0; r < num_derivatives; r++)
15353
for (unsigned int s = 0; s < num_derivatives; s++)
15355
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
15356
}// end loop over 's'
15357
}// end loop over 'r'
15359
// Delete pointer to array of derivatives on FIAT element
15360
delete [] derivatives;
15362
// Delete pointer to array of combinations of derivatives and transform
15363
for (unsigned int r = 0; r < num_derivatives; r++)
15365
delete [] combinations[r];
15366
}// end loop over 'r'
15367
delete [] combinations;
15368
for (unsigned int r = 0; r < num_derivatives; r++)
15370
delete [] transform[r];
15371
}// end loop over 'r'
15372
delete [] transform;
15379
/// Evaluate order n derivatives of all basis functions at given point in cell
15380
virtual void evaluate_basis_derivatives_all(unsigned int n,
15382
const double* coordinates,
15383
const ufc::cell& c) const
15385
// Compute number of derivatives.
15386
unsigned int num_derivatives = 1;
15387
for (unsigned int r = 0; r < n; r++)
15389
num_derivatives *= 3;
15390
}// end loop over 'r'
15392
// Helper variable to hold values of a single dof.
15393
double *dof_values = new double[3*num_derivatives];
15394
for (unsigned int r = 0; r < 3*num_derivatives; r++)
15396
dof_values[r] = 0.000000000000000;
15397
}// end loop over 'r'
15399
// Loop dofs and call evaluate_basis_derivatives.
15400
for (unsigned int r = 0; r < 30; r++)
15402
evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
15403
for (unsigned int s = 0; s < 3*num_derivatives; s++)
15405
values[r*3*num_derivatives + s] = dof_values[s];
15406
}// end loop over 's'
15407
}// end loop over 'r'
15410
delete [] dof_values;
15413
/// Evaluate linear functional for dof i on the function f
15414
virtual double evaluate_dof(unsigned int i,
15415
const ufc::function& f,
15416
const ufc::cell& c) const
15418
// Declare variables for result of evaluation.
15421
// Declare variable for physical coordinates.
15423
const double * const * x = c.coordinates;
15431
f.evaluate(vals, y, c);
15440
f.evaluate(vals, y, c);
15449
f.evaluate(vals, y, c);
15458
f.evaluate(vals, y, c);
15464
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
15465
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
15466
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
15467
f.evaluate(vals, y, c);
15473
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
15474
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
15475
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
15476
f.evaluate(vals, y, c);
15482
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
15483
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
15484
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
15485
f.evaluate(vals, y, c);
15491
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
15492
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
15493
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
15494
f.evaluate(vals, y, c);
15500
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
15501
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
15502
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
15503
f.evaluate(vals, y, c);
15509
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
15510
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
15511
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
15512
f.evaluate(vals, y, c);
15521
f.evaluate(vals, y, c);
15530
f.evaluate(vals, y, c);
15539
f.evaluate(vals, y, c);
15548
f.evaluate(vals, y, c);
15554
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
15555
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
15556
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
15557
f.evaluate(vals, y, c);
15563
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
15564
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
15565
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
15566
f.evaluate(vals, y, c);
15572
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
15573
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
15574
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
15575
f.evaluate(vals, y, c);
15581
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
15582
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
15583
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
15584
f.evaluate(vals, y, c);
15590
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
15591
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
15592
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
15593
f.evaluate(vals, y, c);
15599
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
15600
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
15601
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
15602
f.evaluate(vals, y, c);
15611
f.evaluate(vals, y, c);
15620
f.evaluate(vals, y, c);
15629
f.evaluate(vals, y, c);
15638
f.evaluate(vals, y, c);
15644
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
15645
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
15646
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
15647
f.evaluate(vals, y, c);
15653
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
15654
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
15655
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
15656
f.evaluate(vals, y, c);
15662
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
15663
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
15664
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
15665
f.evaluate(vals, y, c);
15671
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
15672
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
15673
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
15674
f.evaluate(vals, y, c);
15680
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
15681
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
15682
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
15683
f.evaluate(vals, y, c);
15689
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
15690
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
15691
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
15692
f.evaluate(vals, y, c);
15698
return 0.000000000000000;
15701
/// Evaluate linear functionals for all dofs on the function f
15702
virtual void evaluate_dofs(double* values,
15703
const ufc::function& f,
15704
const ufc::cell& c) const
15706
// Declare variables for result of evaluation.
15709
// Declare variable for physical coordinates.
15711
const double * const * x = c.coordinates;
15715
f.evaluate(vals, y, c);
15716
values[0] = vals[0];
15720
f.evaluate(vals, y, c);
15721
values[1] = vals[0];
15725
f.evaluate(vals, y, c);
15726
values[2] = vals[0];
15730
f.evaluate(vals, y, c);
15731
values[3] = vals[0];
15732
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
15733
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
15734
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
15735
f.evaluate(vals, y, c);
15736
values[4] = vals[0];
15737
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
15738
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
15739
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
15740
f.evaluate(vals, y, c);
15741
values[5] = vals[0];
15742
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
15743
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
15744
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
15745
f.evaluate(vals, y, c);
15746
values[6] = vals[0];
15747
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
15748
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
15749
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
15750
f.evaluate(vals, y, c);
15751
values[7] = vals[0];
15752
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
15753
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
15754
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
15755
f.evaluate(vals, y, c);
15756
values[8] = vals[0];
15757
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
15758
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
15759
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
15760
f.evaluate(vals, y, c);
15761
values[9] = vals[0];
15765
f.evaluate(vals, y, c);
15766
values[10] = vals[1];
15770
f.evaluate(vals, y, c);
15771
values[11] = vals[1];
15775
f.evaluate(vals, y, c);
15776
values[12] = vals[1];
15780
f.evaluate(vals, y, c);
15781
values[13] = vals[1];
15782
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
15783
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
15784
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
15785
f.evaluate(vals, y, c);
15786
values[14] = vals[1];
15787
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
15788
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
15789
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
15790
f.evaluate(vals, y, c);
15791
values[15] = vals[1];
15792
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
15793
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
15794
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
15795
f.evaluate(vals, y, c);
15796
values[16] = vals[1];
15797
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
15798
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
15799
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
15800
f.evaluate(vals, y, c);
15801
values[17] = vals[1];
15802
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
15803
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
15804
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
15805
f.evaluate(vals, y, c);
15806
values[18] = vals[1];
15807
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
15808
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
15809
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
15810
f.evaluate(vals, y, c);
15811
values[19] = vals[1];
15815
f.evaluate(vals, y, c);
15816
values[20] = vals[2];
15820
f.evaluate(vals, y, c);
15821
values[21] = vals[2];
15825
f.evaluate(vals, y, c);
15826
values[22] = vals[2];
15830
f.evaluate(vals, y, c);
15831
values[23] = vals[2];
15832
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
15833
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
15834
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
15835
f.evaluate(vals, y, c);
15836
values[24] = vals[2];
15837
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
15838
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
15839
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
15840
f.evaluate(vals, y, c);
15841
values[25] = vals[2];
15842
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
15843
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
15844
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
15845
f.evaluate(vals, y, c);
15846
values[26] = vals[2];
15847
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
15848
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
15849
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
15850
f.evaluate(vals, y, c);
15851
values[27] = vals[2];
15852
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
15853
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
15854
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
15855
f.evaluate(vals, y, c);
15856
values[28] = vals[2];
15857
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
15858
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
15859
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
15860
f.evaluate(vals, y, c);
15861
values[29] = vals[2];
15864
/// Interpolate vertex values from dof values
15865
virtual void interpolate_vertex_values(double* vertex_values,
15866
const double* dof_values,
15867
const ufc::cell& c) const
15869
// Evaluate function and change variables
15870
vertex_values[0] = dof_values[0];
15871
vertex_values[3] = dof_values[1];
15872
vertex_values[6] = dof_values[2];
15873
vertex_values[9] = dof_values[3];
15874
// Evaluate function and change variables
15875
vertex_values[1] = dof_values[10];
15876
vertex_values[4] = dof_values[11];
15877
vertex_values[7] = dof_values[12];
15878
vertex_values[10] = dof_values[13];
15879
// Evaluate function and change variables
15880
vertex_values[2] = dof_values[20];
15881
vertex_values[5] = dof_values[21];
15882
vertex_values[8] = dof_values[22];
15883
vertex_values[11] = dof_values[23];
15886
/// Map coordinate xhat from reference cell to coordinate x in cell
15887
virtual void map_from_reference_cell(double* x,
15888
const double* xhat,
15889
const ufc::cell& c)
15891
throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
15894
/// Map from coordinate x in cell to coordinate xhat in reference cell
15895
virtual void map_to_reference_cell(double* xhat,
15897
const ufc::cell& c)
15899
throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
15902
/// Return the number of sub elements (for a mixed element)
15903
virtual unsigned int num_sub_elements() const
15908
/// Create a new finite element for sub element i (for a mixed element)
15909
virtual ufc::finite_element* create_sub_element(unsigned int i) const
15915
return new stokes_finite_element_0();
15920
return new stokes_finite_element_0();
15925
return new stokes_finite_element_0();
15933
/// Create a new class instance
15934
virtual ufc::finite_element* create() const
15936
return new stokes_finite_element_1();
15941
/// This class defines the interface for a finite element.
15943
class stokes_finite_element_2: public ufc::finite_element
15948
stokes_finite_element_2() : ufc::finite_element()
15954
virtual ~stokes_finite_element_2()
15959
/// Return a string identifying the finite element
15960
virtual const char* signature() const
15962
return "FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)";
15965
/// Return the cell shape
15966
virtual ufc::shape cell_shape() const
15968
return ufc::tetrahedron;
15971
/// Return the topological dimension of the cell shape
15972
virtual unsigned int topological_dimension() const
15977
/// Return the geometric dimension of the cell shape
15978
virtual unsigned int geometric_dimension() const
15983
/// Return the dimension of the finite element function space
15984
virtual unsigned int space_dimension() const
15989
/// Return the rank of the value space
15990
virtual unsigned int value_rank() const
15995
/// Return the dimension of the value space for axis i
15996
virtual unsigned int value_dimension(unsigned int i) const
16001
/// Evaluate basis function i at given point in cell
16002
virtual void evaluate_basis(unsigned int i,
16004
const double* coordinates,
16005
const ufc::cell& c) const
16007
// Extract vertex coordinates
16008
const double * const * x = c.coordinates;
16010
// Compute Jacobian of affine map from reference cell
16011
const double J_00 = x[1][0] - x[0][0];
16012
const double J_01 = x[2][0] - x[0][0];
16013
const double J_02 = x[3][0] - x[0][0];
16014
const double J_10 = x[1][1] - x[0][1];
16015
const double J_11 = x[2][1] - x[0][1];
16016
const double J_12 = x[3][1] - x[0][1];
16017
const double J_20 = x[1][2] - x[0][2];
16018
const double J_21 = x[2][2] - x[0][2];
16019
const double J_22 = x[3][2] - x[0][2];
16021
// Compute sub determinants
16022
const double d_00 = J_11*J_22 - J_12*J_21;
16023
const double d_01 = J_12*J_20 - J_10*J_22;
16024
const double d_02 = J_10*J_21 - J_11*J_20;
16025
const double d_10 = J_02*J_21 - J_01*J_22;
16026
const double d_11 = J_00*J_22 - J_02*J_20;
16027
const double d_12 = J_01*J_20 - J_00*J_21;
16028
const double d_20 = J_01*J_12 - J_02*J_11;
16029
const double d_21 = J_02*J_10 - J_00*J_12;
16030
const double d_22 = J_00*J_11 - J_01*J_10;
16032
// Compute determinant of Jacobian
16033
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
16035
// Compute inverse of Jacobian
16037
// Compute constants
16038
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
16039
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
16040
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
16042
// Get coordinates and map to the reference (FIAT) element
16043
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
16044
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
16045
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
16049
*values = 0.000000000000000;
16055
// Array of basisvalues.
16056
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16058
// Declare helper variables.
16059
unsigned int rr = 0;
16060
unsigned int ss = 0;
16061
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16063
// Compute basisvalues.
16064
basisvalues[0] = 1.000000000000000;
16065
basisvalues[1] = tmp0;
16066
for (unsigned int r = 0; r < 1; r++)
16068
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16069
ss = r*(r + 1)*(r + 2)/6;
16070
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16071
}// end loop over 'r'
16072
for (unsigned int r = 0; r < 1; r++)
16074
for (unsigned int s = 0; s < 1 - r; s++)
16076
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16077
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16078
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16079
}// end loop over 's'
16080
}// end loop over 'r'
16081
for (unsigned int r = 0; r < 2; r++)
16083
for (unsigned int s = 0; s < 2 - r; s++)
16085
for (unsigned int t = 0; t < 2 - r - s; t++)
16087
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16088
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16089
}// end loop over 't'
16090
}// end loop over 's'
16091
}// end loop over 'r'
16093
// Table(s) of coefficients.
16094
static const double coefficients0[4] = \
16095
{0.288675134594813, -0.182574185835055, -0.105409255338946, -0.074535599249993};
16097
// Compute value(s).
16098
for (unsigned int r = 0; r < 4; r++)
16100
*values += coefficients0[r]*basisvalues[r];
16101
}// end loop over 'r'
16107
// Array of basisvalues.
16108
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16110
// Declare helper variables.
16111
unsigned int rr = 0;
16112
unsigned int ss = 0;
16113
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16115
// Compute basisvalues.
16116
basisvalues[0] = 1.000000000000000;
16117
basisvalues[1] = tmp0;
16118
for (unsigned int r = 0; r < 1; r++)
16120
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16121
ss = r*(r + 1)*(r + 2)/6;
16122
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16123
}// end loop over 'r'
16124
for (unsigned int r = 0; r < 1; r++)
16126
for (unsigned int s = 0; s < 1 - r; s++)
16128
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16129
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16130
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16131
}// end loop over 's'
16132
}// end loop over 'r'
16133
for (unsigned int r = 0; r < 2; r++)
16135
for (unsigned int s = 0; s < 2 - r; s++)
16137
for (unsigned int t = 0; t < 2 - r - s; t++)
16139
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16140
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16141
}// end loop over 't'
16142
}// end loop over 's'
16143
}// end loop over 'r'
16145
// Table(s) of coefficients.
16146
static const double coefficients0[4] = \
16147
{0.288675134594813, 0.182574185835055, -0.105409255338946, -0.074535599249993};
16149
// Compute value(s).
16150
for (unsigned int r = 0; r < 4; r++)
16152
*values += coefficients0[r]*basisvalues[r];
16153
}// end loop over 'r'
16159
// Array of basisvalues.
16160
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16162
// Declare helper variables.
16163
unsigned int rr = 0;
16164
unsigned int ss = 0;
16165
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16167
// Compute basisvalues.
16168
basisvalues[0] = 1.000000000000000;
16169
basisvalues[1] = tmp0;
16170
for (unsigned int r = 0; r < 1; r++)
16172
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16173
ss = r*(r + 1)*(r + 2)/6;
16174
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16175
}// end loop over 'r'
16176
for (unsigned int r = 0; r < 1; r++)
16178
for (unsigned int s = 0; s < 1 - r; s++)
16180
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16181
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16182
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16183
}// end loop over 's'
16184
}// end loop over 'r'
16185
for (unsigned int r = 0; r < 2; r++)
16187
for (unsigned int s = 0; s < 2 - r; s++)
16189
for (unsigned int t = 0; t < 2 - r - s; t++)
16191
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16192
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16193
}// end loop over 't'
16194
}// end loop over 's'
16195
}// end loop over 'r'
16197
// Table(s) of coefficients.
16198
static const double coefficients0[4] = \
16199
{0.288675134594813, 0.000000000000000, 0.210818510677892, -0.074535599249993};
16201
// Compute value(s).
16202
for (unsigned int r = 0; r < 4; r++)
16204
*values += coefficients0[r]*basisvalues[r];
16205
}// end loop over 'r'
16211
// Array of basisvalues.
16212
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16214
// Declare helper variables.
16215
unsigned int rr = 0;
16216
unsigned int ss = 0;
16217
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16219
// Compute basisvalues.
16220
basisvalues[0] = 1.000000000000000;
16221
basisvalues[1] = tmp0;
16222
for (unsigned int r = 0; r < 1; r++)
16224
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16225
ss = r*(r + 1)*(r + 2)/6;
16226
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16227
}// end loop over 'r'
16228
for (unsigned int r = 0; r < 1; r++)
16230
for (unsigned int s = 0; s < 1 - r; s++)
16232
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16233
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16234
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16235
}// end loop over 's'
16236
}// end loop over 'r'
16237
for (unsigned int r = 0; r < 2; r++)
16239
for (unsigned int s = 0; s < 2 - r; s++)
16241
for (unsigned int t = 0; t < 2 - r - s; t++)
16243
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16244
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16245
}// end loop over 't'
16246
}// end loop over 's'
16247
}// end loop over 'r'
16249
// Table(s) of coefficients.
16250
static const double coefficients0[4] = \
16251
{0.288675134594813, 0.000000000000000, 0.000000000000000, 0.223606797749979};
16253
// Compute value(s).
16254
for (unsigned int r = 0; r < 4; r++)
16256
*values += coefficients0[r]*basisvalues[r];
16257
}// end loop over 'r'
16264
/// Evaluate all basis functions at given point in cell
16265
virtual void evaluate_basis_all(double* values,
16266
const double* coordinates,
16267
const ufc::cell& c) const
16269
// Helper variable to hold values of a single dof.
16270
double dof_values = 0.000000000000000;
16272
// Loop dofs and call evaluate_basis.
16273
for (unsigned int r = 0; r < 4; r++)
16275
evaluate_basis(r, &dof_values, coordinates, c);
16276
values[r] = dof_values;
16277
}// end loop over 'r'
16280
/// Evaluate order n derivatives of basis function i at given point in cell
16281
virtual void evaluate_basis_derivatives(unsigned int i,
16284
const double* coordinates,
16285
const ufc::cell& c) const
16287
// Extract vertex coordinates
16288
const double * const * x = c.coordinates;
16290
// Compute Jacobian of affine map from reference cell
16291
const double J_00 = x[1][0] - x[0][0];
16292
const double J_01 = x[2][0] - x[0][0];
16293
const double J_02 = x[3][0] - x[0][0];
16294
const double J_10 = x[1][1] - x[0][1];
16295
const double J_11 = x[2][1] - x[0][1];
16296
const double J_12 = x[3][1] - x[0][1];
16297
const double J_20 = x[1][2] - x[0][2];
16298
const double J_21 = x[2][2] - x[0][2];
16299
const double J_22 = x[3][2] - x[0][2];
16301
// Compute sub determinants
16302
const double d_00 = J_11*J_22 - J_12*J_21;
16303
const double d_01 = J_12*J_20 - J_10*J_22;
16304
const double d_02 = J_10*J_21 - J_11*J_20;
16305
const double d_10 = J_02*J_21 - J_01*J_22;
16306
const double d_11 = J_00*J_22 - J_02*J_20;
16307
const double d_12 = J_01*J_20 - J_00*J_21;
16308
const double d_20 = J_01*J_12 - J_02*J_11;
16309
const double d_21 = J_02*J_10 - J_00*J_12;
16310
const double d_22 = J_00*J_11 - J_01*J_10;
16312
// Compute determinant of Jacobian
16313
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
16315
// Compute inverse of Jacobian
16316
const double K_00 = d_00 / detJ;
16317
const double K_01 = d_10 / detJ;
16318
const double K_02 = d_20 / detJ;
16319
const double K_10 = d_01 / detJ;
16320
const double K_11 = d_11 / detJ;
16321
const double K_12 = d_21 / detJ;
16322
const double K_20 = d_02 / detJ;
16323
const double K_21 = d_12 / detJ;
16324
const double K_22 = d_22 / detJ;
16326
// Compute constants
16327
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
16328
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
16329
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
16331
// Get coordinates and map to the reference (FIAT) element
16332
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
16333
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
16334
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
16337
// Compute number of derivatives.
16338
unsigned int num_derivatives = 1;
16339
for (unsigned int r = 0; r < n; r++)
16341
num_derivatives *= 3;
16342
}// end loop over 'r'
16344
// Declare pointer to two dimensional array that holds combinations of derivatives and initialise
16345
unsigned int **combinations = new unsigned int *[num_derivatives];
16346
for (unsigned int row = 0; row < num_derivatives; row++)
16348
combinations[row] = new unsigned int [n];
16349
for (unsigned int col = 0; col < n; col++)
16350
combinations[row][col] = 0;
16353
// Generate combinations of derivatives
16354
for (unsigned int row = 1; row < num_derivatives; row++)
16356
for (unsigned int num = 0; num < row; num++)
16358
for (unsigned int col = n-1; col+1 > 0; col--)
16360
if (combinations[row][col] + 1 > 2)
16361
combinations[row][col] = 0;
16364
combinations[row][col] += 1;
16371
// Compute inverse of Jacobian
16372
const double Jinv[3][3] = {{K_00, K_01, K_02}, {K_10, K_11, K_12}, {K_20, K_21, K_22}};
16374
// Declare transformation matrix
16375
// Declare pointer to two dimensional array and initialise
16376
double **transform = new double *[num_derivatives];
16378
for (unsigned int j = 0; j < num_derivatives; j++)
16380
transform[j] = new double [num_derivatives];
16381
for (unsigned int k = 0; k < num_derivatives; k++)
16382
transform[j][k] = 1;
16385
// Construct transformation matrix
16386
for (unsigned int row = 0; row < num_derivatives; row++)
16388
for (unsigned int col = 0; col < num_derivatives; col++)
16390
for (unsigned int k = 0; k < n; k++)
16391
transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
16395
// Reset values. Assuming that values is always an array.
16396
for (unsigned int r = 0; r < num_derivatives; r++)
16398
values[r] = 0.000000000000000;
16399
}// end loop over 'r'
16406
// Array of basisvalues.
16407
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16409
// Declare helper variables.
16410
unsigned int rr = 0;
16411
unsigned int ss = 0;
16412
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16414
// Compute basisvalues.
16415
basisvalues[0] = 1.000000000000000;
16416
basisvalues[1] = tmp0;
16417
for (unsigned int r = 0; r < 1; r++)
16419
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16420
ss = r*(r + 1)*(r + 2)/6;
16421
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16422
}// end loop over 'r'
16423
for (unsigned int r = 0; r < 1; r++)
16425
for (unsigned int s = 0; s < 1 - r; s++)
16427
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16428
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16429
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16430
}// end loop over 's'
16431
}// end loop over 'r'
16432
for (unsigned int r = 0; r < 2; r++)
16434
for (unsigned int s = 0; s < 2 - r; s++)
16436
for (unsigned int t = 0; t < 2 - r - s; t++)
16438
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16439
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16440
}// end loop over 't'
16441
}// end loop over 's'
16442
}// end loop over 'r'
16444
// Table(s) of coefficients.
16445
static const double coefficients0[4] = \
16446
{0.288675134594813, -0.182574185835055, -0.105409255338946, -0.074535599249993};
16448
// Tables of derivatives of the polynomial base (transpose).
16449
static const double dmats0[4][4] = \
16450
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16451
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16452
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16453
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16455
static const double dmats1[4][4] = \
16456
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16457
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16458
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16459
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16461
static const double dmats2[4][4] = \
16462
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16463
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16464
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16465
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16467
// Compute reference derivatives.
16468
// Declare pointer to array of derivatives on FIAT element.
16469
double *derivatives = new double[num_derivatives];
16470
for (unsigned int r = 0; r < num_derivatives; r++)
16472
derivatives[r] = 0.000000000000000;
16473
}// end loop over 'r'
16475
// Declare derivative matrix (of polynomial basis).
16476
double dmats[4][4] = \
16477
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16478
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
16479
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
16480
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
16482
// Declare (auxiliary) derivative matrix (of polynomial basis).
16483
double dmats_old[4][4] = \
16484
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16485
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
16486
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
16487
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
16489
// Loop possible derivatives.
16490
for (unsigned int r = 0; r < num_derivatives; r++)
16492
// Resetting dmats values to compute next derivative.
16493
for (unsigned int t = 0; t < 4; t++)
16495
for (unsigned int u = 0; u < 4; u++)
16497
dmats[t][u] = 0.000000000000000;
16500
dmats[t][u] = 1.000000000000000;
16503
}// end loop over 'u'
16504
}// end loop over 't'
16506
// Looping derivative order to generate dmats.
16507
for (unsigned int s = 0; s < n; s++)
16509
// Updating dmats_old with new values and resetting dmats.
16510
for (unsigned int t = 0; t < 4; t++)
16512
for (unsigned int u = 0; u < 4; u++)
16514
dmats_old[t][u] = dmats[t][u];
16515
dmats[t][u] = 0.000000000000000;
16516
}// end loop over 'u'
16517
}// end loop over 't'
16519
// Update dmats using an inner product.
16520
if (combinations[r][s] == 0)
16522
for (unsigned int t = 0; t < 4; t++)
16524
for (unsigned int u = 0; u < 4; u++)
16526
for (unsigned int tu = 0; tu < 4; tu++)
16528
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
16529
}// end loop over 'tu'
16530
}// end loop over 'u'
16531
}// end loop over 't'
16534
if (combinations[r][s] == 1)
16536
for (unsigned int t = 0; t < 4; t++)
16538
for (unsigned int u = 0; u < 4; u++)
16540
for (unsigned int tu = 0; tu < 4; tu++)
16542
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
16543
}// end loop over 'tu'
16544
}// end loop over 'u'
16545
}// end loop over 't'
16548
if (combinations[r][s] == 2)
16550
for (unsigned int t = 0; t < 4; t++)
16552
for (unsigned int u = 0; u < 4; u++)
16554
for (unsigned int tu = 0; tu < 4; tu++)
16556
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
16557
}// end loop over 'tu'
16558
}// end loop over 'u'
16559
}// end loop over 't'
16562
}// end loop over 's'
16563
for (unsigned int s = 0; s < 4; s++)
16565
for (unsigned int t = 0; t < 4; t++)
16567
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
16568
}// end loop over 't'
16569
}// end loop over 's'
16570
}// end loop over 'r'
16572
// Transform derivatives back to physical element
16573
for (unsigned int r = 0; r < num_derivatives; r++)
16575
for (unsigned int s = 0; s < num_derivatives; s++)
16577
values[r] += transform[r][s]*derivatives[s];
16578
}// end loop over 's'
16579
}// end loop over 'r'
16581
// Delete pointer to array of derivatives on FIAT element
16582
delete [] derivatives;
16584
// Delete pointer to array of combinations of derivatives and transform
16585
for (unsigned int r = 0; r < num_derivatives; r++)
16587
delete [] combinations[r];
16588
}// end loop over 'r'
16589
delete [] combinations;
16590
for (unsigned int r = 0; r < num_derivatives; r++)
16592
delete [] transform[r];
16593
}// end loop over 'r'
16594
delete [] transform;
16600
// Array of basisvalues.
16601
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16603
// Declare helper variables.
16604
unsigned int rr = 0;
16605
unsigned int ss = 0;
16606
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16608
// Compute basisvalues.
16609
basisvalues[0] = 1.000000000000000;
16610
basisvalues[1] = tmp0;
16611
for (unsigned int r = 0; r < 1; r++)
16613
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16614
ss = r*(r + 1)*(r + 2)/6;
16615
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16616
}// end loop over 'r'
16617
for (unsigned int r = 0; r < 1; r++)
16619
for (unsigned int s = 0; s < 1 - r; s++)
16621
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16622
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16623
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16624
}// end loop over 's'
16625
}// end loop over 'r'
16626
for (unsigned int r = 0; r < 2; r++)
16628
for (unsigned int s = 0; s < 2 - r; s++)
16630
for (unsigned int t = 0; t < 2 - r - s; t++)
16632
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16633
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16634
}// end loop over 't'
16635
}// end loop over 's'
16636
}// end loop over 'r'
16638
// Table(s) of coefficients.
16639
static const double coefficients0[4] = \
16640
{0.288675134594813, 0.182574185835055, -0.105409255338946, -0.074535599249993};
16642
// Tables of derivatives of the polynomial base (transpose).
16643
static const double dmats0[4][4] = \
16644
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16645
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16646
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16647
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16649
static const double dmats1[4][4] = \
16650
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16651
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16652
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16653
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16655
static const double dmats2[4][4] = \
16656
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16657
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16658
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16659
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16661
// Compute reference derivatives.
16662
// Declare pointer to array of derivatives on FIAT element.
16663
double *derivatives = new double[num_derivatives];
16664
for (unsigned int r = 0; r < num_derivatives; r++)
16666
derivatives[r] = 0.000000000000000;
16667
}// end loop over 'r'
16669
// Declare derivative matrix (of polynomial basis).
16670
double dmats[4][4] = \
16671
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16672
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
16673
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
16674
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
16676
// Declare (auxiliary) derivative matrix (of polynomial basis).
16677
double dmats_old[4][4] = \
16678
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16679
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
16680
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
16681
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
16683
// Loop possible derivatives.
16684
for (unsigned int r = 0; r < num_derivatives; r++)
16686
// Resetting dmats values to compute next derivative.
16687
for (unsigned int t = 0; t < 4; t++)
16689
for (unsigned int u = 0; u < 4; u++)
16691
dmats[t][u] = 0.000000000000000;
16694
dmats[t][u] = 1.000000000000000;
16697
}// end loop over 'u'
16698
}// end loop over 't'
16700
// Looping derivative order to generate dmats.
16701
for (unsigned int s = 0; s < n; s++)
16703
// Updating dmats_old with new values and resetting dmats.
16704
for (unsigned int t = 0; t < 4; t++)
16706
for (unsigned int u = 0; u < 4; u++)
16708
dmats_old[t][u] = dmats[t][u];
16709
dmats[t][u] = 0.000000000000000;
16710
}// end loop over 'u'
16711
}// end loop over 't'
16713
// Update dmats using an inner product.
16714
if (combinations[r][s] == 0)
16716
for (unsigned int t = 0; t < 4; t++)
16718
for (unsigned int u = 0; u < 4; u++)
16720
for (unsigned int tu = 0; tu < 4; tu++)
16722
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
16723
}// end loop over 'tu'
16724
}// end loop over 'u'
16725
}// end loop over 't'
16728
if (combinations[r][s] == 1)
16730
for (unsigned int t = 0; t < 4; t++)
16732
for (unsigned int u = 0; u < 4; u++)
16734
for (unsigned int tu = 0; tu < 4; tu++)
16736
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
16737
}// end loop over 'tu'
16738
}// end loop over 'u'
16739
}// end loop over 't'
16742
if (combinations[r][s] == 2)
16744
for (unsigned int t = 0; t < 4; t++)
16746
for (unsigned int u = 0; u < 4; u++)
16748
for (unsigned int tu = 0; tu < 4; tu++)
16750
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
16751
}// end loop over 'tu'
16752
}// end loop over 'u'
16753
}// end loop over 't'
16756
}// end loop over 's'
16757
for (unsigned int s = 0; s < 4; s++)
16759
for (unsigned int t = 0; t < 4; t++)
16761
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
16762
}// end loop over 't'
16763
}// end loop over 's'
16764
}// end loop over 'r'
16766
// Transform derivatives back to physical element
16767
for (unsigned int r = 0; r < num_derivatives; r++)
16769
for (unsigned int s = 0; s < num_derivatives; s++)
16771
values[r] += transform[r][s]*derivatives[s];
16772
}// end loop over 's'
16773
}// end loop over 'r'
16775
// Delete pointer to array of derivatives on FIAT element
16776
delete [] derivatives;
16778
// Delete pointer to array of combinations of derivatives and transform
16779
for (unsigned int r = 0; r < num_derivatives; r++)
16781
delete [] combinations[r];
16782
}// end loop over 'r'
16783
delete [] combinations;
16784
for (unsigned int r = 0; r < num_derivatives; r++)
16786
delete [] transform[r];
16787
}// end loop over 'r'
16788
delete [] transform;
16794
// Array of basisvalues.
16795
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16797
// Declare helper variables.
16798
unsigned int rr = 0;
16799
unsigned int ss = 0;
16800
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16802
// Compute basisvalues.
16803
basisvalues[0] = 1.000000000000000;
16804
basisvalues[1] = tmp0;
16805
for (unsigned int r = 0; r < 1; r++)
16807
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
16808
ss = r*(r + 1)*(r + 2)/6;
16809
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
16810
}// end loop over 'r'
16811
for (unsigned int r = 0; r < 1; r++)
16813
for (unsigned int s = 0; s < 1 - r; s++)
16815
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
16816
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
16817
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
16818
}// end loop over 's'
16819
}// end loop over 'r'
16820
for (unsigned int r = 0; r < 2; r++)
16822
for (unsigned int s = 0; s < 2 - r; s++)
16824
for (unsigned int t = 0; t < 2 - r - s; t++)
16826
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
16827
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
16828
}// end loop over 't'
16829
}// end loop over 's'
16830
}// end loop over 'r'
16832
// Table(s) of coefficients.
16833
static const double coefficients0[4] = \
16834
{0.288675134594813, 0.000000000000000, 0.210818510677892, -0.074535599249993};
16836
// Tables of derivatives of the polynomial base (transpose).
16837
static const double dmats0[4][4] = \
16838
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16839
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16840
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16841
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16843
static const double dmats1[4][4] = \
16844
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16845
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16846
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16847
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16849
static const double dmats2[4][4] = \
16850
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16851
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16852
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16853
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
16855
// Compute reference derivatives.
16856
// Declare pointer to array of derivatives on FIAT element.
16857
double *derivatives = new double[num_derivatives];
16858
for (unsigned int r = 0; r < num_derivatives; r++)
16860
derivatives[r] = 0.000000000000000;
16861
}// end loop over 'r'
16863
// Declare derivative matrix (of polynomial basis).
16864
double dmats[4][4] = \
16865
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16866
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
16867
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
16868
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
16870
// Declare (auxiliary) derivative matrix (of polynomial basis).
16871
double dmats_old[4][4] = \
16872
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
16873
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
16874
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
16875
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
16877
// Loop possible derivatives.
16878
for (unsigned int r = 0; r < num_derivatives; r++)
16880
// Resetting dmats values to compute next derivative.
16881
for (unsigned int t = 0; t < 4; t++)
16883
for (unsigned int u = 0; u < 4; u++)
16885
dmats[t][u] = 0.000000000000000;
16888
dmats[t][u] = 1.000000000000000;
16891
}// end loop over 'u'
16892
}// end loop over 't'
16894
// Looping derivative order to generate dmats.
16895
for (unsigned int s = 0; s < n; s++)
16897
// Updating dmats_old with new values and resetting dmats.
16898
for (unsigned int t = 0; t < 4; t++)
16900
for (unsigned int u = 0; u < 4; u++)
16902
dmats_old[t][u] = dmats[t][u];
16903
dmats[t][u] = 0.000000000000000;
16904
}// end loop over 'u'
16905
}// end loop over 't'
16907
// Update dmats using an inner product.
16908
if (combinations[r][s] == 0)
16910
for (unsigned int t = 0; t < 4; t++)
16912
for (unsigned int u = 0; u < 4; u++)
16914
for (unsigned int tu = 0; tu < 4; tu++)
16916
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
16917
}// end loop over 'tu'
16918
}// end loop over 'u'
16919
}// end loop over 't'
16922
if (combinations[r][s] == 1)
16924
for (unsigned int t = 0; t < 4; t++)
16926
for (unsigned int u = 0; u < 4; u++)
16928
for (unsigned int tu = 0; tu < 4; tu++)
16930
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
16931
}// end loop over 'tu'
16932
}// end loop over 'u'
16933
}// end loop over 't'
16936
if (combinations[r][s] == 2)
16938
for (unsigned int t = 0; t < 4; t++)
16940
for (unsigned int u = 0; u < 4; u++)
16942
for (unsigned int tu = 0; tu < 4; tu++)
16944
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
16945
}// end loop over 'tu'
16946
}// end loop over 'u'
16947
}// end loop over 't'
16950
}// end loop over 's'
16951
for (unsigned int s = 0; s < 4; s++)
16953
for (unsigned int t = 0; t < 4; t++)
16955
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
16956
}// end loop over 't'
16957
}// end loop over 's'
16958
}// end loop over 'r'
16960
// Transform derivatives back to physical element
16961
for (unsigned int r = 0; r < num_derivatives; r++)
16963
for (unsigned int s = 0; s < num_derivatives; s++)
16965
values[r] += transform[r][s]*derivatives[s];
16966
}// end loop over 's'
16967
}// end loop over 'r'
16969
// Delete pointer to array of derivatives on FIAT element
16970
delete [] derivatives;
16972
// Delete pointer to array of combinations of derivatives and transform
16973
for (unsigned int r = 0; r < num_derivatives; r++)
16975
delete [] combinations[r];
16976
}// end loop over 'r'
16977
delete [] combinations;
16978
for (unsigned int r = 0; r < num_derivatives; r++)
16980
delete [] transform[r];
16981
}// end loop over 'r'
16982
delete [] transform;
16988
// Array of basisvalues.
16989
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
16991
// Declare helper variables.
16992
unsigned int rr = 0;
16993
unsigned int ss = 0;
16994
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
16996
// Compute basisvalues.
16997
basisvalues[0] = 1.000000000000000;
16998
basisvalues[1] = tmp0;
16999
for (unsigned int r = 0; r < 1; r++)
17001
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17002
ss = r*(r + 1)*(r + 2)/6;
17003
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17004
}// end loop over 'r'
17005
for (unsigned int r = 0; r < 1; r++)
17007
for (unsigned int s = 0; s < 1 - r; s++)
17009
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
17010
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17011
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
17012
}// end loop over 's'
17013
}// end loop over 'r'
17014
for (unsigned int r = 0; r < 2; r++)
17016
for (unsigned int s = 0; s < 2 - r; s++)
17018
for (unsigned int t = 0; t < 2 - r - s; t++)
17020
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17021
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
17022
}// end loop over 't'
17023
}// end loop over 's'
17024
}// end loop over 'r'
17026
// Table(s) of coefficients.
17027
static const double coefficients0[4] = \
17028
{0.288675134594813, 0.000000000000000, 0.000000000000000, 0.223606797749979};
17030
// Tables of derivatives of the polynomial base (transpose).
17031
static const double dmats0[4][4] = \
17032
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17033
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17034
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17035
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
17037
static const double dmats1[4][4] = \
17038
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17039
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17040
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17041
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
17043
static const double dmats2[4][4] = \
17044
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17045
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17046
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17047
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
17049
// Compute reference derivatives.
17050
// Declare pointer to array of derivatives on FIAT element.
17051
double *derivatives = new double[num_derivatives];
17052
for (unsigned int r = 0; r < num_derivatives; r++)
17054
derivatives[r] = 0.000000000000000;
17055
}// end loop over 'r'
17057
// Declare derivative matrix (of polynomial basis).
17058
double dmats[4][4] = \
17059
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17060
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
17061
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
17062
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
17064
// Declare (auxiliary) derivative matrix (of polynomial basis).
17065
double dmats_old[4][4] = \
17066
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
17067
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
17068
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
17069
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
17071
// Loop possible derivatives.
17072
for (unsigned int r = 0; r < num_derivatives; r++)
17074
// Resetting dmats values to compute next derivative.
17075
for (unsigned int t = 0; t < 4; t++)
17077
for (unsigned int u = 0; u < 4; u++)
17079
dmats[t][u] = 0.000000000000000;
17082
dmats[t][u] = 1.000000000000000;
17085
}// end loop over 'u'
17086
}// end loop over 't'
17088
// Looping derivative order to generate dmats.
17089
for (unsigned int s = 0; s < n; s++)
17091
// Updating dmats_old with new values and resetting dmats.
17092
for (unsigned int t = 0; t < 4; t++)
17094
for (unsigned int u = 0; u < 4; u++)
17096
dmats_old[t][u] = dmats[t][u];
17097
dmats[t][u] = 0.000000000000000;
17098
}// end loop over 'u'
17099
}// end loop over 't'
17101
// Update dmats using an inner product.
17102
if (combinations[r][s] == 0)
17104
for (unsigned int t = 0; t < 4; t++)
17106
for (unsigned int u = 0; u < 4; u++)
17108
for (unsigned int tu = 0; tu < 4; tu++)
17110
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
17111
}// end loop over 'tu'
17112
}// end loop over 'u'
17113
}// end loop over 't'
17116
if (combinations[r][s] == 1)
17118
for (unsigned int t = 0; t < 4; t++)
17120
for (unsigned int u = 0; u < 4; u++)
17122
for (unsigned int tu = 0; tu < 4; tu++)
17124
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
17125
}// end loop over 'tu'
17126
}// end loop over 'u'
17127
}// end loop over 't'
17130
if (combinations[r][s] == 2)
17132
for (unsigned int t = 0; t < 4; t++)
17134
for (unsigned int u = 0; u < 4; u++)
17136
for (unsigned int tu = 0; tu < 4; tu++)
17138
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
17139
}// end loop over 'tu'
17140
}// end loop over 'u'
17141
}// end loop over 't'
17144
}// end loop over 's'
17145
for (unsigned int s = 0; s < 4; s++)
17147
for (unsigned int t = 0; t < 4; t++)
17149
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
17150
}// end loop over 't'
17151
}// end loop over 's'
17152
}// end loop over 'r'
17154
// Transform derivatives back to physical element
17155
for (unsigned int r = 0; r < num_derivatives; r++)
17157
for (unsigned int s = 0; s < num_derivatives; s++)
17159
values[r] += transform[r][s]*derivatives[s];
17160
}// end loop over 's'
17161
}// end loop over 'r'
17163
// Delete pointer to array of derivatives on FIAT element
17164
delete [] derivatives;
17166
// Delete pointer to array of combinations of derivatives and transform
17167
for (unsigned int r = 0; r < num_derivatives; r++)
17169
delete [] combinations[r];
17170
}// end loop over 'r'
17171
delete [] combinations;
17172
for (unsigned int r = 0; r < num_derivatives; r++)
17174
delete [] transform[r];
17175
}// end loop over 'r'
17176
delete [] transform;
17183
/// Evaluate order n derivatives of all basis functions at given point in cell
17184
virtual void evaluate_basis_derivatives_all(unsigned int n,
17186
const double* coordinates,
17187
const ufc::cell& c) const
17189
// Compute number of derivatives.
17190
unsigned int num_derivatives = 1;
17191
for (unsigned int r = 0; r < n; r++)
17193
num_derivatives *= 3;
17194
}// end loop over 'r'
17196
// Helper variable to hold values of a single dof.
17197
double *dof_values = new double[num_derivatives];
17198
for (unsigned int r = 0; r < num_derivatives; r++)
17200
dof_values[r] = 0.000000000000000;
17201
}// end loop over 'r'
17203
// Loop dofs and call evaluate_basis_derivatives.
17204
for (unsigned int r = 0; r < 4; r++)
17206
evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
17207
for (unsigned int s = 0; s < num_derivatives; s++)
17209
values[r*num_derivatives + s] = dof_values[s];
17210
}// end loop over 's'
17211
}// end loop over 'r'
17214
delete [] dof_values;
17217
/// Evaluate linear functional for dof i on the function f
17218
virtual double evaluate_dof(unsigned int i,
17219
const ufc::function& f,
17220
const ufc::cell& c) const
17222
// Declare variables for result of evaluation.
17225
// Declare variable for physical coordinates.
17227
const double * const * x = c.coordinates;
17235
f.evaluate(vals, y, c);
17244
f.evaluate(vals, y, c);
17253
f.evaluate(vals, y, c);
17262
f.evaluate(vals, y, c);
17268
return 0.000000000000000;
17271
/// Evaluate linear functionals for all dofs on the function f
17272
virtual void evaluate_dofs(double* values,
17273
const ufc::function& f,
17274
const ufc::cell& c) const
17276
// Declare variables for result of evaluation.
17279
// Declare variable for physical coordinates.
17281
const double * const * x = c.coordinates;
17285
f.evaluate(vals, y, c);
17286
values[0] = vals[0];
17290
f.evaluate(vals, y, c);
17291
values[1] = vals[0];
17295
f.evaluate(vals, y, c);
17296
values[2] = vals[0];
17300
f.evaluate(vals, y, c);
17301
values[3] = vals[0];
17304
/// Interpolate vertex values from dof values
17305
virtual void interpolate_vertex_values(double* vertex_values,
17306
const double* dof_values,
17307
const ufc::cell& c) const
17309
// Evaluate function and change variables
17310
vertex_values[0] = dof_values[0];
17311
vertex_values[1] = dof_values[1];
17312
vertex_values[2] = dof_values[2];
17313
vertex_values[3] = dof_values[3];
17316
/// Map coordinate xhat from reference cell to coordinate x in cell
17317
virtual void map_from_reference_cell(double* x,
17318
const double* xhat,
17319
const ufc::cell& c)
17321
throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
17324
/// Map from coordinate x in cell to coordinate xhat in reference cell
17325
virtual void map_to_reference_cell(double* xhat,
17327
const ufc::cell& c)
17329
throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
17332
/// Return the number of sub elements (for a mixed element)
17333
virtual unsigned int num_sub_elements() const
17338
/// Create a new finite element for sub element i (for a mixed element)
17339
virtual ufc::finite_element* create_sub_element(unsigned int i) const
17344
/// Create a new class instance
17345
virtual ufc::finite_element* create() const
17347
return new stokes_finite_element_2();
17352
/// This class defines the interface for a finite element.
17354
class stokes_finite_element_3: public ufc::finite_element
17359
stokes_finite_element_3() : ufc::finite_element()
17365
virtual ~stokes_finite_element_3()
17370
/// Return a string identifying the finite element
17371
virtual const char* signature() const
17373
return "MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) })";
17376
/// Return the cell shape
17377
virtual ufc::shape cell_shape() const
17379
return ufc::tetrahedron;
17382
/// Return the topological dimension of the cell shape
17383
virtual unsigned int topological_dimension() const
17388
/// Return the geometric dimension of the cell shape
17389
virtual unsigned int geometric_dimension() const
17394
/// Return the dimension of the finite element function space
17395
virtual unsigned int space_dimension() const
17400
/// Return the rank of the value space
17401
virtual unsigned int value_rank() const
17406
/// Return the dimension of the value space for axis i
17407
virtual unsigned int value_dimension(unsigned int i) const
17421
/// Evaluate basis function i at given point in cell
17422
virtual void evaluate_basis(unsigned int i,
17424
const double* coordinates,
17425
const ufc::cell& c) const
17427
// Extract vertex coordinates
17428
const double * const * x = c.coordinates;
17430
// Compute Jacobian of affine map from reference cell
17431
const double J_00 = x[1][0] - x[0][0];
17432
const double J_01 = x[2][0] - x[0][0];
17433
const double J_02 = x[3][0] - x[0][0];
17434
const double J_10 = x[1][1] - x[0][1];
17435
const double J_11 = x[2][1] - x[0][1];
17436
const double J_12 = x[3][1] - x[0][1];
17437
const double J_20 = x[1][2] - x[0][2];
17438
const double J_21 = x[2][2] - x[0][2];
17439
const double J_22 = x[3][2] - x[0][2];
17441
// Compute sub determinants
17442
const double d_00 = J_11*J_22 - J_12*J_21;
17443
const double d_01 = J_12*J_20 - J_10*J_22;
17444
const double d_02 = J_10*J_21 - J_11*J_20;
17445
const double d_10 = J_02*J_21 - J_01*J_22;
17446
const double d_11 = J_00*J_22 - J_02*J_20;
17447
const double d_12 = J_01*J_20 - J_00*J_21;
17448
const double d_20 = J_01*J_12 - J_02*J_11;
17449
const double d_21 = J_02*J_10 - J_00*J_12;
17450
const double d_22 = J_00*J_11 - J_01*J_10;
17452
// Compute determinant of Jacobian
17453
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
17455
// Compute inverse of Jacobian
17457
// Compute constants
17458
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
17459
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
17460
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
17462
// Get coordinates and map to the reference (FIAT) element
17463
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
17464
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
17465
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
17469
values[0] = 0.000000000000000;
17470
values[1] = 0.000000000000000;
17471
values[2] = 0.000000000000000;
17472
values[3] = 0.000000000000000;
17478
// Array of basisvalues.
17479
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
17481
// Declare helper variables.
17482
unsigned int rr = 0;
17483
unsigned int ss = 0;
17484
unsigned int tt = 0;
17485
double tmp5 = 0.000000000000000;
17486
double tmp6 = 0.000000000000000;
17487
double tmp7 = 0.000000000000000;
17488
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
17489
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
17490
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
17491
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
17492
double tmp4 = tmp3*tmp3;
17494
// Compute basisvalues.
17495
basisvalues[0] = 1.000000000000000;
17496
basisvalues[1] = tmp0;
17497
for (unsigned int r = 1; r < 2; r++)
17499
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
17500
ss = r*(r + 1)*(r + 2)/6;
17501
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
17502
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
17503
}// end loop over 'r'
17504
for (unsigned int r = 0; r < 2; r++)
17506
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17507
ss = r*(r + 1)*(r + 2)/6;
17508
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17509
}// end loop over 'r'
17510
for (unsigned int r = 0; r < 1; r++)
17512
for (unsigned int s = 1; s < 2 - r; s++)
17514
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
17515
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17516
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
17517
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17518
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17519
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17520
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
17521
}// end loop over 's'
17522
}// end loop over 'r'
17523
for (unsigned int r = 0; r < 2; r++)
17525
for (unsigned int s = 0; s < 2 - r; s++)
17527
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
17528
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17529
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
17530
}// end loop over 's'
17531
}// end loop over 'r'
17532
for (unsigned int r = 0; r < 1; r++)
17534
for (unsigned int s = 0; s < 1 - r; s++)
17536
for (unsigned int t = 1; t < 2 - r - s; t++)
17538
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
17539
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17540
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
17541
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17542
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17543
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17544
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
17545
}// end loop over 't'
17546
}// end loop over 's'
17547
}// end loop over 'r'
17548
for (unsigned int r = 0; r < 3; r++)
17550
for (unsigned int s = 0; s < 3 - r; s++)
17552
for (unsigned int t = 0; t < 3 - r - s; t++)
17554
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17555
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
17556
}// end loop over 't'
17557
}// end loop over 's'
17558
}// end loop over 'r'
17560
// Table(s) of coefficients.
17561
static const double coefficients0[10] = \
17562
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
17564
// Compute value(s).
17565
for (unsigned int r = 0; r < 10; r++)
17567
values[0] += coefficients0[r]*basisvalues[r];
17568
}// end loop over 'r'
17574
// Array of basisvalues.
17575
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
17577
// Declare helper variables.
17578
unsigned int rr = 0;
17579
unsigned int ss = 0;
17580
unsigned int tt = 0;
17581
double tmp5 = 0.000000000000000;
17582
double tmp6 = 0.000000000000000;
17583
double tmp7 = 0.000000000000000;
17584
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
17585
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
17586
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
17587
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
17588
double tmp4 = tmp3*tmp3;
17590
// Compute basisvalues.
17591
basisvalues[0] = 1.000000000000000;
17592
basisvalues[1] = tmp0;
17593
for (unsigned int r = 1; r < 2; r++)
17595
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
17596
ss = r*(r + 1)*(r + 2)/6;
17597
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
17598
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
17599
}// end loop over 'r'
17600
for (unsigned int r = 0; r < 2; r++)
17602
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17603
ss = r*(r + 1)*(r + 2)/6;
17604
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17605
}// end loop over 'r'
17606
for (unsigned int r = 0; r < 1; r++)
17608
for (unsigned int s = 1; s < 2 - r; s++)
17610
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
17611
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17612
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
17613
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17614
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17615
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17616
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
17617
}// end loop over 's'
17618
}// end loop over 'r'
17619
for (unsigned int r = 0; r < 2; r++)
17621
for (unsigned int s = 0; s < 2 - r; s++)
17623
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
17624
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17625
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
17626
}// end loop over 's'
17627
}// end loop over 'r'
17628
for (unsigned int r = 0; r < 1; r++)
17630
for (unsigned int s = 0; s < 1 - r; s++)
17632
for (unsigned int t = 1; t < 2 - r - s; t++)
17634
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
17635
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17636
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
17637
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17638
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17639
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17640
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
17641
}// end loop over 't'
17642
}// end loop over 's'
17643
}// end loop over 'r'
17644
for (unsigned int r = 0; r < 3; r++)
17646
for (unsigned int s = 0; s < 3 - r; s++)
17648
for (unsigned int t = 0; t < 3 - r - s; t++)
17650
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17651
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
17652
}// end loop over 't'
17653
}// end loop over 's'
17654
}// end loop over 'r'
17656
// Table(s) of coefficients.
17657
static const double coefficients0[10] = \
17658
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
17660
// Compute value(s).
17661
for (unsigned int r = 0; r < 10; r++)
17663
values[0] += coefficients0[r]*basisvalues[r];
17664
}// end loop over 'r'
17670
// Array of basisvalues.
17671
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
17673
// Declare helper variables.
17674
unsigned int rr = 0;
17675
unsigned int ss = 0;
17676
unsigned int tt = 0;
17677
double tmp5 = 0.000000000000000;
17678
double tmp6 = 0.000000000000000;
17679
double tmp7 = 0.000000000000000;
17680
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
17681
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
17682
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
17683
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
17684
double tmp4 = tmp3*tmp3;
17686
// Compute basisvalues.
17687
basisvalues[0] = 1.000000000000000;
17688
basisvalues[1] = tmp0;
17689
for (unsigned int r = 1; r < 2; r++)
17691
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
17692
ss = r*(r + 1)*(r + 2)/6;
17693
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
17694
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
17695
}// end loop over 'r'
17696
for (unsigned int r = 0; r < 2; r++)
17698
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17699
ss = r*(r + 1)*(r + 2)/6;
17700
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17701
}// end loop over 'r'
17702
for (unsigned int r = 0; r < 1; r++)
17704
for (unsigned int s = 1; s < 2 - r; s++)
17706
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
17707
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17708
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
17709
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17710
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17711
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17712
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
17713
}// end loop over 's'
17714
}// end loop over 'r'
17715
for (unsigned int r = 0; r < 2; r++)
17717
for (unsigned int s = 0; s < 2 - r; s++)
17719
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
17720
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17721
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
17722
}// end loop over 's'
17723
}// end loop over 'r'
17724
for (unsigned int r = 0; r < 1; r++)
17726
for (unsigned int s = 0; s < 1 - r; s++)
17728
for (unsigned int t = 1; t < 2 - r - s; t++)
17730
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
17731
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17732
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
17733
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17734
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17735
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17736
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
17737
}// end loop over 't'
17738
}// end loop over 's'
17739
}// end loop over 'r'
17740
for (unsigned int r = 0; r < 3; r++)
17742
for (unsigned int s = 0; s < 3 - r; s++)
17744
for (unsigned int t = 0; t < 3 - r - s; t++)
17746
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17747
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
17748
}// end loop over 't'
17749
}// end loop over 's'
17750
}// end loop over 'r'
17752
// Table(s) of coefficients.
17753
static const double coefficients0[10] = \
17754
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
17756
// Compute value(s).
17757
for (unsigned int r = 0; r < 10; r++)
17759
values[0] += coefficients0[r]*basisvalues[r];
17760
}// end loop over 'r'
17766
// Array of basisvalues.
17767
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
17769
// Declare helper variables.
17770
unsigned int rr = 0;
17771
unsigned int ss = 0;
17772
unsigned int tt = 0;
17773
double tmp5 = 0.000000000000000;
17774
double tmp6 = 0.000000000000000;
17775
double tmp7 = 0.000000000000000;
17776
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
17777
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
17778
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
17779
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
17780
double tmp4 = tmp3*tmp3;
17782
// Compute basisvalues.
17783
basisvalues[0] = 1.000000000000000;
17784
basisvalues[1] = tmp0;
17785
for (unsigned int r = 1; r < 2; r++)
17787
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
17788
ss = r*(r + 1)*(r + 2)/6;
17789
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
17790
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
17791
}// end loop over 'r'
17792
for (unsigned int r = 0; r < 2; r++)
17794
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17795
ss = r*(r + 1)*(r + 2)/6;
17796
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17797
}// end loop over 'r'
17798
for (unsigned int r = 0; r < 1; r++)
17800
for (unsigned int s = 1; s < 2 - r; s++)
17802
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
17803
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17804
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
17805
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17806
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17807
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17808
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
17809
}// end loop over 's'
17810
}// end loop over 'r'
17811
for (unsigned int r = 0; r < 2; r++)
17813
for (unsigned int s = 0; s < 2 - r; s++)
17815
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
17816
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17817
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
17818
}// end loop over 's'
17819
}// end loop over 'r'
17820
for (unsigned int r = 0; r < 1; r++)
17822
for (unsigned int s = 0; s < 1 - r; s++)
17824
for (unsigned int t = 1; t < 2 - r - s; t++)
17826
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
17827
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17828
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
17829
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17830
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17831
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17832
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
17833
}// end loop over 't'
17834
}// end loop over 's'
17835
}// end loop over 'r'
17836
for (unsigned int r = 0; r < 3; r++)
17838
for (unsigned int s = 0; s < 3 - r; s++)
17840
for (unsigned int t = 0; t < 3 - r - s; t++)
17842
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17843
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
17844
}// end loop over 't'
17845
}// end loop over 's'
17846
}// end loop over 'r'
17848
// Table(s) of coefficients.
17849
static const double coefficients0[10] = \
17850
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
17852
// Compute value(s).
17853
for (unsigned int r = 0; r < 10; r++)
17855
values[0] += coefficients0[r]*basisvalues[r];
17856
}// end loop over 'r'
17862
// Array of basisvalues.
17863
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
17865
// Declare helper variables.
17866
unsigned int rr = 0;
17867
unsigned int ss = 0;
17868
unsigned int tt = 0;
17869
double tmp5 = 0.000000000000000;
17870
double tmp6 = 0.000000000000000;
17871
double tmp7 = 0.000000000000000;
17872
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
17873
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
17874
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
17875
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
17876
double tmp4 = tmp3*tmp3;
17878
// Compute basisvalues.
17879
basisvalues[0] = 1.000000000000000;
17880
basisvalues[1] = tmp0;
17881
for (unsigned int r = 1; r < 2; r++)
17883
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
17884
ss = r*(r + 1)*(r + 2)/6;
17885
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
17886
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
17887
}// end loop over 'r'
17888
for (unsigned int r = 0; r < 2; r++)
17890
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17891
ss = r*(r + 1)*(r + 2)/6;
17892
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17893
}// end loop over 'r'
17894
for (unsigned int r = 0; r < 1; r++)
17896
for (unsigned int s = 1; s < 2 - r; s++)
17898
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
17899
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17900
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
17901
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17902
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17903
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17904
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
17905
}// end loop over 's'
17906
}// end loop over 'r'
17907
for (unsigned int r = 0; r < 2; r++)
17909
for (unsigned int s = 0; s < 2 - r; s++)
17911
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
17912
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17913
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
17914
}// end loop over 's'
17915
}// end loop over 'r'
17916
for (unsigned int r = 0; r < 1; r++)
17918
for (unsigned int s = 0; s < 1 - r; s++)
17920
for (unsigned int t = 1; t < 2 - r - s; t++)
17922
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
17923
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17924
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
17925
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17926
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17927
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
17928
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
17929
}// end loop over 't'
17930
}// end loop over 's'
17931
}// end loop over 'r'
17932
for (unsigned int r = 0; r < 3; r++)
17934
for (unsigned int s = 0; s < 3 - r; s++)
17936
for (unsigned int t = 0; t < 3 - r - s; t++)
17938
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
17939
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
17940
}// end loop over 't'
17941
}// end loop over 's'
17942
}// end loop over 'r'
17944
// Table(s) of coefficients.
17945
static const double coefficients0[10] = \
17946
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
17948
// Compute value(s).
17949
for (unsigned int r = 0; r < 10; r++)
17951
values[0] += coefficients0[r]*basisvalues[r];
17952
}// end loop over 'r'
17958
// Array of basisvalues.
17959
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
17961
// Declare helper variables.
17962
unsigned int rr = 0;
17963
unsigned int ss = 0;
17964
unsigned int tt = 0;
17965
double tmp5 = 0.000000000000000;
17966
double tmp6 = 0.000000000000000;
17967
double tmp7 = 0.000000000000000;
17968
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
17969
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
17970
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
17971
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
17972
double tmp4 = tmp3*tmp3;
17974
// Compute basisvalues.
17975
basisvalues[0] = 1.000000000000000;
17976
basisvalues[1] = tmp0;
17977
for (unsigned int r = 1; r < 2; r++)
17979
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
17980
ss = r*(r + 1)*(r + 2)/6;
17981
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
17982
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
17983
}// end loop over 'r'
17984
for (unsigned int r = 0; r < 2; r++)
17986
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
17987
ss = r*(r + 1)*(r + 2)/6;
17988
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
17989
}// end loop over 'r'
17990
for (unsigned int r = 0; r < 1; r++)
17992
for (unsigned int s = 1; s < 2 - r; s++)
17994
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
17995
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
17996
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
17997
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17998
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
17999
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18000
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18001
}// end loop over 's'
18002
}// end loop over 'r'
18003
for (unsigned int r = 0; r < 2; r++)
18005
for (unsigned int s = 0; s < 2 - r; s++)
18007
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18008
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18009
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18010
}// end loop over 's'
18011
}// end loop over 'r'
18012
for (unsigned int r = 0; r < 1; r++)
18014
for (unsigned int s = 0; s < 1 - r; s++)
18016
for (unsigned int t = 1; t < 2 - r - s; t++)
18018
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18019
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18020
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18021
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18022
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18023
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18024
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18025
}// end loop over 't'
18026
}// end loop over 's'
18027
}// end loop over 'r'
18028
for (unsigned int r = 0; r < 3; r++)
18030
for (unsigned int s = 0; s < 3 - r; s++)
18032
for (unsigned int t = 0; t < 3 - r - s; t++)
18034
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18035
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18036
}// end loop over 't'
18037
}// end loop over 's'
18038
}// end loop over 'r'
18040
// Table(s) of coefficients.
18041
static const double coefficients0[10] = \
18042
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
18044
// Compute value(s).
18045
for (unsigned int r = 0; r < 10; r++)
18047
values[0] += coefficients0[r]*basisvalues[r];
18048
}// end loop over 'r'
18054
// Array of basisvalues.
18055
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18057
// Declare helper variables.
18058
unsigned int rr = 0;
18059
unsigned int ss = 0;
18060
unsigned int tt = 0;
18061
double tmp5 = 0.000000000000000;
18062
double tmp6 = 0.000000000000000;
18063
double tmp7 = 0.000000000000000;
18064
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18065
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18066
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18067
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18068
double tmp4 = tmp3*tmp3;
18070
// Compute basisvalues.
18071
basisvalues[0] = 1.000000000000000;
18072
basisvalues[1] = tmp0;
18073
for (unsigned int r = 1; r < 2; r++)
18075
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18076
ss = r*(r + 1)*(r + 2)/6;
18077
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18078
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18079
}// end loop over 'r'
18080
for (unsigned int r = 0; r < 2; r++)
18082
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18083
ss = r*(r + 1)*(r + 2)/6;
18084
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18085
}// end loop over 'r'
18086
for (unsigned int r = 0; r < 1; r++)
18088
for (unsigned int s = 1; s < 2 - r; s++)
18090
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18091
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18092
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18093
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18094
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18095
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18096
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18097
}// end loop over 's'
18098
}// end loop over 'r'
18099
for (unsigned int r = 0; r < 2; r++)
18101
for (unsigned int s = 0; s < 2 - r; s++)
18103
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18104
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18105
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18106
}// end loop over 's'
18107
}// end loop over 'r'
18108
for (unsigned int r = 0; r < 1; r++)
18110
for (unsigned int s = 0; s < 1 - r; s++)
18112
for (unsigned int t = 1; t < 2 - r - s; t++)
18114
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18115
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18116
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18117
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18118
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18119
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18120
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18121
}// end loop over 't'
18122
}// end loop over 's'
18123
}// end loop over 'r'
18124
for (unsigned int r = 0; r < 3; r++)
18126
for (unsigned int s = 0; s < 3 - r; s++)
18128
for (unsigned int t = 0; t < 3 - r - s; t++)
18130
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18131
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18132
}// end loop over 't'
18133
}// end loop over 's'
18134
}// end loop over 'r'
18136
// Table(s) of coefficients.
18137
static const double coefficients0[10] = \
18138
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
18140
// Compute value(s).
18141
for (unsigned int r = 0; r < 10; r++)
18143
values[0] += coefficients0[r]*basisvalues[r];
18144
}// end loop over 'r'
18150
// Array of basisvalues.
18151
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18153
// Declare helper variables.
18154
unsigned int rr = 0;
18155
unsigned int ss = 0;
18156
unsigned int tt = 0;
18157
double tmp5 = 0.000000000000000;
18158
double tmp6 = 0.000000000000000;
18159
double tmp7 = 0.000000000000000;
18160
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18161
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18162
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18163
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18164
double tmp4 = tmp3*tmp3;
18166
// Compute basisvalues.
18167
basisvalues[0] = 1.000000000000000;
18168
basisvalues[1] = tmp0;
18169
for (unsigned int r = 1; r < 2; r++)
18171
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18172
ss = r*(r + 1)*(r + 2)/6;
18173
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18174
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18175
}// end loop over 'r'
18176
for (unsigned int r = 0; r < 2; r++)
18178
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18179
ss = r*(r + 1)*(r + 2)/6;
18180
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18181
}// end loop over 'r'
18182
for (unsigned int r = 0; r < 1; r++)
18184
for (unsigned int s = 1; s < 2 - r; s++)
18186
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18187
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18188
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18189
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18190
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18191
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18192
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18193
}// end loop over 's'
18194
}// end loop over 'r'
18195
for (unsigned int r = 0; r < 2; r++)
18197
for (unsigned int s = 0; s < 2 - r; s++)
18199
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18200
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18201
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18202
}// end loop over 's'
18203
}// end loop over 'r'
18204
for (unsigned int r = 0; r < 1; r++)
18206
for (unsigned int s = 0; s < 1 - r; s++)
18208
for (unsigned int t = 1; t < 2 - r - s; t++)
18210
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18211
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18212
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18213
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18214
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18215
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18216
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18217
}// end loop over 't'
18218
}// end loop over 's'
18219
}// end loop over 'r'
18220
for (unsigned int r = 0; r < 3; r++)
18222
for (unsigned int s = 0; s < 3 - r; s++)
18224
for (unsigned int t = 0; t < 3 - r - s; t++)
18226
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18227
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18228
}// end loop over 't'
18229
}// end loop over 's'
18230
}// end loop over 'r'
18232
// Table(s) of coefficients.
18233
static const double coefficients0[10] = \
18234
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
18236
// Compute value(s).
18237
for (unsigned int r = 0; r < 10; r++)
18239
values[0] += coefficients0[r]*basisvalues[r];
18240
}// end loop over 'r'
18246
// Array of basisvalues.
18247
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18249
// Declare helper variables.
18250
unsigned int rr = 0;
18251
unsigned int ss = 0;
18252
unsigned int tt = 0;
18253
double tmp5 = 0.000000000000000;
18254
double tmp6 = 0.000000000000000;
18255
double tmp7 = 0.000000000000000;
18256
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18257
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18258
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18259
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18260
double tmp4 = tmp3*tmp3;
18262
// Compute basisvalues.
18263
basisvalues[0] = 1.000000000000000;
18264
basisvalues[1] = tmp0;
18265
for (unsigned int r = 1; r < 2; r++)
18267
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18268
ss = r*(r + 1)*(r + 2)/6;
18269
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18270
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18271
}// end loop over 'r'
18272
for (unsigned int r = 0; r < 2; r++)
18274
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18275
ss = r*(r + 1)*(r + 2)/6;
18276
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18277
}// end loop over 'r'
18278
for (unsigned int r = 0; r < 1; r++)
18280
for (unsigned int s = 1; s < 2 - r; s++)
18282
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18283
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18284
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18285
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18286
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18287
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18288
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18289
}// end loop over 's'
18290
}// end loop over 'r'
18291
for (unsigned int r = 0; r < 2; r++)
18293
for (unsigned int s = 0; s < 2 - r; s++)
18295
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18296
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18297
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18298
}// end loop over 's'
18299
}// end loop over 'r'
18300
for (unsigned int r = 0; r < 1; r++)
18302
for (unsigned int s = 0; s < 1 - r; s++)
18304
for (unsigned int t = 1; t < 2 - r - s; t++)
18306
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18307
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18308
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18309
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18310
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18311
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18312
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18313
}// end loop over 't'
18314
}// end loop over 's'
18315
}// end loop over 'r'
18316
for (unsigned int r = 0; r < 3; r++)
18318
for (unsigned int s = 0; s < 3 - r; s++)
18320
for (unsigned int t = 0; t < 3 - r - s; t++)
18322
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18323
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18324
}// end loop over 't'
18325
}// end loop over 's'
18326
}// end loop over 'r'
18328
// Table(s) of coefficients.
18329
static const double coefficients0[10] = \
18330
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
18332
// Compute value(s).
18333
for (unsigned int r = 0; r < 10; r++)
18335
values[0] += coefficients0[r]*basisvalues[r];
18336
}// end loop over 'r'
18342
// Array of basisvalues.
18343
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18345
// Declare helper variables.
18346
unsigned int rr = 0;
18347
unsigned int ss = 0;
18348
unsigned int tt = 0;
18349
double tmp5 = 0.000000000000000;
18350
double tmp6 = 0.000000000000000;
18351
double tmp7 = 0.000000000000000;
18352
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18353
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18354
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18355
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18356
double tmp4 = tmp3*tmp3;
18358
// Compute basisvalues.
18359
basisvalues[0] = 1.000000000000000;
18360
basisvalues[1] = tmp0;
18361
for (unsigned int r = 1; r < 2; r++)
18363
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18364
ss = r*(r + 1)*(r + 2)/6;
18365
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18366
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18367
}// end loop over 'r'
18368
for (unsigned int r = 0; r < 2; r++)
18370
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18371
ss = r*(r + 1)*(r + 2)/6;
18372
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18373
}// end loop over 'r'
18374
for (unsigned int r = 0; r < 1; r++)
18376
for (unsigned int s = 1; s < 2 - r; s++)
18378
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18379
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18380
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18381
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18382
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18383
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18384
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18385
}// end loop over 's'
18386
}// end loop over 'r'
18387
for (unsigned int r = 0; r < 2; r++)
18389
for (unsigned int s = 0; s < 2 - r; s++)
18391
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18392
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18393
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18394
}// end loop over 's'
18395
}// end loop over 'r'
18396
for (unsigned int r = 0; r < 1; r++)
18398
for (unsigned int s = 0; s < 1 - r; s++)
18400
for (unsigned int t = 1; t < 2 - r - s; t++)
18402
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18403
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18404
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18405
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18406
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18407
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18408
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18409
}// end loop over 't'
18410
}// end loop over 's'
18411
}// end loop over 'r'
18412
for (unsigned int r = 0; r < 3; r++)
18414
for (unsigned int s = 0; s < 3 - r; s++)
18416
for (unsigned int t = 0; t < 3 - r - s; t++)
18418
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18419
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18420
}// end loop over 't'
18421
}// end loop over 's'
18422
}// end loop over 'r'
18424
// Table(s) of coefficients.
18425
static const double coefficients0[10] = \
18426
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
18428
// Compute value(s).
18429
for (unsigned int r = 0; r < 10; r++)
18431
values[0] += coefficients0[r]*basisvalues[r];
18432
}// end loop over 'r'
18438
// Array of basisvalues.
18439
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18441
// Declare helper variables.
18442
unsigned int rr = 0;
18443
unsigned int ss = 0;
18444
unsigned int tt = 0;
18445
double tmp5 = 0.000000000000000;
18446
double tmp6 = 0.000000000000000;
18447
double tmp7 = 0.000000000000000;
18448
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18449
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18450
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18451
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18452
double tmp4 = tmp3*tmp3;
18454
// Compute basisvalues.
18455
basisvalues[0] = 1.000000000000000;
18456
basisvalues[1] = tmp0;
18457
for (unsigned int r = 1; r < 2; r++)
18459
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18460
ss = r*(r + 1)*(r + 2)/6;
18461
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18462
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18463
}// end loop over 'r'
18464
for (unsigned int r = 0; r < 2; r++)
18466
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18467
ss = r*(r + 1)*(r + 2)/6;
18468
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18469
}// end loop over 'r'
18470
for (unsigned int r = 0; r < 1; r++)
18472
for (unsigned int s = 1; s < 2 - r; s++)
18474
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18475
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18476
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18477
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18478
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18479
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18480
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18481
}// end loop over 's'
18482
}// end loop over 'r'
18483
for (unsigned int r = 0; r < 2; r++)
18485
for (unsigned int s = 0; s < 2 - r; s++)
18487
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18488
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18489
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18490
}// end loop over 's'
18491
}// end loop over 'r'
18492
for (unsigned int r = 0; r < 1; r++)
18494
for (unsigned int s = 0; s < 1 - r; s++)
18496
for (unsigned int t = 1; t < 2 - r - s; t++)
18498
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18499
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18500
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18501
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18502
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18503
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18504
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18505
}// end loop over 't'
18506
}// end loop over 's'
18507
}// end loop over 'r'
18508
for (unsigned int r = 0; r < 3; r++)
18510
for (unsigned int s = 0; s < 3 - r; s++)
18512
for (unsigned int t = 0; t < 3 - r - s; t++)
18514
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18515
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18516
}// end loop over 't'
18517
}// end loop over 's'
18518
}// end loop over 'r'
18520
// Table(s) of coefficients.
18521
static const double coefficients0[10] = \
18522
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
18524
// Compute value(s).
18525
for (unsigned int r = 0; r < 10; r++)
18527
values[1] += coefficients0[r]*basisvalues[r];
18528
}// end loop over 'r'
18534
// Array of basisvalues.
18535
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18537
// Declare helper variables.
18538
unsigned int rr = 0;
18539
unsigned int ss = 0;
18540
unsigned int tt = 0;
18541
double tmp5 = 0.000000000000000;
18542
double tmp6 = 0.000000000000000;
18543
double tmp7 = 0.000000000000000;
18544
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18545
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18546
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18547
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18548
double tmp4 = tmp3*tmp3;
18550
// Compute basisvalues.
18551
basisvalues[0] = 1.000000000000000;
18552
basisvalues[1] = tmp0;
18553
for (unsigned int r = 1; r < 2; r++)
18555
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18556
ss = r*(r + 1)*(r + 2)/6;
18557
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18558
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18559
}// end loop over 'r'
18560
for (unsigned int r = 0; r < 2; r++)
18562
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18563
ss = r*(r + 1)*(r + 2)/6;
18564
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18565
}// end loop over 'r'
18566
for (unsigned int r = 0; r < 1; r++)
18568
for (unsigned int s = 1; s < 2 - r; s++)
18570
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18571
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18572
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18573
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18574
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18575
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18576
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18577
}// end loop over 's'
18578
}// end loop over 'r'
18579
for (unsigned int r = 0; r < 2; r++)
18581
for (unsigned int s = 0; s < 2 - r; s++)
18583
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18584
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18585
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18586
}// end loop over 's'
18587
}// end loop over 'r'
18588
for (unsigned int r = 0; r < 1; r++)
18590
for (unsigned int s = 0; s < 1 - r; s++)
18592
for (unsigned int t = 1; t < 2 - r - s; t++)
18594
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18595
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18596
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18597
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18598
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18599
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18600
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18601
}// end loop over 't'
18602
}// end loop over 's'
18603
}// end loop over 'r'
18604
for (unsigned int r = 0; r < 3; r++)
18606
for (unsigned int s = 0; s < 3 - r; s++)
18608
for (unsigned int t = 0; t < 3 - r - s; t++)
18610
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18611
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18612
}// end loop over 't'
18613
}// end loop over 's'
18614
}// end loop over 'r'
18616
// Table(s) of coefficients.
18617
static const double coefficients0[10] = \
18618
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
18620
// Compute value(s).
18621
for (unsigned int r = 0; r < 10; r++)
18623
values[1] += coefficients0[r]*basisvalues[r];
18624
}// end loop over 'r'
18630
// Array of basisvalues.
18631
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18633
// Declare helper variables.
18634
unsigned int rr = 0;
18635
unsigned int ss = 0;
18636
unsigned int tt = 0;
18637
double tmp5 = 0.000000000000000;
18638
double tmp6 = 0.000000000000000;
18639
double tmp7 = 0.000000000000000;
18640
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18641
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18642
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18643
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18644
double tmp4 = tmp3*tmp3;
18646
// Compute basisvalues.
18647
basisvalues[0] = 1.000000000000000;
18648
basisvalues[1] = tmp0;
18649
for (unsigned int r = 1; r < 2; r++)
18651
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18652
ss = r*(r + 1)*(r + 2)/6;
18653
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18654
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18655
}// end loop over 'r'
18656
for (unsigned int r = 0; r < 2; r++)
18658
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18659
ss = r*(r + 1)*(r + 2)/6;
18660
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18661
}// end loop over 'r'
18662
for (unsigned int r = 0; r < 1; r++)
18664
for (unsigned int s = 1; s < 2 - r; s++)
18666
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18667
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18668
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18669
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18670
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18671
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18672
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18673
}// end loop over 's'
18674
}// end loop over 'r'
18675
for (unsigned int r = 0; r < 2; r++)
18677
for (unsigned int s = 0; s < 2 - r; s++)
18679
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18680
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18681
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18682
}// end loop over 's'
18683
}// end loop over 'r'
18684
for (unsigned int r = 0; r < 1; r++)
18686
for (unsigned int s = 0; s < 1 - r; s++)
18688
for (unsigned int t = 1; t < 2 - r - s; t++)
18690
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18691
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18692
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18693
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18694
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18695
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18696
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18697
}// end loop over 't'
18698
}// end loop over 's'
18699
}// end loop over 'r'
18700
for (unsigned int r = 0; r < 3; r++)
18702
for (unsigned int s = 0; s < 3 - r; s++)
18704
for (unsigned int t = 0; t < 3 - r - s; t++)
18706
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18707
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18708
}// end loop over 't'
18709
}// end loop over 's'
18710
}// end loop over 'r'
18712
// Table(s) of coefficients.
18713
static const double coefficients0[10] = \
18714
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
18716
// Compute value(s).
18717
for (unsigned int r = 0; r < 10; r++)
18719
values[1] += coefficients0[r]*basisvalues[r];
18720
}// end loop over 'r'
18726
// Array of basisvalues.
18727
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18729
// Declare helper variables.
18730
unsigned int rr = 0;
18731
unsigned int ss = 0;
18732
unsigned int tt = 0;
18733
double tmp5 = 0.000000000000000;
18734
double tmp6 = 0.000000000000000;
18735
double tmp7 = 0.000000000000000;
18736
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18737
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18738
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18739
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18740
double tmp4 = tmp3*tmp3;
18742
// Compute basisvalues.
18743
basisvalues[0] = 1.000000000000000;
18744
basisvalues[1] = tmp0;
18745
for (unsigned int r = 1; r < 2; r++)
18747
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18748
ss = r*(r + 1)*(r + 2)/6;
18749
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18750
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18751
}// end loop over 'r'
18752
for (unsigned int r = 0; r < 2; r++)
18754
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18755
ss = r*(r + 1)*(r + 2)/6;
18756
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18757
}// end loop over 'r'
18758
for (unsigned int r = 0; r < 1; r++)
18760
for (unsigned int s = 1; s < 2 - r; s++)
18762
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18763
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18764
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18765
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18766
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18767
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18768
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18769
}// end loop over 's'
18770
}// end loop over 'r'
18771
for (unsigned int r = 0; r < 2; r++)
18773
for (unsigned int s = 0; s < 2 - r; s++)
18775
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18776
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18777
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18778
}// end loop over 's'
18779
}// end loop over 'r'
18780
for (unsigned int r = 0; r < 1; r++)
18782
for (unsigned int s = 0; s < 1 - r; s++)
18784
for (unsigned int t = 1; t < 2 - r - s; t++)
18786
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18787
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18788
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18789
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18790
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18791
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18792
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18793
}// end loop over 't'
18794
}// end loop over 's'
18795
}// end loop over 'r'
18796
for (unsigned int r = 0; r < 3; r++)
18798
for (unsigned int s = 0; s < 3 - r; s++)
18800
for (unsigned int t = 0; t < 3 - r - s; t++)
18802
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18803
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18804
}// end loop over 't'
18805
}// end loop over 's'
18806
}// end loop over 'r'
18808
// Table(s) of coefficients.
18809
static const double coefficients0[10] = \
18810
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
18812
// Compute value(s).
18813
for (unsigned int r = 0; r < 10; r++)
18815
values[1] += coefficients0[r]*basisvalues[r];
18816
}// end loop over 'r'
18822
// Array of basisvalues.
18823
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18825
// Declare helper variables.
18826
unsigned int rr = 0;
18827
unsigned int ss = 0;
18828
unsigned int tt = 0;
18829
double tmp5 = 0.000000000000000;
18830
double tmp6 = 0.000000000000000;
18831
double tmp7 = 0.000000000000000;
18832
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18833
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18834
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18835
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18836
double tmp4 = tmp3*tmp3;
18838
// Compute basisvalues.
18839
basisvalues[0] = 1.000000000000000;
18840
basisvalues[1] = tmp0;
18841
for (unsigned int r = 1; r < 2; r++)
18843
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18844
ss = r*(r + 1)*(r + 2)/6;
18845
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18846
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18847
}// end loop over 'r'
18848
for (unsigned int r = 0; r < 2; r++)
18850
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18851
ss = r*(r + 1)*(r + 2)/6;
18852
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18853
}// end loop over 'r'
18854
for (unsigned int r = 0; r < 1; r++)
18856
for (unsigned int s = 1; s < 2 - r; s++)
18858
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18859
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18860
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18861
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18862
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18863
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18864
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18865
}// end loop over 's'
18866
}// end loop over 'r'
18867
for (unsigned int r = 0; r < 2; r++)
18869
for (unsigned int s = 0; s < 2 - r; s++)
18871
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18872
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18873
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18874
}// end loop over 's'
18875
}// end loop over 'r'
18876
for (unsigned int r = 0; r < 1; r++)
18878
for (unsigned int s = 0; s < 1 - r; s++)
18880
for (unsigned int t = 1; t < 2 - r - s; t++)
18882
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18883
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18884
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18885
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18886
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18887
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18888
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18889
}// end loop over 't'
18890
}// end loop over 's'
18891
}// end loop over 'r'
18892
for (unsigned int r = 0; r < 3; r++)
18894
for (unsigned int s = 0; s < 3 - r; s++)
18896
for (unsigned int t = 0; t < 3 - r - s; t++)
18898
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18899
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18900
}// end loop over 't'
18901
}// end loop over 's'
18902
}// end loop over 'r'
18904
// Table(s) of coefficients.
18905
static const double coefficients0[10] = \
18906
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
18908
// Compute value(s).
18909
for (unsigned int r = 0; r < 10; r++)
18911
values[1] += coefficients0[r]*basisvalues[r];
18912
}// end loop over 'r'
18918
// Array of basisvalues.
18919
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
18921
// Declare helper variables.
18922
unsigned int rr = 0;
18923
unsigned int ss = 0;
18924
unsigned int tt = 0;
18925
double tmp5 = 0.000000000000000;
18926
double tmp6 = 0.000000000000000;
18927
double tmp7 = 0.000000000000000;
18928
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
18929
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
18930
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
18931
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
18932
double tmp4 = tmp3*tmp3;
18934
// Compute basisvalues.
18935
basisvalues[0] = 1.000000000000000;
18936
basisvalues[1] = tmp0;
18937
for (unsigned int r = 1; r < 2; r++)
18939
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
18940
ss = r*(r + 1)*(r + 2)/6;
18941
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
18942
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
18943
}// end loop over 'r'
18944
for (unsigned int r = 0; r < 2; r++)
18946
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
18947
ss = r*(r + 1)*(r + 2)/6;
18948
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
18949
}// end loop over 'r'
18950
for (unsigned int r = 0; r < 1; r++)
18952
for (unsigned int s = 1; s < 2 - r; s++)
18954
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
18955
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18956
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
18957
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18958
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18959
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
18960
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
18961
}// end loop over 's'
18962
}// end loop over 'r'
18963
for (unsigned int r = 0; r < 2; r++)
18965
for (unsigned int s = 0; s < 2 - r; s++)
18967
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
18968
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
18969
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
18970
}// end loop over 's'
18971
}// end loop over 'r'
18972
for (unsigned int r = 0; r < 1; r++)
18974
for (unsigned int s = 0; s < 1 - r; s++)
18976
for (unsigned int t = 1; t < 2 - r - s; t++)
18978
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
18979
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18980
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
18981
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18982
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18983
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
18984
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
18985
}// end loop over 't'
18986
}// end loop over 's'
18987
}// end loop over 'r'
18988
for (unsigned int r = 0; r < 3; r++)
18990
for (unsigned int s = 0; s < 3 - r; s++)
18992
for (unsigned int t = 0; t < 3 - r - s; t++)
18994
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
18995
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
18996
}// end loop over 't'
18997
}// end loop over 's'
18998
}// end loop over 'r'
19000
// Table(s) of coefficients.
19001
static const double coefficients0[10] = \
19002
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
19004
// Compute value(s).
19005
for (unsigned int r = 0; r < 10; r++)
19007
values[1] += coefficients0[r]*basisvalues[r];
19008
}// end loop over 'r'
19014
// Array of basisvalues.
19015
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19017
// Declare helper variables.
19018
unsigned int rr = 0;
19019
unsigned int ss = 0;
19020
unsigned int tt = 0;
19021
double tmp5 = 0.000000000000000;
19022
double tmp6 = 0.000000000000000;
19023
double tmp7 = 0.000000000000000;
19024
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19025
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19026
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19027
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19028
double tmp4 = tmp3*tmp3;
19030
// Compute basisvalues.
19031
basisvalues[0] = 1.000000000000000;
19032
basisvalues[1] = tmp0;
19033
for (unsigned int r = 1; r < 2; r++)
19035
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19036
ss = r*(r + 1)*(r + 2)/6;
19037
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19038
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19039
}// end loop over 'r'
19040
for (unsigned int r = 0; r < 2; r++)
19042
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19043
ss = r*(r + 1)*(r + 2)/6;
19044
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19045
}// end loop over 'r'
19046
for (unsigned int r = 0; r < 1; r++)
19048
for (unsigned int s = 1; s < 2 - r; s++)
19050
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19051
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19052
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19053
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19054
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19055
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19056
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19057
}// end loop over 's'
19058
}// end loop over 'r'
19059
for (unsigned int r = 0; r < 2; r++)
19061
for (unsigned int s = 0; s < 2 - r; s++)
19063
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19064
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19065
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19066
}// end loop over 's'
19067
}// end loop over 'r'
19068
for (unsigned int r = 0; r < 1; r++)
19070
for (unsigned int s = 0; s < 1 - r; s++)
19072
for (unsigned int t = 1; t < 2 - r - s; t++)
19074
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19075
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19076
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19077
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19078
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19079
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19080
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19081
}// end loop over 't'
19082
}// end loop over 's'
19083
}// end loop over 'r'
19084
for (unsigned int r = 0; r < 3; r++)
19086
for (unsigned int s = 0; s < 3 - r; s++)
19088
for (unsigned int t = 0; t < 3 - r - s; t++)
19090
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19091
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19092
}// end loop over 't'
19093
}// end loop over 's'
19094
}// end loop over 'r'
19096
// Table(s) of coefficients.
19097
static const double coefficients0[10] = \
19098
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
19100
// Compute value(s).
19101
for (unsigned int r = 0; r < 10; r++)
19103
values[1] += coefficients0[r]*basisvalues[r];
19104
}// end loop over 'r'
19110
// Array of basisvalues.
19111
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19113
// Declare helper variables.
19114
unsigned int rr = 0;
19115
unsigned int ss = 0;
19116
unsigned int tt = 0;
19117
double tmp5 = 0.000000000000000;
19118
double tmp6 = 0.000000000000000;
19119
double tmp7 = 0.000000000000000;
19120
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19121
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19122
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19123
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19124
double tmp4 = tmp3*tmp3;
19126
// Compute basisvalues.
19127
basisvalues[0] = 1.000000000000000;
19128
basisvalues[1] = tmp0;
19129
for (unsigned int r = 1; r < 2; r++)
19131
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19132
ss = r*(r + 1)*(r + 2)/6;
19133
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19134
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19135
}// end loop over 'r'
19136
for (unsigned int r = 0; r < 2; r++)
19138
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19139
ss = r*(r + 1)*(r + 2)/6;
19140
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19141
}// end loop over 'r'
19142
for (unsigned int r = 0; r < 1; r++)
19144
for (unsigned int s = 1; s < 2 - r; s++)
19146
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19147
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19148
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19149
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19150
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19151
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19152
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19153
}// end loop over 's'
19154
}// end loop over 'r'
19155
for (unsigned int r = 0; r < 2; r++)
19157
for (unsigned int s = 0; s < 2 - r; s++)
19159
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19160
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19161
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19162
}// end loop over 's'
19163
}// end loop over 'r'
19164
for (unsigned int r = 0; r < 1; r++)
19166
for (unsigned int s = 0; s < 1 - r; s++)
19168
for (unsigned int t = 1; t < 2 - r - s; t++)
19170
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19171
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19172
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19173
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19174
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19175
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19176
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19177
}// end loop over 't'
19178
}// end loop over 's'
19179
}// end loop over 'r'
19180
for (unsigned int r = 0; r < 3; r++)
19182
for (unsigned int s = 0; s < 3 - r; s++)
19184
for (unsigned int t = 0; t < 3 - r - s; t++)
19186
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19187
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19188
}// end loop over 't'
19189
}// end loop over 's'
19190
}// end loop over 'r'
19192
// Table(s) of coefficients.
19193
static const double coefficients0[10] = \
19194
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
19196
// Compute value(s).
19197
for (unsigned int r = 0; r < 10; r++)
19199
values[1] += coefficients0[r]*basisvalues[r];
19200
}// end loop over 'r'
19206
// Array of basisvalues.
19207
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19209
// Declare helper variables.
19210
unsigned int rr = 0;
19211
unsigned int ss = 0;
19212
unsigned int tt = 0;
19213
double tmp5 = 0.000000000000000;
19214
double tmp6 = 0.000000000000000;
19215
double tmp7 = 0.000000000000000;
19216
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19217
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19218
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19219
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19220
double tmp4 = tmp3*tmp3;
19222
// Compute basisvalues.
19223
basisvalues[0] = 1.000000000000000;
19224
basisvalues[1] = tmp0;
19225
for (unsigned int r = 1; r < 2; r++)
19227
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19228
ss = r*(r + 1)*(r + 2)/6;
19229
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19230
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19231
}// end loop over 'r'
19232
for (unsigned int r = 0; r < 2; r++)
19234
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19235
ss = r*(r + 1)*(r + 2)/6;
19236
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19237
}// end loop over 'r'
19238
for (unsigned int r = 0; r < 1; r++)
19240
for (unsigned int s = 1; s < 2 - r; s++)
19242
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19243
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19244
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19245
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19246
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19247
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19248
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19249
}// end loop over 's'
19250
}// end loop over 'r'
19251
for (unsigned int r = 0; r < 2; r++)
19253
for (unsigned int s = 0; s < 2 - r; s++)
19255
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19256
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19257
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19258
}// end loop over 's'
19259
}// end loop over 'r'
19260
for (unsigned int r = 0; r < 1; r++)
19262
for (unsigned int s = 0; s < 1 - r; s++)
19264
for (unsigned int t = 1; t < 2 - r - s; t++)
19266
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19267
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19268
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19269
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19270
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19271
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19272
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19273
}// end loop over 't'
19274
}// end loop over 's'
19275
}// end loop over 'r'
19276
for (unsigned int r = 0; r < 3; r++)
19278
for (unsigned int s = 0; s < 3 - r; s++)
19280
for (unsigned int t = 0; t < 3 - r - s; t++)
19282
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19283
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19284
}// end loop over 't'
19285
}// end loop over 's'
19286
}// end loop over 'r'
19288
// Table(s) of coefficients.
19289
static const double coefficients0[10] = \
19290
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
19292
// Compute value(s).
19293
for (unsigned int r = 0; r < 10; r++)
19295
values[1] += coefficients0[r]*basisvalues[r];
19296
}// end loop over 'r'
19302
// Array of basisvalues.
19303
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19305
// Declare helper variables.
19306
unsigned int rr = 0;
19307
unsigned int ss = 0;
19308
unsigned int tt = 0;
19309
double tmp5 = 0.000000000000000;
19310
double tmp6 = 0.000000000000000;
19311
double tmp7 = 0.000000000000000;
19312
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19313
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19314
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19315
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19316
double tmp4 = tmp3*tmp3;
19318
// Compute basisvalues.
19319
basisvalues[0] = 1.000000000000000;
19320
basisvalues[1] = tmp0;
19321
for (unsigned int r = 1; r < 2; r++)
19323
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19324
ss = r*(r + 1)*(r + 2)/6;
19325
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19326
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19327
}// end loop over 'r'
19328
for (unsigned int r = 0; r < 2; r++)
19330
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19331
ss = r*(r + 1)*(r + 2)/6;
19332
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19333
}// end loop over 'r'
19334
for (unsigned int r = 0; r < 1; r++)
19336
for (unsigned int s = 1; s < 2 - r; s++)
19338
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19339
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19340
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19341
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19342
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19343
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19344
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19345
}// end loop over 's'
19346
}// end loop over 'r'
19347
for (unsigned int r = 0; r < 2; r++)
19349
for (unsigned int s = 0; s < 2 - r; s++)
19351
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19352
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19353
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19354
}// end loop over 's'
19355
}// end loop over 'r'
19356
for (unsigned int r = 0; r < 1; r++)
19358
for (unsigned int s = 0; s < 1 - r; s++)
19360
for (unsigned int t = 1; t < 2 - r - s; t++)
19362
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19363
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19364
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19365
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19366
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19367
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19368
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19369
}// end loop over 't'
19370
}// end loop over 's'
19371
}// end loop over 'r'
19372
for (unsigned int r = 0; r < 3; r++)
19374
for (unsigned int s = 0; s < 3 - r; s++)
19376
for (unsigned int t = 0; t < 3 - r - s; t++)
19378
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19379
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19380
}// end loop over 't'
19381
}// end loop over 's'
19382
}// end loop over 'r'
19384
// Table(s) of coefficients.
19385
static const double coefficients0[10] = \
19386
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
19388
// Compute value(s).
19389
for (unsigned int r = 0; r < 10; r++)
19391
values[1] += coefficients0[r]*basisvalues[r];
19392
}// end loop over 'r'
19398
// Array of basisvalues.
19399
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19401
// Declare helper variables.
19402
unsigned int rr = 0;
19403
unsigned int ss = 0;
19404
unsigned int tt = 0;
19405
double tmp5 = 0.000000000000000;
19406
double tmp6 = 0.000000000000000;
19407
double tmp7 = 0.000000000000000;
19408
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19409
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19410
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19411
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19412
double tmp4 = tmp3*tmp3;
19414
// Compute basisvalues.
19415
basisvalues[0] = 1.000000000000000;
19416
basisvalues[1] = tmp0;
19417
for (unsigned int r = 1; r < 2; r++)
19419
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19420
ss = r*(r + 1)*(r + 2)/6;
19421
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19422
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19423
}// end loop over 'r'
19424
for (unsigned int r = 0; r < 2; r++)
19426
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19427
ss = r*(r + 1)*(r + 2)/6;
19428
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19429
}// end loop over 'r'
19430
for (unsigned int r = 0; r < 1; r++)
19432
for (unsigned int s = 1; s < 2 - r; s++)
19434
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19435
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19436
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19437
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19438
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19439
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19440
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19441
}// end loop over 's'
19442
}// end loop over 'r'
19443
for (unsigned int r = 0; r < 2; r++)
19445
for (unsigned int s = 0; s < 2 - r; s++)
19447
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19448
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19449
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19450
}// end loop over 's'
19451
}// end loop over 'r'
19452
for (unsigned int r = 0; r < 1; r++)
19454
for (unsigned int s = 0; s < 1 - r; s++)
19456
for (unsigned int t = 1; t < 2 - r - s; t++)
19458
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19459
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19460
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19461
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19462
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19463
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19464
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19465
}// end loop over 't'
19466
}// end loop over 's'
19467
}// end loop over 'r'
19468
for (unsigned int r = 0; r < 3; r++)
19470
for (unsigned int s = 0; s < 3 - r; s++)
19472
for (unsigned int t = 0; t < 3 - r - s; t++)
19474
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19475
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19476
}// end loop over 't'
19477
}// end loop over 's'
19478
}// end loop over 'r'
19480
// Table(s) of coefficients.
19481
static const double coefficients0[10] = \
19482
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
19484
// Compute value(s).
19485
for (unsigned int r = 0; r < 10; r++)
19487
values[2] += coefficients0[r]*basisvalues[r];
19488
}// end loop over 'r'
19494
// Array of basisvalues.
19495
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19497
// Declare helper variables.
19498
unsigned int rr = 0;
19499
unsigned int ss = 0;
19500
unsigned int tt = 0;
19501
double tmp5 = 0.000000000000000;
19502
double tmp6 = 0.000000000000000;
19503
double tmp7 = 0.000000000000000;
19504
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19505
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19506
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19507
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19508
double tmp4 = tmp3*tmp3;
19510
// Compute basisvalues.
19511
basisvalues[0] = 1.000000000000000;
19512
basisvalues[1] = tmp0;
19513
for (unsigned int r = 1; r < 2; r++)
19515
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19516
ss = r*(r + 1)*(r + 2)/6;
19517
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19518
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19519
}// end loop over 'r'
19520
for (unsigned int r = 0; r < 2; r++)
19522
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19523
ss = r*(r + 1)*(r + 2)/6;
19524
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19525
}// end loop over 'r'
19526
for (unsigned int r = 0; r < 1; r++)
19528
for (unsigned int s = 1; s < 2 - r; s++)
19530
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19531
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19532
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19533
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19534
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19535
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19536
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19537
}// end loop over 's'
19538
}// end loop over 'r'
19539
for (unsigned int r = 0; r < 2; r++)
19541
for (unsigned int s = 0; s < 2 - r; s++)
19543
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19544
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19545
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19546
}// end loop over 's'
19547
}// end loop over 'r'
19548
for (unsigned int r = 0; r < 1; r++)
19550
for (unsigned int s = 0; s < 1 - r; s++)
19552
for (unsigned int t = 1; t < 2 - r - s; t++)
19554
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19555
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19556
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19557
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19558
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19559
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19560
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19561
}// end loop over 't'
19562
}// end loop over 's'
19563
}// end loop over 'r'
19564
for (unsigned int r = 0; r < 3; r++)
19566
for (unsigned int s = 0; s < 3 - r; s++)
19568
for (unsigned int t = 0; t < 3 - r - s; t++)
19570
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19571
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19572
}// end loop over 't'
19573
}// end loop over 's'
19574
}// end loop over 'r'
19576
// Table(s) of coefficients.
19577
static const double coefficients0[10] = \
19578
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
19580
// Compute value(s).
19581
for (unsigned int r = 0; r < 10; r++)
19583
values[2] += coefficients0[r]*basisvalues[r];
19584
}// end loop over 'r'
19590
// Array of basisvalues.
19591
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19593
// Declare helper variables.
19594
unsigned int rr = 0;
19595
unsigned int ss = 0;
19596
unsigned int tt = 0;
19597
double tmp5 = 0.000000000000000;
19598
double tmp6 = 0.000000000000000;
19599
double tmp7 = 0.000000000000000;
19600
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19601
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19602
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19603
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19604
double tmp4 = tmp3*tmp3;
19606
// Compute basisvalues.
19607
basisvalues[0] = 1.000000000000000;
19608
basisvalues[1] = tmp0;
19609
for (unsigned int r = 1; r < 2; r++)
19611
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19612
ss = r*(r + 1)*(r + 2)/6;
19613
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19614
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19615
}// end loop over 'r'
19616
for (unsigned int r = 0; r < 2; r++)
19618
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19619
ss = r*(r + 1)*(r + 2)/6;
19620
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19621
}// end loop over 'r'
19622
for (unsigned int r = 0; r < 1; r++)
19624
for (unsigned int s = 1; s < 2 - r; s++)
19626
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19627
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19628
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19629
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19630
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19631
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19632
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19633
}// end loop over 's'
19634
}// end loop over 'r'
19635
for (unsigned int r = 0; r < 2; r++)
19637
for (unsigned int s = 0; s < 2 - r; s++)
19639
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19640
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19641
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19642
}// end loop over 's'
19643
}// end loop over 'r'
19644
for (unsigned int r = 0; r < 1; r++)
19646
for (unsigned int s = 0; s < 1 - r; s++)
19648
for (unsigned int t = 1; t < 2 - r - s; t++)
19650
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19651
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19652
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19653
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19654
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19655
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19656
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19657
}// end loop over 't'
19658
}// end loop over 's'
19659
}// end loop over 'r'
19660
for (unsigned int r = 0; r < 3; r++)
19662
for (unsigned int s = 0; s < 3 - r; s++)
19664
for (unsigned int t = 0; t < 3 - r - s; t++)
19666
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19667
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19668
}// end loop over 't'
19669
}// end loop over 's'
19670
}// end loop over 'r'
19672
// Table(s) of coefficients.
19673
static const double coefficients0[10] = \
19674
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
19676
// Compute value(s).
19677
for (unsigned int r = 0; r < 10; r++)
19679
values[2] += coefficients0[r]*basisvalues[r];
19680
}// end loop over 'r'
19686
// Array of basisvalues.
19687
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19689
// Declare helper variables.
19690
unsigned int rr = 0;
19691
unsigned int ss = 0;
19692
unsigned int tt = 0;
19693
double tmp5 = 0.000000000000000;
19694
double tmp6 = 0.000000000000000;
19695
double tmp7 = 0.000000000000000;
19696
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19697
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19698
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19699
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19700
double tmp4 = tmp3*tmp3;
19702
// Compute basisvalues.
19703
basisvalues[0] = 1.000000000000000;
19704
basisvalues[1] = tmp0;
19705
for (unsigned int r = 1; r < 2; r++)
19707
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19708
ss = r*(r + 1)*(r + 2)/6;
19709
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19710
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19711
}// end loop over 'r'
19712
for (unsigned int r = 0; r < 2; r++)
19714
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19715
ss = r*(r + 1)*(r + 2)/6;
19716
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19717
}// end loop over 'r'
19718
for (unsigned int r = 0; r < 1; r++)
19720
for (unsigned int s = 1; s < 2 - r; s++)
19722
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19723
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19724
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19725
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19726
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19727
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19728
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19729
}// end loop over 's'
19730
}// end loop over 'r'
19731
for (unsigned int r = 0; r < 2; r++)
19733
for (unsigned int s = 0; s < 2 - r; s++)
19735
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19736
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19737
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19738
}// end loop over 's'
19739
}// end loop over 'r'
19740
for (unsigned int r = 0; r < 1; r++)
19742
for (unsigned int s = 0; s < 1 - r; s++)
19744
for (unsigned int t = 1; t < 2 - r - s; t++)
19746
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19747
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19748
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19749
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19750
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19751
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19752
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19753
}// end loop over 't'
19754
}// end loop over 's'
19755
}// end loop over 'r'
19756
for (unsigned int r = 0; r < 3; r++)
19758
for (unsigned int s = 0; s < 3 - r; s++)
19760
for (unsigned int t = 0; t < 3 - r - s; t++)
19762
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19763
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19764
}// end loop over 't'
19765
}// end loop over 's'
19766
}// end loop over 'r'
19768
// Table(s) of coefficients.
19769
static const double coefficients0[10] = \
19770
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
19772
// Compute value(s).
19773
for (unsigned int r = 0; r < 10; r++)
19775
values[2] += coefficients0[r]*basisvalues[r];
19776
}// end loop over 'r'
19782
// Array of basisvalues.
19783
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19785
// Declare helper variables.
19786
unsigned int rr = 0;
19787
unsigned int ss = 0;
19788
unsigned int tt = 0;
19789
double tmp5 = 0.000000000000000;
19790
double tmp6 = 0.000000000000000;
19791
double tmp7 = 0.000000000000000;
19792
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19793
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19794
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19795
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19796
double tmp4 = tmp3*tmp3;
19798
// Compute basisvalues.
19799
basisvalues[0] = 1.000000000000000;
19800
basisvalues[1] = tmp0;
19801
for (unsigned int r = 1; r < 2; r++)
19803
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19804
ss = r*(r + 1)*(r + 2)/6;
19805
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19806
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19807
}// end loop over 'r'
19808
for (unsigned int r = 0; r < 2; r++)
19810
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19811
ss = r*(r + 1)*(r + 2)/6;
19812
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19813
}// end loop over 'r'
19814
for (unsigned int r = 0; r < 1; r++)
19816
for (unsigned int s = 1; s < 2 - r; s++)
19818
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19819
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19820
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19821
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19822
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19823
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19824
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19825
}// end loop over 's'
19826
}// end loop over 'r'
19827
for (unsigned int r = 0; r < 2; r++)
19829
for (unsigned int s = 0; s < 2 - r; s++)
19831
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19832
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19833
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19834
}// end loop over 's'
19835
}// end loop over 'r'
19836
for (unsigned int r = 0; r < 1; r++)
19838
for (unsigned int s = 0; s < 1 - r; s++)
19840
for (unsigned int t = 1; t < 2 - r - s; t++)
19842
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19843
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19844
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19845
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19846
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19847
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19848
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19849
}// end loop over 't'
19850
}// end loop over 's'
19851
}// end loop over 'r'
19852
for (unsigned int r = 0; r < 3; r++)
19854
for (unsigned int s = 0; s < 3 - r; s++)
19856
for (unsigned int t = 0; t < 3 - r - s; t++)
19858
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19859
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19860
}// end loop over 't'
19861
}// end loop over 's'
19862
}// end loop over 'r'
19864
// Table(s) of coefficients.
19865
static const double coefficients0[10] = \
19866
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
19868
// Compute value(s).
19869
for (unsigned int r = 0; r < 10; r++)
19871
values[2] += coefficients0[r]*basisvalues[r];
19872
}// end loop over 'r'
19878
// Array of basisvalues.
19879
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19881
// Declare helper variables.
19882
unsigned int rr = 0;
19883
unsigned int ss = 0;
19884
unsigned int tt = 0;
19885
double tmp5 = 0.000000000000000;
19886
double tmp6 = 0.000000000000000;
19887
double tmp7 = 0.000000000000000;
19888
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19889
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19890
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19891
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19892
double tmp4 = tmp3*tmp3;
19894
// Compute basisvalues.
19895
basisvalues[0] = 1.000000000000000;
19896
basisvalues[1] = tmp0;
19897
for (unsigned int r = 1; r < 2; r++)
19899
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19900
ss = r*(r + 1)*(r + 2)/6;
19901
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19902
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19903
}// end loop over 'r'
19904
for (unsigned int r = 0; r < 2; r++)
19906
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
19907
ss = r*(r + 1)*(r + 2)/6;
19908
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
19909
}// end loop over 'r'
19910
for (unsigned int r = 0; r < 1; r++)
19912
for (unsigned int s = 1; s < 2 - r; s++)
19914
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
19915
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19916
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
19917
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19918
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19919
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
19920
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
19921
}// end loop over 's'
19922
}// end loop over 'r'
19923
for (unsigned int r = 0; r < 2; r++)
19925
for (unsigned int s = 0; s < 2 - r; s++)
19927
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
19928
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
19929
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
19930
}// end loop over 's'
19931
}// end loop over 'r'
19932
for (unsigned int r = 0; r < 1; r++)
19934
for (unsigned int s = 0; s < 1 - r; s++)
19936
for (unsigned int t = 1; t < 2 - r - s; t++)
19938
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
19939
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19940
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
19941
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19942
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19943
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
19944
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
19945
}// end loop over 't'
19946
}// end loop over 's'
19947
}// end loop over 'r'
19948
for (unsigned int r = 0; r < 3; r++)
19950
for (unsigned int s = 0; s < 3 - r; s++)
19952
for (unsigned int t = 0; t < 3 - r - s; t++)
19954
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
19955
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
19956
}// end loop over 't'
19957
}// end loop over 's'
19958
}// end loop over 'r'
19960
// Table(s) of coefficients.
19961
static const double coefficients0[10] = \
19962
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
19964
// Compute value(s).
19965
for (unsigned int r = 0; r < 10; r++)
19967
values[2] += coefficients0[r]*basisvalues[r];
19968
}// end loop over 'r'
19974
// Array of basisvalues.
19975
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
19977
// Declare helper variables.
19978
unsigned int rr = 0;
19979
unsigned int ss = 0;
19980
unsigned int tt = 0;
19981
double tmp5 = 0.000000000000000;
19982
double tmp6 = 0.000000000000000;
19983
double tmp7 = 0.000000000000000;
19984
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
19985
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
19986
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
19987
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
19988
double tmp4 = tmp3*tmp3;
19990
// Compute basisvalues.
19991
basisvalues[0] = 1.000000000000000;
19992
basisvalues[1] = tmp0;
19993
for (unsigned int r = 1; r < 2; r++)
19995
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
19996
ss = r*(r + 1)*(r + 2)/6;
19997
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
19998
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
19999
}// end loop over 'r'
20000
for (unsigned int r = 0; r < 2; r++)
20002
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20003
ss = r*(r + 1)*(r + 2)/6;
20004
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20005
}// end loop over 'r'
20006
for (unsigned int r = 0; r < 1; r++)
20008
for (unsigned int s = 1; s < 2 - r; s++)
20010
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
20011
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20012
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
20013
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20014
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20015
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20016
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
20017
}// end loop over 's'
20018
}// end loop over 'r'
20019
for (unsigned int r = 0; r < 2; r++)
20021
for (unsigned int s = 0; s < 2 - r; s++)
20023
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20024
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20025
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20026
}// end loop over 's'
20027
}// end loop over 'r'
20028
for (unsigned int r = 0; r < 1; r++)
20030
for (unsigned int s = 0; s < 1 - r; s++)
20032
for (unsigned int t = 1; t < 2 - r - s; t++)
20034
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
20035
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20036
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
20037
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20038
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20039
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20040
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
20041
}// end loop over 't'
20042
}// end loop over 's'
20043
}// end loop over 'r'
20044
for (unsigned int r = 0; r < 3; r++)
20046
for (unsigned int s = 0; s < 3 - r; s++)
20048
for (unsigned int t = 0; t < 3 - r - s; t++)
20050
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20051
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20052
}// end loop over 't'
20053
}// end loop over 's'
20054
}// end loop over 'r'
20056
// Table(s) of coefficients.
20057
static const double coefficients0[10] = \
20058
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
20060
// Compute value(s).
20061
for (unsigned int r = 0; r < 10; r++)
20063
values[2] += coefficients0[r]*basisvalues[r];
20064
}// end loop over 'r'
20070
// Array of basisvalues.
20071
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20073
// Declare helper variables.
20074
unsigned int rr = 0;
20075
unsigned int ss = 0;
20076
unsigned int tt = 0;
20077
double tmp5 = 0.000000000000000;
20078
double tmp6 = 0.000000000000000;
20079
double tmp7 = 0.000000000000000;
20080
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20081
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
20082
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
20083
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
20084
double tmp4 = tmp3*tmp3;
20086
// Compute basisvalues.
20087
basisvalues[0] = 1.000000000000000;
20088
basisvalues[1] = tmp0;
20089
for (unsigned int r = 1; r < 2; r++)
20091
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
20092
ss = r*(r + 1)*(r + 2)/6;
20093
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
20094
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
20095
}// end loop over 'r'
20096
for (unsigned int r = 0; r < 2; r++)
20098
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20099
ss = r*(r + 1)*(r + 2)/6;
20100
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20101
}// end loop over 'r'
20102
for (unsigned int r = 0; r < 1; r++)
20104
for (unsigned int s = 1; s < 2 - r; s++)
20106
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
20107
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20108
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
20109
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20110
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20111
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20112
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
20113
}// end loop over 's'
20114
}// end loop over 'r'
20115
for (unsigned int r = 0; r < 2; r++)
20117
for (unsigned int s = 0; s < 2 - r; s++)
20119
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20120
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20121
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20122
}// end loop over 's'
20123
}// end loop over 'r'
20124
for (unsigned int r = 0; r < 1; r++)
20126
for (unsigned int s = 0; s < 1 - r; s++)
20128
for (unsigned int t = 1; t < 2 - r - s; t++)
20130
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
20131
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20132
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
20133
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20134
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20135
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20136
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
20137
}// end loop over 't'
20138
}// end loop over 's'
20139
}// end loop over 'r'
20140
for (unsigned int r = 0; r < 3; r++)
20142
for (unsigned int s = 0; s < 3 - r; s++)
20144
for (unsigned int t = 0; t < 3 - r - s; t++)
20146
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20147
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20148
}// end loop over 't'
20149
}// end loop over 's'
20150
}// end loop over 'r'
20152
// Table(s) of coefficients.
20153
static const double coefficients0[10] = \
20154
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
20156
// Compute value(s).
20157
for (unsigned int r = 0; r < 10; r++)
20159
values[2] += coefficients0[r]*basisvalues[r];
20160
}// end loop over 'r'
20166
// Array of basisvalues.
20167
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20169
// Declare helper variables.
20170
unsigned int rr = 0;
20171
unsigned int ss = 0;
20172
unsigned int tt = 0;
20173
double tmp5 = 0.000000000000000;
20174
double tmp6 = 0.000000000000000;
20175
double tmp7 = 0.000000000000000;
20176
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20177
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
20178
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
20179
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
20180
double tmp4 = tmp3*tmp3;
20182
// Compute basisvalues.
20183
basisvalues[0] = 1.000000000000000;
20184
basisvalues[1] = tmp0;
20185
for (unsigned int r = 1; r < 2; r++)
20187
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
20188
ss = r*(r + 1)*(r + 2)/6;
20189
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
20190
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
20191
}// end loop over 'r'
20192
for (unsigned int r = 0; r < 2; r++)
20194
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20195
ss = r*(r + 1)*(r + 2)/6;
20196
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20197
}// end loop over 'r'
20198
for (unsigned int r = 0; r < 1; r++)
20200
for (unsigned int s = 1; s < 2 - r; s++)
20202
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
20203
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20204
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
20205
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20206
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20207
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20208
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
20209
}// end loop over 's'
20210
}// end loop over 'r'
20211
for (unsigned int r = 0; r < 2; r++)
20213
for (unsigned int s = 0; s < 2 - r; s++)
20215
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20216
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20217
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20218
}// end loop over 's'
20219
}// end loop over 'r'
20220
for (unsigned int r = 0; r < 1; r++)
20222
for (unsigned int s = 0; s < 1 - r; s++)
20224
for (unsigned int t = 1; t < 2 - r - s; t++)
20226
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
20227
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20228
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
20229
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20230
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20231
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20232
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
20233
}// end loop over 't'
20234
}// end loop over 's'
20235
}// end loop over 'r'
20236
for (unsigned int r = 0; r < 3; r++)
20238
for (unsigned int s = 0; s < 3 - r; s++)
20240
for (unsigned int t = 0; t < 3 - r - s; t++)
20242
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20243
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20244
}// end loop over 't'
20245
}// end loop over 's'
20246
}// end loop over 'r'
20248
// Table(s) of coefficients.
20249
static const double coefficients0[10] = \
20250
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
20252
// Compute value(s).
20253
for (unsigned int r = 0; r < 10; r++)
20255
values[2] += coefficients0[r]*basisvalues[r];
20256
}// end loop over 'r'
20262
// Array of basisvalues.
20263
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20265
// Declare helper variables.
20266
unsigned int rr = 0;
20267
unsigned int ss = 0;
20268
unsigned int tt = 0;
20269
double tmp5 = 0.000000000000000;
20270
double tmp6 = 0.000000000000000;
20271
double tmp7 = 0.000000000000000;
20272
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20273
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
20274
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
20275
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
20276
double tmp4 = tmp3*tmp3;
20278
// Compute basisvalues.
20279
basisvalues[0] = 1.000000000000000;
20280
basisvalues[1] = tmp0;
20281
for (unsigned int r = 1; r < 2; r++)
20283
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
20284
ss = r*(r + 1)*(r + 2)/6;
20285
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
20286
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
20287
}// end loop over 'r'
20288
for (unsigned int r = 0; r < 2; r++)
20290
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20291
ss = r*(r + 1)*(r + 2)/6;
20292
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20293
}// end loop over 'r'
20294
for (unsigned int r = 0; r < 1; r++)
20296
for (unsigned int s = 1; s < 2 - r; s++)
20298
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
20299
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20300
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
20301
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20302
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20303
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20304
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
20305
}// end loop over 's'
20306
}// end loop over 'r'
20307
for (unsigned int r = 0; r < 2; r++)
20309
for (unsigned int s = 0; s < 2 - r; s++)
20311
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20312
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20313
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20314
}// end loop over 's'
20315
}// end loop over 'r'
20316
for (unsigned int r = 0; r < 1; r++)
20318
for (unsigned int s = 0; s < 1 - r; s++)
20320
for (unsigned int t = 1; t < 2 - r - s; t++)
20322
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
20323
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20324
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
20325
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20326
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20327
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20328
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
20329
}// end loop over 't'
20330
}// end loop over 's'
20331
}// end loop over 'r'
20332
for (unsigned int r = 0; r < 3; r++)
20334
for (unsigned int s = 0; s < 3 - r; s++)
20336
for (unsigned int t = 0; t < 3 - r - s; t++)
20338
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20339
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20340
}// end loop over 't'
20341
}// end loop over 's'
20342
}// end loop over 'r'
20344
// Table(s) of coefficients.
20345
static const double coefficients0[10] = \
20346
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
20348
// Compute value(s).
20349
for (unsigned int r = 0; r < 10; r++)
20351
values[2] += coefficients0[r]*basisvalues[r];
20352
}// end loop over 'r'
20358
// Array of basisvalues.
20359
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20361
// Declare helper variables.
20362
unsigned int rr = 0;
20363
unsigned int ss = 0;
20364
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20366
// Compute basisvalues.
20367
basisvalues[0] = 1.000000000000000;
20368
basisvalues[1] = tmp0;
20369
for (unsigned int r = 0; r < 1; r++)
20371
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20372
ss = r*(r + 1)*(r + 2)/6;
20373
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20374
}// end loop over 'r'
20375
for (unsigned int r = 0; r < 1; r++)
20377
for (unsigned int s = 0; s < 1 - r; s++)
20379
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20380
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20381
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20382
}// end loop over 's'
20383
}// end loop over 'r'
20384
for (unsigned int r = 0; r < 2; r++)
20386
for (unsigned int s = 0; s < 2 - r; s++)
20388
for (unsigned int t = 0; t < 2 - r - s; t++)
20390
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20391
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20392
}// end loop over 't'
20393
}// end loop over 's'
20394
}// end loop over 'r'
20396
// Table(s) of coefficients.
20397
static const double coefficients0[4] = \
20398
{0.288675134594813, -0.182574185835055, -0.105409255338946, -0.074535599249993};
20400
// Compute value(s).
20401
for (unsigned int r = 0; r < 4; r++)
20403
values[3] += coefficients0[r]*basisvalues[r];
20404
}// end loop over 'r'
20410
// Array of basisvalues.
20411
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20413
// Declare helper variables.
20414
unsigned int rr = 0;
20415
unsigned int ss = 0;
20416
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20418
// Compute basisvalues.
20419
basisvalues[0] = 1.000000000000000;
20420
basisvalues[1] = tmp0;
20421
for (unsigned int r = 0; r < 1; r++)
20423
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20424
ss = r*(r + 1)*(r + 2)/6;
20425
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20426
}// end loop over 'r'
20427
for (unsigned int r = 0; r < 1; r++)
20429
for (unsigned int s = 0; s < 1 - r; s++)
20431
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20432
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20433
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20434
}// end loop over 's'
20435
}// end loop over 'r'
20436
for (unsigned int r = 0; r < 2; r++)
20438
for (unsigned int s = 0; s < 2 - r; s++)
20440
for (unsigned int t = 0; t < 2 - r - s; t++)
20442
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20443
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20444
}// end loop over 't'
20445
}// end loop over 's'
20446
}// end loop over 'r'
20448
// Table(s) of coefficients.
20449
static const double coefficients0[4] = \
20450
{0.288675134594813, 0.182574185835055, -0.105409255338946, -0.074535599249993};
20452
// Compute value(s).
20453
for (unsigned int r = 0; r < 4; r++)
20455
values[3] += coefficients0[r]*basisvalues[r];
20456
}// end loop over 'r'
20462
// Array of basisvalues.
20463
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20465
// Declare helper variables.
20466
unsigned int rr = 0;
20467
unsigned int ss = 0;
20468
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20470
// Compute basisvalues.
20471
basisvalues[0] = 1.000000000000000;
20472
basisvalues[1] = tmp0;
20473
for (unsigned int r = 0; r < 1; r++)
20475
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20476
ss = r*(r + 1)*(r + 2)/6;
20477
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20478
}// end loop over 'r'
20479
for (unsigned int r = 0; r < 1; r++)
20481
for (unsigned int s = 0; s < 1 - r; s++)
20483
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20484
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20485
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20486
}// end loop over 's'
20487
}// end loop over 'r'
20488
for (unsigned int r = 0; r < 2; r++)
20490
for (unsigned int s = 0; s < 2 - r; s++)
20492
for (unsigned int t = 0; t < 2 - r - s; t++)
20494
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20495
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20496
}// end loop over 't'
20497
}// end loop over 's'
20498
}// end loop over 'r'
20500
// Table(s) of coefficients.
20501
static const double coefficients0[4] = \
20502
{0.288675134594813, 0.000000000000000, 0.210818510677892, -0.074535599249993};
20504
// Compute value(s).
20505
for (unsigned int r = 0; r < 4; r++)
20507
values[3] += coefficients0[r]*basisvalues[r];
20508
}// end loop over 'r'
20514
// Array of basisvalues.
20515
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20517
// Declare helper variables.
20518
unsigned int rr = 0;
20519
unsigned int ss = 0;
20520
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20522
// Compute basisvalues.
20523
basisvalues[0] = 1.000000000000000;
20524
basisvalues[1] = tmp0;
20525
for (unsigned int r = 0; r < 1; r++)
20527
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20528
ss = r*(r + 1)*(r + 2)/6;
20529
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20530
}// end loop over 'r'
20531
for (unsigned int r = 0; r < 1; r++)
20533
for (unsigned int s = 0; s < 1 - r; s++)
20535
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20536
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20537
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20538
}// end loop over 's'
20539
}// end loop over 'r'
20540
for (unsigned int r = 0; r < 2; r++)
20542
for (unsigned int s = 0; s < 2 - r; s++)
20544
for (unsigned int t = 0; t < 2 - r - s; t++)
20546
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20547
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20548
}// end loop over 't'
20549
}// end loop over 's'
20550
}// end loop over 'r'
20552
// Table(s) of coefficients.
20553
static const double coefficients0[4] = \
20554
{0.288675134594813, 0.000000000000000, 0.000000000000000, 0.223606797749979};
20556
// Compute value(s).
20557
for (unsigned int r = 0; r < 4; r++)
20559
values[3] += coefficients0[r]*basisvalues[r];
20560
}// end loop over 'r'
20567
/// Evaluate all basis functions at given point in cell
20568
virtual void evaluate_basis_all(double* values,
20569
const double* coordinates,
20570
const ufc::cell& c) const
20572
// Helper variable to hold values of a single dof.
20573
double dof_values[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20575
// Loop dofs and call evaluate_basis.
20576
for (unsigned int r = 0; r < 34; r++)
20578
evaluate_basis(r, dof_values, coordinates, c);
20579
for (unsigned int s = 0; s < 4; s++)
20581
values[r*4 + s] = dof_values[s];
20582
}// end loop over 's'
20583
}// end loop over 'r'
20586
/// Evaluate order n derivatives of basis function i at given point in cell
20587
virtual void evaluate_basis_derivatives(unsigned int i,
20590
const double* coordinates,
20591
const ufc::cell& c) const
20593
// Extract vertex coordinates
20594
const double * const * x = c.coordinates;
20596
// Compute Jacobian of affine map from reference cell
20597
const double J_00 = x[1][0] - x[0][0];
20598
const double J_01 = x[2][0] - x[0][0];
20599
const double J_02 = x[3][0] - x[0][0];
20600
const double J_10 = x[1][1] - x[0][1];
20601
const double J_11 = x[2][1] - x[0][1];
20602
const double J_12 = x[3][1] - x[0][1];
20603
const double J_20 = x[1][2] - x[0][2];
20604
const double J_21 = x[2][2] - x[0][2];
20605
const double J_22 = x[3][2] - x[0][2];
20607
// Compute sub determinants
20608
const double d_00 = J_11*J_22 - J_12*J_21;
20609
const double d_01 = J_12*J_20 - J_10*J_22;
20610
const double d_02 = J_10*J_21 - J_11*J_20;
20611
const double d_10 = J_02*J_21 - J_01*J_22;
20612
const double d_11 = J_00*J_22 - J_02*J_20;
20613
const double d_12 = J_01*J_20 - J_00*J_21;
20614
const double d_20 = J_01*J_12 - J_02*J_11;
20615
const double d_21 = J_02*J_10 - J_00*J_12;
20616
const double d_22 = J_00*J_11 - J_01*J_10;
20618
// Compute determinant of Jacobian
20619
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
20621
// Compute inverse of Jacobian
20622
const double K_00 = d_00 / detJ;
20623
const double K_01 = d_10 / detJ;
20624
const double K_02 = d_20 / detJ;
20625
const double K_10 = d_01 / detJ;
20626
const double K_11 = d_11 / detJ;
20627
const double K_12 = d_21 / detJ;
20628
const double K_20 = d_02 / detJ;
20629
const double K_21 = d_12 / detJ;
20630
const double K_22 = d_22 / detJ;
20632
// Compute constants
20633
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
20634
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
20635
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
20637
// Get coordinates and map to the reference (FIAT) element
20638
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
20639
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
20640
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
20643
// Compute number of derivatives.
20644
unsigned int num_derivatives = 1;
20645
for (unsigned int r = 0; r < n; r++)
20647
num_derivatives *= 3;
20648
}// end loop over 'r'
20650
// Declare pointer to two dimensional array that holds combinations of derivatives and initialise
20651
unsigned int **combinations = new unsigned int *[num_derivatives];
20652
for (unsigned int row = 0; row < num_derivatives; row++)
20654
combinations[row] = new unsigned int [n];
20655
for (unsigned int col = 0; col < n; col++)
20656
combinations[row][col] = 0;
20659
// Generate combinations of derivatives
20660
for (unsigned int row = 1; row < num_derivatives; row++)
20662
for (unsigned int num = 0; num < row; num++)
20664
for (unsigned int col = n-1; col+1 > 0; col--)
20666
if (combinations[row][col] + 1 > 2)
20667
combinations[row][col] = 0;
20670
combinations[row][col] += 1;
20677
// Compute inverse of Jacobian
20678
const double Jinv[3][3] = {{K_00, K_01, K_02}, {K_10, K_11, K_12}, {K_20, K_21, K_22}};
20680
// Declare transformation matrix
20681
// Declare pointer to two dimensional array and initialise
20682
double **transform = new double *[num_derivatives];
20684
for (unsigned int j = 0; j < num_derivatives; j++)
20686
transform[j] = new double [num_derivatives];
20687
for (unsigned int k = 0; k < num_derivatives; k++)
20688
transform[j][k] = 1;
20691
// Construct transformation matrix
20692
for (unsigned int row = 0; row < num_derivatives; row++)
20694
for (unsigned int col = 0; col < num_derivatives; col++)
20696
for (unsigned int k = 0; k < n; k++)
20697
transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
20701
// Reset values. Assuming that values is always an array.
20702
for (unsigned int r = 0; r < 4*num_derivatives; r++)
20704
values[r] = 0.000000000000000;
20705
}// end loop over 'r'
20712
// Array of basisvalues.
20713
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20715
// Declare helper variables.
20716
unsigned int rr = 0;
20717
unsigned int ss = 0;
20718
unsigned int tt = 0;
20719
double tmp5 = 0.000000000000000;
20720
double tmp6 = 0.000000000000000;
20721
double tmp7 = 0.000000000000000;
20722
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20723
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
20724
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
20725
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
20726
double tmp4 = tmp3*tmp3;
20728
// Compute basisvalues.
20729
basisvalues[0] = 1.000000000000000;
20730
basisvalues[1] = tmp0;
20731
for (unsigned int r = 1; r < 2; r++)
20733
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
20734
ss = r*(r + 1)*(r + 2)/6;
20735
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
20736
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
20737
}// end loop over 'r'
20738
for (unsigned int r = 0; r < 2; r++)
20740
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
20741
ss = r*(r + 1)*(r + 2)/6;
20742
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
20743
}// end loop over 'r'
20744
for (unsigned int r = 0; r < 1; r++)
20746
for (unsigned int s = 1; s < 2 - r; s++)
20748
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
20749
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20750
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
20751
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20752
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20753
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
20754
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
20755
}// end loop over 's'
20756
}// end loop over 'r'
20757
for (unsigned int r = 0; r < 2; r++)
20759
for (unsigned int s = 0; s < 2 - r; s++)
20761
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
20762
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
20763
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
20764
}// end loop over 's'
20765
}// end loop over 'r'
20766
for (unsigned int r = 0; r < 1; r++)
20768
for (unsigned int s = 0; s < 1 - r; s++)
20770
for (unsigned int t = 1; t < 2 - r - s; t++)
20772
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
20773
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20774
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
20775
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20776
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20777
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
20778
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
20779
}// end loop over 't'
20780
}// end loop over 's'
20781
}// end loop over 'r'
20782
for (unsigned int r = 0; r < 3; r++)
20784
for (unsigned int s = 0; s < 3 - r; s++)
20786
for (unsigned int t = 0; t < 3 - r - s; t++)
20788
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
20789
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
20790
}// end loop over 't'
20791
}// end loop over 's'
20792
}// end loop over 'r'
20794
// Table(s) of coefficients.
20795
static const double coefficients0[10] = \
20796
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
20798
// Tables of derivatives of the polynomial base (transpose).
20799
static const double dmats0[10][10] = \
20800
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20801
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20802
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20803
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20804
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20805
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20806
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20807
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20808
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20809
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
20811
static const double dmats1[10][10] = \
20812
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20813
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20814
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20815
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20816
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20817
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20818
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20819
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20820
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20821
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
20823
static const double dmats2[10][10] = \
20824
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20825
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20826
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20827
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20828
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20829
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20830
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20831
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20832
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20833
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
20835
// Compute reference derivatives.
20836
// Declare pointer to array of derivatives on FIAT element.
20837
double *derivatives = new double[num_derivatives];
20838
for (unsigned int r = 0; r < num_derivatives; r++)
20840
derivatives[r] = 0.000000000000000;
20841
}// end loop over 'r'
20843
// Declare derivative matrix (of polynomial basis).
20844
double dmats[10][10] = \
20845
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20846
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20847
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20848
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20849
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20850
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20851
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20852
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
20853
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
20854
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
20856
// Declare (auxiliary) derivative matrix (of polynomial basis).
20857
double dmats_old[10][10] = \
20858
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20859
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20860
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20861
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20862
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20863
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20864
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
20865
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
20866
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
20867
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
20869
// Loop possible derivatives.
20870
for (unsigned int r = 0; r < num_derivatives; r++)
20872
// Resetting dmats values to compute next derivative.
20873
for (unsigned int t = 0; t < 10; t++)
20875
for (unsigned int u = 0; u < 10; u++)
20877
dmats[t][u] = 0.000000000000000;
20880
dmats[t][u] = 1.000000000000000;
20883
}// end loop over 'u'
20884
}// end loop over 't'
20886
// Looping derivative order to generate dmats.
20887
for (unsigned int s = 0; s < n; s++)
20889
// Updating dmats_old with new values and resetting dmats.
20890
for (unsigned int t = 0; t < 10; t++)
20892
for (unsigned int u = 0; u < 10; u++)
20894
dmats_old[t][u] = dmats[t][u];
20895
dmats[t][u] = 0.000000000000000;
20896
}// end loop over 'u'
20897
}// end loop over 't'
20899
// Update dmats using an inner product.
20900
if (combinations[r][s] == 0)
20902
for (unsigned int t = 0; t < 10; t++)
20904
for (unsigned int u = 0; u < 10; u++)
20906
for (unsigned int tu = 0; tu < 10; tu++)
20908
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
20909
}// end loop over 'tu'
20910
}// end loop over 'u'
20911
}// end loop over 't'
20914
if (combinations[r][s] == 1)
20916
for (unsigned int t = 0; t < 10; t++)
20918
for (unsigned int u = 0; u < 10; u++)
20920
for (unsigned int tu = 0; tu < 10; tu++)
20922
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
20923
}// end loop over 'tu'
20924
}// end loop over 'u'
20925
}// end loop over 't'
20928
if (combinations[r][s] == 2)
20930
for (unsigned int t = 0; t < 10; t++)
20932
for (unsigned int u = 0; u < 10; u++)
20934
for (unsigned int tu = 0; tu < 10; tu++)
20936
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
20937
}// end loop over 'tu'
20938
}// end loop over 'u'
20939
}// end loop over 't'
20942
}// end loop over 's'
20943
for (unsigned int s = 0; s < 10; s++)
20945
for (unsigned int t = 0; t < 10; t++)
20947
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
20948
}// end loop over 't'
20949
}// end loop over 's'
20950
}// end loop over 'r'
20952
// Transform derivatives back to physical element
20953
for (unsigned int r = 0; r < num_derivatives; r++)
20955
for (unsigned int s = 0; s < num_derivatives; s++)
20957
values[r] += transform[r][s]*derivatives[s];
20958
}// end loop over 's'
20959
}// end loop over 'r'
20961
// Delete pointer to array of derivatives on FIAT element
20962
delete [] derivatives;
20964
// Delete pointer to array of combinations of derivatives and transform
20965
for (unsigned int r = 0; r < num_derivatives; r++)
20967
delete [] combinations[r];
20968
}// end loop over 'r'
20969
delete [] combinations;
20970
for (unsigned int r = 0; r < num_derivatives; r++)
20972
delete [] transform[r];
20973
}// end loop over 'r'
20974
delete [] transform;
20980
// Array of basisvalues.
20981
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
20983
// Declare helper variables.
20984
unsigned int rr = 0;
20985
unsigned int ss = 0;
20986
unsigned int tt = 0;
20987
double tmp5 = 0.000000000000000;
20988
double tmp6 = 0.000000000000000;
20989
double tmp7 = 0.000000000000000;
20990
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
20991
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
20992
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
20993
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
20994
double tmp4 = tmp3*tmp3;
20996
// Compute basisvalues.
20997
basisvalues[0] = 1.000000000000000;
20998
basisvalues[1] = tmp0;
20999
for (unsigned int r = 1; r < 2; r++)
21001
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
21002
ss = r*(r + 1)*(r + 2)/6;
21003
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
21004
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
21005
}// end loop over 'r'
21006
for (unsigned int r = 0; r < 2; r++)
21008
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
21009
ss = r*(r + 1)*(r + 2)/6;
21010
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
21011
}// end loop over 'r'
21012
for (unsigned int r = 0; r < 1; r++)
21014
for (unsigned int s = 1; s < 2 - r; s++)
21016
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
21017
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21018
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
21019
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21020
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21021
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21022
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
21023
}// end loop over 's'
21024
}// end loop over 'r'
21025
for (unsigned int r = 0; r < 2; r++)
21027
for (unsigned int s = 0; s < 2 - r; s++)
21029
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
21030
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21031
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
21032
}// end loop over 's'
21033
}// end loop over 'r'
21034
for (unsigned int r = 0; r < 1; r++)
21036
for (unsigned int s = 0; s < 1 - r; s++)
21038
for (unsigned int t = 1; t < 2 - r - s; t++)
21040
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
21041
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21042
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
21043
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21044
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21045
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21046
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
21047
}// end loop over 't'
21048
}// end loop over 's'
21049
}// end loop over 'r'
21050
for (unsigned int r = 0; r < 3; r++)
21052
for (unsigned int s = 0; s < 3 - r; s++)
21054
for (unsigned int t = 0; t < 3 - r - s; t++)
21056
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21057
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
21058
}// end loop over 't'
21059
}// end loop over 's'
21060
}// end loop over 'r'
21062
// Table(s) of coefficients.
21063
static const double coefficients0[10] = \
21064
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
21066
// Tables of derivatives of the polynomial base (transpose).
21067
static const double dmats0[10][10] = \
21068
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21069
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21070
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21071
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21072
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21073
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21074
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21075
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21076
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21077
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21079
static const double dmats1[10][10] = \
21080
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21081
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21082
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21083
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21084
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21085
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21086
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21087
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21088
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21089
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21091
static const double dmats2[10][10] = \
21092
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21093
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21094
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21095
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21096
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21097
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21098
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21099
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21100
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21101
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21103
// Compute reference derivatives.
21104
// Declare pointer to array of derivatives on FIAT element.
21105
double *derivatives = new double[num_derivatives];
21106
for (unsigned int r = 0; r < num_derivatives; r++)
21108
derivatives[r] = 0.000000000000000;
21109
}// end loop over 'r'
21111
// Declare derivative matrix (of polynomial basis).
21112
double dmats[10][10] = \
21113
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21114
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21115
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21116
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21117
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21118
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21119
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21120
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21121
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21122
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21124
// Declare (auxiliary) derivative matrix (of polynomial basis).
21125
double dmats_old[10][10] = \
21126
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21127
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21128
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21129
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21130
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21131
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21132
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21133
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21134
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21135
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21137
// Loop possible derivatives.
21138
for (unsigned int r = 0; r < num_derivatives; r++)
21140
// Resetting dmats values to compute next derivative.
21141
for (unsigned int t = 0; t < 10; t++)
21143
for (unsigned int u = 0; u < 10; u++)
21145
dmats[t][u] = 0.000000000000000;
21148
dmats[t][u] = 1.000000000000000;
21151
}// end loop over 'u'
21152
}// end loop over 't'
21154
// Looping derivative order to generate dmats.
21155
for (unsigned int s = 0; s < n; s++)
21157
// Updating dmats_old with new values and resetting dmats.
21158
for (unsigned int t = 0; t < 10; t++)
21160
for (unsigned int u = 0; u < 10; u++)
21162
dmats_old[t][u] = dmats[t][u];
21163
dmats[t][u] = 0.000000000000000;
21164
}// end loop over 'u'
21165
}// end loop over 't'
21167
// Update dmats using an inner product.
21168
if (combinations[r][s] == 0)
21170
for (unsigned int t = 0; t < 10; t++)
21172
for (unsigned int u = 0; u < 10; u++)
21174
for (unsigned int tu = 0; tu < 10; tu++)
21176
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
21177
}// end loop over 'tu'
21178
}// end loop over 'u'
21179
}// end loop over 't'
21182
if (combinations[r][s] == 1)
21184
for (unsigned int t = 0; t < 10; t++)
21186
for (unsigned int u = 0; u < 10; u++)
21188
for (unsigned int tu = 0; tu < 10; tu++)
21190
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
21191
}// end loop over 'tu'
21192
}// end loop over 'u'
21193
}// end loop over 't'
21196
if (combinations[r][s] == 2)
21198
for (unsigned int t = 0; t < 10; t++)
21200
for (unsigned int u = 0; u < 10; u++)
21202
for (unsigned int tu = 0; tu < 10; tu++)
21204
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
21205
}// end loop over 'tu'
21206
}// end loop over 'u'
21207
}// end loop over 't'
21210
}// end loop over 's'
21211
for (unsigned int s = 0; s < 10; s++)
21213
for (unsigned int t = 0; t < 10; t++)
21215
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
21216
}// end loop over 't'
21217
}// end loop over 's'
21218
}// end loop over 'r'
21220
// Transform derivatives back to physical element
21221
for (unsigned int r = 0; r < num_derivatives; r++)
21223
for (unsigned int s = 0; s < num_derivatives; s++)
21225
values[r] += transform[r][s]*derivatives[s];
21226
}// end loop over 's'
21227
}// end loop over 'r'
21229
// Delete pointer to array of derivatives on FIAT element
21230
delete [] derivatives;
21232
// Delete pointer to array of combinations of derivatives and transform
21233
for (unsigned int r = 0; r < num_derivatives; r++)
21235
delete [] combinations[r];
21236
}// end loop over 'r'
21237
delete [] combinations;
21238
for (unsigned int r = 0; r < num_derivatives; r++)
21240
delete [] transform[r];
21241
}// end loop over 'r'
21242
delete [] transform;
21248
// Array of basisvalues.
21249
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
21251
// Declare helper variables.
21252
unsigned int rr = 0;
21253
unsigned int ss = 0;
21254
unsigned int tt = 0;
21255
double tmp5 = 0.000000000000000;
21256
double tmp6 = 0.000000000000000;
21257
double tmp7 = 0.000000000000000;
21258
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
21259
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
21260
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
21261
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
21262
double tmp4 = tmp3*tmp3;
21264
// Compute basisvalues.
21265
basisvalues[0] = 1.000000000000000;
21266
basisvalues[1] = tmp0;
21267
for (unsigned int r = 1; r < 2; r++)
21269
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
21270
ss = r*(r + 1)*(r + 2)/6;
21271
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
21272
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
21273
}// end loop over 'r'
21274
for (unsigned int r = 0; r < 2; r++)
21276
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
21277
ss = r*(r + 1)*(r + 2)/6;
21278
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
21279
}// end loop over 'r'
21280
for (unsigned int r = 0; r < 1; r++)
21282
for (unsigned int s = 1; s < 2 - r; s++)
21284
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
21285
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21286
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
21287
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21288
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21289
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21290
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
21291
}// end loop over 's'
21292
}// end loop over 'r'
21293
for (unsigned int r = 0; r < 2; r++)
21295
for (unsigned int s = 0; s < 2 - r; s++)
21297
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
21298
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21299
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
21300
}// end loop over 's'
21301
}// end loop over 'r'
21302
for (unsigned int r = 0; r < 1; r++)
21304
for (unsigned int s = 0; s < 1 - r; s++)
21306
for (unsigned int t = 1; t < 2 - r - s; t++)
21308
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
21309
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21310
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
21311
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21312
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21313
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21314
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
21315
}// end loop over 't'
21316
}// end loop over 's'
21317
}// end loop over 'r'
21318
for (unsigned int r = 0; r < 3; r++)
21320
for (unsigned int s = 0; s < 3 - r; s++)
21322
for (unsigned int t = 0; t < 3 - r - s; t++)
21324
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21325
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
21326
}// end loop over 't'
21327
}// end loop over 's'
21328
}// end loop over 'r'
21330
// Table(s) of coefficients.
21331
static const double coefficients0[10] = \
21332
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
21334
// Tables of derivatives of the polynomial base (transpose).
21335
static const double dmats0[10][10] = \
21336
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21337
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21338
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21339
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21340
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21341
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21342
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21343
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21344
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21345
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21347
static const double dmats1[10][10] = \
21348
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21349
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21350
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21351
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21352
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21353
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21354
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21355
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21356
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21357
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21359
static const double dmats2[10][10] = \
21360
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21361
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21362
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21363
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21364
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21365
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21366
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21367
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21368
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21369
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21371
// Compute reference derivatives.
21372
// Declare pointer to array of derivatives on FIAT element.
21373
double *derivatives = new double[num_derivatives];
21374
for (unsigned int r = 0; r < num_derivatives; r++)
21376
derivatives[r] = 0.000000000000000;
21377
}// end loop over 'r'
21379
// Declare derivative matrix (of polynomial basis).
21380
double dmats[10][10] = \
21381
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21382
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21383
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21384
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21385
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21386
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21387
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21388
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21389
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21390
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21392
// Declare (auxiliary) derivative matrix (of polynomial basis).
21393
double dmats_old[10][10] = \
21394
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21395
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21396
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21397
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21398
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21399
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21400
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21401
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21402
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21403
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21405
// Loop possible derivatives.
21406
for (unsigned int r = 0; r < num_derivatives; r++)
21408
// Resetting dmats values to compute next derivative.
21409
for (unsigned int t = 0; t < 10; t++)
21411
for (unsigned int u = 0; u < 10; u++)
21413
dmats[t][u] = 0.000000000000000;
21416
dmats[t][u] = 1.000000000000000;
21419
}// end loop over 'u'
21420
}// end loop over 't'
21422
// Looping derivative order to generate dmats.
21423
for (unsigned int s = 0; s < n; s++)
21425
// Updating dmats_old with new values and resetting dmats.
21426
for (unsigned int t = 0; t < 10; t++)
21428
for (unsigned int u = 0; u < 10; u++)
21430
dmats_old[t][u] = dmats[t][u];
21431
dmats[t][u] = 0.000000000000000;
21432
}// end loop over 'u'
21433
}// end loop over 't'
21435
// Update dmats using an inner product.
21436
if (combinations[r][s] == 0)
21438
for (unsigned int t = 0; t < 10; t++)
21440
for (unsigned int u = 0; u < 10; u++)
21442
for (unsigned int tu = 0; tu < 10; tu++)
21444
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
21445
}// end loop over 'tu'
21446
}// end loop over 'u'
21447
}// end loop over 't'
21450
if (combinations[r][s] == 1)
21452
for (unsigned int t = 0; t < 10; t++)
21454
for (unsigned int u = 0; u < 10; u++)
21456
for (unsigned int tu = 0; tu < 10; tu++)
21458
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
21459
}// end loop over 'tu'
21460
}// end loop over 'u'
21461
}// end loop over 't'
21464
if (combinations[r][s] == 2)
21466
for (unsigned int t = 0; t < 10; t++)
21468
for (unsigned int u = 0; u < 10; u++)
21470
for (unsigned int tu = 0; tu < 10; tu++)
21472
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
21473
}// end loop over 'tu'
21474
}// end loop over 'u'
21475
}// end loop over 't'
21478
}// end loop over 's'
21479
for (unsigned int s = 0; s < 10; s++)
21481
for (unsigned int t = 0; t < 10; t++)
21483
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
21484
}// end loop over 't'
21485
}// end loop over 's'
21486
}// end loop over 'r'
21488
// Transform derivatives back to physical element
21489
for (unsigned int r = 0; r < num_derivatives; r++)
21491
for (unsigned int s = 0; s < num_derivatives; s++)
21493
values[r] += transform[r][s]*derivatives[s];
21494
}// end loop over 's'
21495
}// end loop over 'r'
21497
// Delete pointer to array of derivatives on FIAT element
21498
delete [] derivatives;
21500
// Delete pointer to array of combinations of derivatives and transform
21501
for (unsigned int r = 0; r < num_derivatives; r++)
21503
delete [] combinations[r];
21504
}// end loop over 'r'
21505
delete [] combinations;
21506
for (unsigned int r = 0; r < num_derivatives; r++)
21508
delete [] transform[r];
21509
}// end loop over 'r'
21510
delete [] transform;
21516
// Array of basisvalues.
21517
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
21519
// Declare helper variables.
21520
unsigned int rr = 0;
21521
unsigned int ss = 0;
21522
unsigned int tt = 0;
21523
double tmp5 = 0.000000000000000;
21524
double tmp6 = 0.000000000000000;
21525
double tmp7 = 0.000000000000000;
21526
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
21527
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
21528
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
21529
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
21530
double tmp4 = tmp3*tmp3;
21532
// Compute basisvalues.
21533
basisvalues[0] = 1.000000000000000;
21534
basisvalues[1] = tmp0;
21535
for (unsigned int r = 1; r < 2; r++)
21537
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
21538
ss = r*(r + 1)*(r + 2)/6;
21539
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
21540
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
21541
}// end loop over 'r'
21542
for (unsigned int r = 0; r < 2; r++)
21544
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
21545
ss = r*(r + 1)*(r + 2)/6;
21546
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
21547
}// end loop over 'r'
21548
for (unsigned int r = 0; r < 1; r++)
21550
for (unsigned int s = 1; s < 2 - r; s++)
21552
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
21553
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21554
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
21555
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21556
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21557
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21558
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
21559
}// end loop over 's'
21560
}// end loop over 'r'
21561
for (unsigned int r = 0; r < 2; r++)
21563
for (unsigned int s = 0; s < 2 - r; s++)
21565
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
21566
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21567
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
21568
}// end loop over 's'
21569
}// end loop over 'r'
21570
for (unsigned int r = 0; r < 1; r++)
21572
for (unsigned int s = 0; s < 1 - r; s++)
21574
for (unsigned int t = 1; t < 2 - r - s; t++)
21576
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
21577
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21578
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
21579
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21580
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21581
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21582
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
21583
}// end loop over 't'
21584
}// end loop over 's'
21585
}// end loop over 'r'
21586
for (unsigned int r = 0; r < 3; r++)
21588
for (unsigned int s = 0; s < 3 - r; s++)
21590
for (unsigned int t = 0; t < 3 - r - s; t++)
21592
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21593
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
21594
}// end loop over 't'
21595
}// end loop over 's'
21596
}// end loop over 'r'
21598
// Table(s) of coefficients.
21599
static const double coefficients0[10] = \
21600
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
21602
// Tables of derivatives of the polynomial base (transpose).
21603
static const double dmats0[10][10] = \
21604
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21605
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21606
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21607
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21608
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21609
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21610
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21611
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21612
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21613
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21615
static const double dmats1[10][10] = \
21616
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21617
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21618
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21619
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21620
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21621
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21622
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21623
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21624
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21625
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21627
static const double dmats2[10][10] = \
21628
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21629
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21630
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21631
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21632
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21633
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21634
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21635
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21636
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21637
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21639
// Compute reference derivatives.
21640
// Declare pointer to array of derivatives on FIAT element.
21641
double *derivatives = new double[num_derivatives];
21642
for (unsigned int r = 0; r < num_derivatives; r++)
21644
derivatives[r] = 0.000000000000000;
21645
}// end loop over 'r'
21647
// Declare derivative matrix (of polynomial basis).
21648
double dmats[10][10] = \
21649
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21650
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21651
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21652
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21653
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21654
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21655
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21656
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21657
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21658
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21660
// Declare (auxiliary) derivative matrix (of polynomial basis).
21661
double dmats_old[10][10] = \
21662
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21663
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21664
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21665
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21666
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21667
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21668
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21669
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21670
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21671
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21673
// Loop possible derivatives.
21674
for (unsigned int r = 0; r < num_derivatives; r++)
21676
// Resetting dmats values to compute next derivative.
21677
for (unsigned int t = 0; t < 10; t++)
21679
for (unsigned int u = 0; u < 10; u++)
21681
dmats[t][u] = 0.000000000000000;
21684
dmats[t][u] = 1.000000000000000;
21687
}// end loop over 'u'
21688
}// end loop over 't'
21690
// Looping derivative order to generate dmats.
21691
for (unsigned int s = 0; s < n; s++)
21693
// Updating dmats_old with new values and resetting dmats.
21694
for (unsigned int t = 0; t < 10; t++)
21696
for (unsigned int u = 0; u < 10; u++)
21698
dmats_old[t][u] = dmats[t][u];
21699
dmats[t][u] = 0.000000000000000;
21700
}// end loop over 'u'
21701
}// end loop over 't'
21703
// Update dmats using an inner product.
21704
if (combinations[r][s] == 0)
21706
for (unsigned int t = 0; t < 10; t++)
21708
for (unsigned int u = 0; u < 10; u++)
21710
for (unsigned int tu = 0; tu < 10; tu++)
21712
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
21713
}// end loop over 'tu'
21714
}// end loop over 'u'
21715
}// end loop over 't'
21718
if (combinations[r][s] == 1)
21720
for (unsigned int t = 0; t < 10; t++)
21722
for (unsigned int u = 0; u < 10; u++)
21724
for (unsigned int tu = 0; tu < 10; tu++)
21726
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
21727
}// end loop over 'tu'
21728
}// end loop over 'u'
21729
}// end loop over 't'
21732
if (combinations[r][s] == 2)
21734
for (unsigned int t = 0; t < 10; t++)
21736
for (unsigned int u = 0; u < 10; u++)
21738
for (unsigned int tu = 0; tu < 10; tu++)
21740
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
21741
}// end loop over 'tu'
21742
}// end loop over 'u'
21743
}// end loop over 't'
21746
}// end loop over 's'
21747
for (unsigned int s = 0; s < 10; s++)
21749
for (unsigned int t = 0; t < 10; t++)
21751
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
21752
}// end loop over 't'
21753
}// end loop over 's'
21754
}// end loop over 'r'
21756
// Transform derivatives back to physical element
21757
for (unsigned int r = 0; r < num_derivatives; r++)
21759
for (unsigned int s = 0; s < num_derivatives; s++)
21761
values[r] += transform[r][s]*derivatives[s];
21762
}// end loop over 's'
21763
}// end loop over 'r'
21765
// Delete pointer to array of derivatives on FIAT element
21766
delete [] derivatives;
21768
// Delete pointer to array of combinations of derivatives and transform
21769
for (unsigned int r = 0; r < num_derivatives; r++)
21771
delete [] combinations[r];
21772
}// end loop over 'r'
21773
delete [] combinations;
21774
for (unsigned int r = 0; r < num_derivatives; r++)
21776
delete [] transform[r];
21777
}// end loop over 'r'
21778
delete [] transform;
21784
// Array of basisvalues.
21785
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
21787
// Declare helper variables.
21788
unsigned int rr = 0;
21789
unsigned int ss = 0;
21790
unsigned int tt = 0;
21791
double tmp5 = 0.000000000000000;
21792
double tmp6 = 0.000000000000000;
21793
double tmp7 = 0.000000000000000;
21794
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
21795
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
21796
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
21797
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
21798
double tmp4 = tmp3*tmp3;
21800
// Compute basisvalues.
21801
basisvalues[0] = 1.000000000000000;
21802
basisvalues[1] = tmp0;
21803
for (unsigned int r = 1; r < 2; r++)
21805
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
21806
ss = r*(r + 1)*(r + 2)/6;
21807
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
21808
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
21809
}// end loop over 'r'
21810
for (unsigned int r = 0; r < 2; r++)
21812
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
21813
ss = r*(r + 1)*(r + 2)/6;
21814
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
21815
}// end loop over 'r'
21816
for (unsigned int r = 0; r < 1; r++)
21818
for (unsigned int s = 1; s < 2 - r; s++)
21820
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
21821
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21822
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
21823
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21824
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21825
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
21826
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
21827
}// end loop over 's'
21828
}// end loop over 'r'
21829
for (unsigned int r = 0; r < 2; r++)
21831
for (unsigned int s = 0; s < 2 - r; s++)
21833
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
21834
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
21835
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
21836
}// end loop over 's'
21837
}// end loop over 'r'
21838
for (unsigned int r = 0; r < 1; r++)
21840
for (unsigned int s = 0; s < 1 - r; s++)
21842
for (unsigned int t = 1; t < 2 - r - s; t++)
21844
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
21845
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21846
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
21847
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21848
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21849
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
21850
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
21851
}// end loop over 't'
21852
}// end loop over 's'
21853
}// end loop over 'r'
21854
for (unsigned int r = 0; r < 3; r++)
21856
for (unsigned int s = 0; s < 3 - r; s++)
21858
for (unsigned int t = 0; t < 3 - r - s; t++)
21860
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
21861
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
21862
}// end loop over 't'
21863
}// end loop over 's'
21864
}// end loop over 'r'
21866
// Table(s) of coefficients.
21867
static const double coefficients0[10] = \
21868
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
21870
// Tables of derivatives of the polynomial base (transpose).
21871
static const double dmats0[10][10] = \
21872
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21873
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21874
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21875
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21876
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21877
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21878
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21879
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21880
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21881
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21883
static const double dmats1[10][10] = \
21884
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21885
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21886
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21887
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21888
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21889
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21890
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21891
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21892
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21893
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21895
static const double dmats2[10][10] = \
21896
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21897
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21898
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21899
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21900
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21901
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21902
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21903
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21904
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21905
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
21907
// Compute reference derivatives.
21908
// Declare pointer to array of derivatives on FIAT element.
21909
double *derivatives = new double[num_derivatives];
21910
for (unsigned int r = 0; r < num_derivatives; r++)
21912
derivatives[r] = 0.000000000000000;
21913
}// end loop over 'r'
21915
// Declare derivative matrix (of polynomial basis).
21916
double dmats[10][10] = \
21917
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21918
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21919
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21920
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21921
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21922
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21923
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21924
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21925
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21926
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21928
// Declare (auxiliary) derivative matrix (of polynomial basis).
21929
double dmats_old[10][10] = \
21930
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21931
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21932
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21933
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21934
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21935
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21936
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
21937
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
21938
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
21939
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
21941
// Loop possible derivatives.
21942
for (unsigned int r = 0; r < num_derivatives; r++)
21944
// Resetting dmats values to compute next derivative.
21945
for (unsigned int t = 0; t < 10; t++)
21947
for (unsigned int u = 0; u < 10; u++)
21949
dmats[t][u] = 0.000000000000000;
21952
dmats[t][u] = 1.000000000000000;
21955
}// end loop over 'u'
21956
}// end loop over 't'
21958
// Looping derivative order to generate dmats.
21959
for (unsigned int s = 0; s < n; s++)
21961
// Updating dmats_old with new values and resetting dmats.
21962
for (unsigned int t = 0; t < 10; t++)
21964
for (unsigned int u = 0; u < 10; u++)
21966
dmats_old[t][u] = dmats[t][u];
21967
dmats[t][u] = 0.000000000000000;
21968
}// end loop over 'u'
21969
}// end loop over 't'
21971
// Update dmats using an inner product.
21972
if (combinations[r][s] == 0)
21974
for (unsigned int t = 0; t < 10; t++)
21976
for (unsigned int u = 0; u < 10; u++)
21978
for (unsigned int tu = 0; tu < 10; tu++)
21980
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
21981
}// end loop over 'tu'
21982
}// end loop over 'u'
21983
}// end loop over 't'
21986
if (combinations[r][s] == 1)
21988
for (unsigned int t = 0; t < 10; t++)
21990
for (unsigned int u = 0; u < 10; u++)
21992
for (unsigned int tu = 0; tu < 10; tu++)
21994
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
21995
}// end loop over 'tu'
21996
}// end loop over 'u'
21997
}// end loop over 't'
22000
if (combinations[r][s] == 2)
22002
for (unsigned int t = 0; t < 10; t++)
22004
for (unsigned int u = 0; u < 10; u++)
22006
for (unsigned int tu = 0; tu < 10; tu++)
22008
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
22009
}// end loop over 'tu'
22010
}// end loop over 'u'
22011
}// end loop over 't'
22014
}// end loop over 's'
22015
for (unsigned int s = 0; s < 10; s++)
22017
for (unsigned int t = 0; t < 10; t++)
22019
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
22020
}// end loop over 't'
22021
}// end loop over 's'
22022
}// end loop over 'r'
22024
// Transform derivatives back to physical element
22025
for (unsigned int r = 0; r < num_derivatives; r++)
22027
for (unsigned int s = 0; s < num_derivatives; s++)
22029
values[r] += transform[r][s]*derivatives[s];
22030
}// end loop over 's'
22031
}// end loop over 'r'
22033
// Delete pointer to array of derivatives on FIAT element
22034
delete [] derivatives;
22036
// Delete pointer to array of combinations of derivatives and transform
22037
for (unsigned int r = 0; r < num_derivatives; r++)
22039
delete [] combinations[r];
22040
}// end loop over 'r'
22041
delete [] combinations;
22042
for (unsigned int r = 0; r < num_derivatives; r++)
22044
delete [] transform[r];
22045
}// end loop over 'r'
22046
delete [] transform;
22052
// Array of basisvalues.
22053
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
22055
// Declare helper variables.
22056
unsigned int rr = 0;
22057
unsigned int ss = 0;
22058
unsigned int tt = 0;
22059
double tmp5 = 0.000000000000000;
22060
double tmp6 = 0.000000000000000;
22061
double tmp7 = 0.000000000000000;
22062
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
22063
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
22064
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
22065
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
22066
double tmp4 = tmp3*tmp3;
22068
// Compute basisvalues.
22069
basisvalues[0] = 1.000000000000000;
22070
basisvalues[1] = tmp0;
22071
for (unsigned int r = 1; r < 2; r++)
22073
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
22074
ss = r*(r + 1)*(r + 2)/6;
22075
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
22076
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
22077
}// end loop over 'r'
22078
for (unsigned int r = 0; r < 2; r++)
22080
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
22081
ss = r*(r + 1)*(r + 2)/6;
22082
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
22083
}// end loop over 'r'
22084
for (unsigned int r = 0; r < 1; r++)
22086
for (unsigned int s = 1; s < 2 - r; s++)
22088
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
22089
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22090
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
22091
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22092
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22093
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22094
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
22095
}// end loop over 's'
22096
}// end loop over 'r'
22097
for (unsigned int r = 0; r < 2; r++)
22099
for (unsigned int s = 0; s < 2 - r; s++)
22101
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
22102
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22103
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
22104
}// end loop over 's'
22105
}// end loop over 'r'
22106
for (unsigned int r = 0; r < 1; r++)
22108
for (unsigned int s = 0; s < 1 - r; s++)
22110
for (unsigned int t = 1; t < 2 - r - s; t++)
22112
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
22113
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22114
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
22115
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22116
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22117
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22118
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
22119
}// end loop over 't'
22120
}// end loop over 's'
22121
}// end loop over 'r'
22122
for (unsigned int r = 0; r < 3; r++)
22124
for (unsigned int s = 0; s < 3 - r; s++)
22126
for (unsigned int t = 0; t < 3 - r - s; t++)
22128
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22129
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
22130
}// end loop over 't'
22131
}// end loop over 's'
22132
}// end loop over 'r'
22134
// Table(s) of coefficients.
22135
static const double coefficients0[10] = \
22136
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
22138
// Tables of derivatives of the polynomial base (transpose).
22139
static const double dmats0[10][10] = \
22140
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22141
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22142
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22143
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22144
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22145
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22146
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22147
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22148
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22149
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22151
static const double dmats1[10][10] = \
22152
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22153
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22154
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22155
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22156
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22157
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22158
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22159
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22160
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22161
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22163
static const double dmats2[10][10] = \
22164
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22165
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22166
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22167
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22168
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22169
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22170
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22171
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22172
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22173
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22175
// Compute reference derivatives.
22176
// Declare pointer to array of derivatives on FIAT element.
22177
double *derivatives = new double[num_derivatives];
22178
for (unsigned int r = 0; r < num_derivatives; r++)
22180
derivatives[r] = 0.000000000000000;
22181
}// end loop over 'r'
22183
// Declare derivative matrix (of polynomial basis).
22184
double dmats[10][10] = \
22185
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22186
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22187
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22188
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22189
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22190
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22191
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22192
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22193
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22194
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
22196
// Declare (auxiliary) derivative matrix (of polynomial basis).
22197
double dmats_old[10][10] = \
22198
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22199
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22200
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22201
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22202
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22203
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22204
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22205
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22206
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22207
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
22209
// Loop possible derivatives.
22210
for (unsigned int r = 0; r < num_derivatives; r++)
22212
// Resetting dmats values to compute next derivative.
22213
for (unsigned int t = 0; t < 10; t++)
22215
for (unsigned int u = 0; u < 10; u++)
22217
dmats[t][u] = 0.000000000000000;
22220
dmats[t][u] = 1.000000000000000;
22223
}// end loop over 'u'
22224
}// end loop over 't'
22226
// Looping derivative order to generate dmats.
22227
for (unsigned int s = 0; s < n; s++)
22229
// Updating dmats_old with new values and resetting dmats.
22230
for (unsigned int t = 0; t < 10; t++)
22232
for (unsigned int u = 0; u < 10; u++)
22234
dmats_old[t][u] = dmats[t][u];
22235
dmats[t][u] = 0.000000000000000;
22236
}// end loop over 'u'
22237
}// end loop over 't'
22239
// Update dmats using an inner product.
22240
if (combinations[r][s] == 0)
22242
for (unsigned int t = 0; t < 10; t++)
22244
for (unsigned int u = 0; u < 10; u++)
22246
for (unsigned int tu = 0; tu < 10; tu++)
22248
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
22249
}// end loop over 'tu'
22250
}// end loop over 'u'
22251
}// end loop over 't'
22254
if (combinations[r][s] == 1)
22256
for (unsigned int t = 0; t < 10; t++)
22258
for (unsigned int u = 0; u < 10; u++)
22260
for (unsigned int tu = 0; tu < 10; tu++)
22262
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
22263
}// end loop over 'tu'
22264
}// end loop over 'u'
22265
}// end loop over 't'
22268
if (combinations[r][s] == 2)
22270
for (unsigned int t = 0; t < 10; t++)
22272
for (unsigned int u = 0; u < 10; u++)
22274
for (unsigned int tu = 0; tu < 10; tu++)
22276
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
22277
}// end loop over 'tu'
22278
}// end loop over 'u'
22279
}// end loop over 't'
22282
}// end loop over 's'
22283
for (unsigned int s = 0; s < 10; s++)
22285
for (unsigned int t = 0; t < 10; t++)
22287
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
22288
}// end loop over 't'
22289
}// end loop over 's'
22290
}// end loop over 'r'
22292
// Transform derivatives back to physical element
22293
for (unsigned int r = 0; r < num_derivatives; r++)
22295
for (unsigned int s = 0; s < num_derivatives; s++)
22297
values[r] += transform[r][s]*derivatives[s];
22298
}// end loop over 's'
22299
}// end loop over 'r'
22301
// Delete pointer to array of derivatives on FIAT element
22302
delete [] derivatives;
22304
// Delete pointer to array of combinations of derivatives and transform
22305
for (unsigned int r = 0; r < num_derivatives; r++)
22307
delete [] combinations[r];
22308
}// end loop over 'r'
22309
delete [] combinations;
22310
for (unsigned int r = 0; r < num_derivatives; r++)
22312
delete [] transform[r];
22313
}// end loop over 'r'
22314
delete [] transform;
22320
// Array of basisvalues.
22321
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
22323
// Declare helper variables.
22324
unsigned int rr = 0;
22325
unsigned int ss = 0;
22326
unsigned int tt = 0;
22327
double tmp5 = 0.000000000000000;
22328
double tmp6 = 0.000000000000000;
22329
double tmp7 = 0.000000000000000;
22330
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
22331
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
22332
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
22333
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
22334
double tmp4 = tmp3*tmp3;
22336
// Compute basisvalues.
22337
basisvalues[0] = 1.000000000000000;
22338
basisvalues[1] = tmp0;
22339
for (unsigned int r = 1; r < 2; r++)
22341
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
22342
ss = r*(r + 1)*(r + 2)/6;
22343
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
22344
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
22345
}// end loop over 'r'
22346
for (unsigned int r = 0; r < 2; r++)
22348
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
22349
ss = r*(r + 1)*(r + 2)/6;
22350
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
22351
}// end loop over 'r'
22352
for (unsigned int r = 0; r < 1; r++)
22354
for (unsigned int s = 1; s < 2 - r; s++)
22356
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
22357
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22358
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
22359
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22360
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22361
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22362
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
22363
}// end loop over 's'
22364
}// end loop over 'r'
22365
for (unsigned int r = 0; r < 2; r++)
22367
for (unsigned int s = 0; s < 2 - r; s++)
22369
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
22370
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22371
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
22372
}// end loop over 's'
22373
}// end loop over 'r'
22374
for (unsigned int r = 0; r < 1; r++)
22376
for (unsigned int s = 0; s < 1 - r; s++)
22378
for (unsigned int t = 1; t < 2 - r - s; t++)
22380
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
22381
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22382
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
22383
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22384
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22385
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22386
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
22387
}// end loop over 't'
22388
}// end loop over 's'
22389
}// end loop over 'r'
22390
for (unsigned int r = 0; r < 3; r++)
22392
for (unsigned int s = 0; s < 3 - r; s++)
22394
for (unsigned int t = 0; t < 3 - r - s; t++)
22396
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22397
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
22398
}// end loop over 't'
22399
}// end loop over 's'
22400
}// end loop over 'r'
22402
// Table(s) of coefficients.
22403
static const double coefficients0[10] = \
22404
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
22406
// Tables of derivatives of the polynomial base (transpose).
22407
static const double dmats0[10][10] = \
22408
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22409
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22410
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22411
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22412
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22413
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22414
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22415
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22416
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22417
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22419
static const double dmats1[10][10] = \
22420
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22421
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22422
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22423
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22424
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22425
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22426
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22427
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22428
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22429
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22431
static const double dmats2[10][10] = \
22432
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22433
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22434
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22435
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22436
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22437
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22438
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22439
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22440
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22441
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22443
// Compute reference derivatives.
22444
// Declare pointer to array of derivatives on FIAT element.
22445
double *derivatives = new double[num_derivatives];
22446
for (unsigned int r = 0; r < num_derivatives; r++)
22448
derivatives[r] = 0.000000000000000;
22449
}// end loop over 'r'
22451
// Declare derivative matrix (of polynomial basis).
22452
double dmats[10][10] = \
22453
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22454
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22455
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22456
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22457
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22458
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22459
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22460
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22461
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22462
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
22464
// Declare (auxiliary) derivative matrix (of polynomial basis).
22465
double dmats_old[10][10] = \
22466
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22467
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22468
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22469
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22470
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22471
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22472
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22473
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22474
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22475
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
22477
// Loop possible derivatives.
22478
for (unsigned int r = 0; r < num_derivatives; r++)
22480
// Resetting dmats values to compute next derivative.
22481
for (unsigned int t = 0; t < 10; t++)
22483
for (unsigned int u = 0; u < 10; u++)
22485
dmats[t][u] = 0.000000000000000;
22488
dmats[t][u] = 1.000000000000000;
22491
}// end loop over 'u'
22492
}// end loop over 't'
22494
// Looping derivative order to generate dmats.
22495
for (unsigned int s = 0; s < n; s++)
22497
// Updating dmats_old with new values and resetting dmats.
22498
for (unsigned int t = 0; t < 10; t++)
22500
for (unsigned int u = 0; u < 10; u++)
22502
dmats_old[t][u] = dmats[t][u];
22503
dmats[t][u] = 0.000000000000000;
22504
}// end loop over 'u'
22505
}// end loop over 't'
22507
// Update dmats using an inner product.
22508
if (combinations[r][s] == 0)
22510
for (unsigned int t = 0; t < 10; t++)
22512
for (unsigned int u = 0; u < 10; u++)
22514
for (unsigned int tu = 0; tu < 10; tu++)
22516
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
22517
}// end loop over 'tu'
22518
}// end loop over 'u'
22519
}// end loop over 't'
22522
if (combinations[r][s] == 1)
22524
for (unsigned int t = 0; t < 10; t++)
22526
for (unsigned int u = 0; u < 10; u++)
22528
for (unsigned int tu = 0; tu < 10; tu++)
22530
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
22531
}// end loop over 'tu'
22532
}// end loop over 'u'
22533
}// end loop over 't'
22536
if (combinations[r][s] == 2)
22538
for (unsigned int t = 0; t < 10; t++)
22540
for (unsigned int u = 0; u < 10; u++)
22542
for (unsigned int tu = 0; tu < 10; tu++)
22544
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
22545
}// end loop over 'tu'
22546
}// end loop over 'u'
22547
}// end loop over 't'
22550
}// end loop over 's'
22551
for (unsigned int s = 0; s < 10; s++)
22553
for (unsigned int t = 0; t < 10; t++)
22555
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
22556
}// end loop over 't'
22557
}// end loop over 's'
22558
}// end loop over 'r'
22560
// Transform derivatives back to physical element
22561
for (unsigned int r = 0; r < num_derivatives; r++)
22563
for (unsigned int s = 0; s < num_derivatives; s++)
22565
values[r] += transform[r][s]*derivatives[s];
22566
}// end loop over 's'
22567
}// end loop over 'r'
22569
// Delete pointer to array of derivatives on FIAT element
22570
delete [] derivatives;
22572
// Delete pointer to array of combinations of derivatives and transform
22573
for (unsigned int r = 0; r < num_derivatives; r++)
22575
delete [] combinations[r];
22576
}// end loop over 'r'
22577
delete [] combinations;
22578
for (unsigned int r = 0; r < num_derivatives; r++)
22580
delete [] transform[r];
22581
}// end loop over 'r'
22582
delete [] transform;
22588
// Array of basisvalues.
22589
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
22591
// Declare helper variables.
22592
unsigned int rr = 0;
22593
unsigned int ss = 0;
22594
unsigned int tt = 0;
22595
double tmp5 = 0.000000000000000;
22596
double tmp6 = 0.000000000000000;
22597
double tmp7 = 0.000000000000000;
22598
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
22599
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
22600
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
22601
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
22602
double tmp4 = tmp3*tmp3;
22604
// Compute basisvalues.
22605
basisvalues[0] = 1.000000000000000;
22606
basisvalues[1] = tmp0;
22607
for (unsigned int r = 1; r < 2; r++)
22609
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
22610
ss = r*(r + 1)*(r + 2)/6;
22611
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
22612
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
22613
}// end loop over 'r'
22614
for (unsigned int r = 0; r < 2; r++)
22616
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
22617
ss = r*(r + 1)*(r + 2)/6;
22618
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
22619
}// end loop over 'r'
22620
for (unsigned int r = 0; r < 1; r++)
22622
for (unsigned int s = 1; s < 2 - r; s++)
22624
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
22625
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22626
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
22627
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22628
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22629
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22630
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
22631
}// end loop over 's'
22632
}// end loop over 'r'
22633
for (unsigned int r = 0; r < 2; r++)
22635
for (unsigned int s = 0; s < 2 - r; s++)
22637
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
22638
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22639
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
22640
}// end loop over 's'
22641
}// end loop over 'r'
22642
for (unsigned int r = 0; r < 1; r++)
22644
for (unsigned int s = 0; s < 1 - r; s++)
22646
for (unsigned int t = 1; t < 2 - r - s; t++)
22648
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
22649
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22650
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
22651
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22652
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22653
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22654
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
22655
}// end loop over 't'
22656
}// end loop over 's'
22657
}// end loop over 'r'
22658
for (unsigned int r = 0; r < 3; r++)
22660
for (unsigned int s = 0; s < 3 - r; s++)
22662
for (unsigned int t = 0; t < 3 - r - s; t++)
22664
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22665
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
22666
}// end loop over 't'
22667
}// end loop over 's'
22668
}// end loop over 'r'
22670
// Table(s) of coefficients.
22671
static const double coefficients0[10] = \
22672
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
22674
// Tables of derivatives of the polynomial base (transpose).
22675
static const double dmats0[10][10] = \
22676
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22677
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22678
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22679
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22680
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22681
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22682
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22683
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22684
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22685
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22687
static const double dmats1[10][10] = \
22688
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22689
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22690
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22691
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22692
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22693
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22694
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22695
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22696
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22697
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22699
static const double dmats2[10][10] = \
22700
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22701
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22702
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22703
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22704
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22705
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22706
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22707
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22708
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22709
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22711
// Compute reference derivatives.
22712
// Declare pointer to array of derivatives on FIAT element.
22713
double *derivatives = new double[num_derivatives];
22714
for (unsigned int r = 0; r < num_derivatives; r++)
22716
derivatives[r] = 0.000000000000000;
22717
}// end loop over 'r'
22719
// Declare derivative matrix (of polynomial basis).
22720
double dmats[10][10] = \
22721
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22722
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22723
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22724
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22725
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22726
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22727
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22728
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22729
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22730
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
22732
// Declare (auxiliary) derivative matrix (of polynomial basis).
22733
double dmats_old[10][10] = \
22734
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22735
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22736
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22737
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22738
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22739
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22740
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22741
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22742
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22743
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
22745
// Loop possible derivatives.
22746
for (unsigned int r = 0; r < num_derivatives; r++)
22748
// Resetting dmats values to compute next derivative.
22749
for (unsigned int t = 0; t < 10; t++)
22751
for (unsigned int u = 0; u < 10; u++)
22753
dmats[t][u] = 0.000000000000000;
22756
dmats[t][u] = 1.000000000000000;
22759
}// end loop over 'u'
22760
}// end loop over 't'
22762
// Looping derivative order to generate dmats.
22763
for (unsigned int s = 0; s < n; s++)
22765
// Updating dmats_old with new values and resetting dmats.
22766
for (unsigned int t = 0; t < 10; t++)
22768
for (unsigned int u = 0; u < 10; u++)
22770
dmats_old[t][u] = dmats[t][u];
22771
dmats[t][u] = 0.000000000000000;
22772
}// end loop over 'u'
22773
}// end loop over 't'
22775
// Update dmats using an inner product.
22776
if (combinations[r][s] == 0)
22778
for (unsigned int t = 0; t < 10; t++)
22780
for (unsigned int u = 0; u < 10; u++)
22782
for (unsigned int tu = 0; tu < 10; tu++)
22784
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
22785
}// end loop over 'tu'
22786
}// end loop over 'u'
22787
}// end loop over 't'
22790
if (combinations[r][s] == 1)
22792
for (unsigned int t = 0; t < 10; t++)
22794
for (unsigned int u = 0; u < 10; u++)
22796
for (unsigned int tu = 0; tu < 10; tu++)
22798
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
22799
}// end loop over 'tu'
22800
}// end loop over 'u'
22801
}// end loop over 't'
22804
if (combinations[r][s] == 2)
22806
for (unsigned int t = 0; t < 10; t++)
22808
for (unsigned int u = 0; u < 10; u++)
22810
for (unsigned int tu = 0; tu < 10; tu++)
22812
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
22813
}// end loop over 'tu'
22814
}// end loop over 'u'
22815
}// end loop over 't'
22818
}// end loop over 's'
22819
for (unsigned int s = 0; s < 10; s++)
22821
for (unsigned int t = 0; t < 10; t++)
22823
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
22824
}// end loop over 't'
22825
}// end loop over 's'
22826
}// end loop over 'r'
22828
// Transform derivatives back to physical element
22829
for (unsigned int r = 0; r < num_derivatives; r++)
22831
for (unsigned int s = 0; s < num_derivatives; s++)
22833
values[r] += transform[r][s]*derivatives[s];
22834
}// end loop over 's'
22835
}// end loop over 'r'
22837
// Delete pointer to array of derivatives on FIAT element
22838
delete [] derivatives;
22840
// Delete pointer to array of combinations of derivatives and transform
22841
for (unsigned int r = 0; r < num_derivatives; r++)
22843
delete [] combinations[r];
22844
}// end loop over 'r'
22845
delete [] combinations;
22846
for (unsigned int r = 0; r < num_derivatives; r++)
22848
delete [] transform[r];
22849
}// end loop over 'r'
22850
delete [] transform;
22856
// Array of basisvalues.
22857
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
22859
// Declare helper variables.
22860
unsigned int rr = 0;
22861
unsigned int ss = 0;
22862
unsigned int tt = 0;
22863
double tmp5 = 0.000000000000000;
22864
double tmp6 = 0.000000000000000;
22865
double tmp7 = 0.000000000000000;
22866
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
22867
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
22868
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
22869
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
22870
double tmp4 = tmp3*tmp3;
22872
// Compute basisvalues.
22873
basisvalues[0] = 1.000000000000000;
22874
basisvalues[1] = tmp0;
22875
for (unsigned int r = 1; r < 2; r++)
22877
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
22878
ss = r*(r + 1)*(r + 2)/6;
22879
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
22880
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
22881
}// end loop over 'r'
22882
for (unsigned int r = 0; r < 2; r++)
22884
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
22885
ss = r*(r + 1)*(r + 2)/6;
22886
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
22887
}// end loop over 'r'
22888
for (unsigned int r = 0; r < 1; r++)
22890
for (unsigned int s = 1; s < 2 - r; s++)
22892
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
22893
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22894
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
22895
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22896
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22897
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
22898
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
22899
}// end loop over 's'
22900
}// end loop over 'r'
22901
for (unsigned int r = 0; r < 2; r++)
22903
for (unsigned int s = 0; s < 2 - r; s++)
22905
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
22906
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
22907
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
22908
}// end loop over 's'
22909
}// end loop over 'r'
22910
for (unsigned int r = 0; r < 1; r++)
22912
for (unsigned int s = 0; s < 1 - r; s++)
22914
for (unsigned int t = 1; t < 2 - r - s; t++)
22916
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
22917
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22918
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
22919
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22920
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22921
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
22922
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
22923
}// end loop over 't'
22924
}// end loop over 's'
22925
}// end loop over 'r'
22926
for (unsigned int r = 0; r < 3; r++)
22928
for (unsigned int s = 0; s < 3 - r; s++)
22930
for (unsigned int t = 0; t < 3 - r - s; t++)
22932
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
22933
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
22934
}// end loop over 't'
22935
}// end loop over 's'
22936
}// end loop over 'r'
22938
// Table(s) of coefficients.
22939
static const double coefficients0[10] = \
22940
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
22942
// Tables of derivatives of the polynomial base (transpose).
22943
static const double dmats0[10][10] = \
22944
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22945
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22946
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22947
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22948
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22949
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22950
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22951
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22952
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22953
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22955
static const double dmats1[10][10] = \
22956
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22957
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22958
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22959
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22960
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22961
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22962
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22963
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22964
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22965
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22967
static const double dmats2[10][10] = \
22968
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22969
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22970
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22971
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22972
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22973
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22974
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22975
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22976
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22977
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
22979
// Compute reference derivatives.
22980
// Declare pointer to array of derivatives on FIAT element.
22981
double *derivatives = new double[num_derivatives];
22982
for (unsigned int r = 0; r < num_derivatives; r++)
22984
derivatives[r] = 0.000000000000000;
22985
}// end loop over 'r'
22987
// Declare derivative matrix (of polynomial basis).
22988
double dmats[10][10] = \
22989
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22990
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22991
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22992
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22993
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22994
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22995
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
22996
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
22997
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
22998
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23000
// Declare (auxiliary) derivative matrix (of polynomial basis).
23001
double dmats_old[10][10] = \
23002
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23003
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23004
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23005
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23006
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23007
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23008
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23009
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23010
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23011
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23013
// Loop possible derivatives.
23014
for (unsigned int r = 0; r < num_derivatives; r++)
23016
// Resetting dmats values to compute next derivative.
23017
for (unsigned int t = 0; t < 10; t++)
23019
for (unsigned int u = 0; u < 10; u++)
23021
dmats[t][u] = 0.000000000000000;
23024
dmats[t][u] = 1.000000000000000;
23027
}// end loop over 'u'
23028
}// end loop over 't'
23030
// Looping derivative order to generate dmats.
23031
for (unsigned int s = 0; s < n; s++)
23033
// Updating dmats_old with new values and resetting dmats.
23034
for (unsigned int t = 0; t < 10; t++)
23036
for (unsigned int u = 0; u < 10; u++)
23038
dmats_old[t][u] = dmats[t][u];
23039
dmats[t][u] = 0.000000000000000;
23040
}// end loop over 'u'
23041
}// end loop over 't'
23043
// Update dmats using an inner product.
23044
if (combinations[r][s] == 0)
23046
for (unsigned int t = 0; t < 10; t++)
23048
for (unsigned int u = 0; u < 10; u++)
23050
for (unsigned int tu = 0; tu < 10; tu++)
23052
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
23053
}// end loop over 'tu'
23054
}// end loop over 'u'
23055
}// end loop over 't'
23058
if (combinations[r][s] == 1)
23060
for (unsigned int t = 0; t < 10; t++)
23062
for (unsigned int u = 0; u < 10; u++)
23064
for (unsigned int tu = 0; tu < 10; tu++)
23066
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
23067
}// end loop over 'tu'
23068
}// end loop over 'u'
23069
}// end loop over 't'
23072
if (combinations[r][s] == 2)
23074
for (unsigned int t = 0; t < 10; t++)
23076
for (unsigned int u = 0; u < 10; u++)
23078
for (unsigned int tu = 0; tu < 10; tu++)
23080
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
23081
}// end loop over 'tu'
23082
}// end loop over 'u'
23083
}// end loop over 't'
23086
}// end loop over 's'
23087
for (unsigned int s = 0; s < 10; s++)
23089
for (unsigned int t = 0; t < 10; t++)
23091
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
23092
}// end loop over 't'
23093
}// end loop over 's'
23094
}// end loop over 'r'
23096
// Transform derivatives back to physical element
23097
for (unsigned int r = 0; r < num_derivatives; r++)
23099
for (unsigned int s = 0; s < num_derivatives; s++)
23101
values[r] += transform[r][s]*derivatives[s];
23102
}// end loop over 's'
23103
}// end loop over 'r'
23105
// Delete pointer to array of derivatives on FIAT element
23106
delete [] derivatives;
23108
// Delete pointer to array of combinations of derivatives and transform
23109
for (unsigned int r = 0; r < num_derivatives; r++)
23111
delete [] combinations[r];
23112
}// end loop over 'r'
23113
delete [] combinations;
23114
for (unsigned int r = 0; r < num_derivatives; r++)
23116
delete [] transform[r];
23117
}// end loop over 'r'
23118
delete [] transform;
23124
// Array of basisvalues.
23125
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
23127
// Declare helper variables.
23128
unsigned int rr = 0;
23129
unsigned int ss = 0;
23130
unsigned int tt = 0;
23131
double tmp5 = 0.000000000000000;
23132
double tmp6 = 0.000000000000000;
23133
double tmp7 = 0.000000000000000;
23134
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
23135
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
23136
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
23137
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
23138
double tmp4 = tmp3*tmp3;
23140
// Compute basisvalues.
23141
basisvalues[0] = 1.000000000000000;
23142
basisvalues[1] = tmp0;
23143
for (unsigned int r = 1; r < 2; r++)
23145
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
23146
ss = r*(r + 1)*(r + 2)/6;
23147
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
23148
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
23149
}// end loop over 'r'
23150
for (unsigned int r = 0; r < 2; r++)
23152
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
23153
ss = r*(r + 1)*(r + 2)/6;
23154
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
23155
}// end loop over 'r'
23156
for (unsigned int r = 0; r < 1; r++)
23158
for (unsigned int s = 1; s < 2 - r; s++)
23160
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
23161
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23162
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
23163
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23164
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23165
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23166
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
23167
}// end loop over 's'
23168
}// end loop over 'r'
23169
for (unsigned int r = 0; r < 2; r++)
23171
for (unsigned int s = 0; s < 2 - r; s++)
23173
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
23174
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23175
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
23176
}// end loop over 's'
23177
}// end loop over 'r'
23178
for (unsigned int r = 0; r < 1; r++)
23180
for (unsigned int s = 0; s < 1 - r; s++)
23182
for (unsigned int t = 1; t < 2 - r - s; t++)
23184
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
23185
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23186
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
23187
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23188
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23189
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23190
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
23191
}// end loop over 't'
23192
}// end loop over 's'
23193
}// end loop over 'r'
23194
for (unsigned int r = 0; r < 3; r++)
23196
for (unsigned int s = 0; s < 3 - r; s++)
23198
for (unsigned int t = 0; t < 3 - r - s; t++)
23200
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23201
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
23202
}// end loop over 't'
23203
}// end loop over 's'
23204
}// end loop over 'r'
23206
// Table(s) of coefficients.
23207
static const double coefficients0[10] = \
23208
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
23210
// Tables of derivatives of the polynomial base (transpose).
23211
static const double dmats0[10][10] = \
23212
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23213
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23214
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23215
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23216
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23217
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23218
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23219
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23220
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23221
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23223
static const double dmats1[10][10] = \
23224
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23225
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23226
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23227
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23228
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23229
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23230
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23231
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23232
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23233
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23235
static const double dmats2[10][10] = \
23236
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23237
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23238
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23239
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23240
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23241
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23242
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23243
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23244
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23245
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23247
// Compute reference derivatives.
23248
// Declare pointer to array of derivatives on FIAT element.
23249
double *derivatives = new double[num_derivatives];
23250
for (unsigned int r = 0; r < num_derivatives; r++)
23252
derivatives[r] = 0.000000000000000;
23253
}// end loop over 'r'
23255
// Declare derivative matrix (of polynomial basis).
23256
double dmats[10][10] = \
23257
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23258
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23259
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23260
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23261
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23262
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23263
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23264
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23265
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23266
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23268
// Declare (auxiliary) derivative matrix (of polynomial basis).
23269
double dmats_old[10][10] = \
23270
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23271
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23272
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23273
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23274
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23275
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23276
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23277
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23278
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23279
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23281
// Loop possible derivatives.
23282
for (unsigned int r = 0; r < num_derivatives; r++)
23284
// Resetting dmats values to compute next derivative.
23285
for (unsigned int t = 0; t < 10; t++)
23287
for (unsigned int u = 0; u < 10; u++)
23289
dmats[t][u] = 0.000000000000000;
23292
dmats[t][u] = 1.000000000000000;
23295
}// end loop over 'u'
23296
}// end loop over 't'
23298
// Looping derivative order to generate dmats.
23299
for (unsigned int s = 0; s < n; s++)
23301
// Updating dmats_old with new values and resetting dmats.
23302
for (unsigned int t = 0; t < 10; t++)
23304
for (unsigned int u = 0; u < 10; u++)
23306
dmats_old[t][u] = dmats[t][u];
23307
dmats[t][u] = 0.000000000000000;
23308
}// end loop over 'u'
23309
}// end loop over 't'
23311
// Update dmats using an inner product.
23312
if (combinations[r][s] == 0)
23314
for (unsigned int t = 0; t < 10; t++)
23316
for (unsigned int u = 0; u < 10; u++)
23318
for (unsigned int tu = 0; tu < 10; tu++)
23320
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
23321
}// end loop over 'tu'
23322
}// end loop over 'u'
23323
}// end loop over 't'
23326
if (combinations[r][s] == 1)
23328
for (unsigned int t = 0; t < 10; t++)
23330
for (unsigned int u = 0; u < 10; u++)
23332
for (unsigned int tu = 0; tu < 10; tu++)
23334
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
23335
}// end loop over 'tu'
23336
}// end loop over 'u'
23337
}// end loop over 't'
23340
if (combinations[r][s] == 2)
23342
for (unsigned int t = 0; t < 10; t++)
23344
for (unsigned int u = 0; u < 10; u++)
23346
for (unsigned int tu = 0; tu < 10; tu++)
23348
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
23349
}// end loop over 'tu'
23350
}// end loop over 'u'
23351
}// end loop over 't'
23354
}// end loop over 's'
23355
for (unsigned int s = 0; s < 10; s++)
23357
for (unsigned int t = 0; t < 10; t++)
23359
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
23360
}// end loop over 't'
23361
}// end loop over 's'
23362
}// end loop over 'r'
23364
// Transform derivatives back to physical element
23365
for (unsigned int r = 0; r < num_derivatives; r++)
23367
for (unsigned int s = 0; s < num_derivatives; s++)
23369
values[r] += transform[r][s]*derivatives[s];
23370
}// end loop over 's'
23371
}// end loop over 'r'
23373
// Delete pointer to array of derivatives on FIAT element
23374
delete [] derivatives;
23376
// Delete pointer to array of combinations of derivatives and transform
23377
for (unsigned int r = 0; r < num_derivatives; r++)
23379
delete [] combinations[r];
23380
}// end loop over 'r'
23381
delete [] combinations;
23382
for (unsigned int r = 0; r < num_derivatives; r++)
23384
delete [] transform[r];
23385
}// end loop over 'r'
23386
delete [] transform;
23392
// Array of basisvalues.
23393
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
23395
// Declare helper variables.
23396
unsigned int rr = 0;
23397
unsigned int ss = 0;
23398
unsigned int tt = 0;
23399
double tmp5 = 0.000000000000000;
23400
double tmp6 = 0.000000000000000;
23401
double tmp7 = 0.000000000000000;
23402
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
23403
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
23404
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
23405
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
23406
double tmp4 = tmp3*tmp3;
23408
// Compute basisvalues.
23409
basisvalues[0] = 1.000000000000000;
23410
basisvalues[1] = tmp0;
23411
for (unsigned int r = 1; r < 2; r++)
23413
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
23414
ss = r*(r + 1)*(r + 2)/6;
23415
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
23416
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
23417
}// end loop over 'r'
23418
for (unsigned int r = 0; r < 2; r++)
23420
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
23421
ss = r*(r + 1)*(r + 2)/6;
23422
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
23423
}// end loop over 'r'
23424
for (unsigned int r = 0; r < 1; r++)
23426
for (unsigned int s = 1; s < 2 - r; s++)
23428
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
23429
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23430
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
23431
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23432
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23433
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23434
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
23435
}// end loop over 's'
23436
}// end loop over 'r'
23437
for (unsigned int r = 0; r < 2; r++)
23439
for (unsigned int s = 0; s < 2 - r; s++)
23441
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
23442
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23443
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
23444
}// end loop over 's'
23445
}// end loop over 'r'
23446
for (unsigned int r = 0; r < 1; r++)
23448
for (unsigned int s = 0; s < 1 - r; s++)
23450
for (unsigned int t = 1; t < 2 - r - s; t++)
23452
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
23453
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23454
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
23455
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23456
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23457
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23458
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
23459
}// end loop over 't'
23460
}// end loop over 's'
23461
}// end loop over 'r'
23462
for (unsigned int r = 0; r < 3; r++)
23464
for (unsigned int s = 0; s < 3 - r; s++)
23466
for (unsigned int t = 0; t < 3 - r - s; t++)
23468
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23469
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
23470
}// end loop over 't'
23471
}// end loop over 's'
23472
}// end loop over 'r'
23474
// Table(s) of coefficients.
23475
static const double coefficients0[10] = \
23476
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
23478
// Tables of derivatives of the polynomial base (transpose).
23479
static const double dmats0[10][10] = \
23480
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23481
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23482
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23483
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23484
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23485
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23486
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23487
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23488
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23489
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23491
static const double dmats1[10][10] = \
23492
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23493
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23494
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23495
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23496
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23497
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23498
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23499
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23500
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23501
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23503
static const double dmats2[10][10] = \
23504
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23505
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23506
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23507
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23508
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23509
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23510
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23511
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23512
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23513
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23515
// Compute reference derivatives.
23516
// Declare pointer to array of derivatives on FIAT element.
23517
double *derivatives = new double[num_derivatives];
23518
for (unsigned int r = 0; r < num_derivatives; r++)
23520
derivatives[r] = 0.000000000000000;
23521
}// end loop over 'r'
23523
// Declare derivative matrix (of polynomial basis).
23524
double dmats[10][10] = \
23525
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23526
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23527
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23528
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23529
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23530
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23531
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23532
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23533
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23534
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23536
// Declare (auxiliary) derivative matrix (of polynomial basis).
23537
double dmats_old[10][10] = \
23538
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23539
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23540
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23541
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23542
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23543
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23544
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23545
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23546
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23547
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23549
// Loop possible derivatives.
23550
for (unsigned int r = 0; r < num_derivatives; r++)
23552
// Resetting dmats values to compute next derivative.
23553
for (unsigned int t = 0; t < 10; t++)
23555
for (unsigned int u = 0; u < 10; u++)
23557
dmats[t][u] = 0.000000000000000;
23560
dmats[t][u] = 1.000000000000000;
23563
}// end loop over 'u'
23564
}// end loop over 't'
23566
// Looping derivative order to generate dmats.
23567
for (unsigned int s = 0; s < n; s++)
23569
// Updating dmats_old with new values and resetting dmats.
23570
for (unsigned int t = 0; t < 10; t++)
23572
for (unsigned int u = 0; u < 10; u++)
23574
dmats_old[t][u] = dmats[t][u];
23575
dmats[t][u] = 0.000000000000000;
23576
}// end loop over 'u'
23577
}// end loop over 't'
23579
// Update dmats using an inner product.
23580
if (combinations[r][s] == 0)
23582
for (unsigned int t = 0; t < 10; t++)
23584
for (unsigned int u = 0; u < 10; u++)
23586
for (unsigned int tu = 0; tu < 10; tu++)
23588
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
23589
}// end loop over 'tu'
23590
}// end loop over 'u'
23591
}// end loop over 't'
23594
if (combinations[r][s] == 1)
23596
for (unsigned int t = 0; t < 10; t++)
23598
for (unsigned int u = 0; u < 10; u++)
23600
for (unsigned int tu = 0; tu < 10; tu++)
23602
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
23603
}// end loop over 'tu'
23604
}// end loop over 'u'
23605
}// end loop over 't'
23608
if (combinations[r][s] == 2)
23610
for (unsigned int t = 0; t < 10; t++)
23612
for (unsigned int u = 0; u < 10; u++)
23614
for (unsigned int tu = 0; tu < 10; tu++)
23616
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
23617
}// end loop over 'tu'
23618
}// end loop over 'u'
23619
}// end loop over 't'
23622
}// end loop over 's'
23623
for (unsigned int s = 0; s < 10; s++)
23625
for (unsigned int t = 0; t < 10; t++)
23627
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
23628
}// end loop over 't'
23629
}// end loop over 's'
23630
}// end loop over 'r'
23632
// Transform derivatives back to physical element
23633
for (unsigned int r = 0; r < num_derivatives; r++)
23635
for (unsigned int s = 0; s < num_derivatives; s++)
23637
values[num_derivatives + r] += transform[r][s]*derivatives[s];
23638
}// end loop over 's'
23639
}// end loop over 'r'
23641
// Delete pointer to array of derivatives on FIAT element
23642
delete [] derivatives;
23644
// Delete pointer to array of combinations of derivatives and transform
23645
for (unsigned int r = 0; r < num_derivatives; r++)
23647
delete [] combinations[r];
23648
}// end loop over 'r'
23649
delete [] combinations;
23650
for (unsigned int r = 0; r < num_derivatives; r++)
23652
delete [] transform[r];
23653
}// end loop over 'r'
23654
delete [] transform;
23660
// Array of basisvalues.
23661
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
23663
// Declare helper variables.
23664
unsigned int rr = 0;
23665
unsigned int ss = 0;
23666
unsigned int tt = 0;
23667
double tmp5 = 0.000000000000000;
23668
double tmp6 = 0.000000000000000;
23669
double tmp7 = 0.000000000000000;
23670
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
23671
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
23672
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
23673
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
23674
double tmp4 = tmp3*tmp3;
23676
// Compute basisvalues.
23677
basisvalues[0] = 1.000000000000000;
23678
basisvalues[1] = tmp0;
23679
for (unsigned int r = 1; r < 2; r++)
23681
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
23682
ss = r*(r + 1)*(r + 2)/6;
23683
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
23684
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
23685
}// end loop over 'r'
23686
for (unsigned int r = 0; r < 2; r++)
23688
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
23689
ss = r*(r + 1)*(r + 2)/6;
23690
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
23691
}// end loop over 'r'
23692
for (unsigned int r = 0; r < 1; r++)
23694
for (unsigned int s = 1; s < 2 - r; s++)
23696
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
23697
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23698
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
23699
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23700
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23701
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23702
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
23703
}// end loop over 's'
23704
}// end loop over 'r'
23705
for (unsigned int r = 0; r < 2; r++)
23707
for (unsigned int s = 0; s < 2 - r; s++)
23709
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
23710
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23711
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
23712
}// end loop over 's'
23713
}// end loop over 'r'
23714
for (unsigned int r = 0; r < 1; r++)
23716
for (unsigned int s = 0; s < 1 - r; s++)
23718
for (unsigned int t = 1; t < 2 - r - s; t++)
23720
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
23721
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23722
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
23723
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23724
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23725
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23726
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
23727
}// end loop over 't'
23728
}// end loop over 's'
23729
}// end loop over 'r'
23730
for (unsigned int r = 0; r < 3; r++)
23732
for (unsigned int s = 0; s < 3 - r; s++)
23734
for (unsigned int t = 0; t < 3 - r - s; t++)
23736
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23737
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
23738
}// end loop over 't'
23739
}// end loop over 's'
23740
}// end loop over 'r'
23742
// Table(s) of coefficients.
23743
static const double coefficients0[10] = \
23744
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
23746
// Tables of derivatives of the polynomial base (transpose).
23747
static const double dmats0[10][10] = \
23748
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23749
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23750
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23751
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23752
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23753
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23754
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23755
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23756
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23757
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23759
static const double dmats1[10][10] = \
23760
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23761
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23762
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23763
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23764
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23765
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23766
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23767
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23768
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23769
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23771
static const double dmats2[10][10] = \
23772
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23773
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23774
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23775
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23776
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23777
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23778
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23779
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23780
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23781
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
23783
// Compute reference derivatives.
23784
// Declare pointer to array of derivatives on FIAT element.
23785
double *derivatives = new double[num_derivatives];
23786
for (unsigned int r = 0; r < num_derivatives; r++)
23788
derivatives[r] = 0.000000000000000;
23789
}// end loop over 'r'
23791
// Declare derivative matrix (of polynomial basis).
23792
double dmats[10][10] = \
23793
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23794
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23795
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23796
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23797
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23798
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23799
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23800
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23801
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23802
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23804
// Declare (auxiliary) derivative matrix (of polynomial basis).
23805
double dmats_old[10][10] = \
23806
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23807
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23808
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23809
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23810
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23811
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23812
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
23813
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
23814
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
23815
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
23817
// Loop possible derivatives.
23818
for (unsigned int r = 0; r < num_derivatives; r++)
23820
// Resetting dmats values to compute next derivative.
23821
for (unsigned int t = 0; t < 10; t++)
23823
for (unsigned int u = 0; u < 10; u++)
23825
dmats[t][u] = 0.000000000000000;
23828
dmats[t][u] = 1.000000000000000;
23831
}// end loop over 'u'
23832
}// end loop over 't'
23834
// Looping derivative order to generate dmats.
23835
for (unsigned int s = 0; s < n; s++)
23837
// Updating dmats_old with new values and resetting dmats.
23838
for (unsigned int t = 0; t < 10; t++)
23840
for (unsigned int u = 0; u < 10; u++)
23842
dmats_old[t][u] = dmats[t][u];
23843
dmats[t][u] = 0.000000000000000;
23844
}// end loop over 'u'
23845
}// end loop over 't'
23847
// Update dmats using an inner product.
23848
if (combinations[r][s] == 0)
23850
for (unsigned int t = 0; t < 10; t++)
23852
for (unsigned int u = 0; u < 10; u++)
23854
for (unsigned int tu = 0; tu < 10; tu++)
23856
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
23857
}// end loop over 'tu'
23858
}// end loop over 'u'
23859
}// end loop over 't'
23862
if (combinations[r][s] == 1)
23864
for (unsigned int t = 0; t < 10; t++)
23866
for (unsigned int u = 0; u < 10; u++)
23868
for (unsigned int tu = 0; tu < 10; tu++)
23870
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
23871
}// end loop over 'tu'
23872
}// end loop over 'u'
23873
}// end loop over 't'
23876
if (combinations[r][s] == 2)
23878
for (unsigned int t = 0; t < 10; t++)
23880
for (unsigned int u = 0; u < 10; u++)
23882
for (unsigned int tu = 0; tu < 10; tu++)
23884
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
23885
}// end loop over 'tu'
23886
}// end loop over 'u'
23887
}// end loop over 't'
23890
}// end loop over 's'
23891
for (unsigned int s = 0; s < 10; s++)
23893
for (unsigned int t = 0; t < 10; t++)
23895
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
23896
}// end loop over 't'
23897
}// end loop over 's'
23898
}// end loop over 'r'
23900
// Transform derivatives back to physical element
23901
for (unsigned int r = 0; r < num_derivatives; r++)
23903
for (unsigned int s = 0; s < num_derivatives; s++)
23905
values[num_derivatives + r] += transform[r][s]*derivatives[s];
23906
}// end loop over 's'
23907
}// end loop over 'r'
23909
// Delete pointer to array of derivatives on FIAT element
23910
delete [] derivatives;
23912
// Delete pointer to array of combinations of derivatives and transform
23913
for (unsigned int r = 0; r < num_derivatives; r++)
23915
delete [] combinations[r];
23916
}// end loop over 'r'
23917
delete [] combinations;
23918
for (unsigned int r = 0; r < num_derivatives; r++)
23920
delete [] transform[r];
23921
}// end loop over 'r'
23922
delete [] transform;
23928
// Array of basisvalues.
23929
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
23931
// Declare helper variables.
23932
unsigned int rr = 0;
23933
unsigned int ss = 0;
23934
unsigned int tt = 0;
23935
double tmp5 = 0.000000000000000;
23936
double tmp6 = 0.000000000000000;
23937
double tmp7 = 0.000000000000000;
23938
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
23939
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
23940
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
23941
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
23942
double tmp4 = tmp3*tmp3;
23944
// Compute basisvalues.
23945
basisvalues[0] = 1.000000000000000;
23946
basisvalues[1] = tmp0;
23947
for (unsigned int r = 1; r < 2; r++)
23949
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
23950
ss = r*(r + 1)*(r + 2)/6;
23951
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
23952
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
23953
}// end loop over 'r'
23954
for (unsigned int r = 0; r < 2; r++)
23956
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
23957
ss = r*(r + 1)*(r + 2)/6;
23958
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
23959
}// end loop over 'r'
23960
for (unsigned int r = 0; r < 1; r++)
23962
for (unsigned int s = 1; s < 2 - r; s++)
23964
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
23965
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23966
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
23967
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23968
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23969
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
23970
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
23971
}// end loop over 's'
23972
}// end loop over 'r'
23973
for (unsigned int r = 0; r < 2; r++)
23975
for (unsigned int s = 0; s < 2 - r; s++)
23977
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
23978
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
23979
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
23980
}// end loop over 's'
23981
}// end loop over 'r'
23982
for (unsigned int r = 0; r < 1; r++)
23984
for (unsigned int s = 0; s < 1 - r; s++)
23986
for (unsigned int t = 1; t < 2 - r - s; t++)
23988
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
23989
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
23990
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
23991
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23992
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23993
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
23994
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
23995
}// end loop over 't'
23996
}// end loop over 's'
23997
}// end loop over 'r'
23998
for (unsigned int r = 0; r < 3; r++)
24000
for (unsigned int s = 0; s < 3 - r; s++)
24002
for (unsigned int t = 0; t < 3 - r - s; t++)
24004
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24005
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
24006
}// end loop over 't'
24007
}// end loop over 's'
24008
}// end loop over 'r'
24010
// Table(s) of coefficients.
24011
static const double coefficients0[10] = \
24012
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
24014
// Tables of derivatives of the polynomial base (transpose).
24015
static const double dmats0[10][10] = \
24016
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24017
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24018
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24019
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24020
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24021
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24022
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24023
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24024
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24025
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24027
static const double dmats1[10][10] = \
24028
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24029
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24030
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24031
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24032
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24033
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24034
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24035
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24036
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24037
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24039
static const double dmats2[10][10] = \
24040
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24041
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24042
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24043
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24044
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24045
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24046
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24047
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24048
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24049
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24051
// Compute reference derivatives.
24052
// Declare pointer to array of derivatives on FIAT element.
24053
double *derivatives = new double[num_derivatives];
24054
for (unsigned int r = 0; r < num_derivatives; r++)
24056
derivatives[r] = 0.000000000000000;
24057
}// end loop over 'r'
24059
// Declare derivative matrix (of polynomial basis).
24060
double dmats[10][10] = \
24061
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24062
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24063
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24064
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24065
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24066
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24067
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24068
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24069
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24070
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24072
// Declare (auxiliary) derivative matrix (of polynomial basis).
24073
double dmats_old[10][10] = \
24074
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24075
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24076
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24077
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24078
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24079
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24080
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24081
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24082
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24083
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24085
// Loop possible derivatives.
24086
for (unsigned int r = 0; r < num_derivatives; r++)
24088
// Resetting dmats values to compute next derivative.
24089
for (unsigned int t = 0; t < 10; t++)
24091
for (unsigned int u = 0; u < 10; u++)
24093
dmats[t][u] = 0.000000000000000;
24096
dmats[t][u] = 1.000000000000000;
24099
}// end loop over 'u'
24100
}// end loop over 't'
24102
// Looping derivative order to generate dmats.
24103
for (unsigned int s = 0; s < n; s++)
24105
// Updating dmats_old with new values and resetting dmats.
24106
for (unsigned int t = 0; t < 10; t++)
24108
for (unsigned int u = 0; u < 10; u++)
24110
dmats_old[t][u] = dmats[t][u];
24111
dmats[t][u] = 0.000000000000000;
24112
}// end loop over 'u'
24113
}// end loop over 't'
24115
// Update dmats using an inner product.
24116
if (combinations[r][s] == 0)
24118
for (unsigned int t = 0; t < 10; t++)
24120
for (unsigned int u = 0; u < 10; u++)
24122
for (unsigned int tu = 0; tu < 10; tu++)
24124
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
24125
}// end loop over 'tu'
24126
}// end loop over 'u'
24127
}// end loop over 't'
24130
if (combinations[r][s] == 1)
24132
for (unsigned int t = 0; t < 10; t++)
24134
for (unsigned int u = 0; u < 10; u++)
24136
for (unsigned int tu = 0; tu < 10; tu++)
24138
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
24139
}// end loop over 'tu'
24140
}// end loop over 'u'
24141
}// end loop over 't'
24144
if (combinations[r][s] == 2)
24146
for (unsigned int t = 0; t < 10; t++)
24148
for (unsigned int u = 0; u < 10; u++)
24150
for (unsigned int tu = 0; tu < 10; tu++)
24152
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
24153
}// end loop over 'tu'
24154
}// end loop over 'u'
24155
}// end loop over 't'
24158
}// end loop over 's'
24159
for (unsigned int s = 0; s < 10; s++)
24161
for (unsigned int t = 0; t < 10; t++)
24163
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
24164
}// end loop over 't'
24165
}// end loop over 's'
24166
}// end loop over 'r'
24168
// Transform derivatives back to physical element
24169
for (unsigned int r = 0; r < num_derivatives; r++)
24171
for (unsigned int s = 0; s < num_derivatives; s++)
24173
values[num_derivatives + r] += transform[r][s]*derivatives[s];
24174
}// end loop over 's'
24175
}// end loop over 'r'
24177
// Delete pointer to array of derivatives on FIAT element
24178
delete [] derivatives;
24180
// Delete pointer to array of combinations of derivatives and transform
24181
for (unsigned int r = 0; r < num_derivatives; r++)
24183
delete [] combinations[r];
24184
}// end loop over 'r'
24185
delete [] combinations;
24186
for (unsigned int r = 0; r < num_derivatives; r++)
24188
delete [] transform[r];
24189
}// end loop over 'r'
24190
delete [] transform;
24196
// Array of basisvalues.
24197
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
24199
// Declare helper variables.
24200
unsigned int rr = 0;
24201
unsigned int ss = 0;
24202
unsigned int tt = 0;
24203
double tmp5 = 0.000000000000000;
24204
double tmp6 = 0.000000000000000;
24205
double tmp7 = 0.000000000000000;
24206
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
24207
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
24208
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
24209
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
24210
double tmp4 = tmp3*tmp3;
24212
// Compute basisvalues.
24213
basisvalues[0] = 1.000000000000000;
24214
basisvalues[1] = tmp0;
24215
for (unsigned int r = 1; r < 2; r++)
24217
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
24218
ss = r*(r + 1)*(r + 2)/6;
24219
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
24220
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
24221
}// end loop over 'r'
24222
for (unsigned int r = 0; r < 2; r++)
24224
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
24225
ss = r*(r + 1)*(r + 2)/6;
24226
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
24227
}// end loop over 'r'
24228
for (unsigned int r = 0; r < 1; r++)
24230
for (unsigned int s = 1; s < 2 - r; s++)
24232
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
24233
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
24234
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
24235
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24236
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24237
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24238
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
24239
}// end loop over 's'
24240
}// end loop over 'r'
24241
for (unsigned int r = 0; r < 2; r++)
24243
for (unsigned int s = 0; s < 2 - r; s++)
24245
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
24246
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
24247
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
24248
}// end loop over 's'
24249
}// end loop over 'r'
24250
for (unsigned int r = 0; r < 1; r++)
24252
for (unsigned int s = 0; s < 1 - r; s++)
24254
for (unsigned int t = 1; t < 2 - r - s; t++)
24256
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
24257
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24258
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
24259
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24260
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24261
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24262
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
24263
}// end loop over 't'
24264
}// end loop over 's'
24265
}// end loop over 'r'
24266
for (unsigned int r = 0; r < 3; r++)
24268
for (unsigned int s = 0; s < 3 - r; s++)
24270
for (unsigned int t = 0; t < 3 - r - s; t++)
24272
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24273
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
24274
}// end loop over 't'
24275
}// end loop over 's'
24276
}// end loop over 'r'
24278
// Table(s) of coefficients.
24279
static const double coefficients0[10] = \
24280
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
24282
// Tables of derivatives of the polynomial base (transpose).
24283
static const double dmats0[10][10] = \
24284
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24285
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24286
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24287
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24288
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24289
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24290
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24291
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24292
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24293
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24295
static const double dmats1[10][10] = \
24296
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24297
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24298
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24299
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24300
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24301
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24302
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24303
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24304
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24305
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24307
static const double dmats2[10][10] = \
24308
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24309
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24310
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24311
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24312
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24313
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24314
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24315
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24316
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24317
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24319
// Compute reference derivatives.
24320
// Declare pointer to array of derivatives on FIAT element.
24321
double *derivatives = new double[num_derivatives];
24322
for (unsigned int r = 0; r < num_derivatives; r++)
24324
derivatives[r] = 0.000000000000000;
24325
}// end loop over 'r'
24327
// Declare derivative matrix (of polynomial basis).
24328
double dmats[10][10] = \
24329
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24330
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24331
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24332
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24333
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24334
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24335
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24336
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24337
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24338
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24340
// Declare (auxiliary) derivative matrix (of polynomial basis).
24341
double dmats_old[10][10] = \
24342
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24343
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24344
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24345
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24346
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24347
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24348
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24349
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24350
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24351
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24353
// Loop possible derivatives.
24354
for (unsigned int r = 0; r < num_derivatives; r++)
24356
// Resetting dmats values to compute next derivative.
24357
for (unsigned int t = 0; t < 10; t++)
24359
for (unsigned int u = 0; u < 10; u++)
24361
dmats[t][u] = 0.000000000000000;
24364
dmats[t][u] = 1.000000000000000;
24367
}// end loop over 'u'
24368
}// end loop over 't'
24370
// Looping derivative order to generate dmats.
24371
for (unsigned int s = 0; s < n; s++)
24373
// Updating dmats_old with new values and resetting dmats.
24374
for (unsigned int t = 0; t < 10; t++)
24376
for (unsigned int u = 0; u < 10; u++)
24378
dmats_old[t][u] = dmats[t][u];
24379
dmats[t][u] = 0.000000000000000;
24380
}// end loop over 'u'
24381
}// end loop over 't'
24383
// Update dmats using an inner product.
24384
if (combinations[r][s] == 0)
24386
for (unsigned int t = 0; t < 10; t++)
24388
for (unsigned int u = 0; u < 10; u++)
24390
for (unsigned int tu = 0; tu < 10; tu++)
24392
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
24393
}// end loop over 'tu'
24394
}// end loop over 'u'
24395
}// end loop over 't'
24398
if (combinations[r][s] == 1)
24400
for (unsigned int t = 0; t < 10; t++)
24402
for (unsigned int u = 0; u < 10; u++)
24404
for (unsigned int tu = 0; tu < 10; tu++)
24406
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
24407
}// end loop over 'tu'
24408
}// end loop over 'u'
24409
}// end loop over 't'
24412
if (combinations[r][s] == 2)
24414
for (unsigned int t = 0; t < 10; t++)
24416
for (unsigned int u = 0; u < 10; u++)
24418
for (unsigned int tu = 0; tu < 10; tu++)
24420
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
24421
}// end loop over 'tu'
24422
}// end loop over 'u'
24423
}// end loop over 't'
24426
}// end loop over 's'
24427
for (unsigned int s = 0; s < 10; s++)
24429
for (unsigned int t = 0; t < 10; t++)
24431
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
24432
}// end loop over 't'
24433
}// end loop over 's'
24434
}// end loop over 'r'
24436
// Transform derivatives back to physical element
24437
for (unsigned int r = 0; r < num_derivatives; r++)
24439
for (unsigned int s = 0; s < num_derivatives; s++)
24441
values[num_derivatives + r] += transform[r][s]*derivatives[s];
24442
}// end loop over 's'
24443
}// end loop over 'r'
24445
// Delete pointer to array of derivatives on FIAT element
24446
delete [] derivatives;
24448
// Delete pointer to array of combinations of derivatives and transform
24449
for (unsigned int r = 0; r < num_derivatives; r++)
24451
delete [] combinations[r];
24452
}// end loop over 'r'
24453
delete [] combinations;
24454
for (unsigned int r = 0; r < num_derivatives; r++)
24456
delete [] transform[r];
24457
}// end loop over 'r'
24458
delete [] transform;
24464
// Array of basisvalues.
24465
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
24467
// Declare helper variables.
24468
unsigned int rr = 0;
24469
unsigned int ss = 0;
24470
unsigned int tt = 0;
24471
double tmp5 = 0.000000000000000;
24472
double tmp6 = 0.000000000000000;
24473
double tmp7 = 0.000000000000000;
24474
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
24475
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
24476
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
24477
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
24478
double tmp4 = tmp3*tmp3;
24480
// Compute basisvalues.
24481
basisvalues[0] = 1.000000000000000;
24482
basisvalues[1] = tmp0;
24483
for (unsigned int r = 1; r < 2; r++)
24485
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
24486
ss = r*(r + 1)*(r + 2)/6;
24487
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
24488
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
24489
}// end loop over 'r'
24490
for (unsigned int r = 0; r < 2; r++)
24492
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
24493
ss = r*(r + 1)*(r + 2)/6;
24494
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
24495
}// end loop over 'r'
24496
for (unsigned int r = 0; r < 1; r++)
24498
for (unsigned int s = 1; s < 2 - r; s++)
24500
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
24501
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
24502
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
24503
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24504
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24505
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24506
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
24507
}// end loop over 's'
24508
}// end loop over 'r'
24509
for (unsigned int r = 0; r < 2; r++)
24511
for (unsigned int s = 0; s < 2 - r; s++)
24513
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
24514
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
24515
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
24516
}// end loop over 's'
24517
}// end loop over 'r'
24518
for (unsigned int r = 0; r < 1; r++)
24520
for (unsigned int s = 0; s < 1 - r; s++)
24522
for (unsigned int t = 1; t < 2 - r - s; t++)
24524
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
24525
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24526
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
24527
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24528
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24529
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24530
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
24531
}// end loop over 't'
24532
}// end loop over 's'
24533
}// end loop over 'r'
24534
for (unsigned int r = 0; r < 3; r++)
24536
for (unsigned int s = 0; s < 3 - r; s++)
24538
for (unsigned int t = 0; t < 3 - r - s; t++)
24540
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24541
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
24542
}// end loop over 't'
24543
}// end loop over 's'
24544
}// end loop over 'r'
24546
// Table(s) of coefficients.
24547
static const double coefficients0[10] = \
24548
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
24550
// Tables of derivatives of the polynomial base (transpose).
24551
static const double dmats0[10][10] = \
24552
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24553
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24554
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24555
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24556
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24557
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24558
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24559
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24560
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24561
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24563
static const double dmats1[10][10] = \
24564
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24565
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24566
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24567
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24568
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24569
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24570
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24571
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24572
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24573
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24575
static const double dmats2[10][10] = \
24576
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24577
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24578
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24579
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24580
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24581
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24582
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24583
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24584
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24585
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24587
// Compute reference derivatives.
24588
// Declare pointer to array of derivatives on FIAT element.
24589
double *derivatives = new double[num_derivatives];
24590
for (unsigned int r = 0; r < num_derivatives; r++)
24592
derivatives[r] = 0.000000000000000;
24593
}// end loop over 'r'
24595
// Declare derivative matrix (of polynomial basis).
24596
double dmats[10][10] = \
24597
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24598
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24599
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24600
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24601
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24602
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24603
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24604
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24605
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24606
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24608
// Declare (auxiliary) derivative matrix (of polynomial basis).
24609
double dmats_old[10][10] = \
24610
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24611
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24612
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24613
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24614
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24615
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24616
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24617
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24618
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24619
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24621
// Loop possible derivatives.
24622
for (unsigned int r = 0; r < num_derivatives; r++)
24624
// Resetting dmats values to compute next derivative.
24625
for (unsigned int t = 0; t < 10; t++)
24627
for (unsigned int u = 0; u < 10; u++)
24629
dmats[t][u] = 0.000000000000000;
24632
dmats[t][u] = 1.000000000000000;
24635
}// end loop over 'u'
24636
}// end loop over 't'
24638
// Looping derivative order to generate dmats.
24639
for (unsigned int s = 0; s < n; s++)
24641
// Updating dmats_old with new values and resetting dmats.
24642
for (unsigned int t = 0; t < 10; t++)
24644
for (unsigned int u = 0; u < 10; u++)
24646
dmats_old[t][u] = dmats[t][u];
24647
dmats[t][u] = 0.000000000000000;
24648
}// end loop over 'u'
24649
}// end loop over 't'
24651
// Update dmats using an inner product.
24652
if (combinations[r][s] == 0)
24654
for (unsigned int t = 0; t < 10; t++)
24656
for (unsigned int u = 0; u < 10; u++)
24658
for (unsigned int tu = 0; tu < 10; tu++)
24660
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
24661
}// end loop over 'tu'
24662
}// end loop over 'u'
24663
}// end loop over 't'
24666
if (combinations[r][s] == 1)
24668
for (unsigned int t = 0; t < 10; t++)
24670
for (unsigned int u = 0; u < 10; u++)
24672
for (unsigned int tu = 0; tu < 10; tu++)
24674
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
24675
}// end loop over 'tu'
24676
}// end loop over 'u'
24677
}// end loop over 't'
24680
if (combinations[r][s] == 2)
24682
for (unsigned int t = 0; t < 10; t++)
24684
for (unsigned int u = 0; u < 10; u++)
24686
for (unsigned int tu = 0; tu < 10; tu++)
24688
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
24689
}// end loop over 'tu'
24690
}// end loop over 'u'
24691
}// end loop over 't'
24694
}// end loop over 's'
24695
for (unsigned int s = 0; s < 10; s++)
24697
for (unsigned int t = 0; t < 10; t++)
24699
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
24700
}// end loop over 't'
24701
}// end loop over 's'
24702
}// end loop over 'r'
24704
// Transform derivatives back to physical element
24705
for (unsigned int r = 0; r < num_derivatives; r++)
24707
for (unsigned int s = 0; s < num_derivatives; s++)
24709
values[num_derivatives + r] += transform[r][s]*derivatives[s];
24710
}// end loop over 's'
24711
}// end loop over 'r'
24713
// Delete pointer to array of derivatives on FIAT element
24714
delete [] derivatives;
24716
// Delete pointer to array of combinations of derivatives and transform
24717
for (unsigned int r = 0; r < num_derivatives; r++)
24719
delete [] combinations[r];
24720
}// end loop over 'r'
24721
delete [] combinations;
24722
for (unsigned int r = 0; r < num_derivatives; r++)
24724
delete [] transform[r];
24725
}// end loop over 'r'
24726
delete [] transform;
24732
// Array of basisvalues.
24733
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
24735
// Declare helper variables.
24736
unsigned int rr = 0;
24737
unsigned int ss = 0;
24738
unsigned int tt = 0;
24739
double tmp5 = 0.000000000000000;
24740
double tmp6 = 0.000000000000000;
24741
double tmp7 = 0.000000000000000;
24742
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
24743
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
24744
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
24745
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
24746
double tmp4 = tmp3*tmp3;
24748
// Compute basisvalues.
24749
basisvalues[0] = 1.000000000000000;
24750
basisvalues[1] = tmp0;
24751
for (unsigned int r = 1; r < 2; r++)
24753
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
24754
ss = r*(r + 1)*(r + 2)/6;
24755
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
24756
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
24757
}// end loop over 'r'
24758
for (unsigned int r = 0; r < 2; r++)
24760
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
24761
ss = r*(r + 1)*(r + 2)/6;
24762
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
24763
}// end loop over 'r'
24764
for (unsigned int r = 0; r < 1; r++)
24766
for (unsigned int s = 1; s < 2 - r; s++)
24768
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
24769
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
24770
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
24771
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24772
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24773
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
24774
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
24775
}// end loop over 's'
24776
}// end loop over 'r'
24777
for (unsigned int r = 0; r < 2; r++)
24779
for (unsigned int s = 0; s < 2 - r; s++)
24781
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
24782
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
24783
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
24784
}// end loop over 's'
24785
}// end loop over 'r'
24786
for (unsigned int r = 0; r < 1; r++)
24788
for (unsigned int s = 0; s < 1 - r; s++)
24790
for (unsigned int t = 1; t < 2 - r - s; t++)
24792
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
24793
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24794
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
24795
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24796
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24797
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
24798
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
24799
}// end loop over 't'
24800
}// end loop over 's'
24801
}// end loop over 'r'
24802
for (unsigned int r = 0; r < 3; r++)
24804
for (unsigned int s = 0; s < 3 - r; s++)
24806
for (unsigned int t = 0; t < 3 - r - s; t++)
24808
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
24809
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
24810
}// end loop over 't'
24811
}// end loop over 's'
24812
}// end loop over 'r'
24814
// Table(s) of coefficients.
24815
static const double coefficients0[10] = \
24816
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
24818
// Tables of derivatives of the polynomial base (transpose).
24819
static const double dmats0[10][10] = \
24820
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24821
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24822
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24823
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24824
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24825
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24826
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24827
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24828
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24829
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24831
static const double dmats1[10][10] = \
24832
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24833
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24834
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24835
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24836
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24837
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24838
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24839
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24840
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24841
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24843
static const double dmats2[10][10] = \
24844
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24845
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24846
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24847
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24848
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24849
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24850
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24851
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24852
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24853
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
24855
// Compute reference derivatives.
24856
// Declare pointer to array of derivatives on FIAT element.
24857
double *derivatives = new double[num_derivatives];
24858
for (unsigned int r = 0; r < num_derivatives; r++)
24860
derivatives[r] = 0.000000000000000;
24861
}// end loop over 'r'
24863
// Declare derivative matrix (of polynomial basis).
24864
double dmats[10][10] = \
24865
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24866
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24867
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24868
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24869
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24870
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24871
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24872
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24873
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24874
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24876
// Declare (auxiliary) derivative matrix (of polynomial basis).
24877
double dmats_old[10][10] = \
24878
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24879
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24880
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24881
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24882
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24883
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24884
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
24885
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
24886
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
24887
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
24889
// Loop possible derivatives.
24890
for (unsigned int r = 0; r < num_derivatives; r++)
24892
// Resetting dmats values to compute next derivative.
24893
for (unsigned int t = 0; t < 10; t++)
24895
for (unsigned int u = 0; u < 10; u++)
24897
dmats[t][u] = 0.000000000000000;
24900
dmats[t][u] = 1.000000000000000;
24903
}// end loop over 'u'
24904
}// end loop over 't'
24906
// Looping derivative order to generate dmats.
24907
for (unsigned int s = 0; s < n; s++)
24909
// Updating dmats_old with new values and resetting dmats.
24910
for (unsigned int t = 0; t < 10; t++)
24912
for (unsigned int u = 0; u < 10; u++)
24914
dmats_old[t][u] = dmats[t][u];
24915
dmats[t][u] = 0.000000000000000;
24916
}// end loop over 'u'
24917
}// end loop over 't'
24919
// Update dmats using an inner product.
24920
if (combinations[r][s] == 0)
24922
for (unsigned int t = 0; t < 10; t++)
24924
for (unsigned int u = 0; u < 10; u++)
24926
for (unsigned int tu = 0; tu < 10; tu++)
24928
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
24929
}// end loop over 'tu'
24930
}// end loop over 'u'
24931
}// end loop over 't'
24934
if (combinations[r][s] == 1)
24936
for (unsigned int t = 0; t < 10; t++)
24938
for (unsigned int u = 0; u < 10; u++)
24940
for (unsigned int tu = 0; tu < 10; tu++)
24942
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
24943
}// end loop over 'tu'
24944
}// end loop over 'u'
24945
}// end loop over 't'
24948
if (combinations[r][s] == 2)
24950
for (unsigned int t = 0; t < 10; t++)
24952
for (unsigned int u = 0; u < 10; u++)
24954
for (unsigned int tu = 0; tu < 10; tu++)
24956
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
24957
}// end loop over 'tu'
24958
}// end loop over 'u'
24959
}// end loop over 't'
24962
}// end loop over 's'
24963
for (unsigned int s = 0; s < 10; s++)
24965
for (unsigned int t = 0; t < 10; t++)
24967
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
24968
}// end loop over 't'
24969
}// end loop over 's'
24970
}// end loop over 'r'
24972
// Transform derivatives back to physical element
24973
for (unsigned int r = 0; r < num_derivatives; r++)
24975
for (unsigned int s = 0; s < num_derivatives; s++)
24977
values[num_derivatives + r] += transform[r][s]*derivatives[s];
24978
}// end loop over 's'
24979
}// end loop over 'r'
24981
// Delete pointer to array of derivatives on FIAT element
24982
delete [] derivatives;
24984
// Delete pointer to array of combinations of derivatives and transform
24985
for (unsigned int r = 0; r < num_derivatives; r++)
24987
delete [] combinations[r];
24988
}// end loop over 'r'
24989
delete [] combinations;
24990
for (unsigned int r = 0; r < num_derivatives; r++)
24992
delete [] transform[r];
24993
}// end loop over 'r'
24994
delete [] transform;
25000
// Array of basisvalues.
25001
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
25003
// Declare helper variables.
25004
unsigned int rr = 0;
25005
unsigned int ss = 0;
25006
unsigned int tt = 0;
25007
double tmp5 = 0.000000000000000;
25008
double tmp6 = 0.000000000000000;
25009
double tmp7 = 0.000000000000000;
25010
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
25011
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
25012
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
25013
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
25014
double tmp4 = tmp3*tmp3;
25016
// Compute basisvalues.
25017
basisvalues[0] = 1.000000000000000;
25018
basisvalues[1] = tmp0;
25019
for (unsigned int r = 1; r < 2; r++)
25021
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
25022
ss = r*(r + 1)*(r + 2)/6;
25023
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
25024
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
25025
}// end loop over 'r'
25026
for (unsigned int r = 0; r < 2; r++)
25028
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
25029
ss = r*(r + 1)*(r + 2)/6;
25030
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
25031
}// end loop over 'r'
25032
for (unsigned int r = 0; r < 1; r++)
25034
for (unsigned int s = 1; s < 2 - r; s++)
25036
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
25037
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25038
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
25039
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25040
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25041
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25042
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
25043
}// end loop over 's'
25044
}// end loop over 'r'
25045
for (unsigned int r = 0; r < 2; r++)
25047
for (unsigned int s = 0; s < 2 - r; s++)
25049
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
25050
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25051
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
25052
}// end loop over 's'
25053
}// end loop over 'r'
25054
for (unsigned int r = 0; r < 1; r++)
25056
for (unsigned int s = 0; s < 1 - r; s++)
25058
for (unsigned int t = 1; t < 2 - r - s; t++)
25060
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
25061
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25062
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
25063
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25064
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25065
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25066
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
25067
}// end loop over 't'
25068
}// end loop over 's'
25069
}// end loop over 'r'
25070
for (unsigned int r = 0; r < 3; r++)
25072
for (unsigned int s = 0; s < 3 - r; s++)
25074
for (unsigned int t = 0; t < 3 - r - s; t++)
25076
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25077
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
25078
}// end loop over 't'
25079
}// end loop over 's'
25080
}// end loop over 'r'
25082
// Table(s) of coefficients.
25083
static const double coefficients0[10] = \
25084
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
25086
// Tables of derivatives of the polynomial base (transpose).
25087
static const double dmats0[10][10] = \
25088
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25089
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25090
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25091
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25092
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25093
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25094
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25095
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25096
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25097
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25099
static const double dmats1[10][10] = \
25100
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25101
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25102
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25103
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25104
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25105
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25106
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25107
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25108
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25109
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25111
static const double dmats2[10][10] = \
25112
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25113
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25114
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25115
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25116
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25117
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25118
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25119
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25120
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25121
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25123
// Compute reference derivatives.
25124
// Declare pointer to array of derivatives on FIAT element.
25125
double *derivatives = new double[num_derivatives];
25126
for (unsigned int r = 0; r < num_derivatives; r++)
25128
derivatives[r] = 0.000000000000000;
25129
}// end loop over 'r'
25131
// Declare derivative matrix (of polynomial basis).
25132
double dmats[10][10] = \
25133
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25134
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25135
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25136
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25137
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25138
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25139
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25140
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25141
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25142
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25144
// Declare (auxiliary) derivative matrix (of polynomial basis).
25145
double dmats_old[10][10] = \
25146
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25147
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25148
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25149
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25150
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25151
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25152
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25153
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25154
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25155
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25157
// Loop possible derivatives.
25158
for (unsigned int r = 0; r < num_derivatives; r++)
25160
// Resetting dmats values to compute next derivative.
25161
for (unsigned int t = 0; t < 10; t++)
25163
for (unsigned int u = 0; u < 10; u++)
25165
dmats[t][u] = 0.000000000000000;
25168
dmats[t][u] = 1.000000000000000;
25171
}// end loop over 'u'
25172
}// end loop over 't'
25174
// Looping derivative order to generate dmats.
25175
for (unsigned int s = 0; s < n; s++)
25177
// Updating dmats_old with new values and resetting dmats.
25178
for (unsigned int t = 0; t < 10; t++)
25180
for (unsigned int u = 0; u < 10; u++)
25182
dmats_old[t][u] = dmats[t][u];
25183
dmats[t][u] = 0.000000000000000;
25184
}// end loop over 'u'
25185
}// end loop over 't'
25187
// Update dmats using an inner product.
25188
if (combinations[r][s] == 0)
25190
for (unsigned int t = 0; t < 10; t++)
25192
for (unsigned int u = 0; u < 10; u++)
25194
for (unsigned int tu = 0; tu < 10; tu++)
25196
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
25197
}// end loop over 'tu'
25198
}// end loop over 'u'
25199
}// end loop over 't'
25202
if (combinations[r][s] == 1)
25204
for (unsigned int t = 0; t < 10; t++)
25206
for (unsigned int u = 0; u < 10; u++)
25208
for (unsigned int tu = 0; tu < 10; tu++)
25210
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
25211
}// end loop over 'tu'
25212
}// end loop over 'u'
25213
}// end loop over 't'
25216
if (combinations[r][s] == 2)
25218
for (unsigned int t = 0; t < 10; t++)
25220
for (unsigned int u = 0; u < 10; u++)
25222
for (unsigned int tu = 0; tu < 10; tu++)
25224
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
25225
}// end loop over 'tu'
25226
}// end loop over 'u'
25227
}// end loop over 't'
25230
}// end loop over 's'
25231
for (unsigned int s = 0; s < 10; s++)
25233
for (unsigned int t = 0; t < 10; t++)
25235
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
25236
}// end loop over 't'
25237
}// end loop over 's'
25238
}// end loop over 'r'
25240
// Transform derivatives back to physical element
25241
for (unsigned int r = 0; r < num_derivatives; r++)
25243
for (unsigned int s = 0; s < num_derivatives; s++)
25245
values[num_derivatives + r] += transform[r][s]*derivatives[s];
25246
}// end loop over 's'
25247
}// end loop over 'r'
25249
// Delete pointer to array of derivatives on FIAT element
25250
delete [] derivatives;
25252
// Delete pointer to array of combinations of derivatives and transform
25253
for (unsigned int r = 0; r < num_derivatives; r++)
25255
delete [] combinations[r];
25256
}// end loop over 'r'
25257
delete [] combinations;
25258
for (unsigned int r = 0; r < num_derivatives; r++)
25260
delete [] transform[r];
25261
}// end loop over 'r'
25262
delete [] transform;
25268
// Array of basisvalues.
25269
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
25271
// Declare helper variables.
25272
unsigned int rr = 0;
25273
unsigned int ss = 0;
25274
unsigned int tt = 0;
25275
double tmp5 = 0.000000000000000;
25276
double tmp6 = 0.000000000000000;
25277
double tmp7 = 0.000000000000000;
25278
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
25279
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
25280
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
25281
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
25282
double tmp4 = tmp3*tmp3;
25284
// Compute basisvalues.
25285
basisvalues[0] = 1.000000000000000;
25286
basisvalues[1] = tmp0;
25287
for (unsigned int r = 1; r < 2; r++)
25289
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
25290
ss = r*(r + 1)*(r + 2)/6;
25291
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
25292
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
25293
}// end loop over 'r'
25294
for (unsigned int r = 0; r < 2; r++)
25296
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
25297
ss = r*(r + 1)*(r + 2)/6;
25298
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
25299
}// end loop over 'r'
25300
for (unsigned int r = 0; r < 1; r++)
25302
for (unsigned int s = 1; s < 2 - r; s++)
25304
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
25305
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25306
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
25307
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25308
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25309
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25310
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
25311
}// end loop over 's'
25312
}// end loop over 'r'
25313
for (unsigned int r = 0; r < 2; r++)
25315
for (unsigned int s = 0; s < 2 - r; s++)
25317
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
25318
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25319
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
25320
}// end loop over 's'
25321
}// end loop over 'r'
25322
for (unsigned int r = 0; r < 1; r++)
25324
for (unsigned int s = 0; s < 1 - r; s++)
25326
for (unsigned int t = 1; t < 2 - r - s; t++)
25328
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
25329
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25330
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
25331
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25332
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25333
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25334
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
25335
}// end loop over 't'
25336
}// end loop over 's'
25337
}// end loop over 'r'
25338
for (unsigned int r = 0; r < 3; r++)
25340
for (unsigned int s = 0; s < 3 - r; s++)
25342
for (unsigned int t = 0; t < 3 - r - s; t++)
25344
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25345
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
25346
}// end loop over 't'
25347
}// end loop over 's'
25348
}// end loop over 'r'
25350
// Table(s) of coefficients.
25351
static const double coefficients0[10] = \
25352
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
25354
// Tables of derivatives of the polynomial base (transpose).
25355
static const double dmats0[10][10] = \
25356
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25357
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25358
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25359
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25360
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25361
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25362
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25363
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25364
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25365
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25367
static const double dmats1[10][10] = \
25368
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25369
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25370
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25371
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25372
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25373
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25374
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25375
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25376
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25377
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25379
static const double dmats2[10][10] = \
25380
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25381
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25382
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25383
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25384
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25385
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25386
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25387
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25388
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25389
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25391
// Compute reference derivatives.
25392
// Declare pointer to array of derivatives on FIAT element.
25393
double *derivatives = new double[num_derivatives];
25394
for (unsigned int r = 0; r < num_derivatives; r++)
25396
derivatives[r] = 0.000000000000000;
25397
}// end loop over 'r'
25399
// Declare derivative matrix (of polynomial basis).
25400
double dmats[10][10] = \
25401
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25402
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25403
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25404
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25405
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25406
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25407
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25408
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25409
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25410
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25412
// Declare (auxiliary) derivative matrix (of polynomial basis).
25413
double dmats_old[10][10] = \
25414
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25415
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25416
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25417
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25418
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25419
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25420
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25421
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25422
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25423
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25425
// Loop possible derivatives.
25426
for (unsigned int r = 0; r < num_derivatives; r++)
25428
// Resetting dmats values to compute next derivative.
25429
for (unsigned int t = 0; t < 10; t++)
25431
for (unsigned int u = 0; u < 10; u++)
25433
dmats[t][u] = 0.000000000000000;
25436
dmats[t][u] = 1.000000000000000;
25439
}// end loop over 'u'
25440
}// end loop over 't'
25442
// Looping derivative order to generate dmats.
25443
for (unsigned int s = 0; s < n; s++)
25445
// Updating dmats_old with new values and resetting dmats.
25446
for (unsigned int t = 0; t < 10; t++)
25448
for (unsigned int u = 0; u < 10; u++)
25450
dmats_old[t][u] = dmats[t][u];
25451
dmats[t][u] = 0.000000000000000;
25452
}// end loop over 'u'
25453
}// end loop over 't'
25455
// Update dmats using an inner product.
25456
if (combinations[r][s] == 0)
25458
for (unsigned int t = 0; t < 10; t++)
25460
for (unsigned int u = 0; u < 10; u++)
25462
for (unsigned int tu = 0; tu < 10; tu++)
25464
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
25465
}// end loop over 'tu'
25466
}// end loop over 'u'
25467
}// end loop over 't'
25470
if (combinations[r][s] == 1)
25472
for (unsigned int t = 0; t < 10; t++)
25474
for (unsigned int u = 0; u < 10; u++)
25476
for (unsigned int tu = 0; tu < 10; tu++)
25478
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
25479
}// end loop over 'tu'
25480
}// end loop over 'u'
25481
}// end loop over 't'
25484
if (combinations[r][s] == 2)
25486
for (unsigned int t = 0; t < 10; t++)
25488
for (unsigned int u = 0; u < 10; u++)
25490
for (unsigned int tu = 0; tu < 10; tu++)
25492
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
25493
}// end loop over 'tu'
25494
}// end loop over 'u'
25495
}// end loop over 't'
25498
}// end loop over 's'
25499
for (unsigned int s = 0; s < 10; s++)
25501
for (unsigned int t = 0; t < 10; t++)
25503
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
25504
}// end loop over 't'
25505
}// end loop over 's'
25506
}// end loop over 'r'
25508
// Transform derivatives back to physical element
25509
for (unsigned int r = 0; r < num_derivatives; r++)
25511
for (unsigned int s = 0; s < num_derivatives; s++)
25513
values[num_derivatives + r] += transform[r][s]*derivatives[s];
25514
}// end loop over 's'
25515
}// end loop over 'r'
25517
// Delete pointer to array of derivatives on FIAT element
25518
delete [] derivatives;
25520
// Delete pointer to array of combinations of derivatives and transform
25521
for (unsigned int r = 0; r < num_derivatives; r++)
25523
delete [] combinations[r];
25524
}// end loop over 'r'
25525
delete [] combinations;
25526
for (unsigned int r = 0; r < num_derivatives; r++)
25528
delete [] transform[r];
25529
}// end loop over 'r'
25530
delete [] transform;
25536
// Array of basisvalues.
25537
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
25539
// Declare helper variables.
25540
unsigned int rr = 0;
25541
unsigned int ss = 0;
25542
unsigned int tt = 0;
25543
double tmp5 = 0.000000000000000;
25544
double tmp6 = 0.000000000000000;
25545
double tmp7 = 0.000000000000000;
25546
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
25547
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
25548
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
25549
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
25550
double tmp4 = tmp3*tmp3;
25552
// Compute basisvalues.
25553
basisvalues[0] = 1.000000000000000;
25554
basisvalues[1] = tmp0;
25555
for (unsigned int r = 1; r < 2; r++)
25557
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
25558
ss = r*(r + 1)*(r + 2)/6;
25559
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
25560
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
25561
}// end loop over 'r'
25562
for (unsigned int r = 0; r < 2; r++)
25564
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
25565
ss = r*(r + 1)*(r + 2)/6;
25566
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
25567
}// end loop over 'r'
25568
for (unsigned int r = 0; r < 1; r++)
25570
for (unsigned int s = 1; s < 2 - r; s++)
25572
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
25573
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25574
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
25575
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25576
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25577
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25578
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
25579
}// end loop over 's'
25580
}// end loop over 'r'
25581
for (unsigned int r = 0; r < 2; r++)
25583
for (unsigned int s = 0; s < 2 - r; s++)
25585
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
25586
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25587
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
25588
}// end loop over 's'
25589
}// end loop over 'r'
25590
for (unsigned int r = 0; r < 1; r++)
25592
for (unsigned int s = 0; s < 1 - r; s++)
25594
for (unsigned int t = 1; t < 2 - r - s; t++)
25596
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
25597
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25598
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
25599
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25600
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25601
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25602
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
25603
}// end loop over 't'
25604
}// end loop over 's'
25605
}// end loop over 'r'
25606
for (unsigned int r = 0; r < 3; r++)
25608
for (unsigned int s = 0; s < 3 - r; s++)
25610
for (unsigned int t = 0; t < 3 - r - s; t++)
25612
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25613
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
25614
}// end loop over 't'
25615
}// end loop over 's'
25616
}// end loop over 'r'
25618
// Table(s) of coefficients.
25619
static const double coefficients0[10] = \
25620
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
25622
// Tables of derivatives of the polynomial base (transpose).
25623
static const double dmats0[10][10] = \
25624
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25625
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25626
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25627
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25628
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25629
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25630
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25631
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25632
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25633
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25635
static const double dmats1[10][10] = \
25636
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25637
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25638
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25639
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25640
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25641
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25642
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25643
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25644
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25645
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25647
static const double dmats2[10][10] = \
25648
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25649
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25650
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25651
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25652
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25653
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25654
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25655
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25656
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25657
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25659
// Compute reference derivatives.
25660
// Declare pointer to array of derivatives on FIAT element.
25661
double *derivatives = new double[num_derivatives];
25662
for (unsigned int r = 0; r < num_derivatives; r++)
25664
derivatives[r] = 0.000000000000000;
25665
}// end loop over 'r'
25667
// Declare derivative matrix (of polynomial basis).
25668
double dmats[10][10] = \
25669
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25670
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25671
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25672
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25673
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25674
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25675
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25676
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25677
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25678
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25680
// Declare (auxiliary) derivative matrix (of polynomial basis).
25681
double dmats_old[10][10] = \
25682
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25683
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25684
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25685
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25686
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25687
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25688
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25689
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25690
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25691
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25693
// Loop possible derivatives.
25694
for (unsigned int r = 0; r < num_derivatives; r++)
25696
// Resetting dmats values to compute next derivative.
25697
for (unsigned int t = 0; t < 10; t++)
25699
for (unsigned int u = 0; u < 10; u++)
25701
dmats[t][u] = 0.000000000000000;
25704
dmats[t][u] = 1.000000000000000;
25707
}// end loop over 'u'
25708
}// end loop over 't'
25710
// Looping derivative order to generate dmats.
25711
for (unsigned int s = 0; s < n; s++)
25713
// Updating dmats_old with new values and resetting dmats.
25714
for (unsigned int t = 0; t < 10; t++)
25716
for (unsigned int u = 0; u < 10; u++)
25718
dmats_old[t][u] = dmats[t][u];
25719
dmats[t][u] = 0.000000000000000;
25720
}// end loop over 'u'
25721
}// end loop over 't'
25723
// Update dmats using an inner product.
25724
if (combinations[r][s] == 0)
25726
for (unsigned int t = 0; t < 10; t++)
25728
for (unsigned int u = 0; u < 10; u++)
25730
for (unsigned int tu = 0; tu < 10; tu++)
25732
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
25733
}// end loop over 'tu'
25734
}// end loop over 'u'
25735
}// end loop over 't'
25738
if (combinations[r][s] == 1)
25740
for (unsigned int t = 0; t < 10; t++)
25742
for (unsigned int u = 0; u < 10; u++)
25744
for (unsigned int tu = 0; tu < 10; tu++)
25746
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
25747
}// end loop over 'tu'
25748
}// end loop over 'u'
25749
}// end loop over 't'
25752
if (combinations[r][s] == 2)
25754
for (unsigned int t = 0; t < 10; t++)
25756
for (unsigned int u = 0; u < 10; u++)
25758
for (unsigned int tu = 0; tu < 10; tu++)
25760
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
25761
}// end loop over 'tu'
25762
}// end loop over 'u'
25763
}// end loop over 't'
25766
}// end loop over 's'
25767
for (unsigned int s = 0; s < 10; s++)
25769
for (unsigned int t = 0; t < 10; t++)
25771
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
25772
}// end loop over 't'
25773
}// end loop over 's'
25774
}// end loop over 'r'
25776
// Transform derivatives back to physical element
25777
for (unsigned int r = 0; r < num_derivatives; r++)
25779
for (unsigned int s = 0; s < num_derivatives; s++)
25781
values[num_derivatives + r] += transform[r][s]*derivatives[s];
25782
}// end loop over 's'
25783
}// end loop over 'r'
25785
// Delete pointer to array of derivatives on FIAT element
25786
delete [] derivatives;
25788
// Delete pointer to array of combinations of derivatives and transform
25789
for (unsigned int r = 0; r < num_derivatives; r++)
25791
delete [] combinations[r];
25792
}// end loop over 'r'
25793
delete [] combinations;
25794
for (unsigned int r = 0; r < num_derivatives; r++)
25796
delete [] transform[r];
25797
}// end loop over 'r'
25798
delete [] transform;
25804
// Array of basisvalues.
25805
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
25807
// Declare helper variables.
25808
unsigned int rr = 0;
25809
unsigned int ss = 0;
25810
unsigned int tt = 0;
25811
double tmp5 = 0.000000000000000;
25812
double tmp6 = 0.000000000000000;
25813
double tmp7 = 0.000000000000000;
25814
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
25815
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
25816
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
25817
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
25818
double tmp4 = tmp3*tmp3;
25820
// Compute basisvalues.
25821
basisvalues[0] = 1.000000000000000;
25822
basisvalues[1] = tmp0;
25823
for (unsigned int r = 1; r < 2; r++)
25825
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
25826
ss = r*(r + 1)*(r + 2)/6;
25827
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
25828
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
25829
}// end loop over 'r'
25830
for (unsigned int r = 0; r < 2; r++)
25832
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
25833
ss = r*(r + 1)*(r + 2)/6;
25834
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
25835
}// end loop over 'r'
25836
for (unsigned int r = 0; r < 1; r++)
25838
for (unsigned int s = 1; s < 2 - r; s++)
25840
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
25841
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25842
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
25843
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25844
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25845
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
25846
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
25847
}// end loop over 's'
25848
}// end loop over 'r'
25849
for (unsigned int r = 0; r < 2; r++)
25851
for (unsigned int s = 0; s < 2 - r; s++)
25853
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
25854
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
25855
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
25856
}// end loop over 's'
25857
}// end loop over 'r'
25858
for (unsigned int r = 0; r < 1; r++)
25860
for (unsigned int s = 0; s < 1 - r; s++)
25862
for (unsigned int t = 1; t < 2 - r - s; t++)
25864
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
25865
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25866
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
25867
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25868
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25869
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
25870
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
25871
}// end loop over 't'
25872
}// end loop over 's'
25873
}// end loop over 'r'
25874
for (unsigned int r = 0; r < 3; r++)
25876
for (unsigned int s = 0; s < 3 - r; s++)
25878
for (unsigned int t = 0; t < 3 - r - s; t++)
25880
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
25881
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
25882
}// end loop over 't'
25883
}// end loop over 's'
25884
}// end loop over 'r'
25886
// Table(s) of coefficients.
25887
static const double coefficients0[10] = \
25888
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
25890
// Tables of derivatives of the polynomial base (transpose).
25891
static const double dmats0[10][10] = \
25892
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25893
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25894
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25895
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25896
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25897
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25898
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25899
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25900
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25901
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25903
static const double dmats1[10][10] = \
25904
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25905
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25906
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25907
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25908
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25909
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25910
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25911
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25912
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25913
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25915
static const double dmats2[10][10] = \
25916
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25917
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25918
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25919
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25920
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25921
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25922
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25923
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25924
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25925
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
25927
// Compute reference derivatives.
25928
// Declare pointer to array of derivatives on FIAT element.
25929
double *derivatives = new double[num_derivatives];
25930
for (unsigned int r = 0; r < num_derivatives; r++)
25932
derivatives[r] = 0.000000000000000;
25933
}// end loop over 'r'
25935
// Declare derivative matrix (of polynomial basis).
25936
double dmats[10][10] = \
25937
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25938
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25939
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25940
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25941
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25942
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25943
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25944
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25945
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25946
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25948
// Declare (auxiliary) derivative matrix (of polynomial basis).
25949
double dmats_old[10][10] = \
25950
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25951
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25952
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25953
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25954
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25955
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25956
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
25957
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
25958
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
25959
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
25961
// Loop possible derivatives.
25962
for (unsigned int r = 0; r < num_derivatives; r++)
25964
// Resetting dmats values to compute next derivative.
25965
for (unsigned int t = 0; t < 10; t++)
25967
for (unsigned int u = 0; u < 10; u++)
25969
dmats[t][u] = 0.000000000000000;
25972
dmats[t][u] = 1.000000000000000;
25975
}// end loop over 'u'
25976
}// end loop over 't'
25978
// Looping derivative order to generate dmats.
25979
for (unsigned int s = 0; s < n; s++)
25981
// Updating dmats_old with new values and resetting dmats.
25982
for (unsigned int t = 0; t < 10; t++)
25984
for (unsigned int u = 0; u < 10; u++)
25986
dmats_old[t][u] = dmats[t][u];
25987
dmats[t][u] = 0.000000000000000;
25988
}// end loop over 'u'
25989
}// end loop over 't'
25991
// Update dmats using an inner product.
25992
if (combinations[r][s] == 0)
25994
for (unsigned int t = 0; t < 10; t++)
25996
for (unsigned int u = 0; u < 10; u++)
25998
for (unsigned int tu = 0; tu < 10; tu++)
26000
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
26001
}// end loop over 'tu'
26002
}// end loop over 'u'
26003
}// end loop over 't'
26006
if (combinations[r][s] == 1)
26008
for (unsigned int t = 0; t < 10; t++)
26010
for (unsigned int u = 0; u < 10; u++)
26012
for (unsigned int tu = 0; tu < 10; tu++)
26014
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
26015
}// end loop over 'tu'
26016
}// end loop over 'u'
26017
}// end loop over 't'
26020
if (combinations[r][s] == 2)
26022
for (unsigned int t = 0; t < 10; t++)
26024
for (unsigned int u = 0; u < 10; u++)
26026
for (unsigned int tu = 0; tu < 10; tu++)
26028
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
26029
}// end loop over 'tu'
26030
}// end loop over 'u'
26031
}// end loop over 't'
26034
}// end loop over 's'
26035
for (unsigned int s = 0; s < 10; s++)
26037
for (unsigned int t = 0; t < 10; t++)
26039
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
26040
}// end loop over 't'
26041
}// end loop over 's'
26042
}// end loop over 'r'
26044
// Transform derivatives back to physical element
26045
for (unsigned int r = 0; r < num_derivatives; r++)
26047
for (unsigned int s = 0; s < num_derivatives; s++)
26049
values[num_derivatives + r] += transform[r][s]*derivatives[s];
26050
}// end loop over 's'
26051
}// end loop over 'r'
26053
// Delete pointer to array of derivatives on FIAT element
26054
delete [] derivatives;
26056
// Delete pointer to array of combinations of derivatives and transform
26057
for (unsigned int r = 0; r < num_derivatives; r++)
26059
delete [] combinations[r];
26060
}// end loop over 'r'
26061
delete [] combinations;
26062
for (unsigned int r = 0; r < num_derivatives; r++)
26064
delete [] transform[r];
26065
}// end loop over 'r'
26066
delete [] transform;
26072
// Array of basisvalues.
26073
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
26075
// Declare helper variables.
26076
unsigned int rr = 0;
26077
unsigned int ss = 0;
26078
unsigned int tt = 0;
26079
double tmp5 = 0.000000000000000;
26080
double tmp6 = 0.000000000000000;
26081
double tmp7 = 0.000000000000000;
26082
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
26083
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
26084
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
26085
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
26086
double tmp4 = tmp3*tmp3;
26088
// Compute basisvalues.
26089
basisvalues[0] = 1.000000000000000;
26090
basisvalues[1] = tmp0;
26091
for (unsigned int r = 1; r < 2; r++)
26093
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
26094
ss = r*(r + 1)*(r + 2)/6;
26095
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
26096
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
26097
}// end loop over 'r'
26098
for (unsigned int r = 0; r < 2; r++)
26100
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
26101
ss = r*(r + 1)*(r + 2)/6;
26102
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
26103
}// end loop over 'r'
26104
for (unsigned int r = 0; r < 1; r++)
26106
for (unsigned int s = 1; s < 2 - r; s++)
26108
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
26109
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26110
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
26111
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26112
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26113
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26114
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
26115
}// end loop over 's'
26116
}// end loop over 'r'
26117
for (unsigned int r = 0; r < 2; r++)
26119
for (unsigned int s = 0; s < 2 - r; s++)
26121
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
26122
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26123
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
26124
}// end loop over 's'
26125
}// end loop over 'r'
26126
for (unsigned int r = 0; r < 1; r++)
26128
for (unsigned int s = 0; s < 1 - r; s++)
26130
for (unsigned int t = 1; t < 2 - r - s; t++)
26132
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
26133
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26134
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
26135
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26136
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26137
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26138
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
26139
}// end loop over 't'
26140
}// end loop over 's'
26141
}// end loop over 'r'
26142
for (unsigned int r = 0; r < 3; r++)
26144
for (unsigned int s = 0; s < 3 - r; s++)
26146
for (unsigned int t = 0; t < 3 - r - s; t++)
26148
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26149
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
26150
}// end loop over 't'
26151
}// end loop over 's'
26152
}// end loop over 'r'
26154
// Table(s) of coefficients.
26155
static const double coefficients0[10] = \
26156
{-0.057735026918963, -0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, 0.050395263067897, 0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
26158
// Tables of derivatives of the polynomial base (transpose).
26159
static const double dmats0[10][10] = \
26160
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26161
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26162
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26163
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26164
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26165
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26166
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26167
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26168
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26169
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26171
static const double dmats1[10][10] = \
26172
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26173
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26174
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26175
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26176
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26177
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26178
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26179
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26180
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26181
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26183
static const double dmats2[10][10] = \
26184
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26185
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26186
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26187
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26188
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26189
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26190
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26191
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26192
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26193
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26195
// Compute reference derivatives.
26196
// Declare pointer to array of derivatives on FIAT element.
26197
double *derivatives = new double[num_derivatives];
26198
for (unsigned int r = 0; r < num_derivatives; r++)
26200
derivatives[r] = 0.000000000000000;
26201
}// end loop over 'r'
26203
// Declare derivative matrix (of polynomial basis).
26204
double dmats[10][10] = \
26205
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26206
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26207
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26208
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26209
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26210
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26211
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26212
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
26213
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
26214
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
26216
// Declare (auxiliary) derivative matrix (of polynomial basis).
26217
double dmats_old[10][10] = \
26218
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26219
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26220
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26221
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26222
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26223
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26224
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26225
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
26226
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
26227
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
26229
// Loop possible derivatives.
26230
for (unsigned int r = 0; r < num_derivatives; r++)
26232
// Resetting dmats values to compute next derivative.
26233
for (unsigned int t = 0; t < 10; t++)
26235
for (unsigned int u = 0; u < 10; u++)
26237
dmats[t][u] = 0.000000000000000;
26240
dmats[t][u] = 1.000000000000000;
26243
}// end loop over 'u'
26244
}// end loop over 't'
26246
// Looping derivative order to generate dmats.
26247
for (unsigned int s = 0; s < n; s++)
26249
// Updating dmats_old with new values and resetting dmats.
26250
for (unsigned int t = 0; t < 10; t++)
26252
for (unsigned int u = 0; u < 10; u++)
26254
dmats_old[t][u] = dmats[t][u];
26255
dmats[t][u] = 0.000000000000000;
26256
}// end loop over 'u'
26257
}// end loop over 't'
26259
// Update dmats using an inner product.
26260
if (combinations[r][s] == 0)
26262
for (unsigned int t = 0; t < 10; t++)
26264
for (unsigned int u = 0; u < 10; u++)
26266
for (unsigned int tu = 0; tu < 10; tu++)
26268
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
26269
}// end loop over 'tu'
26270
}// end loop over 'u'
26271
}// end loop over 't'
26274
if (combinations[r][s] == 1)
26276
for (unsigned int t = 0; t < 10; t++)
26278
for (unsigned int u = 0; u < 10; u++)
26280
for (unsigned int tu = 0; tu < 10; tu++)
26282
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
26283
}// end loop over 'tu'
26284
}// end loop over 'u'
26285
}// end loop over 't'
26288
if (combinations[r][s] == 2)
26290
for (unsigned int t = 0; t < 10; t++)
26292
for (unsigned int u = 0; u < 10; u++)
26294
for (unsigned int tu = 0; tu < 10; tu++)
26296
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
26297
}// end loop over 'tu'
26298
}// end loop over 'u'
26299
}// end loop over 't'
26302
}// end loop over 's'
26303
for (unsigned int s = 0; s < 10; s++)
26305
for (unsigned int t = 0; t < 10; t++)
26307
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
26308
}// end loop over 't'
26309
}// end loop over 's'
26310
}// end loop over 'r'
26312
// Transform derivatives back to physical element
26313
for (unsigned int r = 0; r < num_derivatives; r++)
26315
for (unsigned int s = 0; s < num_derivatives; s++)
26317
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
26318
}// end loop over 's'
26319
}// end loop over 'r'
26321
// Delete pointer to array of derivatives on FIAT element
26322
delete [] derivatives;
26324
// Delete pointer to array of combinations of derivatives and transform
26325
for (unsigned int r = 0; r < num_derivatives; r++)
26327
delete [] combinations[r];
26328
}// end loop over 'r'
26329
delete [] combinations;
26330
for (unsigned int r = 0; r < num_derivatives; r++)
26332
delete [] transform[r];
26333
}// end loop over 'r'
26334
delete [] transform;
26340
// Array of basisvalues.
26341
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
26343
// Declare helper variables.
26344
unsigned int rr = 0;
26345
unsigned int ss = 0;
26346
unsigned int tt = 0;
26347
double tmp5 = 0.000000000000000;
26348
double tmp6 = 0.000000000000000;
26349
double tmp7 = 0.000000000000000;
26350
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
26351
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
26352
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
26353
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
26354
double tmp4 = tmp3*tmp3;
26356
// Compute basisvalues.
26357
basisvalues[0] = 1.000000000000000;
26358
basisvalues[1] = tmp0;
26359
for (unsigned int r = 1; r < 2; r++)
26361
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
26362
ss = r*(r + 1)*(r + 2)/6;
26363
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
26364
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
26365
}// end loop over 'r'
26366
for (unsigned int r = 0; r < 2; r++)
26368
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
26369
ss = r*(r + 1)*(r + 2)/6;
26370
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
26371
}// end loop over 'r'
26372
for (unsigned int r = 0; r < 1; r++)
26374
for (unsigned int s = 1; s < 2 - r; s++)
26376
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
26377
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26378
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
26379
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26380
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26381
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26382
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
26383
}// end loop over 's'
26384
}// end loop over 'r'
26385
for (unsigned int r = 0; r < 2; r++)
26387
for (unsigned int s = 0; s < 2 - r; s++)
26389
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
26390
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26391
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
26392
}// end loop over 's'
26393
}// end loop over 'r'
26394
for (unsigned int r = 0; r < 1; r++)
26396
for (unsigned int s = 0; s < 1 - r; s++)
26398
for (unsigned int t = 1; t < 2 - r - s; t++)
26400
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
26401
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26402
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
26403
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26404
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26405
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26406
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
26407
}// end loop over 't'
26408
}// end loop over 's'
26409
}// end loop over 'r'
26410
for (unsigned int r = 0; r < 3; r++)
26412
for (unsigned int s = 0; s < 3 - r; s++)
26414
for (unsigned int t = 0; t < 3 - r - s; t++)
26416
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26417
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
26418
}// end loop over 't'
26419
}// end loop over 's'
26420
}// end loop over 'r'
26422
// Table(s) of coefficients.
26423
static const double coefficients0[10] = \
26424
{-0.057735026918963, 0.060858061945018, -0.035136418446315, -0.024845199749998, 0.065060004863236, -0.050395263067897, -0.041147559989891, 0.029095718698132, 0.023756554836660, 0.016798421022632};
26426
// Tables of derivatives of the polynomial base (transpose).
26427
static const double dmats0[10][10] = \
26428
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26429
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26430
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26431
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26432
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26433
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26434
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26435
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26436
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26437
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26439
static const double dmats1[10][10] = \
26440
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26441
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26442
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26443
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26444
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26445
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26446
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26447
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26448
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26449
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26451
static const double dmats2[10][10] = \
26452
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26453
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26454
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26455
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26456
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26457
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26458
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26459
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26460
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26461
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26463
// Compute reference derivatives.
26464
// Declare pointer to array of derivatives on FIAT element.
26465
double *derivatives = new double[num_derivatives];
26466
for (unsigned int r = 0; r < num_derivatives; r++)
26468
derivatives[r] = 0.000000000000000;
26469
}// end loop over 'r'
26471
// Declare derivative matrix (of polynomial basis).
26472
double dmats[10][10] = \
26473
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26474
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26475
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26476
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26477
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26478
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26479
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26480
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
26481
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
26482
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
26484
// Declare (auxiliary) derivative matrix (of polynomial basis).
26485
double dmats_old[10][10] = \
26486
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26487
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26488
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26489
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26490
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26491
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26492
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26493
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
26494
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
26495
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
26497
// Loop possible derivatives.
26498
for (unsigned int r = 0; r < num_derivatives; r++)
26500
// Resetting dmats values to compute next derivative.
26501
for (unsigned int t = 0; t < 10; t++)
26503
for (unsigned int u = 0; u < 10; u++)
26505
dmats[t][u] = 0.000000000000000;
26508
dmats[t][u] = 1.000000000000000;
26511
}// end loop over 'u'
26512
}// end loop over 't'
26514
// Looping derivative order to generate dmats.
26515
for (unsigned int s = 0; s < n; s++)
26517
// Updating dmats_old with new values and resetting dmats.
26518
for (unsigned int t = 0; t < 10; t++)
26520
for (unsigned int u = 0; u < 10; u++)
26522
dmats_old[t][u] = dmats[t][u];
26523
dmats[t][u] = 0.000000000000000;
26524
}// end loop over 'u'
26525
}// end loop over 't'
26527
// Update dmats using an inner product.
26528
if (combinations[r][s] == 0)
26530
for (unsigned int t = 0; t < 10; t++)
26532
for (unsigned int u = 0; u < 10; u++)
26534
for (unsigned int tu = 0; tu < 10; tu++)
26536
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
26537
}// end loop over 'tu'
26538
}// end loop over 'u'
26539
}// end loop over 't'
26542
if (combinations[r][s] == 1)
26544
for (unsigned int t = 0; t < 10; t++)
26546
for (unsigned int u = 0; u < 10; u++)
26548
for (unsigned int tu = 0; tu < 10; tu++)
26550
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
26551
}// end loop over 'tu'
26552
}// end loop over 'u'
26553
}// end loop over 't'
26556
if (combinations[r][s] == 2)
26558
for (unsigned int t = 0; t < 10; t++)
26560
for (unsigned int u = 0; u < 10; u++)
26562
for (unsigned int tu = 0; tu < 10; tu++)
26564
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
26565
}// end loop over 'tu'
26566
}// end loop over 'u'
26567
}// end loop over 't'
26570
}// end loop over 's'
26571
for (unsigned int s = 0; s < 10; s++)
26573
for (unsigned int t = 0; t < 10; t++)
26575
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
26576
}// end loop over 't'
26577
}// end loop over 's'
26578
}// end loop over 'r'
26580
// Transform derivatives back to physical element
26581
for (unsigned int r = 0; r < num_derivatives; r++)
26583
for (unsigned int s = 0; s < num_derivatives; s++)
26585
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
26586
}// end loop over 's'
26587
}// end loop over 'r'
26589
// Delete pointer to array of derivatives on FIAT element
26590
delete [] derivatives;
26592
// Delete pointer to array of combinations of derivatives and transform
26593
for (unsigned int r = 0; r < num_derivatives; r++)
26595
delete [] combinations[r];
26596
}// end loop over 'r'
26597
delete [] combinations;
26598
for (unsigned int r = 0; r < num_derivatives; r++)
26600
delete [] transform[r];
26601
}// end loop over 'r'
26602
delete [] transform;
26608
// Array of basisvalues.
26609
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
26611
// Declare helper variables.
26612
unsigned int rr = 0;
26613
unsigned int ss = 0;
26614
unsigned int tt = 0;
26615
double tmp5 = 0.000000000000000;
26616
double tmp6 = 0.000000000000000;
26617
double tmp7 = 0.000000000000000;
26618
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
26619
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
26620
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
26621
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
26622
double tmp4 = tmp3*tmp3;
26624
// Compute basisvalues.
26625
basisvalues[0] = 1.000000000000000;
26626
basisvalues[1] = tmp0;
26627
for (unsigned int r = 1; r < 2; r++)
26629
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
26630
ss = r*(r + 1)*(r + 2)/6;
26631
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
26632
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
26633
}// end loop over 'r'
26634
for (unsigned int r = 0; r < 2; r++)
26636
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
26637
ss = r*(r + 1)*(r + 2)/6;
26638
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
26639
}// end loop over 'r'
26640
for (unsigned int r = 0; r < 1; r++)
26642
for (unsigned int s = 1; s < 2 - r; s++)
26644
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
26645
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26646
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
26647
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26648
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26649
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26650
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
26651
}// end loop over 's'
26652
}// end loop over 'r'
26653
for (unsigned int r = 0; r < 2; r++)
26655
for (unsigned int s = 0; s < 2 - r; s++)
26657
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
26658
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26659
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
26660
}// end loop over 's'
26661
}// end loop over 'r'
26662
for (unsigned int r = 0; r < 1; r++)
26664
for (unsigned int s = 0; s < 1 - r; s++)
26666
for (unsigned int t = 1; t < 2 - r - s; t++)
26668
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
26669
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26670
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
26671
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26672
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26673
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26674
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
26675
}// end loop over 't'
26676
}// end loop over 's'
26677
}// end loop over 'r'
26678
for (unsigned int r = 0; r < 3; r++)
26680
for (unsigned int s = 0; s < 3 - r; s++)
26682
for (unsigned int t = 0; t < 3 - r - s; t++)
26684
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26685
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
26686
}// end loop over 't'
26687
}// end loop over 's'
26688
}// end loop over 'r'
26690
// Table(s) of coefficients.
26691
static const double coefficients0[10] = \
26692
{-0.057735026918963, 0.000000000000000, 0.070272836892631, -0.024845199749998, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.087287156094397, -0.047513109673320, 0.016798421022632};
26694
// Tables of derivatives of the polynomial base (transpose).
26695
static const double dmats0[10][10] = \
26696
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26697
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26698
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26699
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26700
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26701
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26702
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26703
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26704
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26705
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26707
static const double dmats1[10][10] = \
26708
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26709
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26710
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26711
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26712
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26713
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26714
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26715
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26716
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26717
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26719
static const double dmats2[10][10] = \
26720
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26721
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26722
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26723
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26724
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26725
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26726
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26727
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26728
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26729
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26731
// Compute reference derivatives.
26732
// Declare pointer to array of derivatives on FIAT element.
26733
double *derivatives = new double[num_derivatives];
26734
for (unsigned int r = 0; r < num_derivatives; r++)
26736
derivatives[r] = 0.000000000000000;
26737
}// end loop over 'r'
26739
// Declare derivative matrix (of polynomial basis).
26740
double dmats[10][10] = \
26741
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26742
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26743
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26744
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26745
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26746
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26747
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26748
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
26749
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
26750
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
26752
// Declare (auxiliary) derivative matrix (of polynomial basis).
26753
double dmats_old[10][10] = \
26754
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26755
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26756
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26757
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26758
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26759
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26760
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26761
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
26762
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
26763
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
26765
// Loop possible derivatives.
26766
for (unsigned int r = 0; r < num_derivatives; r++)
26768
// Resetting dmats values to compute next derivative.
26769
for (unsigned int t = 0; t < 10; t++)
26771
for (unsigned int u = 0; u < 10; u++)
26773
dmats[t][u] = 0.000000000000000;
26776
dmats[t][u] = 1.000000000000000;
26779
}// end loop over 'u'
26780
}// end loop over 't'
26782
// Looping derivative order to generate dmats.
26783
for (unsigned int s = 0; s < n; s++)
26785
// Updating dmats_old with new values and resetting dmats.
26786
for (unsigned int t = 0; t < 10; t++)
26788
for (unsigned int u = 0; u < 10; u++)
26790
dmats_old[t][u] = dmats[t][u];
26791
dmats[t][u] = 0.000000000000000;
26792
}// end loop over 'u'
26793
}// end loop over 't'
26795
// Update dmats using an inner product.
26796
if (combinations[r][s] == 0)
26798
for (unsigned int t = 0; t < 10; t++)
26800
for (unsigned int u = 0; u < 10; u++)
26802
for (unsigned int tu = 0; tu < 10; tu++)
26804
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
26805
}// end loop over 'tu'
26806
}// end loop over 'u'
26807
}// end loop over 't'
26810
if (combinations[r][s] == 1)
26812
for (unsigned int t = 0; t < 10; t++)
26814
for (unsigned int u = 0; u < 10; u++)
26816
for (unsigned int tu = 0; tu < 10; tu++)
26818
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
26819
}// end loop over 'tu'
26820
}// end loop over 'u'
26821
}// end loop over 't'
26824
if (combinations[r][s] == 2)
26826
for (unsigned int t = 0; t < 10; t++)
26828
for (unsigned int u = 0; u < 10; u++)
26830
for (unsigned int tu = 0; tu < 10; tu++)
26832
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
26833
}// end loop over 'tu'
26834
}// end loop over 'u'
26835
}// end loop over 't'
26838
}// end loop over 's'
26839
for (unsigned int s = 0; s < 10; s++)
26841
for (unsigned int t = 0; t < 10; t++)
26843
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
26844
}// end loop over 't'
26845
}// end loop over 's'
26846
}// end loop over 'r'
26848
// Transform derivatives back to physical element
26849
for (unsigned int r = 0; r < num_derivatives; r++)
26851
for (unsigned int s = 0; s < num_derivatives; s++)
26853
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
26854
}// end loop over 's'
26855
}// end loop over 'r'
26857
// Delete pointer to array of derivatives on FIAT element
26858
delete [] derivatives;
26860
// Delete pointer to array of combinations of derivatives and transform
26861
for (unsigned int r = 0; r < num_derivatives; r++)
26863
delete [] combinations[r];
26864
}// end loop over 'r'
26865
delete [] combinations;
26866
for (unsigned int r = 0; r < num_derivatives; r++)
26868
delete [] transform[r];
26869
}// end loop over 'r'
26870
delete [] transform;
26876
// Array of basisvalues.
26877
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
26879
// Declare helper variables.
26880
unsigned int rr = 0;
26881
unsigned int ss = 0;
26882
unsigned int tt = 0;
26883
double tmp5 = 0.000000000000000;
26884
double tmp6 = 0.000000000000000;
26885
double tmp7 = 0.000000000000000;
26886
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
26887
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
26888
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
26889
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
26890
double tmp4 = tmp3*tmp3;
26892
// Compute basisvalues.
26893
basisvalues[0] = 1.000000000000000;
26894
basisvalues[1] = tmp0;
26895
for (unsigned int r = 1; r < 2; r++)
26897
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
26898
ss = r*(r + 1)*(r + 2)/6;
26899
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
26900
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
26901
}// end loop over 'r'
26902
for (unsigned int r = 0; r < 2; r++)
26904
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
26905
ss = r*(r + 1)*(r + 2)/6;
26906
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
26907
}// end loop over 'r'
26908
for (unsigned int r = 0; r < 1; r++)
26910
for (unsigned int s = 1; s < 2 - r; s++)
26912
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
26913
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26914
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
26915
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26916
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26917
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
26918
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
26919
}// end loop over 's'
26920
}// end loop over 'r'
26921
for (unsigned int r = 0; r < 2; r++)
26923
for (unsigned int s = 0; s < 2 - r; s++)
26925
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
26926
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
26927
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
26928
}// end loop over 's'
26929
}// end loop over 'r'
26930
for (unsigned int r = 0; r < 1; r++)
26932
for (unsigned int s = 0; s < 1 - r; s++)
26934
for (unsigned int t = 1; t < 2 - r - s; t++)
26936
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
26937
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26938
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
26939
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26940
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26941
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
26942
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
26943
}// end loop over 't'
26944
}// end loop over 's'
26945
}// end loop over 'r'
26946
for (unsigned int r = 0; r < 3; r++)
26948
for (unsigned int s = 0; s < 3 - r; s++)
26950
for (unsigned int t = 0; t < 3 - r - s; t++)
26952
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
26953
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
26954
}// end loop over 't'
26955
}// end loop over 's'
26956
}// end loop over 'r'
26958
// Table(s) of coefficients.
26959
static const double coefficients0[10] = \
26960
{-0.057735026918963, 0.000000000000000, 0.000000000000000, 0.074535599249993, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.100790526135794};
26962
// Tables of derivatives of the polynomial base (transpose).
26963
static const double dmats0[10][10] = \
26964
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26965
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26966
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26967
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26968
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26969
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26970
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26971
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26972
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26973
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26975
static const double dmats1[10][10] = \
26976
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26977
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26978
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26979
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26980
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26981
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26982
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26983
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26984
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26985
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26987
static const double dmats2[10][10] = \
26988
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26989
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26990
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26991
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26992
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26993
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26994
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26995
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26996
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
26997
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
26999
// Compute reference derivatives.
27000
// Declare pointer to array of derivatives on FIAT element.
27001
double *derivatives = new double[num_derivatives];
27002
for (unsigned int r = 0; r < num_derivatives; r++)
27004
derivatives[r] = 0.000000000000000;
27005
}// end loop over 'r'
27007
// Declare derivative matrix (of polynomial basis).
27008
double dmats[10][10] = \
27009
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27010
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27011
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27012
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27013
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27014
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27015
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27016
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27017
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27018
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27020
// Declare (auxiliary) derivative matrix (of polynomial basis).
27021
double dmats_old[10][10] = \
27022
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27023
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27024
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27025
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27026
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27027
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27028
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27029
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27030
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27031
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27033
// Loop possible derivatives.
27034
for (unsigned int r = 0; r < num_derivatives; r++)
27036
// Resetting dmats values to compute next derivative.
27037
for (unsigned int t = 0; t < 10; t++)
27039
for (unsigned int u = 0; u < 10; u++)
27041
dmats[t][u] = 0.000000000000000;
27044
dmats[t][u] = 1.000000000000000;
27047
}// end loop over 'u'
27048
}// end loop over 't'
27050
// Looping derivative order to generate dmats.
27051
for (unsigned int s = 0; s < n; s++)
27053
// Updating dmats_old with new values and resetting dmats.
27054
for (unsigned int t = 0; t < 10; t++)
27056
for (unsigned int u = 0; u < 10; u++)
27058
dmats_old[t][u] = dmats[t][u];
27059
dmats[t][u] = 0.000000000000000;
27060
}// end loop over 'u'
27061
}// end loop over 't'
27063
// Update dmats using an inner product.
27064
if (combinations[r][s] == 0)
27066
for (unsigned int t = 0; t < 10; t++)
27068
for (unsigned int u = 0; u < 10; u++)
27070
for (unsigned int tu = 0; tu < 10; tu++)
27072
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
27073
}// end loop over 'tu'
27074
}// end loop over 'u'
27075
}// end loop over 't'
27078
if (combinations[r][s] == 1)
27080
for (unsigned int t = 0; t < 10; t++)
27082
for (unsigned int u = 0; u < 10; u++)
27084
for (unsigned int tu = 0; tu < 10; tu++)
27086
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
27087
}// end loop over 'tu'
27088
}// end loop over 'u'
27089
}// end loop over 't'
27092
if (combinations[r][s] == 2)
27094
for (unsigned int t = 0; t < 10; t++)
27096
for (unsigned int u = 0; u < 10; u++)
27098
for (unsigned int tu = 0; tu < 10; tu++)
27100
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
27101
}// end loop over 'tu'
27102
}// end loop over 'u'
27103
}// end loop over 't'
27106
}// end loop over 's'
27107
for (unsigned int s = 0; s < 10; s++)
27109
for (unsigned int t = 0; t < 10; t++)
27111
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
27112
}// end loop over 't'
27113
}// end loop over 's'
27114
}// end loop over 'r'
27116
// Transform derivatives back to physical element
27117
for (unsigned int r = 0; r < num_derivatives; r++)
27119
for (unsigned int s = 0; s < num_derivatives; s++)
27121
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
27122
}// end loop over 's'
27123
}// end loop over 'r'
27125
// Delete pointer to array of derivatives on FIAT element
27126
delete [] derivatives;
27128
// Delete pointer to array of combinations of derivatives and transform
27129
for (unsigned int r = 0; r < num_derivatives; r++)
27131
delete [] combinations[r];
27132
}// end loop over 'r'
27133
delete [] combinations;
27134
for (unsigned int r = 0; r < num_derivatives; r++)
27136
delete [] transform[r];
27137
}// end loop over 'r'
27138
delete [] transform;
27144
// Array of basisvalues.
27145
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
27147
// Declare helper variables.
27148
unsigned int rr = 0;
27149
unsigned int ss = 0;
27150
unsigned int tt = 0;
27151
double tmp5 = 0.000000000000000;
27152
double tmp6 = 0.000000000000000;
27153
double tmp7 = 0.000000000000000;
27154
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
27155
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
27156
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
27157
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
27158
double tmp4 = tmp3*tmp3;
27160
// Compute basisvalues.
27161
basisvalues[0] = 1.000000000000000;
27162
basisvalues[1] = tmp0;
27163
for (unsigned int r = 1; r < 2; r++)
27165
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
27166
ss = r*(r + 1)*(r + 2)/6;
27167
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
27168
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
27169
}// end loop over 'r'
27170
for (unsigned int r = 0; r < 2; r++)
27172
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
27173
ss = r*(r + 1)*(r + 2)/6;
27174
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
27175
}// end loop over 'r'
27176
for (unsigned int r = 0; r < 1; r++)
27178
for (unsigned int s = 1; s < 2 - r; s++)
27180
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
27181
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27182
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
27183
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27184
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27185
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27186
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
27187
}// end loop over 's'
27188
}// end loop over 'r'
27189
for (unsigned int r = 0; r < 2; r++)
27191
for (unsigned int s = 0; s < 2 - r; s++)
27193
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
27194
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27195
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
27196
}// end loop over 's'
27197
}// end loop over 'r'
27198
for (unsigned int r = 0; r < 1; r++)
27200
for (unsigned int s = 0; s < 1 - r; s++)
27202
for (unsigned int t = 1; t < 2 - r - s; t++)
27204
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
27205
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
27206
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
27207
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27208
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27209
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27210
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
27211
}// end loop over 't'
27212
}// end loop over 's'
27213
}// end loop over 'r'
27214
for (unsigned int r = 0; r < 3; r++)
27216
for (unsigned int s = 0; s < 3 - r; s++)
27218
for (unsigned int t = 0; t < 3 - r - s; t++)
27220
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
27221
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
27222
}// end loop over 't'
27223
}// end loop over 's'
27224
}// end loop over 'r'
27226
// Table(s) of coefficients.
27227
static const double coefficients0[10] = \
27228
{0.230940107675850, 0.000000000000000, 0.140545673785261, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.118782774183300, -0.067193684090529};
27230
// Tables of derivatives of the polynomial base (transpose).
27231
static const double dmats0[10][10] = \
27232
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27233
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27234
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27235
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27236
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27237
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27238
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27239
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27240
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27241
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27243
static const double dmats1[10][10] = \
27244
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27245
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27246
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27247
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27248
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27249
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27250
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27251
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27252
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27253
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27255
static const double dmats2[10][10] = \
27256
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27257
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27258
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27259
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27260
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27261
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27262
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27263
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27264
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27265
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27267
// Compute reference derivatives.
27268
// Declare pointer to array of derivatives on FIAT element.
27269
double *derivatives = new double[num_derivatives];
27270
for (unsigned int r = 0; r < num_derivatives; r++)
27272
derivatives[r] = 0.000000000000000;
27273
}// end loop over 'r'
27275
// Declare derivative matrix (of polynomial basis).
27276
double dmats[10][10] = \
27277
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27278
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27279
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27280
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27281
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27282
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27283
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27284
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27285
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27286
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27288
// Declare (auxiliary) derivative matrix (of polynomial basis).
27289
double dmats_old[10][10] = \
27290
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27291
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27292
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27293
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27294
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27295
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27296
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27297
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27298
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27299
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27301
// Loop possible derivatives.
27302
for (unsigned int r = 0; r < num_derivatives; r++)
27304
// Resetting dmats values to compute next derivative.
27305
for (unsigned int t = 0; t < 10; t++)
27307
for (unsigned int u = 0; u < 10; u++)
27309
dmats[t][u] = 0.000000000000000;
27312
dmats[t][u] = 1.000000000000000;
27315
}// end loop over 'u'
27316
}// end loop over 't'
27318
// Looping derivative order to generate dmats.
27319
for (unsigned int s = 0; s < n; s++)
27321
// Updating dmats_old with new values and resetting dmats.
27322
for (unsigned int t = 0; t < 10; t++)
27324
for (unsigned int u = 0; u < 10; u++)
27326
dmats_old[t][u] = dmats[t][u];
27327
dmats[t][u] = 0.000000000000000;
27328
}// end loop over 'u'
27329
}// end loop over 't'
27331
// Update dmats using an inner product.
27332
if (combinations[r][s] == 0)
27334
for (unsigned int t = 0; t < 10; t++)
27336
for (unsigned int u = 0; u < 10; u++)
27338
for (unsigned int tu = 0; tu < 10; tu++)
27340
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
27341
}// end loop over 'tu'
27342
}// end loop over 'u'
27343
}// end loop over 't'
27346
if (combinations[r][s] == 1)
27348
for (unsigned int t = 0; t < 10; t++)
27350
for (unsigned int u = 0; u < 10; u++)
27352
for (unsigned int tu = 0; tu < 10; tu++)
27354
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
27355
}// end loop over 'tu'
27356
}// end loop over 'u'
27357
}// end loop over 't'
27360
if (combinations[r][s] == 2)
27362
for (unsigned int t = 0; t < 10; t++)
27364
for (unsigned int u = 0; u < 10; u++)
27366
for (unsigned int tu = 0; tu < 10; tu++)
27368
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
27369
}// end loop over 'tu'
27370
}// end loop over 'u'
27371
}// end loop over 't'
27374
}// end loop over 's'
27375
for (unsigned int s = 0; s < 10; s++)
27377
for (unsigned int t = 0; t < 10; t++)
27379
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
27380
}// end loop over 't'
27381
}// end loop over 's'
27382
}// end loop over 'r'
27384
// Transform derivatives back to physical element
27385
for (unsigned int r = 0; r < num_derivatives; r++)
27387
for (unsigned int s = 0; s < num_derivatives; s++)
27389
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
27390
}// end loop over 's'
27391
}// end loop over 'r'
27393
// Delete pointer to array of derivatives on FIAT element
27394
delete [] derivatives;
27396
// Delete pointer to array of combinations of derivatives and transform
27397
for (unsigned int r = 0; r < num_derivatives; r++)
27399
delete [] combinations[r];
27400
}// end loop over 'r'
27401
delete [] combinations;
27402
for (unsigned int r = 0; r < num_derivatives; r++)
27404
delete [] transform[r];
27405
}// end loop over 'r'
27406
delete [] transform;
27412
// Array of basisvalues.
27413
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
27415
// Declare helper variables.
27416
unsigned int rr = 0;
27417
unsigned int ss = 0;
27418
unsigned int tt = 0;
27419
double tmp5 = 0.000000000000000;
27420
double tmp6 = 0.000000000000000;
27421
double tmp7 = 0.000000000000000;
27422
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
27423
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
27424
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
27425
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
27426
double tmp4 = tmp3*tmp3;
27428
// Compute basisvalues.
27429
basisvalues[0] = 1.000000000000000;
27430
basisvalues[1] = tmp0;
27431
for (unsigned int r = 1; r < 2; r++)
27433
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
27434
ss = r*(r + 1)*(r + 2)/6;
27435
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
27436
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
27437
}// end loop over 'r'
27438
for (unsigned int r = 0; r < 2; r++)
27440
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
27441
ss = r*(r + 1)*(r + 2)/6;
27442
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
27443
}// end loop over 'r'
27444
for (unsigned int r = 0; r < 1; r++)
27446
for (unsigned int s = 1; s < 2 - r; s++)
27448
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
27449
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27450
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
27451
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27452
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27453
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27454
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
27455
}// end loop over 's'
27456
}// end loop over 'r'
27457
for (unsigned int r = 0; r < 2; r++)
27459
for (unsigned int s = 0; s < 2 - r; s++)
27461
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
27462
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27463
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
27464
}// end loop over 's'
27465
}// end loop over 'r'
27466
for (unsigned int r = 0; r < 1; r++)
27468
for (unsigned int s = 0; s < 1 - r; s++)
27470
for (unsigned int t = 1; t < 2 - r - s; t++)
27472
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
27473
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
27474
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
27475
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27476
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27477
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27478
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
27479
}// end loop over 't'
27480
}// end loop over 's'
27481
}// end loop over 'r'
27482
for (unsigned int r = 0; r < 3; r++)
27484
for (unsigned int s = 0; s < 3 - r; s++)
27486
for (unsigned int t = 0; t < 3 - r - s; t++)
27488
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
27489
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
27490
}// end loop over 't'
27491
}// end loop over 's'
27492
}// end loop over 'r'
27494
// Table(s) of coefficients.
27495
static const double coefficients0[10] = \
27496
{0.230940107675850, 0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, 0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
27498
// Tables of derivatives of the polynomial base (transpose).
27499
static const double dmats0[10][10] = \
27500
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27501
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27502
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27503
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27504
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27505
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27506
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27507
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27508
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27509
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27511
static const double dmats1[10][10] = \
27512
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27513
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27514
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27515
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27516
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27517
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27518
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27519
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27520
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27521
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27523
static const double dmats2[10][10] = \
27524
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27525
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27526
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27527
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27528
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27529
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27530
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27531
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27532
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27533
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27535
// Compute reference derivatives.
27536
// Declare pointer to array of derivatives on FIAT element.
27537
double *derivatives = new double[num_derivatives];
27538
for (unsigned int r = 0; r < num_derivatives; r++)
27540
derivatives[r] = 0.000000000000000;
27541
}// end loop over 'r'
27543
// Declare derivative matrix (of polynomial basis).
27544
double dmats[10][10] = \
27545
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27546
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27547
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27548
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27549
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27550
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27551
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27552
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27553
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27554
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27556
// Declare (auxiliary) derivative matrix (of polynomial basis).
27557
double dmats_old[10][10] = \
27558
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27559
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27560
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27561
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27562
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27563
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27564
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27565
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27566
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27567
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27569
// Loop possible derivatives.
27570
for (unsigned int r = 0; r < num_derivatives; r++)
27572
// Resetting dmats values to compute next derivative.
27573
for (unsigned int t = 0; t < 10; t++)
27575
for (unsigned int u = 0; u < 10; u++)
27577
dmats[t][u] = 0.000000000000000;
27580
dmats[t][u] = 1.000000000000000;
27583
}// end loop over 'u'
27584
}// end loop over 't'
27586
// Looping derivative order to generate dmats.
27587
for (unsigned int s = 0; s < n; s++)
27589
// Updating dmats_old with new values and resetting dmats.
27590
for (unsigned int t = 0; t < 10; t++)
27592
for (unsigned int u = 0; u < 10; u++)
27594
dmats_old[t][u] = dmats[t][u];
27595
dmats[t][u] = 0.000000000000000;
27596
}// end loop over 'u'
27597
}// end loop over 't'
27599
// Update dmats using an inner product.
27600
if (combinations[r][s] == 0)
27602
for (unsigned int t = 0; t < 10; t++)
27604
for (unsigned int u = 0; u < 10; u++)
27606
for (unsigned int tu = 0; tu < 10; tu++)
27608
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
27609
}// end loop over 'tu'
27610
}// end loop over 'u'
27611
}// end loop over 't'
27614
if (combinations[r][s] == 1)
27616
for (unsigned int t = 0; t < 10; t++)
27618
for (unsigned int u = 0; u < 10; u++)
27620
for (unsigned int tu = 0; tu < 10; tu++)
27622
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
27623
}// end loop over 'tu'
27624
}// end loop over 'u'
27625
}// end loop over 't'
27628
if (combinations[r][s] == 2)
27630
for (unsigned int t = 0; t < 10; t++)
27632
for (unsigned int u = 0; u < 10; u++)
27634
for (unsigned int tu = 0; tu < 10; tu++)
27636
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
27637
}// end loop over 'tu'
27638
}// end loop over 'u'
27639
}// end loop over 't'
27642
}// end loop over 's'
27643
for (unsigned int s = 0; s < 10; s++)
27645
for (unsigned int t = 0; t < 10; t++)
27647
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
27648
}// end loop over 't'
27649
}// end loop over 's'
27650
}// end loop over 'r'
27652
// Transform derivatives back to physical element
27653
for (unsigned int r = 0; r < num_derivatives; r++)
27655
for (unsigned int s = 0; s < num_derivatives; s++)
27657
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
27658
}// end loop over 's'
27659
}// end loop over 'r'
27661
// Delete pointer to array of derivatives on FIAT element
27662
delete [] derivatives;
27664
// Delete pointer to array of combinations of derivatives and transform
27665
for (unsigned int r = 0; r < num_derivatives; r++)
27667
delete [] combinations[r];
27668
}// end loop over 'r'
27669
delete [] combinations;
27670
for (unsigned int r = 0; r < num_derivatives; r++)
27672
delete [] transform[r];
27673
}// end loop over 'r'
27674
delete [] transform;
27680
// Array of basisvalues.
27681
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
27683
// Declare helper variables.
27684
unsigned int rr = 0;
27685
unsigned int ss = 0;
27686
unsigned int tt = 0;
27687
double tmp5 = 0.000000000000000;
27688
double tmp6 = 0.000000000000000;
27689
double tmp7 = 0.000000000000000;
27690
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
27691
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
27692
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
27693
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
27694
double tmp4 = tmp3*tmp3;
27696
// Compute basisvalues.
27697
basisvalues[0] = 1.000000000000000;
27698
basisvalues[1] = tmp0;
27699
for (unsigned int r = 1; r < 2; r++)
27701
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
27702
ss = r*(r + 1)*(r + 2)/6;
27703
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
27704
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
27705
}// end loop over 'r'
27706
for (unsigned int r = 0; r < 2; r++)
27708
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
27709
ss = r*(r + 1)*(r + 2)/6;
27710
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
27711
}// end loop over 'r'
27712
for (unsigned int r = 0; r < 1; r++)
27714
for (unsigned int s = 1; s < 2 - r; s++)
27716
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
27717
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27718
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
27719
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27720
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27721
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27722
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
27723
}// end loop over 's'
27724
}// end loop over 'r'
27725
for (unsigned int r = 0; r < 2; r++)
27727
for (unsigned int s = 0; s < 2 - r; s++)
27729
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
27730
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27731
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
27732
}// end loop over 's'
27733
}// end loop over 'r'
27734
for (unsigned int r = 0; r < 1; r++)
27736
for (unsigned int s = 0; s < 1 - r; s++)
27738
for (unsigned int t = 1; t < 2 - r - s; t++)
27740
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
27741
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
27742
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
27743
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27744
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27745
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
27746
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
27747
}// end loop over 't'
27748
}// end loop over 's'
27749
}// end loop over 'r'
27750
for (unsigned int r = 0; r < 3; r++)
27752
for (unsigned int s = 0; s < 3 - r; s++)
27754
for (unsigned int t = 0; t < 3 - r - s; t++)
27756
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
27757
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
27758
}// end loop over 't'
27759
}// end loop over 's'
27760
}// end loop over 'r'
27762
// Table(s) of coefficients.
27763
static const double coefficients0[10] = \
27764
{0.230940107675850, 0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, 0.100790526135794, -0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
27766
// Tables of derivatives of the polynomial base (transpose).
27767
static const double dmats0[10][10] = \
27768
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27769
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27770
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27771
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27772
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27773
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27774
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27775
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27776
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27777
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27779
static const double dmats1[10][10] = \
27780
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27781
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27782
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27783
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27784
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27785
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27786
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27787
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27788
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27789
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27791
static const double dmats2[10][10] = \
27792
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27793
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27794
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27795
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27796
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27797
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27798
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27799
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27800
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27801
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
27803
// Compute reference derivatives.
27804
// Declare pointer to array of derivatives on FIAT element.
27805
double *derivatives = new double[num_derivatives];
27806
for (unsigned int r = 0; r < num_derivatives; r++)
27808
derivatives[r] = 0.000000000000000;
27809
}// end loop over 'r'
27811
// Declare derivative matrix (of polynomial basis).
27812
double dmats[10][10] = \
27813
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27814
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27815
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27816
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27817
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27818
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27819
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27820
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27821
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27822
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27824
// Declare (auxiliary) derivative matrix (of polynomial basis).
27825
double dmats_old[10][10] = \
27826
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27827
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27828
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27829
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27830
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27831
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27832
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
27833
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
27834
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
27835
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
27837
// Loop possible derivatives.
27838
for (unsigned int r = 0; r < num_derivatives; r++)
27840
// Resetting dmats values to compute next derivative.
27841
for (unsigned int t = 0; t < 10; t++)
27843
for (unsigned int u = 0; u < 10; u++)
27845
dmats[t][u] = 0.000000000000000;
27848
dmats[t][u] = 1.000000000000000;
27851
}// end loop over 'u'
27852
}// end loop over 't'
27854
// Looping derivative order to generate dmats.
27855
for (unsigned int s = 0; s < n; s++)
27857
// Updating dmats_old with new values and resetting dmats.
27858
for (unsigned int t = 0; t < 10; t++)
27860
for (unsigned int u = 0; u < 10; u++)
27862
dmats_old[t][u] = dmats[t][u];
27863
dmats[t][u] = 0.000000000000000;
27864
}// end loop over 'u'
27865
}// end loop over 't'
27867
// Update dmats using an inner product.
27868
if (combinations[r][s] == 0)
27870
for (unsigned int t = 0; t < 10; t++)
27872
for (unsigned int u = 0; u < 10; u++)
27874
for (unsigned int tu = 0; tu < 10; tu++)
27876
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
27877
}// end loop over 'tu'
27878
}// end loop over 'u'
27879
}// end loop over 't'
27882
if (combinations[r][s] == 1)
27884
for (unsigned int t = 0; t < 10; t++)
27886
for (unsigned int u = 0; u < 10; u++)
27888
for (unsigned int tu = 0; tu < 10; tu++)
27890
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
27891
}// end loop over 'tu'
27892
}// end loop over 'u'
27893
}// end loop over 't'
27896
if (combinations[r][s] == 2)
27898
for (unsigned int t = 0; t < 10; t++)
27900
for (unsigned int u = 0; u < 10; u++)
27902
for (unsigned int tu = 0; tu < 10; tu++)
27904
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
27905
}// end loop over 'tu'
27906
}// end loop over 'u'
27907
}// end loop over 't'
27910
}// end loop over 's'
27911
for (unsigned int s = 0; s < 10; s++)
27913
for (unsigned int t = 0; t < 10; t++)
27915
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
27916
}// end loop over 't'
27917
}// end loop over 's'
27918
}// end loop over 'r'
27920
// Transform derivatives back to physical element
27921
for (unsigned int r = 0; r < num_derivatives; r++)
27923
for (unsigned int s = 0; s < num_derivatives; s++)
27925
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
27926
}// end loop over 's'
27927
}// end loop over 'r'
27929
// Delete pointer to array of derivatives on FIAT element
27930
delete [] derivatives;
27932
// Delete pointer to array of combinations of derivatives and transform
27933
for (unsigned int r = 0; r < num_derivatives; r++)
27935
delete [] combinations[r];
27936
}// end loop over 'r'
27937
delete [] combinations;
27938
for (unsigned int r = 0; r < num_derivatives; r++)
27940
delete [] transform[r];
27941
}// end loop over 'r'
27942
delete [] transform;
27948
// Array of basisvalues.
27949
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
27951
// Declare helper variables.
27952
unsigned int rr = 0;
27953
unsigned int ss = 0;
27954
unsigned int tt = 0;
27955
double tmp5 = 0.000000000000000;
27956
double tmp6 = 0.000000000000000;
27957
double tmp7 = 0.000000000000000;
27958
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
27959
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
27960
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
27961
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
27962
double tmp4 = tmp3*tmp3;
27964
// Compute basisvalues.
27965
basisvalues[0] = 1.000000000000000;
27966
basisvalues[1] = tmp0;
27967
for (unsigned int r = 1; r < 2; r++)
27969
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
27970
ss = r*(r + 1)*(r + 2)/6;
27971
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
27972
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
27973
}// end loop over 'r'
27974
for (unsigned int r = 0; r < 2; r++)
27976
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
27977
ss = r*(r + 1)*(r + 2)/6;
27978
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
27979
}// end loop over 'r'
27980
for (unsigned int r = 0; r < 1; r++)
27982
for (unsigned int s = 1; s < 2 - r; s++)
27984
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
27985
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27986
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
27987
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27988
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27989
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
27990
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
27991
}// end loop over 's'
27992
}// end loop over 'r'
27993
for (unsigned int r = 0; r < 2; r++)
27995
for (unsigned int s = 0; s < 2 - r; s++)
27997
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
27998
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
27999
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
28000
}// end loop over 's'
28001
}// end loop over 'r'
28002
for (unsigned int r = 0; r < 1; r++)
28004
for (unsigned int s = 0; s < 1 - r; s++)
28006
for (unsigned int t = 1; t < 2 - r - s; t++)
28008
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
28009
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28010
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
28011
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28012
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28013
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28014
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
28015
}// end loop over 't'
28016
}// end loop over 's'
28017
}// end loop over 'r'
28018
for (unsigned int r = 0; r < 3; r++)
28020
for (unsigned int s = 0; s < 3 - r; s++)
28022
for (unsigned int t = 0; t < 3 - r - s; t++)
28024
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28025
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
28026
}// end loop over 't'
28027
}// end loop over 's'
28028
}// end loop over 'r'
28030
// Table(s) of coefficients.
28031
static const double coefficients0[10] = \
28032
{0.230940107675850, -0.121716123890037, -0.070272836892631, 0.099380798999991, 0.000000000000000, 0.000000000000000, -0.102868899974728, 0.000000000000000, -0.059391387091650, -0.067193684090529};
28034
// Tables of derivatives of the polynomial base (transpose).
28035
static const double dmats0[10][10] = \
28036
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28037
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28038
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28039
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28040
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28041
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28042
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28043
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28044
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28045
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28047
static const double dmats1[10][10] = \
28048
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28049
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28050
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28051
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28052
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28053
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28054
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28055
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28056
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28057
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28059
static const double dmats2[10][10] = \
28060
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28061
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28062
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28063
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28064
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28065
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28066
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28067
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28068
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28069
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28071
// Compute reference derivatives.
28072
// Declare pointer to array of derivatives on FIAT element.
28073
double *derivatives = new double[num_derivatives];
28074
for (unsigned int r = 0; r < num_derivatives; r++)
28076
derivatives[r] = 0.000000000000000;
28077
}// end loop over 'r'
28079
// Declare derivative matrix (of polynomial basis).
28080
double dmats[10][10] = \
28081
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28082
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28083
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28084
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28085
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28086
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28087
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28088
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28089
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28090
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28092
// Declare (auxiliary) derivative matrix (of polynomial basis).
28093
double dmats_old[10][10] = \
28094
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28095
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28096
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28097
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28098
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28099
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28100
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28101
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28102
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28103
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28105
// Loop possible derivatives.
28106
for (unsigned int r = 0; r < num_derivatives; r++)
28108
// Resetting dmats values to compute next derivative.
28109
for (unsigned int t = 0; t < 10; t++)
28111
for (unsigned int u = 0; u < 10; u++)
28113
dmats[t][u] = 0.000000000000000;
28116
dmats[t][u] = 1.000000000000000;
28119
}// end loop over 'u'
28120
}// end loop over 't'
28122
// Looping derivative order to generate dmats.
28123
for (unsigned int s = 0; s < n; s++)
28125
// Updating dmats_old with new values and resetting dmats.
28126
for (unsigned int t = 0; t < 10; t++)
28128
for (unsigned int u = 0; u < 10; u++)
28130
dmats_old[t][u] = dmats[t][u];
28131
dmats[t][u] = 0.000000000000000;
28132
}// end loop over 'u'
28133
}// end loop over 't'
28135
// Update dmats using an inner product.
28136
if (combinations[r][s] == 0)
28138
for (unsigned int t = 0; t < 10; t++)
28140
for (unsigned int u = 0; u < 10; u++)
28142
for (unsigned int tu = 0; tu < 10; tu++)
28144
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
28145
}// end loop over 'tu'
28146
}// end loop over 'u'
28147
}// end loop over 't'
28150
if (combinations[r][s] == 1)
28152
for (unsigned int t = 0; t < 10; t++)
28154
for (unsigned int u = 0; u < 10; u++)
28156
for (unsigned int tu = 0; tu < 10; tu++)
28158
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
28159
}// end loop over 'tu'
28160
}// end loop over 'u'
28161
}// end loop over 't'
28164
if (combinations[r][s] == 2)
28166
for (unsigned int t = 0; t < 10; t++)
28168
for (unsigned int u = 0; u < 10; u++)
28170
for (unsigned int tu = 0; tu < 10; tu++)
28172
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
28173
}// end loop over 'tu'
28174
}// end loop over 'u'
28175
}// end loop over 't'
28178
}// end loop over 's'
28179
for (unsigned int s = 0; s < 10; s++)
28181
for (unsigned int t = 0; t < 10; t++)
28183
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
28184
}// end loop over 't'
28185
}// end loop over 's'
28186
}// end loop over 'r'
28188
// Transform derivatives back to physical element
28189
for (unsigned int r = 0; r < num_derivatives; r++)
28191
for (unsigned int s = 0; s < num_derivatives; s++)
28193
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
28194
}// end loop over 's'
28195
}// end loop over 'r'
28197
// Delete pointer to array of derivatives on FIAT element
28198
delete [] derivatives;
28200
// Delete pointer to array of combinations of derivatives and transform
28201
for (unsigned int r = 0; r < num_derivatives; r++)
28203
delete [] combinations[r];
28204
}// end loop over 'r'
28205
delete [] combinations;
28206
for (unsigned int r = 0; r < num_derivatives; r++)
28208
delete [] transform[r];
28209
}// end loop over 'r'
28210
delete [] transform;
28216
// Array of basisvalues.
28217
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
28219
// Declare helper variables.
28220
unsigned int rr = 0;
28221
unsigned int ss = 0;
28222
unsigned int tt = 0;
28223
double tmp5 = 0.000000000000000;
28224
double tmp6 = 0.000000000000000;
28225
double tmp7 = 0.000000000000000;
28226
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
28227
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
28228
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
28229
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
28230
double tmp4 = tmp3*tmp3;
28232
// Compute basisvalues.
28233
basisvalues[0] = 1.000000000000000;
28234
basisvalues[1] = tmp0;
28235
for (unsigned int r = 1; r < 2; r++)
28237
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
28238
ss = r*(r + 1)*(r + 2)/6;
28239
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
28240
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
28241
}// end loop over 'r'
28242
for (unsigned int r = 0; r < 2; r++)
28244
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
28245
ss = r*(r + 1)*(r + 2)/6;
28246
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
28247
}// end loop over 'r'
28248
for (unsigned int r = 0; r < 1; r++)
28250
for (unsigned int s = 1; s < 2 - r; s++)
28252
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
28253
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
28254
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
28255
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
28256
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
28257
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
28258
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
28259
}// end loop over 's'
28260
}// end loop over 'r'
28261
for (unsigned int r = 0; r < 2; r++)
28263
for (unsigned int s = 0; s < 2 - r; s++)
28265
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
28266
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
28267
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
28268
}// end loop over 's'
28269
}// end loop over 'r'
28270
for (unsigned int r = 0; r < 1; r++)
28272
for (unsigned int s = 0; s < 1 - r; s++)
28274
for (unsigned int t = 1; t < 2 - r - s; t++)
28276
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
28277
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28278
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
28279
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28280
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28281
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28282
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
28283
}// end loop over 't'
28284
}// end loop over 's'
28285
}// end loop over 'r'
28286
for (unsigned int r = 0; r < 3; r++)
28288
for (unsigned int s = 0; s < 3 - r; s++)
28290
for (unsigned int t = 0; t < 3 - r - s; t++)
28292
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28293
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
28294
}// end loop over 't'
28295
}// end loop over 's'
28296
}// end loop over 'r'
28298
// Table(s) of coefficients.
28299
static const double coefficients0[10] = \
28300
{0.230940107675850, -0.121716123890037, 0.070272836892631, -0.099380798999991, 0.000000000000000, -0.100790526135794, 0.020573779994946, -0.087287156094397, -0.011878277418330, 0.016798421022632};
28302
// Tables of derivatives of the polynomial base (transpose).
28303
static const double dmats0[10][10] = \
28304
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28305
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28306
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28307
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28308
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28309
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28310
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28311
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28312
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28313
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28315
static const double dmats1[10][10] = \
28316
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28317
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28318
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28319
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28320
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28321
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28322
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28323
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28324
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28325
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28327
static const double dmats2[10][10] = \
28328
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28329
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28330
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28331
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28332
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28333
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28334
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28335
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28336
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28337
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28339
// Compute reference derivatives.
28340
// Declare pointer to array of derivatives on FIAT element.
28341
double *derivatives = new double[num_derivatives];
28342
for (unsigned int r = 0; r < num_derivatives; r++)
28344
derivatives[r] = 0.000000000000000;
28345
}// end loop over 'r'
28347
// Declare derivative matrix (of polynomial basis).
28348
double dmats[10][10] = \
28349
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28350
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28351
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28352
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28353
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28354
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28355
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28356
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28357
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28358
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28360
// Declare (auxiliary) derivative matrix (of polynomial basis).
28361
double dmats_old[10][10] = \
28362
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28363
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28364
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28365
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28366
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28367
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28368
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28369
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28370
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28371
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28373
// Loop possible derivatives.
28374
for (unsigned int r = 0; r < num_derivatives; r++)
28376
// Resetting dmats values to compute next derivative.
28377
for (unsigned int t = 0; t < 10; t++)
28379
for (unsigned int u = 0; u < 10; u++)
28381
dmats[t][u] = 0.000000000000000;
28384
dmats[t][u] = 1.000000000000000;
28387
}// end loop over 'u'
28388
}// end loop over 't'
28390
// Looping derivative order to generate dmats.
28391
for (unsigned int s = 0; s < n; s++)
28393
// Updating dmats_old with new values and resetting dmats.
28394
for (unsigned int t = 0; t < 10; t++)
28396
for (unsigned int u = 0; u < 10; u++)
28398
dmats_old[t][u] = dmats[t][u];
28399
dmats[t][u] = 0.000000000000000;
28400
}// end loop over 'u'
28401
}// end loop over 't'
28403
// Update dmats using an inner product.
28404
if (combinations[r][s] == 0)
28406
for (unsigned int t = 0; t < 10; t++)
28408
for (unsigned int u = 0; u < 10; u++)
28410
for (unsigned int tu = 0; tu < 10; tu++)
28412
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
28413
}// end loop over 'tu'
28414
}// end loop over 'u'
28415
}// end loop over 't'
28418
if (combinations[r][s] == 1)
28420
for (unsigned int t = 0; t < 10; t++)
28422
for (unsigned int u = 0; u < 10; u++)
28424
for (unsigned int tu = 0; tu < 10; tu++)
28426
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
28427
}// end loop over 'tu'
28428
}// end loop over 'u'
28429
}// end loop over 't'
28432
if (combinations[r][s] == 2)
28434
for (unsigned int t = 0; t < 10; t++)
28436
for (unsigned int u = 0; u < 10; u++)
28438
for (unsigned int tu = 0; tu < 10; tu++)
28440
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
28441
}// end loop over 'tu'
28442
}// end loop over 'u'
28443
}// end loop over 't'
28446
}// end loop over 's'
28447
for (unsigned int s = 0; s < 10; s++)
28449
for (unsigned int t = 0; t < 10; t++)
28451
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
28452
}// end loop over 't'
28453
}// end loop over 's'
28454
}// end loop over 'r'
28456
// Transform derivatives back to physical element
28457
for (unsigned int r = 0; r < num_derivatives; r++)
28459
for (unsigned int s = 0; s < num_derivatives; s++)
28461
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
28462
}// end loop over 's'
28463
}// end loop over 'r'
28465
// Delete pointer to array of derivatives on FIAT element
28466
delete [] derivatives;
28468
// Delete pointer to array of combinations of derivatives and transform
28469
for (unsigned int r = 0; r < num_derivatives; r++)
28471
delete [] combinations[r];
28472
}// end loop over 'r'
28473
delete [] combinations;
28474
for (unsigned int r = 0; r < num_derivatives; r++)
28476
delete [] transform[r];
28477
}// end loop over 'r'
28478
delete [] transform;
28484
// Array of basisvalues.
28485
double basisvalues[10] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
28487
// Declare helper variables.
28488
unsigned int rr = 0;
28489
unsigned int ss = 0;
28490
unsigned int tt = 0;
28491
double tmp5 = 0.000000000000000;
28492
double tmp6 = 0.000000000000000;
28493
double tmp7 = 0.000000000000000;
28494
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
28495
double tmp1 = 0.250000000000000*(Y + Z)*(Y + Z);
28496
double tmp2 = 0.500000000000000*(1.000000000000000 + Z + 2.000000000000000*Y);
28497
double tmp3 = 0.500000000000000*(1.000000000000000 - Z);
28498
double tmp4 = tmp3*tmp3;
28500
// Compute basisvalues.
28501
basisvalues[0] = 1.000000000000000;
28502
basisvalues[1] = tmp0;
28503
for (unsigned int r = 1; r < 2; r++)
28505
rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
28506
ss = r*(r + 1)*(r + 2)/6;
28507
tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
28508
basisvalues[rr] = (basisvalues[ss]*tmp0*(1.000000000000000 + 2.000000000000000*r)/(1.000000000000000 + r) - basisvalues[tt]*tmp1*r/(1.000000000000000 + r));
28509
}// end loop over 'r'
28510
for (unsigned int r = 0; r < 2; r++)
28512
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
28513
ss = r*(r + 1)*(r + 2)/6;
28514
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
28515
}// end loop over 'r'
28516
for (unsigned int r = 0; r < 1; r++)
28518
for (unsigned int s = 1; s < 2 - r; s++)
28520
rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
28521
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
28522
tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
28523
tmp5 = (2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
28524
tmp6 = (1.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*r)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)/(2.000000000000000*(1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
28525
tmp7 = (1.000000000000000 + s + 2.000000000000000*r)*(3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*s/((1.000000000000000 + 2.000000000000000*r + 2.000000000000000*s)*(1.000000000000000 + s)*(2.000000000000000 + s + 2.000000000000000*r));
28526
basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
28527
}// end loop over 's'
28528
}// end loop over 'r'
28529
for (unsigned int r = 0; r < 2; r++)
28531
for (unsigned int s = 0; s < 2 - r; s++)
28533
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
28534
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
28535
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
28536
}// end loop over 's'
28537
}// end loop over 'r'
28538
for (unsigned int r = 0; r < 1; r++)
28540
for (unsigned int s = 0; s < 1 - r; s++)
28542
for (unsigned int t = 1; t < 2 - r - s; t++)
28544
rr = (r + s + t + 1)*(r + s + t + 1 + 1)*(r + s + t + 1 + 2)/6 + (s + t + 1)*(s + t + 1 + 1)/2 + t + 1;
28545
ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28546
tt = (r + s + t - 1)*(r + s + t - 1 + 1)*(r + s + t - 1 + 2)/6 + (s + t - 1)*(s + t - 1 + 1)/2 + t - 1;
28547
tmp5 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)/(2.000000000000000*(1.000000000000000 + t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28548
tmp6 = (3.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(4.000000000000000 + 4.000000000000000*r*r + 4.000000000000000*s*s + 8.000000000000000*r*s + 8.000000000000000*r + 8.000000000000000*s)/(2.000000000000000*(1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28549
tmp7 = (2.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s)*(4.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*t/((1.000000000000000 + t)*(2.000000000000000 + 2.000000000000000*r + 2.000000000000000*s + 2.000000000000000*t)*(3.000000000000000 + t + 2.000000000000000*r + 2.000000000000000*s));
28550
basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
28551
}// end loop over 't'
28552
}// end loop over 's'
28553
}// end loop over 'r'
28554
for (unsigned int r = 0; r < 3; r++)
28556
for (unsigned int s = 0; s < 3 - r; s++)
28558
for (unsigned int t = 0; t < 3 - r - s; t++)
28560
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28561
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
28562
}// end loop over 't'
28563
}// end loop over 's'
28564
}// end loop over 'r'
28566
// Table(s) of coefficients.
28567
static const double coefficients0[10] = \
28568
{0.230940107675850, 0.000000000000000, -0.140545673785261, -0.099380798999991, -0.130120009726471, 0.000000000000000, 0.000000000000000, 0.029095718698132, 0.023756554836660, 0.016798421022632};
28570
// Tables of derivatives of the polynomial base (transpose).
28571
static const double dmats0[10][10] = \
28572
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28573
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28574
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28575
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28576
{0.000000000000000, 11.224972160321824, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28577
{4.582575694955839, 0.000000000000000, 8.366600265340754, -1.183215956619923, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28578
{3.741657386773944, 0.000000000000000, 0.000000000000000, 8.694826047713663, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28579
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28580
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28581
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28583
static const double dmats1[10][10] = \
28584
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28585
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28586
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28587
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28588
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28589
{2.291287847477921, 7.245688373094720, 4.183300132670378, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28590
{1.870828693386972, 0.000000000000000, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28591
{-2.645751311064595, 0.000000000000000, 9.660917830792959, 0.683130051063973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28592
{3.240370349203932, 0.000000000000000, 0.000000000000000, 7.529940238806679, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28593
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28595
static const double dmats2[10][10] = \
28596
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28597
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28598
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28599
{5.163977794943224, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28600
{2.958039891549810, 5.612486080160912, -1.080123449734643, -0.763762615825973, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28601
{2.291287847477920, 1.449137674618944, 4.183300132670377, -0.591607978309962, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28602
{1.870828693386973, 7.099295739719540, 0.000000000000000, 4.347413023856832, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28603
{1.322875655532295, 0.000000000000000, 3.864367132317183, -0.341565025531987, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28604
{1.080123449734643, 0.000000000000000, 7.099295739719538, 2.509980079602226, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28605
{-3.818813079129869, 0.000000000000000, 0.000000000000000, 8.874119674649425, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28607
// Compute reference derivatives.
28608
// Declare pointer to array of derivatives on FIAT element.
28609
double *derivatives = new double[num_derivatives];
28610
for (unsigned int r = 0; r < num_derivatives; r++)
28612
derivatives[r] = 0.000000000000000;
28613
}// end loop over 'r'
28615
// Declare derivative matrix (of polynomial basis).
28616
double dmats[10][10] = \
28617
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28618
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28619
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28620
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28621
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28622
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28623
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28624
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28625
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28626
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28628
// Declare (auxiliary) derivative matrix (of polynomial basis).
28629
double dmats_old[10][10] = \
28630
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28631
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28632
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28633
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28634
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28635
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28636
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28637
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28638
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28639
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28641
// Loop possible derivatives.
28642
for (unsigned int r = 0; r < num_derivatives; r++)
28644
// Resetting dmats values to compute next derivative.
28645
for (unsigned int t = 0; t < 10; t++)
28647
for (unsigned int u = 0; u < 10; u++)
28649
dmats[t][u] = 0.000000000000000;
28652
dmats[t][u] = 1.000000000000000;
28655
}// end loop over 'u'
28656
}// end loop over 't'
28658
// Looping derivative order to generate dmats.
28659
for (unsigned int s = 0; s < n; s++)
28661
// Updating dmats_old with new values and resetting dmats.
28662
for (unsigned int t = 0; t < 10; t++)
28664
for (unsigned int u = 0; u < 10; u++)
28666
dmats_old[t][u] = dmats[t][u];
28667
dmats[t][u] = 0.000000000000000;
28668
}// end loop over 'u'
28669
}// end loop over 't'
28671
// Update dmats using an inner product.
28672
if (combinations[r][s] == 0)
28674
for (unsigned int t = 0; t < 10; t++)
28676
for (unsigned int u = 0; u < 10; u++)
28678
for (unsigned int tu = 0; tu < 10; tu++)
28680
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
28681
}// end loop over 'tu'
28682
}// end loop over 'u'
28683
}// end loop over 't'
28686
if (combinations[r][s] == 1)
28688
for (unsigned int t = 0; t < 10; t++)
28690
for (unsigned int u = 0; u < 10; u++)
28692
for (unsigned int tu = 0; tu < 10; tu++)
28694
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
28695
}// end loop over 'tu'
28696
}// end loop over 'u'
28697
}// end loop over 't'
28700
if (combinations[r][s] == 2)
28702
for (unsigned int t = 0; t < 10; t++)
28704
for (unsigned int u = 0; u < 10; u++)
28706
for (unsigned int tu = 0; tu < 10; tu++)
28708
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
28709
}// end loop over 'tu'
28710
}// end loop over 'u'
28711
}// end loop over 't'
28714
}// end loop over 's'
28715
for (unsigned int s = 0; s < 10; s++)
28717
for (unsigned int t = 0; t < 10; t++)
28719
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
28720
}// end loop over 't'
28721
}// end loop over 's'
28722
}// end loop over 'r'
28724
// Transform derivatives back to physical element
28725
for (unsigned int r = 0; r < num_derivatives; r++)
28727
for (unsigned int s = 0; s < num_derivatives; s++)
28729
values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
28730
}// end loop over 's'
28731
}// end loop over 'r'
28733
// Delete pointer to array of derivatives on FIAT element
28734
delete [] derivatives;
28736
// Delete pointer to array of combinations of derivatives and transform
28737
for (unsigned int r = 0; r < num_derivatives; r++)
28739
delete [] combinations[r];
28740
}// end loop over 'r'
28741
delete [] combinations;
28742
for (unsigned int r = 0; r < num_derivatives; r++)
28744
delete [] transform[r];
28745
}// end loop over 'r'
28746
delete [] transform;
28752
// Array of basisvalues.
28753
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
28755
// Declare helper variables.
28756
unsigned int rr = 0;
28757
unsigned int ss = 0;
28758
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
28760
// Compute basisvalues.
28761
basisvalues[0] = 1.000000000000000;
28762
basisvalues[1] = tmp0;
28763
for (unsigned int r = 0; r < 1; r++)
28765
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
28766
ss = r*(r + 1)*(r + 2)/6;
28767
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
28768
}// end loop over 'r'
28769
for (unsigned int r = 0; r < 1; r++)
28771
for (unsigned int s = 0; s < 1 - r; s++)
28773
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
28774
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
28775
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
28776
}// end loop over 's'
28777
}// end loop over 'r'
28778
for (unsigned int r = 0; r < 2; r++)
28780
for (unsigned int s = 0; s < 2 - r; s++)
28782
for (unsigned int t = 0; t < 2 - r - s; t++)
28784
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28785
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
28786
}// end loop over 't'
28787
}// end loop over 's'
28788
}// end loop over 'r'
28790
// Table(s) of coefficients.
28791
static const double coefficients0[4] = \
28792
{0.288675134594813, -0.182574185835055, -0.105409255338946, -0.074535599249993};
28794
// Tables of derivatives of the polynomial base (transpose).
28795
static const double dmats0[4][4] = \
28796
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28797
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28798
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28799
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28801
static const double dmats1[4][4] = \
28802
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28803
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28804
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28805
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28807
static const double dmats2[4][4] = \
28808
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28809
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28810
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28811
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28813
// Compute reference derivatives.
28814
// Declare pointer to array of derivatives on FIAT element.
28815
double *derivatives = new double[num_derivatives];
28816
for (unsigned int r = 0; r < num_derivatives; r++)
28818
derivatives[r] = 0.000000000000000;
28819
}// end loop over 'r'
28821
// Declare derivative matrix (of polynomial basis).
28822
double dmats[4][4] = \
28823
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28824
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28825
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28826
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28828
// Declare (auxiliary) derivative matrix (of polynomial basis).
28829
double dmats_old[4][4] = \
28830
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28831
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
28832
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
28833
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
28835
// Loop possible derivatives.
28836
for (unsigned int r = 0; r < num_derivatives; r++)
28838
// Resetting dmats values to compute next derivative.
28839
for (unsigned int t = 0; t < 4; t++)
28841
for (unsigned int u = 0; u < 4; u++)
28843
dmats[t][u] = 0.000000000000000;
28846
dmats[t][u] = 1.000000000000000;
28849
}// end loop over 'u'
28850
}// end loop over 't'
28852
// Looping derivative order to generate dmats.
28853
for (unsigned int s = 0; s < n; s++)
28855
// Updating dmats_old with new values and resetting dmats.
28856
for (unsigned int t = 0; t < 4; t++)
28858
for (unsigned int u = 0; u < 4; u++)
28860
dmats_old[t][u] = dmats[t][u];
28861
dmats[t][u] = 0.000000000000000;
28862
}// end loop over 'u'
28863
}// end loop over 't'
28865
// Update dmats using an inner product.
28866
if (combinations[r][s] == 0)
28868
for (unsigned int t = 0; t < 4; t++)
28870
for (unsigned int u = 0; u < 4; u++)
28872
for (unsigned int tu = 0; tu < 4; tu++)
28874
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
28875
}// end loop over 'tu'
28876
}// end loop over 'u'
28877
}// end loop over 't'
28880
if (combinations[r][s] == 1)
28882
for (unsigned int t = 0; t < 4; t++)
28884
for (unsigned int u = 0; u < 4; u++)
28886
for (unsigned int tu = 0; tu < 4; tu++)
28888
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
28889
}// end loop over 'tu'
28890
}// end loop over 'u'
28891
}// end loop over 't'
28894
if (combinations[r][s] == 2)
28896
for (unsigned int t = 0; t < 4; t++)
28898
for (unsigned int u = 0; u < 4; u++)
28900
for (unsigned int tu = 0; tu < 4; tu++)
28902
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
28903
}// end loop over 'tu'
28904
}// end loop over 'u'
28905
}// end loop over 't'
28908
}// end loop over 's'
28909
for (unsigned int s = 0; s < 4; s++)
28911
for (unsigned int t = 0; t < 4; t++)
28913
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
28914
}// end loop over 't'
28915
}// end loop over 's'
28916
}// end loop over 'r'
28918
// Transform derivatives back to physical element
28919
for (unsigned int r = 0; r < num_derivatives; r++)
28921
for (unsigned int s = 0; s < num_derivatives; s++)
28923
values[3*num_derivatives + r] += transform[r][s]*derivatives[s];
28924
}// end loop over 's'
28925
}// end loop over 'r'
28927
// Delete pointer to array of derivatives on FIAT element
28928
delete [] derivatives;
28930
// Delete pointer to array of combinations of derivatives and transform
28931
for (unsigned int r = 0; r < num_derivatives; r++)
28933
delete [] combinations[r];
28934
}// end loop over 'r'
28935
delete [] combinations;
28936
for (unsigned int r = 0; r < num_derivatives; r++)
28938
delete [] transform[r];
28939
}// end loop over 'r'
28940
delete [] transform;
28946
// Array of basisvalues.
28947
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
28949
// Declare helper variables.
28950
unsigned int rr = 0;
28951
unsigned int ss = 0;
28952
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
28954
// Compute basisvalues.
28955
basisvalues[0] = 1.000000000000000;
28956
basisvalues[1] = tmp0;
28957
for (unsigned int r = 0; r < 1; r++)
28959
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
28960
ss = r*(r + 1)*(r + 2)/6;
28961
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
28962
}// end loop over 'r'
28963
for (unsigned int r = 0; r < 1; r++)
28965
for (unsigned int s = 0; s < 1 - r; s++)
28967
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
28968
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
28969
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
28970
}// end loop over 's'
28971
}// end loop over 'r'
28972
for (unsigned int r = 0; r < 2; r++)
28974
for (unsigned int s = 0; s < 2 - r; s++)
28976
for (unsigned int t = 0; t < 2 - r - s; t++)
28978
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
28979
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
28980
}// end loop over 't'
28981
}// end loop over 's'
28982
}// end loop over 'r'
28984
// Table(s) of coefficients.
28985
static const double coefficients0[4] = \
28986
{0.288675134594813, 0.182574185835055, -0.105409255338946, -0.074535599249993};
28988
// Tables of derivatives of the polynomial base (transpose).
28989
static const double dmats0[4][4] = \
28990
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28991
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28992
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28993
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
28995
static const double dmats1[4][4] = \
28996
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28997
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28998
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
28999
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29001
static const double dmats2[4][4] = \
29002
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29003
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29004
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29005
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29007
// Compute reference derivatives.
29008
// Declare pointer to array of derivatives on FIAT element.
29009
double *derivatives = new double[num_derivatives];
29010
for (unsigned int r = 0; r < num_derivatives; r++)
29012
derivatives[r] = 0.000000000000000;
29013
}// end loop over 'r'
29015
// Declare derivative matrix (of polynomial basis).
29016
double dmats[4][4] = \
29017
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29018
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
29019
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
29020
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
29022
// Declare (auxiliary) derivative matrix (of polynomial basis).
29023
double dmats_old[4][4] = \
29024
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29025
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
29026
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
29027
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
29029
// Loop possible derivatives.
29030
for (unsigned int r = 0; r < num_derivatives; r++)
29032
// Resetting dmats values to compute next derivative.
29033
for (unsigned int t = 0; t < 4; t++)
29035
for (unsigned int u = 0; u < 4; u++)
29037
dmats[t][u] = 0.000000000000000;
29040
dmats[t][u] = 1.000000000000000;
29043
}// end loop over 'u'
29044
}// end loop over 't'
29046
// Looping derivative order to generate dmats.
29047
for (unsigned int s = 0; s < n; s++)
29049
// Updating dmats_old with new values and resetting dmats.
29050
for (unsigned int t = 0; t < 4; t++)
29052
for (unsigned int u = 0; u < 4; u++)
29054
dmats_old[t][u] = dmats[t][u];
29055
dmats[t][u] = 0.000000000000000;
29056
}// end loop over 'u'
29057
}// end loop over 't'
29059
// Update dmats using an inner product.
29060
if (combinations[r][s] == 0)
29062
for (unsigned int t = 0; t < 4; t++)
29064
for (unsigned int u = 0; u < 4; u++)
29066
for (unsigned int tu = 0; tu < 4; tu++)
29068
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
29069
}// end loop over 'tu'
29070
}// end loop over 'u'
29071
}// end loop over 't'
29074
if (combinations[r][s] == 1)
29076
for (unsigned int t = 0; t < 4; t++)
29078
for (unsigned int u = 0; u < 4; u++)
29080
for (unsigned int tu = 0; tu < 4; tu++)
29082
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
29083
}// end loop over 'tu'
29084
}// end loop over 'u'
29085
}// end loop over 't'
29088
if (combinations[r][s] == 2)
29090
for (unsigned int t = 0; t < 4; t++)
29092
for (unsigned int u = 0; u < 4; u++)
29094
for (unsigned int tu = 0; tu < 4; tu++)
29096
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
29097
}// end loop over 'tu'
29098
}// end loop over 'u'
29099
}// end loop over 't'
29102
}// end loop over 's'
29103
for (unsigned int s = 0; s < 4; s++)
29105
for (unsigned int t = 0; t < 4; t++)
29107
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
29108
}// end loop over 't'
29109
}// end loop over 's'
29110
}// end loop over 'r'
29112
// Transform derivatives back to physical element
29113
for (unsigned int r = 0; r < num_derivatives; r++)
29115
for (unsigned int s = 0; s < num_derivatives; s++)
29117
values[3*num_derivatives + r] += transform[r][s]*derivatives[s];
29118
}// end loop over 's'
29119
}// end loop over 'r'
29121
// Delete pointer to array of derivatives on FIAT element
29122
delete [] derivatives;
29124
// Delete pointer to array of combinations of derivatives and transform
29125
for (unsigned int r = 0; r < num_derivatives; r++)
29127
delete [] combinations[r];
29128
}// end loop over 'r'
29129
delete [] combinations;
29130
for (unsigned int r = 0; r < num_derivatives; r++)
29132
delete [] transform[r];
29133
}// end loop over 'r'
29134
delete [] transform;
29140
// Array of basisvalues.
29141
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
29143
// Declare helper variables.
29144
unsigned int rr = 0;
29145
unsigned int ss = 0;
29146
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
29148
// Compute basisvalues.
29149
basisvalues[0] = 1.000000000000000;
29150
basisvalues[1] = tmp0;
29151
for (unsigned int r = 0; r < 1; r++)
29153
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
29154
ss = r*(r + 1)*(r + 2)/6;
29155
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
29156
}// end loop over 'r'
29157
for (unsigned int r = 0; r < 1; r++)
29159
for (unsigned int s = 0; s < 1 - r; s++)
29161
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
29162
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
29163
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
29164
}// end loop over 's'
29165
}// end loop over 'r'
29166
for (unsigned int r = 0; r < 2; r++)
29168
for (unsigned int s = 0; s < 2 - r; s++)
29170
for (unsigned int t = 0; t < 2 - r - s; t++)
29172
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
29173
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
29174
}// end loop over 't'
29175
}// end loop over 's'
29176
}// end loop over 'r'
29178
// Table(s) of coefficients.
29179
static const double coefficients0[4] = \
29180
{0.288675134594813, 0.000000000000000, 0.210818510677892, -0.074535599249993};
29182
// Tables of derivatives of the polynomial base (transpose).
29183
static const double dmats0[4][4] = \
29184
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29185
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29186
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29187
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29189
static const double dmats1[4][4] = \
29190
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29191
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29192
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29193
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29195
static const double dmats2[4][4] = \
29196
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29197
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29198
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29199
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29201
// Compute reference derivatives.
29202
// Declare pointer to array of derivatives on FIAT element.
29203
double *derivatives = new double[num_derivatives];
29204
for (unsigned int r = 0; r < num_derivatives; r++)
29206
derivatives[r] = 0.000000000000000;
29207
}// end loop over 'r'
29209
// Declare derivative matrix (of polynomial basis).
29210
double dmats[4][4] = \
29211
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29212
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
29213
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
29214
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
29216
// Declare (auxiliary) derivative matrix (of polynomial basis).
29217
double dmats_old[4][4] = \
29218
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29219
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
29220
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
29221
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
29223
// Loop possible derivatives.
29224
for (unsigned int r = 0; r < num_derivatives; r++)
29226
// Resetting dmats values to compute next derivative.
29227
for (unsigned int t = 0; t < 4; t++)
29229
for (unsigned int u = 0; u < 4; u++)
29231
dmats[t][u] = 0.000000000000000;
29234
dmats[t][u] = 1.000000000000000;
29237
}// end loop over 'u'
29238
}// end loop over 't'
29240
// Looping derivative order to generate dmats.
29241
for (unsigned int s = 0; s < n; s++)
29243
// Updating dmats_old with new values and resetting dmats.
29244
for (unsigned int t = 0; t < 4; t++)
29246
for (unsigned int u = 0; u < 4; u++)
29248
dmats_old[t][u] = dmats[t][u];
29249
dmats[t][u] = 0.000000000000000;
29250
}// end loop over 'u'
29251
}// end loop over 't'
29253
// Update dmats using an inner product.
29254
if (combinations[r][s] == 0)
29256
for (unsigned int t = 0; t < 4; t++)
29258
for (unsigned int u = 0; u < 4; u++)
29260
for (unsigned int tu = 0; tu < 4; tu++)
29262
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
29263
}// end loop over 'tu'
29264
}// end loop over 'u'
29265
}// end loop over 't'
29268
if (combinations[r][s] == 1)
29270
for (unsigned int t = 0; t < 4; t++)
29272
for (unsigned int u = 0; u < 4; u++)
29274
for (unsigned int tu = 0; tu < 4; tu++)
29276
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
29277
}// end loop over 'tu'
29278
}// end loop over 'u'
29279
}// end loop over 't'
29282
if (combinations[r][s] == 2)
29284
for (unsigned int t = 0; t < 4; t++)
29286
for (unsigned int u = 0; u < 4; u++)
29288
for (unsigned int tu = 0; tu < 4; tu++)
29290
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
29291
}// end loop over 'tu'
29292
}// end loop over 'u'
29293
}// end loop over 't'
29296
}// end loop over 's'
29297
for (unsigned int s = 0; s < 4; s++)
29299
for (unsigned int t = 0; t < 4; t++)
29301
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
29302
}// end loop over 't'
29303
}// end loop over 's'
29304
}// end loop over 'r'
29306
// Transform derivatives back to physical element
29307
for (unsigned int r = 0; r < num_derivatives; r++)
29309
for (unsigned int s = 0; s < num_derivatives; s++)
29311
values[3*num_derivatives + r] += transform[r][s]*derivatives[s];
29312
}// end loop over 's'
29313
}// end loop over 'r'
29315
// Delete pointer to array of derivatives on FIAT element
29316
delete [] derivatives;
29318
// Delete pointer to array of combinations of derivatives and transform
29319
for (unsigned int r = 0; r < num_derivatives; r++)
29321
delete [] combinations[r];
29322
}// end loop over 'r'
29323
delete [] combinations;
29324
for (unsigned int r = 0; r < num_derivatives; r++)
29326
delete [] transform[r];
29327
}// end loop over 'r'
29328
delete [] transform;
29334
// Array of basisvalues.
29335
double basisvalues[4] = {0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000};
29337
// Declare helper variables.
29338
unsigned int rr = 0;
29339
unsigned int ss = 0;
29340
double tmp0 = 0.500000000000000*(2.000000000000000 + Y + Z + 2.000000000000000*X);
29342
// Compute basisvalues.
29343
basisvalues[0] = 1.000000000000000;
29344
basisvalues[1] = tmp0;
29345
for (unsigned int r = 0; r < 1; r++)
29347
rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
29348
ss = r*(r + 1)*(r + 2)/6;
29349
basisvalues[rr] = basisvalues[ss]*(r*(1.000000000000000 + Y) + (2.000000000000000 + Z + 3.000000000000000*Y)/2.000000000000000);
29350
}// end loop over 'r'
29351
for (unsigned int r = 0; r < 1; r++)
29353
for (unsigned int s = 0; s < 1 - r; s++)
29355
rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
29356
ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
29357
basisvalues[rr] = basisvalues[ss]*(1.000000000000000 + r + s + Z*(2.000000000000000 + r + s));
29358
}// end loop over 's'
29359
}// end loop over 'r'
29360
for (unsigned int r = 0; r < 2; r++)
29362
for (unsigned int s = 0; s < 2 - r; s++)
29364
for (unsigned int t = 0; t < 2 - r - s; t++)
29366
rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
29367
basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s)*(1.500000000000000 + r + s + t));
29368
}// end loop over 't'
29369
}// end loop over 's'
29370
}// end loop over 'r'
29372
// Table(s) of coefficients.
29373
static const double coefficients0[4] = \
29374
{0.288675134594813, 0.000000000000000, 0.000000000000000, 0.223606797749979};
29376
// Tables of derivatives of the polynomial base (transpose).
29377
static const double dmats0[4][4] = \
29378
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29379
{6.324555320336760, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29380
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29381
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29383
static const double dmats1[4][4] = \
29384
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29385
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29386
{5.477225575051662, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29387
{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29389
static const double dmats2[4][4] = \
29390
{{0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29391
{3.162277660168380, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29392
{1.825741858350554, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29393
{5.163977794943223, 0.000000000000000, 0.000000000000000, 0.000000000000000}};
29395
// Compute reference derivatives.
29396
// Declare pointer to array of derivatives on FIAT element.
29397
double *derivatives = new double[num_derivatives];
29398
for (unsigned int r = 0; r < num_derivatives; r++)
29400
derivatives[r] = 0.000000000000000;
29401
}// end loop over 'r'
29403
// Declare derivative matrix (of polynomial basis).
29404
double dmats[4][4] = \
29405
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29406
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
29407
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
29408
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
29410
// Declare (auxiliary) derivative matrix (of polynomial basis).
29411
double dmats_old[4][4] = \
29412
{{1.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000},
29413
{0.000000000000000, 1.000000000000000, 0.000000000000000, 0.000000000000000},
29414
{0.000000000000000, 0.000000000000000, 1.000000000000000, 0.000000000000000},
29415
{0.000000000000000, 0.000000000000000, 0.000000000000000, 1.000000000000000}};
29417
// Loop possible derivatives.
29418
for (unsigned int r = 0; r < num_derivatives; r++)
29420
// Resetting dmats values to compute next derivative.
29421
for (unsigned int t = 0; t < 4; t++)
29423
for (unsigned int u = 0; u < 4; u++)
29425
dmats[t][u] = 0.000000000000000;
29428
dmats[t][u] = 1.000000000000000;
29431
}// end loop over 'u'
29432
}// end loop over 't'
29434
// Looping derivative order to generate dmats.
29435
for (unsigned int s = 0; s < n; s++)
29437
// Updating dmats_old with new values and resetting dmats.
29438
for (unsigned int t = 0; t < 4; t++)
29440
for (unsigned int u = 0; u < 4; u++)
29442
dmats_old[t][u] = dmats[t][u];
29443
dmats[t][u] = 0.000000000000000;
29444
}// end loop over 'u'
29445
}// end loop over 't'
29447
// Update dmats using an inner product.
29448
if (combinations[r][s] == 0)
29450
for (unsigned int t = 0; t < 4; t++)
29452
for (unsigned int u = 0; u < 4; u++)
29454
for (unsigned int tu = 0; tu < 4; tu++)
29456
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
29457
}// end loop over 'tu'
29458
}// end loop over 'u'
29459
}// end loop over 't'
29462
if (combinations[r][s] == 1)
29464
for (unsigned int t = 0; t < 4; t++)
29466
for (unsigned int u = 0; u < 4; u++)
29468
for (unsigned int tu = 0; tu < 4; tu++)
29470
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
29471
}// end loop over 'tu'
29472
}// end loop over 'u'
29473
}// end loop over 't'
29476
if (combinations[r][s] == 2)
29478
for (unsigned int t = 0; t < 4; t++)
29480
for (unsigned int u = 0; u < 4; u++)
29482
for (unsigned int tu = 0; tu < 4; tu++)
29484
dmats[t][u] += dmats2[t][tu]*dmats_old[tu][u];
29485
}// end loop over 'tu'
29486
}// end loop over 'u'
29487
}// end loop over 't'
29490
}// end loop over 's'
29491
for (unsigned int s = 0; s < 4; s++)
29493
for (unsigned int t = 0; t < 4; t++)
29495
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
29496
}// end loop over 't'
29497
}// end loop over 's'
29498
}// end loop over 'r'
29500
// Transform derivatives back to physical element
29501
for (unsigned int r = 0; r < num_derivatives; r++)
29503
for (unsigned int s = 0; s < num_derivatives; s++)
29505
values[3*num_derivatives + r] += transform[r][s]*derivatives[s];
29506
}// end loop over 's'
29507
}// end loop over 'r'
29509
// Delete pointer to array of derivatives on FIAT element
29510
delete [] derivatives;
29512
// Delete pointer to array of combinations of derivatives and transform
29513
for (unsigned int r = 0; r < num_derivatives; r++)
29515
delete [] combinations[r];
29516
}// end loop over 'r'
29517
delete [] combinations;
29518
for (unsigned int r = 0; r < num_derivatives; r++)
29520
delete [] transform[r];
29521
}// end loop over 'r'
29522
delete [] transform;
29529
/// Evaluate order n derivatives of all basis functions at given point in cell
29530
virtual void evaluate_basis_derivatives_all(unsigned int n,
29532
const double* coordinates,
29533
const ufc::cell& c) const
29535
// Compute number of derivatives.
29536
unsigned int num_derivatives = 1;
29537
for (unsigned int r = 0; r < n; r++)
29539
num_derivatives *= 3;
29540
}// end loop over 'r'
29542
// Helper variable to hold values of a single dof.
29543
double *dof_values = new double[4*num_derivatives];
29544
for (unsigned int r = 0; r < 4*num_derivatives; r++)
29546
dof_values[r] = 0.000000000000000;
29547
}// end loop over 'r'
29549
// Loop dofs and call evaluate_basis_derivatives.
29550
for (unsigned int r = 0; r < 34; r++)
29552
evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
29553
for (unsigned int s = 0; s < 4*num_derivatives; s++)
29555
values[r*4*num_derivatives + s] = dof_values[s];
29556
}// end loop over 's'
29557
}// end loop over 'r'
29560
delete [] dof_values;
29563
/// Evaluate linear functional for dof i on the function f
29564
virtual double evaluate_dof(unsigned int i,
29565
const ufc::function& f,
29566
const ufc::cell& c) const
29568
// Declare variables for result of evaluation.
29571
// Declare variable for physical coordinates.
29573
const double * const * x = c.coordinates;
29581
f.evaluate(vals, y, c);
29590
f.evaluate(vals, y, c);
29599
f.evaluate(vals, y, c);
29608
f.evaluate(vals, y, c);
29614
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
29615
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
29616
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
29617
f.evaluate(vals, y, c);
29623
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
29624
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
29625
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
29626
f.evaluate(vals, y, c);
29632
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
29633
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
29634
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
29635
f.evaluate(vals, y, c);
29641
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
29642
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
29643
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
29644
f.evaluate(vals, y, c);
29650
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
29651
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
29652
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
29653
f.evaluate(vals, y, c);
29659
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
29660
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
29661
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
29662
f.evaluate(vals, y, c);
29671
f.evaluate(vals, y, c);
29680
f.evaluate(vals, y, c);
29689
f.evaluate(vals, y, c);
29698
f.evaluate(vals, y, c);
29704
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
29705
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
29706
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
29707
f.evaluate(vals, y, c);
29713
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
29714
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
29715
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
29716
f.evaluate(vals, y, c);
29722
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
29723
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
29724
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
29725
f.evaluate(vals, y, c);
29731
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
29732
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
29733
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
29734
f.evaluate(vals, y, c);
29740
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
29741
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
29742
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
29743
f.evaluate(vals, y, c);
29749
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
29750
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
29751
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
29752
f.evaluate(vals, y, c);
29761
f.evaluate(vals, y, c);
29770
f.evaluate(vals, y, c);
29779
f.evaluate(vals, y, c);
29788
f.evaluate(vals, y, c);
29794
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
29795
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
29796
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
29797
f.evaluate(vals, y, c);
29803
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
29804
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
29805
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
29806
f.evaluate(vals, y, c);
29812
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
29813
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
29814
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
29815
f.evaluate(vals, y, c);
29821
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
29822
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
29823
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
29824
f.evaluate(vals, y, c);
29830
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
29831
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
29832
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
29833
f.evaluate(vals, y, c);
29839
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
29840
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
29841
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
29842
f.evaluate(vals, y, c);
29851
f.evaluate(vals, y, c);
29860
f.evaluate(vals, y, c);
29869
f.evaluate(vals, y, c);
29878
f.evaluate(vals, y, c);
29884
return 0.000000000000000;
29887
/// Evaluate linear functionals for all dofs on the function f
29888
virtual void evaluate_dofs(double* values,
29889
const ufc::function& f,
29890
const ufc::cell& c) const
29892
// Declare variables for result of evaluation.
29895
// Declare variable for physical coordinates.
29897
const double * const * x = c.coordinates;
29901
f.evaluate(vals, y, c);
29902
values[0] = vals[0];
29906
f.evaluate(vals, y, c);
29907
values[1] = vals[0];
29911
f.evaluate(vals, y, c);
29912
values[2] = vals[0];
29916
f.evaluate(vals, y, c);
29917
values[3] = vals[0];
29918
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
29919
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
29920
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
29921
f.evaluate(vals, y, c);
29922
values[4] = vals[0];
29923
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
29924
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
29925
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
29926
f.evaluate(vals, y, c);
29927
values[5] = vals[0];
29928
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
29929
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
29930
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
29931
f.evaluate(vals, y, c);
29932
values[6] = vals[0];
29933
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
29934
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
29935
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
29936
f.evaluate(vals, y, c);
29937
values[7] = vals[0];
29938
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
29939
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
29940
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
29941
f.evaluate(vals, y, c);
29942
values[8] = vals[0];
29943
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
29944
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
29945
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
29946
f.evaluate(vals, y, c);
29947
values[9] = vals[0];
29951
f.evaluate(vals, y, c);
29952
values[10] = vals[1];
29956
f.evaluate(vals, y, c);
29957
values[11] = vals[1];
29961
f.evaluate(vals, y, c);
29962
values[12] = vals[1];
29966
f.evaluate(vals, y, c);
29967
values[13] = vals[1];
29968
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
29969
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
29970
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
29971
f.evaluate(vals, y, c);
29972
values[14] = vals[1];
29973
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
29974
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
29975
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
29976
f.evaluate(vals, y, c);
29977
values[15] = vals[1];
29978
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
29979
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
29980
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
29981
f.evaluate(vals, y, c);
29982
values[16] = vals[1];
29983
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
29984
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
29985
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
29986
f.evaluate(vals, y, c);
29987
values[17] = vals[1];
29988
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
29989
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
29990
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
29991
f.evaluate(vals, y, c);
29992
values[18] = vals[1];
29993
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
29994
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
29995
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
29996
f.evaluate(vals, y, c);
29997
values[19] = vals[1];
30001
f.evaluate(vals, y, c);
30002
values[20] = vals[2];
30006
f.evaluate(vals, y, c);
30007
values[21] = vals[2];
30011
f.evaluate(vals, y, c);
30012
values[22] = vals[2];
30016
f.evaluate(vals, y, c);
30017
values[23] = vals[2];
30018
y[0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
30019
y[1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
30020
y[2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
30021
f.evaluate(vals, y, c);
30022
values[24] = vals[2];
30023
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
30024
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
30025
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
30026
f.evaluate(vals, y, c);
30027
values[25] = vals[2];
30028
y[0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
30029
y[1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
30030
y[2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
30031
f.evaluate(vals, y, c);
30032
values[26] = vals[2];
30033
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
30034
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
30035
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
30036
f.evaluate(vals, y, c);
30037
values[27] = vals[2];
30038
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
30039
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
30040
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
30041
f.evaluate(vals, y, c);
30042
values[28] = vals[2];
30043
y[0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
30044
y[1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
30045
y[2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
30046
f.evaluate(vals, y, c);
30047
values[29] = vals[2];
30051
f.evaluate(vals, y, c);
30052
values[30] = vals[3];
30056
f.evaluate(vals, y, c);
30057
values[31] = vals[3];
30061
f.evaluate(vals, y, c);
30062
values[32] = vals[3];
30066
f.evaluate(vals, y, c);
30067
values[33] = vals[3];
30070
/// Interpolate vertex values from dof values
30071
virtual void interpolate_vertex_values(double* vertex_values,
30072
const double* dof_values,
30073
const ufc::cell& c) const
30075
// Evaluate function and change variables
30076
vertex_values[0] = dof_values[0];
30077
vertex_values[4] = dof_values[1];
30078
vertex_values[8] = dof_values[2];
30079
vertex_values[12] = dof_values[3];
30080
// Evaluate function and change variables
30081
vertex_values[1] = dof_values[10];
30082
vertex_values[5] = dof_values[11];
30083
vertex_values[9] = dof_values[12];
30084
vertex_values[13] = dof_values[13];
30085
// Evaluate function and change variables
30086
vertex_values[2] = dof_values[20];
30087
vertex_values[6] = dof_values[21];
30088
vertex_values[10] = dof_values[22];
30089
vertex_values[14] = dof_values[23];
30090
// Evaluate function and change variables
30091
vertex_values[3] = dof_values[30];
30092
vertex_values[7] = dof_values[31];
30093
vertex_values[11] = dof_values[32];
30094
vertex_values[15] = dof_values[33];
30097
/// Map coordinate xhat from reference cell to coordinate x in cell
30098
virtual void map_from_reference_cell(double* x,
30099
const double* xhat,
30100
const ufc::cell& c)
30102
throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
30105
/// Map from coordinate x in cell to coordinate xhat in reference cell
30106
virtual void map_to_reference_cell(double* xhat,
30108
const ufc::cell& c)
30110
throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
30113
/// Return the number of sub elements (for a mixed element)
30114
virtual unsigned int num_sub_elements() const
30119
/// Create a new finite element for sub element i (for a mixed element)
30120
virtual ufc::finite_element* create_sub_element(unsigned int i) const
30126
return new stokes_finite_element_1();
30131
return new stokes_finite_element_2();
30139
/// Create a new class instance
30140
virtual ufc::finite_element* create() const
30142
return new stokes_finite_element_3();
30147
/// This class defines the interface for a local-to-global mapping of
30148
/// degrees of freedom (dofs).
30150
class stokes_dofmap_0: public ufc::dofmap
30154
unsigned int _global_dimension;
30158
stokes_dofmap_0() : ufc::dofmap()
30160
_global_dimension = 0;
30164
virtual ~stokes_dofmap_0()
30169
/// Return a string identifying the dofmap
30170
virtual const char* signature() const
30172
return "FFC dofmap for FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2)";
30175
/// Return true iff mesh entities of topological dimension d are needed
30176
virtual bool needs_mesh_entities(unsigned int d) const
30205
/// Initialize dofmap for mesh (return true iff init_cell() is needed)
30206
virtual bool init_mesh(const ufc::mesh& m)
30208
_global_dimension = m.num_entities[0] + m.num_entities[1];
30212
/// Initialize dofmap for given cell
30213
virtual void init_cell(const ufc::mesh& m,
30214
const ufc::cell& c)
30219
/// Finish initialization of dofmap for cells
30220
virtual void init_cell_finalize()
30225
/// Return the topological dimension of the associated cell shape
30226
virtual unsigned int topological_dimension() const
30231
/// Return the geometric dimension of the associated cell shape
30232
virtual unsigned int geometric_dimension() const
30237
/// Return the dimension of the global finite element function space
30238
virtual unsigned int global_dimension() const
30240
return _global_dimension;
30243
/// Return the dimension of the local finite element function space for a cell
30244
virtual unsigned int local_dimension(const ufc::cell& c) const
30249
/// Return the maximum dimension of the local finite element function space
30250
virtual unsigned int max_local_dimension() const
30255
/// Return the number of dofs on each cell facet
30256
virtual unsigned int num_facet_dofs() const
30261
/// Return the number of dofs associated with each cell entity of dimension d
30262
virtual unsigned int num_entity_dofs(unsigned int d) const
30291
/// Tabulate the local-to-global mapping of dofs on a cell
30292
virtual void tabulate_dofs(unsigned int* dofs,
30293
const ufc::mesh& m,
30294
const ufc::cell& c) const
30296
unsigned int offset = 0;
30297
dofs[0] = offset + c.entity_indices[0][0];
30298
dofs[1] = offset + c.entity_indices[0][1];
30299
dofs[2] = offset + c.entity_indices[0][2];
30300
dofs[3] = offset + c.entity_indices[0][3];
30301
offset += m.num_entities[0];
30302
dofs[4] = offset + c.entity_indices[1][0];
30303
dofs[5] = offset + c.entity_indices[1][1];
30304
dofs[6] = offset + c.entity_indices[1][2];
30305
dofs[7] = offset + c.entity_indices[1][3];
30306
dofs[8] = offset + c.entity_indices[1][4];
30307
dofs[9] = offset + c.entity_indices[1][5];
30308
offset += m.num_entities[1];
30311
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
30312
virtual void tabulate_facet_dofs(unsigned int* dofs,
30313
unsigned int facet) const
30361
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
30362
virtual void tabulate_entity_dofs(unsigned int* dofs,
30363
unsigned int d, unsigned int i) const
30367
throw std::runtime_error("d is larger than dimension (3)");
30376
throw std::runtime_error("i is larger than number of entities (3)");
30409
throw std::runtime_error("i is larger than number of entities (5)");
30462
/// Tabulate the coordinates of all dofs on a cell
30463
virtual void tabulate_coordinates(double** coordinates,
30464
const ufc::cell& c) const
30466
const double * const * x = c.coordinates;
30468
coordinates[0][0] = x[0][0];
30469
coordinates[0][1] = x[0][1];
30470
coordinates[0][2] = x[0][2];
30471
coordinates[1][0] = x[1][0];
30472
coordinates[1][1] = x[1][1];
30473
coordinates[1][2] = x[1][2];
30474
coordinates[2][0] = x[2][0];
30475
coordinates[2][1] = x[2][1];
30476
coordinates[2][2] = x[2][2];
30477
coordinates[3][0] = x[3][0];
30478
coordinates[3][1] = x[3][1];
30479
coordinates[3][2] = x[3][2];
30480
coordinates[4][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
30481
coordinates[4][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
30482
coordinates[4][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
30483
coordinates[5][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
30484
coordinates[5][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
30485
coordinates[5][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
30486
coordinates[6][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
30487
coordinates[6][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
30488
coordinates[6][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
30489
coordinates[7][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
30490
coordinates[7][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
30491
coordinates[7][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
30492
coordinates[8][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
30493
coordinates[8][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
30494
coordinates[8][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
30495
coordinates[9][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
30496
coordinates[9][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
30497
coordinates[9][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
30500
/// Return the number of sub dofmaps (for a mixed element)
30501
virtual unsigned int num_sub_dofmaps() const
30506
/// Create a new dofmap for sub dofmap i (for a mixed element)
30507
virtual ufc::dofmap* create_sub_dofmap(unsigned int i) const
30512
/// Create a new class instance
30513
virtual ufc::dofmap* create() const
30515
return new stokes_dofmap_0();
30520
/// This class defines the interface for a local-to-global mapping of
30521
/// degrees of freedom (dofs).
30523
class stokes_dofmap_1: public ufc::dofmap
30527
unsigned int _global_dimension;
30531
stokes_dofmap_1() : ufc::dofmap()
30533
_global_dimension = 0;
30537
virtual ~stokes_dofmap_1()
30542
/// Return a string identifying the dofmap
30543
virtual const char* signature() const
30545
return "FFC dofmap for VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3)";
30548
/// Return true iff mesh entities of topological dimension d are needed
30549
virtual bool needs_mesh_entities(unsigned int d) const
30578
/// Initialize dofmap for mesh (return true iff init_cell() is needed)
30579
virtual bool init_mesh(const ufc::mesh& m)
30581
_global_dimension = 3.000000000000000*m.num_entities[0] + 3.000000000000000*m.num_entities[1];
30585
/// Initialize dofmap for given cell
30586
virtual void init_cell(const ufc::mesh& m,
30587
const ufc::cell& c)
30592
/// Finish initialization of dofmap for cells
30593
virtual void init_cell_finalize()
30598
/// Return the topological dimension of the associated cell shape
30599
virtual unsigned int topological_dimension() const
30604
/// Return the geometric dimension of the associated cell shape
30605
virtual unsigned int geometric_dimension() const
30610
/// Return the dimension of the global finite element function space
30611
virtual unsigned int global_dimension() const
30613
return _global_dimension;
30616
/// Return the dimension of the local finite element function space for a cell
30617
virtual unsigned int local_dimension(const ufc::cell& c) const
30622
/// Return the maximum dimension of the local finite element function space
30623
virtual unsigned int max_local_dimension() const
30628
/// Return the number of dofs on each cell facet
30629
virtual unsigned int num_facet_dofs() const
30634
/// Return the number of dofs associated with each cell entity of dimension d
30635
virtual unsigned int num_entity_dofs(unsigned int d) const
30664
/// Tabulate the local-to-global mapping of dofs on a cell
30665
virtual void tabulate_dofs(unsigned int* dofs,
30666
const ufc::mesh& m,
30667
const ufc::cell& c) const
30669
unsigned int offset = 0;
30670
dofs[0] = offset + c.entity_indices[0][0];
30671
dofs[1] = offset + c.entity_indices[0][1];
30672
dofs[2] = offset + c.entity_indices[0][2];
30673
dofs[3] = offset + c.entity_indices[0][3];
30674
offset += m.num_entities[0];
30675
dofs[4] = offset + c.entity_indices[1][0];
30676
dofs[5] = offset + c.entity_indices[1][1];
30677
dofs[6] = offset + c.entity_indices[1][2];
30678
dofs[7] = offset + c.entity_indices[1][3];
30679
dofs[8] = offset + c.entity_indices[1][4];
30680
dofs[9] = offset + c.entity_indices[1][5];
30681
offset += m.num_entities[1];
30682
dofs[10] = offset + c.entity_indices[0][0];
30683
dofs[11] = offset + c.entity_indices[0][1];
30684
dofs[12] = offset + c.entity_indices[0][2];
30685
dofs[13] = offset + c.entity_indices[0][3];
30686
offset += m.num_entities[0];
30687
dofs[14] = offset + c.entity_indices[1][0];
30688
dofs[15] = offset + c.entity_indices[1][1];
30689
dofs[16] = offset + c.entity_indices[1][2];
30690
dofs[17] = offset + c.entity_indices[1][3];
30691
dofs[18] = offset + c.entity_indices[1][4];
30692
dofs[19] = offset + c.entity_indices[1][5];
30693
offset += m.num_entities[1];
30694
dofs[20] = offset + c.entity_indices[0][0];
30695
dofs[21] = offset + c.entity_indices[0][1];
30696
dofs[22] = offset + c.entity_indices[0][2];
30697
dofs[23] = offset + c.entity_indices[0][3];
30698
offset += m.num_entities[0];
30699
dofs[24] = offset + c.entity_indices[1][0];
30700
dofs[25] = offset + c.entity_indices[1][1];
30701
dofs[26] = offset + c.entity_indices[1][2];
30702
dofs[27] = offset + c.entity_indices[1][3];
30703
dofs[28] = offset + c.entity_indices[1][4];
30704
dofs[29] = offset + c.entity_indices[1][5];
30705
offset += m.num_entities[1];
30708
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
30709
virtual void tabulate_facet_dofs(unsigned int* dofs,
30710
unsigned int facet) const
30806
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
30807
virtual void tabulate_entity_dofs(unsigned int* dofs,
30808
unsigned int d, unsigned int i) const
30812
throw std::runtime_error("d is larger than dimension (3)");
30821
throw std::runtime_error("i is larger than number of entities (3)");
30862
throw std::runtime_error("i is larger than number of entities (5)");
30927
/// Tabulate the coordinates of all dofs on a cell
30928
virtual void tabulate_coordinates(double** coordinates,
30929
const ufc::cell& c) const
30931
const double * const * x = c.coordinates;
30933
coordinates[0][0] = x[0][0];
30934
coordinates[0][1] = x[0][1];
30935
coordinates[0][2] = x[0][2];
30936
coordinates[1][0] = x[1][0];
30937
coordinates[1][1] = x[1][1];
30938
coordinates[1][2] = x[1][2];
30939
coordinates[2][0] = x[2][0];
30940
coordinates[2][1] = x[2][1];
30941
coordinates[2][2] = x[2][2];
30942
coordinates[3][0] = x[3][0];
30943
coordinates[3][1] = x[3][1];
30944
coordinates[3][2] = x[3][2];
30945
coordinates[4][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
30946
coordinates[4][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
30947
coordinates[4][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
30948
coordinates[5][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
30949
coordinates[5][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
30950
coordinates[5][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
30951
coordinates[6][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
30952
coordinates[6][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
30953
coordinates[6][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
30954
coordinates[7][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
30955
coordinates[7][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
30956
coordinates[7][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
30957
coordinates[8][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
30958
coordinates[8][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
30959
coordinates[8][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
30960
coordinates[9][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
30961
coordinates[9][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
30962
coordinates[9][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
30963
coordinates[10][0] = x[0][0];
30964
coordinates[10][1] = x[0][1];
30965
coordinates[10][2] = x[0][2];
30966
coordinates[11][0] = x[1][0];
30967
coordinates[11][1] = x[1][1];
30968
coordinates[11][2] = x[1][2];
30969
coordinates[12][0] = x[2][0];
30970
coordinates[12][1] = x[2][1];
30971
coordinates[12][2] = x[2][2];
30972
coordinates[13][0] = x[3][0];
30973
coordinates[13][1] = x[3][1];
30974
coordinates[13][2] = x[3][2];
30975
coordinates[14][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
30976
coordinates[14][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
30977
coordinates[14][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
30978
coordinates[15][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
30979
coordinates[15][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
30980
coordinates[15][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
30981
coordinates[16][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
30982
coordinates[16][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
30983
coordinates[16][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
30984
coordinates[17][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
30985
coordinates[17][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
30986
coordinates[17][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
30987
coordinates[18][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
30988
coordinates[18][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
30989
coordinates[18][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
30990
coordinates[19][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
30991
coordinates[19][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
30992
coordinates[19][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
30993
coordinates[20][0] = x[0][0];
30994
coordinates[20][1] = x[0][1];
30995
coordinates[20][2] = x[0][2];
30996
coordinates[21][0] = x[1][0];
30997
coordinates[21][1] = x[1][1];
30998
coordinates[21][2] = x[1][2];
30999
coordinates[22][0] = x[2][0];
31000
coordinates[22][1] = x[2][1];
31001
coordinates[22][2] = x[2][2];
31002
coordinates[23][0] = x[3][0];
31003
coordinates[23][1] = x[3][1];
31004
coordinates[23][2] = x[3][2];
31005
coordinates[24][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
31006
coordinates[24][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
31007
coordinates[24][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
31008
coordinates[25][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
31009
coordinates[25][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
31010
coordinates[25][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
31011
coordinates[26][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
31012
coordinates[26][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
31013
coordinates[26][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
31014
coordinates[27][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
31015
coordinates[27][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
31016
coordinates[27][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
31017
coordinates[28][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
31018
coordinates[28][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
31019
coordinates[28][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
31020
coordinates[29][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
31021
coordinates[29][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
31022
coordinates[29][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
31025
/// Return the number of sub dofmaps (for a mixed element)
31026
virtual unsigned int num_sub_dofmaps() const
31031
/// Create a new dofmap for sub dofmap i (for a mixed element)
31032
virtual ufc::dofmap* create_sub_dofmap(unsigned int i) const
31038
return new stokes_dofmap_0();
31043
return new stokes_dofmap_0();
31048
return new stokes_dofmap_0();
31056
/// Create a new class instance
31057
virtual ufc::dofmap* create() const
31059
return new stokes_dofmap_1();
31064
/// This class defines the interface for a local-to-global mapping of
31065
/// degrees of freedom (dofs).
31067
class stokes_dofmap_2: public ufc::dofmap
31071
unsigned int _global_dimension;
31075
stokes_dofmap_2() : ufc::dofmap()
31077
_global_dimension = 0;
31081
virtual ~stokes_dofmap_2()
31086
/// Return a string identifying the dofmap
31087
virtual const char* signature() const
31089
return "FFC dofmap for FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)";
31092
/// Return true iff mesh entities of topological dimension d are needed
31093
virtual bool needs_mesh_entities(unsigned int d) const
31122
/// Initialize dofmap for mesh (return true iff init_cell() is needed)
31123
virtual bool init_mesh(const ufc::mesh& m)
31125
_global_dimension = m.num_entities[0];
31129
/// Initialize dofmap for given cell
31130
virtual void init_cell(const ufc::mesh& m,
31131
const ufc::cell& c)
31136
/// Finish initialization of dofmap for cells
31137
virtual void init_cell_finalize()
31142
/// Return the topological dimension of the associated cell shape
31143
virtual unsigned int topological_dimension() const
31148
/// Return the geometric dimension of the associated cell shape
31149
virtual unsigned int geometric_dimension() const
31154
/// Return the dimension of the global finite element function space
31155
virtual unsigned int global_dimension() const
31157
return _global_dimension;
31160
/// Return the dimension of the local finite element function space for a cell
31161
virtual unsigned int local_dimension(const ufc::cell& c) const
31166
/// Return the maximum dimension of the local finite element function space
31167
virtual unsigned int max_local_dimension() const
31172
/// Return the number of dofs on each cell facet
31173
virtual unsigned int num_facet_dofs() const
31178
/// Return the number of dofs associated with each cell entity of dimension d
31179
virtual unsigned int num_entity_dofs(unsigned int d) const
31208
/// Tabulate the local-to-global mapping of dofs on a cell
31209
virtual void tabulate_dofs(unsigned int* dofs,
31210
const ufc::mesh& m,
31211
const ufc::cell& c) const
31213
dofs[0] = c.entity_indices[0][0];
31214
dofs[1] = c.entity_indices[0][1];
31215
dofs[2] = c.entity_indices[0][2];
31216
dofs[3] = c.entity_indices[0][3];
31219
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
31220
virtual void tabulate_facet_dofs(unsigned int* dofs,
31221
unsigned int facet) const
31257
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
31258
virtual void tabulate_entity_dofs(unsigned int* dofs,
31259
unsigned int d, unsigned int i) const
31263
throw std::runtime_error("d is larger than dimension (3)");
31272
throw std::runtime_error("i is larger than number of entities (3)");
31320
/// Tabulate the coordinates of all dofs on a cell
31321
virtual void tabulate_coordinates(double** coordinates,
31322
const ufc::cell& c) const
31324
const double * const * x = c.coordinates;
31326
coordinates[0][0] = x[0][0];
31327
coordinates[0][1] = x[0][1];
31328
coordinates[0][2] = x[0][2];
31329
coordinates[1][0] = x[1][0];
31330
coordinates[1][1] = x[1][1];
31331
coordinates[1][2] = x[1][2];
31332
coordinates[2][0] = x[2][0];
31333
coordinates[2][1] = x[2][1];
31334
coordinates[2][2] = x[2][2];
31335
coordinates[3][0] = x[3][0];
31336
coordinates[3][1] = x[3][1];
31337
coordinates[3][2] = x[3][2];
31340
/// Return the number of sub dofmaps (for a mixed element)
31341
virtual unsigned int num_sub_dofmaps() const
31346
/// Create a new dofmap for sub dofmap i (for a mixed element)
31347
virtual ufc::dofmap* create_sub_dofmap(unsigned int i) const
31352
/// Create a new class instance
31353
virtual ufc::dofmap* create() const
31355
return new stokes_dofmap_2();
31360
/// This class defines the interface for a local-to-global mapping of
31361
/// degrees of freedom (dofs).
31363
class stokes_dofmap_3: public ufc::dofmap
31367
unsigned int _global_dimension;
31371
stokes_dofmap_3() : ufc::dofmap()
31373
_global_dimension = 0;
31377
virtual ~stokes_dofmap_3()
31382
/// Return a string identifying the dofmap
31383
virtual const char* signature() const
31385
return "FFC dofmap for MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) })";
31388
/// Return true iff mesh entities of topological dimension d are needed
31389
virtual bool needs_mesh_entities(unsigned int d) const
31418
/// Initialize dofmap for mesh (return true iff init_cell() is needed)
31419
virtual bool init_mesh(const ufc::mesh& m)
31421
_global_dimension = 4.000000000000000*m.num_entities[0] + 3.000000000000000*m.num_entities[1];
31425
/// Initialize dofmap for given cell
31426
virtual void init_cell(const ufc::mesh& m,
31427
const ufc::cell& c)
31432
/// Finish initialization of dofmap for cells
31433
virtual void init_cell_finalize()
31438
/// Return the topological dimension of the associated cell shape
31439
virtual unsigned int topological_dimension() const
31444
/// Return the geometric dimension of the associated cell shape
31445
virtual unsigned int geometric_dimension() const
31450
/// Return the dimension of the global finite element function space
31451
virtual unsigned int global_dimension() const
31453
return _global_dimension;
31456
/// Return the dimension of the local finite element function space for a cell
31457
virtual unsigned int local_dimension(const ufc::cell& c) const
31462
/// Return the maximum dimension of the local finite element function space
31463
virtual unsigned int max_local_dimension() const
31468
/// Return the number of dofs on each cell facet
31469
virtual unsigned int num_facet_dofs() const
31474
/// Return the number of dofs associated with each cell entity of dimension d
31475
virtual unsigned int num_entity_dofs(unsigned int d) const
31504
/// Tabulate the local-to-global mapping of dofs on a cell
31505
virtual void tabulate_dofs(unsigned int* dofs,
31506
const ufc::mesh& m,
31507
const ufc::cell& c) const
31509
unsigned int offset = 0;
31510
dofs[0] = offset + c.entity_indices[0][0];
31511
dofs[1] = offset + c.entity_indices[0][1];
31512
dofs[2] = offset + c.entity_indices[0][2];
31513
dofs[3] = offset + c.entity_indices[0][3];
31514
offset += m.num_entities[0];
31515
dofs[4] = offset + c.entity_indices[1][0];
31516
dofs[5] = offset + c.entity_indices[1][1];
31517
dofs[6] = offset + c.entity_indices[1][2];
31518
dofs[7] = offset + c.entity_indices[1][3];
31519
dofs[8] = offset + c.entity_indices[1][4];
31520
dofs[9] = offset + c.entity_indices[1][5];
31521
offset += m.num_entities[1];
31522
dofs[10] = offset + c.entity_indices[0][0];
31523
dofs[11] = offset + c.entity_indices[0][1];
31524
dofs[12] = offset + c.entity_indices[0][2];
31525
dofs[13] = offset + c.entity_indices[0][3];
31526
offset += m.num_entities[0];
31527
dofs[14] = offset + c.entity_indices[1][0];
31528
dofs[15] = offset + c.entity_indices[1][1];
31529
dofs[16] = offset + c.entity_indices[1][2];
31530
dofs[17] = offset + c.entity_indices[1][3];
31531
dofs[18] = offset + c.entity_indices[1][4];
31532
dofs[19] = offset + c.entity_indices[1][5];
31533
offset += m.num_entities[1];
31534
dofs[20] = offset + c.entity_indices[0][0];
31535
dofs[21] = offset + c.entity_indices[0][1];
31536
dofs[22] = offset + c.entity_indices[0][2];
31537
dofs[23] = offset + c.entity_indices[0][3];
31538
offset += m.num_entities[0];
31539
dofs[24] = offset + c.entity_indices[1][0];
31540
dofs[25] = offset + c.entity_indices[1][1];
31541
dofs[26] = offset + c.entity_indices[1][2];
31542
dofs[27] = offset + c.entity_indices[1][3];
31543
dofs[28] = offset + c.entity_indices[1][4];
31544
dofs[29] = offset + c.entity_indices[1][5];
31545
offset += m.num_entities[1];
31546
dofs[30] = offset + c.entity_indices[0][0];
31547
dofs[31] = offset + c.entity_indices[0][1];
31548
dofs[32] = offset + c.entity_indices[0][2];
31549
dofs[33] = offset + c.entity_indices[0][3];
31550
offset += m.num_entities[0];
31553
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
31554
virtual void tabulate_facet_dofs(unsigned int* dofs,
31555
unsigned int facet) const
31663
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
31664
virtual void tabulate_entity_dofs(unsigned int* dofs,
31665
unsigned int d, unsigned int i) const
31669
throw std::runtime_error("d is larger than dimension (3)");
31678
throw std::runtime_error("i is larger than number of entities (3)");
31723
throw std::runtime_error("i is larger than number of entities (5)");
31788
/// Tabulate the coordinates of all dofs on a cell
31789
virtual void tabulate_coordinates(double** coordinates,
31790
const ufc::cell& c) const
31792
const double * const * x = c.coordinates;
31794
coordinates[0][0] = x[0][0];
31795
coordinates[0][1] = x[0][1];
31796
coordinates[0][2] = x[0][2];
31797
coordinates[1][0] = x[1][0];
31798
coordinates[1][1] = x[1][1];
31799
coordinates[1][2] = x[1][2];
31800
coordinates[2][0] = x[2][0];
31801
coordinates[2][1] = x[2][1];
31802
coordinates[2][2] = x[2][2];
31803
coordinates[3][0] = x[3][0];
31804
coordinates[3][1] = x[3][1];
31805
coordinates[3][2] = x[3][2];
31806
coordinates[4][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
31807
coordinates[4][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
31808
coordinates[4][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
31809
coordinates[5][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
31810
coordinates[5][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
31811
coordinates[5][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
31812
coordinates[6][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
31813
coordinates[6][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
31814
coordinates[6][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
31815
coordinates[7][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
31816
coordinates[7][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
31817
coordinates[7][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
31818
coordinates[8][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
31819
coordinates[8][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
31820
coordinates[8][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
31821
coordinates[9][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
31822
coordinates[9][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
31823
coordinates[9][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
31824
coordinates[10][0] = x[0][0];
31825
coordinates[10][1] = x[0][1];
31826
coordinates[10][2] = x[0][2];
31827
coordinates[11][0] = x[1][0];
31828
coordinates[11][1] = x[1][1];
31829
coordinates[11][2] = x[1][2];
31830
coordinates[12][0] = x[2][0];
31831
coordinates[12][1] = x[2][1];
31832
coordinates[12][2] = x[2][2];
31833
coordinates[13][0] = x[3][0];
31834
coordinates[13][1] = x[3][1];
31835
coordinates[13][2] = x[3][2];
31836
coordinates[14][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
31837
coordinates[14][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
31838
coordinates[14][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
31839
coordinates[15][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
31840
coordinates[15][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
31841
coordinates[15][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
31842
coordinates[16][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
31843
coordinates[16][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
31844
coordinates[16][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
31845
coordinates[17][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
31846
coordinates[17][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
31847
coordinates[17][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
31848
coordinates[18][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
31849
coordinates[18][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
31850
coordinates[18][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
31851
coordinates[19][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
31852
coordinates[19][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
31853
coordinates[19][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
31854
coordinates[20][0] = x[0][0];
31855
coordinates[20][1] = x[0][1];
31856
coordinates[20][2] = x[0][2];
31857
coordinates[21][0] = x[1][0];
31858
coordinates[21][1] = x[1][1];
31859
coordinates[21][2] = x[1][2];
31860
coordinates[22][0] = x[2][0];
31861
coordinates[22][1] = x[2][1];
31862
coordinates[22][2] = x[2][2];
31863
coordinates[23][0] = x[3][0];
31864
coordinates[23][1] = x[3][1];
31865
coordinates[23][2] = x[3][2];
31866
coordinates[24][0] = 0.500000000000000*x[2][0] + 0.500000000000000*x[3][0];
31867
coordinates[24][1] = 0.500000000000000*x[2][1] + 0.500000000000000*x[3][1];
31868
coordinates[24][2] = 0.500000000000000*x[2][2] + 0.500000000000000*x[3][2];
31869
coordinates[25][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[3][0];
31870
coordinates[25][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[3][1];
31871
coordinates[25][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[3][2];
31872
coordinates[26][0] = 0.500000000000000*x[1][0] + 0.500000000000000*x[2][0];
31873
coordinates[26][1] = 0.500000000000000*x[1][1] + 0.500000000000000*x[2][1];
31874
coordinates[26][2] = 0.500000000000000*x[1][2] + 0.500000000000000*x[2][2];
31875
coordinates[27][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[3][0];
31876
coordinates[27][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[3][1];
31877
coordinates[27][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[3][2];
31878
coordinates[28][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[2][0];
31879
coordinates[28][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[2][1];
31880
coordinates[28][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[2][2];
31881
coordinates[29][0] = 0.500000000000000*x[0][0] + 0.500000000000000*x[1][0];
31882
coordinates[29][1] = 0.500000000000000*x[0][1] + 0.500000000000000*x[1][1];
31883
coordinates[29][2] = 0.500000000000000*x[0][2] + 0.500000000000000*x[1][2];
31884
coordinates[30][0] = x[0][0];
31885
coordinates[30][1] = x[0][1];
31886
coordinates[30][2] = x[0][2];
31887
coordinates[31][0] = x[1][0];
31888
coordinates[31][1] = x[1][1];
31889
coordinates[31][2] = x[1][2];
31890
coordinates[32][0] = x[2][0];
31891
coordinates[32][1] = x[2][1];
31892
coordinates[32][2] = x[2][2];
31893
coordinates[33][0] = x[3][0];
31894
coordinates[33][1] = x[3][1];
31895
coordinates[33][2] = x[3][2];
31898
/// Return the number of sub dofmaps (for a mixed element)
31899
virtual unsigned int num_sub_dofmaps() const
31904
/// Create a new dofmap for sub dofmap i (for a mixed element)
31905
virtual ufc::dofmap* create_sub_dofmap(unsigned int i) const
31911
return new stokes_dofmap_1();
31916
return new stokes_dofmap_2();
31924
/// Create a new class instance
31925
virtual ufc::dofmap* create() const
31927
return new stokes_dofmap_3();
31932
/// This class defines the interface for the tabulation of the cell
31933
/// tensor corresponding to the local contribution to a form from
31934
/// the integral over a cell.
31936
class stokes_cell_integral_0_0: public ufc::cell_integral
31941
stokes_cell_integral_0_0() : ufc::cell_integral()
31947
virtual ~stokes_cell_integral_0_0()
31952
/// Tabulate the tensor for the contribution from a local cell
31953
virtual void tabulate_tensor(double* A,
31954
const double * const * w,
31955
const ufc::cell& c) const
31957
// Number of operations (multiply-add pairs) for Jacobian data: 32
31958
// Number of operations (multiply-add pairs) for geometry tensor: 139
31959
// Number of operations (multiply-add pairs) for tensor contraction: 3627
31960
// Total number of operations (multiply-add pairs): 3798
31962
// Extract vertex coordinates
31963
const double * const * x = c.coordinates;
31965
// Compute Jacobian of affine map from reference cell
31966
const double J_00 = x[1][0] - x[0][0];
31967
const double J_01 = x[2][0] - x[0][0];
31968
const double J_02 = x[3][0] - x[0][0];
31969
const double J_10 = x[1][1] - x[0][1];
31970
const double J_11 = x[2][1] - x[0][1];
31971
const double J_12 = x[3][1] - x[0][1];
31972
const double J_20 = x[1][2] - x[0][2];
31973
const double J_21 = x[2][2] - x[0][2];
31974
const double J_22 = x[3][2] - x[0][2];
31976
// Compute sub determinants
31977
const double d_00 = J_11*J_22 - J_12*J_21;
31978
const double d_01 = J_12*J_20 - J_10*J_22;
31979
const double d_02 = J_10*J_21 - J_11*J_20;
31980
const double d_10 = J_02*J_21 - J_01*J_22;
31981
const double d_11 = J_00*J_22 - J_02*J_20;
31982
const double d_12 = J_01*J_20 - J_00*J_21;
31983
const double d_20 = J_01*J_12 - J_02*J_11;
31984
const double d_21 = J_02*J_10 - J_00*J_12;
31985
const double d_22 = J_00*J_11 - J_01*J_10;
31987
// Compute determinant of Jacobian
31988
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
31990
// Compute inverse of Jacobian
31991
const double K_00 = d_00 / detJ;
31992
const double K_01 = d_10 / detJ;
31993
const double K_02 = d_20 / detJ;
31994
const double K_10 = d_01 / detJ;
31995
const double K_11 = d_11 / detJ;
31996
const double K_12 = d_21 / detJ;
31997
const double K_20 = d_02 / detJ;
31998
const double K_21 = d_12 / detJ;
31999
const double K_22 = d_22 / detJ;
32001
// Set scale factor
32002
const double det = std::abs(detJ);
32004
// Compute geometry tensor
32005
const double G0_0 = det*K_02*(1.0);
32006
const double G0_1 = det*K_12*(1.0);
32007
const double G0_2 = det*K_22*(1.0);
32008
const double G1_0 = det*K_00*(1.0);
32009
const double G1_1 = det*K_10*(1.0);
32010
const double G1_2 = det*K_20*(1.0);
32011
const double G2_0 = det*K_01*(1.0);
32012
const double G2_1 = det*K_11*(1.0);
32013
const double G2_2 = det*K_21*(1.0);
32014
const double G3_0 = det*K_02*(1.0);
32015
const double G3_1 = det*K_12*(1.0);
32016
const double G3_2 = det*K_22*(1.0);
32017
const double G4_0 = det*K_00*(1.0);
32018
const double G4_1 = det*K_10*(1.0);
32019
const double G4_2 = det*K_20*(1.0);
32020
const double G5_0 = det*K_01*(1.0);
32021
const double G5_1 = det*K_11*(1.0);
32022
const double G5_2 = det*K_21*(1.0);
32023
const double G6_0_0 = det*K_02*K_02*(1.0);
32024
const double G6_0_1 = det*K_02*K_12*(1.0);
32025
const double G6_0_2 = det*K_02*K_22*(1.0);
32026
const double G6_1_0 = det*K_12*K_02*(1.0);
32027
const double G6_1_1 = det*K_12*K_12*(1.0);
32028
const double G6_1_2 = det*K_12*K_22*(1.0);
32029
const double G6_2_0 = det*K_22*K_02*(1.0);
32030
const double G6_2_1 = det*K_22*K_12*(1.0);
32031
const double G6_2_2 = det*K_22*K_22*(1.0);
32032
const double G7_0_0 = det*K_02*K_02*(1.0);
32033
const double G7_0_1 = det*K_02*K_12*(1.0);
32034
const double G7_0_2 = det*K_02*K_22*(1.0);
32035
const double G7_1_0 = det*K_12*K_02*(1.0);
32036
const double G7_1_1 = det*K_12*K_12*(1.0);
32037
const double G7_1_2 = det*K_12*K_22*(1.0);
32038
const double G7_2_0 = det*K_22*K_02*(1.0);
32039
const double G7_2_1 = det*K_22*K_12*(1.0);
32040
const double G7_2_2 = det*K_22*K_22*(1.0);
32041
const double G8_0_0 = det*K_02*K_02*(1.0);
32042
const double G8_0_1 = det*K_02*K_12*(1.0);
32043
const double G8_0_2 = det*K_02*K_22*(1.0);
32044
const double G8_1_0 = det*K_12*K_02*(1.0);
32045
const double G8_1_1 = det*K_12*K_12*(1.0);
32046
const double G8_1_2 = det*K_12*K_22*(1.0);
32047
const double G8_2_0 = det*K_22*K_02*(1.0);
32048
const double G8_2_1 = det*K_22*K_12*(1.0);
32049
const double G8_2_2 = det*K_22*K_22*(1.0);
32050
const double G9_0_0 = det*K_00*K_00*(1.0);
32051
const double G9_0_1 = det*K_00*K_10*(1.0);
32052
const double G9_0_2 = det*K_00*K_20*(1.0);
32053
const double G9_1_0 = det*K_10*K_00*(1.0);
32054
const double G9_1_1 = det*K_10*K_10*(1.0);
32055
const double G9_1_2 = det*K_10*K_20*(1.0);
32056
const double G9_2_0 = det*K_20*K_00*(1.0);
32057
const double G9_2_1 = det*K_20*K_10*(1.0);
32058
const double G9_2_2 = det*K_20*K_20*(1.0);
32059
const double G10_0_0 = det*K_00*K_00*(1.0);
32060
const double G10_0_1 = det*K_00*K_10*(1.0);
32061
const double G10_0_2 = det*K_00*K_20*(1.0);
32062
const double G10_1_0 = det*K_10*K_00*(1.0);
32063
const double G10_1_1 = det*K_10*K_10*(1.0);
32064
const double G10_1_2 = det*K_10*K_20*(1.0);
32065
const double G10_2_0 = det*K_20*K_00*(1.0);
32066
const double G10_2_1 = det*K_20*K_10*(1.0);
32067
const double G10_2_2 = det*K_20*K_20*(1.0);
32068
const double G11_0_0 = det*K_00*K_00*(1.0);
32069
const double G11_0_1 = det*K_00*K_10*(1.0);
32070
const double G11_0_2 = det*K_00*K_20*(1.0);
32071
const double G11_1_0 = det*K_10*K_00*(1.0);
32072
const double G11_1_1 = det*K_10*K_10*(1.0);
32073
const double G11_1_2 = det*K_10*K_20*(1.0);
32074
const double G11_2_0 = det*K_20*K_00*(1.0);
32075
const double G11_2_1 = det*K_20*K_10*(1.0);
32076
const double G11_2_2 = det*K_20*K_20*(1.0);
32077
const double G12_0_0 = det*K_01*K_01*(1.0);
32078
const double G12_0_1 = det*K_01*K_11*(1.0);
32079
const double G12_0_2 = det*K_01*K_21*(1.0);
32080
const double G12_1_0 = det*K_11*K_01*(1.0);
32081
const double G12_1_1 = det*K_11*K_11*(1.0);
32082
const double G12_1_2 = det*K_11*K_21*(1.0);
32083
const double G12_2_0 = det*K_21*K_01*(1.0);
32084
const double G12_2_1 = det*K_21*K_11*(1.0);
32085
const double G12_2_2 = det*K_21*K_21*(1.0);
32086
const double G13_0_0 = det*K_01*K_01*(1.0);
32087
const double G13_0_1 = det*K_01*K_11*(1.0);
32088
const double G13_0_2 = det*K_01*K_21*(1.0);
32089
const double G13_1_0 = det*K_11*K_01*(1.0);
32090
const double G13_1_1 = det*K_11*K_11*(1.0);
32091
const double G13_1_2 = det*K_11*K_21*(1.0);
32092
const double G13_2_0 = det*K_21*K_01*(1.0);
32093
const double G13_2_1 = det*K_21*K_11*(1.0);
32094
const double G13_2_2 = det*K_21*K_21*(1.0);
32095
const double G14_0_0 = det*K_01*K_01*(1.0);
32096
const double G14_0_1 = det*K_01*K_11*(1.0);
32097
const double G14_0_2 = det*K_01*K_21*(1.0);
32098
const double G14_1_0 = det*K_11*K_01*(1.0);
32099
const double G14_1_1 = det*K_11*K_11*(1.0);
32100
const double G14_1_2 = det*K_11*K_21*(1.0);
32101
const double G14_2_0 = det*K_21*K_01*(1.0);
32102
const double G14_2_1 = det*K_21*K_11*(1.0);
32103
const double G14_2_2 = det*K_21*K_21*(1.0);
32105
// Compute element tensor
32106
A[0] = 0.100000000000000*G7_0_0 + 0.100000000000000*G7_0_1 + 0.100000000000000*G7_0_2 + 0.100000000000000*G7_1_0 + 0.100000000000000*G7_1_1 + 0.100000000000000*G7_1_2 + 0.100000000000000*G7_2_0 + 0.100000000000000*G7_2_1 + 0.100000000000000*G7_2_2 + 0.100000000000000*G10_0_0 + 0.100000000000000*G10_0_1 + 0.100000000000000*G10_0_2 + 0.100000000000000*G10_1_0 + 0.100000000000000*G10_1_1 + 0.100000000000000*G10_1_2 + 0.100000000000000*G10_2_0 + 0.100000000000000*G10_2_1 + 0.100000000000000*G10_2_2 + 0.100000000000000*G13_0_0 + 0.100000000000000*G13_0_1 + 0.100000000000000*G13_0_2 + 0.100000000000000*G13_1_0 + 0.100000000000000*G13_1_1 + 0.100000000000000*G13_1_2 + 0.100000000000000*G13_2_0 + 0.100000000000000*G13_2_1 + 0.100000000000000*G13_2_2;
32107
A[1] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_1_0 + 0.033333333333333*G7_2_0 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_2_0 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_2_0;
32108
A[2] = 0.033333333333333*G7_0_1 + 0.033333333333333*G7_1_1 + 0.033333333333333*G7_2_1 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_2_1 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_2_1;
32109
A[3] = 0.033333333333333*G7_0_2 + 0.033333333333333*G7_1_2 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_0_2 + 0.033333333333333*G10_1_2 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_0_2 + 0.033333333333333*G13_1_2 + 0.033333333333333*G13_2_2;
32110
A[4] = 0.033333333333333*G7_0_1 + 0.033333333333333*G7_0_2 + 0.033333333333333*G7_1_1 + 0.033333333333333*G7_1_2 + 0.033333333333333*G7_2_1 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_0_2 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_1_2 + 0.033333333333333*G10_2_1 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_0_2 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_1_2 + 0.033333333333333*G13_2_1 + 0.033333333333333*G13_2_2;
32111
A[5] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_2 + 0.033333333333333*G7_1_0 + 0.033333333333333*G7_1_2 + 0.033333333333333*G7_2_0 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_2 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_1_2 + 0.033333333333333*G10_2_0 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_2 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_1_2 + 0.033333333333333*G13_2_0 + 0.033333333333333*G13_2_2;
32112
A[6] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_1 + 0.033333333333333*G7_1_0 + 0.033333333333333*G7_1_1 + 0.033333333333333*G7_2_0 + 0.033333333333333*G7_2_1 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_2_0 + 0.033333333333333*G10_2_1 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_2_0 + 0.033333333333333*G13_2_1;
32113
A[7] = -0.033333333333333*G7_0_0 - 0.033333333333333*G7_0_1 - 0.133333333333333*G7_0_2 - 0.033333333333333*G7_1_0 - 0.033333333333333*G7_1_1 - 0.133333333333333*G7_1_2 - 0.033333333333333*G7_2_0 - 0.033333333333333*G7_2_1 - 0.133333333333333*G7_2_2 - 0.033333333333333*G10_0_0 - 0.033333333333333*G10_0_1 - 0.133333333333333*G10_0_2 - 0.033333333333333*G10_1_0 - 0.033333333333333*G10_1_1 - 0.133333333333333*G10_1_2 - 0.033333333333333*G10_2_0 - 0.033333333333333*G10_2_1 - 0.133333333333333*G10_2_2 - 0.033333333333333*G13_0_0 - 0.033333333333333*G13_0_1 - 0.133333333333333*G13_0_2 - 0.033333333333333*G13_1_0 - 0.033333333333333*G13_1_1 - 0.133333333333333*G13_1_2 - 0.033333333333333*G13_2_0 - 0.033333333333333*G13_2_1 - 0.133333333333333*G13_2_2;
32114
A[8] = -0.033333333333333*G7_0_0 - 0.133333333333333*G7_0_1 - 0.033333333333333*G7_0_2 - 0.033333333333333*G7_1_0 - 0.133333333333333*G7_1_1 - 0.033333333333333*G7_1_2 - 0.033333333333333*G7_2_0 - 0.133333333333333*G7_2_1 - 0.033333333333333*G7_2_2 - 0.033333333333333*G10_0_0 - 0.133333333333333*G10_0_1 - 0.033333333333333*G10_0_2 - 0.033333333333333*G10_1_0 - 0.133333333333333*G10_1_1 - 0.033333333333333*G10_1_2 - 0.033333333333333*G10_2_0 - 0.133333333333333*G10_2_1 - 0.033333333333333*G10_2_2 - 0.033333333333333*G13_0_0 - 0.133333333333333*G13_0_1 - 0.033333333333333*G13_0_2 - 0.033333333333333*G13_1_0 - 0.133333333333333*G13_1_1 - 0.033333333333333*G13_1_2 - 0.033333333333333*G13_2_0 - 0.133333333333333*G13_2_1 - 0.033333333333333*G13_2_2;
32115
A[9] = -0.133333333333333*G7_0_0 - 0.033333333333333*G7_0_1 - 0.033333333333333*G7_0_2 - 0.133333333333333*G7_1_0 - 0.033333333333333*G7_1_1 - 0.033333333333333*G7_1_2 - 0.133333333333333*G7_2_0 - 0.033333333333333*G7_2_1 - 0.033333333333333*G7_2_2 - 0.133333333333333*G10_0_0 - 0.033333333333333*G10_0_1 - 0.033333333333333*G10_0_2 - 0.133333333333333*G10_1_0 - 0.033333333333333*G10_1_1 - 0.033333333333333*G10_1_2 - 0.133333333333333*G10_2_0 - 0.033333333333333*G10_2_1 - 0.033333333333333*G10_2_2 - 0.133333333333333*G13_0_0 - 0.033333333333333*G13_0_1 - 0.033333333333333*G13_0_2 - 0.133333333333333*G13_1_0 - 0.033333333333333*G13_1_1 - 0.033333333333333*G13_1_2 - 0.133333333333333*G13_2_0 - 0.033333333333333*G13_2_1 - 0.033333333333333*G13_2_2;
32116
A[10] = 0.000000000000000;
32117
A[11] = 0.000000000000000;
32118
A[12] = 0.000000000000000;
32119
A[13] = 0.000000000000000;
32120
A[14] = 0.000000000000000;
32121
A[15] = 0.000000000000000;
32122
A[16] = 0.000000000000000;
32123
A[17] = 0.000000000000000;
32124
A[18] = 0.000000000000000;
32125
A[19] = 0.000000000000000;
32126
A[20] = 0.000000000000000;
32127
A[21] = 0.000000000000000;
32128
A[22] = 0.000000000000000;
32129
A[23] = 0.000000000000000;
32130
A[24] = 0.000000000000000;
32131
A[25] = 0.000000000000000;
32132
A[26] = 0.000000000000000;
32133
A[27] = 0.000000000000000;
32134
A[28] = 0.000000000000000;
32135
A[29] = 0.000000000000000;
32136
A[30] = -0.025000000000000*G4_0 - 0.025000000000000*G4_1 - 0.025000000000000*G4_2;
32137
A[31] = 0.008333333333333*G4_0 + 0.008333333333333*G4_1 + 0.008333333333333*G4_2;
32138
A[32] = 0.008333333333333*G4_0 + 0.008333333333333*G4_1 + 0.008333333333333*G4_2;
32139
A[33] = 0.008333333333333*G4_0 + 0.008333333333333*G4_1 + 0.008333333333333*G4_2;
32140
A[34] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_1 + 0.033333333333333*G7_0_2 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_0_2 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_0_2;
32141
A[35] = 0.100000000000000*G7_0_0 + 0.100000000000000*G10_0_0 + 0.100000000000000*G13_0_0;
32142
A[36] = -0.033333333333333*G7_0_1 - 0.033333333333333*G10_0_1 - 0.033333333333333*G13_0_1;
32143
A[37] = -0.033333333333333*G7_0_2 - 0.033333333333333*G10_0_2 - 0.033333333333333*G13_0_2;
32144
A[38] = -0.033333333333333*G7_0_1 - 0.033333333333333*G7_0_2 - 0.033333333333333*G10_0_1 - 0.033333333333333*G10_0_2 - 0.033333333333333*G13_0_1 - 0.033333333333333*G13_0_2;
32145
A[39] = -0.033333333333333*G7_0_0 + 0.100000000000000*G7_0_2 - 0.033333333333333*G10_0_0 + 0.100000000000000*G10_0_2 - 0.033333333333333*G13_0_0 + 0.100000000000000*G13_0_2;
32146
A[40] = -0.033333333333333*G7_0_0 + 0.100000000000000*G7_0_1 - 0.033333333333333*G10_0_0 + 0.100000000000000*G10_0_1 - 0.033333333333333*G13_0_0 + 0.100000000000000*G13_0_1;
32147
A[41] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_1 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_1 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_1;
32148
A[42] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_2 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_2 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_2;
32149
A[43] = -0.133333333333333*G7_0_0 - 0.100000000000000*G7_0_1 - 0.100000000000000*G7_0_2 - 0.133333333333333*G10_0_0 - 0.100000000000000*G10_0_1 - 0.100000000000000*G10_0_2 - 0.133333333333333*G13_0_0 - 0.100000000000000*G13_0_1 - 0.100000000000000*G13_0_2;
32150
A[44] = 0.000000000000000;
32151
A[45] = 0.000000000000000;
32152
A[46] = 0.000000000000000;
32153
A[47] = 0.000000000000000;
32154
A[48] = 0.000000000000000;
32155
A[49] = 0.000000000000000;
32156
A[50] = 0.000000000000000;
32157
A[51] = 0.000000000000000;
32158
A[52] = 0.000000000000000;
32159
A[53] = 0.000000000000000;
32160
A[54] = 0.000000000000000;
32161
A[55] = 0.000000000000000;
32162
A[56] = 0.000000000000000;
32163
A[57] = 0.000000000000000;
32164
A[58] = 0.000000000000000;
32165
A[59] = 0.000000000000000;
32166
A[60] = 0.000000000000000;
32167
A[61] = 0.000000000000000;
32168
A[62] = 0.000000000000000;
32169
A[63] = 0.000000000000000;
32170
A[64] = -0.008333333333333*G4_0;
32171
A[65] = 0.025000000000000*G4_0;
32172
A[66] = -0.008333333333333*G4_0;
32173
A[67] = -0.008333333333333*G4_0;
32174
A[68] = 0.033333333333333*G7_1_0 + 0.033333333333333*G7_1_1 + 0.033333333333333*G7_1_2 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_1_2 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_1_2;
32175
A[69] = -0.033333333333333*G7_1_0 - 0.033333333333333*G10_1_0 - 0.033333333333333*G13_1_0;
32176
A[70] = 0.100000000000000*G7_1_1 + 0.100000000000000*G10_1_1 + 0.100000000000000*G13_1_1;
32177
A[71] = -0.033333333333333*G7_1_2 - 0.033333333333333*G10_1_2 - 0.033333333333333*G13_1_2;
32178
A[72] = -0.033333333333333*G7_1_1 + 0.100000000000000*G7_1_2 - 0.033333333333333*G10_1_1 + 0.100000000000000*G10_1_2 - 0.033333333333333*G13_1_1 + 0.100000000000000*G13_1_2;
32179
A[73] = -0.033333333333333*G7_1_0 - 0.033333333333333*G7_1_2 - 0.033333333333333*G10_1_0 - 0.033333333333333*G10_1_2 - 0.033333333333333*G13_1_0 - 0.033333333333333*G13_1_2;
32180
A[74] = 0.100000000000000*G7_1_0 - 0.033333333333333*G7_1_1 + 0.100000000000000*G10_1_0 - 0.033333333333333*G10_1_1 + 0.100000000000000*G13_1_0 - 0.033333333333333*G13_1_1;
32181
A[75] = 0.033333333333333*G7_1_0 + 0.033333333333333*G7_1_1 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_1_1 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_1_1;
32182
A[76] = -0.100000000000000*G7_1_0 - 0.133333333333333*G7_1_1 - 0.100000000000000*G7_1_2 - 0.100000000000000*G10_1_0 - 0.133333333333333*G10_1_1 - 0.100000000000000*G10_1_2 - 0.100000000000000*G13_1_0 - 0.133333333333333*G13_1_1 - 0.100000000000000*G13_1_2;
32183
A[77] = 0.033333333333333*G7_1_1 + 0.033333333333333*G7_1_2 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_1_2 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_1_2;
32184
A[78] = 0.000000000000000;
32185
A[79] = 0.000000000000000;
32186
A[80] = 0.000000000000000;
32187
A[81] = 0.000000000000000;
32188
A[82] = 0.000000000000000;
32189
A[83] = 0.000000000000000;
32190
A[84] = 0.000000000000000;
32191
A[85] = 0.000000000000000;
32192
A[86] = 0.000000000000000;
32193
A[87] = 0.000000000000000;
32194
A[88] = 0.000000000000000;
32195
A[89] = 0.000000000000000;
32196
A[90] = 0.000000000000000;
32197
A[91] = 0.000000000000000;
32198
A[92] = 0.000000000000000;
32199
A[93] = 0.000000000000000;
32200
A[94] = 0.000000000000000;
32201
A[95] = 0.000000000000000;
32202
A[96] = 0.000000000000000;
32203
A[97] = 0.000000000000000;
32204
A[98] = -0.008333333333333*G4_1;
32205
A[99] = -0.008333333333333*G4_1;
32206
A[100] = 0.025000000000000*G4_1;
32207
A[101] = -0.008333333333333*G4_1;
32208
A[102] = 0.033333333333333*G7_2_0 + 0.033333333333333*G7_2_1 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_2_0 + 0.033333333333333*G10_2_1 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_2_0 + 0.033333333333333*G13_2_1 + 0.033333333333333*G13_2_2;
32209
A[103] = -0.033333333333333*G7_2_0 - 0.033333333333333*G10_2_0 - 0.033333333333333*G13_2_0;
32210
A[104] = -0.033333333333333*G7_2_1 - 0.033333333333333*G10_2_1 - 0.033333333333333*G13_2_1;
32211
A[105] = 0.100000000000000*G7_2_2 + 0.100000000000000*G10_2_2 + 0.100000000000000*G13_2_2;
32212
A[106] = 0.100000000000000*G7_2_1 - 0.033333333333333*G7_2_2 + 0.100000000000000*G10_2_1 - 0.033333333333333*G10_2_2 + 0.100000000000000*G13_2_1 - 0.033333333333333*G13_2_2;
32213
A[107] = 0.100000000000000*G7_2_0 - 0.033333333333333*G7_2_2 + 0.100000000000000*G10_2_0 - 0.033333333333333*G10_2_2 + 0.100000000000000*G13_2_0 - 0.033333333333333*G13_2_2;
32214
A[108] = -0.033333333333333*G7_2_0 - 0.033333333333333*G7_2_1 - 0.033333333333333*G10_2_0 - 0.033333333333333*G10_2_1 - 0.033333333333333*G13_2_0 - 0.033333333333333*G13_2_1;
32215
A[109] = -0.100000000000000*G7_2_0 - 0.100000000000000*G7_2_1 - 0.133333333333333*G7_2_2 - 0.100000000000000*G10_2_0 - 0.100000000000000*G10_2_1 - 0.133333333333333*G10_2_2 - 0.100000000000000*G13_2_0 - 0.100000000000000*G13_2_1 - 0.133333333333333*G13_2_2;
32216
A[110] = 0.033333333333333*G7_2_0 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_2_0 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_2_0 + 0.033333333333333*G13_2_2;
32217
A[111] = 0.033333333333333*G7_2_1 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_2_1 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_2_1 + 0.033333333333333*G13_2_2;
32218
A[112] = 0.000000000000000;
32219
A[113] = 0.000000000000000;
32220
A[114] = 0.000000000000000;
32221
A[115] = 0.000000000000000;
32222
A[116] = 0.000000000000000;
32223
A[117] = 0.000000000000000;
32224
A[118] = 0.000000000000000;
32225
A[119] = 0.000000000000000;
32226
A[120] = 0.000000000000000;
32227
A[121] = 0.000000000000000;
32228
A[122] = 0.000000000000000;
32229
A[123] = 0.000000000000000;
32230
A[124] = 0.000000000000000;
32231
A[125] = 0.000000000000000;
32232
A[126] = 0.000000000000000;
32233
A[127] = 0.000000000000000;
32234
A[128] = 0.000000000000000;
32235
A[129] = 0.000000000000000;
32236
A[130] = 0.000000000000000;
32237
A[131] = 0.000000000000000;
32238
A[132] = -0.008333333333333*G4_2;
32239
A[133] = -0.008333333333333*G4_2;
32240
A[134] = -0.008333333333333*G4_2;
32241
A[135] = 0.025000000000000*G4_2;
32242
A[136] = 0.033333333333333*G7_1_0 + 0.033333333333333*G7_1_1 + 0.033333333333333*G7_1_2 + 0.033333333333333*G7_2_0 + 0.033333333333333*G7_2_1 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_1_2 + 0.033333333333333*G10_2_0 + 0.033333333333333*G10_2_1 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_1_2 + 0.033333333333333*G13_2_0 + 0.033333333333333*G13_2_1 + 0.033333333333333*G13_2_2;
32243
A[137] = -0.033333333333333*G7_1_0 - 0.033333333333333*G7_2_0 - 0.033333333333333*G10_1_0 - 0.033333333333333*G10_2_0 - 0.033333333333333*G13_1_0 - 0.033333333333333*G13_2_0;
32244
A[138] = -0.033333333333333*G7_1_1 + 0.100000000000000*G7_2_1 - 0.033333333333333*G10_1_1 + 0.100000000000000*G10_2_1 - 0.033333333333333*G13_1_1 + 0.100000000000000*G13_2_1;
32245
A[139] = 0.100000000000000*G7_1_2 - 0.033333333333333*G7_2_2 + 0.100000000000000*G10_1_2 - 0.033333333333333*G10_2_2 + 0.100000000000000*G13_1_2 - 0.033333333333333*G13_2_2;
32246
A[140] = 0.266666666666666*G7_1_1 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_1 + 0.266666666666666*G7_2_2 + 0.266666666666666*G10_1_1 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_1 + 0.266666666666666*G10_2_2 + 0.266666666666666*G13_1_1 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_1 + 0.266666666666666*G13_2_2;
32247
A[141] = 0.266666666666666*G7_1_0 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_0 + 0.133333333333333*G7_2_2 + 0.266666666666666*G10_1_0 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_0 + 0.133333333333333*G10_2_2 + 0.266666666666666*G13_1_0 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_0 + 0.133333333333333*G13_2_2;
32248
A[142] = 0.133333333333333*G7_1_0 + 0.133333333333333*G7_1_1 + 0.266666666666666*G7_2_0 + 0.133333333333333*G7_2_1 + 0.133333333333333*G10_1_0 + 0.133333333333333*G10_1_1 + 0.266666666666666*G10_2_0 + 0.133333333333333*G10_2_1 + 0.133333333333333*G13_1_0 + 0.133333333333333*G13_1_1 + 0.266666666666666*G13_2_0 + 0.133333333333333*G13_2_1;
32249
A[143] = -0.266666666666666*G7_1_0 - 0.266666666666666*G7_1_1 - 0.133333333333333*G7_1_2 - 0.133333333333333*G7_2_0 - 0.133333333333333*G7_2_1 - 0.266666666666666*G10_1_0 - 0.266666666666666*G10_1_1 - 0.133333333333333*G10_1_2 - 0.133333333333333*G10_2_0 - 0.133333333333333*G10_2_1 - 0.266666666666666*G13_1_0 - 0.266666666666666*G13_1_1 - 0.133333333333333*G13_1_2 - 0.133333333333333*G13_2_0 - 0.133333333333333*G13_2_1;
32250
A[144] = -0.133333333333333*G7_1_0 - 0.133333333333333*G7_1_2 - 0.266666666666666*G7_2_0 - 0.133333333333333*G7_2_1 - 0.266666666666666*G7_2_2 - 0.133333333333333*G10_1_0 - 0.133333333333333*G10_1_2 - 0.266666666666666*G10_2_0 - 0.133333333333333*G10_2_1 - 0.266666666666666*G10_2_2 - 0.133333333333333*G13_1_0 - 0.133333333333333*G13_1_2 - 0.266666666666666*G13_2_0 - 0.133333333333333*G13_2_1 - 0.266666666666666*G13_2_2;
32251
A[145] = -0.133333333333333*G7_1_1 - 0.133333333333333*G7_1_2 - 0.133333333333333*G7_2_1 - 0.133333333333333*G7_2_2 - 0.133333333333333*G10_1_1 - 0.133333333333333*G10_1_2 - 0.133333333333333*G10_2_1 - 0.133333333333333*G10_2_2 - 0.133333333333333*G13_1_1 - 0.133333333333333*G13_1_2 - 0.133333333333333*G13_2_1 - 0.133333333333333*G13_2_2;
32252
A[146] = 0.000000000000000;
32253
A[147] = 0.000000000000000;
32254
A[148] = 0.000000000000000;
32255
A[149] = 0.000000000000000;
32256
A[150] = 0.000000000000000;
32257
A[151] = 0.000000000000000;
32258
A[152] = 0.000000000000000;
32259
A[153] = 0.000000000000000;
32260
A[154] = 0.000000000000000;
32261
A[155] = 0.000000000000000;
32262
A[156] = 0.000000000000000;
32263
A[157] = 0.000000000000000;
32264
A[158] = 0.000000000000000;
32265
A[159] = 0.000000000000000;
32266
A[160] = 0.000000000000000;
32267
A[161] = 0.000000000000000;
32268
A[162] = 0.000000000000000;
32269
A[163] = 0.000000000000000;
32270
A[164] = 0.000000000000000;
32271
A[165] = 0.000000000000000;
32272
A[166] = 0.033333333333333*G4_1 + 0.033333333333333*G4_2;
32273
A[167] = 0.033333333333333*G4_1 + 0.033333333333333*G4_2;
32274
A[168] = 0.033333333333333*G4_1 + 0.066666666666666*G4_2;
32275
A[169] = 0.066666666666666*G4_1 + 0.033333333333333*G4_2;
32276
A[170] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_1 + 0.033333333333333*G7_0_2 + 0.033333333333333*G7_2_0 + 0.033333333333333*G7_2_1 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_0_2 + 0.033333333333333*G10_2_0 + 0.033333333333333*G10_2_1 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_0_2 + 0.033333333333333*G13_2_0 + 0.033333333333333*G13_2_1 + 0.033333333333333*G13_2_2;
32277
A[171] = -0.033333333333333*G7_0_0 + 0.100000000000000*G7_2_0 - 0.033333333333333*G10_0_0 + 0.100000000000000*G10_2_0 - 0.033333333333333*G13_0_0 + 0.100000000000000*G13_2_0;
32278
A[172] = -0.033333333333333*G7_0_1 - 0.033333333333333*G7_2_1 - 0.033333333333333*G10_0_1 - 0.033333333333333*G10_2_1 - 0.033333333333333*G13_0_1 - 0.033333333333333*G13_2_1;
32279
A[173] = 0.100000000000000*G7_0_2 - 0.033333333333333*G7_2_2 + 0.100000000000000*G10_0_2 - 0.033333333333333*G10_2_2 + 0.100000000000000*G13_0_2 - 0.033333333333333*G13_2_2;
32280
A[174] = 0.266666666666666*G7_0_1 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_2_1 + 0.133333333333333*G7_2_2 + 0.266666666666666*G10_0_1 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_2_1 + 0.133333333333333*G10_2_2 + 0.266666666666666*G13_0_1 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_2_1 + 0.133333333333333*G13_2_2;
32281
A[175] = 0.266666666666666*G7_0_0 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_2_0 + 0.266666666666666*G7_2_2 + 0.266666666666666*G10_0_0 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_2_0 + 0.266666666666666*G10_2_2 + 0.266666666666666*G13_0_0 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_2_0 + 0.266666666666666*G13_2_2;
32282
A[176] = 0.133333333333333*G7_0_0 + 0.133333333333333*G7_0_1 + 0.133333333333333*G7_2_0 + 0.266666666666666*G7_2_1 + 0.133333333333333*G10_0_0 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_2_0 + 0.266666666666666*G10_2_1 + 0.133333333333333*G13_0_0 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_2_0 + 0.266666666666666*G13_2_1;
32283
A[177] = -0.266666666666666*G7_0_0 - 0.266666666666666*G7_0_1 - 0.133333333333333*G7_0_2 - 0.133333333333333*G7_2_0 - 0.133333333333333*G7_2_1 - 0.266666666666666*G10_0_0 - 0.266666666666666*G10_0_1 - 0.133333333333333*G10_0_2 - 0.133333333333333*G10_2_0 - 0.133333333333333*G10_2_1 - 0.266666666666666*G13_0_0 - 0.266666666666666*G13_0_1 - 0.133333333333333*G13_0_2 - 0.133333333333333*G13_2_0 - 0.133333333333333*G13_2_1;
32284
A[178] = -0.133333333333333*G7_0_0 - 0.133333333333333*G7_0_2 - 0.133333333333333*G7_2_0 - 0.133333333333333*G7_2_2 - 0.133333333333333*G10_0_0 - 0.133333333333333*G10_0_2 - 0.133333333333333*G10_2_0 - 0.133333333333333*G10_2_2 - 0.133333333333333*G13_0_0 - 0.133333333333333*G13_0_2 - 0.133333333333333*G13_2_0 - 0.133333333333333*G13_2_2;
32285
A[179] = -0.133333333333333*G7_0_1 - 0.133333333333333*G7_0_2 - 0.133333333333333*G7_2_0 - 0.266666666666666*G7_2_1 - 0.266666666666666*G7_2_2 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_0_2 - 0.133333333333333*G10_2_0 - 0.266666666666666*G10_2_1 - 0.266666666666666*G10_2_2 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_0_2 - 0.133333333333333*G13_2_0 - 0.266666666666666*G13_2_1 - 0.266666666666666*G13_2_2;
32286
A[180] = 0.000000000000000;
32287
A[181] = 0.000000000000000;
32288
A[182] = 0.000000000000000;
32289
A[183] = 0.000000000000000;
32290
A[184] = 0.000000000000000;
32291
A[185] = 0.000000000000000;
32292
A[186] = 0.000000000000000;
32293
A[187] = 0.000000000000000;
32294
A[188] = 0.000000000000000;
32295
A[189] = 0.000000000000000;
32296
A[190] = 0.000000000000000;
32297
A[191] = 0.000000000000000;
32298
A[192] = 0.000000000000000;
32299
A[193] = 0.000000000000000;
32300
A[194] = 0.000000000000000;
32301
A[195] = 0.000000000000000;
32302
A[196] = 0.000000000000000;
32303
A[197] = 0.000000000000000;
32304
A[198] = 0.000000000000000;
32305
A[199] = 0.000000000000000;
32306
A[200] = 0.033333333333333*G4_0 + 0.033333333333333*G4_2;
32307
A[201] = 0.033333333333333*G4_0 + 0.066666666666667*G4_2;
32308
A[202] = 0.033333333333333*G4_0 + 0.033333333333333*G4_2;
32309
A[203] = 0.066666666666667*G4_0 + 0.033333333333333*G4_2;
32310
A[204] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_0_1 + 0.033333333333333*G7_0_2 + 0.033333333333333*G7_1_0 + 0.033333333333333*G7_1_1 + 0.033333333333333*G7_1_2 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_0_2 + 0.033333333333333*G10_1_0 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_1_2 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_0_2 + 0.033333333333333*G13_1_0 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_1_2;
32311
A[205] = -0.033333333333333*G7_0_0 + 0.100000000000000*G7_1_0 - 0.033333333333333*G10_0_0 + 0.100000000000000*G10_1_0 - 0.033333333333333*G13_0_0 + 0.100000000000000*G13_1_0;
32312
A[206] = 0.100000000000000*G7_0_1 - 0.033333333333333*G7_1_1 + 0.100000000000000*G10_0_1 - 0.033333333333333*G10_1_1 + 0.100000000000000*G13_0_1 - 0.033333333333333*G13_1_1;
32313
A[207] = -0.033333333333333*G7_0_2 - 0.033333333333333*G7_1_2 - 0.033333333333333*G10_0_2 - 0.033333333333333*G10_1_2 - 0.033333333333333*G13_0_2 - 0.033333333333333*G13_1_2;
32314
A[208] = 0.133333333333333*G7_0_1 + 0.266666666666666*G7_0_2 + 0.133333333333333*G7_1_1 + 0.133333333333333*G7_1_2 + 0.133333333333333*G10_0_1 + 0.266666666666666*G10_0_2 + 0.133333333333333*G10_1_1 + 0.133333333333333*G10_1_2 + 0.133333333333333*G13_0_1 + 0.266666666666666*G13_0_2 + 0.133333333333333*G13_1_1 + 0.133333333333333*G13_1_2;
32315
A[209] = 0.133333333333333*G7_0_0 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_1_0 + 0.266666666666666*G7_1_2 + 0.133333333333333*G10_0_0 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_1_0 + 0.266666666666666*G10_1_2 + 0.133333333333333*G13_0_0 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_1_0 + 0.266666666666666*G13_1_2;
32316
A[210] = 0.266666666666666*G7_0_0 + 0.133333333333333*G7_0_1 + 0.133333333333333*G7_1_0 + 0.266666666666666*G7_1_1 + 0.266666666666666*G10_0_0 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_1_0 + 0.266666666666666*G10_1_1 + 0.266666666666666*G13_0_0 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_1_0 + 0.266666666666666*G13_1_1;
32317
A[211] = -0.133333333333333*G7_0_0 - 0.133333333333333*G7_0_1 - 0.133333333333333*G7_1_0 - 0.133333333333333*G7_1_1 - 0.133333333333333*G10_0_0 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_1_0 - 0.133333333333333*G10_1_1 - 0.133333333333333*G13_0_0 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_1_0 - 0.133333333333333*G13_1_1;
32318
A[212] = -0.266666666666666*G7_0_0 - 0.133333333333333*G7_0_1 - 0.266666666666666*G7_0_2 - 0.133333333333333*G7_1_0 - 0.133333333333333*G7_1_2 - 0.266666666666666*G10_0_0 - 0.133333333333333*G10_0_1 - 0.266666666666666*G10_0_2 - 0.133333333333333*G10_1_0 - 0.133333333333333*G10_1_2 - 0.266666666666666*G13_0_0 - 0.133333333333333*G13_0_1 - 0.266666666666666*G13_0_2 - 0.133333333333333*G13_1_0 - 0.133333333333333*G13_1_2;
32319
A[213] = -0.133333333333333*G7_0_1 - 0.133333333333333*G7_0_2 - 0.133333333333333*G7_1_0 - 0.266666666666666*G7_1_1 - 0.266666666666666*G7_1_2 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_0_2 - 0.133333333333333*G10_1_0 - 0.266666666666666*G10_1_1 - 0.266666666666666*G10_1_2 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_0_2 - 0.133333333333333*G13_1_0 - 0.266666666666666*G13_1_1 - 0.266666666666666*G13_1_2;
32320
A[214] = 0.000000000000000;
32321
A[215] = 0.000000000000000;
32322
A[216] = 0.000000000000000;
32323
A[217] = 0.000000000000000;
32324
A[218] = 0.000000000000000;
32325
A[219] = 0.000000000000000;
32326
A[220] = 0.000000000000000;
32327
A[221] = 0.000000000000000;
32328
A[222] = 0.000000000000000;
32329
A[223] = 0.000000000000000;
32330
A[224] = 0.000000000000000;
32331
A[225] = 0.000000000000000;
32332
A[226] = 0.000000000000000;
32333
A[227] = 0.000000000000000;
32334
A[228] = 0.000000000000000;
32335
A[229] = 0.000000000000000;
32336
A[230] = 0.000000000000000;
32337
A[231] = 0.000000000000000;
32338
A[232] = 0.000000000000000;
32339
A[233] = 0.000000000000000;
32340
A[234] = 0.033333333333333*G4_0 + 0.033333333333333*G4_1;
32341
A[235] = 0.033333333333333*G4_0 + 0.066666666666667*G4_1;
32342
A[236] = 0.066666666666666*G4_0 + 0.033333333333333*G4_1;
32343
A[237] = 0.033333333333333*G4_0 + 0.033333333333333*G4_1;
32344
A[238] = -0.033333333333333*G7_0_0 - 0.033333333333333*G7_0_1 - 0.033333333333333*G7_0_2 - 0.033333333333333*G7_1_0 - 0.033333333333333*G7_1_1 - 0.033333333333333*G7_1_2 - 0.133333333333333*G7_2_0 - 0.133333333333333*G7_2_1 - 0.133333333333333*G7_2_2 - 0.033333333333333*G10_0_0 - 0.033333333333333*G10_0_1 - 0.033333333333333*G10_0_2 - 0.033333333333333*G10_1_0 - 0.033333333333333*G10_1_1 - 0.033333333333333*G10_1_2 - 0.133333333333333*G10_2_0 - 0.133333333333333*G10_2_1 - 0.133333333333333*G10_2_2 - 0.033333333333333*G13_0_0 - 0.033333333333333*G13_0_1 - 0.033333333333333*G13_0_2 - 0.033333333333333*G13_1_0 - 0.033333333333333*G13_1_1 - 0.033333333333333*G13_1_2 - 0.133333333333333*G13_2_0 - 0.133333333333333*G13_2_1 - 0.133333333333333*G13_2_2;
32345
A[239] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_1_0 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_1_0 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_1_0;
32346
A[240] = 0.033333333333333*G7_0_1 + 0.033333333333333*G7_1_1 + 0.033333333333333*G10_0_1 + 0.033333333333333*G10_1_1 + 0.033333333333333*G13_0_1 + 0.033333333333333*G13_1_1;
32347
A[241] = -0.100000000000000*G7_0_2 - 0.100000000000000*G7_1_2 - 0.133333333333333*G7_2_2 - 0.100000000000000*G10_0_2 - 0.100000000000000*G10_1_2 - 0.133333333333333*G10_2_2 - 0.100000000000000*G13_0_2 - 0.100000000000000*G13_1_2 - 0.133333333333333*G13_2_2;
32348
A[242] = -0.266666666666666*G7_0_1 - 0.133333333333333*G7_0_2 - 0.266666666666666*G7_1_1 - 0.133333333333333*G7_1_2 - 0.133333333333333*G7_2_1 - 0.266666666666666*G10_0_1 - 0.133333333333333*G10_0_2 - 0.266666666666666*G10_1_1 - 0.133333333333333*G10_1_2 - 0.133333333333333*G10_2_1 - 0.266666666666666*G13_0_1 - 0.133333333333333*G13_0_2 - 0.266666666666666*G13_1_1 - 0.133333333333333*G13_1_2 - 0.133333333333333*G13_2_1;
32349
A[243] = -0.266666666666666*G7_0_0 - 0.133333333333333*G7_0_2 - 0.266666666666666*G7_1_0 - 0.133333333333333*G7_1_2 - 0.133333333333333*G7_2_0 - 0.266666666666666*G10_0_0 - 0.133333333333333*G10_0_2 - 0.266666666666666*G10_1_0 - 0.133333333333333*G10_1_2 - 0.133333333333333*G10_2_0 - 0.266666666666666*G13_0_0 - 0.133333333333333*G13_0_2 - 0.266666666666666*G13_1_0 - 0.133333333333333*G13_1_2 - 0.133333333333333*G13_2_0;
32350
A[244] = -0.133333333333333*G7_0_0 - 0.133333333333333*G7_0_1 - 0.133333333333333*G7_1_0 - 0.133333333333333*G7_1_1 - 0.133333333333333*G10_0_0 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_1_0 - 0.133333333333333*G10_1_1 - 0.133333333333333*G13_0_0 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_1_0 - 0.133333333333333*G13_1_1;
32351
A[245] = 0.266666666666666*G7_0_0 + 0.266666666666666*G7_0_1 + 0.133333333333333*G7_0_2 + 0.266666666666666*G7_1_0 + 0.266666666666666*G7_1_1 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_0 + 0.133333333333333*G7_2_1 + 0.266666666666666*G7_2_2 + 0.266666666666666*G10_0_0 + 0.266666666666666*G10_0_1 + 0.133333333333333*G10_0_2 + 0.266666666666666*G10_1_0 + 0.266666666666666*G10_1_1 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_0 + 0.133333333333333*G10_2_1 + 0.266666666666666*G10_2_2 + 0.266666666666666*G13_0_0 + 0.266666666666666*G13_0_1 + 0.133333333333333*G13_0_2 + 0.266666666666666*G13_1_0 + 0.266666666666666*G13_1_1 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_0 + 0.133333333333333*G13_2_1 + 0.266666666666666*G13_2_2;
32352
A[246] = 0.133333333333333*G7_0_0 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_1_0 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_1 + 0.133333333333333*G10_0_0 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_1_0 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_1 + 0.133333333333333*G13_0_0 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_1_0 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_1;
32353
A[247] = 0.133333333333333*G7_0_1 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_1_1 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_0 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_1_1 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_0 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_1_1 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_0;
32354
A[248] = 0.000000000000000;
32355
A[249] = 0.000000000000000;
32356
A[250] = 0.000000000000000;
32357
A[251] = 0.000000000000000;
32358
A[252] = 0.000000000000000;
32359
A[253] = 0.000000000000000;
32360
A[254] = 0.000000000000000;
32361
A[255] = 0.000000000000000;
32362
A[256] = 0.000000000000000;
32363
A[257] = 0.000000000000000;
32364
A[258] = 0.000000000000000;
32365
A[259] = 0.000000000000000;
32366
A[260] = 0.000000000000000;
32367
A[261] = 0.000000000000000;
32368
A[262] = 0.000000000000000;
32369
A[263] = 0.000000000000000;
32370
A[264] = 0.000000000000000;
32371
A[265] = 0.000000000000000;
32372
A[266] = 0.000000000000000;
32373
A[267] = 0.000000000000000;
32374
A[268] = -0.033333333333333*G4_0 - 0.033333333333333*G4_1 + 0.033333333333333*G4_2;
32375
A[269] = -0.033333333333333*G4_0 - 0.033333333333333*G4_1;
32376
A[270] = -0.033333333333333*G4_0 - 0.033333333333333*G4_1;
32377
A[271] = -0.066666666666667*G4_0 - 0.066666666666666*G4_1 - 0.033333333333333*G4_2;
32378
A[272] = -0.033333333333333*G7_0_0 - 0.033333333333333*G7_0_1 - 0.033333333333333*G7_0_2 - 0.133333333333333*G7_1_0 - 0.133333333333333*G7_1_1 - 0.133333333333333*G7_1_2 - 0.033333333333333*G7_2_0 - 0.033333333333333*G7_2_1 - 0.033333333333333*G7_2_2 - 0.033333333333333*G10_0_0 - 0.033333333333333*G10_0_1 - 0.033333333333333*G10_0_2 - 0.133333333333333*G10_1_0 - 0.133333333333333*G10_1_1 - 0.133333333333333*G10_1_2 - 0.033333333333333*G10_2_0 - 0.033333333333333*G10_2_1 - 0.033333333333333*G10_2_2 - 0.033333333333333*G13_0_0 - 0.033333333333333*G13_0_1 - 0.033333333333333*G13_0_2 - 0.133333333333333*G13_1_0 - 0.133333333333333*G13_1_1 - 0.133333333333333*G13_1_2 - 0.033333333333333*G13_2_0 - 0.033333333333333*G13_2_1 - 0.033333333333333*G13_2_2;
32379
A[273] = 0.033333333333333*G7_0_0 + 0.033333333333333*G7_2_0 + 0.033333333333333*G10_0_0 + 0.033333333333333*G10_2_0 + 0.033333333333333*G13_0_0 + 0.033333333333333*G13_2_0;
32380
A[274] = -0.100000000000000*G7_0_1 - 0.133333333333333*G7_1_1 - 0.100000000000000*G7_2_1 - 0.100000000000000*G10_0_1 - 0.133333333333333*G10_1_1 - 0.100000000000000*G10_2_1 - 0.100000000000000*G13_0_1 - 0.133333333333333*G13_1_1 - 0.100000000000000*G13_2_1;
32381
A[275] = 0.033333333333333*G7_0_2 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_0_2 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_0_2 + 0.033333333333333*G13_2_2;
32382
A[276] = -0.133333333333333*G7_0_1 - 0.266666666666666*G7_0_2 - 0.133333333333333*G7_1_2 - 0.133333333333333*G7_2_1 - 0.266666666666666*G7_2_2 - 0.133333333333333*G10_0_1 - 0.266666666666666*G10_0_2 - 0.133333333333333*G10_1_2 - 0.133333333333333*G10_2_1 - 0.266666666666666*G10_2_2 - 0.133333333333333*G13_0_1 - 0.266666666666666*G13_0_2 - 0.133333333333333*G13_1_2 - 0.133333333333333*G13_2_1 - 0.266666666666666*G13_2_2;
32383
A[277] = -0.133333333333333*G7_0_0 - 0.133333333333333*G7_0_2 - 0.133333333333333*G7_2_0 - 0.133333333333333*G7_2_2 - 0.133333333333333*G10_0_0 - 0.133333333333333*G10_0_2 - 0.133333333333333*G10_2_0 - 0.133333333333333*G10_2_2 - 0.133333333333333*G13_0_0 - 0.133333333333333*G13_0_2 - 0.133333333333333*G13_2_0 - 0.133333333333333*G13_2_2;
32384
A[278] = -0.266666666666666*G7_0_0 - 0.133333333333333*G7_0_1 - 0.133333333333333*G7_1_0 - 0.266666666666666*G7_2_0 - 0.133333333333333*G7_2_1 - 0.266666666666666*G10_0_0 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_1_0 - 0.266666666666666*G10_2_0 - 0.133333333333333*G10_2_1 - 0.266666666666666*G13_0_0 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_1_0 - 0.266666666666666*G13_2_0 - 0.133333333333333*G13_2_1;
32385
A[279] = 0.133333333333333*G7_0_0 + 0.133333333333333*G7_0_1 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_0 + 0.133333333333333*G7_2_1 + 0.133333333333333*G10_0_0 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_0 + 0.133333333333333*G10_2_1 + 0.133333333333333*G13_0_0 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_0 + 0.133333333333333*G13_2_1;
32386
A[280] = 0.266666666666666*G7_0_0 + 0.133333333333333*G7_0_1 + 0.266666666666666*G7_0_2 + 0.133333333333333*G7_1_0 + 0.266666666666666*G7_1_1 + 0.133333333333333*G7_1_2 + 0.266666666666666*G7_2_0 + 0.133333333333333*G7_2_1 + 0.266666666666666*G7_2_2 + 0.266666666666666*G10_0_0 + 0.133333333333333*G10_0_1 + 0.266666666666666*G10_0_2 + 0.133333333333333*G10_1_0 + 0.266666666666666*G10_1_1 + 0.133333333333333*G10_1_2 + 0.266666666666666*G10_2_0 + 0.133333333333333*G10_2_1 + 0.266666666666666*G10_2_2 + 0.266666666666666*G13_0_0 + 0.133333333333333*G13_0_1 + 0.266666666666666*G13_0_2 + 0.133333333333333*G13_1_0 + 0.266666666666666*G13_1_1 + 0.133333333333333*G13_1_2 + 0.266666666666666*G13_2_0 + 0.133333333333333*G13_2_1 + 0.266666666666666*G13_2_2;
32387
A[281] = 0.133333333333333*G7_0_1 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_1_0 + 0.133333333333333*G7_2_1 + 0.133333333333333*G7_2_2 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_1_0 + 0.133333333333333*G10_2_1 + 0.133333333333333*G10_2_2 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_1_0 + 0.133333333333333*G13_2_1 + 0.133333333333333*G13_2_2;
32388
A[282] = 0.000000000000000;
32389
A[283] = 0.000000000000000;
32390
A[284] = 0.000000000000000;
32391
A[285] = 0.000000000000000;
32392
A[286] = 0.000000000000000;
32393
A[287] = 0.000000000000000;
32394
A[288] = 0.000000000000000;
32395
A[289] = 0.000000000000000;
32396
A[290] = 0.000000000000000;
32397
A[291] = 0.000000000000000;
32398
A[292] = 0.000000000000000;
32399
A[293] = 0.000000000000000;
32400
A[294] = 0.000000000000000;
32401
A[295] = 0.000000000000000;
32402
A[296] = 0.000000000000000;
32403
A[297] = 0.000000000000000;
32404
A[298] = 0.000000000000000;
32405
A[299] = 0.000000000000000;
32406
A[300] = 0.000000000000000;
32407
A[301] = 0.000000000000000;
32408
A[302] = -0.033333333333333*G4_0 + 0.033333333333333*G4_1 - 0.033333333333333*G4_2;
32409
A[303] = -0.033333333333333*G4_0 - 0.033333333333333*G4_2;
32410
A[304] = -0.066666666666666*G4_0 - 0.033333333333333*G4_1 - 0.066666666666666*G4_2;
32411
A[305] = -0.033333333333333*G4_0 - 0.033333333333333*G4_2;
32412
A[306] = -0.133333333333333*G7_0_0 - 0.133333333333333*G7_0_1 - 0.133333333333333*G7_0_2 - 0.033333333333333*G7_1_0 - 0.033333333333333*G7_1_1 - 0.033333333333333*G7_1_2 - 0.033333333333333*G7_2_0 - 0.033333333333333*G7_2_1 - 0.033333333333333*G7_2_2 - 0.133333333333333*G10_0_0 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_0_2 - 0.033333333333333*G10_1_0 - 0.033333333333333*G10_1_1 - 0.033333333333333*G10_1_2 - 0.033333333333333*G10_2_0 - 0.033333333333333*G10_2_1 - 0.033333333333333*G10_2_2 - 0.133333333333333*G13_0_0 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_0_2 - 0.033333333333333*G13_1_0 - 0.033333333333333*G13_1_1 - 0.033333333333333*G13_1_2 - 0.033333333333333*G13_2_0 - 0.033333333333333*G13_2_1 - 0.033333333333333*G13_2_2;
32413
A[307] = -0.133333333333333*G7_0_0 - 0.100000000000000*G7_1_0 - 0.100000000000000*G7_2_0 - 0.133333333333333*G10_0_0 - 0.100000000000000*G10_1_0 - 0.100000000000000*G10_2_0 - 0.133333333333333*G13_0_0 - 0.100000000000000*G13_1_0 - 0.100000000000000*G13_2_0;
32414
A[308] = 0.033333333333333*G7_1_1 + 0.033333333333333*G7_2_1 + 0.033333333333333*G10_1_1 + 0.033333333333333*G10_2_1 + 0.033333333333333*G13_1_1 + 0.033333333333333*G13_2_1;
32415
A[309] = 0.033333333333333*G7_1_2 + 0.033333333333333*G7_2_2 + 0.033333333333333*G10_1_2 + 0.033333333333333*G10_2_2 + 0.033333333333333*G13_1_2 + 0.033333333333333*G13_2_2;
32416
A[310] = -0.133333333333333*G7_1_1 - 0.133333333333333*G7_1_2 - 0.133333333333333*G7_2_1 - 0.133333333333333*G7_2_2 - 0.133333333333333*G10_1_1 - 0.133333333333333*G10_1_2 - 0.133333333333333*G10_2_1 - 0.133333333333333*G10_2_2 - 0.133333333333333*G13_1_1 - 0.133333333333333*G13_1_2 - 0.133333333333333*G13_2_1 - 0.133333333333333*G13_2_2;
32417
A[311] = -0.133333333333333*G7_0_2 - 0.133333333333333*G7_1_0 - 0.266666666666666*G7_1_2 - 0.133333333333333*G7_2_0 - 0.266666666666666*G7_2_2 - 0.133333333333333*G10_0_2 - 0.133333333333333*G10_1_0 - 0.266666666666666*G10_1_2 - 0.133333333333333*G10_2_0 - 0.266666666666666*G10_2_2 - 0.133333333333333*G13_0_2 - 0.133333333333333*G13_1_0 - 0.266666666666666*G13_1_2 - 0.133333333333333*G13_2_0 - 0.266666666666666*G13_2_2;
32418
A[312] = -0.133333333333333*G7_0_1 - 0.133333333333333*G7_1_0 - 0.266666666666666*G7_1_1 - 0.133333333333333*G7_2_0 - 0.266666666666666*G7_2_1 - 0.133333333333333*G10_0_1 - 0.133333333333333*G10_1_0 - 0.266666666666666*G10_1_1 - 0.133333333333333*G10_2_0 - 0.266666666666666*G10_2_1 - 0.133333333333333*G13_0_1 - 0.133333333333333*G13_1_0 - 0.266666666666666*G13_1_1 - 0.133333333333333*G13_2_0 - 0.266666666666666*G13_2_1;
32419
A[313] = 0.133333333333333*G7_0_2 + 0.133333333333333*G7_1_0 + 0.133333333333333*G7_1_1 + 0.133333333333333*G7_2_0 + 0.133333333333333*G7_2_1 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_1_0 + 0.133333333333333*G10_1_1 + 0.133333333333333*G10_2_0 + 0.133333333333333*G10_2_1 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_1_0 + 0.133333333333333*G13_1_1 + 0.133333333333333*G13_2_0 + 0.133333333333333*G13_2_1;
32420
A[314] = 0.133333333333333*G7_0_1 + 0.133333333333333*G7_1_0 + 0.133333333333333*G7_1_2 + 0.133333333333333*G7_2_0 + 0.133333333333333*G7_2_2 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_1_0 + 0.133333333333333*G10_1_2 + 0.133333333333333*G10_2_0 + 0.133333333333333*G10_2_2 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_1_0 + 0.133333333333333*G13_1_2 + 0.133333333333333*G13_2_0 + 0.133333333333333*G13_2_2;
32421
A[315] = 0.266666666666666*G7_0_0 + 0.133333333333333*G7_0_1 + 0.133333333333333*G7_0_2 + 0.133333333333333*G7_1_0 + 0.266666666666666*G7_1_1 + 0.266666666666666*G7_1_2 + 0.133333333333333*G7_2_0 + 0.266666666666666*G7_2_1 + 0.266666666666666*G7_2_2 + 0.266666666666666*G10_0_0 + 0.133333333333333*G10_0_1 + 0.133333333333333*G10_0_2 + 0.133333333333333*G10_1_0 + 0.266666666666666*G10_1_1 + 0.266666666666666*G10_1_2 + 0.133333333333333*G10_2_0 + 0.266666666666666*G10_2_1 + 0.266666666666666*G10_2_2 + 0.266666666666666*G13_0_0 + 0.133333333333333*G13_0_1 + 0.133333333333333*G13_0_2 + 0.133333333333333*G13_1_0 + 0.266666666666666*G13_1_1 + 0.266666666666666*G13_1_2 + 0.133333333333333*G13_2_0 + 0.266666666666666*G13_2_1 + 0.266666666666666*G13_2_2;
32422
A[316] = 0.000000000000000;
32423
A[317] = 0.000000000000000;
32424
A[318] = 0.000000000000000;
32425
A[319] = 0.000000000000000;
32426
A[320] = 0.000000000000000;
32427
A[321] = 0.000000000000000;
32428
A[322] = 0.000000000000000;
32429
A[323] = 0.000000000000000;
32430
A[324] = 0.000000000000000;
32431
A[325] = 0.000000000000000;
32432
A[326] = 0.000000000000000;
32433
A[327] = 0.000000000000000;
32434
A[328] = 0.000000000000000;
32435
A[329] = 0.000000000000000;
32436
A[330] = 0.000000000000000;
32437
A[331] = 0.000000000000000;
32438
A[332] = 0.000000000000000;
32439
A[333] = 0.000000000000000;
32440
A[334] = 0.000000000000000;
32441
A[335] = 0.000000000000000;
32442
A[336] = 0.033333333333333*G4_0 - 0.033333333333333*G4_1 - 0.033333333333333*G4_2;
32443
A[337] = -0.033333333333333*G4_0 - 0.066666666666666*G4_1 - 0.066666666666667*G4_2;
32444
A[338] = -0.033333333333333*G4_1 - 0.033333333333333*G4_2;
32445
A[339] = -0.033333333333333*G4_1 - 0.033333333333333*G4_2;
32446
A[340] = 0.000000000000000;
32447
A[341] = 0.000000000000000;
32448
A[342] = 0.000000000000000;
32449
A[343] = 0.000000000000000;
32450
A[344] = 0.000000000000000;
32451
A[345] = 0.000000000000000;
32452
A[346] = 0.000000000000000;
32453
A[347] = 0.000000000000000;
32454
A[348] = 0.000000000000000;
32455
A[349] = 0.000000000000000;
32456
A[350] = 0.100000000000000*G8_0_0 + 0.100000000000000*G8_0_1 + 0.100000000000000*G8_0_2 + 0.100000000000000*G8_1_0 + 0.100000000000000*G8_1_1 + 0.100000000000000*G8_1_2 + 0.100000000000000*G8_2_0 + 0.100000000000000*G8_2_1 + 0.100000000000000*G8_2_2 + 0.100000000000000*G11_0_0 + 0.100000000000000*G11_0_1 + 0.100000000000000*G11_0_2 + 0.100000000000000*G11_1_0 + 0.100000000000000*G11_1_1 + 0.100000000000000*G11_1_2 + 0.100000000000000*G11_2_0 + 0.100000000000000*G11_2_1 + 0.100000000000000*G11_2_2 + 0.100000000000000*G14_0_0 + 0.100000000000000*G14_0_1 + 0.100000000000000*G14_0_2 + 0.100000000000000*G14_1_0 + 0.100000000000000*G14_1_1 + 0.100000000000000*G14_1_2 + 0.100000000000000*G14_2_0 + 0.100000000000000*G14_2_1 + 0.100000000000000*G14_2_2;
32457
A[351] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_1_0 + 0.033333333333333*G8_2_0 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_2_0 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_2_0;
32458
A[352] = 0.033333333333333*G8_0_1 + 0.033333333333333*G8_1_1 + 0.033333333333333*G8_2_1 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_2_1 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_2_1;
32459
A[353] = 0.033333333333333*G8_0_2 + 0.033333333333333*G8_1_2 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_0_2 + 0.033333333333333*G11_1_2 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_0_2 + 0.033333333333333*G14_1_2 + 0.033333333333333*G14_2_2;
32460
A[354] = 0.033333333333333*G8_0_1 + 0.033333333333333*G8_0_2 + 0.033333333333333*G8_1_1 + 0.033333333333333*G8_1_2 + 0.033333333333333*G8_2_1 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_0_2 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_1_2 + 0.033333333333333*G11_2_1 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_0_2 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_1_2 + 0.033333333333333*G14_2_1 + 0.033333333333333*G14_2_2;
32461
A[355] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_2 + 0.033333333333333*G8_1_0 + 0.033333333333333*G8_1_2 + 0.033333333333333*G8_2_0 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_2 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_1_2 + 0.033333333333333*G11_2_0 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_2 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_1_2 + 0.033333333333333*G14_2_0 + 0.033333333333333*G14_2_2;
32462
A[356] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_1 + 0.033333333333333*G8_1_0 + 0.033333333333333*G8_1_1 + 0.033333333333333*G8_2_0 + 0.033333333333333*G8_2_1 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_2_0 + 0.033333333333333*G11_2_1 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_2_0 + 0.033333333333333*G14_2_1;
32463
A[357] = -0.033333333333333*G8_0_0 - 0.033333333333333*G8_0_1 - 0.133333333333333*G8_0_2 - 0.033333333333333*G8_1_0 - 0.033333333333333*G8_1_1 - 0.133333333333333*G8_1_2 - 0.033333333333333*G8_2_0 - 0.033333333333333*G8_2_1 - 0.133333333333333*G8_2_2 - 0.033333333333333*G11_0_0 - 0.033333333333333*G11_0_1 - 0.133333333333333*G11_0_2 - 0.033333333333333*G11_1_0 - 0.033333333333333*G11_1_1 - 0.133333333333333*G11_1_2 - 0.033333333333333*G11_2_0 - 0.033333333333333*G11_2_1 - 0.133333333333333*G11_2_2 - 0.033333333333333*G14_0_0 - 0.033333333333333*G14_0_1 - 0.133333333333333*G14_0_2 - 0.033333333333333*G14_1_0 - 0.033333333333333*G14_1_1 - 0.133333333333333*G14_1_2 - 0.033333333333333*G14_2_0 - 0.033333333333333*G14_2_1 - 0.133333333333333*G14_2_2;
32464
A[358] = -0.033333333333333*G8_0_0 - 0.133333333333333*G8_0_1 - 0.033333333333333*G8_0_2 - 0.033333333333333*G8_1_0 - 0.133333333333333*G8_1_1 - 0.033333333333333*G8_1_2 - 0.033333333333333*G8_2_0 - 0.133333333333333*G8_2_1 - 0.033333333333333*G8_2_2 - 0.033333333333333*G11_0_0 - 0.133333333333333*G11_0_1 - 0.033333333333333*G11_0_2 - 0.033333333333333*G11_1_0 - 0.133333333333333*G11_1_1 - 0.033333333333333*G11_1_2 - 0.033333333333333*G11_2_0 - 0.133333333333333*G11_2_1 - 0.033333333333333*G11_2_2 - 0.033333333333333*G14_0_0 - 0.133333333333333*G14_0_1 - 0.033333333333333*G14_0_2 - 0.033333333333333*G14_1_0 - 0.133333333333333*G14_1_1 - 0.033333333333333*G14_1_2 - 0.033333333333333*G14_2_0 - 0.133333333333333*G14_2_1 - 0.033333333333333*G14_2_2;
32465
A[359] = -0.133333333333333*G8_0_0 - 0.033333333333333*G8_0_1 - 0.033333333333333*G8_0_2 - 0.133333333333333*G8_1_0 - 0.033333333333333*G8_1_1 - 0.033333333333333*G8_1_2 - 0.133333333333333*G8_2_0 - 0.033333333333333*G8_2_1 - 0.033333333333333*G8_2_2 - 0.133333333333333*G11_0_0 - 0.033333333333333*G11_0_1 - 0.033333333333333*G11_0_2 - 0.133333333333333*G11_1_0 - 0.033333333333333*G11_1_1 - 0.033333333333333*G11_1_2 - 0.133333333333333*G11_2_0 - 0.033333333333333*G11_2_1 - 0.033333333333333*G11_2_2 - 0.133333333333333*G14_0_0 - 0.033333333333333*G14_0_1 - 0.033333333333333*G14_0_2 - 0.133333333333333*G14_1_0 - 0.033333333333333*G14_1_1 - 0.033333333333333*G14_1_2 - 0.133333333333333*G14_2_0 - 0.033333333333333*G14_2_1 - 0.033333333333333*G14_2_2;
32466
A[360] = 0.000000000000000;
32467
A[361] = 0.000000000000000;
32468
A[362] = 0.000000000000000;
32469
A[363] = 0.000000000000000;
32470
A[364] = 0.000000000000000;
32471
A[365] = 0.000000000000000;
32472
A[366] = 0.000000000000000;
32473
A[367] = 0.000000000000000;
32474
A[368] = 0.000000000000000;
32475
A[369] = 0.000000000000000;
32476
A[370] = -0.025000000000000*G5_0 - 0.025000000000000*G5_1 - 0.025000000000000*G5_2;
32477
A[371] = 0.008333333333333*G5_0 + 0.008333333333333*G5_1 + 0.008333333333333*G5_2;
32478
A[372] = 0.008333333333333*G5_0 + 0.008333333333333*G5_1 + 0.008333333333333*G5_2;
32479
A[373] = 0.008333333333333*G5_0 + 0.008333333333333*G5_1 + 0.008333333333333*G5_2;
32480
A[374] = 0.000000000000000;
32481
A[375] = 0.000000000000000;
32482
A[376] = 0.000000000000000;
32483
A[377] = 0.000000000000000;
32484
A[378] = 0.000000000000000;
32485
A[379] = 0.000000000000000;
32486
A[380] = 0.000000000000000;
32487
A[381] = 0.000000000000000;
32488
A[382] = 0.000000000000000;
32489
A[383] = 0.000000000000000;
32490
A[384] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_1 + 0.033333333333333*G8_0_2 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_0_2 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_0_2;
32491
A[385] = 0.100000000000000*G8_0_0 + 0.100000000000000*G11_0_0 + 0.100000000000000*G14_0_0;
32492
A[386] = -0.033333333333333*G8_0_1 - 0.033333333333333*G11_0_1 - 0.033333333333333*G14_0_1;
32493
A[387] = -0.033333333333333*G8_0_2 - 0.033333333333333*G11_0_2 - 0.033333333333333*G14_0_2;
32494
A[388] = -0.033333333333333*G8_0_1 - 0.033333333333333*G8_0_2 - 0.033333333333333*G11_0_1 - 0.033333333333333*G11_0_2 - 0.033333333333333*G14_0_1 - 0.033333333333333*G14_0_2;
32495
A[389] = -0.033333333333333*G8_0_0 + 0.100000000000000*G8_0_2 - 0.033333333333333*G11_0_0 + 0.100000000000000*G11_0_2 - 0.033333333333333*G14_0_0 + 0.100000000000000*G14_0_2;
32496
A[390] = -0.033333333333333*G8_0_0 + 0.100000000000000*G8_0_1 - 0.033333333333333*G11_0_0 + 0.100000000000000*G11_0_1 - 0.033333333333333*G14_0_0 + 0.100000000000000*G14_0_1;
32497
A[391] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_1 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_1 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_1;
32498
A[392] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_2 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_2 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_2;
32499
A[393] = -0.133333333333333*G8_0_0 - 0.100000000000000*G8_0_1 - 0.100000000000000*G8_0_2 - 0.133333333333333*G11_0_0 - 0.100000000000000*G11_0_1 - 0.100000000000000*G11_0_2 - 0.133333333333333*G14_0_0 - 0.100000000000000*G14_0_1 - 0.100000000000000*G14_0_2;
32500
A[394] = 0.000000000000000;
32501
A[395] = 0.000000000000000;
32502
A[396] = 0.000000000000000;
32503
A[397] = 0.000000000000000;
32504
A[398] = 0.000000000000000;
32505
A[399] = 0.000000000000000;
32506
A[400] = 0.000000000000000;
32507
A[401] = 0.000000000000000;
32508
A[402] = 0.000000000000000;
32509
A[403] = 0.000000000000000;
32510
A[404] = -0.008333333333333*G5_0;
32511
A[405] = 0.025000000000000*G5_0;
32512
A[406] = -0.008333333333333*G5_0;
32513
A[407] = -0.008333333333333*G5_0;
32514
A[408] = 0.000000000000000;
32515
A[409] = 0.000000000000000;
32516
A[410] = 0.000000000000000;
32517
A[411] = 0.000000000000000;
32518
A[412] = 0.000000000000000;
32519
A[413] = 0.000000000000000;
32520
A[414] = 0.000000000000000;
32521
A[415] = 0.000000000000000;
32522
A[416] = 0.000000000000000;
32523
A[417] = 0.000000000000000;
32524
A[418] = 0.033333333333333*G8_1_0 + 0.033333333333333*G8_1_1 + 0.033333333333333*G8_1_2 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_1_2 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_1_2;
32525
A[419] = -0.033333333333333*G8_1_0 - 0.033333333333333*G11_1_0 - 0.033333333333333*G14_1_0;
32526
A[420] = 0.100000000000000*G8_1_1 + 0.100000000000000*G11_1_1 + 0.100000000000000*G14_1_1;
32527
A[421] = -0.033333333333333*G8_1_2 - 0.033333333333333*G11_1_2 - 0.033333333333333*G14_1_2;
32528
A[422] = -0.033333333333333*G8_1_1 + 0.100000000000000*G8_1_2 - 0.033333333333333*G11_1_1 + 0.100000000000000*G11_1_2 - 0.033333333333333*G14_1_1 + 0.100000000000000*G14_1_2;
32529
A[423] = -0.033333333333333*G8_1_0 - 0.033333333333333*G8_1_2 - 0.033333333333333*G11_1_0 - 0.033333333333333*G11_1_2 - 0.033333333333333*G14_1_0 - 0.033333333333333*G14_1_2;
32530
A[424] = 0.100000000000000*G8_1_0 - 0.033333333333333*G8_1_1 + 0.100000000000000*G11_1_0 - 0.033333333333333*G11_1_1 + 0.100000000000000*G14_1_0 - 0.033333333333333*G14_1_1;
32531
A[425] = 0.033333333333333*G8_1_0 + 0.033333333333333*G8_1_1 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_1_1 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_1_1;
32532
A[426] = -0.100000000000000*G8_1_0 - 0.133333333333333*G8_1_1 - 0.100000000000000*G8_1_2 - 0.100000000000000*G11_1_0 - 0.133333333333333*G11_1_1 - 0.100000000000000*G11_1_2 - 0.100000000000000*G14_1_0 - 0.133333333333333*G14_1_1 - 0.100000000000000*G14_1_2;
32533
A[427] = 0.033333333333333*G8_1_1 + 0.033333333333333*G8_1_2 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_1_2 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_1_2;
32534
A[428] = 0.000000000000000;
32535
A[429] = 0.000000000000000;
32536
A[430] = 0.000000000000000;
32537
A[431] = 0.000000000000000;
32538
A[432] = 0.000000000000000;
32539
A[433] = 0.000000000000000;
32540
A[434] = 0.000000000000000;
32541
A[435] = 0.000000000000000;
32542
A[436] = 0.000000000000000;
32543
A[437] = 0.000000000000000;
32544
A[438] = -0.008333333333333*G5_1;
32545
A[439] = -0.008333333333333*G5_1;
32546
A[440] = 0.025000000000000*G5_1;
32547
A[441] = -0.008333333333333*G5_1;
32548
A[442] = 0.000000000000000;
32549
A[443] = 0.000000000000000;
32550
A[444] = 0.000000000000000;
32551
A[445] = 0.000000000000000;
32552
A[446] = 0.000000000000000;
32553
A[447] = 0.000000000000000;
32554
A[448] = 0.000000000000000;
32555
A[449] = 0.000000000000000;
32556
A[450] = 0.000000000000000;
32557
A[451] = 0.000000000000000;
32558
A[452] = 0.033333333333333*G8_2_0 + 0.033333333333333*G8_2_1 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_2_0 + 0.033333333333333*G11_2_1 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_2_0 + 0.033333333333333*G14_2_1 + 0.033333333333333*G14_2_2;
32559
A[453] = -0.033333333333333*G8_2_0 - 0.033333333333333*G11_2_0 - 0.033333333333333*G14_2_0;
32560
A[454] = -0.033333333333333*G8_2_1 - 0.033333333333333*G11_2_1 - 0.033333333333333*G14_2_1;
32561
A[455] = 0.100000000000000*G8_2_2 + 0.100000000000000*G11_2_2 + 0.100000000000000*G14_2_2;
32562
A[456] = 0.100000000000000*G8_2_1 - 0.033333333333333*G8_2_2 + 0.100000000000000*G11_2_1 - 0.033333333333333*G11_2_2 + 0.100000000000000*G14_2_1 - 0.033333333333333*G14_2_2;
32563
A[457] = 0.100000000000000*G8_2_0 - 0.033333333333333*G8_2_2 + 0.100000000000000*G11_2_0 - 0.033333333333333*G11_2_2 + 0.100000000000000*G14_2_0 - 0.033333333333333*G14_2_2;
32564
A[458] = -0.033333333333333*G8_2_0 - 0.033333333333333*G8_2_1 - 0.033333333333333*G11_2_0 - 0.033333333333333*G11_2_1 - 0.033333333333333*G14_2_0 - 0.033333333333333*G14_2_1;
32565
A[459] = -0.100000000000000*G8_2_0 - 0.100000000000000*G8_2_1 - 0.133333333333333*G8_2_2 - 0.100000000000000*G11_2_0 - 0.100000000000000*G11_2_1 - 0.133333333333333*G11_2_2 - 0.100000000000000*G14_2_0 - 0.100000000000000*G14_2_1 - 0.133333333333333*G14_2_2;
32566
A[460] = 0.033333333333333*G8_2_0 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_2_0 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_2_0 + 0.033333333333333*G14_2_2;
32567
A[461] = 0.033333333333333*G8_2_1 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_2_1 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_2_1 + 0.033333333333333*G14_2_2;
32568
A[462] = 0.000000000000000;
32569
A[463] = 0.000000000000000;
32570
A[464] = 0.000000000000000;
32571
A[465] = 0.000000000000000;
32572
A[466] = 0.000000000000000;
32573
A[467] = 0.000000000000000;
32574
A[468] = 0.000000000000000;
32575
A[469] = 0.000000000000000;
32576
A[470] = 0.000000000000000;
32577
A[471] = 0.000000000000000;
32578
A[472] = -0.008333333333333*G5_2;
32579
A[473] = -0.008333333333333*G5_2;
32580
A[474] = -0.008333333333333*G5_2;
32581
A[475] = 0.025000000000000*G5_2;
32582
A[476] = 0.000000000000000;
32583
A[477] = 0.000000000000000;
32584
A[478] = 0.000000000000000;
32585
A[479] = 0.000000000000000;
32586
A[480] = 0.000000000000000;
32587
A[481] = 0.000000000000000;
32588
A[482] = 0.000000000000000;
32589
A[483] = 0.000000000000000;
32590
A[484] = 0.000000000000000;
32591
A[485] = 0.000000000000000;
32592
A[486] = 0.033333333333333*G8_1_0 + 0.033333333333333*G8_1_1 + 0.033333333333333*G8_1_2 + 0.033333333333333*G8_2_0 + 0.033333333333333*G8_2_1 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_1_2 + 0.033333333333333*G11_2_0 + 0.033333333333333*G11_2_1 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_1_2 + 0.033333333333333*G14_2_0 + 0.033333333333333*G14_2_1 + 0.033333333333333*G14_2_2;
32593
A[487] = -0.033333333333333*G8_1_0 - 0.033333333333333*G8_2_0 - 0.033333333333333*G11_1_0 - 0.033333333333333*G11_2_0 - 0.033333333333333*G14_1_0 - 0.033333333333333*G14_2_0;
32594
A[488] = -0.033333333333333*G8_1_1 + 0.100000000000000*G8_2_1 - 0.033333333333333*G11_1_1 + 0.100000000000000*G11_2_1 - 0.033333333333333*G14_1_1 + 0.100000000000000*G14_2_1;
32595
A[489] = 0.100000000000000*G8_1_2 - 0.033333333333333*G8_2_2 + 0.100000000000000*G11_1_2 - 0.033333333333333*G11_2_2 + 0.100000000000000*G14_1_2 - 0.033333333333333*G14_2_2;
32596
A[490] = 0.266666666666666*G8_1_1 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_1 + 0.266666666666666*G8_2_2 + 0.266666666666666*G11_1_1 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_1 + 0.266666666666666*G11_2_2 + 0.266666666666666*G14_1_1 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_1 + 0.266666666666666*G14_2_2;
32597
A[491] = 0.266666666666666*G8_1_0 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_0 + 0.133333333333333*G8_2_2 + 0.266666666666666*G11_1_0 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_0 + 0.133333333333333*G11_2_2 + 0.266666666666666*G14_1_0 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_0 + 0.133333333333333*G14_2_2;
32598
A[492] = 0.133333333333333*G8_1_0 + 0.133333333333333*G8_1_1 + 0.266666666666666*G8_2_0 + 0.133333333333333*G8_2_1 + 0.133333333333333*G11_1_0 + 0.133333333333333*G11_1_1 + 0.266666666666666*G11_2_0 + 0.133333333333333*G11_2_1 + 0.133333333333333*G14_1_0 + 0.133333333333333*G14_1_1 + 0.266666666666666*G14_2_0 + 0.133333333333333*G14_2_1;
32599
A[493] = -0.266666666666666*G8_1_0 - 0.266666666666666*G8_1_1 - 0.133333333333333*G8_1_2 - 0.133333333333333*G8_2_0 - 0.133333333333333*G8_2_1 - 0.266666666666666*G11_1_0 - 0.266666666666666*G11_1_1 - 0.133333333333333*G11_1_2 - 0.133333333333333*G11_2_0 - 0.133333333333333*G11_2_1 - 0.266666666666666*G14_1_0 - 0.266666666666666*G14_1_1 - 0.133333333333333*G14_1_2 - 0.133333333333333*G14_2_0 - 0.133333333333333*G14_2_1;
32600
A[494] = -0.133333333333333*G8_1_0 - 0.133333333333333*G8_1_2 - 0.266666666666666*G8_2_0 - 0.133333333333333*G8_2_1 - 0.266666666666666*G8_2_2 - 0.133333333333333*G11_1_0 - 0.133333333333333*G11_1_2 - 0.266666666666666*G11_2_0 - 0.133333333333333*G11_2_1 - 0.266666666666666*G11_2_2 - 0.133333333333333*G14_1_0 - 0.133333333333333*G14_1_2 - 0.266666666666666*G14_2_0 - 0.133333333333333*G14_2_1 - 0.266666666666666*G14_2_2;
32601
A[495] = -0.133333333333333*G8_1_1 - 0.133333333333333*G8_1_2 - 0.133333333333333*G8_2_1 - 0.133333333333333*G8_2_2 - 0.133333333333333*G11_1_1 - 0.133333333333333*G11_1_2 - 0.133333333333333*G11_2_1 - 0.133333333333333*G11_2_2 - 0.133333333333333*G14_1_1 - 0.133333333333333*G14_1_2 - 0.133333333333333*G14_2_1 - 0.133333333333333*G14_2_2;
32602
A[496] = 0.000000000000000;
32603
A[497] = 0.000000000000000;
32604
A[498] = 0.000000000000000;
32605
A[499] = 0.000000000000000;
32606
A[500] = 0.000000000000000;
32607
A[501] = 0.000000000000000;
32608
A[502] = 0.000000000000000;
32609
A[503] = 0.000000000000000;
32610
A[504] = 0.000000000000000;
32611
A[505] = 0.000000000000000;
32612
A[506] = 0.033333333333333*G5_1 + 0.033333333333333*G5_2;
32613
A[507] = 0.033333333333333*G5_1 + 0.033333333333333*G5_2;
32614
A[508] = 0.033333333333333*G5_1 + 0.066666666666666*G5_2;
32615
A[509] = 0.066666666666666*G5_1 + 0.033333333333333*G5_2;
32616
A[510] = 0.000000000000000;
32617
A[511] = 0.000000000000000;
32618
A[512] = 0.000000000000000;
32619
A[513] = 0.000000000000000;
32620
A[514] = 0.000000000000000;
32621
A[515] = 0.000000000000000;
32622
A[516] = 0.000000000000000;
32623
A[517] = 0.000000000000000;
32624
A[518] = 0.000000000000000;
32625
A[519] = 0.000000000000000;
32626
A[520] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_1 + 0.033333333333333*G8_0_2 + 0.033333333333333*G8_2_0 + 0.033333333333333*G8_2_1 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_0_2 + 0.033333333333333*G11_2_0 + 0.033333333333333*G11_2_1 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_0_2 + 0.033333333333333*G14_2_0 + 0.033333333333333*G14_2_1 + 0.033333333333333*G14_2_2;
32627
A[521] = -0.033333333333333*G8_0_0 + 0.100000000000000*G8_2_0 - 0.033333333333333*G11_0_0 + 0.100000000000000*G11_2_0 - 0.033333333333333*G14_0_0 + 0.100000000000000*G14_2_0;
32628
A[522] = -0.033333333333333*G8_0_1 - 0.033333333333333*G8_2_1 - 0.033333333333333*G11_0_1 - 0.033333333333333*G11_2_1 - 0.033333333333333*G14_0_1 - 0.033333333333333*G14_2_1;
32629
A[523] = 0.100000000000000*G8_0_2 - 0.033333333333333*G8_2_2 + 0.100000000000000*G11_0_2 - 0.033333333333333*G11_2_2 + 0.100000000000000*G14_0_2 - 0.033333333333333*G14_2_2;
32630
A[524] = 0.266666666666666*G8_0_1 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_2_1 + 0.133333333333333*G8_2_2 + 0.266666666666666*G11_0_1 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_2_1 + 0.133333333333333*G11_2_2 + 0.266666666666666*G14_0_1 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_2_1 + 0.133333333333333*G14_2_2;
32631
A[525] = 0.266666666666666*G8_0_0 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_2_0 + 0.266666666666666*G8_2_2 + 0.266666666666666*G11_0_0 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_2_0 + 0.266666666666666*G11_2_2 + 0.266666666666666*G14_0_0 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_2_0 + 0.266666666666666*G14_2_2;
32632
A[526] = 0.133333333333333*G8_0_0 + 0.133333333333333*G8_0_1 + 0.133333333333333*G8_2_0 + 0.266666666666666*G8_2_1 + 0.133333333333333*G11_0_0 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_2_0 + 0.266666666666666*G11_2_1 + 0.133333333333333*G14_0_0 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_2_0 + 0.266666666666666*G14_2_1;
32633
A[527] = -0.266666666666666*G8_0_0 - 0.266666666666666*G8_0_1 - 0.133333333333333*G8_0_2 - 0.133333333333333*G8_2_0 - 0.133333333333333*G8_2_1 - 0.266666666666666*G11_0_0 - 0.266666666666666*G11_0_1 - 0.133333333333333*G11_0_2 - 0.133333333333333*G11_2_0 - 0.133333333333333*G11_2_1 - 0.266666666666666*G14_0_0 - 0.266666666666666*G14_0_1 - 0.133333333333333*G14_0_2 - 0.133333333333333*G14_2_0 - 0.133333333333333*G14_2_1;
32634
A[528] = -0.133333333333333*G8_0_0 - 0.133333333333333*G8_0_2 - 0.133333333333333*G8_2_0 - 0.133333333333333*G8_2_2 - 0.133333333333333*G11_0_0 - 0.133333333333333*G11_0_2 - 0.133333333333333*G11_2_0 - 0.133333333333333*G11_2_2 - 0.133333333333333*G14_0_0 - 0.133333333333333*G14_0_2 - 0.133333333333333*G14_2_0 - 0.133333333333333*G14_2_2;
32635
A[529] = -0.133333333333333*G8_0_1 - 0.133333333333333*G8_0_2 - 0.133333333333333*G8_2_0 - 0.266666666666666*G8_2_1 - 0.266666666666666*G8_2_2 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_0_2 - 0.133333333333333*G11_2_0 - 0.266666666666666*G11_2_1 - 0.266666666666666*G11_2_2 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_0_2 - 0.133333333333333*G14_2_0 - 0.266666666666666*G14_2_1 - 0.266666666666666*G14_2_2;
32636
A[530] = 0.000000000000000;
32637
A[531] = 0.000000000000000;
32638
A[532] = 0.000000000000000;
32639
A[533] = 0.000000000000000;
32640
A[534] = 0.000000000000000;
32641
A[535] = 0.000000000000000;
32642
A[536] = 0.000000000000000;
32643
A[537] = 0.000000000000000;
32644
A[538] = 0.000000000000000;
32645
A[539] = 0.000000000000000;
32646
A[540] = 0.033333333333333*G5_0 + 0.033333333333333*G5_2;
32647
A[541] = 0.033333333333333*G5_0 + 0.066666666666667*G5_2;
32648
A[542] = 0.033333333333333*G5_0 + 0.033333333333333*G5_2;
32649
A[543] = 0.066666666666667*G5_0 + 0.033333333333333*G5_2;
32650
A[544] = 0.000000000000000;
32651
A[545] = 0.000000000000000;
32652
A[546] = 0.000000000000000;
32653
A[547] = 0.000000000000000;
32654
A[548] = 0.000000000000000;
32655
A[549] = 0.000000000000000;
32656
A[550] = 0.000000000000000;
32657
A[551] = 0.000000000000000;
32658
A[552] = 0.000000000000000;
32659
A[553] = 0.000000000000000;
32660
A[554] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_0_1 + 0.033333333333333*G8_0_2 + 0.033333333333333*G8_1_0 + 0.033333333333333*G8_1_1 + 0.033333333333333*G8_1_2 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_0_2 + 0.033333333333333*G11_1_0 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_1_2 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_0_2 + 0.033333333333333*G14_1_0 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_1_2;
32661
A[555] = -0.033333333333333*G8_0_0 + 0.100000000000000*G8_1_0 - 0.033333333333333*G11_0_0 + 0.100000000000000*G11_1_0 - 0.033333333333333*G14_0_0 + 0.100000000000000*G14_1_0;
32662
A[556] = 0.100000000000000*G8_0_1 - 0.033333333333333*G8_1_1 + 0.100000000000000*G11_0_1 - 0.033333333333333*G11_1_1 + 0.100000000000000*G14_0_1 - 0.033333333333333*G14_1_1;
32663
A[557] = -0.033333333333333*G8_0_2 - 0.033333333333333*G8_1_2 - 0.033333333333333*G11_0_2 - 0.033333333333333*G11_1_2 - 0.033333333333333*G14_0_2 - 0.033333333333333*G14_1_2;
32664
A[558] = 0.133333333333333*G8_0_1 + 0.266666666666666*G8_0_2 + 0.133333333333333*G8_1_1 + 0.133333333333333*G8_1_2 + 0.133333333333333*G11_0_1 + 0.266666666666666*G11_0_2 + 0.133333333333333*G11_1_1 + 0.133333333333333*G11_1_2 + 0.133333333333333*G14_0_1 + 0.266666666666666*G14_0_2 + 0.133333333333333*G14_1_1 + 0.133333333333333*G14_1_2;
32665
A[559] = 0.133333333333333*G8_0_0 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_1_0 + 0.266666666666666*G8_1_2 + 0.133333333333333*G11_0_0 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_1_0 + 0.266666666666666*G11_1_2 + 0.133333333333333*G14_0_0 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_1_0 + 0.266666666666666*G14_1_2;
32666
A[560] = 0.266666666666666*G8_0_0 + 0.133333333333333*G8_0_1 + 0.133333333333333*G8_1_0 + 0.266666666666666*G8_1_1 + 0.266666666666666*G11_0_0 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_1_0 + 0.266666666666666*G11_1_1 + 0.266666666666666*G14_0_0 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_1_0 + 0.266666666666666*G14_1_1;
32667
A[561] = -0.133333333333333*G8_0_0 - 0.133333333333333*G8_0_1 - 0.133333333333333*G8_1_0 - 0.133333333333333*G8_1_1 - 0.133333333333333*G11_0_0 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_1_0 - 0.133333333333333*G11_1_1 - 0.133333333333333*G14_0_0 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_1_0 - 0.133333333333333*G14_1_1;
32668
A[562] = -0.266666666666666*G8_0_0 - 0.133333333333333*G8_0_1 - 0.266666666666666*G8_0_2 - 0.133333333333333*G8_1_0 - 0.133333333333333*G8_1_2 - 0.266666666666666*G11_0_0 - 0.133333333333333*G11_0_1 - 0.266666666666666*G11_0_2 - 0.133333333333333*G11_1_0 - 0.133333333333333*G11_1_2 - 0.266666666666666*G14_0_0 - 0.133333333333333*G14_0_1 - 0.266666666666666*G14_0_2 - 0.133333333333333*G14_1_0 - 0.133333333333333*G14_1_2;
32669
A[563] = -0.133333333333333*G8_0_1 - 0.133333333333333*G8_0_2 - 0.133333333333333*G8_1_0 - 0.266666666666666*G8_1_1 - 0.266666666666666*G8_1_2 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_0_2 - 0.133333333333333*G11_1_0 - 0.266666666666666*G11_1_1 - 0.266666666666666*G11_1_2 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_0_2 - 0.133333333333333*G14_1_0 - 0.266666666666666*G14_1_1 - 0.266666666666666*G14_1_2;
32670
A[564] = 0.000000000000000;
32671
A[565] = 0.000000000000000;
32672
A[566] = 0.000000000000000;
32673
A[567] = 0.000000000000000;
32674
A[568] = 0.000000000000000;
32675
A[569] = 0.000000000000000;
32676
A[570] = 0.000000000000000;
32677
A[571] = 0.000000000000000;
32678
A[572] = 0.000000000000000;
32679
A[573] = 0.000000000000000;
32680
A[574] = 0.033333333333333*G5_0 + 0.033333333333333*G5_1;
32681
A[575] = 0.033333333333333*G5_0 + 0.066666666666667*G5_1;
32682
A[576] = 0.066666666666666*G5_0 + 0.033333333333333*G5_1;
32683
A[577] = 0.033333333333333*G5_0 + 0.033333333333333*G5_1;
32684
A[578] = 0.000000000000000;
32685
A[579] = 0.000000000000000;
32686
A[580] = 0.000000000000000;
32687
A[581] = 0.000000000000000;
32688
A[582] = 0.000000000000000;
32689
A[583] = 0.000000000000000;
32690
A[584] = 0.000000000000000;
32691
A[585] = 0.000000000000000;
32692
A[586] = 0.000000000000000;
32693
A[587] = 0.000000000000000;
32694
A[588] = -0.033333333333333*G8_0_0 - 0.033333333333333*G8_0_1 - 0.033333333333333*G8_0_2 - 0.033333333333333*G8_1_0 - 0.033333333333333*G8_1_1 - 0.033333333333333*G8_1_2 - 0.133333333333333*G8_2_0 - 0.133333333333333*G8_2_1 - 0.133333333333333*G8_2_2 - 0.033333333333333*G11_0_0 - 0.033333333333333*G11_0_1 - 0.033333333333333*G11_0_2 - 0.033333333333333*G11_1_0 - 0.033333333333333*G11_1_1 - 0.033333333333333*G11_1_2 - 0.133333333333333*G11_2_0 - 0.133333333333333*G11_2_1 - 0.133333333333333*G11_2_2 - 0.033333333333333*G14_0_0 - 0.033333333333333*G14_0_1 - 0.033333333333333*G14_0_2 - 0.033333333333333*G14_1_0 - 0.033333333333333*G14_1_1 - 0.033333333333333*G14_1_2 - 0.133333333333333*G14_2_0 - 0.133333333333333*G14_2_1 - 0.133333333333333*G14_2_2;
32695
A[589] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_1_0 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_1_0 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_1_0;
32696
A[590] = 0.033333333333333*G8_0_1 + 0.033333333333333*G8_1_1 + 0.033333333333333*G11_0_1 + 0.033333333333333*G11_1_1 + 0.033333333333333*G14_0_1 + 0.033333333333333*G14_1_1;
32697
A[591] = -0.100000000000000*G8_0_2 - 0.100000000000000*G8_1_2 - 0.133333333333333*G8_2_2 - 0.100000000000000*G11_0_2 - 0.100000000000000*G11_1_2 - 0.133333333333333*G11_2_2 - 0.100000000000000*G14_0_2 - 0.100000000000000*G14_1_2 - 0.133333333333333*G14_2_2;
32698
A[592] = -0.266666666666666*G8_0_1 - 0.133333333333333*G8_0_2 - 0.266666666666666*G8_1_1 - 0.133333333333333*G8_1_2 - 0.133333333333333*G8_2_1 - 0.266666666666666*G11_0_1 - 0.133333333333333*G11_0_2 - 0.266666666666666*G11_1_1 - 0.133333333333333*G11_1_2 - 0.133333333333333*G11_2_1 - 0.266666666666666*G14_0_1 - 0.133333333333333*G14_0_2 - 0.266666666666666*G14_1_1 - 0.133333333333333*G14_1_2 - 0.133333333333333*G14_2_1;
32699
A[593] = -0.266666666666666*G8_0_0 - 0.133333333333333*G8_0_2 - 0.266666666666666*G8_1_0 - 0.133333333333333*G8_1_2 - 0.133333333333333*G8_2_0 - 0.266666666666666*G11_0_0 - 0.133333333333333*G11_0_2 - 0.266666666666666*G11_1_0 - 0.133333333333333*G11_1_2 - 0.133333333333333*G11_2_0 - 0.266666666666666*G14_0_0 - 0.133333333333333*G14_0_2 - 0.266666666666666*G14_1_0 - 0.133333333333333*G14_1_2 - 0.133333333333333*G14_2_0;
32700
A[594] = -0.133333333333333*G8_0_0 - 0.133333333333333*G8_0_1 - 0.133333333333333*G8_1_0 - 0.133333333333333*G8_1_1 - 0.133333333333333*G11_0_0 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_1_0 - 0.133333333333333*G11_1_1 - 0.133333333333333*G14_0_0 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_1_0 - 0.133333333333333*G14_1_1;
32701
A[595] = 0.266666666666666*G8_0_0 + 0.266666666666666*G8_0_1 + 0.133333333333333*G8_0_2 + 0.266666666666666*G8_1_0 + 0.266666666666666*G8_1_1 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_0 + 0.133333333333333*G8_2_1 + 0.266666666666666*G8_2_2 + 0.266666666666666*G11_0_0 + 0.266666666666666*G11_0_1 + 0.133333333333333*G11_0_2 + 0.266666666666666*G11_1_0 + 0.266666666666666*G11_1_1 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_0 + 0.133333333333333*G11_2_1 + 0.266666666666666*G11_2_2 + 0.266666666666666*G14_0_0 + 0.266666666666666*G14_0_1 + 0.133333333333333*G14_0_2 + 0.266666666666666*G14_1_0 + 0.266666666666666*G14_1_1 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_0 + 0.133333333333333*G14_2_1 + 0.266666666666666*G14_2_2;
32702
A[596] = 0.133333333333333*G8_0_0 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_1_0 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_1 + 0.133333333333333*G11_0_0 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_1_0 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_1 + 0.133333333333333*G14_0_0 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_1_0 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_1;
32703
A[597] = 0.133333333333333*G8_0_1 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_1_1 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_0 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_1_1 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_0 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_1_1 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_0;
32704
A[598] = 0.000000000000000;
32705
A[599] = 0.000000000000000;
32706
A[600] = 0.000000000000000;
32707
A[601] = 0.000000000000000;
32708
A[602] = 0.000000000000000;
32709
A[603] = 0.000000000000000;
32710
A[604] = 0.000000000000000;
32711
A[605] = 0.000000000000000;
32712
A[606] = 0.000000000000000;
32713
A[607] = 0.000000000000000;
32714
A[608] = -0.033333333333333*G5_0 - 0.033333333333333*G5_1 + 0.033333333333333*G5_2;
32715
A[609] = -0.033333333333333*G5_0 - 0.033333333333333*G5_1;
32716
A[610] = -0.033333333333333*G5_0 - 0.033333333333333*G5_1;
32717
A[611] = -0.066666666666667*G5_0 - 0.066666666666666*G5_1 - 0.033333333333333*G5_2;
32718
A[612] = 0.000000000000000;
32719
A[613] = 0.000000000000000;
32720
A[614] = 0.000000000000000;
32721
A[615] = 0.000000000000000;
32722
A[616] = 0.000000000000000;
32723
A[617] = 0.000000000000000;
32724
A[618] = 0.000000000000000;
32725
A[619] = 0.000000000000000;
32726
A[620] = 0.000000000000000;
32727
A[621] = 0.000000000000000;
32728
A[622] = -0.033333333333333*G8_0_0 - 0.033333333333333*G8_0_1 - 0.033333333333333*G8_0_2 - 0.133333333333333*G8_1_0 - 0.133333333333333*G8_1_1 - 0.133333333333333*G8_1_2 - 0.033333333333333*G8_2_0 - 0.033333333333333*G8_2_1 - 0.033333333333333*G8_2_2 - 0.033333333333333*G11_0_0 - 0.033333333333333*G11_0_1 - 0.033333333333333*G11_0_2 - 0.133333333333333*G11_1_0 - 0.133333333333333*G11_1_1 - 0.133333333333333*G11_1_2 - 0.033333333333333*G11_2_0 - 0.033333333333333*G11_2_1 - 0.033333333333333*G11_2_2 - 0.033333333333333*G14_0_0 - 0.033333333333333*G14_0_1 - 0.033333333333333*G14_0_2 - 0.133333333333333*G14_1_0 - 0.133333333333333*G14_1_1 - 0.133333333333333*G14_1_2 - 0.033333333333333*G14_2_0 - 0.033333333333333*G14_2_1 - 0.033333333333333*G14_2_2;
32729
A[623] = 0.033333333333333*G8_0_0 + 0.033333333333333*G8_2_0 + 0.033333333333333*G11_0_0 + 0.033333333333333*G11_2_0 + 0.033333333333333*G14_0_0 + 0.033333333333333*G14_2_0;
32730
A[624] = -0.100000000000000*G8_0_1 - 0.133333333333333*G8_1_1 - 0.100000000000000*G8_2_1 - 0.100000000000000*G11_0_1 - 0.133333333333333*G11_1_1 - 0.100000000000000*G11_2_1 - 0.100000000000000*G14_0_1 - 0.133333333333333*G14_1_1 - 0.100000000000000*G14_2_1;
32731
A[625] = 0.033333333333333*G8_0_2 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_0_2 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_0_2 + 0.033333333333333*G14_2_2;
32732
A[626] = -0.133333333333333*G8_0_1 - 0.266666666666666*G8_0_2 - 0.133333333333333*G8_1_2 - 0.133333333333333*G8_2_1 - 0.266666666666666*G8_2_2 - 0.133333333333333*G11_0_1 - 0.266666666666666*G11_0_2 - 0.133333333333333*G11_1_2 - 0.133333333333333*G11_2_1 - 0.266666666666666*G11_2_2 - 0.133333333333333*G14_0_1 - 0.266666666666666*G14_0_2 - 0.133333333333333*G14_1_2 - 0.133333333333333*G14_2_1 - 0.266666666666666*G14_2_2;
32733
A[627] = -0.133333333333333*G8_0_0 - 0.133333333333333*G8_0_2 - 0.133333333333333*G8_2_0 - 0.133333333333333*G8_2_2 - 0.133333333333333*G11_0_0 - 0.133333333333333*G11_0_2 - 0.133333333333333*G11_2_0 - 0.133333333333333*G11_2_2 - 0.133333333333333*G14_0_0 - 0.133333333333333*G14_0_2 - 0.133333333333333*G14_2_0 - 0.133333333333333*G14_2_2;
32734
A[628] = -0.266666666666666*G8_0_0 - 0.133333333333333*G8_0_1 - 0.133333333333333*G8_1_0 - 0.266666666666666*G8_2_0 - 0.133333333333333*G8_2_1 - 0.266666666666666*G11_0_0 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_1_0 - 0.266666666666666*G11_2_0 - 0.133333333333333*G11_2_1 - 0.266666666666666*G14_0_0 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_1_0 - 0.266666666666666*G14_2_0 - 0.133333333333333*G14_2_1;
32735
A[629] = 0.133333333333333*G8_0_0 + 0.133333333333333*G8_0_1 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_0 + 0.133333333333333*G8_2_1 + 0.133333333333333*G11_0_0 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_0 + 0.133333333333333*G11_2_1 + 0.133333333333333*G14_0_0 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_0 + 0.133333333333333*G14_2_1;
32736
A[630] = 0.266666666666666*G8_0_0 + 0.133333333333333*G8_0_1 + 0.266666666666666*G8_0_2 + 0.133333333333333*G8_1_0 + 0.266666666666666*G8_1_1 + 0.133333333333333*G8_1_2 + 0.266666666666666*G8_2_0 + 0.133333333333333*G8_2_1 + 0.266666666666666*G8_2_2 + 0.266666666666666*G11_0_0 + 0.133333333333333*G11_0_1 + 0.266666666666666*G11_0_2 + 0.133333333333333*G11_1_0 + 0.266666666666666*G11_1_1 + 0.133333333333333*G11_1_2 + 0.266666666666666*G11_2_0 + 0.133333333333333*G11_2_1 + 0.266666666666666*G11_2_2 + 0.266666666666666*G14_0_0 + 0.133333333333333*G14_0_1 + 0.266666666666666*G14_0_2 + 0.133333333333333*G14_1_0 + 0.266666666666666*G14_1_1 + 0.133333333333333*G14_1_2 + 0.266666666666666*G14_2_0 + 0.133333333333333*G14_2_1 + 0.266666666666666*G14_2_2;
32737
A[631] = 0.133333333333333*G8_0_1 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_1_0 + 0.133333333333333*G8_2_1 + 0.133333333333333*G8_2_2 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_1_0 + 0.133333333333333*G11_2_1 + 0.133333333333333*G11_2_2 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_1_0 + 0.133333333333333*G14_2_1 + 0.133333333333333*G14_2_2;
32738
A[632] = 0.000000000000000;
32739
A[633] = 0.000000000000000;
32740
A[634] = 0.000000000000000;
32741
A[635] = 0.000000000000000;
32742
A[636] = 0.000000000000000;
32743
A[637] = 0.000000000000000;
32744
A[638] = 0.000000000000000;
32745
A[639] = 0.000000000000000;
32746
A[640] = 0.000000000000000;
32747
A[641] = 0.000000000000000;
32748
A[642] = -0.033333333333333*G5_0 + 0.033333333333333*G5_1 - 0.033333333333333*G5_2;
32749
A[643] = -0.033333333333333*G5_0 - 0.033333333333333*G5_2;
32750
A[644] = -0.066666666666666*G5_0 - 0.033333333333333*G5_1 - 0.066666666666666*G5_2;
32751
A[645] = -0.033333333333333*G5_0 - 0.033333333333333*G5_2;
32752
A[646] = 0.000000000000000;
32753
A[647] = 0.000000000000000;
32754
A[648] = 0.000000000000000;
32755
A[649] = 0.000000000000000;
32756
A[650] = 0.000000000000000;
32757
A[651] = 0.000000000000000;
32758
A[652] = 0.000000000000000;
32759
A[653] = 0.000000000000000;
32760
A[654] = 0.000000000000000;
32761
A[655] = 0.000000000000000;
32762
A[656] = -0.133333333333333*G8_0_0 - 0.133333333333333*G8_0_1 - 0.133333333333333*G8_0_2 - 0.033333333333333*G8_1_0 - 0.033333333333333*G8_1_1 - 0.033333333333333*G8_1_2 - 0.033333333333333*G8_2_0 - 0.033333333333333*G8_2_1 - 0.033333333333333*G8_2_2 - 0.133333333333333*G11_0_0 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_0_2 - 0.033333333333333*G11_1_0 - 0.033333333333333*G11_1_1 - 0.033333333333333*G11_1_2 - 0.033333333333333*G11_2_0 - 0.033333333333333*G11_2_1 - 0.033333333333333*G11_2_2 - 0.133333333333333*G14_0_0 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_0_2 - 0.033333333333333*G14_1_0 - 0.033333333333333*G14_1_1 - 0.033333333333333*G14_1_2 - 0.033333333333333*G14_2_0 - 0.033333333333333*G14_2_1 - 0.033333333333333*G14_2_2;
32763
A[657] = -0.133333333333333*G8_0_0 - 0.100000000000000*G8_1_0 - 0.100000000000000*G8_2_0 - 0.133333333333333*G11_0_0 - 0.100000000000000*G11_1_0 - 0.100000000000000*G11_2_0 - 0.133333333333333*G14_0_0 - 0.100000000000000*G14_1_0 - 0.100000000000000*G14_2_0;
32764
A[658] = 0.033333333333333*G8_1_1 + 0.033333333333333*G8_2_1 + 0.033333333333333*G11_1_1 + 0.033333333333333*G11_2_1 + 0.033333333333333*G14_1_1 + 0.033333333333333*G14_2_1;
32765
A[659] = 0.033333333333333*G8_1_2 + 0.033333333333333*G8_2_2 + 0.033333333333333*G11_1_2 + 0.033333333333333*G11_2_2 + 0.033333333333333*G14_1_2 + 0.033333333333333*G14_2_2;
32766
A[660] = -0.133333333333333*G8_1_1 - 0.133333333333333*G8_1_2 - 0.133333333333333*G8_2_1 - 0.133333333333333*G8_2_2 - 0.133333333333333*G11_1_1 - 0.133333333333333*G11_1_2 - 0.133333333333333*G11_2_1 - 0.133333333333333*G11_2_2 - 0.133333333333333*G14_1_1 - 0.133333333333333*G14_1_2 - 0.133333333333333*G14_2_1 - 0.133333333333333*G14_2_2;
32767
A[661] = -0.133333333333333*G8_0_2 - 0.133333333333333*G8_1_0 - 0.266666666666666*G8_1_2 - 0.133333333333333*G8_2_0 - 0.266666666666666*G8_2_2 - 0.133333333333333*G11_0_2 - 0.133333333333333*G11_1_0 - 0.266666666666666*G11_1_2 - 0.133333333333333*G11_2_0 - 0.266666666666666*G11_2_2 - 0.133333333333333*G14_0_2 - 0.133333333333333*G14_1_0 - 0.266666666666666*G14_1_2 - 0.133333333333333*G14_2_0 - 0.266666666666666*G14_2_2;
32768
A[662] = -0.133333333333333*G8_0_1 - 0.133333333333333*G8_1_0 - 0.266666666666666*G8_1_1 - 0.133333333333333*G8_2_0 - 0.266666666666666*G8_2_1 - 0.133333333333333*G11_0_1 - 0.133333333333333*G11_1_0 - 0.266666666666666*G11_1_1 - 0.133333333333333*G11_2_0 - 0.266666666666666*G11_2_1 - 0.133333333333333*G14_0_1 - 0.133333333333333*G14_1_0 - 0.266666666666666*G14_1_1 - 0.133333333333333*G14_2_0 - 0.266666666666666*G14_2_1;
32769
A[663] = 0.133333333333333*G8_0_2 + 0.133333333333333*G8_1_0 + 0.133333333333333*G8_1_1 + 0.133333333333333*G8_2_0 + 0.133333333333333*G8_2_1 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_1_0 + 0.133333333333333*G11_1_1 + 0.133333333333333*G11_2_0 + 0.133333333333333*G11_2_1 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_1_0 + 0.133333333333333*G14_1_1 + 0.133333333333333*G14_2_0 + 0.133333333333333*G14_2_1;
32770
A[664] = 0.133333333333333*G8_0_1 + 0.133333333333333*G8_1_0 + 0.133333333333333*G8_1_2 + 0.133333333333333*G8_2_0 + 0.133333333333333*G8_2_2 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_1_0 + 0.133333333333333*G11_1_2 + 0.133333333333333*G11_2_0 + 0.133333333333333*G11_2_2 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_1_0 + 0.133333333333333*G14_1_2 + 0.133333333333333*G14_2_0 + 0.133333333333333*G14_2_2;
32771
A[665] = 0.266666666666666*G8_0_0 + 0.133333333333333*G8_0_1 + 0.133333333333333*G8_0_2 + 0.133333333333333*G8_1_0 + 0.266666666666666*G8_1_1 + 0.266666666666666*G8_1_2 + 0.133333333333333*G8_2_0 + 0.266666666666666*G8_2_1 + 0.266666666666666*G8_2_2 + 0.266666666666666*G11_0_0 + 0.133333333333333*G11_0_1 + 0.133333333333333*G11_0_2 + 0.133333333333333*G11_1_0 + 0.266666666666666*G11_1_1 + 0.266666666666666*G11_1_2 + 0.133333333333333*G11_2_0 + 0.266666666666666*G11_2_1 + 0.266666666666666*G11_2_2 + 0.266666666666666*G14_0_0 + 0.133333333333333*G14_0_1 + 0.133333333333333*G14_0_2 + 0.133333333333333*G14_1_0 + 0.266666666666666*G14_1_1 + 0.266666666666666*G14_1_2 + 0.133333333333333*G14_2_0 + 0.266666666666666*G14_2_1 + 0.266666666666666*G14_2_2;
32772
A[666] = 0.000000000000000;
32773
A[667] = 0.000000000000000;
32774
A[668] = 0.000000000000000;
32775
A[669] = 0.000000000000000;
32776
A[670] = 0.000000000000000;
32777
A[671] = 0.000000000000000;
32778
A[672] = 0.000000000000000;
32779
A[673] = 0.000000000000000;
32780
A[674] = 0.000000000000000;
32781
A[675] = 0.000000000000000;
32782
A[676] = 0.033333333333333*G5_0 - 0.033333333333333*G5_1 - 0.033333333333333*G5_2;
32783
A[677] = -0.033333333333333*G5_0 - 0.066666666666666*G5_1 - 0.066666666666667*G5_2;
32784
A[678] = -0.033333333333333*G5_1 - 0.033333333333333*G5_2;
32785
A[679] = -0.033333333333333*G5_1 - 0.033333333333333*G5_2;
32786
A[680] = 0.000000000000000;
32787
A[681] = 0.000000000000000;
32788
A[682] = 0.000000000000000;
32789
A[683] = 0.000000000000000;
32790
A[684] = 0.000000000000000;
32791
A[685] = 0.000000000000000;
32792
A[686] = 0.000000000000000;
32793
A[687] = 0.000000000000000;
32794
A[688] = 0.000000000000000;
32795
A[689] = 0.000000000000000;
32796
A[690] = 0.000000000000000;
32797
A[691] = 0.000000000000000;
32798
A[692] = 0.000000000000000;
32799
A[693] = 0.000000000000000;
32800
A[694] = 0.000000000000000;
32801
A[695] = 0.000000000000000;
32802
A[696] = 0.000000000000000;
32803
A[697] = 0.000000000000000;
32804
A[698] = 0.000000000000000;
32805
A[699] = 0.000000000000000;
32806
A[700] = 0.100000000000000*G6_0_0 + 0.100000000000000*G6_0_1 + 0.100000000000000*G6_0_2 + 0.100000000000000*G6_1_0 + 0.100000000000000*G6_1_1 + 0.100000000000000*G6_1_2 + 0.100000000000000*G6_2_0 + 0.100000000000000*G6_2_1 + 0.100000000000000*G6_2_2 + 0.100000000000000*G9_0_0 + 0.100000000000000*G9_0_1 + 0.100000000000000*G9_0_2 + 0.100000000000000*G9_1_0 + 0.100000000000000*G9_1_1 + 0.100000000000000*G9_1_2 + 0.100000000000000*G9_2_0 + 0.100000000000000*G9_2_1 + 0.100000000000000*G9_2_2 + 0.100000000000000*G12_0_0 + 0.100000000000000*G12_0_1 + 0.100000000000000*G12_0_2 + 0.100000000000000*G12_1_0 + 0.100000000000000*G12_1_1 + 0.100000000000000*G12_1_2 + 0.100000000000000*G12_2_0 + 0.100000000000000*G12_2_1 + 0.100000000000000*G12_2_2;
32807
A[701] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_1_0 + 0.033333333333333*G6_2_0 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_2_0 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_2_0;
32808
A[702] = 0.033333333333333*G6_0_1 + 0.033333333333333*G6_1_1 + 0.033333333333333*G6_2_1 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_2_1 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_2_1;
32809
A[703] = 0.033333333333333*G6_0_2 + 0.033333333333333*G6_1_2 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_0_2 + 0.033333333333333*G9_1_2 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_0_2 + 0.033333333333333*G12_1_2 + 0.033333333333333*G12_2_2;
32810
A[704] = 0.033333333333333*G6_0_1 + 0.033333333333333*G6_0_2 + 0.033333333333333*G6_1_1 + 0.033333333333333*G6_1_2 + 0.033333333333333*G6_2_1 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_0_2 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_1_2 + 0.033333333333333*G9_2_1 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_0_2 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_1_2 + 0.033333333333333*G12_2_1 + 0.033333333333333*G12_2_2;
32811
A[705] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_2 + 0.033333333333333*G6_1_0 + 0.033333333333333*G6_1_2 + 0.033333333333333*G6_2_0 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_2 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_1_2 + 0.033333333333333*G9_2_0 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_2 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_1_2 + 0.033333333333333*G12_2_0 + 0.033333333333333*G12_2_2;
32812
A[706] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_1 + 0.033333333333333*G6_1_0 + 0.033333333333333*G6_1_1 + 0.033333333333333*G6_2_0 + 0.033333333333333*G6_2_1 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_2_0 + 0.033333333333333*G9_2_1 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_2_0 + 0.033333333333333*G12_2_1;
32813
A[707] = -0.033333333333333*G6_0_0 - 0.033333333333333*G6_0_1 - 0.133333333333333*G6_0_2 - 0.033333333333333*G6_1_0 - 0.033333333333333*G6_1_1 - 0.133333333333333*G6_1_2 - 0.033333333333333*G6_2_0 - 0.033333333333333*G6_2_1 - 0.133333333333333*G6_2_2 - 0.033333333333333*G9_0_0 - 0.033333333333333*G9_0_1 - 0.133333333333333*G9_0_2 - 0.033333333333333*G9_1_0 - 0.033333333333333*G9_1_1 - 0.133333333333333*G9_1_2 - 0.033333333333333*G9_2_0 - 0.033333333333333*G9_2_1 - 0.133333333333333*G9_2_2 - 0.033333333333333*G12_0_0 - 0.033333333333333*G12_0_1 - 0.133333333333333*G12_0_2 - 0.033333333333333*G12_1_0 - 0.033333333333333*G12_1_1 - 0.133333333333333*G12_1_2 - 0.033333333333333*G12_2_0 - 0.033333333333333*G12_2_1 - 0.133333333333333*G12_2_2;
32814
A[708] = -0.033333333333333*G6_0_0 - 0.133333333333333*G6_0_1 - 0.033333333333333*G6_0_2 - 0.033333333333333*G6_1_0 - 0.133333333333333*G6_1_1 - 0.033333333333333*G6_1_2 - 0.033333333333333*G6_2_0 - 0.133333333333333*G6_2_1 - 0.033333333333333*G6_2_2 - 0.033333333333333*G9_0_0 - 0.133333333333333*G9_0_1 - 0.033333333333333*G9_0_2 - 0.033333333333333*G9_1_0 - 0.133333333333333*G9_1_1 - 0.033333333333333*G9_1_2 - 0.033333333333333*G9_2_0 - 0.133333333333333*G9_2_1 - 0.033333333333333*G9_2_2 - 0.033333333333333*G12_0_0 - 0.133333333333333*G12_0_1 - 0.033333333333333*G12_0_2 - 0.033333333333333*G12_1_0 - 0.133333333333333*G12_1_1 - 0.033333333333333*G12_1_2 - 0.033333333333333*G12_2_0 - 0.133333333333333*G12_2_1 - 0.033333333333333*G12_2_2;
32815
A[709] = -0.133333333333333*G6_0_0 - 0.033333333333333*G6_0_1 - 0.033333333333333*G6_0_2 - 0.133333333333333*G6_1_0 - 0.033333333333333*G6_1_1 - 0.033333333333333*G6_1_2 - 0.133333333333333*G6_2_0 - 0.033333333333333*G6_2_1 - 0.033333333333333*G6_2_2 - 0.133333333333333*G9_0_0 - 0.033333333333333*G9_0_1 - 0.033333333333333*G9_0_2 - 0.133333333333333*G9_1_0 - 0.033333333333333*G9_1_1 - 0.033333333333333*G9_1_2 - 0.133333333333333*G9_2_0 - 0.033333333333333*G9_2_1 - 0.033333333333333*G9_2_2 - 0.133333333333333*G12_0_0 - 0.033333333333333*G12_0_1 - 0.033333333333333*G12_0_2 - 0.133333333333333*G12_1_0 - 0.033333333333333*G12_1_1 - 0.033333333333333*G12_1_2 - 0.133333333333333*G12_2_0 - 0.033333333333333*G12_2_1 - 0.033333333333333*G12_2_2;
32816
A[710] = -0.025000000000000*G3_0 - 0.025000000000000*G3_1 - 0.025000000000000*G3_2;
32817
A[711] = 0.008333333333333*G3_0 + 0.008333333333333*G3_1 + 0.008333333333333*G3_2;
32818
A[712] = 0.008333333333333*G3_0 + 0.008333333333333*G3_1 + 0.008333333333333*G3_2;
32819
A[713] = 0.008333333333333*G3_0 + 0.008333333333333*G3_1 + 0.008333333333333*G3_2;
32820
A[714] = 0.000000000000000;
32821
A[715] = 0.000000000000000;
32822
A[716] = 0.000000000000000;
32823
A[717] = 0.000000000000000;
32824
A[718] = 0.000000000000000;
32825
A[719] = 0.000000000000000;
32826
A[720] = 0.000000000000000;
32827
A[721] = 0.000000000000000;
32828
A[722] = 0.000000000000000;
32829
A[723] = 0.000000000000000;
32830
A[724] = 0.000000000000000;
32831
A[725] = 0.000000000000000;
32832
A[726] = 0.000000000000000;
32833
A[727] = 0.000000000000000;
32834
A[728] = 0.000000000000000;
32835
A[729] = 0.000000000000000;
32836
A[730] = 0.000000000000000;
32837
A[731] = 0.000000000000000;
32838
A[732] = 0.000000000000000;
32839
A[733] = 0.000000000000000;
32840
A[734] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_1 + 0.033333333333333*G6_0_2 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_0_2 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_0_2;
32841
A[735] = 0.100000000000000*G6_0_0 + 0.100000000000000*G9_0_0 + 0.100000000000000*G12_0_0;
32842
A[736] = -0.033333333333333*G6_0_1 - 0.033333333333333*G9_0_1 - 0.033333333333333*G12_0_1;
32843
A[737] = -0.033333333333333*G6_0_2 - 0.033333333333333*G9_0_2 - 0.033333333333333*G12_0_2;
32844
A[738] = -0.033333333333333*G6_0_1 - 0.033333333333333*G6_0_2 - 0.033333333333333*G9_0_1 - 0.033333333333333*G9_0_2 - 0.033333333333333*G12_0_1 - 0.033333333333333*G12_0_2;
32845
A[739] = -0.033333333333333*G6_0_0 + 0.100000000000000*G6_0_2 - 0.033333333333333*G9_0_0 + 0.100000000000000*G9_0_2 - 0.033333333333333*G12_0_0 + 0.100000000000000*G12_0_2;
32846
A[740] = -0.033333333333333*G6_0_0 + 0.100000000000000*G6_0_1 - 0.033333333333333*G9_0_0 + 0.100000000000000*G9_0_1 - 0.033333333333333*G12_0_0 + 0.100000000000000*G12_0_1;
32847
A[741] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_1 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_1 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_1;
32848
A[742] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_2 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_2 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_2;
32849
A[743] = -0.133333333333333*G6_0_0 - 0.100000000000000*G6_0_1 - 0.100000000000000*G6_0_2 - 0.133333333333333*G9_0_0 - 0.100000000000000*G9_0_1 - 0.100000000000000*G9_0_2 - 0.133333333333333*G12_0_0 - 0.100000000000000*G12_0_1 - 0.100000000000000*G12_0_2;
32850
A[744] = -0.008333333333333*G3_0;
32851
A[745] = 0.025000000000000*G3_0;
32852
A[746] = -0.008333333333333*G3_0;
32853
A[747] = -0.008333333333333*G3_0;
32854
A[748] = 0.000000000000000;
32855
A[749] = 0.000000000000000;
32856
A[750] = 0.000000000000000;
32857
A[751] = 0.000000000000000;
32858
A[752] = 0.000000000000000;
32859
A[753] = 0.000000000000000;
32860
A[754] = 0.000000000000000;
32861
A[755] = 0.000000000000000;
32862
A[756] = 0.000000000000000;
32863
A[757] = 0.000000000000000;
32864
A[758] = 0.000000000000000;
32865
A[759] = 0.000000000000000;
32866
A[760] = 0.000000000000000;
32867
A[761] = 0.000000000000000;
32868
A[762] = 0.000000000000000;
32869
A[763] = 0.000000000000000;
32870
A[764] = 0.000000000000000;
32871
A[765] = 0.000000000000000;
32872
A[766] = 0.000000000000000;
32873
A[767] = 0.000000000000000;
32874
A[768] = 0.033333333333333*G6_1_0 + 0.033333333333333*G6_1_1 + 0.033333333333333*G6_1_2 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_1_2 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_1_2;
32875
A[769] = -0.033333333333333*G6_1_0 - 0.033333333333333*G9_1_0 - 0.033333333333333*G12_1_0;
32876
A[770] = 0.100000000000000*G6_1_1 + 0.100000000000000*G9_1_1 + 0.100000000000000*G12_1_1;
32877
A[771] = -0.033333333333333*G6_1_2 - 0.033333333333333*G9_1_2 - 0.033333333333333*G12_1_2;
32878
A[772] = -0.033333333333333*G6_1_1 + 0.100000000000000*G6_1_2 - 0.033333333333333*G9_1_1 + 0.100000000000000*G9_1_2 - 0.033333333333333*G12_1_1 + 0.100000000000000*G12_1_2;
32879
A[773] = -0.033333333333333*G6_1_0 - 0.033333333333333*G6_1_2 - 0.033333333333333*G9_1_0 - 0.033333333333333*G9_1_2 - 0.033333333333333*G12_1_0 - 0.033333333333333*G12_1_2;
32880
A[774] = 0.100000000000000*G6_1_0 - 0.033333333333333*G6_1_1 + 0.100000000000000*G9_1_0 - 0.033333333333333*G9_1_1 + 0.100000000000000*G12_1_0 - 0.033333333333333*G12_1_1;
32881
A[775] = 0.033333333333333*G6_1_0 + 0.033333333333333*G6_1_1 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_1_1 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_1_1;
32882
A[776] = -0.100000000000000*G6_1_0 - 0.133333333333333*G6_1_1 - 0.100000000000000*G6_1_2 - 0.100000000000000*G9_1_0 - 0.133333333333333*G9_1_1 - 0.100000000000000*G9_1_2 - 0.100000000000000*G12_1_0 - 0.133333333333333*G12_1_1 - 0.100000000000000*G12_1_2;
32883
A[777] = 0.033333333333333*G6_1_1 + 0.033333333333333*G6_1_2 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_1_2 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_1_2;
32884
A[778] = -0.008333333333333*G3_1;
32885
A[779] = -0.008333333333333*G3_1;
32886
A[780] = 0.025000000000000*G3_1;
32887
A[781] = -0.008333333333333*G3_1;
32888
A[782] = 0.000000000000000;
32889
A[783] = 0.000000000000000;
32890
A[784] = 0.000000000000000;
32891
A[785] = 0.000000000000000;
32892
A[786] = 0.000000000000000;
32893
A[787] = 0.000000000000000;
32894
A[788] = 0.000000000000000;
32895
A[789] = 0.000000000000000;
32896
A[790] = 0.000000000000000;
32897
A[791] = 0.000000000000000;
32898
A[792] = 0.000000000000000;
32899
A[793] = 0.000000000000000;
32900
A[794] = 0.000000000000000;
32901
A[795] = 0.000000000000000;
32902
A[796] = 0.000000000000000;
32903
A[797] = 0.000000000000000;
32904
A[798] = 0.000000000000000;
32905
A[799] = 0.000000000000000;
32906
A[800] = 0.000000000000000;
32907
A[801] = 0.000000000000000;
32908
A[802] = 0.033333333333333*G6_2_0 + 0.033333333333333*G6_2_1 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_2_0 + 0.033333333333333*G9_2_1 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_2_0 + 0.033333333333333*G12_2_1 + 0.033333333333333*G12_2_2;
32909
A[803] = -0.033333333333333*G6_2_0 - 0.033333333333333*G9_2_0 - 0.033333333333333*G12_2_0;
32910
A[804] = -0.033333333333333*G6_2_1 - 0.033333333333333*G9_2_1 - 0.033333333333333*G12_2_1;
32911
A[805] = 0.100000000000000*G6_2_2 + 0.100000000000000*G9_2_2 + 0.100000000000000*G12_2_2;
32912
A[806] = 0.100000000000000*G6_2_1 - 0.033333333333333*G6_2_2 + 0.100000000000000*G9_2_1 - 0.033333333333333*G9_2_2 + 0.100000000000000*G12_2_1 - 0.033333333333333*G12_2_2;
32913
A[807] = 0.100000000000000*G6_2_0 - 0.033333333333333*G6_2_2 + 0.100000000000000*G9_2_0 - 0.033333333333333*G9_2_2 + 0.100000000000000*G12_2_0 - 0.033333333333333*G12_2_2;
32914
A[808] = -0.033333333333333*G6_2_0 - 0.033333333333333*G6_2_1 - 0.033333333333333*G9_2_0 - 0.033333333333333*G9_2_1 - 0.033333333333333*G12_2_0 - 0.033333333333333*G12_2_1;
32915
A[809] = -0.100000000000000*G6_2_0 - 0.100000000000000*G6_2_1 - 0.133333333333333*G6_2_2 - 0.100000000000000*G9_2_0 - 0.100000000000000*G9_2_1 - 0.133333333333333*G9_2_2 - 0.100000000000000*G12_2_0 - 0.100000000000000*G12_2_1 - 0.133333333333333*G12_2_2;
32916
A[810] = 0.033333333333333*G6_2_0 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_2_0 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_2_0 + 0.033333333333333*G12_2_2;
32917
A[811] = 0.033333333333333*G6_2_1 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_2_1 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_2_1 + 0.033333333333333*G12_2_2;
32918
A[812] = -0.008333333333333*G3_2;
32919
A[813] = -0.008333333333333*G3_2;
32920
A[814] = -0.008333333333333*G3_2;
32921
A[815] = 0.025000000000000*G3_2;
32922
A[816] = 0.000000000000000;
32923
A[817] = 0.000000000000000;
32924
A[818] = 0.000000000000000;
32925
A[819] = 0.000000000000000;
32926
A[820] = 0.000000000000000;
32927
A[821] = 0.000000000000000;
32928
A[822] = 0.000000000000000;
32929
A[823] = 0.000000000000000;
32930
A[824] = 0.000000000000000;
32931
A[825] = 0.000000000000000;
32932
A[826] = 0.000000000000000;
32933
A[827] = 0.000000000000000;
32934
A[828] = 0.000000000000000;
32935
A[829] = 0.000000000000000;
32936
A[830] = 0.000000000000000;
32937
A[831] = 0.000000000000000;
32938
A[832] = 0.000000000000000;
32939
A[833] = 0.000000000000000;
32940
A[834] = 0.000000000000000;
32941
A[835] = 0.000000000000000;
32942
A[836] = 0.033333333333333*G6_1_0 + 0.033333333333333*G6_1_1 + 0.033333333333333*G6_1_2 + 0.033333333333333*G6_2_0 + 0.033333333333333*G6_2_1 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_1_2 + 0.033333333333333*G9_2_0 + 0.033333333333333*G9_2_1 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_1_2 + 0.033333333333333*G12_2_0 + 0.033333333333333*G12_2_1 + 0.033333333333333*G12_2_2;
32943
A[837] = -0.033333333333333*G6_1_0 - 0.033333333333333*G6_2_0 - 0.033333333333333*G9_1_0 - 0.033333333333333*G9_2_0 - 0.033333333333333*G12_1_0 - 0.033333333333333*G12_2_0;
32944
A[838] = -0.033333333333333*G6_1_1 + 0.100000000000000*G6_2_1 - 0.033333333333333*G9_1_1 + 0.100000000000000*G9_2_1 - 0.033333333333333*G12_1_1 + 0.100000000000000*G12_2_1;
32945
A[839] = 0.100000000000000*G6_1_2 - 0.033333333333333*G6_2_2 + 0.100000000000000*G9_1_2 - 0.033333333333333*G9_2_2 + 0.100000000000000*G12_1_2 - 0.033333333333333*G12_2_2;
32946
A[840] = 0.266666666666666*G6_1_1 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_1 + 0.266666666666666*G6_2_2 + 0.266666666666666*G9_1_1 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_1 + 0.266666666666666*G9_2_2 + 0.266666666666666*G12_1_1 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_1 + 0.266666666666666*G12_2_2;
32947
A[841] = 0.266666666666666*G6_1_0 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_0 + 0.133333333333333*G6_2_2 + 0.266666666666666*G9_1_0 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_0 + 0.133333333333333*G9_2_2 + 0.266666666666666*G12_1_0 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_0 + 0.133333333333333*G12_2_2;
32948
A[842] = 0.133333333333333*G6_1_0 + 0.133333333333333*G6_1_1 + 0.266666666666666*G6_2_0 + 0.133333333333333*G6_2_1 + 0.133333333333333*G9_1_0 + 0.133333333333333*G9_1_1 + 0.266666666666666*G9_2_0 + 0.133333333333333*G9_2_1 + 0.133333333333333*G12_1_0 + 0.133333333333333*G12_1_1 + 0.266666666666666*G12_2_0 + 0.133333333333333*G12_2_1;
32949
A[843] = -0.266666666666666*G6_1_0 - 0.266666666666666*G6_1_1 - 0.133333333333333*G6_1_2 - 0.133333333333333*G6_2_0 - 0.133333333333333*G6_2_1 - 0.266666666666666*G9_1_0 - 0.266666666666666*G9_1_1 - 0.133333333333333*G9_1_2 - 0.133333333333333*G9_2_0 - 0.133333333333333*G9_2_1 - 0.266666666666666*G12_1_0 - 0.266666666666666*G12_1_1 - 0.133333333333333*G12_1_2 - 0.133333333333333*G12_2_0 - 0.133333333333333*G12_2_1;
32950
A[844] = -0.133333333333333*G6_1_0 - 0.133333333333333*G6_1_2 - 0.266666666666666*G6_2_0 - 0.133333333333333*G6_2_1 - 0.266666666666666*G6_2_2 - 0.133333333333333*G9_1_0 - 0.133333333333333*G9_1_2 - 0.266666666666666*G9_2_0 - 0.133333333333333*G9_2_1 - 0.266666666666666*G9_2_2 - 0.133333333333333*G12_1_0 - 0.133333333333333*G12_1_2 - 0.266666666666666*G12_2_0 - 0.133333333333333*G12_2_1 - 0.266666666666666*G12_2_2;
32951
A[845] = -0.133333333333333*G6_1_1 - 0.133333333333333*G6_1_2 - 0.133333333333333*G6_2_1 - 0.133333333333333*G6_2_2 - 0.133333333333333*G9_1_1 - 0.133333333333333*G9_1_2 - 0.133333333333333*G9_2_1 - 0.133333333333333*G9_2_2 - 0.133333333333333*G12_1_1 - 0.133333333333333*G12_1_2 - 0.133333333333333*G12_2_1 - 0.133333333333333*G12_2_2;
32952
A[846] = 0.033333333333333*G3_1 + 0.033333333333333*G3_2;
32953
A[847] = 0.033333333333333*G3_1 + 0.033333333333333*G3_2;
32954
A[848] = 0.033333333333333*G3_1 + 0.066666666666666*G3_2;
32955
A[849] = 0.066666666666666*G3_1 + 0.033333333333333*G3_2;
32956
A[850] = 0.000000000000000;
32957
A[851] = 0.000000000000000;
32958
A[852] = 0.000000000000000;
32959
A[853] = 0.000000000000000;
32960
A[854] = 0.000000000000000;
32961
A[855] = 0.000000000000000;
32962
A[856] = 0.000000000000000;
32963
A[857] = 0.000000000000000;
32964
A[858] = 0.000000000000000;
32965
A[859] = 0.000000000000000;
32966
A[860] = 0.000000000000000;
32967
A[861] = 0.000000000000000;
32968
A[862] = 0.000000000000000;
32969
A[863] = 0.000000000000000;
32970
A[864] = 0.000000000000000;
32971
A[865] = 0.000000000000000;
32972
A[866] = 0.000000000000000;
32973
A[867] = 0.000000000000000;
32974
A[868] = 0.000000000000000;
32975
A[869] = 0.000000000000000;
32976
A[870] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_1 + 0.033333333333333*G6_0_2 + 0.033333333333333*G6_2_0 + 0.033333333333333*G6_2_1 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_0_2 + 0.033333333333333*G9_2_0 + 0.033333333333333*G9_2_1 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_0_2 + 0.033333333333333*G12_2_0 + 0.033333333333333*G12_2_1 + 0.033333333333333*G12_2_2;
32977
A[871] = -0.033333333333333*G6_0_0 + 0.100000000000000*G6_2_0 - 0.033333333333333*G9_0_0 + 0.100000000000000*G9_2_0 - 0.033333333333333*G12_0_0 + 0.100000000000000*G12_2_0;
32978
A[872] = -0.033333333333333*G6_0_1 - 0.033333333333333*G6_2_1 - 0.033333333333333*G9_0_1 - 0.033333333333333*G9_2_1 - 0.033333333333333*G12_0_1 - 0.033333333333333*G12_2_1;
32979
A[873] = 0.100000000000000*G6_0_2 - 0.033333333333333*G6_2_2 + 0.100000000000000*G9_0_2 - 0.033333333333333*G9_2_2 + 0.100000000000000*G12_0_2 - 0.033333333333333*G12_2_2;
32980
A[874] = 0.266666666666666*G6_0_1 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_2_1 + 0.133333333333333*G6_2_2 + 0.266666666666666*G9_0_1 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_2_1 + 0.133333333333333*G9_2_2 + 0.266666666666666*G12_0_1 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_2_1 + 0.133333333333333*G12_2_2;
32981
A[875] = 0.266666666666666*G6_0_0 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_2_0 + 0.266666666666666*G6_2_2 + 0.266666666666666*G9_0_0 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_2_0 + 0.266666666666666*G9_2_2 + 0.266666666666666*G12_0_0 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_2_0 + 0.266666666666666*G12_2_2;
32982
A[876] = 0.133333333333333*G6_0_0 + 0.133333333333333*G6_0_1 + 0.133333333333333*G6_2_0 + 0.266666666666666*G6_2_1 + 0.133333333333333*G9_0_0 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_2_0 + 0.266666666666666*G9_2_1 + 0.133333333333333*G12_0_0 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_2_0 + 0.266666666666666*G12_2_1;
32983
A[877] = -0.266666666666666*G6_0_0 - 0.266666666666666*G6_0_1 - 0.133333333333333*G6_0_2 - 0.133333333333333*G6_2_0 - 0.133333333333333*G6_2_1 - 0.266666666666666*G9_0_0 - 0.266666666666666*G9_0_1 - 0.133333333333333*G9_0_2 - 0.133333333333333*G9_2_0 - 0.133333333333333*G9_2_1 - 0.266666666666666*G12_0_0 - 0.266666666666666*G12_0_1 - 0.133333333333333*G12_0_2 - 0.133333333333333*G12_2_0 - 0.133333333333333*G12_2_1;
32984
A[878] = -0.133333333333333*G6_0_0 - 0.133333333333333*G6_0_2 - 0.133333333333333*G6_2_0 - 0.133333333333333*G6_2_2 - 0.133333333333333*G9_0_0 - 0.133333333333333*G9_0_2 - 0.133333333333333*G9_2_0 - 0.133333333333333*G9_2_2 - 0.133333333333333*G12_0_0 - 0.133333333333333*G12_0_2 - 0.133333333333333*G12_2_0 - 0.133333333333333*G12_2_2;
32985
A[879] = -0.133333333333333*G6_0_1 - 0.133333333333333*G6_0_2 - 0.133333333333333*G6_2_0 - 0.266666666666666*G6_2_1 - 0.266666666666666*G6_2_2 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_0_2 - 0.133333333333333*G9_2_0 - 0.266666666666666*G9_2_1 - 0.266666666666666*G9_2_2 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_0_2 - 0.133333333333333*G12_2_0 - 0.266666666666666*G12_2_1 - 0.266666666666666*G12_2_2;
32986
A[880] = 0.033333333333333*G3_0 + 0.033333333333333*G3_2;
32987
A[881] = 0.033333333333333*G3_0 + 0.066666666666667*G3_2;
32988
A[882] = 0.033333333333333*G3_0 + 0.033333333333333*G3_2;
32989
A[883] = 0.066666666666667*G3_0 + 0.033333333333333*G3_2;
32990
A[884] = 0.000000000000000;
32991
A[885] = 0.000000000000000;
32992
A[886] = 0.000000000000000;
32993
A[887] = 0.000000000000000;
32994
A[888] = 0.000000000000000;
32995
A[889] = 0.000000000000000;
32996
A[890] = 0.000000000000000;
32997
A[891] = 0.000000000000000;
32998
A[892] = 0.000000000000000;
32999
A[893] = 0.000000000000000;
33000
A[894] = 0.000000000000000;
33001
A[895] = 0.000000000000000;
33002
A[896] = 0.000000000000000;
33003
A[897] = 0.000000000000000;
33004
A[898] = 0.000000000000000;
33005
A[899] = 0.000000000000000;
33006
A[900] = 0.000000000000000;
33007
A[901] = 0.000000000000000;
33008
A[902] = 0.000000000000000;
33009
A[903] = 0.000000000000000;
33010
A[904] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_0_1 + 0.033333333333333*G6_0_2 + 0.033333333333333*G6_1_0 + 0.033333333333333*G6_1_1 + 0.033333333333333*G6_1_2 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_0_2 + 0.033333333333333*G9_1_0 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_1_2 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_0_2 + 0.033333333333333*G12_1_0 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_1_2;
33011
A[905] = -0.033333333333333*G6_0_0 + 0.100000000000000*G6_1_0 - 0.033333333333333*G9_0_0 + 0.100000000000000*G9_1_0 - 0.033333333333333*G12_0_0 + 0.100000000000000*G12_1_0;
33012
A[906] = 0.100000000000000*G6_0_1 - 0.033333333333333*G6_1_1 + 0.100000000000000*G9_0_1 - 0.033333333333333*G9_1_1 + 0.100000000000000*G12_0_1 - 0.033333333333333*G12_1_1;
33013
A[907] = -0.033333333333333*G6_0_2 - 0.033333333333333*G6_1_2 - 0.033333333333333*G9_0_2 - 0.033333333333333*G9_1_2 - 0.033333333333333*G12_0_2 - 0.033333333333333*G12_1_2;
33014
A[908] = 0.133333333333333*G6_0_1 + 0.266666666666666*G6_0_2 + 0.133333333333333*G6_1_1 + 0.133333333333333*G6_1_2 + 0.133333333333333*G9_0_1 + 0.266666666666666*G9_0_2 + 0.133333333333333*G9_1_1 + 0.133333333333333*G9_1_2 + 0.133333333333333*G12_0_1 + 0.266666666666666*G12_0_2 + 0.133333333333333*G12_1_1 + 0.133333333333333*G12_1_2;
33015
A[909] = 0.133333333333333*G6_0_0 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_1_0 + 0.266666666666666*G6_1_2 + 0.133333333333333*G9_0_0 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_1_0 + 0.266666666666666*G9_1_2 + 0.133333333333333*G12_0_0 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_1_0 + 0.266666666666666*G12_1_2;
33016
A[910] = 0.266666666666666*G6_0_0 + 0.133333333333333*G6_0_1 + 0.133333333333333*G6_1_0 + 0.266666666666666*G6_1_1 + 0.266666666666666*G9_0_0 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_1_0 + 0.266666666666666*G9_1_1 + 0.266666666666666*G12_0_0 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_1_0 + 0.266666666666666*G12_1_1;
33017
A[911] = -0.133333333333333*G6_0_0 - 0.133333333333333*G6_0_1 - 0.133333333333333*G6_1_0 - 0.133333333333333*G6_1_1 - 0.133333333333333*G9_0_0 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_1_0 - 0.133333333333333*G9_1_1 - 0.133333333333333*G12_0_0 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_1_0 - 0.133333333333333*G12_1_1;
33018
A[912] = -0.266666666666666*G6_0_0 - 0.133333333333333*G6_0_1 - 0.266666666666666*G6_0_2 - 0.133333333333333*G6_1_0 - 0.133333333333333*G6_1_2 - 0.266666666666666*G9_0_0 - 0.133333333333333*G9_0_1 - 0.266666666666666*G9_0_2 - 0.133333333333333*G9_1_0 - 0.133333333333333*G9_1_2 - 0.266666666666666*G12_0_0 - 0.133333333333333*G12_0_1 - 0.266666666666666*G12_0_2 - 0.133333333333333*G12_1_0 - 0.133333333333333*G12_1_2;
33019
A[913] = -0.133333333333333*G6_0_1 - 0.133333333333333*G6_0_2 - 0.133333333333333*G6_1_0 - 0.266666666666666*G6_1_1 - 0.266666666666666*G6_1_2 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_0_2 - 0.133333333333333*G9_1_0 - 0.266666666666666*G9_1_1 - 0.266666666666666*G9_1_2 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_0_2 - 0.133333333333333*G12_1_0 - 0.266666666666666*G12_1_1 - 0.266666666666666*G12_1_2;
33020
A[914] = 0.033333333333333*G3_0 + 0.033333333333333*G3_1;
33021
A[915] = 0.033333333333333*G3_0 + 0.066666666666667*G3_1;
33022
A[916] = 0.066666666666666*G3_0 + 0.033333333333333*G3_1;
33023
A[917] = 0.033333333333333*G3_0 + 0.033333333333333*G3_1;
33024
A[918] = 0.000000000000000;
33025
A[919] = 0.000000000000000;
33026
A[920] = 0.000000000000000;
33027
A[921] = 0.000000000000000;
33028
A[922] = 0.000000000000000;
33029
A[923] = 0.000000000000000;
33030
A[924] = 0.000000000000000;
33031
A[925] = 0.000000000000000;
33032
A[926] = 0.000000000000000;
33033
A[927] = 0.000000000000000;
33034
A[928] = 0.000000000000000;
33035
A[929] = 0.000000000000000;
33036
A[930] = 0.000000000000000;
33037
A[931] = 0.000000000000000;
33038
A[932] = 0.000000000000000;
33039
A[933] = 0.000000000000000;
33040
A[934] = 0.000000000000000;
33041
A[935] = 0.000000000000000;
33042
A[936] = 0.000000000000000;
33043
A[937] = 0.000000000000000;
33044
A[938] = -0.033333333333333*G6_0_0 - 0.033333333333333*G6_0_1 - 0.033333333333333*G6_0_2 - 0.033333333333333*G6_1_0 - 0.033333333333333*G6_1_1 - 0.033333333333333*G6_1_2 - 0.133333333333333*G6_2_0 - 0.133333333333333*G6_2_1 - 0.133333333333333*G6_2_2 - 0.033333333333333*G9_0_0 - 0.033333333333333*G9_0_1 - 0.033333333333333*G9_0_2 - 0.033333333333333*G9_1_0 - 0.033333333333333*G9_1_1 - 0.033333333333333*G9_1_2 - 0.133333333333333*G9_2_0 - 0.133333333333333*G9_2_1 - 0.133333333333333*G9_2_2 - 0.033333333333333*G12_0_0 - 0.033333333333333*G12_0_1 - 0.033333333333333*G12_0_2 - 0.033333333333333*G12_1_0 - 0.033333333333333*G12_1_1 - 0.033333333333333*G12_1_2 - 0.133333333333333*G12_2_0 - 0.133333333333333*G12_2_1 - 0.133333333333333*G12_2_2;
33045
A[939] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_1_0 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_1_0 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_1_0;
33046
A[940] = 0.033333333333333*G6_0_1 + 0.033333333333333*G6_1_1 + 0.033333333333333*G9_0_1 + 0.033333333333333*G9_1_1 + 0.033333333333333*G12_0_1 + 0.033333333333333*G12_1_1;
33047
A[941] = -0.100000000000000*G6_0_2 - 0.100000000000000*G6_1_2 - 0.133333333333333*G6_2_2 - 0.100000000000000*G9_0_2 - 0.100000000000000*G9_1_2 - 0.133333333333333*G9_2_2 - 0.100000000000000*G12_0_2 - 0.100000000000000*G12_1_2 - 0.133333333333333*G12_2_2;
33048
A[942] = -0.266666666666666*G6_0_1 - 0.133333333333333*G6_0_2 - 0.266666666666666*G6_1_1 - 0.133333333333333*G6_1_2 - 0.133333333333333*G6_2_1 - 0.266666666666666*G9_0_1 - 0.133333333333333*G9_0_2 - 0.266666666666666*G9_1_1 - 0.133333333333333*G9_1_2 - 0.133333333333333*G9_2_1 - 0.266666666666666*G12_0_1 - 0.133333333333333*G12_0_2 - 0.266666666666666*G12_1_1 - 0.133333333333333*G12_1_2 - 0.133333333333333*G12_2_1;
33049
A[943] = -0.266666666666666*G6_0_0 - 0.133333333333333*G6_0_2 - 0.266666666666666*G6_1_0 - 0.133333333333333*G6_1_2 - 0.133333333333333*G6_2_0 - 0.266666666666666*G9_0_0 - 0.133333333333333*G9_0_2 - 0.266666666666666*G9_1_0 - 0.133333333333333*G9_1_2 - 0.133333333333333*G9_2_0 - 0.266666666666666*G12_0_0 - 0.133333333333333*G12_0_2 - 0.266666666666666*G12_1_0 - 0.133333333333333*G12_1_2 - 0.133333333333333*G12_2_0;
33050
A[944] = -0.133333333333333*G6_0_0 - 0.133333333333333*G6_0_1 - 0.133333333333333*G6_1_0 - 0.133333333333333*G6_1_1 - 0.133333333333333*G9_0_0 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_1_0 - 0.133333333333333*G9_1_1 - 0.133333333333333*G12_0_0 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_1_0 - 0.133333333333333*G12_1_1;
33051
A[945] = 0.266666666666666*G6_0_0 + 0.266666666666666*G6_0_1 + 0.133333333333333*G6_0_2 + 0.266666666666666*G6_1_0 + 0.266666666666666*G6_1_1 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_0 + 0.133333333333333*G6_2_1 + 0.266666666666666*G6_2_2 + 0.266666666666666*G9_0_0 + 0.266666666666666*G9_0_1 + 0.133333333333333*G9_0_2 + 0.266666666666666*G9_1_0 + 0.266666666666666*G9_1_1 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_0 + 0.133333333333333*G9_2_1 + 0.266666666666666*G9_2_2 + 0.266666666666666*G12_0_0 + 0.266666666666666*G12_0_1 + 0.133333333333333*G12_0_2 + 0.266666666666666*G12_1_0 + 0.266666666666666*G12_1_1 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_0 + 0.133333333333333*G12_2_1 + 0.266666666666666*G12_2_2;
33052
A[946] = 0.133333333333333*G6_0_0 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_1_0 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_1 + 0.133333333333333*G9_0_0 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_1_0 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_1 + 0.133333333333333*G12_0_0 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_1_0 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_1;
33053
A[947] = 0.133333333333333*G6_0_1 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_1_1 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_0 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_1_1 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_0 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_1_1 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_0;
33054
A[948] = -0.033333333333333*G3_0 - 0.033333333333333*G3_1 + 0.033333333333333*G3_2;
33055
A[949] = -0.033333333333333*G3_0 - 0.033333333333333*G3_1;
33056
A[950] = -0.033333333333333*G3_0 - 0.033333333333333*G3_1;
33057
A[951] = -0.066666666666667*G3_0 - 0.066666666666666*G3_1 - 0.033333333333333*G3_2;
33058
A[952] = 0.000000000000000;
33059
A[953] = 0.000000000000000;
33060
A[954] = 0.000000000000000;
33061
A[955] = 0.000000000000000;
33062
A[956] = 0.000000000000000;
33063
A[957] = 0.000000000000000;
33064
A[958] = 0.000000000000000;
33065
A[959] = 0.000000000000000;
33066
A[960] = 0.000000000000000;
33067
A[961] = 0.000000000000000;
33068
A[962] = 0.000000000000000;
33069
A[963] = 0.000000000000000;
33070
A[964] = 0.000000000000000;
33071
A[965] = 0.000000000000000;
33072
A[966] = 0.000000000000000;
33073
A[967] = 0.000000000000000;
33074
A[968] = 0.000000000000000;
33075
A[969] = 0.000000000000000;
33076
A[970] = 0.000000000000000;
33077
A[971] = 0.000000000000000;
33078
A[972] = -0.033333333333333*G6_0_0 - 0.033333333333333*G6_0_1 - 0.033333333333333*G6_0_2 - 0.133333333333333*G6_1_0 - 0.133333333333333*G6_1_1 - 0.133333333333333*G6_1_2 - 0.033333333333333*G6_2_0 - 0.033333333333333*G6_2_1 - 0.033333333333333*G6_2_2 - 0.033333333333333*G9_0_0 - 0.033333333333333*G9_0_1 - 0.033333333333333*G9_0_2 - 0.133333333333333*G9_1_0 - 0.133333333333333*G9_1_1 - 0.133333333333333*G9_1_2 - 0.033333333333333*G9_2_0 - 0.033333333333333*G9_2_1 - 0.033333333333333*G9_2_2 - 0.033333333333333*G12_0_0 - 0.033333333333333*G12_0_1 - 0.033333333333333*G12_0_2 - 0.133333333333333*G12_1_0 - 0.133333333333333*G12_1_1 - 0.133333333333333*G12_1_2 - 0.033333333333333*G12_2_0 - 0.033333333333333*G12_2_1 - 0.033333333333333*G12_2_2;
33079
A[973] = 0.033333333333333*G6_0_0 + 0.033333333333333*G6_2_0 + 0.033333333333333*G9_0_0 + 0.033333333333333*G9_2_0 + 0.033333333333333*G12_0_0 + 0.033333333333333*G12_2_0;
33080
A[974] = -0.100000000000000*G6_0_1 - 0.133333333333333*G6_1_1 - 0.100000000000000*G6_2_1 - 0.100000000000000*G9_0_1 - 0.133333333333333*G9_1_1 - 0.100000000000000*G9_2_1 - 0.100000000000000*G12_0_1 - 0.133333333333333*G12_1_1 - 0.100000000000000*G12_2_1;
33081
A[975] = 0.033333333333333*G6_0_2 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_0_2 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_0_2 + 0.033333333333333*G12_2_2;
33082
A[976] = -0.133333333333333*G6_0_1 - 0.266666666666666*G6_0_2 - 0.133333333333333*G6_1_2 - 0.133333333333333*G6_2_1 - 0.266666666666666*G6_2_2 - 0.133333333333333*G9_0_1 - 0.266666666666666*G9_0_2 - 0.133333333333333*G9_1_2 - 0.133333333333333*G9_2_1 - 0.266666666666666*G9_2_2 - 0.133333333333333*G12_0_1 - 0.266666666666666*G12_0_2 - 0.133333333333333*G12_1_2 - 0.133333333333333*G12_2_1 - 0.266666666666666*G12_2_2;
33083
A[977] = -0.133333333333333*G6_0_0 - 0.133333333333333*G6_0_2 - 0.133333333333333*G6_2_0 - 0.133333333333333*G6_2_2 - 0.133333333333333*G9_0_0 - 0.133333333333333*G9_0_2 - 0.133333333333333*G9_2_0 - 0.133333333333333*G9_2_2 - 0.133333333333333*G12_0_0 - 0.133333333333333*G12_0_2 - 0.133333333333333*G12_2_0 - 0.133333333333333*G12_2_2;
33084
A[978] = -0.266666666666666*G6_0_0 - 0.133333333333333*G6_0_1 - 0.133333333333333*G6_1_0 - 0.266666666666666*G6_2_0 - 0.133333333333333*G6_2_1 - 0.266666666666666*G9_0_0 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_1_0 - 0.266666666666666*G9_2_0 - 0.133333333333333*G9_2_1 - 0.266666666666666*G12_0_0 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_1_0 - 0.266666666666666*G12_2_0 - 0.133333333333333*G12_2_1;
33085
A[979] = 0.133333333333333*G6_0_0 + 0.133333333333333*G6_0_1 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_0 + 0.133333333333333*G6_2_1 + 0.133333333333333*G9_0_0 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_0 + 0.133333333333333*G9_2_1 + 0.133333333333333*G12_0_0 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_0 + 0.133333333333333*G12_2_1;
33086
A[980] = 0.266666666666666*G6_0_0 + 0.133333333333333*G6_0_1 + 0.266666666666666*G6_0_2 + 0.133333333333333*G6_1_0 + 0.266666666666666*G6_1_1 + 0.133333333333333*G6_1_2 + 0.266666666666666*G6_2_0 + 0.133333333333333*G6_2_1 + 0.266666666666666*G6_2_2 + 0.266666666666666*G9_0_0 + 0.133333333333333*G9_0_1 + 0.266666666666666*G9_0_2 + 0.133333333333333*G9_1_0 + 0.266666666666666*G9_1_1 + 0.133333333333333*G9_1_2 + 0.266666666666666*G9_2_0 + 0.133333333333333*G9_2_1 + 0.266666666666666*G9_2_2 + 0.266666666666666*G12_0_0 + 0.133333333333333*G12_0_1 + 0.266666666666666*G12_0_2 + 0.133333333333333*G12_1_0 + 0.266666666666666*G12_1_1 + 0.133333333333333*G12_1_2 + 0.266666666666666*G12_2_0 + 0.133333333333333*G12_2_1 + 0.266666666666666*G12_2_2;
33087
A[981] = 0.133333333333333*G6_0_1 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_1_0 + 0.133333333333333*G6_2_1 + 0.133333333333333*G6_2_2 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_1_0 + 0.133333333333333*G9_2_1 + 0.133333333333333*G9_2_2 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_1_0 + 0.133333333333333*G12_2_1 + 0.133333333333333*G12_2_2;
33088
A[982] = -0.033333333333333*G3_0 + 0.033333333333333*G3_1 - 0.033333333333333*G3_2;
33089
A[983] = -0.033333333333333*G3_0 - 0.033333333333333*G3_2;
33090
A[984] = -0.066666666666666*G3_0 - 0.033333333333333*G3_1 - 0.066666666666666*G3_2;
33091
A[985] = -0.033333333333333*G3_0 - 0.033333333333333*G3_2;
33092
A[986] = 0.000000000000000;
33093
A[987] = 0.000000000000000;
33094
A[988] = 0.000000000000000;
33095
A[989] = 0.000000000000000;
33096
A[990] = 0.000000000000000;
33097
A[991] = 0.000000000000000;
33098
A[992] = 0.000000000000000;
33099
A[993] = 0.000000000000000;
33100
A[994] = 0.000000000000000;
33101
A[995] = 0.000000000000000;
33102
A[996] = 0.000000000000000;
33103
A[997] = 0.000000000000000;
33104
A[998] = 0.000000000000000;
33105
A[999] = 0.000000000000000;
33106
A[1000] = 0.000000000000000;
33107
A[1001] = 0.000000000000000;
33108
A[1002] = 0.000000000000000;
33109
A[1003] = 0.000000000000000;
33110
A[1004] = 0.000000000000000;
33111
A[1005] = 0.000000000000000;
33112
A[1006] = -0.133333333333333*G6_0_0 - 0.133333333333333*G6_0_1 - 0.133333333333333*G6_0_2 - 0.033333333333333*G6_1_0 - 0.033333333333333*G6_1_1 - 0.033333333333333*G6_1_2 - 0.033333333333333*G6_2_0 - 0.033333333333333*G6_2_1 - 0.033333333333333*G6_2_2 - 0.133333333333333*G9_0_0 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_0_2 - 0.033333333333333*G9_1_0 - 0.033333333333333*G9_1_1 - 0.033333333333333*G9_1_2 - 0.033333333333333*G9_2_0 - 0.033333333333333*G9_2_1 - 0.033333333333333*G9_2_2 - 0.133333333333333*G12_0_0 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_0_2 - 0.033333333333333*G12_1_0 - 0.033333333333333*G12_1_1 - 0.033333333333333*G12_1_2 - 0.033333333333333*G12_2_0 - 0.033333333333333*G12_2_1 - 0.033333333333333*G12_2_2;
33113
A[1007] = -0.133333333333333*G6_0_0 - 0.100000000000000*G6_1_0 - 0.100000000000000*G6_2_0 - 0.133333333333333*G9_0_0 - 0.100000000000000*G9_1_0 - 0.100000000000000*G9_2_0 - 0.133333333333333*G12_0_0 - 0.100000000000000*G12_1_0 - 0.100000000000000*G12_2_0;
33114
A[1008] = 0.033333333333333*G6_1_1 + 0.033333333333333*G6_2_1 + 0.033333333333333*G9_1_1 + 0.033333333333333*G9_2_1 + 0.033333333333333*G12_1_1 + 0.033333333333333*G12_2_1;
33115
A[1009] = 0.033333333333333*G6_1_2 + 0.033333333333333*G6_2_2 + 0.033333333333333*G9_1_2 + 0.033333333333333*G9_2_2 + 0.033333333333333*G12_1_2 + 0.033333333333333*G12_2_2;
33116
A[1010] = -0.133333333333333*G6_1_1 - 0.133333333333333*G6_1_2 - 0.133333333333333*G6_2_1 - 0.133333333333333*G6_2_2 - 0.133333333333333*G9_1_1 - 0.133333333333333*G9_1_2 - 0.133333333333333*G9_2_1 - 0.133333333333333*G9_2_2 - 0.133333333333333*G12_1_1 - 0.133333333333333*G12_1_2 - 0.133333333333333*G12_2_1 - 0.133333333333333*G12_2_2;
33117
A[1011] = -0.133333333333333*G6_0_2 - 0.133333333333333*G6_1_0 - 0.266666666666666*G6_1_2 - 0.133333333333333*G6_2_0 - 0.266666666666666*G6_2_2 - 0.133333333333333*G9_0_2 - 0.133333333333333*G9_1_0 - 0.266666666666666*G9_1_2 - 0.133333333333333*G9_2_0 - 0.266666666666666*G9_2_2 - 0.133333333333333*G12_0_2 - 0.133333333333333*G12_1_0 - 0.266666666666666*G12_1_2 - 0.133333333333333*G12_2_0 - 0.266666666666666*G12_2_2;
33118
A[1012] = -0.133333333333333*G6_0_1 - 0.133333333333333*G6_1_0 - 0.266666666666666*G6_1_1 - 0.133333333333333*G6_2_0 - 0.266666666666666*G6_2_1 - 0.133333333333333*G9_0_1 - 0.133333333333333*G9_1_0 - 0.266666666666666*G9_1_1 - 0.133333333333333*G9_2_0 - 0.266666666666666*G9_2_1 - 0.133333333333333*G12_0_1 - 0.133333333333333*G12_1_0 - 0.266666666666666*G12_1_1 - 0.133333333333333*G12_2_0 - 0.266666666666666*G12_2_1;
33119
A[1013] = 0.133333333333333*G6_0_2 + 0.133333333333333*G6_1_0 + 0.133333333333333*G6_1_1 + 0.133333333333333*G6_2_0 + 0.133333333333333*G6_2_1 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_1_0 + 0.133333333333333*G9_1_1 + 0.133333333333333*G9_2_0 + 0.133333333333333*G9_2_1 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_1_0 + 0.133333333333333*G12_1_1 + 0.133333333333333*G12_2_0 + 0.133333333333333*G12_2_1;
33120
A[1014] = 0.133333333333333*G6_0_1 + 0.133333333333333*G6_1_0 + 0.133333333333333*G6_1_2 + 0.133333333333333*G6_2_0 + 0.133333333333333*G6_2_2 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_1_0 + 0.133333333333333*G9_1_2 + 0.133333333333333*G9_2_0 + 0.133333333333333*G9_2_2 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_1_0 + 0.133333333333333*G12_1_2 + 0.133333333333333*G12_2_0 + 0.133333333333333*G12_2_2;
33121
A[1015] = 0.266666666666666*G6_0_0 + 0.133333333333333*G6_0_1 + 0.133333333333333*G6_0_2 + 0.133333333333333*G6_1_0 + 0.266666666666666*G6_1_1 + 0.266666666666666*G6_1_2 + 0.133333333333333*G6_2_0 + 0.266666666666666*G6_2_1 + 0.266666666666666*G6_2_2 + 0.266666666666666*G9_0_0 + 0.133333333333333*G9_0_1 + 0.133333333333333*G9_0_2 + 0.133333333333333*G9_1_0 + 0.266666666666666*G9_1_1 + 0.266666666666666*G9_1_2 + 0.133333333333333*G9_2_0 + 0.266666666666666*G9_2_1 + 0.266666666666666*G9_2_2 + 0.266666666666666*G12_0_0 + 0.133333333333333*G12_0_1 + 0.133333333333333*G12_0_2 + 0.133333333333333*G12_1_0 + 0.266666666666666*G12_1_1 + 0.266666666666666*G12_1_2 + 0.133333333333333*G12_2_0 + 0.266666666666666*G12_2_1 + 0.266666666666666*G12_2_2;
33122
A[1016] = 0.033333333333333*G3_0 - 0.033333333333333*G3_1 - 0.033333333333333*G3_2;
33123
A[1017] = -0.033333333333333*G3_0 - 0.066666666666666*G3_1 - 0.066666666666667*G3_2;
33124
A[1018] = -0.033333333333333*G3_1 - 0.033333333333333*G3_2;
33125
A[1019] = -0.033333333333333*G3_1 - 0.033333333333333*G3_2;
33126
A[1020] = -0.025000000000000*G1_0 - 0.025000000000000*G1_1 - 0.025000000000000*G1_2;
33127
A[1021] = -0.008333333333333*G1_0;
33128
A[1022] = -0.008333333333333*G1_1;
33129
A[1023] = -0.008333333333333*G1_2;
33130
A[1024] = 0.033333333333333*G1_1 + 0.033333333333333*G1_2;
33131
A[1025] = 0.033333333333333*G1_0 + 0.033333333333333*G1_2;
33132
A[1026] = 0.033333333333333*G1_0 + 0.033333333333333*G1_1;
33133
A[1027] = -0.033333333333333*G1_0 - 0.033333333333333*G1_1 + 0.033333333333333*G1_2;
33134
A[1028] = -0.033333333333333*G1_0 + 0.033333333333333*G1_1 - 0.033333333333333*G1_2;
33135
A[1029] = 0.033333333333333*G1_0 - 0.033333333333333*G1_1 - 0.033333333333333*G1_2;
33136
A[1030] = -0.025000000000000*G2_0 - 0.025000000000000*G2_1 - 0.025000000000000*G2_2;
33137
A[1031] = -0.008333333333333*G2_0;
33138
A[1032] = -0.008333333333333*G2_1;
33139
A[1033] = -0.008333333333333*G2_2;
33140
A[1034] = 0.033333333333333*G2_1 + 0.033333333333333*G2_2;
33141
A[1035] = 0.033333333333333*G2_0 + 0.033333333333333*G2_2;
33142
A[1036] = 0.033333333333333*G2_0 + 0.033333333333333*G2_1;
33143
A[1037] = -0.033333333333333*G2_0 - 0.033333333333333*G2_1 + 0.033333333333333*G2_2;
33144
A[1038] = -0.033333333333333*G2_0 + 0.033333333333333*G2_1 - 0.033333333333333*G2_2;
33145
A[1039] = 0.033333333333333*G2_0 - 0.033333333333333*G2_1 - 0.033333333333333*G2_2;
33146
A[1040] = -0.025000000000000*G0_0 - 0.025000000000000*G0_1 - 0.025000000000000*G0_2;
33147
A[1041] = -0.008333333333333*G0_0;
33148
A[1042] = -0.008333333333333*G0_1;
33149
A[1043] = -0.008333333333333*G0_2;
33150
A[1044] = 0.033333333333333*G0_1 + 0.033333333333333*G0_2;
33151
A[1045] = 0.033333333333333*G0_0 + 0.033333333333333*G0_2;
33152
A[1046] = 0.033333333333333*G0_0 + 0.033333333333333*G0_1;
33153
A[1047] = -0.033333333333333*G0_0 - 0.033333333333333*G0_1 + 0.033333333333333*G0_2;
33154
A[1048] = -0.033333333333333*G0_0 + 0.033333333333333*G0_1 - 0.033333333333333*G0_2;
33155
A[1049] = 0.033333333333333*G0_0 - 0.033333333333333*G0_1 - 0.033333333333333*G0_2;
33156
A[1050] = 0.000000000000000;
33157
A[1051] = 0.000000000000000;
33158
A[1052] = 0.000000000000000;
33159
A[1053] = 0.000000000000000;
33160
A[1054] = 0.008333333333333*G1_0 + 0.008333333333333*G1_1 + 0.008333333333333*G1_2;
33161
A[1055] = 0.025000000000000*G1_0;
33162
A[1056] = -0.008333333333333*G1_1;
33163
A[1057] = -0.008333333333333*G1_2;
33164
A[1058] = 0.033333333333333*G1_1 + 0.033333333333333*G1_2;
33165
A[1059] = 0.033333333333333*G1_0 + 0.066666666666667*G1_2;
33166
A[1060] = 0.033333333333333*G1_0 + 0.066666666666667*G1_1;
33167
A[1061] = -0.033333333333333*G1_0 - 0.033333333333333*G1_1;
33168
A[1062] = -0.033333333333333*G1_0 - 0.033333333333333*G1_2;
33169
A[1063] = -0.033333333333333*G1_0 - 0.066666666666666*G1_1 - 0.066666666666667*G1_2;
33170
A[1064] = 0.008333333333333*G2_0 + 0.008333333333333*G2_1 + 0.008333333333333*G2_2;
33171
A[1065] = 0.025000000000000*G2_0;
33172
A[1066] = -0.008333333333333*G2_1;
33173
A[1067] = -0.008333333333333*G2_2;
33174
A[1068] = 0.033333333333333*G2_1 + 0.033333333333333*G2_2;
33175
A[1069] = 0.033333333333333*G2_0 + 0.066666666666667*G2_2;
33176
A[1070] = 0.033333333333333*G2_0 + 0.066666666666667*G2_1;
33177
A[1071] = -0.033333333333333*G2_0 - 0.033333333333333*G2_1;
33178
A[1072] = -0.033333333333333*G2_0 - 0.033333333333333*G2_2;
33179
A[1073] = -0.033333333333333*G2_0 - 0.066666666666666*G2_1 - 0.066666666666667*G2_2;
33180
A[1074] = 0.008333333333333*G0_0 + 0.008333333333333*G0_1 + 0.008333333333333*G0_2;
33181
A[1075] = 0.025000000000000*G0_0;
33182
A[1076] = -0.008333333333333*G0_1;
33183
A[1077] = -0.008333333333333*G0_2;
33184
A[1078] = 0.033333333333333*G0_1 + 0.033333333333333*G0_2;
33185
A[1079] = 0.033333333333333*G0_0 + 0.066666666666667*G0_2;
33186
A[1080] = 0.033333333333333*G0_0 + 0.066666666666667*G0_1;
33187
A[1081] = -0.033333333333333*G0_0 - 0.033333333333333*G0_1;
33188
A[1082] = -0.033333333333333*G0_0 - 0.033333333333333*G0_2;
33189
A[1083] = -0.033333333333333*G0_0 - 0.066666666666666*G0_1 - 0.066666666666667*G0_2;
33190
A[1084] = 0.000000000000000;
33191
A[1085] = 0.000000000000000;
33192
A[1086] = 0.000000000000000;
33193
A[1087] = 0.000000000000000;
33194
A[1088] = 0.008333333333333*G1_0 + 0.008333333333333*G1_1 + 0.008333333333333*G1_2;
33195
A[1089] = -0.008333333333333*G1_0;
33196
A[1090] = 0.025000000000000*G1_1;
33197
A[1091] = -0.008333333333333*G1_2;
33198
A[1092] = 0.033333333333333*G1_1 + 0.066666666666666*G1_2;
33199
A[1093] = 0.033333333333333*G1_0 + 0.033333333333333*G1_2;
33200
A[1094] = 0.066666666666666*G1_0 + 0.033333333333333*G1_1;
33201
A[1095] = -0.033333333333333*G1_0 - 0.033333333333333*G1_1;
33202
A[1096] = -0.066666666666666*G1_0 - 0.033333333333333*G1_1 - 0.066666666666666*G1_2;
33203
A[1097] = -0.033333333333333*G1_1 - 0.033333333333333*G1_2;
33204
A[1098] = 0.008333333333333*G2_0 + 0.008333333333333*G2_1 + 0.008333333333333*G2_2;
33205
A[1099] = -0.008333333333333*G2_0;
33206
A[1100] = 0.025000000000000*G2_1;
33207
A[1101] = -0.008333333333333*G2_2;
33208
A[1102] = 0.033333333333333*G2_1 + 0.066666666666666*G2_2;
33209
A[1103] = 0.033333333333333*G2_0 + 0.033333333333333*G2_2;
33210
A[1104] = 0.066666666666666*G2_0 + 0.033333333333333*G2_1;
33211
A[1105] = -0.033333333333333*G2_0 - 0.033333333333333*G2_1;
33212
A[1106] = -0.066666666666666*G2_0 - 0.033333333333333*G2_1 - 0.066666666666666*G2_2;
33213
A[1107] = -0.033333333333333*G2_1 - 0.033333333333333*G2_2;
33214
A[1108] = 0.008333333333333*G0_0 + 0.008333333333333*G0_1 + 0.008333333333333*G0_2;
33215
A[1109] = -0.008333333333333*G0_0;
33216
A[1110] = 0.025000000000000*G0_1;
33217
A[1111] = -0.008333333333333*G0_2;
33218
A[1112] = 0.033333333333333*G0_1 + 0.066666666666666*G0_2;
33219
A[1113] = 0.033333333333333*G0_0 + 0.033333333333333*G0_2;
33220
A[1114] = 0.066666666666666*G0_0 + 0.033333333333333*G0_1;
33221
A[1115] = -0.033333333333333*G0_0 - 0.033333333333333*G0_1;
33222
A[1116] = -0.066666666666666*G0_0 - 0.033333333333333*G0_1 - 0.066666666666666*G0_2;
33223
A[1117] = -0.033333333333333*G0_1 - 0.033333333333333*G0_2;
33224
A[1118] = 0.000000000000000;
33225
A[1119] = 0.000000000000000;
33226
A[1120] = 0.000000000000000;
33227
A[1121] = 0.000000000000000;
33228
A[1122] = 0.008333333333333*G1_0 + 0.008333333333333*G1_1 + 0.008333333333333*G1_2;
33229
A[1123] = -0.008333333333333*G1_0;
33230
A[1124] = -0.008333333333333*G1_1;
33231
A[1125] = 0.025000000000000*G1_2;
33232
A[1126] = 0.066666666666666*G1_1 + 0.033333333333333*G1_2;
33233
A[1127] = 0.066666666666667*G1_0 + 0.033333333333333*G1_2;
33234
A[1128] = 0.033333333333333*G1_0 + 0.033333333333333*G1_1;
33235
A[1129] = -0.066666666666667*G1_0 - 0.066666666666666*G1_1 - 0.033333333333333*G1_2;
33236
A[1130] = -0.033333333333333*G1_0 - 0.033333333333333*G1_2;
33237
A[1131] = -0.033333333333333*G1_1 - 0.033333333333333*G1_2;
33238
A[1132] = 0.008333333333333*G2_0 + 0.008333333333333*G2_1 + 0.008333333333333*G2_2;
33239
A[1133] = -0.008333333333333*G2_0;
33240
A[1134] = -0.008333333333333*G2_1;
33241
A[1135] = 0.025000000000000*G2_2;
33242
A[1136] = 0.066666666666666*G2_1 + 0.033333333333333*G2_2;
33243
A[1137] = 0.066666666666667*G2_0 + 0.033333333333333*G2_2;
33244
A[1138] = 0.033333333333333*G2_0 + 0.033333333333333*G2_1;
33245
A[1139] = -0.066666666666667*G2_0 - 0.066666666666666*G2_1 - 0.033333333333333*G2_2;
33246
A[1140] = -0.033333333333333*G2_0 - 0.033333333333333*G2_2;
33247
A[1141] = -0.033333333333333*G2_1 - 0.033333333333333*G2_2;
33248
A[1142] = 0.008333333333333*G0_0 + 0.008333333333333*G0_1 + 0.008333333333333*G0_2;
33249
A[1143] = -0.008333333333333*G0_0;
33250
A[1144] = -0.008333333333333*G0_1;
33251
A[1145] = 0.025000000000000*G0_2;
33252
A[1146] = 0.066666666666666*G0_1 + 0.033333333333333*G0_2;
33253
A[1147] = 0.066666666666667*G0_0 + 0.033333333333333*G0_2;
33254
A[1148] = 0.033333333333333*G0_0 + 0.033333333333333*G0_1;
33255
A[1149] = -0.066666666666667*G0_0 - 0.066666666666666*G0_1 - 0.033333333333333*G0_2;
33256
A[1150] = -0.033333333333333*G0_0 - 0.033333333333333*G0_2;
33257
A[1151] = -0.033333333333333*G0_1 - 0.033333333333333*G0_2;
33258
A[1152] = 0.000000000000000;
33259
A[1153] = 0.000000000000000;
33260
A[1154] = 0.000000000000000;
33261
A[1155] = 0.000000000000000;
33264
/// Tabulate the tensor for the contribution from a local cell
33265
/// using the specified reference cell quadrature points/weights
33266
virtual void tabulate_tensor(double* A,
33267
const double * const * w,
33268
const ufc::cell& c,
33269
unsigned int num_quadrature_points,
33270
const double * const * quadrature_points,
33271
const double* quadrature_weights) const
33273
throw std::runtime_error("Quadrature version of tabulate_tensor not available when using the FFC tensor representation.");
33278
/// This class defines the interface for the tabulation of the cell
33279
/// tensor corresponding to the local contribution to a form from
33280
/// the integral over a cell.
33282
class stokes_cell_integral_1_0: public ufc::cell_integral
33287
stokes_cell_integral_1_0() : ufc::cell_integral()
33293
virtual ~stokes_cell_integral_1_0()
33298
/// Tabulate the tensor for the contribution from a local cell
33299
virtual void tabulate_tensor(double* A,
33300
const double * const * w,
33301
const ufc::cell& c) const
33303
// Number of operations (multiply-add pairs) for Jacobian data: 18
33304
// Number of operations (multiply-add pairs) for geometry tensor: 30
33305
// Number of operations (multiply-add pairs) for tensor contraction: 285
33306
// Total number of operations (multiply-add pairs): 333
33308
// Extract vertex coordinates
33309
const double * const * x = c.coordinates;
33311
// Compute Jacobian of affine map from reference cell
33312
const double J_00 = x[1][0] - x[0][0];
33313
const double J_01 = x[2][0] - x[0][0];
33314
const double J_02 = x[3][0] - x[0][0];
33315
const double J_10 = x[1][1] - x[0][1];
33316
const double J_11 = x[2][1] - x[0][1];
33317
const double J_12 = x[3][1] - x[0][1];
33318
const double J_20 = x[1][2] - x[0][2];
33319
const double J_21 = x[2][2] - x[0][2];
33320
const double J_22 = x[3][2] - x[0][2];
33322
// Compute sub determinants
33323
const double d_00 = J_11*J_22 - J_12*J_21;
33324
const double d_10 = J_02*J_21 - J_01*J_22;
33325
const double d_20 = J_01*J_12 - J_02*J_11;
33327
// Compute determinant of Jacobian
33328
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
33330
// Compute inverse of Jacobian
33332
// Set scale factor
33333
const double det = std::abs(detJ);
33335
// Compute geometry tensor
33336
const double G0_20 = det*w[0][20]*(1.0);
33337
const double G0_21 = det*w[0][21]*(1.0);
33338
const double G0_22 = det*w[0][22]*(1.0);
33339
const double G0_23 = det*w[0][23]*(1.0);
33340
const double G0_24 = det*w[0][24]*(1.0);
33341
const double G0_25 = det*w[0][25]*(1.0);
33342
const double G0_26 = det*w[0][26]*(1.0);
33343
const double G0_27 = det*w[0][27]*(1.0);
33344
const double G0_28 = det*w[0][28]*(1.0);
33345
const double G0_29 = det*w[0][29]*(1.0);
33346
const double G1_0 = det*w[0][0]*(1.0);
33347
const double G1_1 = det*w[0][1]*(1.0);
33348
const double G1_2 = det*w[0][2]*(1.0);
33349
const double G1_3 = det*w[0][3]*(1.0);
33350
const double G1_4 = det*w[0][4]*(1.0);
33351
const double G1_5 = det*w[0][5]*(1.0);
33352
const double G1_6 = det*w[0][6]*(1.0);
33353
const double G1_7 = det*w[0][7]*(1.0);
33354
const double G1_8 = det*w[0][8]*(1.0);
33355
const double G1_9 = det*w[0][9]*(1.0);
33356
const double G2_10 = det*w[0][10]*(1.0);
33357
const double G2_11 = det*w[0][11]*(1.0);
33358
const double G2_12 = det*w[0][12]*(1.0);
33359
const double G2_13 = det*w[0][13]*(1.0);
33360
const double G2_14 = det*w[0][14]*(1.0);
33361
const double G2_15 = det*w[0][15]*(1.0);
33362
const double G2_16 = det*w[0][16]*(1.0);
33363
const double G2_17 = det*w[0][17]*(1.0);
33364
const double G2_18 = det*w[0][18]*(1.0);
33365
const double G2_19 = det*w[0][19]*(1.0);
33367
// Compute element tensor
33368
A[0] = 0.002380952380952*G1_0 + 0.000396825396825*G1_1 + 0.000396825396825*G1_2 + 0.000396825396825*G1_3 - 0.002380952380952*G1_4 - 0.002380952380952*G1_5 - 0.002380952380952*G1_6 - 0.001587301587302*G1_7 - 0.001587301587302*G1_8 - 0.001587301587302*G1_9;
33369
A[1] = 0.000396825396825*G1_0 + 0.002380952380952*G1_1 + 0.000396825396825*G1_2 + 0.000396825396825*G1_3 - 0.002380952380952*G1_4 - 0.001587301587302*G1_5 - 0.001587301587302*G1_6 - 0.002380952380952*G1_7 - 0.002380952380952*G1_8 - 0.001587301587302*G1_9;
33370
A[2] = 0.000396825396825*G1_0 + 0.000396825396825*G1_1 + 0.002380952380952*G1_2 + 0.000396825396825*G1_3 - 0.001587301587302*G1_4 - 0.002380952380952*G1_5 - 0.001587301587302*G1_6 - 0.002380952380952*G1_7 - 0.001587301587302*G1_8 - 0.002380952380952*G1_9;
33371
A[3] = 0.000396825396825*G1_0 + 0.000396825396825*G1_1 + 0.000396825396825*G1_2 + 0.002380952380952*G1_3 - 0.001587301587302*G1_4 - 0.001587301587302*G1_5 - 0.002380952380952*G1_6 - 0.001587301587302*G1_7 - 0.002380952380952*G1_8 - 0.002380952380952*G1_9;
33372
A[4] = -0.002380952380952*G1_0 - 0.002380952380952*G1_1 - 0.001587301587302*G1_2 - 0.001587301587302*G1_3 + 0.012698412698413*G1_4 + 0.006349206349206*G1_5 + 0.006349206349206*G1_6 + 0.006349206349206*G1_7 + 0.006349206349206*G1_8 + 0.003174603174603*G1_9;
33373
A[5] = -0.002380952380952*G1_0 - 0.001587301587302*G1_1 - 0.002380952380952*G1_2 - 0.001587301587302*G1_3 + 0.006349206349206*G1_4 + 0.012698412698413*G1_5 + 0.006349206349206*G1_6 + 0.006349206349206*G1_7 + 0.003174603174603*G1_8 + 0.006349206349206*G1_9;
33374
A[6] = -0.002380952380952*G1_0 - 0.001587301587302*G1_1 - 0.001587301587302*G1_2 - 0.002380952380952*G1_3 + 0.006349206349206*G1_4 + 0.006349206349206*G1_5 + 0.012698412698413*G1_6 + 0.003174603174603*G1_7 + 0.006349206349206*G1_8 + 0.006349206349206*G1_9;
33375
A[7] = -0.001587301587302*G1_0 - 0.002380952380952*G1_1 - 0.002380952380952*G1_2 - 0.001587301587302*G1_3 + 0.006349206349206*G1_4 + 0.006349206349206*G1_5 + 0.003174603174603*G1_6 + 0.012698412698413*G1_7 + 0.006349206349206*G1_8 + 0.006349206349206*G1_9;
33376
A[8] = -0.001587301587302*G1_0 - 0.002380952380952*G1_1 - 0.001587301587302*G1_2 - 0.002380952380952*G1_3 + 0.006349206349206*G1_4 + 0.003174603174603*G1_5 + 0.006349206349206*G1_6 + 0.006349206349206*G1_7 + 0.012698412698413*G1_8 + 0.006349206349206*G1_9;
33377
A[9] = -0.001587301587302*G1_0 - 0.001587301587302*G1_1 - 0.002380952380952*G1_2 - 0.002380952380952*G1_3 + 0.003174603174603*G1_4 + 0.006349206349206*G1_5 + 0.006349206349206*G1_6 + 0.006349206349206*G1_7 + 0.006349206349206*G1_8 + 0.012698412698413*G1_9;
33378
A[10] = 0.002380952380952*G2_10 + 0.000396825396825*G2_11 + 0.000396825396825*G2_12 + 0.000396825396825*G2_13 - 0.002380952380952*G2_14 - 0.002380952380952*G2_15 - 0.002380952380952*G2_16 - 0.001587301587302*G2_17 - 0.001587301587302*G2_18 - 0.001587301587302*G2_19;
33379
A[11] = 0.000396825396825*G2_10 + 0.002380952380952*G2_11 + 0.000396825396825*G2_12 + 0.000396825396825*G2_13 - 0.002380952380952*G2_14 - 0.001587301587302*G2_15 - 0.001587301587302*G2_16 - 0.002380952380952*G2_17 - 0.002380952380952*G2_18 - 0.001587301587302*G2_19;
33380
A[12] = 0.000396825396825*G2_10 + 0.000396825396825*G2_11 + 0.002380952380952*G2_12 + 0.000396825396825*G2_13 - 0.001587301587302*G2_14 - 0.002380952380952*G2_15 - 0.001587301587302*G2_16 - 0.002380952380952*G2_17 - 0.001587301587302*G2_18 - 0.002380952380952*G2_19;
33381
A[13] = 0.000396825396825*G2_10 + 0.000396825396825*G2_11 + 0.000396825396825*G2_12 + 0.002380952380952*G2_13 - 0.001587301587302*G2_14 - 0.001587301587302*G2_15 - 0.002380952380952*G2_16 - 0.001587301587302*G2_17 - 0.002380952380952*G2_18 - 0.002380952380952*G2_19;
33382
A[14] = -0.002380952380952*G2_10 - 0.002380952380952*G2_11 - 0.001587301587302*G2_12 - 0.001587301587302*G2_13 + 0.012698412698413*G2_14 + 0.006349206349206*G2_15 + 0.006349206349206*G2_16 + 0.006349206349206*G2_17 + 0.006349206349206*G2_18 + 0.003174603174603*G2_19;
33383
A[15] = -0.002380952380952*G2_10 - 0.001587301587302*G2_11 - 0.002380952380952*G2_12 - 0.001587301587302*G2_13 + 0.006349206349206*G2_14 + 0.012698412698413*G2_15 + 0.006349206349206*G2_16 + 0.006349206349206*G2_17 + 0.003174603174603*G2_18 + 0.006349206349206*G2_19;
33384
A[16] = -0.002380952380952*G2_10 - 0.001587301587302*G2_11 - 0.001587301587302*G2_12 - 0.002380952380952*G2_13 + 0.006349206349206*G2_14 + 0.006349206349206*G2_15 + 0.012698412698413*G2_16 + 0.003174603174603*G2_17 + 0.006349206349206*G2_18 + 0.006349206349206*G2_19;
33385
A[17] = -0.001587301587302*G2_10 - 0.002380952380952*G2_11 - 0.002380952380952*G2_12 - 0.001587301587302*G2_13 + 0.006349206349206*G2_14 + 0.006349206349206*G2_15 + 0.003174603174603*G2_16 + 0.012698412698413*G2_17 + 0.006349206349206*G2_18 + 0.006349206349206*G2_19;
33386
A[18] = -0.001587301587302*G2_10 - 0.002380952380952*G2_11 - 0.001587301587302*G2_12 - 0.002380952380952*G2_13 + 0.006349206349206*G2_14 + 0.003174603174603*G2_15 + 0.006349206349206*G2_16 + 0.006349206349206*G2_17 + 0.012698412698413*G2_18 + 0.006349206349206*G2_19;
33387
A[19] = -0.001587301587302*G2_10 - 0.001587301587302*G2_11 - 0.002380952380952*G2_12 - 0.002380952380952*G2_13 + 0.003174603174603*G2_14 + 0.006349206349206*G2_15 + 0.006349206349206*G2_16 + 0.006349206349206*G2_17 + 0.006349206349206*G2_18 + 0.012698412698413*G2_19;
33388
A[20] = 0.002380952380952*G0_20 + 0.000396825396825*G0_21 + 0.000396825396825*G0_22 + 0.000396825396825*G0_23 - 0.002380952380952*G0_24 - 0.002380952380952*G0_25 - 0.002380952380952*G0_26 - 0.001587301587302*G0_27 - 0.001587301587302*G0_28 - 0.001587301587302*G0_29;
33389
A[21] = 0.000396825396825*G0_20 + 0.002380952380952*G0_21 + 0.000396825396825*G0_22 + 0.000396825396825*G0_23 - 0.002380952380952*G0_24 - 0.001587301587302*G0_25 - 0.001587301587302*G0_26 - 0.002380952380952*G0_27 - 0.002380952380952*G0_28 - 0.001587301587302*G0_29;
33390
A[22] = 0.000396825396825*G0_20 + 0.000396825396825*G0_21 + 0.002380952380952*G0_22 + 0.000396825396825*G0_23 - 0.001587301587302*G0_24 - 0.002380952380952*G0_25 - 0.001587301587302*G0_26 - 0.002380952380952*G0_27 - 0.001587301587302*G0_28 - 0.002380952380952*G0_29;
33391
A[23] = 0.000396825396825*G0_20 + 0.000396825396825*G0_21 + 0.000396825396825*G0_22 + 0.002380952380952*G0_23 - 0.001587301587302*G0_24 - 0.001587301587302*G0_25 - 0.002380952380952*G0_26 - 0.001587301587302*G0_27 - 0.002380952380952*G0_28 - 0.002380952380952*G0_29;
33392
A[24] = -0.002380952380952*G0_20 - 0.002380952380952*G0_21 - 0.001587301587302*G0_22 - 0.001587301587302*G0_23 + 0.012698412698413*G0_24 + 0.006349206349206*G0_25 + 0.006349206349206*G0_26 + 0.006349206349206*G0_27 + 0.006349206349206*G0_28 + 0.003174603174603*G0_29;
33393
A[25] = -0.002380952380952*G0_20 - 0.001587301587302*G0_21 - 0.002380952380952*G0_22 - 0.001587301587302*G0_23 + 0.006349206349206*G0_24 + 0.012698412698413*G0_25 + 0.006349206349206*G0_26 + 0.006349206349206*G0_27 + 0.003174603174603*G0_28 + 0.006349206349206*G0_29;
33394
A[26] = -0.002380952380952*G0_20 - 0.001587301587302*G0_21 - 0.001587301587302*G0_22 - 0.002380952380952*G0_23 + 0.006349206349206*G0_24 + 0.006349206349206*G0_25 + 0.012698412698413*G0_26 + 0.003174603174603*G0_27 + 0.006349206349206*G0_28 + 0.006349206349206*G0_29;
33395
A[27] = -0.001587301587302*G0_20 - 0.002380952380952*G0_21 - 0.002380952380952*G0_22 - 0.001587301587302*G0_23 + 0.006349206349206*G0_24 + 0.006349206349206*G0_25 + 0.003174603174603*G0_26 + 0.012698412698413*G0_27 + 0.006349206349206*G0_28 + 0.006349206349206*G0_29;
33396
A[28] = -0.001587301587302*G0_20 - 0.002380952380952*G0_21 - 0.001587301587302*G0_22 - 0.002380952380952*G0_23 + 0.006349206349206*G0_24 + 0.003174603174603*G0_25 + 0.006349206349206*G0_26 + 0.006349206349206*G0_27 + 0.012698412698413*G0_28 + 0.006349206349206*G0_29;
33397
A[29] = -0.001587301587302*G0_20 - 0.001587301587302*G0_21 - 0.002380952380952*G0_22 - 0.002380952380952*G0_23 + 0.003174603174603*G0_24 + 0.006349206349206*G0_25 + 0.006349206349206*G0_26 + 0.006349206349206*G0_27 + 0.006349206349206*G0_28 + 0.012698412698413*G0_29;
33398
A[30] = 0.000000000000000;
33399
A[31] = 0.000000000000000;
33400
A[32] = 0.000000000000000;
33401
A[33] = 0.000000000000000;
33404
/// Tabulate the tensor for the contribution from a local cell
33405
/// using the specified reference cell quadrature points/weights
33406
virtual void tabulate_tensor(double* A,
33407
const double * const * w,
33408
const ufc::cell& c,
33409
unsigned int num_quadrature_points,
33410
const double * const * quadrature_points,
33411
const double* quadrature_weights) const
33413
throw std::runtime_error("Quadrature version of tabulate_tensor not available when using the FFC tensor representation.");
33418
/// This class defines the interface for the assembly of the global
33419
/// tensor corresponding to a form with r + n arguments, that is, a
33422
/// a : V1 x V2 x ... Vr x W1 x W2 x ... x Wn -> R
33424
/// with arguments v1, v2, ..., vr, w1, w2, ..., wn. The rank r
33425
/// global tensor A is defined by
33427
/// A = a(V1, V2, ..., Vr, w1, w2, ..., wn),
33429
/// where each argument Vj represents the application to the
33430
/// sequence of basis functions of Vj and w1, w2, ..., wn are given
33431
/// fixed functions (coefficients).
33433
class stokes_form_0: public ufc::form
33438
stokes_form_0() : ufc::form()
33444
virtual ~stokes_form_0()
33449
/// Return a string identifying the form
33450
virtual const char* signature() const
33452
return "Form([Integral(Sum(Product(IndexSum(Indexed(ListTensor(Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((Index(0),), {Index(0): 3})), MultiIndex((FixedIndex(0),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((Index(0),), {Index(0): 3})), MultiIndex((FixedIndex(1),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((Index(0),), {Index(0): 3})), MultiIndex((FixedIndex(2),), {}))), MultiIndex((Index(0),), {Index(0): 3})), MultiIndex((Index(0),), {Index(0): 3})), Indexed(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((FixedIndex(3),), {FixedIndex(3): 4}))), Sum(IndexSum(IndexSum(Product(Indexed(ComponentTensor(Indexed(ListTensor(Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((Index(1),), {Index(1): 3})), MultiIndex((FixedIndex(0),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((Index(1),), {Index(1): 3})), MultiIndex((FixedIndex(1),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((Index(1),), {Index(1): 3})), MultiIndex((FixedIndex(2),), {}))), MultiIndex((Index(2),), {Index(2): 3})), MultiIndex((Index(2), Index(1)), {Index(2): 3, Index(1): 3})), MultiIndex((Index(3), Index(4)), {Index(4): 3, Index(3): 3})), Indexed(ComponentTensor(Indexed(ListTensor(Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((Index(5),), {Index(5): 3})), MultiIndex((FixedIndex(0),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((Index(5),), {Index(5): 3})), MultiIndex((FixedIndex(1),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((Index(5),), {Index(5): 3})), MultiIndex((FixedIndex(2),), {}))), MultiIndex((Index(6),), {Index(6): 3})), MultiIndex((Index(6), Index(5)), {Index(5): 3, Index(6): 3})), MultiIndex((Index(3), Index(4)), {Index(4): 3, Index(3): 3}))), MultiIndex((Index(3),), {Index(3): 3})), MultiIndex((Index(4),), {Index(4): 3})), Product(IndexSum(Indexed(ListTensor(Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((Index(7),), {Index(7): 3})), MultiIndex((FixedIndex(0),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((Index(7),), {Index(7): 3})), MultiIndex((FixedIndex(1),), {})), Indexed(SpatialDerivative(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((Index(7),), {Index(7): 3})), MultiIndex((FixedIndex(2),), {}))), MultiIndex((Index(7),), {Index(7): 3})), MultiIndex((Index(7),), {Index(7): 3})), Indexed(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 1), MultiIndex((FixedIndex(3),), {FixedIndex(3): 4}))))), Measure('cell', 0, None))])";
33455
/// Return the rank of the global tensor (r)
33456
virtual unsigned int rank() const
33461
/// Return the number of coefficients (n)
33462
virtual unsigned int num_coefficients() const
33467
/// Return the number of cell domains
33468
virtual unsigned int num_cell_domains() const
33473
/// Return the number of exterior facet domains
33474
virtual unsigned int num_exterior_facet_domains() const
33479
/// Return the number of interior facet domains
33480
virtual unsigned int num_interior_facet_domains() const
33485
/// Create a new finite element for argument function i
33486
virtual ufc::finite_element* create_finite_element(unsigned int i) const
33492
return new stokes_finite_element_3();
33497
return new stokes_finite_element_3();
33505
/// Create a new dofmap for argument function i
33506
virtual ufc::dofmap* create_dofmap(unsigned int i) const
33512
return new stokes_dofmap_3();
33517
return new stokes_dofmap_3();
33525
/// Create a new cell integral on sub domain i
33526
virtual ufc::cell_integral* create_cell_integral(unsigned int i) const
33532
return new stokes_cell_integral_0_0();
33540
/// Create a new exterior facet integral on sub domain i
33541
virtual ufc::exterior_facet_integral* create_exterior_facet_integral(unsigned int i) const
33546
/// Create a new interior facet integral on sub domain i
33547
virtual ufc::interior_facet_integral* create_interior_facet_integral(unsigned int i) const
33554
/// This class defines the interface for the assembly of the global
33555
/// tensor corresponding to a form with r + n arguments, that is, a
33558
/// a : V1 x V2 x ... Vr x W1 x W2 x ... x Wn -> R
33560
/// with arguments v1, v2, ..., vr, w1, w2, ..., wn. The rank r
33561
/// global tensor A is defined by
33563
/// A = a(V1, V2, ..., Vr, w1, w2, ..., wn),
33565
/// where each argument Vj represents the application to the
33566
/// sequence of basis functions of Vj and w1, w2, ..., wn are given
33567
/// fixed functions (coefficients).
33569
class stokes_form_1: public ufc::form
33574
stokes_form_1() : ufc::form()
33580
virtual ~stokes_form_1()
33585
/// Return a string identifying the form
33586
virtual const char* signature() const
33588
return "Form([Integral(IndexSum(Product(Indexed(Coefficient(VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), 0), MultiIndex((Index(0),), {Index(0): 3})), Indexed(ListTensor(Indexed(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((FixedIndex(0),), {FixedIndex(0): 4})), Indexed(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((FixedIndex(1),), {FixedIndex(1): 4})), Indexed(Argument(MixedElement(*[VectorElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 2, 3), FiniteElement('Lagrange', Cell('tetrahedron', 1, Space(3)), 1)], **{'value_shape': (4,) }), 0), MultiIndex((FixedIndex(2),), {FixedIndex(2): 4}))), MultiIndex((Index(0),), {Index(0): 3}))), MultiIndex((Index(0),), {Index(0): 3})), Measure('cell', 0, None))])";
33591
/// Return the rank of the global tensor (r)
33592
virtual unsigned int rank() const
33597
/// Return the number of coefficients (n)
33598
virtual unsigned int num_coefficients() const
33603
/// Return the number of cell domains
33604
virtual unsigned int num_cell_domains() const
33609
/// Return the number of exterior facet domains
33610
virtual unsigned int num_exterior_facet_domains() const
33615
/// Return the number of interior facet domains
33616
virtual unsigned int num_interior_facet_domains() const
33621
/// Create a new finite element for argument function i
33622
virtual ufc::finite_element* create_finite_element(unsigned int i) const
33628
return new stokes_finite_element_3();
33633
return new stokes_finite_element_1();
33641
/// Create a new dofmap for argument function i
33642
virtual ufc::dofmap* create_dofmap(unsigned int i) const
33648
return new stokes_dofmap_3();
33653
return new stokes_dofmap_1();
33661
/// Create a new cell integral on sub domain i
33662
virtual ufc::cell_integral* create_cell_integral(unsigned int i) const
33668
return new stokes_cell_integral_1_0();
33676
/// Create a new exterior facet integral on sub domain i
33677
virtual ufc::exterior_facet_integral* create_exterior_facet_integral(unsigned int i) const
33682
/// Create a new interior facet integral on sub domain i
33683
virtual ufc::interior_facet_integral* create_interior_facet_integral(unsigned int i) const
33692
// Standard library includes
33696
#include <dolfin/common/NoDeleter.h>
33697
#include <dolfin/fem/FiniteElement.h>
33698
#include <dolfin/fem/DofMap.h>
33699
#include <dolfin/fem/Form.h>
33700
#include <dolfin/function/FunctionSpace.h>
33701
#include <dolfin/function/GenericFunction.h>
33702
#include <dolfin/function/CoefficientAssigner.h>
33703
#include <dolfin/adaptivity/ErrorControl.h>
33704
#include <dolfin/adaptivity/GoalFunctional.h>
33709
class CoefficientSpace_f: public dolfin::FunctionSpace
33713
CoefficientSpace_f(const dolfin::Mesh& mesh):
33714
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33715
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_1()))),
33716
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_1()), mesh)))
33721
CoefficientSpace_f(dolfin::Mesh& mesh):
33722
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33723
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_1()))),
33724
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_1()), mesh)))
33729
CoefficientSpace_f(boost::shared_ptr<dolfin::Mesh> mesh):
33730
dolfin::FunctionSpace(mesh,
33731
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_1()))),
33732
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_1()), *mesh)))
33737
CoefficientSpace_f(boost::shared_ptr<const dolfin::Mesh> mesh):
33738
dolfin::FunctionSpace(mesh,
33739
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_1()))),
33740
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_1()), *mesh)))
33745
~CoefficientSpace_f()
33751
class Form_0_FunctionSpace_0: public dolfin::FunctionSpace
33755
Form_0_FunctionSpace_0(const dolfin::Mesh& mesh):
33756
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33757
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33758
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), mesh)))
33763
Form_0_FunctionSpace_0(dolfin::Mesh& mesh):
33764
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33765
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33766
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), mesh)))
33771
Form_0_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
33772
dolfin::FunctionSpace(mesh,
33773
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33774
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), *mesh)))
33779
Form_0_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
33780
dolfin::FunctionSpace(mesh,
33781
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33782
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), *mesh)))
33787
~Form_0_FunctionSpace_0()
33793
class Form_0_FunctionSpace_1: public dolfin::FunctionSpace
33797
Form_0_FunctionSpace_1(const dolfin::Mesh& mesh):
33798
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33799
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33800
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), mesh)))
33805
Form_0_FunctionSpace_1(dolfin::Mesh& mesh):
33806
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33807
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33808
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), mesh)))
33813
Form_0_FunctionSpace_1(boost::shared_ptr<dolfin::Mesh> mesh):
33814
dolfin::FunctionSpace(mesh,
33815
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33816
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), *mesh)))
33821
Form_0_FunctionSpace_1(boost::shared_ptr<const dolfin::Mesh> mesh):
33822
dolfin::FunctionSpace(mesh,
33823
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33824
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), *mesh)))
33829
~Form_0_FunctionSpace_1()
33835
class Form_0: public dolfin::Form
33840
Form_0(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1):
33843
_function_spaces[0] = reference_to_no_delete_pointer(V0);
33844
_function_spaces[1] = reference_to_no_delete_pointer(V1);
33846
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_0());
33850
Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1):
33853
_function_spaces[0] = V0;
33854
_function_spaces[1] = V1;
33856
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_0());
33863
/// Return the number of the coefficient with this name
33864
virtual dolfin::uint coefficient_number(const std::string& name) const
33867
dolfin::error("No coefficients.");
33871
/// Return the name of the coefficient with this number
33872
virtual std::string coefficient_name(dolfin::uint i) const
33875
dolfin::error("No coefficients.");
33880
typedef Form_0_FunctionSpace_0 TestSpace;
33881
typedef Form_0_FunctionSpace_1 TrialSpace;
33886
class Form_1_FunctionSpace_0: public dolfin::FunctionSpace
33890
Form_1_FunctionSpace_0(const dolfin::Mesh& mesh):
33891
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33892
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33893
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), mesh)))
33898
Form_1_FunctionSpace_0(dolfin::Mesh& mesh):
33899
dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
33900
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33901
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), mesh)))
33906
Form_1_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
33907
dolfin::FunctionSpace(mesh,
33908
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33909
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), *mesh)))
33914
Form_1_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
33915
dolfin::FunctionSpace(mesh,
33916
boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new stokes_finite_element_3()))),
33917
boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dofmap>(new stokes_dofmap_3()), *mesh)))
33922
~Form_1_FunctionSpace_0()
33928
typedef CoefficientSpace_f Form_1_FunctionSpace_1;
33930
class Form_1: public dolfin::Form
33935
Form_1(const dolfin::FunctionSpace& V0):
33936
dolfin::Form(1, 1), f(*this, 0)
33938
_function_spaces[0] = reference_to_no_delete_pointer(V0);
33940
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_1());
33944
Form_1(const dolfin::FunctionSpace& V0, const dolfin::GenericFunction& f):
33945
dolfin::Form(1, 1), f(*this, 0)
33947
_function_spaces[0] = reference_to_no_delete_pointer(V0);
33951
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_1());
33955
Form_1(const dolfin::FunctionSpace& V0, boost::shared_ptr<const dolfin::GenericFunction> f):
33956
dolfin::Form(1, 1), f(*this, 0)
33958
_function_spaces[0] = reference_to_no_delete_pointer(V0);
33962
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_1());
33966
Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0):
33967
dolfin::Form(1, 1), f(*this, 0)
33969
_function_spaces[0] = V0;
33971
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_1());
33975
Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0, const dolfin::GenericFunction& f):
33976
dolfin::Form(1, 1), f(*this, 0)
33978
_function_spaces[0] = V0;
33982
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_1());
33986
Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::GenericFunction> f):
33987
dolfin::Form(1, 1), f(*this, 0)
33989
_function_spaces[0] = V0;
33993
_ufc_form = boost::shared_ptr<const ufc::form>(new stokes_form_1());
34000
/// Return the number of the coefficient with this name
34001
virtual dolfin::uint coefficient_number(const std::string& name) const
34006
dolfin::error("Invalid coefficient.");
34010
/// Return the name of the coefficient with this number
34011
virtual std::string coefficient_name(dolfin::uint i) const
34019
dolfin::error("Invalid coefficient.");
34024
typedef Form_1_FunctionSpace_0 TestSpace;
34025
typedef Form_1_FunctionSpace_1 CoefficientSpace_f;
34028
dolfin::CoefficientAssigner f;
34032
typedef Form_0 BilinearForm;
34033
typedef Form_1 LinearForm;
34034
typedef Form_0::TestSpace FunctionSpace;