~ubuntu-branches/ubuntu/raring/ffc/raring

« back to all changes in this revision

Viewing changes to test/regression/references/r_auto/Mass.h

  • Committer: Package Import Robot
  • Author(s): Johannes Ring
  • Date: 2011-10-26 17:52:20 UTC
  • mfrom: (1.1.10)
  • Revision ID: package-import@ubuntu.com-20111026175220-ope1dzqv4jn2b8pq
Tags: 1.0-beta2-1
* New upstream release. This release includes some performance
  improvements for evaluating basis functions. It also adds support
  for Bessel functions and error functions.
* debian/control: Bump version numbers for python-ufc, python-fiat,
  python-instant, and python-ufl.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// This code conforms with the UFC specification version 2.0.0
2
 
// and was automatically generated by FFC version 1.0-beta.
 
1
// This code conforms with the UFC specification version 2.0.2
 
2
// and was automatically generated by FFC version 1.0-beta+.
3
3
// 
4
4
// This code was generated with the following parameters:
5
5
// 
149
149
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
150
150
      
151
151
      // Declare helper variables.
152
 
      unsigned int rr = 0;
153
 
      unsigned int ss = 0;
154
 
      unsigned int tt = 0;
155
 
      double tmp5 = 0.0;
156
 
      double tmp6 = 0.0;
157
 
      double tmp7 = 0.0;
158
152
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
159
153
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
160
154
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
164
158
      // Compute basisvalues.
165
159
      basisvalues[0] = 1.0;
166
160
      basisvalues[1] = tmp0;
167
 
      for (unsigned int r = 1; r < 3; r++)
168
 
      {
169
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
170
 
        ss = r*(r + 1)*(r + 2)/6;
171
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
172
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
173
 
      }// end loop over 'r'
174
 
      for (unsigned int r = 0; r < 3; r++)
175
 
      {
176
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
177
 
        ss = r*(r + 1)*(r + 2)/6;
178
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
179
 
      }// end loop over 'r'
180
 
      for (unsigned int r = 0; r < 2; r++)
181
 
      {
182
 
        for (unsigned int s = 1; s < 3 - r; s++)
183
 
        {
184
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
185
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
186
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
187
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
188
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
189
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
190
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
191
 
        }// end loop over 's'
192
 
      }// end loop over 'r'
193
 
      for (unsigned int r = 0; r < 3; r++)
194
 
      {
195
 
        for (unsigned int s = 0; s < 3 - r; s++)
196
 
        {
197
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
198
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
199
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
200
 
        }// end loop over 's'
201
 
      }// end loop over 'r'
202
 
      for (unsigned int r = 0; r < 2; r++)
203
 
      {
204
 
        for (unsigned int s = 0; s < 2 - r; s++)
205
 
        {
206
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
207
 
          {
208
 
            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;
209
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
210
 
            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;
211
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
212
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
213
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
214
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
215
 
          }// end loop over 't'
216
 
        }// end loop over 's'
217
 
      }// end loop over 'r'
218
 
      for (unsigned int r = 0; r < 4; r++)
219
 
      {
220
 
        for (unsigned int s = 0; s < 4 - r; s++)
221
 
        {
222
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
223
 
          {
224
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
225
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
226
 
          }// end loop over 't'
227
 
        }// end loop over 's'
228
 
      }// end loop over 'r'
 
161
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
162
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
163
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
164
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
165
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
166
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
167
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
168
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
169
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
170
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
171
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
172
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
173
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
174
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
175
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
176
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
177
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
178
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
179
      basisvalues[0] *= std::sqrt(0.75);
 
180
      basisvalues[3] *= std::sqrt(1.25);
 
181
      basisvalues[9] *= std::sqrt(1.75);
 
182
      basisvalues[19] *= std::sqrt(2.25);
 
183
      basisvalues[2] *= std::sqrt(2.5);
 
184
      basisvalues[8] *= std::sqrt(3.5);
 
185
      basisvalues[18] *= std::sqrt(4.5);
 
186
      basisvalues[7] *= std::sqrt(5.25);
 
187
      basisvalues[17] *= std::sqrt(6.75);
 
188
      basisvalues[16] *= std::sqrt(9.0);
 
189
      basisvalues[1] *= std::sqrt(7.5);
 
190
      basisvalues[6] *= std::sqrt(10.5);
 
191
      basisvalues[15] *= std::sqrt(13.5);
 
192
      basisvalues[5] *= std::sqrt(15.75);
 
193
      basisvalues[14] *= std::sqrt(20.25);
 
194
      basisvalues[13] *= std::sqrt(27.0);
 
195
      basisvalues[4] *= std::sqrt(26.25);
 
196
      basisvalues[12] *= std::sqrt(33.75);
 
197
      basisvalues[11] *= std::sqrt(45.0);
 
198
      basisvalues[10] *= std::sqrt(63.0);
229
199
      
230
200
      // Table(s) of coefficients.
231
201
      static const double coefficients0[20] = \
245
215
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
246
216
      
247
217
      // Declare helper variables.
248
 
      unsigned int rr = 0;
249
 
      unsigned int ss = 0;
250
 
      unsigned int tt = 0;
251
 
      double tmp5 = 0.0;
252
 
      double tmp6 = 0.0;
253
 
      double tmp7 = 0.0;
254
218
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
255
219
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
256
220
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
260
224
      // Compute basisvalues.
261
225
      basisvalues[0] = 1.0;
262
226
      basisvalues[1] = tmp0;
263
 
      for (unsigned int r = 1; r < 3; r++)
264
 
      {
265
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
266
 
        ss = r*(r + 1)*(r + 2)/6;
267
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
268
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
269
 
      }// end loop over 'r'
270
 
      for (unsigned int r = 0; r < 3; r++)
271
 
      {
272
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
273
 
        ss = r*(r + 1)*(r + 2)/6;
274
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
275
 
      }// end loop over 'r'
276
 
      for (unsigned int r = 0; r < 2; r++)
277
 
      {
278
 
        for (unsigned int s = 1; s < 3 - r; s++)
279
 
        {
280
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
281
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
282
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
283
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
284
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
285
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
286
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
287
 
        }// end loop over 's'
288
 
      }// end loop over 'r'
289
 
      for (unsigned int r = 0; r < 3; r++)
290
 
      {
291
 
        for (unsigned int s = 0; s < 3 - r; s++)
292
 
        {
293
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
294
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
295
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
296
 
        }// end loop over 's'
297
 
      }// end loop over 'r'
298
 
      for (unsigned int r = 0; r < 2; r++)
299
 
      {
300
 
        for (unsigned int s = 0; s < 2 - r; s++)
301
 
        {
302
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
303
 
          {
304
 
            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;
305
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
306
 
            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;
307
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
308
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
309
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
310
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
311
 
          }// end loop over 't'
312
 
        }// end loop over 's'
313
 
      }// end loop over 'r'
314
 
      for (unsigned int r = 0; r < 4; r++)
315
 
      {
316
 
        for (unsigned int s = 0; s < 4 - r; s++)
317
 
        {
318
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
319
 
          {
320
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
321
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
322
 
          }// end loop over 't'
323
 
        }// end loop over 's'
324
 
      }// end loop over 'r'
 
227
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
228
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
229
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
230
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
231
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
232
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
233
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
234
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
235
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
236
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
237
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
238
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
239
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
240
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
241
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
242
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
243
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
244
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
245
      basisvalues[0] *= std::sqrt(0.75);
 
246
      basisvalues[3] *= std::sqrt(1.25);
 
247
      basisvalues[9] *= std::sqrt(1.75);
 
248
      basisvalues[19] *= std::sqrt(2.25);
 
249
      basisvalues[2] *= std::sqrt(2.5);
 
250
      basisvalues[8] *= std::sqrt(3.5);
 
251
      basisvalues[18] *= std::sqrt(4.5);
 
252
      basisvalues[7] *= std::sqrt(5.25);
 
253
      basisvalues[17] *= std::sqrt(6.75);
 
254
      basisvalues[16] *= std::sqrt(9.0);
 
255
      basisvalues[1] *= std::sqrt(7.5);
 
256
      basisvalues[6] *= std::sqrt(10.5);
 
257
      basisvalues[15] *= std::sqrt(13.5);
 
258
      basisvalues[5] *= std::sqrt(15.75);
 
259
      basisvalues[14] *= std::sqrt(20.25);
 
260
      basisvalues[13] *= std::sqrt(27.0);
 
261
      basisvalues[4] *= std::sqrt(26.25);
 
262
      basisvalues[12] *= std::sqrt(33.75);
 
263
      basisvalues[11] *= std::sqrt(45.0);
 
264
      basisvalues[10] *= std::sqrt(63.0);
325
265
      
326
266
      // Table(s) of coefficients.
327
267
      static const double coefficients0[20] = \
341
281
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
342
282
      
343
283
      // Declare helper variables.
344
 
      unsigned int rr = 0;
345
 
      unsigned int ss = 0;
346
 
      unsigned int tt = 0;
347
 
      double tmp5 = 0.0;
348
 
      double tmp6 = 0.0;
349
 
      double tmp7 = 0.0;
350
284
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
351
285
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
352
286
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
356
290
      // Compute basisvalues.
357
291
      basisvalues[0] = 1.0;
358
292
      basisvalues[1] = tmp0;
359
 
      for (unsigned int r = 1; r < 3; r++)
360
 
      {
361
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
362
 
        ss = r*(r + 1)*(r + 2)/6;
363
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
364
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
365
 
      }// end loop over 'r'
366
 
      for (unsigned int r = 0; r < 3; r++)
367
 
      {
368
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
369
 
        ss = r*(r + 1)*(r + 2)/6;
370
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
371
 
      }// end loop over 'r'
372
 
      for (unsigned int r = 0; r < 2; r++)
373
 
      {
374
 
        for (unsigned int s = 1; s < 3 - r; s++)
375
 
        {
376
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
377
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
378
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
379
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
380
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
381
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
382
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
383
 
        }// end loop over 's'
384
 
      }// end loop over 'r'
385
 
      for (unsigned int r = 0; r < 3; r++)
386
 
      {
387
 
        for (unsigned int s = 0; s < 3 - r; s++)
388
 
        {
389
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
390
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
391
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
392
 
        }// end loop over 's'
393
 
      }// end loop over 'r'
394
 
      for (unsigned int r = 0; r < 2; r++)
395
 
      {
396
 
        for (unsigned int s = 0; s < 2 - r; s++)
397
 
        {
398
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
399
 
          {
400
 
            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;
401
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
402
 
            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;
403
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
404
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
405
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
406
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
407
 
          }// end loop over 't'
408
 
        }// end loop over 's'
409
 
      }// end loop over 'r'
410
 
      for (unsigned int r = 0; r < 4; r++)
411
 
      {
412
 
        for (unsigned int s = 0; s < 4 - r; s++)
413
 
        {
414
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
415
 
          {
416
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
417
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
418
 
          }// end loop over 't'
419
 
        }// end loop over 's'
420
 
      }// end loop over 'r'
 
293
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
294
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
295
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
296
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
297
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
298
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
299
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
300
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
301
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
302
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
303
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
304
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
305
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
306
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
307
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
308
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
309
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
310
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
311
      basisvalues[0] *= std::sqrt(0.75);
 
312
      basisvalues[3] *= std::sqrt(1.25);
 
313
      basisvalues[9] *= std::sqrt(1.75);
 
314
      basisvalues[19] *= std::sqrt(2.25);
 
315
      basisvalues[2] *= std::sqrt(2.5);
 
316
      basisvalues[8] *= std::sqrt(3.5);
 
317
      basisvalues[18] *= std::sqrt(4.5);
 
318
      basisvalues[7] *= std::sqrt(5.25);
 
319
      basisvalues[17] *= std::sqrt(6.75);
 
320
      basisvalues[16] *= std::sqrt(9.0);
 
321
      basisvalues[1] *= std::sqrt(7.5);
 
322
      basisvalues[6] *= std::sqrt(10.5);
 
323
      basisvalues[15] *= std::sqrt(13.5);
 
324
      basisvalues[5] *= std::sqrt(15.75);
 
325
      basisvalues[14] *= std::sqrt(20.25);
 
326
      basisvalues[13] *= std::sqrt(27.0);
 
327
      basisvalues[4] *= std::sqrt(26.25);
 
328
      basisvalues[12] *= std::sqrt(33.75);
 
329
      basisvalues[11] *= std::sqrt(45.0);
 
330
      basisvalues[10] *= std::sqrt(63.0);
421
331
      
422
332
      // Table(s) of coefficients.
423
333
      static const double coefficients0[20] = \
437
347
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
438
348
      
439
349
      // Declare helper variables.
440
 
      unsigned int rr = 0;
441
 
      unsigned int ss = 0;
442
 
      unsigned int tt = 0;
443
 
      double tmp5 = 0.0;
444
 
      double tmp6 = 0.0;
445
 
      double tmp7 = 0.0;
446
350
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
447
351
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
448
352
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
452
356
      // Compute basisvalues.
453
357
      basisvalues[0] = 1.0;
454
358
      basisvalues[1] = tmp0;
455
 
      for (unsigned int r = 1; r < 3; r++)
456
 
      {
457
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
458
 
        ss = r*(r + 1)*(r + 2)/6;
459
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
460
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
461
 
      }// end loop over 'r'
462
 
      for (unsigned int r = 0; r < 3; r++)
463
 
      {
464
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
465
 
        ss = r*(r + 1)*(r + 2)/6;
466
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
467
 
      }// end loop over 'r'
468
 
      for (unsigned int r = 0; r < 2; r++)
469
 
      {
470
 
        for (unsigned int s = 1; s < 3 - r; s++)
471
 
        {
472
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
473
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
474
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
475
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
476
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
477
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
478
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
479
 
        }// end loop over 's'
480
 
      }// end loop over 'r'
481
 
      for (unsigned int r = 0; r < 3; r++)
482
 
      {
483
 
        for (unsigned int s = 0; s < 3 - r; s++)
484
 
        {
485
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
486
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
487
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
488
 
        }// end loop over 's'
489
 
      }// end loop over 'r'
490
 
      for (unsigned int r = 0; r < 2; r++)
491
 
      {
492
 
        for (unsigned int s = 0; s < 2 - r; s++)
493
 
        {
494
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
495
 
          {
496
 
            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;
497
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
498
 
            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;
499
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
500
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
501
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
502
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
503
 
          }// end loop over 't'
504
 
        }// end loop over 's'
505
 
      }// end loop over 'r'
506
 
      for (unsigned int r = 0; r < 4; r++)
507
 
      {
508
 
        for (unsigned int s = 0; s < 4 - r; s++)
509
 
        {
510
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
511
 
          {
512
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
513
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
514
 
          }// end loop over 't'
515
 
        }// end loop over 's'
516
 
      }// end loop over 'r'
 
359
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
360
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
361
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
362
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
363
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
364
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
365
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
366
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
367
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
368
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
369
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
370
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
371
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
372
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
373
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
374
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
375
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
376
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
377
      basisvalues[0] *= std::sqrt(0.75);
 
378
      basisvalues[3] *= std::sqrt(1.25);
 
379
      basisvalues[9] *= std::sqrt(1.75);
 
380
      basisvalues[19] *= std::sqrt(2.25);
 
381
      basisvalues[2] *= std::sqrt(2.5);
 
382
      basisvalues[8] *= std::sqrt(3.5);
 
383
      basisvalues[18] *= std::sqrt(4.5);
 
384
      basisvalues[7] *= std::sqrt(5.25);
 
385
      basisvalues[17] *= std::sqrt(6.75);
 
386
      basisvalues[16] *= std::sqrt(9.0);
 
387
      basisvalues[1] *= std::sqrt(7.5);
 
388
      basisvalues[6] *= std::sqrt(10.5);
 
389
      basisvalues[15] *= std::sqrt(13.5);
 
390
      basisvalues[5] *= std::sqrt(15.75);
 
391
      basisvalues[14] *= std::sqrt(20.25);
 
392
      basisvalues[13] *= std::sqrt(27.0);
 
393
      basisvalues[4] *= std::sqrt(26.25);
 
394
      basisvalues[12] *= std::sqrt(33.75);
 
395
      basisvalues[11] *= std::sqrt(45.0);
 
396
      basisvalues[10] *= std::sqrt(63.0);
517
397
      
518
398
      // Table(s) of coefficients.
519
399
      static const double coefficients0[20] = \
533
413
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
534
414
      
535
415
      // Declare helper variables.
536
 
      unsigned int rr = 0;
537
 
      unsigned int ss = 0;
538
 
      unsigned int tt = 0;
539
 
      double tmp5 = 0.0;
540
 
      double tmp6 = 0.0;
541
 
      double tmp7 = 0.0;
542
416
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
543
417
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
544
418
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
548
422
      // Compute basisvalues.
549
423
      basisvalues[0] = 1.0;
550
424
      basisvalues[1] = tmp0;
551
 
      for (unsigned int r = 1; r < 3; r++)
552
 
      {
553
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
554
 
        ss = r*(r + 1)*(r + 2)/6;
555
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
556
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
557
 
      }// end loop over 'r'
558
 
      for (unsigned int r = 0; r < 3; r++)
559
 
      {
560
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
561
 
        ss = r*(r + 1)*(r + 2)/6;
562
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
563
 
      }// end loop over 'r'
564
 
      for (unsigned int r = 0; r < 2; r++)
565
 
      {
566
 
        for (unsigned int s = 1; s < 3 - r; s++)
567
 
        {
568
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
569
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
570
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
571
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
572
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
573
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
574
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
575
 
        }// end loop over 's'
576
 
      }// end loop over 'r'
577
 
      for (unsigned int r = 0; r < 3; r++)
578
 
      {
579
 
        for (unsigned int s = 0; s < 3 - r; s++)
580
 
        {
581
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
582
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
583
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
584
 
        }// end loop over 's'
585
 
      }// end loop over 'r'
586
 
      for (unsigned int r = 0; r < 2; r++)
587
 
      {
588
 
        for (unsigned int s = 0; s < 2 - r; s++)
589
 
        {
590
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
591
 
          {
592
 
            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;
593
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
594
 
            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;
595
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
596
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
597
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
598
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
599
 
          }// end loop over 't'
600
 
        }// end loop over 's'
601
 
      }// end loop over 'r'
602
 
      for (unsigned int r = 0; r < 4; r++)
603
 
      {
604
 
        for (unsigned int s = 0; s < 4 - r; s++)
605
 
        {
606
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
607
 
          {
608
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
609
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
610
 
          }// end loop over 't'
611
 
        }// end loop over 's'
612
 
      }// end loop over 'r'
 
425
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
426
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
427
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
428
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
429
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
430
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
431
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
432
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
433
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
434
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
435
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
436
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
437
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
438
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
439
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
440
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
441
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
442
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
443
      basisvalues[0] *= std::sqrt(0.75);
 
444
      basisvalues[3] *= std::sqrt(1.25);
 
445
      basisvalues[9] *= std::sqrt(1.75);
 
446
      basisvalues[19] *= std::sqrt(2.25);
 
447
      basisvalues[2] *= std::sqrt(2.5);
 
448
      basisvalues[8] *= std::sqrt(3.5);
 
449
      basisvalues[18] *= std::sqrt(4.5);
 
450
      basisvalues[7] *= std::sqrt(5.25);
 
451
      basisvalues[17] *= std::sqrt(6.75);
 
452
      basisvalues[16] *= std::sqrt(9.0);
 
453
      basisvalues[1] *= std::sqrt(7.5);
 
454
      basisvalues[6] *= std::sqrt(10.5);
 
455
      basisvalues[15] *= std::sqrt(13.5);
 
456
      basisvalues[5] *= std::sqrt(15.75);
 
457
      basisvalues[14] *= std::sqrt(20.25);
 
458
      basisvalues[13] *= std::sqrt(27.0);
 
459
      basisvalues[4] *= std::sqrt(26.25);
 
460
      basisvalues[12] *= std::sqrt(33.75);
 
461
      basisvalues[11] *= std::sqrt(45.0);
 
462
      basisvalues[10] *= std::sqrt(63.0);
613
463
      
614
464
      // Table(s) of coefficients.
615
465
      static const double coefficients0[20] = \
629
479
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
630
480
      
631
481
      // Declare helper variables.
632
 
      unsigned int rr = 0;
633
 
      unsigned int ss = 0;
634
 
      unsigned int tt = 0;
635
 
      double tmp5 = 0.0;
636
 
      double tmp6 = 0.0;
637
 
      double tmp7 = 0.0;
638
482
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
639
483
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
640
484
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
644
488
      // Compute basisvalues.
645
489
      basisvalues[0] = 1.0;
646
490
      basisvalues[1] = tmp0;
647
 
      for (unsigned int r = 1; r < 3; r++)
648
 
      {
649
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
650
 
        ss = r*(r + 1)*(r + 2)/6;
651
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
652
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
653
 
      }// end loop over 'r'
654
 
      for (unsigned int r = 0; r < 3; r++)
655
 
      {
656
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
657
 
        ss = r*(r + 1)*(r + 2)/6;
658
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
659
 
      }// end loop over 'r'
660
 
      for (unsigned int r = 0; r < 2; r++)
661
 
      {
662
 
        for (unsigned int s = 1; s < 3 - r; s++)
663
 
        {
664
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
665
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
666
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
667
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
668
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
669
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
670
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
671
 
        }// end loop over 's'
672
 
      }// end loop over 'r'
673
 
      for (unsigned int r = 0; r < 3; r++)
674
 
      {
675
 
        for (unsigned int s = 0; s < 3 - r; s++)
676
 
        {
677
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
678
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
679
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
680
 
        }// end loop over 's'
681
 
      }// end loop over 'r'
682
 
      for (unsigned int r = 0; r < 2; r++)
683
 
      {
684
 
        for (unsigned int s = 0; s < 2 - r; s++)
685
 
        {
686
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
687
 
          {
688
 
            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;
689
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
690
 
            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;
691
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
692
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
693
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
694
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
695
 
          }// end loop over 't'
696
 
        }// end loop over 's'
697
 
      }// end loop over 'r'
698
 
      for (unsigned int r = 0; r < 4; r++)
699
 
      {
700
 
        for (unsigned int s = 0; s < 4 - r; s++)
701
 
        {
702
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
703
 
          {
704
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
705
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
706
 
          }// end loop over 't'
707
 
        }// end loop over 's'
708
 
      }// end loop over 'r'
 
491
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
492
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
493
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
494
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
495
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
496
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
497
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
498
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
499
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
500
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
501
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
502
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
503
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
504
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
505
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
506
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
507
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
508
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
509
      basisvalues[0] *= std::sqrt(0.75);
 
510
      basisvalues[3] *= std::sqrt(1.25);
 
511
      basisvalues[9] *= std::sqrt(1.75);
 
512
      basisvalues[19] *= std::sqrt(2.25);
 
513
      basisvalues[2] *= std::sqrt(2.5);
 
514
      basisvalues[8] *= std::sqrt(3.5);
 
515
      basisvalues[18] *= std::sqrt(4.5);
 
516
      basisvalues[7] *= std::sqrt(5.25);
 
517
      basisvalues[17] *= std::sqrt(6.75);
 
518
      basisvalues[16] *= std::sqrt(9.0);
 
519
      basisvalues[1] *= std::sqrt(7.5);
 
520
      basisvalues[6] *= std::sqrt(10.5);
 
521
      basisvalues[15] *= std::sqrt(13.5);
 
522
      basisvalues[5] *= std::sqrt(15.75);
 
523
      basisvalues[14] *= std::sqrt(20.25);
 
524
      basisvalues[13] *= std::sqrt(27.0);
 
525
      basisvalues[4] *= std::sqrt(26.25);
 
526
      basisvalues[12] *= std::sqrt(33.75);
 
527
      basisvalues[11] *= std::sqrt(45.0);
 
528
      basisvalues[10] *= std::sqrt(63.0);
709
529
      
710
530
      // Table(s) of coefficients.
711
531
      static const double coefficients0[20] = \
725
545
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
726
546
      
727
547
      // Declare helper variables.
728
 
      unsigned int rr = 0;
729
 
      unsigned int ss = 0;
730
 
      unsigned int tt = 0;
731
 
      double tmp5 = 0.0;
732
 
      double tmp6 = 0.0;
733
 
      double tmp7 = 0.0;
734
548
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
735
549
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
736
550
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
740
554
      // Compute basisvalues.
741
555
      basisvalues[0] = 1.0;
742
556
      basisvalues[1] = tmp0;
743
 
      for (unsigned int r = 1; r < 3; r++)
744
 
      {
745
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
746
 
        ss = r*(r + 1)*(r + 2)/6;
747
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
748
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
749
 
      }// end loop over 'r'
750
 
      for (unsigned int r = 0; r < 3; r++)
751
 
      {
752
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
753
 
        ss = r*(r + 1)*(r + 2)/6;
754
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
755
 
      }// end loop over 'r'
756
 
      for (unsigned int r = 0; r < 2; r++)
757
 
      {
758
 
        for (unsigned int s = 1; s < 3 - r; s++)
759
 
        {
760
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
761
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
762
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
763
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
764
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
765
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
766
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
767
 
        }// end loop over 's'
768
 
      }// end loop over 'r'
769
 
      for (unsigned int r = 0; r < 3; r++)
770
 
      {
771
 
        for (unsigned int s = 0; s < 3 - r; s++)
772
 
        {
773
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
774
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
775
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
776
 
        }// end loop over 's'
777
 
      }// end loop over 'r'
778
 
      for (unsigned int r = 0; r < 2; r++)
779
 
      {
780
 
        for (unsigned int s = 0; s < 2 - r; s++)
781
 
        {
782
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
783
 
          {
784
 
            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;
785
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
786
 
            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;
787
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
788
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
789
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
790
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
791
 
          }// end loop over 't'
792
 
        }// end loop over 's'
793
 
      }// end loop over 'r'
794
 
      for (unsigned int r = 0; r < 4; r++)
795
 
      {
796
 
        for (unsigned int s = 0; s < 4 - r; s++)
797
 
        {
798
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
799
 
          {
800
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
801
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
802
 
          }// end loop over 't'
803
 
        }// end loop over 's'
804
 
      }// end loop over 'r'
 
557
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
558
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
559
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
560
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
561
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
562
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
563
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
564
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
565
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
566
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
567
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
568
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
569
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
570
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
571
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
572
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
573
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
574
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
575
      basisvalues[0] *= std::sqrt(0.75);
 
576
      basisvalues[3] *= std::sqrt(1.25);
 
577
      basisvalues[9] *= std::sqrt(1.75);
 
578
      basisvalues[19] *= std::sqrt(2.25);
 
579
      basisvalues[2] *= std::sqrt(2.5);
 
580
      basisvalues[8] *= std::sqrt(3.5);
 
581
      basisvalues[18] *= std::sqrt(4.5);
 
582
      basisvalues[7] *= std::sqrt(5.25);
 
583
      basisvalues[17] *= std::sqrt(6.75);
 
584
      basisvalues[16] *= std::sqrt(9.0);
 
585
      basisvalues[1] *= std::sqrt(7.5);
 
586
      basisvalues[6] *= std::sqrt(10.5);
 
587
      basisvalues[15] *= std::sqrt(13.5);
 
588
      basisvalues[5] *= std::sqrt(15.75);
 
589
      basisvalues[14] *= std::sqrt(20.25);
 
590
      basisvalues[13] *= std::sqrt(27.0);
 
591
      basisvalues[4] *= std::sqrt(26.25);
 
592
      basisvalues[12] *= std::sqrt(33.75);
 
593
      basisvalues[11] *= std::sqrt(45.0);
 
594
      basisvalues[10] *= std::sqrt(63.0);
805
595
      
806
596
      // Table(s) of coefficients.
807
597
      static const double coefficients0[20] = \
821
611
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
822
612
      
823
613
      // Declare helper variables.
824
 
      unsigned int rr = 0;
825
 
      unsigned int ss = 0;
826
 
      unsigned int tt = 0;
827
 
      double tmp5 = 0.0;
828
 
      double tmp6 = 0.0;
829
 
      double tmp7 = 0.0;
830
614
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
831
615
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
832
616
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
836
620
      // Compute basisvalues.
837
621
      basisvalues[0] = 1.0;
838
622
      basisvalues[1] = tmp0;
839
 
      for (unsigned int r = 1; r < 3; r++)
840
 
      {
841
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
842
 
        ss = r*(r + 1)*(r + 2)/6;
843
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
844
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
845
 
      }// end loop over 'r'
846
 
      for (unsigned int r = 0; r < 3; r++)
847
 
      {
848
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
849
 
        ss = r*(r + 1)*(r + 2)/6;
850
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
851
 
      }// end loop over 'r'
852
 
      for (unsigned int r = 0; r < 2; r++)
853
 
      {
854
 
        for (unsigned int s = 1; s < 3 - r; s++)
855
 
        {
856
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
857
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
858
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
859
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
860
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
861
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
862
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
863
 
        }// end loop over 's'
864
 
      }// end loop over 'r'
865
 
      for (unsigned int r = 0; r < 3; r++)
866
 
      {
867
 
        for (unsigned int s = 0; s < 3 - r; s++)
868
 
        {
869
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
870
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
871
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
872
 
        }// end loop over 's'
873
 
      }// end loop over 'r'
874
 
      for (unsigned int r = 0; r < 2; r++)
875
 
      {
876
 
        for (unsigned int s = 0; s < 2 - r; s++)
877
 
        {
878
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
879
 
          {
880
 
            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;
881
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
882
 
            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;
883
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
884
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
885
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
886
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
887
 
          }// end loop over 't'
888
 
        }// end loop over 's'
889
 
      }// end loop over 'r'
890
 
      for (unsigned int r = 0; r < 4; r++)
891
 
      {
892
 
        for (unsigned int s = 0; s < 4 - r; s++)
893
 
        {
894
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
895
 
          {
896
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
897
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
898
 
          }// end loop over 't'
899
 
        }// end loop over 's'
900
 
      }// end loop over 'r'
 
623
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
624
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
625
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
626
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
627
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
628
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
629
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
630
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
631
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
632
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
633
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
634
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
635
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
636
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
637
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
638
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
639
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
640
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
641
      basisvalues[0] *= std::sqrt(0.75);
 
642
      basisvalues[3] *= std::sqrt(1.25);
 
643
      basisvalues[9] *= std::sqrt(1.75);
 
644
      basisvalues[19] *= std::sqrt(2.25);
 
645
      basisvalues[2] *= std::sqrt(2.5);
 
646
      basisvalues[8] *= std::sqrt(3.5);
 
647
      basisvalues[18] *= std::sqrt(4.5);
 
648
      basisvalues[7] *= std::sqrt(5.25);
 
649
      basisvalues[17] *= std::sqrt(6.75);
 
650
      basisvalues[16] *= std::sqrt(9.0);
 
651
      basisvalues[1] *= std::sqrt(7.5);
 
652
      basisvalues[6] *= std::sqrt(10.5);
 
653
      basisvalues[15] *= std::sqrt(13.5);
 
654
      basisvalues[5] *= std::sqrt(15.75);
 
655
      basisvalues[14] *= std::sqrt(20.25);
 
656
      basisvalues[13] *= std::sqrt(27.0);
 
657
      basisvalues[4] *= std::sqrt(26.25);
 
658
      basisvalues[12] *= std::sqrt(33.75);
 
659
      basisvalues[11] *= std::sqrt(45.0);
 
660
      basisvalues[10] *= std::sqrt(63.0);
901
661
      
902
662
      // Table(s) of coefficients.
903
663
      static const double coefficients0[20] = \
917
677
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
918
678
      
919
679
      // Declare helper variables.
920
 
      unsigned int rr = 0;
921
 
      unsigned int ss = 0;
922
 
      unsigned int tt = 0;
923
 
      double tmp5 = 0.0;
924
 
      double tmp6 = 0.0;
925
 
      double tmp7 = 0.0;
926
680
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
927
681
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
928
682
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
932
686
      // Compute basisvalues.
933
687
      basisvalues[0] = 1.0;
934
688
      basisvalues[1] = tmp0;
935
 
      for (unsigned int r = 1; r < 3; r++)
936
 
      {
937
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
938
 
        ss = r*(r + 1)*(r + 2)/6;
939
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
940
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
941
 
      }// end loop over 'r'
942
 
      for (unsigned int r = 0; r < 3; r++)
943
 
      {
944
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
945
 
        ss = r*(r + 1)*(r + 2)/6;
946
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
947
 
      }// end loop over 'r'
948
 
      for (unsigned int r = 0; r < 2; r++)
949
 
      {
950
 
        for (unsigned int s = 1; s < 3 - r; s++)
951
 
        {
952
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
953
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
954
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
955
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
956
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
957
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
958
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
959
 
        }// end loop over 's'
960
 
      }// end loop over 'r'
961
 
      for (unsigned int r = 0; r < 3; r++)
962
 
      {
963
 
        for (unsigned int s = 0; s < 3 - r; s++)
964
 
        {
965
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
966
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
967
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
968
 
        }// end loop over 's'
969
 
      }// end loop over 'r'
970
 
      for (unsigned int r = 0; r < 2; r++)
971
 
      {
972
 
        for (unsigned int s = 0; s < 2 - r; s++)
973
 
        {
974
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
975
 
          {
976
 
            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;
977
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
978
 
            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;
979
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
980
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
981
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
982
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
983
 
          }// end loop over 't'
984
 
        }// end loop over 's'
985
 
      }// end loop over 'r'
986
 
      for (unsigned int r = 0; r < 4; r++)
987
 
      {
988
 
        for (unsigned int s = 0; s < 4 - r; s++)
989
 
        {
990
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
991
 
          {
992
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
993
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
994
 
          }// end loop over 't'
995
 
        }// end loop over 's'
996
 
      }// end loop over 'r'
 
689
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
690
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
691
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
692
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
693
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
694
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
695
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
696
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
697
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
698
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
699
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
700
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
701
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
702
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
703
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
704
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
705
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
706
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
707
      basisvalues[0] *= std::sqrt(0.75);
 
708
      basisvalues[3] *= std::sqrt(1.25);
 
709
      basisvalues[9] *= std::sqrt(1.75);
 
710
      basisvalues[19] *= std::sqrt(2.25);
 
711
      basisvalues[2] *= std::sqrt(2.5);
 
712
      basisvalues[8] *= std::sqrt(3.5);
 
713
      basisvalues[18] *= std::sqrt(4.5);
 
714
      basisvalues[7] *= std::sqrt(5.25);
 
715
      basisvalues[17] *= std::sqrt(6.75);
 
716
      basisvalues[16] *= std::sqrt(9.0);
 
717
      basisvalues[1] *= std::sqrt(7.5);
 
718
      basisvalues[6] *= std::sqrt(10.5);
 
719
      basisvalues[15] *= std::sqrt(13.5);
 
720
      basisvalues[5] *= std::sqrt(15.75);
 
721
      basisvalues[14] *= std::sqrt(20.25);
 
722
      basisvalues[13] *= std::sqrt(27.0);
 
723
      basisvalues[4] *= std::sqrt(26.25);
 
724
      basisvalues[12] *= std::sqrt(33.75);
 
725
      basisvalues[11] *= std::sqrt(45.0);
 
726
      basisvalues[10] *= std::sqrt(63.0);
997
727
      
998
728
      // Table(s) of coefficients.
999
729
      static const double coefficients0[20] = \
1013
743
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1014
744
      
1015
745
      // Declare helper variables.
1016
 
      unsigned int rr = 0;
1017
 
      unsigned int ss = 0;
1018
 
      unsigned int tt = 0;
1019
 
      double tmp5 = 0.0;
1020
 
      double tmp6 = 0.0;
1021
 
      double tmp7 = 0.0;
1022
746
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1023
747
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1024
748
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1028
752
      // Compute basisvalues.
1029
753
      basisvalues[0] = 1.0;
1030
754
      basisvalues[1] = tmp0;
1031
 
      for (unsigned int r = 1; r < 3; r++)
1032
 
      {
1033
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1034
 
        ss = r*(r + 1)*(r + 2)/6;
1035
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1036
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1037
 
      }// end loop over 'r'
1038
 
      for (unsigned int r = 0; r < 3; r++)
1039
 
      {
1040
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1041
 
        ss = r*(r + 1)*(r + 2)/6;
1042
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1043
 
      }// end loop over 'r'
1044
 
      for (unsigned int r = 0; r < 2; r++)
1045
 
      {
1046
 
        for (unsigned int s = 1; s < 3 - r; s++)
1047
 
        {
1048
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1049
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1050
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1051
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1052
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1053
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1054
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1055
 
        }// end loop over 's'
1056
 
      }// end loop over 'r'
1057
 
      for (unsigned int r = 0; r < 3; r++)
1058
 
      {
1059
 
        for (unsigned int s = 0; s < 3 - r; s++)
1060
 
        {
1061
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1062
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1063
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1064
 
        }// end loop over 's'
1065
 
      }// end loop over 'r'
1066
 
      for (unsigned int r = 0; r < 2; r++)
1067
 
      {
1068
 
        for (unsigned int s = 0; s < 2 - r; s++)
1069
 
        {
1070
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1071
 
          {
1072
 
            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;
1073
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1074
 
            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;
1075
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1076
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1077
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1078
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1079
 
          }// end loop over 't'
1080
 
        }// end loop over 's'
1081
 
      }// end loop over 'r'
1082
 
      for (unsigned int r = 0; r < 4; r++)
1083
 
      {
1084
 
        for (unsigned int s = 0; s < 4 - r; s++)
1085
 
        {
1086
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1087
 
          {
1088
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1089
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1090
 
          }// end loop over 't'
1091
 
        }// end loop over 's'
1092
 
      }// end loop over 'r'
 
755
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
756
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
757
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
758
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
759
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
760
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
761
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
762
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
763
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
764
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
765
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
766
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
767
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
768
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
769
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
770
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
771
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
772
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
773
      basisvalues[0] *= std::sqrt(0.75);
 
774
      basisvalues[3] *= std::sqrt(1.25);
 
775
      basisvalues[9] *= std::sqrt(1.75);
 
776
      basisvalues[19] *= std::sqrt(2.25);
 
777
      basisvalues[2] *= std::sqrt(2.5);
 
778
      basisvalues[8] *= std::sqrt(3.5);
 
779
      basisvalues[18] *= std::sqrt(4.5);
 
780
      basisvalues[7] *= std::sqrt(5.25);
 
781
      basisvalues[17] *= std::sqrt(6.75);
 
782
      basisvalues[16] *= std::sqrt(9.0);
 
783
      basisvalues[1] *= std::sqrt(7.5);
 
784
      basisvalues[6] *= std::sqrt(10.5);
 
785
      basisvalues[15] *= std::sqrt(13.5);
 
786
      basisvalues[5] *= std::sqrt(15.75);
 
787
      basisvalues[14] *= std::sqrt(20.25);
 
788
      basisvalues[13] *= std::sqrt(27.0);
 
789
      basisvalues[4] *= std::sqrt(26.25);
 
790
      basisvalues[12] *= std::sqrt(33.75);
 
791
      basisvalues[11] *= std::sqrt(45.0);
 
792
      basisvalues[10] *= std::sqrt(63.0);
1093
793
      
1094
794
      // Table(s) of coefficients.
1095
795
      static const double coefficients0[20] = \
1109
809
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1110
810
      
1111
811
      // Declare helper variables.
1112
 
      unsigned int rr = 0;
1113
 
      unsigned int ss = 0;
1114
 
      unsigned int tt = 0;
1115
 
      double tmp5 = 0.0;
1116
 
      double tmp6 = 0.0;
1117
 
      double tmp7 = 0.0;
1118
812
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1119
813
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1120
814
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1124
818
      // Compute basisvalues.
1125
819
      basisvalues[0] = 1.0;
1126
820
      basisvalues[1] = tmp0;
1127
 
      for (unsigned int r = 1; r < 3; r++)
1128
 
      {
1129
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1130
 
        ss = r*(r + 1)*(r + 2)/6;
1131
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1132
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1133
 
      }// end loop over 'r'
1134
 
      for (unsigned int r = 0; r < 3; r++)
1135
 
      {
1136
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1137
 
        ss = r*(r + 1)*(r + 2)/6;
1138
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1139
 
      }// end loop over 'r'
1140
 
      for (unsigned int r = 0; r < 2; r++)
1141
 
      {
1142
 
        for (unsigned int s = 1; s < 3 - r; s++)
1143
 
        {
1144
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1145
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1146
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1147
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1148
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1149
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1150
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1151
 
        }// end loop over 's'
1152
 
      }// end loop over 'r'
1153
 
      for (unsigned int r = 0; r < 3; r++)
1154
 
      {
1155
 
        for (unsigned int s = 0; s < 3 - r; s++)
1156
 
        {
1157
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1158
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1159
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1160
 
        }// end loop over 's'
1161
 
      }// end loop over 'r'
1162
 
      for (unsigned int r = 0; r < 2; r++)
1163
 
      {
1164
 
        for (unsigned int s = 0; s < 2 - r; s++)
1165
 
        {
1166
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1167
 
          {
1168
 
            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;
1169
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1170
 
            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;
1171
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1172
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1173
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1174
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1175
 
          }// end loop over 't'
1176
 
        }// end loop over 's'
1177
 
      }// end loop over 'r'
1178
 
      for (unsigned int r = 0; r < 4; r++)
1179
 
      {
1180
 
        for (unsigned int s = 0; s < 4 - r; s++)
1181
 
        {
1182
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1183
 
          {
1184
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1185
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1186
 
          }// end loop over 't'
1187
 
        }// end loop over 's'
1188
 
      }// end loop over 'r'
 
821
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
822
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
823
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
824
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
825
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
826
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
827
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
828
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
829
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
830
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
831
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
832
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
833
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
834
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
835
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
836
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
837
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
838
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
839
      basisvalues[0] *= std::sqrt(0.75);
 
840
      basisvalues[3] *= std::sqrt(1.25);
 
841
      basisvalues[9] *= std::sqrt(1.75);
 
842
      basisvalues[19] *= std::sqrt(2.25);
 
843
      basisvalues[2] *= std::sqrt(2.5);
 
844
      basisvalues[8] *= std::sqrt(3.5);
 
845
      basisvalues[18] *= std::sqrt(4.5);
 
846
      basisvalues[7] *= std::sqrt(5.25);
 
847
      basisvalues[17] *= std::sqrt(6.75);
 
848
      basisvalues[16] *= std::sqrt(9.0);
 
849
      basisvalues[1] *= std::sqrt(7.5);
 
850
      basisvalues[6] *= std::sqrt(10.5);
 
851
      basisvalues[15] *= std::sqrt(13.5);
 
852
      basisvalues[5] *= std::sqrt(15.75);
 
853
      basisvalues[14] *= std::sqrt(20.25);
 
854
      basisvalues[13] *= std::sqrt(27.0);
 
855
      basisvalues[4] *= std::sqrt(26.25);
 
856
      basisvalues[12] *= std::sqrt(33.75);
 
857
      basisvalues[11] *= std::sqrt(45.0);
 
858
      basisvalues[10] *= std::sqrt(63.0);
1189
859
      
1190
860
      // Table(s) of coefficients.
1191
861
      static const double coefficients0[20] = \
1205
875
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1206
876
      
1207
877
      // Declare helper variables.
1208
 
      unsigned int rr = 0;
1209
 
      unsigned int ss = 0;
1210
 
      unsigned int tt = 0;
1211
 
      double tmp5 = 0.0;
1212
 
      double tmp6 = 0.0;
1213
 
      double tmp7 = 0.0;
1214
878
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1215
879
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1216
880
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1220
884
      // Compute basisvalues.
1221
885
      basisvalues[0] = 1.0;
1222
886
      basisvalues[1] = tmp0;
1223
 
      for (unsigned int r = 1; r < 3; r++)
1224
 
      {
1225
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1226
 
        ss = r*(r + 1)*(r + 2)/6;
1227
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1228
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1229
 
      }// end loop over 'r'
1230
 
      for (unsigned int r = 0; r < 3; r++)
1231
 
      {
1232
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1233
 
        ss = r*(r + 1)*(r + 2)/6;
1234
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1235
 
      }// end loop over 'r'
1236
 
      for (unsigned int r = 0; r < 2; r++)
1237
 
      {
1238
 
        for (unsigned int s = 1; s < 3 - r; s++)
1239
 
        {
1240
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1241
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1242
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1243
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1244
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1245
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1246
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1247
 
        }// end loop over 's'
1248
 
      }// end loop over 'r'
1249
 
      for (unsigned int r = 0; r < 3; r++)
1250
 
      {
1251
 
        for (unsigned int s = 0; s < 3 - r; s++)
1252
 
        {
1253
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1254
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1255
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1256
 
        }// end loop over 's'
1257
 
      }// end loop over 'r'
1258
 
      for (unsigned int r = 0; r < 2; r++)
1259
 
      {
1260
 
        for (unsigned int s = 0; s < 2 - r; s++)
1261
 
        {
1262
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1263
 
          {
1264
 
            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;
1265
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1266
 
            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;
1267
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1268
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1269
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1270
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1271
 
          }// end loop over 't'
1272
 
        }// end loop over 's'
1273
 
      }// end loop over 'r'
1274
 
      for (unsigned int r = 0; r < 4; r++)
1275
 
      {
1276
 
        for (unsigned int s = 0; s < 4 - r; s++)
1277
 
        {
1278
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1279
 
          {
1280
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1281
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1282
 
          }// end loop over 't'
1283
 
        }// end loop over 's'
1284
 
      }// end loop over 'r'
 
887
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
888
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
889
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
890
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
891
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
892
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
893
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
894
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
895
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
896
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
897
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
898
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
899
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
900
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
901
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
902
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
903
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
904
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
905
      basisvalues[0] *= std::sqrt(0.75);
 
906
      basisvalues[3] *= std::sqrt(1.25);
 
907
      basisvalues[9] *= std::sqrt(1.75);
 
908
      basisvalues[19] *= std::sqrt(2.25);
 
909
      basisvalues[2] *= std::sqrt(2.5);
 
910
      basisvalues[8] *= std::sqrt(3.5);
 
911
      basisvalues[18] *= std::sqrt(4.5);
 
912
      basisvalues[7] *= std::sqrt(5.25);
 
913
      basisvalues[17] *= std::sqrt(6.75);
 
914
      basisvalues[16] *= std::sqrt(9.0);
 
915
      basisvalues[1] *= std::sqrt(7.5);
 
916
      basisvalues[6] *= std::sqrt(10.5);
 
917
      basisvalues[15] *= std::sqrt(13.5);
 
918
      basisvalues[5] *= std::sqrt(15.75);
 
919
      basisvalues[14] *= std::sqrt(20.25);
 
920
      basisvalues[13] *= std::sqrt(27.0);
 
921
      basisvalues[4] *= std::sqrt(26.25);
 
922
      basisvalues[12] *= std::sqrt(33.75);
 
923
      basisvalues[11] *= std::sqrt(45.0);
 
924
      basisvalues[10] *= std::sqrt(63.0);
1285
925
      
1286
926
      // Table(s) of coefficients.
1287
927
      static const double coefficients0[20] = \
1301
941
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1302
942
      
1303
943
      // Declare helper variables.
1304
 
      unsigned int rr = 0;
1305
 
      unsigned int ss = 0;
1306
 
      unsigned int tt = 0;
1307
 
      double tmp5 = 0.0;
1308
 
      double tmp6 = 0.0;
1309
 
      double tmp7 = 0.0;
1310
944
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1311
945
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1312
946
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1316
950
      // Compute basisvalues.
1317
951
      basisvalues[0] = 1.0;
1318
952
      basisvalues[1] = tmp0;
1319
 
      for (unsigned int r = 1; r < 3; r++)
1320
 
      {
1321
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1322
 
        ss = r*(r + 1)*(r + 2)/6;
1323
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1324
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1325
 
      }// end loop over 'r'
1326
 
      for (unsigned int r = 0; r < 3; r++)
1327
 
      {
1328
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1329
 
        ss = r*(r + 1)*(r + 2)/6;
1330
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1331
 
      }// end loop over 'r'
1332
 
      for (unsigned int r = 0; r < 2; r++)
1333
 
      {
1334
 
        for (unsigned int s = 1; s < 3 - r; s++)
1335
 
        {
1336
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1337
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1338
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1339
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1340
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1341
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1342
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1343
 
        }// end loop over 's'
1344
 
      }// end loop over 'r'
1345
 
      for (unsigned int r = 0; r < 3; r++)
1346
 
      {
1347
 
        for (unsigned int s = 0; s < 3 - r; s++)
1348
 
        {
1349
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1350
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1351
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1352
 
        }// end loop over 's'
1353
 
      }// end loop over 'r'
1354
 
      for (unsigned int r = 0; r < 2; r++)
1355
 
      {
1356
 
        for (unsigned int s = 0; s < 2 - r; s++)
1357
 
        {
1358
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1359
 
          {
1360
 
            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;
1361
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1362
 
            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;
1363
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1364
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1365
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1366
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1367
 
          }// end loop over 't'
1368
 
        }// end loop over 's'
1369
 
      }// end loop over 'r'
1370
 
      for (unsigned int r = 0; r < 4; r++)
1371
 
      {
1372
 
        for (unsigned int s = 0; s < 4 - r; s++)
1373
 
        {
1374
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1375
 
          {
1376
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1377
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1378
 
          }// end loop over 't'
1379
 
        }// end loop over 's'
1380
 
      }// end loop over 'r'
 
953
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
954
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
955
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
956
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
957
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
958
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
959
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
960
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
961
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
962
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
963
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
964
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
965
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
966
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
967
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
968
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
969
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
970
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
971
      basisvalues[0] *= std::sqrt(0.75);
 
972
      basisvalues[3] *= std::sqrt(1.25);
 
973
      basisvalues[9] *= std::sqrt(1.75);
 
974
      basisvalues[19] *= std::sqrt(2.25);
 
975
      basisvalues[2] *= std::sqrt(2.5);
 
976
      basisvalues[8] *= std::sqrt(3.5);
 
977
      basisvalues[18] *= std::sqrt(4.5);
 
978
      basisvalues[7] *= std::sqrt(5.25);
 
979
      basisvalues[17] *= std::sqrt(6.75);
 
980
      basisvalues[16] *= std::sqrt(9.0);
 
981
      basisvalues[1] *= std::sqrt(7.5);
 
982
      basisvalues[6] *= std::sqrt(10.5);
 
983
      basisvalues[15] *= std::sqrt(13.5);
 
984
      basisvalues[5] *= std::sqrt(15.75);
 
985
      basisvalues[14] *= std::sqrt(20.25);
 
986
      basisvalues[13] *= std::sqrt(27.0);
 
987
      basisvalues[4] *= std::sqrt(26.25);
 
988
      basisvalues[12] *= std::sqrt(33.75);
 
989
      basisvalues[11] *= std::sqrt(45.0);
 
990
      basisvalues[10] *= std::sqrt(63.0);
1381
991
      
1382
992
      // Table(s) of coefficients.
1383
993
      static const double coefficients0[20] = \
1397
1007
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1398
1008
      
1399
1009
      // Declare helper variables.
1400
 
      unsigned int rr = 0;
1401
 
      unsigned int ss = 0;
1402
 
      unsigned int tt = 0;
1403
 
      double tmp5 = 0.0;
1404
 
      double tmp6 = 0.0;
1405
 
      double tmp7 = 0.0;
1406
1010
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1407
1011
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1408
1012
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1412
1016
      // Compute basisvalues.
1413
1017
      basisvalues[0] = 1.0;
1414
1018
      basisvalues[1] = tmp0;
1415
 
      for (unsigned int r = 1; r < 3; r++)
1416
 
      {
1417
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1418
 
        ss = r*(r + 1)*(r + 2)/6;
1419
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1420
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1421
 
      }// end loop over 'r'
1422
 
      for (unsigned int r = 0; r < 3; r++)
1423
 
      {
1424
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1425
 
        ss = r*(r + 1)*(r + 2)/6;
1426
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1427
 
      }// end loop over 'r'
1428
 
      for (unsigned int r = 0; r < 2; r++)
1429
 
      {
1430
 
        for (unsigned int s = 1; s < 3 - r; s++)
1431
 
        {
1432
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1433
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1434
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1435
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1436
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1437
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1438
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1439
 
        }// end loop over 's'
1440
 
      }// end loop over 'r'
1441
 
      for (unsigned int r = 0; r < 3; r++)
1442
 
      {
1443
 
        for (unsigned int s = 0; s < 3 - r; s++)
1444
 
        {
1445
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1446
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1447
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1448
 
        }// end loop over 's'
1449
 
      }// end loop over 'r'
1450
 
      for (unsigned int r = 0; r < 2; r++)
1451
 
      {
1452
 
        for (unsigned int s = 0; s < 2 - r; s++)
1453
 
        {
1454
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1455
 
          {
1456
 
            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;
1457
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1458
 
            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;
1459
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1460
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1461
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1462
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1463
 
          }// end loop over 't'
1464
 
        }// end loop over 's'
1465
 
      }// end loop over 'r'
1466
 
      for (unsigned int r = 0; r < 4; r++)
1467
 
      {
1468
 
        for (unsigned int s = 0; s < 4 - r; s++)
1469
 
        {
1470
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1471
 
          {
1472
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1473
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1474
 
          }// end loop over 't'
1475
 
        }// end loop over 's'
1476
 
      }// end loop over 'r'
 
1019
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1020
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1021
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1022
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1023
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1024
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1025
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1026
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1027
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1028
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1029
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1030
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1031
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1032
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1033
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1034
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1035
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1036
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1037
      basisvalues[0] *= std::sqrt(0.75);
 
1038
      basisvalues[3] *= std::sqrt(1.25);
 
1039
      basisvalues[9] *= std::sqrt(1.75);
 
1040
      basisvalues[19] *= std::sqrt(2.25);
 
1041
      basisvalues[2] *= std::sqrt(2.5);
 
1042
      basisvalues[8] *= std::sqrt(3.5);
 
1043
      basisvalues[18] *= std::sqrt(4.5);
 
1044
      basisvalues[7] *= std::sqrt(5.25);
 
1045
      basisvalues[17] *= std::sqrt(6.75);
 
1046
      basisvalues[16] *= std::sqrt(9.0);
 
1047
      basisvalues[1] *= std::sqrt(7.5);
 
1048
      basisvalues[6] *= std::sqrt(10.5);
 
1049
      basisvalues[15] *= std::sqrt(13.5);
 
1050
      basisvalues[5] *= std::sqrt(15.75);
 
1051
      basisvalues[14] *= std::sqrt(20.25);
 
1052
      basisvalues[13] *= std::sqrt(27.0);
 
1053
      basisvalues[4] *= std::sqrt(26.25);
 
1054
      basisvalues[12] *= std::sqrt(33.75);
 
1055
      basisvalues[11] *= std::sqrt(45.0);
 
1056
      basisvalues[10] *= std::sqrt(63.0);
1477
1057
      
1478
1058
      // Table(s) of coefficients.
1479
1059
      static const double coefficients0[20] = \
1493
1073
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1494
1074
      
1495
1075
      // Declare helper variables.
1496
 
      unsigned int rr = 0;
1497
 
      unsigned int ss = 0;
1498
 
      unsigned int tt = 0;
1499
 
      double tmp5 = 0.0;
1500
 
      double tmp6 = 0.0;
1501
 
      double tmp7 = 0.0;
1502
1076
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1503
1077
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1504
1078
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1508
1082
      // Compute basisvalues.
1509
1083
      basisvalues[0] = 1.0;
1510
1084
      basisvalues[1] = tmp0;
1511
 
      for (unsigned int r = 1; r < 3; r++)
1512
 
      {
1513
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1514
 
        ss = r*(r + 1)*(r + 2)/6;
1515
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1516
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1517
 
      }// end loop over 'r'
1518
 
      for (unsigned int r = 0; r < 3; r++)
1519
 
      {
1520
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1521
 
        ss = r*(r + 1)*(r + 2)/6;
1522
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1523
 
      }// end loop over 'r'
1524
 
      for (unsigned int r = 0; r < 2; r++)
1525
 
      {
1526
 
        for (unsigned int s = 1; s < 3 - r; s++)
1527
 
        {
1528
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1529
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1530
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1531
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1532
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1533
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1534
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1535
 
        }// end loop over 's'
1536
 
      }// end loop over 'r'
1537
 
      for (unsigned int r = 0; r < 3; r++)
1538
 
      {
1539
 
        for (unsigned int s = 0; s < 3 - r; s++)
1540
 
        {
1541
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1542
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1543
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1544
 
        }// end loop over 's'
1545
 
      }// end loop over 'r'
1546
 
      for (unsigned int r = 0; r < 2; r++)
1547
 
      {
1548
 
        for (unsigned int s = 0; s < 2 - r; s++)
1549
 
        {
1550
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1551
 
          {
1552
 
            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;
1553
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1554
 
            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;
1555
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1556
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1557
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1558
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1559
 
          }// end loop over 't'
1560
 
        }// end loop over 's'
1561
 
      }// end loop over 'r'
1562
 
      for (unsigned int r = 0; r < 4; r++)
1563
 
      {
1564
 
        for (unsigned int s = 0; s < 4 - r; s++)
1565
 
        {
1566
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1567
 
          {
1568
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1569
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1570
 
          }// end loop over 't'
1571
 
        }// end loop over 's'
1572
 
      }// end loop over 'r'
 
1085
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1086
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1087
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1088
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1089
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1090
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1091
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1092
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1093
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1094
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1095
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1096
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1097
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1098
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1099
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1100
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1101
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1102
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1103
      basisvalues[0] *= std::sqrt(0.75);
 
1104
      basisvalues[3] *= std::sqrt(1.25);
 
1105
      basisvalues[9] *= std::sqrt(1.75);
 
1106
      basisvalues[19] *= std::sqrt(2.25);
 
1107
      basisvalues[2] *= std::sqrt(2.5);
 
1108
      basisvalues[8] *= std::sqrt(3.5);
 
1109
      basisvalues[18] *= std::sqrt(4.5);
 
1110
      basisvalues[7] *= std::sqrt(5.25);
 
1111
      basisvalues[17] *= std::sqrt(6.75);
 
1112
      basisvalues[16] *= std::sqrt(9.0);
 
1113
      basisvalues[1] *= std::sqrt(7.5);
 
1114
      basisvalues[6] *= std::sqrt(10.5);
 
1115
      basisvalues[15] *= std::sqrt(13.5);
 
1116
      basisvalues[5] *= std::sqrt(15.75);
 
1117
      basisvalues[14] *= std::sqrt(20.25);
 
1118
      basisvalues[13] *= std::sqrt(27.0);
 
1119
      basisvalues[4] *= std::sqrt(26.25);
 
1120
      basisvalues[12] *= std::sqrt(33.75);
 
1121
      basisvalues[11] *= std::sqrt(45.0);
 
1122
      basisvalues[10] *= std::sqrt(63.0);
1573
1123
      
1574
1124
      // Table(s) of coefficients.
1575
1125
      static const double coefficients0[20] = \
1589
1139
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1590
1140
      
1591
1141
      // Declare helper variables.
1592
 
      unsigned int rr = 0;
1593
 
      unsigned int ss = 0;
1594
 
      unsigned int tt = 0;
1595
 
      double tmp5 = 0.0;
1596
 
      double tmp6 = 0.0;
1597
 
      double tmp7 = 0.0;
1598
1142
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1599
1143
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1600
1144
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1604
1148
      // Compute basisvalues.
1605
1149
      basisvalues[0] = 1.0;
1606
1150
      basisvalues[1] = tmp0;
1607
 
      for (unsigned int r = 1; r < 3; r++)
1608
 
      {
1609
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1610
 
        ss = r*(r + 1)*(r + 2)/6;
1611
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1612
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1613
 
      }// end loop over 'r'
1614
 
      for (unsigned int r = 0; r < 3; r++)
1615
 
      {
1616
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1617
 
        ss = r*(r + 1)*(r + 2)/6;
1618
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1619
 
      }// end loop over 'r'
1620
 
      for (unsigned int r = 0; r < 2; r++)
1621
 
      {
1622
 
        for (unsigned int s = 1; s < 3 - r; s++)
1623
 
        {
1624
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1625
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1626
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1627
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1628
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1629
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1630
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1631
 
        }// end loop over 's'
1632
 
      }// end loop over 'r'
1633
 
      for (unsigned int r = 0; r < 3; r++)
1634
 
      {
1635
 
        for (unsigned int s = 0; s < 3 - r; s++)
1636
 
        {
1637
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1638
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1639
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1640
 
        }// end loop over 's'
1641
 
      }// end loop over 'r'
1642
 
      for (unsigned int r = 0; r < 2; r++)
1643
 
      {
1644
 
        for (unsigned int s = 0; s < 2 - r; s++)
1645
 
        {
1646
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1647
 
          {
1648
 
            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;
1649
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1650
 
            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;
1651
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1652
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1653
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1654
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1655
 
          }// end loop over 't'
1656
 
        }// end loop over 's'
1657
 
      }// end loop over 'r'
1658
 
      for (unsigned int r = 0; r < 4; r++)
1659
 
      {
1660
 
        for (unsigned int s = 0; s < 4 - r; s++)
1661
 
        {
1662
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1663
 
          {
1664
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1665
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1666
 
          }// end loop over 't'
1667
 
        }// end loop over 's'
1668
 
      }// end loop over 'r'
 
1151
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1152
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1153
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1154
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1155
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1156
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1157
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1158
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1159
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1160
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1161
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1162
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1163
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1164
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1165
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1166
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1167
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1168
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1169
      basisvalues[0] *= std::sqrt(0.75);
 
1170
      basisvalues[3] *= std::sqrt(1.25);
 
1171
      basisvalues[9] *= std::sqrt(1.75);
 
1172
      basisvalues[19] *= std::sqrt(2.25);
 
1173
      basisvalues[2] *= std::sqrt(2.5);
 
1174
      basisvalues[8] *= std::sqrt(3.5);
 
1175
      basisvalues[18] *= std::sqrt(4.5);
 
1176
      basisvalues[7] *= std::sqrt(5.25);
 
1177
      basisvalues[17] *= std::sqrt(6.75);
 
1178
      basisvalues[16] *= std::sqrt(9.0);
 
1179
      basisvalues[1] *= std::sqrt(7.5);
 
1180
      basisvalues[6] *= std::sqrt(10.5);
 
1181
      basisvalues[15] *= std::sqrt(13.5);
 
1182
      basisvalues[5] *= std::sqrt(15.75);
 
1183
      basisvalues[14] *= std::sqrt(20.25);
 
1184
      basisvalues[13] *= std::sqrt(27.0);
 
1185
      basisvalues[4] *= std::sqrt(26.25);
 
1186
      basisvalues[12] *= std::sqrt(33.75);
 
1187
      basisvalues[11] *= std::sqrt(45.0);
 
1188
      basisvalues[10] *= std::sqrt(63.0);
1669
1189
      
1670
1190
      // Table(s) of coefficients.
1671
1191
      static const double coefficients0[20] = \
1685
1205
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1686
1206
      
1687
1207
      // Declare helper variables.
1688
 
      unsigned int rr = 0;
1689
 
      unsigned int ss = 0;
1690
 
      unsigned int tt = 0;
1691
 
      double tmp5 = 0.0;
1692
 
      double tmp6 = 0.0;
1693
 
      double tmp7 = 0.0;
1694
1208
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1695
1209
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1696
1210
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1700
1214
      // Compute basisvalues.
1701
1215
      basisvalues[0] = 1.0;
1702
1216
      basisvalues[1] = tmp0;
1703
 
      for (unsigned int r = 1; r < 3; r++)
1704
 
      {
1705
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1706
 
        ss = r*(r + 1)*(r + 2)/6;
1707
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1708
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1709
 
      }// end loop over 'r'
1710
 
      for (unsigned int r = 0; r < 3; r++)
1711
 
      {
1712
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1713
 
        ss = r*(r + 1)*(r + 2)/6;
1714
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1715
 
      }// end loop over 'r'
1716
 
      for (unsigned int r = 0; r < 2; r++)
1717
 
      {
1718
 
        for (unsigned int s = 1; s < 3 - r; s++)
1719
 
        {
1720
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1721
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1722
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1723
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1724
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1725
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1726
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1727
 
        }// end loop over 's'
1728
 
      }// end loop over 'r'
1729
 
      for (unsigned int r = 0; r < 3; r++)
1730
 
      {
1731
 
        for (unsigned int s = 0; s < 3 - r; s++)
1732
 
        {
1733
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1734
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1735
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1736
 
        }// end loop over 's'
1737
 
      }// end loop over 'r'
1738
 
      for (unsigned int r = 0; r < 2; r++)
1739
 
      {
1740
 
        for (unsigned int s = 0; s < 2 - r; s++)
1741
 
        {
1742
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1743
 
          {
1744
 
            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;
1745
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1746
 
            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;
1747
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1748
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1749
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1750
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1751
 
          }// end loop over 't'
1752
 
        }// end loop over 's'
1753
 
      }// end loop over 'r'
1754
 
      for (unsigned int r = 0; r < 4; r++)
1755
 
      {
1756
 
        for (unsigned int s = 0; s < 4 - r; s++)
1757
 
        {
1758
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1759
 
          {
1760
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1761
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1762
 
          }// end loop over 't'
1763
 
        }// end loop over 's'
1764
 
      }// end loop over 'r'
 
1217
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1218
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1219
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1220
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1221
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1222
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1223
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1224
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1225
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1226
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1227
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1228
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1229
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1230
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1231
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1232
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1233
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1234
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1235
      basisvalues[0] *= std::sqrt(0.75);
 
1236
      basisvalues[3] *= std::sqrt(1.25);
 
1237
      basisvalues[9] *= std::sqrt(1.75);
 
1238
      basisvalues[19] *= std::sqrt(2.25);
 
1239
      basisvalues[2] *= std::sqrt(2.5);
 
1240
      basisvalues[8] *= std::sqrt(3.5);
 
1241
      basisvalues[18] *= std::sqrt(4.5);
 
1242
      basisvalues[7] *= std::sqrt(5.25);
 
1243
      basisvalues[17] *= std::sqrt(6.75);
 
1244
      basisvalues[16] *= std::sqrt(9.0);
 
1245
      basisvalues[1] *= std::sqrt(7.5);
 
1246
      basisvalues[6] *= std::sqrt(10.5);
 
1247
      basisvalues[15] *= std::sqrt(13.5);
 
1248
      basisvalues[5] *= std::sqrt(15.75);
 
1249
      basisvalues[14] *= std::sqrt(20.25);
 
1250
      basisvalues[13] *= std::sqrt(27.0);
 
1251
      basisvalues[4] *= std::sqrt(26.25);
 
1252
      basisvalues[12] *= std::sqrt(33.75);
 
1253
      basisvalues[11] *= std::sqrt(45.0);
 
1254
      basisvalues[10] *= std::sqrt(63.0);
1765
1255
      
1766
1256
      // Table(s) of coefficients.
1767
1257
      static const double coefficients0[20] = \
1781
1271
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1782
1272
      
1783
1273
      // Declare helper variables.
1784
 
      unsigned int rr = 0;
1785
 
      unsigned int ss = 0;
1786
 
      unsigned int tt = 0;
1787
 
      double tmp5 = 0.0;
1788
 
      double tmp6 = 0.0;
1789
 
      double tmp7 = 0.0;
1790
1274
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1791
1275
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1792
1276
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1796
1280
      // Compute basisvalues.
1797
1281
      basisvalues[0] = 1.0;
1798
1282
      basisvalues[1] = tmp0;
1799
 
      for (unsigned int r = 1; r < 3; r++)
1800
 
      {
1801
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1802
 
        ss = r*(r + 1)*(r + 2)/6;
1803
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1804
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1805
 
      }// end loop over 'r'
1806
 
      for (unsigned int r = 0; r < 3; r++)
1807
 
      {
1808
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1809
 
        ss = r*(r + 1)*(r + 2)/6;
1810
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1811
 
      }// end loop over 'r'
1812
 
      for (unsigned int r = 0; r < 2; r++)
1813
 
      {
1814
 
        for (unsigned int s = 1; s < 3 - r; s++)
1815
 
        {
1816
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1817
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1818
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1819
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1820
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1821
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1822
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1823
 
        }// end loop over 's'
1824
 
      }// end loop over 'r'
1825
 
      for (unsigned int r = 0; r < 3; r++)
1826
 
      {
1827
 
        for (unsigned int s = 0; s < 3 - r; s++)
1828
 
        {
1829
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1830
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1831
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1832
 
        }// end loop over 's'
1833
 
      }// end loop over 'r'
1834
 
      for (unsigned int r = 0; r < 2; r++)
1835
 
      {
1836
 
        for (unsigned int s = 0; s < 2 - r; s++)
1837
 
        {
1838
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1839
 
          {
1840
 
            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;
1841
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1842
 
            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;
1843
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1844
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1845
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1846
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1847
 
          }// end loop over 't'
1848
 
        }// end loop over 's'
1849
 
      }// end loop over 'r'
1850
 
      for (unsigned int r = 0; r < 4; r++)
1851
 
      {
1852
 
        for (unsigned int s = 0; s < 4 - r; s++)
1853
 
        {
1854
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1855
 
          {
1856
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1857
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1858
 
          }// end loop over 't'
1859
 
        }// end loop over 's'
1860
 
      }// end loop over 'r'
 
1283
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1284
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1285
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1286
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1287
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1288
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1289
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1290
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1291
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1292
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1293
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1294
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1295
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1296
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1297
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1298
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1299
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1300
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1301
      basisvalues[0] *= std::sqrt(0.75);
 
1302
      basisvalues[3] *= std::sqrt(1.25);
 
1303
      basisvalues[9] *= std::sqrt(1.75);
 
1304
      basisvalues[19] *= std::sqrt(2.25);
 
1305
      basisvalues[2] *= std::sqrt(2.5);
 
1306
      basisvalues[8] *= std::sqrt(3.5);
 
1307
      basisvalues[18] *= std::sqrt(4.5);
 
1308
      basisvalues[7] *= std::sqrt(5.25);
 
1309
      basisvalues[17] *= std::sqrt(6.75);
 
1310
      basisvalues[16] *= std::sqrt(9.0);
 
1311
      basisvalues[1] *= std::sqrt(7.5);
 
1312
      basisvalues[6] *= std::sqrt(10.5);
 
1313
      basisvalues[15] *= std::sqrt(13.5);
 
1314
      basisvalues[5] *= std::sqrt(15.75);
 
1315
      basisvalues[14] *= std::sqrt(20.25);
 
1316
      basisvalues[13] *= std::sqrt(27.0);
 
1317
      basisvalues[4] *= std::sqrt(26.25);
 
1318
      basisvalues[12] *= std::sqrt(33.75);
 
1319
      basisvalues[11] *= std::sqrt(45.0);
 
1320
      basisvalues[10] *= std::sqrt(63.0);
1861
1321
      
1862
1322
      // Table(s) of coefficients.
1863
1323
      static const double coefficients0[20] = \
1877
1337
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1878
1338
      
1879
1339
      // Declare helper variables.
1880
 
      unsigned int rr = 0;
1881
 
      unsigned int ss = 0;
1882
 
      unsigned int tt = 0;
1883
 
      double tmp5 = 0.0;
1884
 
      double tmp6 = 0.0;
1885
 
      double tmp7 = 0.0;
1886
1340
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1887
1341
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1888
1342
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1892
1346
      // Compute basisvalues.
1893
1347
      basisvalues[0] = 1.0;
1894
1348
      basisvalues[1] = tmp0;
1895
 
      for (unsigned int r = 1; r < 3; r++)
1896
 
      {
1897
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1898
 
        ss = r*(r + 1)*(r + 2)/6;
1899
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1900
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1901
 
      }// end loop over 'r'
1902
 
      for (unsigned int r = 0; r < 3; r++)
1903
 
      {
1904
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
1905
 
        ss = r*(r + 1)*(r + 2)/6;
1906
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
1907
 
      }// end loop over 'r'
1908
 
      for (unsigned int r = 0; r < 2; r++)
1909
 
      {
1910
 
        for (unsigned int s = 1; s < 3 - r; s++)
1911
 
        {
1912
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
1913
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1914
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
1915
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
1916
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1917
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
1918
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
1919
 
        }// end loop over 's'
1920
 
      }// end loop over 'r'
1921
 
      for (unsigned int r = 0; r < 3; r++)
1922
 
      {
1923
 
        for (unsigned int s = 0; s < 3 - r; s++)
1924
 
        {
1925
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
1926
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
1927
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
1928
 
        }// end loop over 's'
1929
 
      }// end loop over 'r'
1930
 
      for (unsigned int r = 0; r < 2; r++)
1931
 
      {
1932
 
        for (unsigned int s = 0; s < 2 - r; s++)
1933
 
        {
1934
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
1935
 
          {
1936
 
            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;
1937
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1938
 
            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;
1939
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
1940
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1941
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
1942
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
1943
 
          }// end loop over 't'
1944
 
        }// end loop over 's'
1945
 
      }// end loop over 'r'
1946
 
      for (unsigned int r = 0; r < 4; r++)
1947
 
      {
1948
 
        for (unsigned int s = 0; s < 4 - r; s++)
1949
 
        {
1950
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
1951
 
          {
1952
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
1953
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
1954
 
          }// end loop over 't'
1955
 
        }// end loop over 's'
1956
 
      }// end loop over 'r'
 
1349
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1350
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1351
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1352
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1353
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1354
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1355
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1356
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1357
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1358
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1359
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1360
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1361
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1362
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1363
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1364
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1365
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1366
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1367
      basisvalues[0] *= std::sqrt(0.75);
 
1368
      basisvalues[3] *= std::sqrt(1.25);
 
1369
      basisvalues[9] *= std::sqrt(1.75);
 
1370
      basisvalues[19] *= std::sqrt(2.25);
 
1371
      basisvalues[2] *= std::sqrt(2.5);
 
1372
      basisvalues[8] *= std::sqrt(3.5);
 
1373
      basisvalues[18] *= std::sqrt(4.5);
 
1374
      basisvalues[7] *= std::sqrt(5.25);
 
1375
      basisvalues[17] *= std::sqrt(6.75);
 
1376
      basisvalues[16] *= std::sqrt(9.0);
 
1377
      basisvalues[1] *= std::sqrt(7.5);
 
1378
      basisvalues[6] *= std::sqrt(10.5);
 
1379
      basisvalues[15] *= std::sqrt(13.5);
 
1380
      basisvalues[5] *= std::sqrt(15.75);
 
1381
      basisvalues[14] *= std::sqrt(20.25);
 
1382
      basisvalues[13] *= std::sqrt(27.0);
 
1383
      basisvalues[4] *= std::sqrt(26.25);
 
1384
      basisvalues[12] *= std::sqrt(33.75);
 
1385
      basisvalues[11] *= std::sqrt(45.0);
 
1386
      basisvalues[10] *= std::sqrt(63.0);
1957
1387
      
1958
1388
      // Table(s) of coefficients.
1959
1389
      static const double coefficients0[20] = \
1973
1403
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1974
1404
      
1975
1405
      // Declare helper variables.
1976
 
      unsigned int rr = 0;
1977
 
      unsigned int ss = 0;
1978
 
      unsigned int tt = 0;
1979
 
      double tmp5 = 0.0;
1980
 
      double tmp6 = 0.0;
1981
 
      double tmp7 = 0.0;
1982
1406
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
1983
1407
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
1984
1408
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
1988
1412
      // Compute basisvalues.
1989
1413
      basisvalues[0] = 1.0;
1990
1414
      basisvalues[1] = tmp0;
1991
 
      for (unsigned int r = 1; r < 3; r++)
1992
 
      {
1993
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
1994
 
        ss = r*(r + 1)*(r + 2)/6;
1995
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
1996
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
1997
 
      }// end loop over 'r'
1998
 
      for (unsigned int r = 0; r < 3; r++)
1999
 
      {
2000
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2001
 
        ss = r*(r + 1)*(r + 2)/6;
2002
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
2003
 
      }// end loop over 'r'
2004
 
      for (unsigned int r = 0; r < 2; r++)
2005
 
      {
2006
 
        for (unsigned int s = 1; s < 3 - r; s++)
2007
 
        {
2008
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2009
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2010
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2011
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
2012
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2013
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2014
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2015
 
        }// end loop over 's'
2016
 
      }// end loop over 'r'
2017
 
      for (unsigned int r = 0; r < 3; r++)
2018
 
      {
2019
 
        for (unsigned int s = 0; s < 3 - r; s++)
2020
 
        {
2021
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2022
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2023
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
2024
 
        }// end loop over 's'
2025
 
      }// end loop over 'r'
2026
 
      for (unsigned int r = 0; r < 2; r++)
2027
 
      {
2028
 
        for (unsigned int s = 0; s < 2 - r; s++)
2029
 
        {
2030
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
2031
 
          {
2032
 
            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;
2033
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2034
 
            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;
2035
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
2036
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2037
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2038
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2039
 
          }// end loop over 't'
2040
 
        }// end loop over 's'
2041
 
      }// end loop over 'r'
2042
 
      for (unsigned int r = 0; r < 4; r++)
2043
 
      {
2044
 
        for (unsigned int s = 0; s < 4 - r; s++)
2045
 
        {
2046
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
2047
 
          {
2048
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2049
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
2050
 
          }// end loop over 't'
2051
 
        }// end loop over 's'
2052
 
      }// end loop over 'r'
 
1415
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1416
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1417
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1418
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1419
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1420
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1421
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1422
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1423
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1424
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1425
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1426
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1427
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1428
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1429
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1430
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1431
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1432
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1433
      basisvalues[0] *= std::sqrt(0.75);
 
1434
      basisvalues[3] *= std::sqrt(1.25);
 
1435
      basisvalues[9] *= std::sqrt(1.75);
 
1436
      basisvalues[19] *= std::sqrt(2.25);
 
1437
      basisvalues[2] *= std::sqrt(2.5);
 
1438
      basisvalues[8] *= std::sqrt(3.5);
 
1439
      basisvalues[18] *= std::sqrt(4.5);
 
1440
      basisvalues[7] *= std::sqrt(5.25);
 
1441
      basisvalues[17] *= std::sqrt(6.75);
 
1442
      basisvalues[16] *= std::sqrt(9.0);
 
1443
      basisvalues[1] *= std::sqrt(7.5);
 
1444
      basisvalues[6] *= std::sqrt(10.5);
 
1445
      basisvalues[15] *= std::sqrt(13.5);
 
1446
      basisvalues[5] *= std::sqrt(15.75);
 
1447
      basisvalues[14] *= std::sqrt(20.25);
 
1448
      basisvalues[13] *= std::sqrt(27.0);
 
1449
      basisvalues[4] *= std::sqrt(26.25);
 
1450
      basisvalues[12] *= std::sqrt(33.75);
 
1451
      basisvalues[11] *= std::sqrt(45.0);
 
1452
      basisvalues[10] *= std::sqrt(63.0);
2053
1453
      
2054
1454
      // Table(s) of coefficients.
2055
1455
      static const double coefficients0[20] = \
2212
1612
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2213
1613
      
2214
1614
      // Declare helper variables.
2215
 
      unsigned int rr = 0;
2216
 
      unsigned int ss = 0;
2217
 
      unsigned int tt = 0;
2218
 
      double tmp5 = 0.0;
2219
 
      double tmp6 = 0.0;
2220
 
      double tmp7 = 0.0;
2221
1615
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
2222
1616
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
2223
1617
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
2227
1621
      // Compute basisvalues.
2228
1622
      basisvalues[0] = 1.0;
2229
1623
      basisvalues[1] = tmp0;
2230
 
      for (unsigned int r = 1; r < 3; r++)
2231
 
      {
2232
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2233
 
        ss = r*(r + 1)*(r + 2)/6;
2234
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2235
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
2236
 
      }// end loop over 'r'
2237
 
      for (unsigned int r = 0; r < 3; r++)
2238
 
      {
2239
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2240
 
        ss = r*(r + 1)*(r + 2)/6;
2241
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
2242
 
      }// end loop over 'r'
2243
 
      for (unsigned int r = 0; r < 2; r++)
2244
 
      {
2245
 
        for (unsigned int s = 1; s < 3 - r; s++)
2246
 
        {
2247
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2248
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2249
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2250
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
2251
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2252
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2253
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2254
 
        }// end loop over 's'
2255
 
      }// end loop over 'r'
2256
 
      for (unsigned int r = 0; r < 3; r++)
2257
 
      {
2258
 
        for (unsigned int s = 0; s < 3 - r; s++)
2259
 
        {
2260
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2261
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2262
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
2263
 
        }// end loop over 's'
2264
 
      }// end loop over 'r'
2265
 
      for (unsigned int r = 0; r < 2; r++)
2266
 
      {
2267
 
        for (unsigned int s = 0; s < 2 - r; s++)
2268
 
        {
2269
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
2270
 
          {
2271
 
            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;
2272
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2273
 
            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;
2274
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
2275
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2276
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2277
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2278
 
          }// end loop over 't'
2279
 
        }// end loop over 's'
2280
 
      }// end loop over 'r'
2281
 
      for (unsigned int r = 0; r < 4; r++)
2282
 
      {
2283
 
        for (unsigned int s = 0; s < 4 - r; s++)
2284
 
        {
2285
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
2286
 
          {
2287
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2288
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
2289
 
          }// end loop over 't'
2290
 
        }// end loop over 's'
2291
 
      }// end loop over 'r'
 
1624
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1625
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1626
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1627
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1628
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1629
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1630
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1631
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1632
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1633
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1634
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1635
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1636
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1637
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1638
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1639
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1640
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1641
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1642
      basisvalues[0] *= std::sqrt(0.75);
 
1643
      basisvalues[3] *= std::sqrt(1.25);
 
1644
      basisvalues[9] *= std::sqrt(1.75);
 
1645
      basisvalues[19] *= std::sqrt(2.25);
 
1646
      basisvalues[2] *= std::sqrt(2.5);
 
1647
      basisvalues[8] *= std::sqrt(3.5);
 
1648
      basisvalues[18] *= std::sqrt(4.5);
 
1649
      basisvalues[7] *= std::sqrt(5.25);
 
1650
      basisvalues[17] *= std::sqrt(6.75);
 
1651
      basisvalues[16] *= std::sqrt(9.0);
 
1652
      basisvalues[1] *= std::sqrt(7.5);
 
1653
      basisvalues[6] *= std::sqrt(10.5);
 
1654
      basisvalues[15] *= std::sqrt(13.5);
 
1655
      basisvalues[5] *= std::sqrt(15.75);
 
1656
      basisvalues[14] *= std::sqrt(20.25);
 
1657
      basisvalues[13] *= std::sqrt(27.0);
 
1658
      basisvalues[4] *= std::sqrt(26.25);
 
1659
      basisvalues[12] *= std::sqrt(33.75);
 
1660
      basisvalues[11] *= std::sqrt(45.0);
 
1661
      basisvalues[10] *= std::sqrt(63.0);
2292
1662
      
2293
1663
      // Table(s) of coefficients.
2294
1664
      static const double coefficients0[20] = \
2530
1900
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2531
1901
      
2532
1902
      // Declare helper variables.
2533
 
      unsigned int rr = 0;
2534
 
      unsigned int ss = 0;
2535
 
      unsigned int tt = 0;
2536
 
      double tmp5 = 0.0;
2537
 
      double tmp6 = 0.0;
2538
 
      double tmp7 = 0.0;
2539
1903
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
2540
1904
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
2541
1905
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
2545
1909
      // Compute basisvalues.
2546
1910
      basisvalues[0] = 1.0;
2547
1911
      basisvalues[1] = tmp0;
2548
 
      for (unsigned int r = 1; r < 3; r++)
2549
 
      {
2550
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2551
 
        ss = r*(r + 1)*(r + 2)/6;
2552
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2553
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
2554
 
      }// end loop over 'r'
2555
 
      for (unsigned int r = 0; r < 3; r++)
2556
 
      {
2557
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2558
 
        ss = r*(r + 1)*(r + 2)/6;
2559
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
2560
 
      }// end loop over 'r'
2561
 
      for (unsigned int r = 0; r < 2; r++)
2562
 
      {
2563
 
        for (unsigned int s = 1; s < 3 - r; s++)
2564
 
        {
2565
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2566
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2567
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2568
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
2569
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2570
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2571
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2572
 
        }// end loop over 's'
2573
 
      }// end loop over 'r'
2574
 
      for (unsigned int r = 0; r < 3; r++)
2575
 
      {
2576
 
        for (unsigned int s = 0; s < 3 - r; s++)
2577
 
        {
2578
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2579
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2580
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
2581
 
        }// end loop over 's'
2582
 
      }// end loop over 'r'
2583
 
      for (unsigned int r = 0; r < 2; r++)
2584
 
      {
2585
 
        for (unsigned int s = 0; s < 2 - r; s++)
2586
 
        {
2587
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
2588
 
          {
2589
 
            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;
2590
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2591
 
            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;
2592
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
2593
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2594
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2595
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2596
 
          }// end loop over 't'
2597
 
        }// end loop over 's'
2598
 
      }// end loop over 'r'
2599
 
      for (unsigned int r = 0; r < 4; r++)
2600
 
      {
2601
 
        for (unsigned int s = 0; s < 4 - r; s++)
2602
 
        {
2603
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
2604
 
          {
2605
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2606
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
2607
 
          }// end loop over 't'
2608
 
        }// end loop over 's'
2609
 
      }// end loop over 'r'
 
1912
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
1913
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
1914
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
1915
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
1916
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
1917
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
1918
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
1919
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
1920
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
1921
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
1922
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
1923
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
1924
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
1925
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
1926
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
1927
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
1928
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
1929
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
1930
      basisvalues[0] *= std::sqrt(0.75);
 
1931
      basisvalues[3] *= std::sqrt(1.25);
 
1932
      basisvalues[9] *= std::sqrt(1.75);
 
1933
      basisvalues[19] *= std::sqrt(2.25);
 
1934
      basisvalues[2] *= std::sqrt(2.5);
 
1935
      basisvalues[8] *= std::sqrt(3.5);
 
1936
      basisvalues[18] *= std::sqrt(4.5);
 
1937
      basisvalues[7] *= std::sqrt(5.25);
 
1938
      basisvalues[17] *= std::sqrt(6.75);
 
1939
      basisvalues[16] *= std::sqrt(9.0);
 
1940
      basisvalues[1] *= std::sqrt(7.5);
 
1941
      basisvalues[6] *= std::sqrt(10.5);
 
1942
      basisvalues[15] *= std::sqrt(13.5);
 
1943
      basisvalues[5] *= std::sqrt(15.75);
 
1944
      basisvalues[14] *= std::sqrt(20.25);
 
1945
      basisvalues[13] *= std::sqrt(27.0);
 
1946
      basisvalues[4] *= std::sqrt(26.25);
 
1947
      basisvalues[12] *= std::sqrt(33.75);
 
1948
      basisvalues[11] *= std::sqrt(45.0);
 
1949
      basisvalues[10] *= std::sqrt(63.0);
2610
1950
      
2611
1951
      // Table(s) of coefficients.
2612
1952
      static const double coefficients0[20] = \
2848
2188
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2849
2189
      
2850
2190
      // Declare helper variables.
2851
 
      unsigned int rr = 0;
2852
 
      unsigned int ss = 0;
2853
 
      unsigned int tt = 0;
2854
 
      double tmp5 = 0.0;
2855
 
      double tmp6 = 0.0;
2856
 
      double tmp7 = 0.0;
2857
2191
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
2858
2192
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
2859
2193
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
2863
2197
      // Compute basisvalues.
2864
2198
      basisvalues[0] = 1.0;
2865
2199
      basisvalues[1] = tmp0;
2866
 
      for (unsigned int r = 1; r < 3; r++)
2867
 
      {
2868
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
2869
 
        ss = r*(r + 1)*(r + 2)/6;
2870
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
2871
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
2872
 
      }// end loop over 'r'
2873
 
      for (unsigned int r = 0; r < 3; r++)
2874
 
      {
2875
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
2876
 
        ss = r*(r + 1)*(r + 2)/6;
2877
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
2878
 
      }// end loop over 'r'
2879
 
      for (unsigned int r = 0; r < 2; r++)
2880
 
      {
2881
 
        for (unsigned int s = 1; s < 3 - r; s++)
2882
 
        {
2883
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
2884
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2885
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
2886
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
2887
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2888
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
2889
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
2890
 
        }// end loop over 's'
2891
 
      }// end loop over 'r'
2892
 
      for (unsigned int r = 0; r < 3; r++)
2893
 
      {
2894
 
        for (unsigned int s = 0; s < 3 - r; s++)
2895
 
        {
2896
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
2897
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
2898
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
2899
 
        }// end loop over 's'
2900
 
      }// end loop over 'r'
2901
 
      for (unsigned int r = 0; r < 2; r++)
2902
 
      {
2903
 
        for (unsigned int s = 0; s < 2 - r; s++)
2904
 
        {
2905
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
2906
 
          {
2907
 
            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;
2908
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2909
 
            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;
2910
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
2911
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2912
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
2913
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
2914
 
          }// end loop over 't'
2915
 
        }// end loop over 's'
2916
 
      }// end loop over 'r'
2917
 
      for (unsigned int r = 0; r < 4; r++)
2918
 
      {
2919
 
        for (unsigned int s = 0; s < 4 - r; s++)
2920
 
        {
2921
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
2922
 
          {
2923
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
2924
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
2925
 
          }// end loop over 't'
2926
 
        }// end loop over 's'
2927
 
      }// end loop over 'r'
 
2200
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
2201
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
2202
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
2203
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
2204
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
2205
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
2206
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
2207
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
2208
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
2209
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
2210
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
2211
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
2212
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
2213
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
2214
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
2215
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
2216
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
2217
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
2218
      basisvalues[0] *= std::sqrt(0.75);
 
2219
      basisvalues[3] *= std::sqrt(1.25);
 
2220
      basisvalues[9] *= std::sqrt(1.75);
 
2221
      basisvalues[19] *= std::sqrt(2.25);
 
2222
      basisvalues[2] *= std::sqrt(2.5);
 
2223
      basisvalues[8] *= std::sqrt(3.5);
 
2224
      basisvalues[18] *= std::sqrt(4.5);
 
2225
      basisvalues[7] *= std::sqrt(5.25);
 
2226
      basisvalues[17] *= std::sqrt(6.75);
 
2227
      basisvalues[16] *= std::sqrt(9.0);
 
2228
      basisvalues[1] *= std::sqrt(7.5);
 
2229
      basisvalues[6] *= std::sqrt(10.5);
 
2230
      basisvalues[15] *= std::sqrt(13.5);
 
2231
      basisvalues[5] *= std::sqrt(15.75);
 
2232
      basisvalues[14] *= std::sqrt(20.25);
 
2233
      basisvalues[13] *= std::sqrt(27.0);
 
2234
      basisvalues[4] *= std::sqrt(26.25);
 
2235
      basisvalues[12] *= std::sqrt(33.75);
 
2236
      basisvalues[11] *= std::sqrt(45.0);
 
2237
      basisvalues[10] *= std::sqrt(63.0);
2928
2238
      
2929
2239
      // Table(s) of coefficients.
2930
2240
      static const double coefficients0[20] = \
3166
2476
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
3167
2477
      
3168
2478
      // Declare helper variables.
3169
 
      unsigned int rr = 0;
3170
 
      unsigned int ss = 0;
3171
 
      unsigned int tt = 0;
3172
 
      double tmp5 = 0.0;
3173
 
      double tmp6 = 0.0;
3174
 
      double tmp7 = 0.0;
3175
2479
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
3176
2480
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
3177
2481
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
3181
2485
      // Compute basisvalues.
3182
2486
      basisvalues[0] = 1.0;
3183
2487
      basisvalues[1] = tmp0;
3184
 
      for (unsigned int r = 1; r < 3; r++)
3185
 
      {
3186
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
3187
 
        ss = r*(r + 1)*(r + 2)/6;
3188
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
3189
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
3190
 
      }// end loop over 'r'
3191
 
      for (unsigned int r = 0; r < 3; r++)
3192
 
      {
3193
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
3194
 
        ss = r*(r + 1)*(r + 2)/6;
3195
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
3196
 
      }// end loop over 'r'
3197
 
      for (unsigned int r = 0; r < 2; r++)
3198
 
      {
3199
 
        for (unsigned int s = 1; s < 3 - r; s++)
3200
 
        {
3201
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
3202
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3203
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
3204
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
3205
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
3206
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
3207
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
3208
 
        }// end loop over 's'
3209
 
      }// end loop over 'r'
3210
 
      for (unsigned int r = 0; r < 3; r++)
3211
 
      {
3212
 
        for (unsigned int s = 0; s < 3 - r; s++)
3213
 
        {
3214
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
3215
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3216
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
3217
 
        }// end loop over 's'
3218
 
      }// end loop over 'r'
3219
 
      for (unsigned int r = 0; r < 2; r++)
3220
 
      {
3221
 
        for (unsigned int s = 0; s < 2 - r; s++)
3222
 
        {
3223
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
3224
 
          {
3225
 
            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;
3226
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3227
 
            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;
3228
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
3229
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
3230
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
3231
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
3232
 
          }// end loop over 't'
3233
 
        }// end loop over 's'
3234
 
      }// end loop over 'r'
3235
 
      for (unsigned int r = 0; r < 4; r++)
3236
 
      {
3237
 
        for (unsigned int s = 0; s < 4 - r; s++)
3238
 
        {
3239
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
3240
 
          {
3241
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3242
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
3243
 
          }// end loop over 't'
3244
 
        }// end loop over 's'
3245
 
      }// end loop over 'r'
 
2488
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
2489
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
2490
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
2491
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
2492
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
2493
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
2494
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
2495
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
2496
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
2497
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
2498
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
2499
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
2500
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
2501
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
2502
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
2503
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
2504
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
2505
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
2506
      basisvalues[0] *= std::sqrt(0.75);
 
2507
      basisvalues[3] *= std::sqrt(1.25);
 
2508
      basisvalues[9] *= std::sqrt(1.75);
 
2509
      basisvalues[19] *= std::sqrt(2.25);
 
2510
      basisvalues[2] *= std::sqrt(2.5);
 
2511
      basisvalues[8] *= std::sqrt(3.5);
 
2512
      basisvalues[18] *= std::sqrt(4.5);
 
2513
      basisvalues[7] *= std::sqrt(5.25);
 
2514
      basisvalues[17] *= std::sqrt(6.75);
 
2515
      basisvalues[16] *= std::sqrt(9.0);
 
2516
      basisvalues[1] *= std::sqrt(7.5);
 
2517
      basisvalues[6] *= std::sqrt(10.5);
 
2518
      basisvalues[15] *= std::sqrt(13.5);
 
2519
      basisvalues[5] *= std::sqrt(15.75);
 
2520
      basisvalues[14] *= std::sqrt(20.25);
 
2521
      basisvalues[13] *= std::sqrt(27.0);
 
2522
      basisvalues[4] *= std::sqrt(26.25);
 
2523
      basisvalues[12] *= std::sqrt(33.75);
 
2524
      basisvalues[11] *= std::sqrt(45.0);
 
2525
      basisvalues[10] *= std::sqrt(63.0);
3246
2526
      
3247
2527
      // Table(s) of coefficients.
3248
2528
      static const double coefficients0[20] = \
3484
2764
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
3485
2765
      
3486
2766
      // Declare helper variables.
3487
 
      unsigned int rr = 0;
3488
 
      unsigned int ss = 0;
3489
 
      unsigned int tt = 0;
3490
 
      double tmp5 = 0.0;
3491
 
      double tmp6 = 0.0;
3492
 
      double tmp7 = 0.0;
3493
2767
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
3494
2768
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
3495
2769
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
3499
2773
      // Compute basisvalues.
3500
2774
      basisvalues[0] = 1.0;
3501
2775
      basisvalues[1] = tmp0;
3502
 
      for (unsigned int r = 1; r < 3; r++)
3503
 
      {
3504
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
3505
 
        ss = r*(r + 1)*(r + 2)/6;
3506
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
3507
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
3508
 
      }// end loop over 'r'
3509
 
      for (unsigned int r = 0; r < 3; r++)
3510
 
      {
3511
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
3512
 
        ss = r*(r + 1)*(r + 2)/6;
3513
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
3514
 
      }// end loop over 'r'
3515
 
      for (unsigned int r = 0; r < 2; r++)
3516
 
      {
3517
 
        for (unsigned int s = 1; s < 3 - r; s++)
3518
 
        {
3519
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
3520
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3521
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
3522
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
3523
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
3524
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
3525
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
3526
 
        }// end loop over 's'
3527
 
      }// end loop over 'r'
3528
 
      for (unsigned int r = 0; r < 3; r++)
3529
 
      {
3530
 
        for (unsigned int s = 0; s < 3 - r; s++)
3531
 
        {
3532
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
3533
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3534
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
3535
 
        }// end loop over 's'
3536
 
      }// end loop over 'r'
3537
 
      for (unsigned int r = 0; r < 2; r++)
3538
 
      {
3539
 
        for (unsigned int s = 0; s < 2 - r; s++)
3540
 
        {
3541
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
3542
 
          {
3543
 
            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;
3544
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3545
 
            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;
3546
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
3547
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
3548
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
3549
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
3550
 
          }// end loop over 't'
3551
 
        }// end loop over 's'
3552
 
      }// end loop over 'r'
3553
 
      for (unsigned int r = 0; r < 4; r++)
3554
 
      {
3555
 
        for (unsigned int s = 0; s < 4 - r; s++)
3556
 
        {
3557
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
3558
 
          {
3559
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3560
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
3561
 
          }// end loop over 't'
3562
 
        }// end loop over 's'
3563
 
      }// end loop over 'r'
 
2776
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
2777
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
2778
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
2779
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
2780
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
2781
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
2782
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
2783
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
2784
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
2785
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
2786
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
2787
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
2788
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
2789
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
2790
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
2791
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
2792
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
2793
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
2794
      basisvalues[0] *= std::sqrt(0.75);
 
2795
      basisvalues[3] *= std::sqrt(1.25);
 
2796
      basisvalues[9] *= std::sqrt(1.75);
 
2797
      basisvalues[19] *= std::sqrt(2.25);
 
2798
      basisvalues[2] *= std::sqrt(2.5);
 
2799
      basisvalues[8] *= std::sqrt(3.5);
 
2800
      basisvalues[18] *= std::sqrt(4.5);
 
2801
      basisvalues[7] *= std::sqrt(5.25);
 
2802
      basisvalues[17] *= std::sqrt(6.75);
 
2803
      basisvalues[16] *= std::sqrt(9.0);
 
2804
      basisvalues[1] *= std::sqrt(7.5);
 
2805
      basisvalues[6] *= std::sqrt(10.5);
 
2806
      basisvalues[15] *= std::sqrt(13.5);
 
2807
      basisvalues[5] *= std::sqrt(15.75);
 
2808
      basisvalues[14] *= std::sqrt(20.25);
 
2809
      basisvalues[13] *= std::sqrt(27.0);
 
2810
      basisvalues[4] *= std::sqrt(26.25);
 
2811
      basisvalues[12] *= std::sqrt(33.75);
 
2812
      basisvalues[11] *= std::sqrt(45.0);
 
2813
      basisvalues[10] *= std::sqrt(63.0);
3564
2814
      
3565
2815
      // Table(s) of coefficients.
3566
2816
      static const double coefficients0[20] = \
3802
3052
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
3803
3053
      
3804
3054
      // Declare helper variables.
3805
 
      unsigned int rr = 0;
3806
 
      unsigned int ss = 0;
3807
 
      unsigned int tt = 0;
3808
 
      double tmp5 = 0.0;
3809
 
      double tmp6 = 0.0;
3810
 
      double tmp7 = 0.0;
3811
3055
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
3812
3056
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
3813
3057
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
3817
3061
      // Compute basisvalues.
3818
3062
      basisvalues[0] = 1.0;
3819
3063
      basisvalues[1] = tmp0;
3820
 
      for (unsigned int r = 1; r < 3; r++)
3821
 
      {
3822
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
3823
 
        ss = r*(r + 1)*(r + 2)/6;
3824
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
3825
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
3826
 
      }// end loop over 'r'
3827
 
      for (unsigned int r = 0; r < 3; r++)
3828
 
      {
3829
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
3830
 
        ss = r*(r + 1)*(r + 2)/6;
3831
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
3832
 
      }// end loop over 'r'
3833
 
      for (unsigned int r = 0; r < 2; r++)
3834
 
      {
3835
 
        for (unsigned int s = 1; s < 3 - r; s++)
3836
 
        {
3837
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
3838
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3839
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
3840
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
3841
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
3842
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
3843
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
3844
 
        }// end loop over 's'
3845
 
      }// end loop over 'r'
3846
 
      for (unsigned int r = 0; r < 3; r++)
3847
 
      {
3848
 
        for (unsigned int s = 0; s < 3 - r; s++)
3849
 
        {
3850
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
3851
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
3852
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
3853
 
        }// end loop over 's'
3854
 
      }// end loop over 'r'
3855
 
      for (unsigned int r = 0; r < 2; r++)
3856
 
      {
3857
 
        for (unsigned int s = 0; s < 2 - r; s++)
3858
 
        {
3859
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
3860
 
          {
3861
 
            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;
3862
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3863
 
            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;
3864
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
3865
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
3866
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
3867
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
3868
 
          }// end loop over 't'
3869
 
        }// end loop over 's'
3870
 
      }// end loop over 'r'
3871
 
      for (unsigned int r = 0; r < 4; r++)
3872
 
      {
3873
 
        for (unsigned int s = 0; s < 4 - r; s++)
3874
 
        {
3875
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
3876
 
          {
3877
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
3878
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
3879
 
          }// end loop over 't'
3880
 
        }// end loop over 's'
3881
 
      }// end loop over 'r'
 
3064
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
3065
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
3066
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
3067
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
3068
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
3069
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
3070
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
3071
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
3072
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
3073
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
3074
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
3075
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
3076
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
3077
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
3078
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
3079
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
3080
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
3081
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
3082
      basisvalues[0] *= std::sqrt(0.75);
 
3083
      basisvalues[3] *= std::sqrt(1.25);
 
3084
      basisvalues[9] *= std::sqrt(1.75);
 
3085
      basisvalues[19] *= std::sqrt(2.25);
 
3086
      basisvalues[2] *= std::sqrt(2.5);
 
3087
      basisvalues[8] *= std::sqrt(3.5);
 
3088
      basisvalues[18] *= std::sqrt(4.5);
 
3089
      basisvalues[7] *= std::sqrt(5.25);
 
3090
      basisvalues[17] *= std::sqrt(6.75);
 
3091
      basisvalues[16] *= std::sqrt(9.0);
 
3092
      basisvalues[1] *= std::sqrt(7.5);
 
3093
      basisvalues[6] *= std::sqrt(10.5);
 
3094
      basisvalues[15] *= std::sqrt(13.5);
 
3095
      basisvalues[5] *= std::sqrt(15.75);
 
3096
      basisvalues[14] *= std::sqrt(20.25);
 
3097
      basisvalues[13] *= std::sqrt(27.0);
 
3098
      basisvalues[4] *= std::sqrt(26.25);
 
3099
      basisvalues[12] *= std::sqrt(33.75);
 
3100
      basisvalues[11] *= std::sqrt(45.0);
 
3101
      basisvalues[10] *= std::sqrt(63.0);
3882
3102
      
3883
3103
      // Table(s) of coefficients.
3884
3104
      static const double coefficients0[20] = \
4120
3340
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
4121
3341
      
4122
3342
      // Declare helper variables.
4123
 
      unsigned int rr = 0;
4124
 
      unsigned int ss = 0;
4125
 
      unsigned int tt = 0;
4126
 
      double tmp5 = 0.0;
4127
 
      double tmp6 = 0.0;
4128
 
      double tmp7 = 0.0;
4129
3343
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
4130
3344
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
4131
3345
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
4135
3349
      // Compute basisvalues.
4136
3350
      basisvalues[0] = 1.0;
4137
3351
      basisvalues[1] = tmp0;
4138
 
      for (unsigned int r = 1; r < 3; r++)
4139
 
      {
4140
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4141
 
        ss = r*(r + 1)*(r + 2)/6;
4142
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4143
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
4144
 
      }// end loop over 'r'
4145
 
      for (unsigned int r = 0; r < 3; r++)
4146
 
      {
4147
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4148
 
        ss = r*(r + 1)*(r + 2)/6;
4149
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
4150
 
      }// end loop over 'r'
4151
 
      for (unsigned int r = 0; r < 2; r++)
4152
 
      {
4153
 
        for (unsigned int s = 1; s < 3 - r; s++)
4154
 
        {
4155
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4156
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4157
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4158
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
4159
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
4160
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
4161
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4162
 
        }// end loop over 's'
4163
 
      }// end loop over 'r'
4164
 
      for (unsigned int r = 0; r < 3; r++)
4165
 
      {
4166
 
        for (unsigned int s = 0; s < 3 - r; s++)
4167
 
        {
4168
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4169
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4170
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
4171
 
        }// end loop over 's'
4172
 
      }// end loop over 'r'
4173
 
      for (unsigned int r = 0; r < 2; r++)
4174
 
      {
4175
 
        for (unsigned int s = 0; s < 2 - r; s++)
4176
 
        {
4177
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
4178
 
          {
4179
 
            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;
4180
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4181
 
            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;
4182
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
4183
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
4184
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
4185
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4186
 
          }// end loop over 't'
4187
 
        }// end loop over 's'
4188
 
      }// end loop over 'r'
4189
 
      for (unsigned int r = 0; r < 4; r++)
4190
 
      {
4191
 
        for (unsigned int s = 0; s < 4 - r; s++)
4192
 
        {
4193
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
4194
 
          {
4195
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4196
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
4197
 
          }// end loop over 't'
4198
 
        }// end loop over 's'
4199
 
      }// end loop over 'r'
 
3352
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
3353
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
3354
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
3355
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
3356
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
3357
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
3358
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
3359
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
3360
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
3361
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
3362
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
3363
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
3364
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
3365
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
3366
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
3367
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
3368
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
3369
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
3370
      basisvalues[0] *= std::sqrt(0.75);
 
3371
      basisvalues[3] *= std::sqrt(1.25);
 
3372
      basisvalues[9] *= std::sqrt(1.75);
 
3373
      basisvalues[19] *= std::sqrt(2.25);
 
3374
      basisvalues[2] *= std::sqrt(2.5);
 
3375
      basisvalues[8] *= std::sqrt(3.5);
 
3376
      basisvalues[18] *= std::sqrt(4.5);
 
3377
      basisvalues[7] *= std::sqrt(5.25);
 
3378
      basisvalues[17] *= std::sqrt(6.75);
 
3379
      basisvalues[16] *= std::sqrt(9.0);
 
3380
      basisvalues[1] *= std::sqrt(7.5);
 
3381
      basisvalues[6] *= std::sqrt(10.5);
 
3382
      basisvalues[15] *= std::sqrt(13.5);
 
3383
      basisvalues[5] *= std::sqrt(15.75);
 
3384
      basisvalues[14] *= std::sqrt(20.25);
 
3385
      basisvalues[13] *= std::sqrt(27.0);
 
3386
      basisvalues[4] *= std::sqrt(26.25);
 
3387
      basisvalues[12] *= std::sqrt(33.75);
 
3388
      basisvalues[11] *= std::sqrt(45.0);
 
3389
      basisvalues[10] *= std::sqrt(63.0);
4200
3390
      
4201
3391
      // Table(s) of coefficients.
4202
3392
      static const double coefficients0[20] = \
4438
3628
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
4439
3629
      
4440
3630
      // Declare helper variables.
4441
 
      unsigned int rr = 0;
4442
 
      unsigned int ss = 0;
4443
 
      unsigned int tt = 0;
4444
 
      double tmp5 = 0.0;
4445
 
      double tmp6 = 0.0;
4446
 
      double tmp7 = 0.0;
4447
3631
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
4448
3632
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
4449
3633
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
4453
3637
      // Compute basisvalues.
4454
3638
      basisvalues[0] = 1.0;
4455
3639
      basisvalues[1] = tmp0;
4456
 
      for (unsigned int r = 1; r < 3; r++)
4457
 
      {
4458
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4459
 
        ss = r*(r + 1)*(r + 2)/6;
4460
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4461
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
4462
 
      }// end loop over 'r'
4463
 
      for (unsigned int r = 0; r < 3; r++)
4464
 
      {
4465
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4466
 
        ss = r*(r + 1)*(r + 2)/6;
4467
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
4468
 
      }// end loop over 'r'
4469
 
      for (unsigned int r = 0; r < 2; r++)
4470
 
      {
4471
 
        for (unsigned int s = 1; s < 3 - r; s++)
4472
 
        {
4473
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4474
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4475
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4476
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
4477
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
4478
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
4479
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4480
 
        }// end loop over 's'
4481
 
      }// end loop over 'r'
4482
 
      for (unsigned int r = 0; r < 3; r++)
4483
 
      {
4484
 
        for (unsigned int s = 0; s < 3 - r; s++)
4485
 
        {
4486
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4487
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4488
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
4489
 
        }// end loop over 's'
4490
 
      }// end loop over 'r'
4491
 
      for (unsigned int r = 0; r < 2; r++)
4492
 
      {
4493
 
        for (unsigned int s = 0; s < 2 - r; s++)
4494
 
        {
4495
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
4496
 
          {
4497
 
            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;
4498
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4499
 
            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;
4500
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
4501
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
4502
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
4503
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4504
 
          }// end loop over 't'
4505
 
        }// end loop over 's'
4506
 
      }// end loop over 'r'
4507
 
      for (unsigned int r = 0; r < 4; r++)
4508
 
      {
4509
 
        for (unsigned int s = 0; s < 4 - r; s++)
4510
 
        {
4511
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
4512
 
          {
4513
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4514
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
4515
 
          }// end loop over 't'
4516
 
        }// end loop over 's'
4517
 
      }// end loop over 'r'
 
3640
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
3641
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
3642
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
3643
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
3644
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
3645
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
3646
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
3647
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
3648
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
3649
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
3650
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
3651
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
3652
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
3653
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
3654
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
3655
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
3656
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
3657
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
3658
      basisvalues[0] *= std::sqrt(0.75);
 
3659
      basisvalues[3] *= std::sqrt(1.25);
 
3660
      basisvalues[9] *= std::sqrt(1.75);
 
3661
      basisvalues[19] *= std::sqrt(2.25);
 
3662
      basisvalues[2] *= std::sqrt(2.5);
 
3663
      basisvalues[8] *= std::sqrt(3.5);
 
3664
      basisvalues[18] *= std::sqrt(4.5);
 
3665
      basisvalues[7] *= std::sqrt(5.25);
 
3666
      basisvalues[17] *= std::sqrt(6.75);
 
3667
      basisvalues[16] *= std::sqrt(9.0);
 
3668
      basisvalues[1] *= std::sqrt(7.5);
 
3669
      basisvalues[6] *= std::sqrt(10.5);
 
3670
      basisvalues[15] *= std::sqrt(13.5);
 
3671
      basisvalues[5] *= std::sqrt(15.75);
 
3672
      basisvalues[14] *= std::sqrt(20.25);
 
3673
      basisvalues[13] *= std::sqrt(27.0);
 
3674
      basisvalues[4] *= std::sqrt(26.25);
 
3675
      basisvalues[12] *= std::sqrt(33.75);
 
3676
      basisvalues[11] *= std::sqrt(45.0);
 
3677
      basisvalues[10] *= std::sqrt(63.0);
4518
3678
      
4519
3679
      // Table(s) of coefficients.
4520
3680
      static const double coefficients0[20] = \
4756
3916
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
4757
3917
      
4758
3918
      // Declare helper variables.
4759
 
      unsigned int rr = 0;
4760
 
      unsigned int ss = 0;
4761
 
      unsigned int tt = 0;
4762
 
      double tmp5 = 0.0;
4763
 
      double tmp6 = 0.0;
4764
 
      double tmp7 = 0.0;
4765
3919
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
4766
3920
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
4767
3921
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
4771
3925
      // Compute basisvalues.
4772
3926
      basisvalues[0] = 1.0;
4773
3927
      basisvalues[1] = tmp0;
4774
 
      for (unsigned int r = 1; r < 3; r++)
4775
 
      {
4776
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
4777
 
        ss = r*(r + 1)*(r + 2)/6;
4778
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
4779
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
4780
 
      }// end loop over 'r'
4781
 
      for (unsigned int r = 0; r < 3; r++)
4782
 
      {
4783
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
4784
 
        ss = r*(r + 1)*(r + 2)/6;
4785
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
4786
 
      }// end loop over 'r'
4787
 
      for (unsigned int r = 0; r < 2; r++)
4788
 
      {
4789
 
        for (unsigned int s = 1; s < 3 - r; s++)
4790
 
        {
4791
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
4792
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4793
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
4794
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
4795
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
4796
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
4797
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
4798
 
        }// end loop over 's'
4799
 
      }// end loop over 'r'
4800
 
      for (unsigned int r = 0; r < 3; r++)
4801
 
      {
4802
 
        for (unsigned int s = 0; s < 3 - r; s++)
4803
 
        {
4804
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
4805
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
4806
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
4807
 
        }// end loop over 's'
4808
 
      }// end loop over 'r'
4809
 
      for (unsigned int r = 0; r < 2; r++)
4810
 
      {
4811
 
        for (unsigned int s = 0; s < 2 - r; s++)
4812
 
        {
4813
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
4814
 
          {
4815
 
            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;
4816
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4817
 
            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;
4818
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
4819
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
4820
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
4821
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
4822
 
          }// end loop over 't'
4823
 
        }// end loop over 's'
4824
 
      }// end loop over 'r'
4825
 
      for (unsigned int r = 0; r < 4; r++)
4826
 
      {
4827
 
        for (unsigned int s = 0; s < 4 - r; s++)
4828
 
        {
4829
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
4830
 
          {
4831
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
4832
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
4833
 
          }// end loop over 't'
4834
 
        }// end loop over 's'
4835
 
      }// end loop over 'r'
 
3928
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
3929
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
3930
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
3931
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
3932
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
3933
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
3934
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
3935
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
3936
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
3937
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
3938
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
3939
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
3940
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
3941
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
3942
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
3943
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
3944
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
3945
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
3946
      basisvalues[0] *= std::sqrt(0.75);
 
3947
      basisvalues[3] *= std::sqrt(1.25);
 
3948
      basisvalues[9] *= std::sqrt(1.75);
 
3949
      basisvalues[19] *= std::sqrt(2.25);
 
3950
      basisvalues[2] *= std::sqrt(2.5);
 
3951
      basisvalues[8] *= std::sqrt(3.5);
 
3952
      basisvalues[18] *= std::sqrt(4.5);
 
3953
      basisvalues[7] *= std::sqrt(5.25);
 
3954
      basisvalues[17] *= std::sqrt(6.75);
 
3955
      basisvalues[16] *= std::sqrt(9.0);
 
3956
      basisvalues[1] *= std::sqrt(7.5);
 
3957
      basisvalues[6] *= std::sqrt(10.5);
 
3958
      basisvalues[15] *= std::sqrt(13.5);
 
3959
      basisvalues[5] *= std::sqrt(15.75);
 
3960
      basisvalues[14] *= std::sqrt(20.25);
 
3961
      basisvalues[13] *= std::sqrt(27.0);
 
3962
      basisvalues[4] *= std::sqrt(26.25);
 
3963
      basisvalues[12] *= std::sqrt(33.75);
 
3964
      basisvalues[11] *= std::sqrt(45.0);
 
3965
      basisvalues[10] *= std::sqrt(63.0);
4836
3966
      
4837
3967
      // Table(s) of coefficients.
4838
3968
      static const double coefficients0[20] = \
5074
4204
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
5075
4205
      
5076
4206
      // Declare helper variables.
5077
 
      unsigned int rr = 0;
5078
 
      unsigned int ss = 0;
5079
 
      unsigned int tt = 0;
5080
 
      double tmp5 = 0.0;
5081
 
      double tmp6 = 0.0;
5082
 
      double tmp7 = 0.0;
5083
4207
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
5084
4208
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
5085
4209
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
5089
4213
      // Compute basisvalues.
5090
4214
      basisvalues[0] = 1.0;
5091
4215
      basisvalues[1] = tmp0;
5092
 
      for (unsigned int r = 1; r < 3; r++)
5093
 
      {
5094
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5095
 
        ss = r*(r + 1)*(r + 2)/6;
5096
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5097
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
5098
 
      }// end loop over 'r'
5099
 
      for (unsigned int r = 0; r < 3; r++)
5100
 
      {
5101
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5102
 
        ss = r*(r + 1)*(r + 2)/6;
5103
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
5104
 
      }// end loop over 'r'
5105
 
      for (unsigned int r = 0; r < 2; r++)
5106
 
      {
5107
 
        for (unsigned int s = 1; s < 3 - r; s++)
5108
 
        {
5109
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5110
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5111
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5112
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
5113
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
5114
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
5115
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5116
 
        }// end loop over 's'
5117
 
      }// end loop over 'r'
5118
 
      for (unsigned int r = 0; r < 3; r++)
5119
 
      {
5120
 
        for (unsigned int s = 0; s < 3 - r; s++)
5121
 
        {
5122
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5123
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5124
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
5125
 
        }// end loop over 's'
5126
 
      }// end loop over 'r'
5127
 
      for (unsigned int r = 0; r < 2; r++)
5128
 
      {
5129
 
        for (unsigned int s = 0; s < 2 - r; s++)
5130
 
        {
5131
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
5132
 
          {
5133
 
            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;
5134
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5135
 
            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;
5136
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
5137
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
5138
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
5139
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5140
 
          }// end loop over 't'
5141
 
        }// end loop over 's'
5142
 
      }// end loop over 'r'
5143
 
      for (unsigned int r = 0; r < 4; r++)
5144
 
      {
5145
 
        for (unsigned int s = 0; s < 4 - r; s++)
5146
 
        {
5147
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
5148
 
          {
5149
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5150
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
5151
 
          }// end loop over 't'
5152
 
        }// end loop over 's'
5153
 
      }// end loop over 'r'
 
4216
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
4217
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
4218
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
4219
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
4220
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
4221
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
4222
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
4223
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
4224
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
4225
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
4226
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
4227
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
4228
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
4229
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
4230
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
4231
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
4232
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
4233
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
4234
      basisvalues[0] *= std::sqrt(0.75);
 
4235
      basisvalues[3] *= std::sqrt(1.25);
 
4236
      basisvalues[9] *= std::sqrt(1.75);
 
4237
      basisvalues[19] *= std::sqrt(2.25);
 
4238
      basisvalues[2] *= std::sqrt(2.5);
 
4239
      basisvalues[8] *= std::sqrt(3.5);
 
4240
      basisvalues[18] *= std::sqrt(4.5);
 
4241
      basisvalues[7] *= std::sqrt(5.25);
 
4242
      basisvalues[17] *= std::sqrt(6.75);
 
4243
      basisvalues[16] *= std::sqrt(9.0);
 
4244
      basisvalues[1] *= std::sqrt(7.5);
 
4245
      basisvalues[6] *= std::sqrt(10.5);
 
4246
      basisvalues[15] *= std::sqrt(13.5);
 
4247
      basisvalues[5] *= std::sqrt(15.75);
 
4248
      basisvalues[14] *= std::sqrt(20.25);
 
4249
      basisvalues[13] *= std::sqrt(27.0);
 
4250
      basisvalues[4] *= std::sqrt(26.25);
 
4251
      basisvalues[12] *= std::sqrt(33.75);
 
4252
      basisvalues[11] *= std::sqrt(45.0);
 
4253
      basisvalues[10] *= std::sqrt(63.0);
5154
4254
      
5155
4255
      // Table(s) of coefficients.
5156
4256
      static const double coefficients0[20] = \
5392
4492
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
5393
4493
      
5394
4494
      // Declare helper variables.
5395
 
      unsigned int rr = 0;
5396
 
      unsigned int ss = 0;
5397
 
      unsigned int tt = 0;
5398
 
      double tmp5 = 0.0;
5399
 
      double tmp6 = 0.0;
5400
 
      double tmp7 = 0.0;
5401
4495
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
5402
4496
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
5403
4497
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
5407
4501
      // Compute basisvalues.
5408
4502
      basisvalues[0] = 1.0;
5409
4503
      basisvalues[1] = tmp0;
5410
 
      for (unsigned int r = 1; r < 3; r++)
5411
 
      {
5412
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5413
 
        ss = r*(r + 1)*(r + 2)/6;
5414
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5415
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
5416
 
      }// end loop over 'r'
5417
 
      for (unsigned int r = 0; r < 3; r++)
5418
 
      {
5419
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5420
 
        ss = r*(r + 1)*(r + 2)/6;
5421
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
5422
 
      }// end loop over 'r'
5423
 
      for (unsigned int r = 0; r < 2; r++)
5424
 
      {
5425
 
        for (unsigned int s = 1; s < 3 - r; s++)
5426
 
        {
5427
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5428
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5429
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5430
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
5431
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
5432
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
5433
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5434
 
        }// end loop over 's'
5435
 
      }// end loop over 'r'
5436
 
      for (unsigned int r = 0; r < 3; r++)
5437
 
      {
5438
 
        for (unsigned int s = 0; s < 3 - r; s++)
5439
 
        {
5440
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5441
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5442
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
5443
 
        }// end loop over 's'
5444
 
      }// end loop over 'r'
5445
 
      for (unsigned int r = 0; r < 2; r++)
5446
 
      {
5447
 
        for (unsigned int s = 0; s < 2 - r; s++)
5448
 
        {
5449
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
5450
 
          {
5451
 
            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;
5452
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5453
 
            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;
5454
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
5455
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
5456
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
5457
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5458
 
          }// end loop over 't'
5459
 
        }// end loop over 's'
5460
 
      }// end loop over 'r'
5461
 
      for (unsigned int r = 0; r < 4; r++)
5462
 
      {
5463
 
        for (unsigned int s = 0; s < 4 - r; s++)
5464
 
        {
5465
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
5466
 
          {
5467
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5468
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
5469
 
          }// end loop over 't'
5470
 
        }// end loop over 's'
5471
 
      }// end loop over 'r'
 
4504
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
4505
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
4506
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
4507
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
4508
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
4509
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
4510
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
4511
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
4512
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
4513
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
4514
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
4515
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
4516
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
4517
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
4518
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
4519
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
4520
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
4521
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
4522
      basisvalues[0] *= std::sqrt(0.75);
 
4523
      basisvalues[3] *= std::sqrt(1.25);
 
4524
      basisvalues[9] *= std::sqrt(1.75);
 
4525
      basisvalues[19] *= std::sqrt(2.25);
 
4526
      basisvalues[2] *= std::sqrt(2.5);
 
4527
      basisvalues[8] *= std::sqrt(3.5);
 
4528
      basisvalues[18] *= std::sqrt(4.5);
 
4529
      basisvalues[7] *= std::sqrt(5.25);
 
4530
      basisvalues[17] *= std::sqrt(6.75);
 
4531
      basisvalues[16] *= std::sqrt(9.0);
 
4532
      basisvalues[1] *= std::sqrt(7.5);
 
4533
      basisvalues[6] *= std::sqrt(10.5);
 
4534
      basisvalues[15] *= std::sqrt(13.5);
 
4535
      basisvalues[5] *= std::sqrt(15.75);
 
4536
      basisvalues[14] *= std::sqrt(20.25);
 
4537
      basisvalues[13] *= std::sqrt(27.0);
 
4538
      basisvalues[4] *= std::sqrt(26.25);
 
4539
      basisvalues[12] *= std::sqrt(33.75);
 
4540
      basisvalues[11] *= std::sqrt(45.0);
 
4541
      basisvalues[10] *= std::sqrt(63.0);
5472
4542
      
5473
4543
      // Table(s) of coefficients.
5474
4544
      static const double coefficients0[20] = \
5710
4780
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
5711
4781
      
5712
4782
      // Declare helper variables.
5713
 
      unsigned int rr = 0;
5714
 
      unsigned int ss = 0;
5715
 
      unsigned int tt = 0;
5716
 
      double tmp5 = 0.0;
5717
 
      double tmp6 = 0.0;
5718
 
      double tmp7 = 0.0;
5719
4783
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
5720
4784
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
5721
4785
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
5725
4789
      // Compute basisvalues.
5726
4790
      basisvalues[0] = 1.0;
5727
4791
      basisvalues[1] = tmp0;
5728
 
      for (unsigned int r = 1; r < 3; r++)
5729
 
      {
5730
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
5731
 
        ss = r*(r + 1)*(r + 2)/6;
5732
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
5733
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
5734
 
      }// end loop over 'r'
5735
 
      for (unsigned int r = 0; r < 3; r++)
5736
 
      {
5737
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
5738
 
        ss = r*(r + 1)*(r + 2)/6;
5739
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
5740
 
      }// end loop over 'r'
5741
 
      for (unsigned int r = 0; r < 2; r++)
5742
 
      {
5743
 
        for (unsigned int s = 1; s < 3 - r; s++)
5744
 
        {
5745
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
5746
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5747
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
5748
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
5749
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
5750
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
5751
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
5752
 
        }// end loop over 's'
5753
 
      }// end loop over 'r'
5754
 
      for (unsigned int r = 0; r < 3; r++)
5755
 
      {
5756
 
        for (unsigned int s = 0; s < 3 - r; s++)
5757
 
        {
5758
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
5759
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
5760
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
5761
 
        }// end loop over 's'
5762
 
      }// end loop over 'r'
5763
 
      for (unsigned int r = 0; r < 2; r++)
5764
 
      {
5765
 
        for (unsigned int s = 0; s < 2 - r; s++)
5766
 
        {
5767
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
5768
 
          {
5769
 
            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;
5770
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5771
 
            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;
5772
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
5773
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
5774
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
5775
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
5776
 
          }// end loop over 't'
5777
 
        }// end loop over 's'
5778
 
      }// end loop over 'r'
5779
 
      for (unsigned int r = 0; r < 4; r++)
5780
 
      {
5781
 
        for (unsigned int s = 0; s < 4 - r; s++)
5782
 
        {
5783
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
5784
 
          {
5785
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
5786
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
5787
 
          }// end loop over 't'
5788
 
        }// end loop over 's'
5789
 
      }// end loop over 'r'
 
4792
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
4793
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
4794
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
4795
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
4796
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
4797
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
4798
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
4799
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
4800
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
4801
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
4802
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
4803
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
4804
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
4805
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
4806
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
4807
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
4808
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
4809
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
4810
      basisvalues[0] *= std::sqrt(0.75);
 
4811
      basisvalues[3] *= std::sqrt(1.25);
 
4812
      basisvalues[9] *= std::sqrt(1.75);
 
4813
      basisvalues[19] *= std::sqrt(2.25);
 
4814
      basisvalues[2] *= std::sqrt(2.5);
 
4815
      basisvalues[8] *= std::sqrt(3.5);
 
4816
      basisvalues[18] *= std::sqrt(4.5);
 
4817
      basisvalues[7] *= std::sqrt(5.25);
 
4818
      basisvalues[17] *= std::sqrt(6.75);
 
4819
      basisvalues[16] *= std::sqrt(9.0);
 
4820
      basisvalues[1] *= std::sqrt(7.5);
 
4821
      basisvalues[6] *= std::sqrt(10.5);
 
4822
      basisvalues[15] *= std::sqrt(13.5);
 
4823
      basisvalues[5] *= std::sqrt(15.75);
 
4824
      basisvalues[14] *= std::sqrt(20.25);
 
4825
      basisvalues[13] *= std::sqrt(27.0);
 
4826
      basisvalues[4] *= std::sqrt(26.25);
 
4827
      basisvalues[12] *= std::sqrt(33.75);
 
4828
      basisvalues[11] *= std::sqrt(45.0);
 
4829
      basisvalues[10] *= std::sqrt(63.0);
5790
4830
      
5791
4831
      // Table(s) of coefficients.
5792
4832
      static const double coefficients0[20] = \
6028
5068
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
6029
5069
      
6030
5070
      // Declare helper variables.
6031
 
      unsigned int rr = 0;
6032
 
      unsigned int ss = 0;
6033
 
      unsigned int tt = 0;
6034
 
      double tmp5 = 0.0;
6035
 
      double tmp6 = 0.0;
6036
 
      double tmp7 = 0.0;
6037
5071
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
6038
5072
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
6039
5073
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
6043
5077
      // Compute basisvalues.
6044
5078
      basisvalues[0] = 1.0;
6045
5079
      basisvalues[1] = tmp0;
6046
 
      for (unsigned int r = 1; r < 3; r++)
6047
 
      {
6048
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6049
 
        ss = r*(r + 1)*(r + 2)/6;
6050
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6051
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
6052
 
      }// end loop over 'r'
6053
 
      for (unsigned int r = 0; r < 3; r++)
6054
 
      {
6055
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6056
 
        ss = r*(r + 1)*(r + 2)/6;
6057
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
6058
 
      }// end loop over 'r'
6059
 
      for (unsigned int r = 0; r < 2; r++)
6060
 
      {
6061
 
        for (unsigned int s = 1; s < 3 - r; s++)
6062
 
        {
6063
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6064
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6065
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6066
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
6067
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
6068
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
6069
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6070
 
        }// end loop over 's'
6071
 
      }// end loop over 'r'
6072
 
      for (unsigned int r = 0; r < 3; r++)
6073
 
      {
6074
 
        for (unsigned int s = 0; s < 3 - r; s++)
6075
 
        {
6076
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6077
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6078
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
6079
 
        }// end loop over 's'
6080
 
      }// end loop over 'r'
6081
 
      for (unsigned int r = 0; r < 2; r++)
6082
 
      {
6083
 
        for (unsigned int s = 0; s < 2 - r; s++)
6084
 
        {
6085
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
6086
 
          {
6087
 
            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;
6088
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6089
 
            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;
6090
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
6091
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
6092
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
6093
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6094
 
          }// end loop over 't'
6095
 
        }// end loop over 's'
6096
 
      }// end loop over 'r'
6097
 
      for (unsigned int r = 0; r < 4; r++)
6098
 
      {
6099
 
        for (unsigned int s = 0; s < 4 - r; s++)
6100
 
        {
6101
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
6102
 
          {
6103
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6104
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
6105
 
          }// end loop over 't'
6106
 
        }// end loop over 's'
6107
 
      }// end loop over 'r'
 
5080
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
5081
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
5082
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
5083
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
5084
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
5085
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
5086
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
5087
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
5088
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
5089
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
5090
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
5091
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
5092
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
5093
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
5094
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
5095
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
5096
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
5097
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
5098
      basisvalues[0] *= std::sqrt(0.75);
 
5099
      basisvalues[3] *= std::sqrt(1.25);
 
5100
      basisvalues[9] *= std::sqrt(1.75);
 
5101
      basisvalues[19] *= std::sqrt(2.25);
 
5102
      basisvalues[2] *= std::sqrt(2.5);
 
5103
      basisvalues[8] *= std::sqrt(3.5);
 
5104
      basisvalues[18] *= std::sqrt(4.5);
 
5105
      basisvalues[7] *= std::sqrt(5.25);
 
5106
      basisvalues[17] *= std::sqrt(6.75);
 
5107
      basisvalues[16] *= std::sqrt(9.0);
 
5108
      basisvalues[1] *= std::sqrt(7.5);
 
5109
      basisvalues[6] *= std::sqrt(10.5);
 
5110
      basisvalues[15] *= std::sqrt(13.5);
 
5111
      basisvalues[5] *= std::sqrt(15.75);
 
5112
      basisvalues[14] *= std::sqrt(20.25);
 
5113
      basisvalues[13] *= std::sqrt(27.0);
 
5114
      basisvalues[4] *= std::sqrt(26.25);
 
5115
      basisvalues[12] *= std::sqrt(33.75);
 
5116
      basisvalues[11] *= std::sqrt(45.0);
 
5117
      basisvalues[10] *= std::sqrt(63.0);
6108
5118
      
6109
5119
      // Table(s) of coefficients.
6110
5120
      static const double coefficients0[20] = \
6346
5356
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
6347
5357
      
6348
5358
      // Declare helper variables.
6349
 
      unsigned int rr = 0;
6350
 
      unsigned int ss = 0;
6351
 
      unsigned int tt = 0;
6352
 
      double tmp5 = 0.0;
6353
 
      double tmp6 = 0.0;
6354
 
      double tmp7 = 0.0;
6355
5359
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
6356
5360
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
6357
5361
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
6361
5365
      // Compute basisvalues.
6362
5366
      basisvalues[0] = 1.0;
6363
5367
      basisvalues[1] = tmp0;
6364
 
      for (unsigned int r = 1; r < 3; r++)
6365
 
      {
6366
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6367
 
        ss = r*(r + 1)*(r + 2)/6;
6368
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6369
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
6370
 
      }// end loop over 'r'
6371
 
      for (unsigned int r = 0; r < 3; r++)
6372
 
      {
6373
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6374
 
        ss = r*(r + 1)*(r + 2)/6;
6375
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
6376
 
      }// end loop over 'r'
6377
 
      for (unsigned int r = 0; r < 2; r++)
6378
 
      {
6379
 
        for (unsigned int s = 1; s < 3 - r; s++)
6380
 
        {
6381
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6382
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6383
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6384
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
6385
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
6386
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
6387
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6388
 
        }// end loop over 's'
6389
 
      }// end loop over 'r'
6390
 
      for (unsigned int r = 0; r < 3; r++)
6391
 
      {
6392
 
        for (unsigned int s = 0; s < 3 - r; s++)
6393
 
        {
6394
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6395
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6396
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
6397
 
        }// end loop over 's'
6398
 
      }// end loop over 'r'
6399
 
      for (unsigned int r = 0; r < 2; r++)
6400
 
      {
6401
 
        for (unsigned int s = 0; s < 2 - r; s++)
6402
 
        {
6403
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
6404
 
          {
6405
 
            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;
6406
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6407
 
            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;
6408
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
6409
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
6410
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
6411
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6412
 
          }// end loop over 't'
6413
 
        }// end loop over 's'
6414
 
      }// end loop over 'r'
6415
 
      for (unsigned int r = 0; r < 4; r++)
6416
 
      {
6417
 
        for (unsigned int s = 0; s < 4 - r; s++)
6418
 
        {
6419
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
6420
 
          {
6421
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6422
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
6423
 
          }// end loop over 't'
6424
 
        }// end loop over 's'
6425
 
      }// end loop over 'r'
 
5368
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
5369
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
5370
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
5371
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
5372
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
5373
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
5374
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
5375
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
5376
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
5377
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
5378
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
5379
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
5380
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
5381
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
5382
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
5383
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
5384
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
5385
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
5386
      basisvalues[0] *= std::sqrt(0.75);
 
5387
      basisvalues[3] *= std::sqrt(1.25);
 
5388
      basisvalues[9] *= std::sqrt(1.75);
 
5389
      basisvalues[19] *= std::sqrt(2.25);
 
5390
      basisvalues[2] *= std::sqrt(2.5);
 
5391
      basisvalues[8] *= std::sqrt(3.5);
 
5392
      basisvalues[18] *= std::sqrt(4.5);
 
5393
      basisvalues[7] *= std::sqrt(5.25);
 
5394
      basisvalues[17] *= std::sqrt(6.75);
 
5395
      basisvalues[16] *= std::sqrt(9.0);
 
5396
      basisvalues[1] *= std::sqrt(7.5);
 
5397
      basisvalues[6] *= std::sqrt(10.5);
 
5398
      basisvalues[15] *= std::sqrt(13.5);
 
5399
      basisvalues[5] *= std::sqrt(15.75);
 
5400
      basisvalues[14] *= std::sqrt(20.25);
 
5401
      basisvalues[13] *= std::sqrt(27.0);
 
5402
      basisvalues[4] *= std::sqrt(26.25);
 
5403
      basisvalues[12] *= std::sqrt(33.75);
 
5404
      basisvalues[11] *= std::sqrt(45.0);
 
5405
      basisvalues[10] *= std::sqrt(63.0);
6426
5406
      
6427
5407
      // Table(s) of coefficients.
6428
5408
      static const double coefficients0[20] = \
6664
5644
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
6665
5645
      
6666
5646
      // Declare helper variables.
6667
 
      unsigned int rr = 0;
6668
 
      unsigned int ss = 0;
6669
 
      unsigned int tt = 0;
6670
 
      double tmp5 = 0.0;
6671
 
      double tmp6 = 0.0;
6672
 
      double tmp7 = 0.0;
6673
5647
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
6674
5648
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
6675
5649
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
6679
5653
      // Compute basisvalues.
6680
5654
      basisvalues[0] = 1.0;
6681
5655
      basisvalues[1] = tmp0;
6682
 
      for (unsigned int r = 1; r < 3; r++)
6683
 
      {
6684
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
6685
 
        ss = r*(r + 1)*(r + 2)/6;
6686
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
6687
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
6688
 
      }// end loop over 'r'
6689
 
      for (unsigned int r = 0; r < 3; r++)
6690
 
      {
6691
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
6692
 
        ss = r*(r + 1)*(r + 2)/6;
6693
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
6694
 
      }// end loop over 'r'
6695
 
      for (unsigned int r = 0; r < 2; r++)
6696
 
      {
6697
 
        for (unsigned int s = 1; s < 3 - r; s++)
6698
 
        {
6699
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
6700
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6701
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
6702
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
6703
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
6704
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
6705
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
6706
 
        }// end loop over 's'
6707
 
      }// end loop over 'r'
6708
 
      for (unsigned int r = 0; r < 3; r++)
6709
 
      {
6710
 
        for (unsigned int s = 0; s < 3 - r; s++)
6711
 
        {
6712
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
6713
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
6714
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
6715
 
        }// end loop over 's'
6716
 
      }// end loop over 'r'
6717
 
      for (unsigned int r = 0; r < 2; r++)
6718
 
      {
6719
 
        for (unsigned int s = 0; s < 2 - r; s++)
6720
 
        {
6721
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
6722
 
          {
6723
 
            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;
6724
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6725
 
            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;
6726
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
6727
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
6728
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
6729
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
6730
 
          }// end loop over 't'
6731
 
        }// end loop over 's'
6732
 
      }// end loop over 'r'
6733
 
      for (unsigned int r = 0; r < 4; r++)
6734
 
      {
6735
 
        for (unsigned int s = 0; s < 4 - r; s++)
6736
 
        {
6737
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
6738
 
          {
6739
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
6740
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
6741
 
          }// end loop over 't'
6742
 
        }// end loop over 's'
6743
 
      }// end loop over 'r'
 
5656
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
5657
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
5658
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
5659
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
5660
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
5661
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
5662
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
5663
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
5664
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
5665
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
5666
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
5667
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
5668
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
5669
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
5670
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
5671
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
5672
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
5673
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
5674
      basisvalues[0] *= std::sqrt(0.75);
 
5675
      basisvalues[3] *= std::sqrt(1.25);
 
5676
      basisvalues[9] *= std::sqrt(1.75);
 
5677
      basisvalues[19] *= std::sqrt(2.25);
 
5678
      basisvalues[2] *= std::sqrt(2.5);
 
5679
      basisvalues[8] *= std::sqrt(3.5);
 
5680
      basisvalues[18] *= std::sqrt(4.5);
 
5681
      basisvalues[7] *= std::sqrt(5.25);
 
5682
      basisvalues[17] *= std::sqrt(6.75);
 
5683
      basisvalues[16] *= std::sqrt(9.0);
 
5684
      basisvalues[1] *= std::sqrt(7.5);
 
5685
      basisvalues[6] *= std::sqrt(10.5);
 
5686
      basisvalues[15] *= std::sqrt(13.5);
 
5687
      basisvalues[5] *= std::sqrt(15.75);
 
5688
      basisvalues[14] *= std::sqrt(20.25);
 
5689
      basisvalues[13] *= std::sqrt(27.0);
 
5690
      basisvalues[4] *= std::sqrt(26.25);
 
5691
      basisvalues[12] *= std::sqrt(33.75);
 
5692
      basisvalues[11] *= std::sqrt(45.0);
 
5693
      basisvalues[10] *= std::sqrt(63.0);
6744
5694
      
6745
5695
      // Table(s) of coefficients.
6746
5696
      static const double coefficients0[20] = \
6982
5932
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
6983
5933
      
6984
5934
      // Declare helper variables.
6985
 
      unsigned int rr = 0;
6986
 
      unsigned int ss = 0;
6987
 
      unsigned int tt = 0;
6988
 
      double tmp5 = 0.0;
6989
 
      double tmp6 = 0.0;
6990
 
      double tmp7 = 0.0;
6991
5935
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
6992
5936
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
6993
5937
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
6997
5941
      // Compute basisvalues.
6998
5942
      basisvalues[0] = 1.0;
6999
5943
      basisvalues[1] = tmp0;
7000
 
      for (unsigned int r = 1; r < 3; r++)
7001
 
      {
7002
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7003
 
        ss = r*(r + 1)*(r + 2)/6;
7004
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7005
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
7006
 
      }// end loop over 'r'
7007
 
      for (unsigned int r = 0; r < 3; r++)
7008
 
      {
7009
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7010
 
        ss = r*(r + 1)*(r + 2)/6;
7011
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
7012
 
      }// end loop over 'r'
7013
 
      for (unsigned int r = 0; r < 2; r++)
7014
 
      {
7015
 
        for (unsigned int s = 1; s < 3 - r; s++)
7016
 
        {
7017
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7018
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7019
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7020
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
7021
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7022
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7023
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7024
 
        }// end loop over 's'
7025
 
      }// end loop over 'r'
7026
 
      for (unsigned int r = 0; r < 3; r++)
7027
 
      {
7028
 
        for (unsigned int s = 0; s < 3 - r; s++)
7029
 
        {
7030
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7031
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7032
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
7033
 
        }// end loop over 's'
7034
 
      }// end loop over 'r'
7035
 
      for (unsigned int r = 0; r < 2; r++)
7036
 
      {
7037
 
        for (unsigned int s = 0; s < 2 - r; s++)
7038
 
        {
7039
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
7040
 
          {
7041
 
            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;
7042
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7043
 
            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;
7044
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
7045
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
7046
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
7047
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7048
 
          }// end loop over 't'
7049
 
        }// end loop over 's'
7050
 
      }// end loop over 'r'
7051
 
      for (unsigned int r = 0; r < 4; r++)
7052
 
      {
7053
 
        for (unsigned int s = 0; s < 4 - r; s++)
7054
 
        {
7055
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
7056
 
          {
7057
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7058
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
7059
 
          }// end loop over 't'
7060
 
        }// end loop over 's'
7061
 
      }// end loop over 'r'
 
5944
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
5945
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
5946
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
5947
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
5948
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
5949
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
5950
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
5951
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
5952
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
5953
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
5954
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
5955
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
5956
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
5957
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
5958
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
5959
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
5960
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
5961
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
5962
      basisvalues[0] *= std::sqrt(0.75);
 
5963
      basisvalues[3] *= std::sqrt(1.25);
 
5964
      basisvalues[9] *= std::sqrt(1.75);
 
5965
      basisvalues[19] *= std::sqrt(2.25);
 
5966
      basisvalues[2] *= std::sqrt(2.5);
 
5967
      basisvalues[8] *= std::sqrt(3.5);
 
5968
      basisvalues[18] *= std::sqrt(4.5);
 
5969
      basisvalues[7] *= std::sqrt(5.25);
 
5970
      basisvalues[17] *= std::sqrt(6.75);
 
5971
      basisvalues[16] *= std::sqrt(9.0);
 
5972
      basisvalues[1] *= std::sqrt(7.5);
 
5973
      basisvalues[6] *= std::sqrt(10.5);
 
5974
      basisvalues[15] *= std::sqrt(13.5);
 
5975
      basisvalues[5] *= std::sqrt(15.75);
 
5976
      basisvalues[14] *= std::sqrt(20.25);
 
5977
      basisvalues[13] *= std::sqrt(27.0);
 
5978
      basisvalues[4] *= std::sqrt(26.25);
 
5979
      basisvalues[12] *= std::sqrt(33.75);
 
5980
      basisvalues[11] *= std::sqrt(45.0);
 
5981
      basisvalues[10] *= std::sqrt(63.0);
7062
5982
      
7063
5983
      // Table(s) of coefficients.
7064
5984
      static const double coefficients0[20] = \
7300
6220
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
7301
6221
      
7302
6222
      // Declare helper variables.
7303
 
      unsigned int rr = 0;
7304
 
      unsigned int ss = 0;
7305
 
      unsigned int tt = 0;
7306
 
      double tmp5 = 0.0;
7307
 
      double tmp6 = 0.0;
7308
 
      double tmp7 = 0.0;
7309
6223
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
7310
6224
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
7311
6225
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
7315
6229
      // Compute basisvalues.
7316
6230
      basisvalues[0] = 1.0;
7317
6231
      basisvalues[1] = tmp0;
7318
 
      for (unsigned int r = 1; r < 3; r++)
7319
 
      {
7320
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7321
 
        ss = r*(r + 1)*(r + 2)/6;
7322
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7323
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
7324
 
      }// end loop over 'r'
7325
 
      for (unsigned int r = 0; r < 3; r++)
7326
 
      {
7327
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7328
 
        ss = r*(r + 1)*(r + 2)/6;
7329
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
7330
 
      }// end loop over 'r'
7331
 
      for (unsigned int r = 0; r < 2; r++)
7332
 
      {
7333
 
        for (unsigned int s = 1; s < 3 - r; s++)
7334
 
        {
7335
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7336
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7337
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7338
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
7339
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7340
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7341
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7342
 
        }// end loop over 's'
7343
 
      }// end loop over 'r'
7344
 
      for (unsigned int r = 0; r < 3; r++)
7345
 
      {
7346
 
        for (unsigned int s = 0; s < 3 - r; s++)
7347
 
        {
7348
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7349
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7350
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
7351
 
        }// end loop over 's'
7352
 
      }// end loop over 'r'
7353
 
      for (unsigned int r = 0; r < 2; r++)
7354
 
      {
7355
 
        for (unsigned int s = 0; s < 2 - r; s++)
7356
 
        {
7357
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
7358
 
          {
7359
 
            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;
7360
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7361
 
            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;
7362
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
7363
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
7364
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
7365
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7366
 
          }// end loop over 't'
7367
 
        }// end loop over 's'
7368
 
      }// end loop over 'r'
7369
 
      for (unsigned int r = 0; r < 4; r++)
7370
 
      {
7371
 
        for (unsigned int s = 0; s < 4 - r; s++)
7372
 
        {
7373
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
7374
 
          {
7375
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7376
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
7377
 
          }// end loop over 't'
7378
 
        }// end loop over 's'
7379
 
      }// end loop over 'r'
 
6232
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
6233
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
6234
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
6235
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
6236
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
6237
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
6238
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
6239
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
6240
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
6241
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
6242
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
6243
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
6244
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
6245
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
6246
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
6247
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
6248
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
6249
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
6250
      basisvalues[0] *= std::sqrt(0.75);
 
6251
      basisvalues[3] *= std::sqrt(1.25);
 
6252
      basisvalues[9] *= std::sqrt(1.75);
 
6253
      basisvalues[19] *= std::sqrt(2.25);
 
6254
      basisvalues[2] *= std::sqrt(2.5);
 
6255
      basisvalues[8] *= std::sqrt(3.5);
 
6256
      basisvalues[18] *= std::sqrt(4.5);
 
6257
      basisvalues[7] *= std::sqrt(5.25);
 
6258
      basisvalues[17] *= std::sqrt(6.75);
 
6259
      basisvalues[16] *= std::sqrt(9.0);
 
6260
      basisvalues[1] *= std::sqrt(7.5);
 
6261
      basisvalues[6] *= std::sqrt(10.5);
 
6262
      basisvalues[15] *= std::sqrt(13.5);
 
6263
      basisvalues[5] *= std::sqrt(15.75);
 
6264
      basisvalues[14] *= std::sqrt(20.25);
 
6265
      basisvalues[13] *= std::sqrt(27.0);
 
6266
      basisvalues[4] *= std::sqrt(26.25);
 
6267
      basisvalues[12] *= std::sqrt(33.75);
 
6268
      basisvalues[11] *= std::sqrt(45.0);
 
6269
      basisvalues[10] *= std::sqrt(63.0);
7380
6270
      
7381
6271
      // Table(s) of coefficients.
7382
6272
      static const double coefficients0[20] = \
7618
6508
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
7619
6509
      
7620
6510
      // Declare helper variables.
7621
 
      unsigned int rr = 0;
7622
 
      unsigned int ss = 0;
7623
 
      unsigned int tt = 0;
7624
 
      double tmp5 = 0.0;
7625
 
      double tmp6 = 0.0;
7626
 
      double tmp7 = 0.0;
7627
6511
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
7628
6512
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
7629
6513
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
7633
6517
      // Compute basisvalues.
7634
6518
      basisvalues[0] = 1.0;
7635
6519
      basisvalues[1] = tmp0;
7636
 
      for (unsigned int r = 1; r < 3; r++)
7637
 
      {
7638
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7639
 
        ss = r*(r + 1)*(r + 2)/6;
7640
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7641
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
7642
 
      }// end loop over 'r'
7643
 
      for (unsigned int r = 0; r < 3; r++)
7644
 
      {
7645
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7646
 
        ss = r*(r + 1)*(r + 2)/6;
7647
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
7648
 
      }// end loop over 'r'
7649
 
      for (unsigned int r = 0; r < 2; r++)
7650
 
      {
7651
 
        for (unsigned int s = 1; s < 3 - r; s++)
7652
 
        {
7653
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7654
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7655
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7656
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
7657
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7658
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7659
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7660
 
        }// end loop over 's'
7661
 
      }// end loop over 'r'
7662
 
      for (unsigned int r = 0; r < 3; r++)
7663
 
      {
7664
 
        for (unsigned int s = 0; s < 3 - r; s++)
7665
 
        {
7666
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7667
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7668
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
7669
 
        }// end loop over 's'
7670
 
      }// end loop over 'r'
7671
 
      for (unsigned int r = 0; r < 2; r++)
7672
 
      {
7673
 
        for (unsigned int s = 0; s < 2 - r; s++)
7674
 
        {
7675
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
7676
 
          {
7677
 
            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;
7678
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7679
 
            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;
7680
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
7681
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
7682
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
7683
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
7684
 
          }// end loop over 't'
7685
 
        }// end loop over 's'
7686
 
      }// end loop over 'r'
7687
 
      for (unsigned int r = 0; r < 4; r++)
7688
 
      {
7689
 
        for (unsigned int s = 0; s < 4 - r; s++)
7690
 
        {
7691
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
7692
 
          {
7693
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7694
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
7695
 
          }// end loop over 't'
7696
 
        }// end loop over 's'
7697
 
      }// end loop over 'r'
 
6520
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
6521
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
6522
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
6523
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
6524
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
6525
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
6526
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
6527
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
6528
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
6529
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
6530
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
6531
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
6532
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
6533
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
6534
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
6535
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
6536
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
6537
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
6538
      basisvalues[0] *= std::sqrt(0.75);
 
6539
      basisvalues[3] *= std::sqrt(1.25);
 
6540
      basisvalues[9] *= std::sqrt(1.75);
 
6541
      basisvalues[19] *= std::sqrt(2.25);
 
6542
      basisvalues[2] *= std::sqrt(2.5);
 
6543
      basisvalues[8] *= std::sqrt(3.5);
 
6544
      basisvalues[18] *= std::sqrt(4.5);
 
6545
      basisvalues[7] *= std::sqrt(5.25);
 
6546
      basisvalues[17] *= std::sqrt(6.75);
 
6547
      basisvalues[16] *= std::sqrt(9.0);
 
6548
      basisvalues[1] *= std::sqrt(7.5);
 
6549
      basisvalues[6] *= std::sqrt(10.5);
 
6550
      basisvalues[15] *= std::sqrt(13.5);
 
6551
      basisvalues[5] *= std::sqrt(15.75);
 
6552
      basisvalues[14] *= std::sqrt(20.25);
 
6553
      basisvalues[13] *= std::sqrt(27.0);
 
6554
      basisvalues[4] *= std::sqrt(26.25);
 
6555
      basisvalues[12] *= std::sqrt(33.75);
 
6556
      basisvalues[11] *= std::sqrt(45.0);
 
6557
      basisvalues[10] *= std::sqrt(63.0);
7698
6558
      
7699
6559
      // Table(s) of coefficients.
7700
6560
      static const double coefficients0[20] = \
7936
6796
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
7937
6797
      
7938
6798
      // Declare helper variables.
7939
 
      unsigned int rr = 0;
7940
 
      unsigned int ss = 0;
7941
 
      unsigned int tt = 0;
7942
 
      double tmp5 = 0.0;
7943
 
      double tmp6 = 0.0;
7944
 
      double tmp7 = 0.0;
7945
6799
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
7946
6800
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
7947
6801
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
7951
6805
      // Compute basisvalues.
7952
6806
      basisvalues[0] = 1.0;
7953
6807
      basisvalues[1] = tmp0;
7954
 
      for (unsigned int r = 1; r < 3; r++)
7955
 
      {
7956
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
7957
 
        ss = r*(r + 1)*(r + 2)/6;
7958
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
7959
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
7960
 
      }// end loop over 'r'
7961
 
      for (unsigned int r = 0; r < 3; r++)
7962
 
      {
7963
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
7964
 
        ss = r*(r + 1)*(r + 2)/6;
7965
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
7966
 
      }// end loop over 'r'
7967
 
      for (unsigned int r = 0; r < 2; r++)
7968
 
      {
7969
 
        for (unsigned int s = 1; s < 3 - r; s++)
7970
 
        {
7971
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
7972
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7973
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
7974
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
7975
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7976
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
7977
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
7978
 
        }// end loop over 's'
7979
 
      }// end loop over 'r'
7980
 
      for (unsigned int r = 0; r < 3; r++)
7981
 
      {
7982
 
        for (unsigned int s = 0; s < 3 - r; s++)
7983
 
        {
7984
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
7985
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
7986
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
7987
 
        }// end loop over 's'
7988
 
      }// end loop over 'r'
7989
 
      for (unsigned int r = 0; r < 2; r++)
7990
 
      {
7991
 
        for (unsigned int s = 0; s < 2 - r; s++)
7992
 
        {
7993
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
7994
 
          {
7995
 
            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;
7996
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
7997
 
            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;
7998
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
7999
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
8000
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
8001
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
8002
 
          }// end loop over 't'
8003
 
        }// end loop over 's'
8004
 
      }// end loop over 'r'
8005
 
      for (unsigned int r = 0; r < 4; r++)
8006
 
      {
8007
 
        for (unsigned int s = 0; s < 4 - r; s++)
8008
 
        {
8009
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
8010
 
          {
8011
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8012
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
8013
 
          }// end loop over 't'
8014
 
        }// end loop over 's'
8015
 
      }// end loop over 'r'
 
6808
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
6809
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
6810
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
6811
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
6812
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
6813
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
6814
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
6815
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
6816
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
6817
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
6818
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
6819
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
6820
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
6821
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
6822
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
6823
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
6824
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
6825
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
6826
      basisvalues[0] *= std::sqrt(0.75);
 
6827
      basisvalues[3] *= std::sqrt(1.25);
 
6828
      basisvalues[9] *= std::sqrt(1.75);
 
6829
      basisvalues[19] *= std::sqrt(2.25);
 
6830
      basisvalues[2] *= std::sqrt(2.5);
 
6831
      basisvalues[8] *= std::sqrt(3.5);
 
6832
      basisvalues[18] *= std::sqrt(4.5);
 
6833
      basisvalues[7] *= std::sqrt(5.25);
 
6834
      basisvalues[17] *= std::sqrt(6.75);
 
6835
      basisvalues[16] *= std::sqrt(9.0);
 
6836
      basisvalues[1] *= std::sqrt(7.5);
 
6837
      basisvalues[6] *= std::sqrt(10.5);
 
6838
      basisvalues[15] *= std::sqrt(13.5);
 
6839
      basisvalues[5] *= std::sqrt(15.75);
 
6840
      basisvalues[14] *= std::sqrt(20.25);
 
6841
      basisvalues[13] *= std::sqrt(27.0);
 
6842
      basisvalues[4] *= std::sqrt(26.25);
 
6843
      basisvalues[12] *= std::sqrt(33.75);
 
6844
      basisvalues[11] *= std::sqrt(45.0);
 
6845
      basisvalues[10] *= std::sqrt(63.0);
8016
6846
      
8017
6847
      // Table(s) of coefficients.
8018
6848
      static const double coefficients0[20] = \
8254
7084
      double basisvalues[20] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
8255
7085
      
8256
7086
      // Declare helper variables.
8257
 
      unsigned int rr = 0;
8258
 
      unsigned int ss = 0;
8259
 
      unsigned int tt = 0;
8260
 
      double tmp5 = 0.0;
8261
 
      double tmp6 = 0.0;
8262
 
      double tmp7 = 0.0;
8263
7087
      double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
8264
7088
      double tmp1 = 0.25*(Y + Z)*(Y + Z);
8265
7089
      double tmp2 = 0.5*(1.0 + Z + 2.0*Y);
8269
7093
      // Compute basisvalues.
8270
7094
      basisvalues[0] = 1.0;
8271
7095
      basisvalues[1] = tmp0;
8272
 
      for (unsigned int r = 1; r < 3; r++)
8273
 
      {
8274
 
        rr = (r + 1)*((r + 1) + 1)*((r + 1) + 2)/6;
8275
 
        ss = r*(r + 1)*(r + 2)/6;
8276
 
        tt = (r - 1)*((r - 1) + 1)*((r - 1) + 2)/6;
8277
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*(1.0 + 2.0*r)/(1.0 + r) - basisvalues[tt]*tmp1*r/(1.0 + r));
8278
 
      }// end loop over 'r'
8279
 
      for (unsigned int r = 0; r < 3; r++)
8280
 
      {
8281
 
        rr = (r + 1)*(r + 1 + 1)*(r + 1 + 2)/6 + 1*(1 + 1)/2;
8282
 
        ss = r*(r + 1)*(r + 2)/6;
8283
 
        basisvalues[rr] = basisvalues[ss]*(r*(1.0 + Y) + (2.0 + Z + 3.0*Y)/2.0);
8284
 
      }// end loop over 'r'
8285
 
      for (unsigned int r = 0; r < 2; r++)
8286
 
      {
8287
 
        for (unsigned int s = 1; s < 3 - r; s++)
8288
 
        {
8289
 
          rr = (r + (s + 1))*(r + (s + 1) + 1)*(r + (s + 1) + 2)/6 + (s + 1)*((s + 1) + 1)/2;
8290
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8291
 
          tt = (r + (s - 1))*(r + (s - 1) + 1)*(r + (s - 1) + 2)/6 + (s - 1)*((s - 1) + 1)/2;
8292
 
          tmp5 = (2.0 + 2.0*r + 2.0*s)*(3.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + s)*(2.0 + s + 2.0*r));
8293
 
          tmp6 = (1.0 + 4.0*r*r + 4.0*r)*(2.0 + 2.0*r + 2.0*s)/(2.0*(1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
8294
 
          tmp7 = (1.0 + s + 2.0*r)*(3.0 + 2.0*r + 2.0*s)*s/((1.0 + 2.0*r + 2.0*s)*(1.0 + s)*(2.0 + s + 2.0*r));
8295
 
          basisvalues[rr] = (basisvalues[ss]*(tmp2*tmp5 + tmp3*tmp6) - basisvalues[tt]*tmp4*tmp7);
8296
 
        }// end loop over 's'
8297
 
      }// end loop over 'r'
8298
 
      for (unsigned int r = 0; r < 3; r++)
8299
 
      {
8300
 
        for (unsigned int s = 0; s < 3 - r; s++)
8301
 
        {
8302
 
          rr = (r + s + 1)*(r + s + 1 + 1)*(r + s + 1 + 2)/6 + (s + 1)*(s + 1 + 1)/2 + 1;
8303
 
          ss = (r + s)*(r + s + 1)*(r + s + 2)/6 + s*(s + 1)/2;
8304
 
          basisvalues[rr] = basisvalues[ss]*(1.0 + r + s + Z*(2.0 + r + s));
8305
 
        }// end loop over 's'
8306
 
      }// end loop over 'r'
8307
 
      for (unsigned int r = 0; r < 2; r++)
8308
 
      {
8309
 
        for (unsigned int s = 0; s < 2 - r; s++)
8310
 
        {
8311
 
          for (unsigned int t = 1; t < 3 - r - s; t++)
8312
 
          {
8313
 
            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;
8314
 
            ss = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8315
 
            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;
8316
 
            tmp5 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 2.0*r + 2.0*s + 2.0*t)/(2.0*(1.0 + t)*(3.0 + t + 2.0*r + 2.0*s));
8317
 
            tmp6 = (3.0 + 2.0*r + 2.0*s + 2.0*t)*(4.0 + 4.0*r*r + 4.0*s*s + 8.0*r*s + 8.0*r + 8.0*s)/(2.0*(1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
8318
 
            tmp7 = (2.0 + t + 2.0*r + 2.0*s)*(4.0 + 2.0*r + 2.0*s + 2.0*t)*t/((1.0 + t)*(2.0 + 2.0*r + 2.0*s + 2.0*t)*(3.0 + t + 2.0*r + 2.0*s));
8319
 
            basisvalues[rr] = (basisvalues[ss]*(tmp6 + Z*tmp5) - basisvalues[tt]*tmp7);
8320
 
          }// end loop over 't'
8321
 
        }// end loop over 's'
8322
 
      }// end loop over 'r'
8323
 
      for (unsigned int r = 0; r < 4; r++)
8324
 
      {
8325
 
        for (unsigned int s = 0; s < 4 - r; s++)
8326
 
        {
8327
 
          for (unsigned int t = 0; t < 4 - r - s; t++)
8328
 
          {
8329
 
            rr = (r + s + t)*(r + s + t + 1)*(r + s + t + 2)/6 + (s + t)*(s + t + 1)/2 + t;
8330
 
            basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s)*(1.5 + r + s + t));
8331
 
          }// end loop over 't'
8332
 
        }// end loop over 's'
8333
 
      }// end loop over 'r'
 
7096
      basisvalues[4] = 1.5*tmp0*basisvalues[1] - 0.5*tmp1*basisvalues[0];
 
7097
      basisvalues[10] = 1.6666667*tmp0*basisvalues[4] - 0.66666667*tmp1*basisvalues[1];
 
7098
      basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
 
7099
      basisvalues[5] = (0.5*(2.0 + 3.0*Y + Z) + 1.0*(1.0 + Y))*basisvalues[1];
 
7100
      basisvalues[11] = (0.5*(2.0 + 3.0*Y + Z) + 2.0*(1.0 + Y))*basisvalues[4];
 
7101
      basisvalues[7] = (1.6666667*tmp2 + 0.11111111*tmp3)*basisvalues[2] - 0.55555556*tmp4*basisvalues[0];
 
7102
      basisvalues[16] = (1.75*tmp2 + 0.05*tmp3)*basisvalues[7] - 0.7*tmp4*basisvalues[2];
 
7103
      basisvalues[13] = (2.1*tmp2 + 0.54*tmp3)*basisvalues[5] - 0.56*tmp4*basisvalues[1];
 
7104
      basisvalues[3] = (2.0*Z + 1.0)*basisvalues[0];
 
7105
      basisvalues[8] = (3.0*Z + 2.0)*basisvalues[2];
 
7106
      basisvalues[17] = (4.0*Z + 3.0)*basisvalues[7];
 
7107
      basisvalues[6] = (3.0*Z + 2.0)*basisvalues[1];
 
7108
      basisvalues[14] = (4.0*Z + 3.0)*basisvalues[5];
 
7109
      basisvalues[12] = (4.0*Z + 3.0)*basisvalues[4];
 
7110
      basisvalues[9] = basisvalues[3]*(0.3125 + 1.875*Z) - 0.5625*basisvalues[0];
 
7111
      basisvalues[19] = basisvalues[9]*(0.15555556 + 1.8666667*Z) - 0.71111111*basisvalues[3];
 
7112
      basisvalues[18] = basisvalues[8]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[2];
 
7113
      basisvalues[15] = basisvalues[6]*(0.77777778 + 2.3333333*Z) - 0.55555556*basisvalues[1];
 
7114
      basisvalues[0] *= std::sqrt(0.75);
 
7115
      basisvalues[3] *= std::sqrt(1.25);
 
7116
      basisvalues[9] *= std::sqrt(1.75);
 
7117
      basisvalues[19] *= std::sqrt(2.25);
 
7118
      basisvalues[2] *= std::sqrt(2.5);
 
7119
      basisvalues[8] *= std::sqrt(3.5);
 
7120
      basisvalues[18] *= std::sqrt(4.5);
 
7121
      basisvalues[7] *= std::sqrt(5.25);
 
7122
      basisvalues[17] *= std::sqrt(6.75);
 
7123
      basisvalues[16] *= std::sqrt(9.0);
 
7124
      basisvalues[1] *= std::sqrt(7.5);
 
7125
      basisvalues[6] *= std::sqrt(10.5);
 
7126
      basisvalues[15] *= std::sqrt(13.5);
 
7127
      basisvalues[5] *= std::sqrt(15.75);
 
7128
      basisvalues[14] *= std::sqrt(20.25);
 
7129
      basisvalues[13] *= std::sqrt(27.0);
 
7130
      basisvalues[4] *= std::sqrt(26.25);
 
7131
      basisvalues[12] *= std::sqrt(33.75);
 
7132
      basisvalues[11] *= std::sqrt(45.0);
 
7133
      basisvalues[10] *= std::sqrt(63.0);
8334
7134
      
8335
7135
      // Table(s) of coefficients.
8336
7136
      static const double coefficients0[20] = \