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

« back to all changes in this revision

Viewing changes to test/regression/references/r_auto/Optimization.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
// 
130
130
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
131
131
      
132
132
      // Declare helper variables.
133
 
      unsigned int rr = 0;
134
 
      unsigned int ss = 0;
135
 
      unsigned int tt = 0;
136
 
      double tmp5 = 0.0;
137
 
      double tmp6 = 0.0;
138
 
      double tmp7 = 0.0;
139
133
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
140
134
      double tmp1 = (1.0 - Y)/2.0;
141
135
      double tmp2 = tmp1*tmp1;
143
137
      // Compute basisvalues.
144
138
      basisvalues[0] = 1.0;
145
139
      basisvalues[1] = tmp0;
146
 
      for (unsigned int r = 1; r < 3; r++)
147
 
      {
148
 
        rr = (r + 1)*((r + 1) + 1)/2;
149
 
        ss = r*(r + 1)/2;
150
 
        tt = (r - 1)*((r - 1) + 1)/2;
151
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
152
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
153
 
      }// end loop over 'r'
154
 
      for (unsigned int r = 0; r < 3; r++)
155
 
      {
156
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
157
 
        ss = r*(r + 1)/2;
158
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
159
 
      }// end loop over 'r'
160
 
      for (unsigned int r = 0; r < 2; r++)
161
 
      {
162
 
        for (unsigned int s = 1; s < 3 - r; s++)
163
 
        {
164
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
165
 
          ss = (r + s)*(r + s + 1)/2 + s;
166
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
167
 
          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));
168
 
          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));
169
 
          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));
170
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
171
 
        }// end loop over 's'
172
 
      }// end loop over 'r'
173
 
      for (unsigned int r = 0; r < 4; r++)
174
 
      {
175
 
        for (unsigned int s = 0; s < 4 - r; s++)
176
 
        {
177
 
          rr = (r + s)*(r + s + 1)/2 + s;
178
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
179
 
        }// end loop over 's'
180
 
      }// end loop over 'r'
 
140
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
141
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
142
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
143
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
144
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
145
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
146
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
147
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
148
      basisvalues[0] *= std::sqrt(0.5);
 
149
      basisvalues[2] *= std::sqrt(1.0);
 
150
      basisvalues[5] *= std::sqrt(1.5);
 
151
      basisvalues[9] *= std::sqrt(2.0);
 
152
      basisvalues[1] *= std::sqrt(3.0);
 
153
      basisvalues[4] *= std::sqrt(4.5);
 
154
      basisvalues[8] *= std::sqrt(6.0);
 
155
      basisvalues[3] *= std::sqrt(7.5);
 
156
      basisvalues[7] *= std::sqrt(10.0);
 
157
      basisvalues[6] *= std::sqrt(14.0);
181
158
      
182
159
      // Table(s) of coefficients.
183
160
      static const double coefficients0[10] = \
197
174
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
198
175
      
199
176
      // Declare helper variables.
200
 
      unsigned int rr = 0;
201
 
      unsigned int ss = 0;
202
 
      unsigned int tt = 0;
203
 
      double tmp5 = 0.0;
204
 
      double tmp6 = 0.0;
205
 
      double tmp7 = 0.0;
206
177
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
207
178
      double tmp1 = (1.0 - Y)/2.0;
208
179
      double tmp2 = tmp1*tmp1;
210
181
      // Compute basisvalues.
211
182
      basisvalues[0] = 1.0;
212
183
      basisvalues[1] = tmp0;
213
 
      for (unsigned int r = 1; r < 3; r++)
214
 
      {
215
 
        rr = (r + 1)*((r + 1) + 1)/2;
216
 
        ss = r*(r + 1)/2;
217
 
        tt = (r - 1)*((r - 1) + 1)/2;
218
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
219
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
220
 
      }// end loop over 'r'
221
 
      for (unsigned int r = 0; r < 3; r++)
222
 
      {
223
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
224
 
        ss = r*(r + 1)/2;
225
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
226
 
      }// end loop over 'r'
227
 
      for (unsigned int r = 0; r < 2; r++)
228
 
      {
229
 
        for (unsigned int s = 1; s < 3 - r; s++)
230
 
        {
231
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
232
 
          ss = (r + s)*(r + s + 1)/2 + s;
233
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
234
 
          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));
235
 
          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));
236
 
          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));
237
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
238
 
        }// end loop over 's'
239
 
      }// end loop over 'r'
240
 
      for (unsigned int r = 0; r < 4; r++)
241
 
      {
242
 
        for (unsigned int s = 0; s < 4 - r; s++)
243
 
        {
244
 
          rr = (r + s)*(r + s + 1)/2 + s;
245
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
246
 
        }// end loop over 's'
247
 
      }// end loop over 'r'
 
184
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
185
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
186
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
187
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
188
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
189
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
190
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
191
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
192
      basisvalues[0] *= std::sqrt(0.5);
 
193
      basisvalues[2] *= std::sqrt(1.0);
 
194
      basisvalues[5] *= std::sqrt(1.5);
 
195
      basisvalues[9] *= std::sqrt(2.0);
 
196
      basisvalues[1] *= std::sqrt(3.0);
 
197
      basisvalues[4] *= std::sqrt(4.5);
 
198
      basisvalues[8] *= std::sqrt(6.0);
 
199
      basisvalues[3] *= std::sqrt(7.5);
 
200
      basisvalues[7] *= std::sqrt(10.0);
 
201
      basisvalues[6] *= std::sqrt(14.0);
248
202
      
249
203
      // Table(s) of coefficients.
250
204
      static const double coefficients0[10] = \
264
218
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
265
219
      
266
220
      // Declare helper variables.
267
 
      unsigned int rr = 0;
268
 
      unsigned int ss = 0;
269
 
      unsigned int tt = 0;
270
 
      double tmp5 = 0.0;
271
 
      double tmp6 = 0.0;
272
 
      double tmp7 = 0.0;
273
221
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
274
222
      double tmp1 = (1.0 - Y)/2.0;
275
223
      double tmp2 = tmp1*tmp1;
277
225
      // Compute basisvalues.
278
226
      basisvalues[0] = 1.0;
279
227
      basisvalues[1] = tmp0;
280
 
      for (unsigned int r = 1; r < 3; r++)
281
 
      {
282
 
        rr = (r + 1)*((r + 1) + 1)/2;
283
 
        ss = r*(r + 1)/2;
284
 
        tt = (r - 1)*((r - 1) + 1)/2;
285
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
286
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
287
 
      }// end loop over 'r'
288
 
      for (unsigned int r = 0; r < 3; r++)
289
 
      {
290
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
291
 
        ss = r*(r + 1)/2;
292
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
293
 
      }// end loop over 'r'
294
 
      for (unsigned int r = 0; r < 2; r++)
295
 
      {
296
 
        for (unsigned int s = 1; s < 3 - r; s++)
297
 
        {
298
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
299
 
          ss = (r + s)*(r + s + 1)/2 + s;
300
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
301
 
          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));
302
 
          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));
303
 
          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));
304
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
305
 
        }// end loop over 's'
306
 
      }// end loop over 'r'
307
 
      for (unsigned int r = 0; r < 4; r++)
308
 
      {
309
 
        for (unsigned int s = 0; s < 4 - r; s++)
310
 
        {
311
 
          rr = (r + s)*(r + s + 1)/2 + s;
312
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
313
 
        }// end loop over 's'
314
 
      }// end loop over 'r'
 
228
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
229
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
230
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
231
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
232
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
233
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
234
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
235
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
236
      basisvalues[0] *= std::sqrt(0.5);
 
237
      basisvalues[2] *= std::sqrt(1.0);
 
238
      basisvalues[5] *= std::sqrt(1.5);
 
239
      basisvalues[9] *= std::sqrt(2.0);
 
240
      basisvalues[1] *= std::sqrt(3.0);
 
241
      basisvalues[4] *= std::sqrt(4.5);
 
242
      basisvalues[8] *= std::sqrt(6.0);
 
243
      basisvalues[3] *= std::sqrt(7.5);
 
244
      basisvalues[7] *= std::sqrt(10.0);
 
245
      basisvalues[6] *= std::sqrt(14.0);
315
246
      
316
247
      // Table(s) of coefficients.
317
248
      static const double coefficients0[10] = \
331
262
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
332
263
      
333
264
      // Declare helper variables.
334
 
      unsigned int rr = 0;
335
 
      unsigned int ss = 0;
336
 
      unsigned int tt = 0;
337
 
      double tmp5 = 0.0;
338
 
      double tmp6 = 0.0;
339
 
      double tmp7 = 0.0;
340
265
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
341
266
      double tmp1 = (1.0 - Y)/2.0;
342
267
      double tmp2 = tmp1*tmp1;
344
269
      // Compute basisvalues.
345
270
      basisvalues[0] = 1.0;
346
271
      basisvalues[1] = tmp0;
347
 
      for (unsigned int r = 1; r < 3; r++)
348
 
      {
349
 
        rr = (r + 1)*((r + 1) + 1)/2;
350
 
        ss = r*(r + 1)/2;
351
 
        tt = (r - 1)*((r - 1) + 1)/2;
352
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
353
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
354
 
      }// end loop over 'r'
355
 
      for (unsigned int r = 0; r < 3; r++)
356
 
      {
357
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
358
 
        ss = r*(r + 1)/2;
359
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
360
 
      }// end loop over 'r'
361
 
      for (unsigned int r = 0; r < 2; r++)
362
 
      {
363
 
        for (unsigned int s = 1; s < 3 - r; s++)
364
 
        {
365
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
366
 
          ss = (r + s)*(r + s + 1)/2 + s;
367
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
368
 
          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));
369
 
          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));
370
 
          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));
371
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
372
 
        }// end loop over 's'
373
 
      }// end loop over 'r'
374
 
      for (unsigned int r = 0; r < 4; r++)
375
 
      {
376
 
        for (unsigned int s = 0; s < 4 - r; s++)
377
 
        {
378
 
          rr = (r + s)*(r + s + 1)/2 + s;
379
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
380
 
        }// end loop over 's'
381
 
      }// end loop over 'r'
 
272
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
273
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
274
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
275
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
276
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
277
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
278
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
279
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
280
      basisvalues[0] *= std::sqrt(0.5);
 
281
      basisvalues[2] *= std::sqrt(1.0);
 
282
      basisvalues[5] *= std::sqrt(1.5);
 
283
      basisvalues[9] *= std::sqrt(2.0);
 
284
      basisvalues[1] *= std::sqrt(3.0);
 
285
      basisvalues[4] *= std::sqrt(4.5);
 
286
      basisvalues[8] *= std::sqrt(6.0);
 
287
      basisvalues[3] *= std::sqrt(7.5);
 
288
      basisvalues[7] *= std::sqrt(10.0);
 
289
      basisvalues[6] *= std::sqrt(14.0);
382
290
      
383
291
      // Table(s) of coefficients.
384
292
      static const double coefficients0[10] = \
398
306
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
399
307
      
400
308
      // Declare helper variables.
401
 
      unsigned int rr = 0;
402
 
      unsigned int ss = 0;
403
 
      unsigned int tt = 0;
404
 
      double tmp5 = 0.0;
405
 
      double tmp6 = 0.0;
406
 
      double tmp7 = 0.0;
407
309
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
408
310
      double tmp1 = (1.0 - Y)/2.0;
409
311
      double tmp2 = tmp1*tmp1;
411
313
      // Compute basisvalues.
412
314
      basisvalues[0] = 1.0;
413
315
      basisvalues[1] = tmp0;
414
 
      for (unsigned int r = 1; r < 3; r++)
415
 
      {
416
 
        rr = (r + 1)*((r + 1) + 1)/2;
417
 
        ss = r*(r + 1)/2;
418
 
        tt = (r - 1)*((r - 1) + 1)/2;
419
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
420
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
421
 
      }// end loop over 'r'
422
 
      for (unsigned int r = 0; r < 3; r++)
423
 
      {
424
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
425
 
        ss = r*(r + 1)/2;
426
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
427
 
      }// end loop over 'r'
428
 
      for (unsigned int r = 0; r < 2; r++)
429
 
      {
430
 
        for (unsigned int s = 1; s < 3 - r; s++)
431
 
        {
432
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
433
 
          ss = (r + s)*(r + s + 1)/2 + s;
434
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
435
 
          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));
436
 
          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));
437
 
          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));
438
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
439
 
        }// end loop over 's'
440
 
      }// end loop over 'r'
441
 
      for (unsigned int r = 0; r < 4; r++)
442
 
      {
443
 
        for (unsigned int s = 0; s < 4 - r; s++)
444
 
        {
445
 
          rr = (r + s)*(r + s + 1)/2 + s;
446
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
447
 
        }// end loop over 's'
448
 
      }// end loop over 'r'
 
316
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
317
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
318
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
319
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
320
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
321
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
322
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
323
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
324
      basisvalues[0] *= std::sqrt(0.5);
 
325
      basisvalues[2] *= std::sqrt(1.0);
 
326
      basisvalues[5] *= std::sqrt(1.5);
 
327
      basisvalues[9] *= std::sqrt(2.0);
 
328
      basisvalues[1] *= std::sqrt(3.0);
 
329
      basisvalues[4] *= std::sqrt(4.5);
 
330
      basisvalues[8] *= std::sqrt(6.0);
 
331
      basisvalues[3] *= std::sqrt(7.5);
 
332
      basisvalues[7] *= std::sqrt(10.0);
 
333
      basisvalues[6] *= std::sqrt(14.0);
449
334
      
450
335
      // Table(s) of coefficients.
451
336
      static const double coefficients0[10] = \
465
350
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
466
351
      
467
352
      // Declare helper variables.
468
 
      unsigned int rr = 0;
469
 
      unsigned int ss = 0;
470
 
      unsigned int tt = 0;
471
 
      double tmp5 = 0.0;
472
 
      double tmp6 = 0.0;
473
 
      double tmp7 = 0.0;
474
353
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
475
354
      double tmp1 = (1.0 - Y)/2.0;
476
355
      double tmp2 = tmp1*tmp1;
478
357
      // Compute basisvalues.
479
358
      basisvalues[0] = 1.0;
480
359
      basisvalues[1] = tmp0;
481
 
      for (unsigned int r = 1; r < 3; r++)
482
 
      {
483
 
        rr = (r + 1)*((r + 1) + 1)/2;
484
 
        ss = r*(r + 1)/2;
485
 
        tt = (r - 1)*((r - 1) + 1)/2;
486
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
487
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
488
 
      }// end loop over 'r'
489
 
      for (unsigned int r = 0; r < 3; r++)
490
 
      {
491
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
492
 
        ss = r*(r + 1)/2;
493
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
494
 
      }// end loop over 'r'
495
 
      for (unsigned int r = 0; r < 2; r++)
496
 
      {
497
 
        for (unsigned int s = 1; s < 3 - r; s++)
498
 
        {
499
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
500
 
          ss = (r + s)*(r + s + 1)/2 + s;
501
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
502
 
          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));
503
 
          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));
504
 
          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));
505
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
506
 
        }// end loop over 's'
507
 
      }// end loop over 'r'
508
 
      for (unsigned int r = 0; r < 4; r++)
509
 
      {
510
 
        for (unsigned int s = 0; s < 4 - r; s++)
511
 
        {
512
 
          rr = (r + s)*(r + s + 1)/2 + s;
513
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
514
 
        }// end loop over 's'
515
 
      }// end loop over 'r'
 
360
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
361
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
362
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
363
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
364
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
365
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
366
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
367
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
368
      basisvalues[0] *= std::sqrt(0.5);
 
369
      basisvalues[2] *= std::sqrt(1.0);
 
370
      basisvalues[5] *= std::sqrt(1.5);
 
371
      basisvalues[9] *= std::sqrt(2.0);
 
372
      basisvalues[1] *= std::sqrt(3.0);
 
373
      basisvalues[4] *= std::sqrt(4.5);
 
374
      basisvalues[8] *= std::sqrt(6.0);
 
375
      basisvalues[3] *= std::sqrt(7.5);
 
376
      basisvalues[7] *= std::sqrt(10.0);
 
377
      basisvalues[6] *= std::sqrt(14.0);
516
378
      
517
379
      // Table(s) of coefficients.
518
380
      static const double coefficients0[10] = \
532
394
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
533
395
      
534
396
      // Declare helper variables.
535
 
      unsigned int rr = 0;
536
 
      unsigned int ss = 0;
537
 
      unsigned int tt = 0;
538
 
      double tmp5 = 0.0;
539
 
      double tmp6 = 0.0;
540
 
      double tmp7 = 0.0;
541
397
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
542
398
      double tmp1 = (1.0 - Y)/2.0;
543
399
      double tmp2 = tmp1*tmp1;
545
401
      // Compute basisvalues.
546
402
      basisvalues[0] = 1.0;
547
403
      basisvalues[1] = tmp0;
548
 
      for (unsigned int r = 1; r < 3; r++)
549
 
      {
550
 
        rr = (r + 1)*((r + 1) + 1)/2;
551
 
        ss = r*(r + 1)/2;
552
 
        tt = (r - 1)*((r - 1) + 1)/2;
553
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
554
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
555
 
      }// end loop over 'r'
556
 
      for (unsigned int r = 0; r < 3; r++)
557
 
      {
558
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
559
 
        ss = r*(r + 1)/2;
560
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
561
 
      }// end loop over 'r'
562
 
      for (unsigned int r = 0; r < 2; r++)
563
 
      {
564
 
        for (unsigned int s = 1; s < 3 - r; s++)
565
 
        {
566
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
567
 
          ss = (r + s)*(r + s + 1)/2 + s;
568
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
569
 
          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));
570
 
          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));
571
 
          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));
572
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
573
 
        }// end loop over 's'
574
 
      }// end loop over 'r'
575
 
      for (unsigned int r = 0; r < 4; r++)
576
 
      {
577
 
        for (unsigned int s = 0; s < 4 - r; s++)
578
 
        {
579
 
          rr = (r + s)*(r + s + 1)/2 + s;
580
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
581
 
        }// end loop over 's'
582
 
      }// end loop over 'r'
 
404
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
405
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
406
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
407
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
408
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
409
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
410
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
411
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
412
      basisvalues[0] *= std::sqrt(0.5);
 
413
      basisvalues[2] *= std::sqrt(1.0);
 
414
      basisvalues[5] *= std::sqrt(1.5);
 
415
      basisvalues[9] *= std::sqrt(2.0);
 
416
      basisvalues[1] *= std::sqrt(3.0);
 
417
      basisvalues[4] *= std::sqrt(4.5);
 
418
      basisvalues[8] *= std::sqrt(6.0);
 
419
      basisvalues[3] *= std::sqrt(7.5);
 
420
      basisvalues[7] *= std::sqrt(10.0);
 
421
      basisvalues[6] *= std::sqrt(14.0);
583
422
      
584
423
      // Table(s) of coefficients.
585
424
      static const double coefficients0[10] = \
599
438
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
600
439
      
601
440
      // Declare helper variables.
602
 
      unsigned int rr = 0;
603
 
      unsigned int ss = 0;
604
 
      unsigned int tt = 0;
605
 
      double tmp5 = 0.0;
606
 
      double tmp6 = 0.0;
607
 
      double tmp7 = 0.0;
608
441
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
609
442
      double tmp1 = (1.0 - Y)/2.0;
610
443
      double tmp2 = tmp1*tmp1;
612
445
      // Compute basisvalues.
613
446
      basisvalues[0] = 1.0;
614
447
      basisvalues[1] = tmp0;
615
 
      for (unsigned int r = 1; r < 3; r++)
616
 
      {
617
 
        rr = (r + 1)*((r + 1) + 1)/2;
618
 
        ss = r*(r + 1)/2;
619
 
        tt = (r - 1)*((r - 1) + 1)/2;
620
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
621
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
622
 
      }// end loop over 'r'
623
 
      for (unsigned int r = 0; r < 3; r++)
624
 
      {
625
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
626
 
        ss = r*(r + 1)/2;
627
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
628
 
      }// end loop over 'r'
629
 
      for (unsigned int r = 0; r < 2; r++)
630
 
      {
631
 
        for (unsigned int s = 1; s < 3 - r; s++)
632
 
        {
633
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
634
 
          ss = (r + s)*(r + s + 1)/2 + s;
635
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
636
 
          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));
637
 
          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));
638
 
          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));
639
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
640
 
        }// end loop over 's'
641
 
      }// end loop over 'r'
642
 
      for (unsigned int r = 0; r < 4; r++)
643
 
      {
644
 
        for (unsigned int s = 0; s < 4 - r; s++)
645
 
        {
646
 
          rr = (r + s)*(r + s + 1)/2 + s;
647
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
648
 
        }// end loop over 's'
649
 
      }// end loop over 'r'
 
448
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
449
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
450
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
451
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
452
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
453
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
454
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
455
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
456
      basisvalues[0] *= std::sqrt(0.5);
 
457
      basisvalues[2] *= std::sqrt(1.0);
 
458
      basisvalues[5] *= std::sqrt(1.5);
 
459
      basisvalues[9] *= std::sqrt(2.0);
 
460
      basisvalues[1] *= std::sqrt(3.0);
 
461
      basisvalues[4] *= std::sqrt(4.5);
 
462
      basisvalues[8] *= std::sqrt(6.0);
 
463
      basisvalues[3] *= std::sqrt(7.5);
 
464
      basisvalues[7] *= std::sqrt(10.0);
 
465
      basisvalues[6] *= std::sqrt(14.0);
650
466
      
651
467
      // Table(s) of coefficients.
652
468
      static const double coefficients0[10] = \
666
482
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
667
483
      
668
484
      // Declare helper variables.
669
 
      unsigned int rr = 0;
670
 
      unsigned int ss = 0;
671
 
      unsigned int tt = 0;
672
 
      double tmp5 = 0.0;
673
 
      double tmp6 = 0.0;
674
 
      double tmp7 = 0.0;
675
485
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
676
486
      double tmp1 = (1.0 - Y)/2.0;
677
487
      double tmp2 = tmp1*tmp1;
679
489
      // Compute basisvalues.
680
490
      basisvalues[0] = 1.0;
681
491
      basisvalues[1] = tmp0;
682
 
      for (unsigned int r = 1; r < 3; r++)
683
 
      {
684
 
        rr = (r + 1)*((r + 1) + 1)/2;
685
 
        ss = r*(r + 1)/2;
686
 
        tt = (r - 1)*((r - 1) + 1)/2;
687
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
688
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
689
 
      }// end loop over 'r'
690
 
      for (unsigned int r = 0; r < 3; r++)
691
 
      {
692
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
693
 
        ss = r*(r + 1)/2;
694
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
695
 
      }// end loop over 'r'
696
 
      for (unsigned int r = 0; r < 2; r++)
697
 
      {
698
 
        for (unsigned int s = 1; s < 3 - r; s++)
699
 
        {
700
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
701
 
          ss = (r + s)*(r + s + 1)/2 + s;
702
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
703
 
          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));
704
 
          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));
705
 
          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));
706
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
707
 
        }// end loop over 's'
708
 
      }// end loop over 'r'
709
 
      for (unsigned int r = 0; r < 4; r++)
710
 
      {
711
 
        for (unsigned int s = 0; s < 4 - r; s++)
712
 
        {
713
 
          rr = (r + s)*(r + s + 1)/2 + s;
714
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
715
 
        }// end loop over 's'
716
 
      }// end loop over 'r'
 
492
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
493
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
494
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
495
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
496
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
497
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
498
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
499
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
500
      basisvalues[0] *= std::sqrt(0.5);
 
501
      basisvalues[2] *= std::sqrt(1.0);
 
502
      basisvalues[5] *= std::sqrt(1.5);
 
503
      basisvalues[9] *= std::sqrt(2.0);
 
504
      basisvalues[1] *= std::sqrt(3.0);
 
505
      basisvalues[4] *= std::sqrt(4.5);
 
506
      basisvalues[8] *= std::sqrt(6.0);
 
507
      basisvalues[3] *= std::sqrt(7.5);
 
508
      basisvalues[7] *= std::sqrt(10.0);
 
509
      basisvalues[6] *= std::sqrt(14.0);
717
510
      
718
511
      // Table(s) of coefficients.
719
512
      static const double coefficients0[10] = \
733
526
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
734
527
      
735
528
      // Declare helper variables.
736
 
      unsigned int rr = 0;
737
 
      unsigned int ss = 0;
738
 
      unsigned int tt = 0;
739
 
      double tmp5 = 0.0;
740
 
      double tmp6 = 0.0;
741
 
      double tmp7 = 0.0;
742
529
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
743
530
      double tmp1 = (1.0 - Y)/2.0;
744
531
      double tmp2 = tmp1*tmp1;
746
533
      // Compute basisvalues.
747
534
      basisvalues[0] = 1.0;
748
535
      basisvalues[1] = tmp0;
749
 
      for (unsigned int r = 1; r < 3; r++)
750
 
      {
751
 
        rr = (r + 1)*((r + 1) + 1)/2;
752
 
        ss = r*(r + 1)/2;
753
 
        tt = (r - 1)*((r - 1) + 1)/2;
754
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
755
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
756
 
      }// end loop over 'r'
757
 
      for (unsigned int r = 0; r < 3; r++)
758
 
      {
759
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
760
 
        ss = r*(r + 1)/2;
761
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
762
 
      }// end loop over 'r'
763
 
      for (unsigned int r = 0; r < 2; r++)
764
 
      {
765
 
        for (unsigned int s = 1; s < 3 - r; s++)
766
 
        {
767
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
768
 
          ss = (r + s)*(r + s + 1)/2 + s;
769
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
770
 
          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));
771
 
          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));
772
 
          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));
773
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
774
 
        }// end loop over 's'
775
 
      }// end loop over 'r'
776
 
      for (unsigned int r = 0; r < 4; r++)
777
 
      {
778
 
        for (unsigned int s = 0; s < 4 - r; s++)
779
 
        {
780
 
          rr = (r + s)*(r + s + 1)/2 + s;
781
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
782
 
        }// end loop over 's'
783
 
      }// end loop over 'r'
 
536
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
537
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
538
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
539
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
540
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
541
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
542
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
543
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
544
      basisvalues[0] *= std::sqrt(0.5);
 
545
      basisvalues[2] *= std::sqrt(1.0);
 
546
      basisvalues[5] *= std::sqrt(1.5);
 
547
      basisvalues[9] *= std::sqrt(2.0);
 
548
      basisvalues[1] *= std::sqrt(3.0);
 
549
      basisvalues[4] *= std::sqrt(4.5);
 
550
      basisvalues[8] *= std::sqrt(6.0);
 
551
      basisvalues[3] *= std::sqrt(7.5);
 
552
      basisvalues[7] *= std::sqrt(10.0);
 
553
      basisvalues[6] *= std::sqrt(14.0);
784
554
      
785
555
      // Table(s) of coefficients.
786
556
      static const double coefficients0[10] = \
919
689
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
920
690
      
921
691
      // Declare helper variables.
922
 
      unsigned int rr = 0;
923
 
      unsigned int ss = 0;
924
 
      unsigned int tt = 0;
925
 
      double tmp5 = 0.0;
926
 
      double tmp6 = 0.0;
927
 
      double tmp7 = 0.0;
928
692
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
929
693
      double tmp1 = (1.0 - Y)/2.0;
930
694
      double tmp2 = tmp1*tmp1;
932
696
      // Compute basisvalues.
933
697
      basisvalues[0] = 1.0;
934
698
      basisvalues[1] = tmp0;
935
 
      for (unsigned int r = 1; r < 3; r++)
936
 
      {
937
 
        rr = (r + 1)*((r + 1) + 1)/2;
938
 
        ss = r*(r + 1)/2;
939
 
        tt = (r - 1)*((r - 1) + 1)/2;
940
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
941
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
942
 
      }// end loop over 'r'
943
 
      for (unsigned int r = 0; r < 3; r++)
944
 
      {
945
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
946
 
        ss = r*(r + 1)/2;
947
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
948
 
      }// end loop over 'r'
949
 
      for (unsigned int r = 0; r < 2; r++)
950
 
      {
951
 
        for (unsigned int s = 1; s < 3 - r; s++)
952
 
        {
953
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
954
 
          ss = (r + s)*(r + s + 1)/2 + s;
955
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
956
 
          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));
957
 
          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));
958
 
          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));
959
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
960
 
        }// end loop over 's'
961
 
      }// end loop over 'r'
962
 
      for (unsigned int r = 0; r < 4; r++)
963
 
      {
964
 
        for (unsigned int s = 0; s < 4 - r; s++)
965
 
        {
966
 
          rr = (r + s)*(r + s + 1)/2 + s;
967
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
968
 
        }// end loop over 's'
969
 
      }// end loop over 'r'
 
699
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
700
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
701
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
702
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
703
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
704
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
705
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
706
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
707
      basisvalues[0] *= std::sqrt(0.5);
 
708
      basisvalues[2] *= std::sqrt(1.0);
 
709
      basisvalues[5] *= std::sqrt(1.5);
 
710
      basisvalues[9] *= std::sqrt(2.0);
 
711
      basisvalues[1] *= std::sqrt(3.0);
 
712
      basisvalues[4] *= std::sqrt(4.5);
 
713
      basisvalues[8] *= std::sqrt(6.0);
 
714
      basisvalues[3] *= std::sqrt(7.5);
 
715
      basisvalues[7] *= std::sqrt(10.0);
 
716
      basisvalues[6] *= std::sqrt(14.0);
970
717
      
971
718
      // Table(s) of coefficients.
972
719
      static const double coefficients0[10] = \
1132
879
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1133
880
      
1134
881
      // Declare helper variables.
1135
 
      unsigned int rr = 0;
1136
 
      unsigned int ss = 0;
1137
 
      unsigned int tt = 0;
1138
 
      double tmp5 = 0.0;
1139
 
      double tmp6 = 0.0;
1140
 
      double tmp7 = 0.0;
1141
882
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
1142
883
      double tmp1 = (1.0 - Y)/2.0;
1143
884
      double tmp2 = tmp1*tmp1;
1145
886
      // Compute basisvalues.
1146
887
      basisvalues[0] = 1.0;
1147
888
      basisvalues[1] = tmp0;
1148
 
      for (unsigned int r = 1; r < 3; r++)
1149
 
      {
1150
 
        rr = (r + 1)*((r + 1) + 1)/2;
1151
 
        ss = r*(r + 1)/2;
1152
 
        tt = (r - 1)*((r - 1) + 1)/2;
1153
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
1154
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
1155
 
      }// end loop over 'r'
1156
 
      for (unsigned int r = 0; r < 3; r++)
1157
 
      {
1158
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
1159
 
        ss = r*(r + 1)/2;
1160
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
1161
 
      }// end loop over 'r'
1162
 
      for (unsigned int r = 0; r < 2; r++)
1163
 
      {
1164
 
        for (unsigned int s = 1; s < 3 - r; s++)
1165
 
        {
1166
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
1167
 
          ss = (r + s)*(r + s + 1)/2 + s;
1168
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
1169
 
          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));
1170
 
          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));
1171
 
          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));
1172
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
1173
 
        }// end loop over 's'
1174
 
      }// end loop over 'r'
1175
 
      for (unsigned int r = 0; r < 4; r++)
1176
 
      {
1177
 
        for (unsigned int s = 0; s < 4 - r; s++)
1178
 
        {
1179
 
          rr = (r + s)*(r + s + 1)/2 + s;
1180
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
1181
 
        }// end loop over 's'
1182
 
      }// end loop over 'r'
 
889
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
890
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
891
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
892
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
893
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
894
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
895
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
896
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
897
      basisvalues[0] *= std::sqrt(0.5);
 
898
      basisvalues[2] *= std::sqrt(1.0);
 
899
      basisvalues[5] *= std::sqrt(1.5);
 
900
      basisvalues[9] *= std::sqrt(2.0);
 
901
      basisvalues[1] *= std::sqrt(3.0);
 
902
      basisvalues[4] *= std::sqrt(4.5);
 
903
      basisvalues[8] *= std::sqrt(6.0);
 
904
      basisvalues[3] *= std::sqrt(7.5);
 
905
      basisvalues[7] *= std::sqrt(10.0);
 
906
      basisvalues[6] *= std::sqrt(14.0);
1183
907
      
1184
908
      // Table(s) of coefficients.
1185
909
      static const double coefficients0[10] = \
1345
1069
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1346
1070
      
1347
1071
      // Declare helper variables.
1348
 
      unsigned int rr = 0;
1349
 
      unsigned int ss = 0;
1350
 
      unsigned int tt = 0;
1351
 
      double tmp5 = 0.0;
1352
 
      double tmp6 = 0.0;
1353
 
      double tmp7 = 0.0;
1354
1072
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
1355
1073
      double tmp1 = (1.0 - Y)/2.0;
1356
1074
      double tmp2 = tmp1*tmp1;
1358
1076
      // Compute basisvalues.
1359
1077
      basisvalues[0] = 1.0;
1360
1078
      basisvalues[1] = tmp0;
1361
 
      for (unsigned int r = 1; r < 3; r++)
1362
 
      {
1363
 
        rr = (r + 1)*((r + 1) + 1)/2;
1364
 
        ss = r*(r + 1)/2;
1365
 
        tt = (r - 1)*((r - 1) + 1)/2;
1366
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
1367
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
1368
 
      }// end loop over 'r'
1369
 
      for (unsigned int r = 0; r < 3; r++)
1370
 
      {
1371
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
1372
 
        ss = r*(r + 1)/2;
1373
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
1374
 
      }// end loop over 'r'
1375
 
      for (unsigned int r = 0; r < 2; r++)
1376
 
      {
1377
 
        for (unsigned int s = 1; s < 3 - r; s++)
1378
 
        {
1379
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
1380
 
          ss = (r + s)*(r + s + 1)/2 + s;
1381
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
1382
 
          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));
1383
 
          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));
1384
 
          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));
1385
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
1386
 
        }// end loop over 's'
1387
 
      }// end loop over 'r'
1388
 
      for (unsigned int r = 0; r < 4; r++)
1389
 
      {
1390
 
        for (unsigned int s = 0; s < 4 - r; s++)
1391
 
        {
1392
 
          rr = (r + s)*(r + s + 1)/2 + s;
1393
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
1394
 
        }// end loop over 's'
1395
 
      }// end loop over 'r'
 
1079
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
1080
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
1081
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
1082
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
1083
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
1084
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
1085
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
1086
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
1087
      basisvalues[0] *= std::sqrt(0.5);
 
1088
      basisvalues[2] *= std::sqrt(1.0);
 
1089
      basisvalues[5] *= std::sqrt(1.5);
 
1090
      basisvalues[9] *= std::sqrt(2.0);
 
1091
      basisvalues[1] *= std::sqrt(3.0);
 
1092
      basisvalues[4] *= std::sqrt(4.5);
 
1093
      basisvalues[8] *= std::sqrt(6.0);
 
1094
      basisvalues[3] *= std::sqrt(7.5);
 
1095
      basisvalues[7] *= std::sqrt(10.0);
 
1096
      basisvalues[6] *= std::sqrt(14.0);
1396
1097
      
1397
1098
      // Table(s) of coefficients.
1398
1099
      static const double coefficients0[10] = \
1558
1259
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1559
1260
      
1560
1261
      // Declare helper variables.
1561
 
      unsigned int rr = 0;
1562
 
      unsigned int ss = 0;
1563
 
      unsigned int tt = 0;
1564
 
      double tmp5 = 0.0;
1565
 
      double tmp6 = 0.0;
1566
 
      double tmp7 = 0.0;
1567
1262
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
1568
1263
      double tmp1 = (1.0 - Y)/2.0;
1569
1264
      double tmp2 = tmp1*tmp1;
1571
1266
      // Compute basisvalues.
1572
1267
      basisvalues[0] = 1.0;
1573
1268
      basisvalues[1] = tmp0;
1574
 
      for (unsigned int r = 1; r < 3; r++)
1575
 
      {
1576
 
        rr = (r + 1)*((r + 1) + 1)/2;
1577
 
        ss = r*(r + 1)/2;
1578
 
        tt = (r - 1)*((r - 1) + 1)/2;
1579
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
1580
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
1581
 
      }// end loop over 'r'
1582
 
      for (unsigned int r = 0; r < 3; r++)
1583
 
      {
1584
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
1585
 
        ss = r*(r + 1)/2;
1586
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
1587
 
      }// end loop over 'r'
1588
 
      for (unsigned int r = 0; r < 2; r++)
1589
 
      {
1590
 
        for (unsigned int s = 1; s < 3 - r; s++)
1591
 
        {
1592
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
1593
 
          ss = (r + s)*(r + s + 1)/2 + s;
1594
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
1595
 
          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));
1596
 
          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));
1597
 
          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));
1598
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
1599
 
        }// end loop over 's'
1600
 
      }// end loop over 'r'
1601
 
      for (unsigned int r = 0; r < 4; r++)
1602
 
      {
1603
 
        for (unsigned int s = 0; s < 4 - r; s++)
1604
 
        {
1605
 
          rr = (r + s)*(r + s + 1)/2 + s;
1606
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
1607
 
        }// end loop over 's'
1608
 
      }// end loop over 'r'
 
1269
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
1270
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
1271
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
1272
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
1273
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
1274
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
1275
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
1276
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
1277
      basisvalues[0] *= std::sqrt(0.5);
 
1278
      basisvalues[2] *= std::sqrt(1.0);
 
1279
      basisvalues[5] *= std::sqrt(1.5);
 
1280
      basisvalues[9] *= std::sqrt(2.0);
 
1281
      basisvalues[1] *= std::sqrt(3.0);
 
1282
      basisvalues[4] *= std::sqrt(4.5);
 
1283
      basisvalues[8] *= std::sqrt(6.0);
 
1284
      basisvalues[3] *= std::sqrt(7.5);
 
1285
      basisvalues[7] *= std::sqrt(10.0);
 
1286
      basisvalues[6] *= std::sqrt(14.0);
1609
1287
      
1610
1288
      // Table(s) of coefficients.
1611
1289
      static const double coefficients0[10] = \
1771
1449
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1772
1450
      
1773
1451
      // Declare helper variables.
1774
 
      unsigned int rr = 0;
1775
 
      unsigned int ss = 0;
1776
 
      unsigned int tt = 0;
1777
 
      double tmp5 = 0.0;
1778
 
      double tmp6 = 0.0;
1779
 
      double tmp7 = 0.0;
1780
1452
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
1781
1453
      double tmp1 = (1.0 - Y)/2.0;
1782
1454
      double tmp2 = tmp1*tmp1;
1784
1456
      // Compute basisvalues.
1785
1457
      basisvalues[0] = 1.0;
1786
1458
      basisvalues[1] = tmp0;
1787
 
      for (unsigned int r = 1; r < 3; r++)
1788
 
      {
1789
 
        rr = (r + 1)*((r + 1) + 1)/2;
1790
 
        ss = r*(r + 1)/2;
1791
 
        tt = (r - 1)*((r - 1) + 1)/2;
1792
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
1793
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
1794
 
      }// end loop over 'r'
1795
 
      for (unsigned int r = 0; r < 3; r++)
1796
 
      {
1797
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
1798
 
        ss = r*(r + 1)/2;
1799
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
1800
 
      }// end loop over 'r'
1801
 
      for (unsigned int r = 0; r < 2; r++)
1802
 
      {
1803
 
        for (unsigned int s = 1; s < 3 - r; s++)
1804
 
        {
1805
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
1806
 
          ss = (r + s)*(r + s + 1)/2 + s;
1807
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
1808
 
          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));
1809
 
          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));
1810
 
          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));
1811
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
1812
 
        }// end loop over 's'
1813
 
      }// end loop over 'r'
1814
 
      for (unsigned int r = 0; r < 4; r++)
1815
 
      {
1816
 
        for (unsigned int s = 0; s < 4 - r; s++)
1817
 
        {
1818
 
          rr = (r + s)*(r + s + 1)/2 + s;
1819
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
1820
 
        }// end loop over 's'
1821
 
      }// end loop over 'r'
 
1459
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
1460
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
1461
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
1462
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
1463
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
1464
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
1465
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
1466
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
1467
      basisvalues[0] *= std::sqrt(0.5);
 
1468
      basisvalues[2] *= std::sqrt(1.0);
 
1469
      basisvalues[5] *= std::sqrt(1.5);
 
1470
      basisvalues[9] *= std::sqrt(2.0);
 
1471
      basisvalues[1] *= std::sqrt(3.0);
 
1472
      basisvalues[4] *= std::sqrt(4.5);
 
1473
      basisvalues[8] *= std::sqrt(6.0);
 
1474
      basisvalues[3] *= std::sqrt(7.5);
 
1475
      basisvalues[7] *= std::sqrt(10.0);
 
1476
      basisvalues[6] *= std::sqrt(14.0);
1822
1477
      
1823
1478
      // Table(s) of coefficients.
1824
1479
      static const double coefficients0[10] = \
1984
1639
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
1985
1640
      
1986
1641
      // Declare helper variables.
1987
 
      unsigned int rr = 0;
1988
 
      unsigned int ss = 0;
1989
 
      unsigned int tt = 0;
1990
 
      double tmp5 = 0.0;
1991
 
      double tmp6 = 0.0;
1992
 
      double tmp7 = 0.0;
1993
1642
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
1994
1643
      double tmp1 = (1.0 - Y)/2.0;
1995
1644
      double tmp2 = tmp1*tmp1;
1997
1646
      // Compute basisvalues.
1998
1647
      basisvalues[0] = 1.0;
1999
1648
      basisvalues[1] = tmp0;
2000
 
      for (unsigned int r = 1; r < 3; r++)
2001
 
      {
2002
 
        rr = (r + 1)*((r + 1) + 1)/2;
2003
 
        ss = r*(r + 1)/2;
2004
 
        tt = (r - 1)*((r - 1) + 1)/2;
2005
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
2006
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
2007
 
      }// end loop over 'r'
2008
 
      for (unsigned int r = 0; r < 3; r++)
2009
 
      {
2010
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
2011
 
        ss = r*(r + 1)/2;
2012
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
2013
 
      }// end loop over 'r'
2014
 
      for (unsigned int r = 0; r < 2; r++)
2015
 
      {
2016
 
        for (unsigned int s = 1; s < 3 - r; s++)
2017
 
        {
2018
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
2019
 
          ss = (r + s)*(r + s + 1)/2 + s;
2020
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
2021
 
          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));
2022
 
          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));
2023
 
          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));
2024
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
2025
 
        }// end loop over 's'
2026
 
      }// end loop over 'r'
2027
 
      for (unsigned int r = 0; r < 4; r++)
2028
 
      {
2029
 
        for (unsigned int s = 0; s < 4 - r; s++)
2030
 
        {
2031
 
          rr = (r + s)*(r + s + 1)/2 + s;
2032
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
2033
 
        }// end loop over 's'
2034
 
      }// end loop over 'r'
 
1649
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
1650
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
1651
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
1652
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
1653
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
1654
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
1655
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
1656
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
1657
      basisvalues[0] *= std::sqrt(0.5);
 
1658
      basisvalues[2] *= std::sqrt(1.0);
 
1659
      basisvalues[5] *= std::sqrt(1.5);
 
1660
      basisvalues[9] *= std::sqrt(2.0);
 
1661
      basisvalues[1] *= std::sqrt(3.0);
 
1662
      basisvalues[4] *= std::sqrt(4.5);
 
1663
      basisvalues[8] *= std::sqrt(6.0);
 
1664
      basisvalues[3] *= std::sqrt(7.5);
 
1665
      basisvalues[7] *= std::sqrt(10.0);
 
1666
      basisvalues[6] *= std::sqrt(14.0);
2035
1667
      
2036
1668
      // Table(s) of coefficients.
2037
1669
      static const double coefficients0[10] = \
2197
1829
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2198
1830
      
2199
1831
      // Declare helper variables.
2200
 
      unsigned int rr = 0;
2201
 
      unsigned int ss = 0;
2202
 
      unsigned int tt = 0;
2203
 
      double tmp5 = 0.0;
2204
 
      double tmp6 = 0.0;
2205
 
      double tmp7 = 0.0;
2206
1832
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
2207
1833
      double tmp1 = (1.0 - Y)/2.0;
2208
1834
      double tmp2 = tmp1*tmp1;
2210
1836
      // Compute basisvalues.
2211
1837
      basisvalues[0] = 1.0;
2212
1838
      basisvalues[1] = tmp0;
2213
 
      for (unsigned int r = 1; r < 3; r++)
2214
 
      {
2215
 
        rr = (r + 1)*((r + 1) + 1)/2;
2216
 
        ss = r*(r + 1)/2;
2217
 
        tt = (r - 1)*((r - 1) + 1)/2;
2218
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
2219
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
2220
 
      }// end loop over 'r'
2221
 
      for (unsigned int r = 0; r < 3; r++)
2222
 
      {
2223
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
2224
 
        ss = r*(r + 1)/2;
2225
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
2226
 
      }// end loop over 'r'
2227
 
      for (unsigned int r = 0; r < 2; r++)
2228
 
      {
2229
 
        for (unsigned int s = 1; s < 3 - r; s++)
2230
 
        {
2231
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
2232
 
          ss = (r + s)*(r + s + 1)/2 + s;
2233
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
2234
 
          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));
2235
 
          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));
2236
 
          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));
2237
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
2238
 
        }// end loop over 's'
2239
 
      }// end loop over 'r'
2240
 
      for (unsigned int r = 0; r < 4; r++)
2241
 
      {
2242
 
        for (unsigned int s = 0; s < 4 - r; s++)
2243
 
        {
2244
 
          rr = (r + s)*(r + s + 1)/2 + s;
2245
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
2246
 
        }// end loop over 's'
2247
 
      }// end loop over 'r'
 
1839
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
1840
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
1841
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
1842
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
1843
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
1844
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
1845
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
1846
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
1847
      basisvalues[0] *= std::sqrt(0.5);
 
1848
      basisvalues[2] *= std::sqrt(1.0);
 
1849
      basisvalues[5] *= std::sqrt(1.5);
 
1850
      basisvalues[9] *= std::sqrt(2.0);
 
1851
      basisvalues[1] *= std::sqrt(3.0);
 
1852
      basisvalues[4] *= std::sqrt(4.5);
 
1853
      basisvalues[8] *= std::sqrt(6.0);
 
1854
      basisvalues[3] *= std::sqrt(7.5);
 
1855
      basisvalues[7] *= std::sqrt(10.0);
 
1856
      basisvalues[6] *= std::sqrt(14.0);
2248
1857
      
2249
1858
      // Table(s) of coefficients.
2250
1859
      static const double coefficients0[10] = \
2410
2019
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2411
2020
      
2412
2021
      // Declare helper variables.
2413
 
      unsigned int rr = 0;
2414
 
      unsigned int ss = 0;
2415
 
      unsigned int tt = 0;
2416
 
      double tmp5 = 0.0;
2417
 
      double tmp6 = 0.0;
2418
 
      double tmp7 = 0.0;
2419
2022
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
2420
2023
      double tmp1 = (1.0 - Y)/2.0;
2421
2024
      double tmp2 = tmp1*tmp1;
2423
2026
      // Compute basisvalues.
2424
2027
      basisvalues[0] = 1.0;
2425
2028
      basisvalues[1] = tmp0;
2426
 
      for (unsigned int r = 1; r < 3; r++)
2427
 
      {
2428
 
        rr = (r + 1)*((r + 1) + 1)/2;
2429
 
        ss = r*(r + 1)/2;
2430
 
        tt = (r - 1)*((r - 1) + 1)/2;
2431
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
2432
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
2433
 
      }// end loop over 'r'
2434
 
      for (unsigned int r = 0; r < 3; r++)
2435
 
      {
2436
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
2437
 
        ss = r*(r + 1)/2;
2438
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
2439
 
      }// end loop over 'r'
2440
 
      for (unsigned int r = 0; r < 2; r++)
2441
 
      {
2442
 
        for (unsigned int s = 1; s < 3 - r; s++)
2443
 
        {
2444
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
2445
 
          ss = (r + s)*(r + s + 1)/2 + s;
2446
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
2447
 
          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));
2448
 
          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));
2449
 
          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));
2450
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
2451
 
        }// end loop over 's'
2452
 
      }// end loop over 'r'
2453
 
      for (unsigned int r = 0; r < 4; r++)
2454
 
      {
2455
 
        for (unsigned int s = 0; s < 4 - r; s++)
2456
 
        {
2457
 
          rr = (r + s)*(r + s + 1)/2 + s;
2458
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
2459
 
        }// end loop over 's'
2460
 
      }// end loop over 'r'
 
2029
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
2030
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
2031
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
2032
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
2033
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
2034
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
2035
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
2036
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
2037
      basisvalues[0] *= std::sqrt(0.5);
 
2038
      basisvalues[2] *= std::sqrt(1.0);
 
2039
      basisvalues[5] *= std::sqrt(1.5);
 
2040
      basisvalues[9] *= std::sqrt(2.0);
 
2041
      basisvalues[1] *= std::sqrt(3.0);
 
2042
      basisvalues[4] *= std::sqrt(4.5);
 
2043
      basisvalues[8] *= std::sqrt(6.0);
 
2044
      basisvalues[3] *= std::sqrt(7.5);
 
2045
      basisvalues[7] *= std::sqrt(10.0);
 
2046
      basisvalues[6] *= std::sqrt(14.0);
2461
2047
      
2462
2048
      // Table(s) of coefficients.
2463
2049
      static const double coefficients0[10] = \
2623
2209
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2624
2210
      
2625
2211
      // Declare helper variables.
2626
 
      unsigned int rr = 0;
2627
 
      unsigned int ss = 0;
2628
 
      unsigned int tt = 0;
2629
 
      double tmp5 = 0.0;
2630
 
      double tmp6 = 0.0;
2631
 
      double tmp7 = 0.0;
2632
2212
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
2633
2213
      double tmp1 = (1.0 - Y)/2.0;
2634
2214
      double tmp2 = tmp1*tmp1;
2636
2216
      // Compute basisvalues.
2637
2217
      basisvalues[0] = 1.0;
2638
2218
      basisvalues[1] = tmp0;
2639
 
      for (unsigned int r = 1; r < 3; r++)
2640
 
      {
2641
 
        rr = (r + 1)*((r + 1) + 1)/2;
2642
 
        ss = r*(r + 1)/2;
2643
 
        tt = (r - 1)*((r - 1) + 1)/2;
2644
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
2645
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
2646
 
      }// end loop over 'r'
2647
 
      for (unsigned int r = 0; r < 3; r++)
2648
 
      {
2649
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
2650
 
        ss = r*(r + 1)/2;
2651
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
2652
 
      }// end loop over 'r'
2653
 
      for (unsigned int r = 0; r < 2; r++)
2654
 
      {
2655
 
        for (unsigned int s = 1; s < 3 - r; s++)
2656
 
        {
2657
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
2658
 
          ss = (r + s)*(r + s + 1)/2 + s;
2659
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
2660
 
          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));
2661
 
          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));
2662
 
          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));
2663
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
2664
 
        }// end loop over 's'
2665
 
      }// end loop over 'r'
2666
 
      for (unsigned int r = 0; r < 4; r++)
2667
 
      {
2668
 
        for (unsigned int s = 0; s < 4 - r; s++)
2669
 
        {
2670
 
          rr = (r + s)*(r + s + 1)/2 + s;
2671
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
2672
 
        }// end loop over 's'
2673
 
      }// end loop over 'r'
 
2219
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
2220
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
2221
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
2222
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
2223
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
2224
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
2225
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
2226
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
2227
      basisvalues[0] *= std::sqrt(0.5);
 
2228
      basisvalues[2] *= std::sqrt(1.0);
 
2229
      basisvalues[5] *= std::sqrt(1.5);
 
2230
      basisvalues[9] *= std::sqrt(2.0);
 
2231
      basisvalues[1] *= std::sqrt(3.0);
 
2232
      basisvalues[4] *= std::sqrt(4.5);
 
2233
      basisvalues[8] *= std::sqrt(6.0);
 
2234
      basisvalues[3] *= std::sqrt(7.5);
 
2235
      basisvalues[7] *= std::sqrt(10.0);
 
2236
      basisvalues[6] *= std::sqrt(14.0);
2674
2237
      
2675
2238
      // Table(s) of coefficients.
2676
2239
      static const double coefficients0[10] = \
2836
2399
      double basisvalues[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
2837
2400
      
2838
2401
      // Declare helper variables.
2839
 
      unsigned int rr = 0;
2840
 
      unsigned int ss = 0;
2841
 
      unsigned int tt = 0;
2842
 
      double tmp5 = 0.0;
2843
 
      double tmp6 = 0.0;
2844
 
      double tmp7 = 0.0;
2845
2402
      double tmp0 = (1.0 + Y + 2.0*X)/2.0;
2846
2403
      double tmp1 = (1.0 - Y)/2.0;
2847
2404
      double tmp2 = tmp1*tmp1;
2849
2406
      // Compute basisvalues.
2850
2407
      basisvalues[0] = 1.0;
2851
2408
      basisvalues[1] = tmp0;
2852
 
      for (unsigned int r = 1; r < 3; r++)
2853
 
      {
2854
 
        rr = (r + 1)*((r + 1) + 1)/2;
2855
 
        ss = r*(r + 1)/2;
2856
 
        tt = (r - 1)*((r - 1) + 1)/2;
2857
 
        tmp5 = (1.0 + 2.0*r)/(1.0 + r);
2858
 
        basisvalues[rr] = (basisvalues[ss]*tmp0*tmp5 - basisvalues[tt]*tmp2*r/(1.0 + r));
2859
 
      }// end loop over 'r'
2860
 
      for (unsigned int r = 0; r < 3; r++)
2861
 
      {
2862
 
        rr = (r + 1)*(r + 1 + 1)/2 + 1;
2863
 
        ss = r*(r + 1)/2;
2864
 
        basisvalues[rr] = basisvalues[ss]*(0.5 + r + Y*(1.5 + r));
2865
 
      }// end loop over 'r'
2866
 
      for (unsigned int r = 0; r < 2; r++)
2867
 
      {
2868
 
        for (unsigned int s = 1; s < 3 - r; s++)
2869
 
        {
2870
 
          rr = (r + s + 1)*(r + s + 1 + 1)/2 + s + 1;
2871
 
          ss = (r + s)*(r + s + 1)/2 + s;
2872
 
          tt = (r + s - 1)*(r + s - 1 + 1)/2 + s - 1;
2873
 
          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));
2874
 
          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));
2875
 
          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));
2876
 
          basisvalues[rr] = (basisvalues[ss]*(tmp6 + Y*tmp5) - basisvalues[tt]*tmp7);
2877
 
        }// end loop over 's'
2878
 
      }// end loop over 'r'
2879
 
      for (unsigned int r = 0; r < 4; r++)
2880
 
      {
2881
 
        for (unsigned int s = 0; s < 4 - r; s++)
2882
 
        {
2883
 
          rr = (r + s)*(r + s + 1)/2 + s;
2884
 
          basisvalues[rr] *= std::sqrt((0.5 + r)*(1.0 + r + s));
2885
 
        }// end loop over 's'
2886
 
      }// end loop over 'r'
 
2409
      basisvalues[3] = basisvalues[1]*1.5*tmp0 - basisvalues[0]*0.5*tmp2;
 
2410
      basisvalues[6] = basisvalues[3]*1.6666667*tmp0 - basisvalues[1]*0.66666667*tmp2;
 
2411
      basisvalues[2] = basisvalues[0]*(0.5 + 1.5*Y);
 
2412
      basisvalues[4] = basisvalues[1]*(1.5 + 2.5*Y);
 
2413
      basisvalues[7] = basisvalues[3]*(2.5 + 3.5*Y);
 
2414
      basisvalues[5] = basisvalues[2]*(0.11111111 + Y*1.6666667) - basisvalues[0]*0.55555556;
 
2415
      basisvalues[9] = basisvalues[5]*(0.05 + Y*1.75) - basisvalues[2]*0.7;
 
2416
      basisvalues[8] = basisvalues[4]*(0.54 + Y*2.1) - basisvalues[1]*0.56;
 
2417
      basisvalues[0] *= std::sqrt(0.5);
 
2418
      basisvalues[2] *= std::sqrt(1.0);
 
2419
      basisvalues[5] *= std::sqrt(1.5);
 
2420
      basisvalues[9] *= std::sqrt(2.0);
 
2421
      basisvalues[1] *= std::sqrt(3.0);
 
2422
      basisvalues[4] *= std::sqrt(4.5);
 
2423
      basisvalues[8] *= std::sqrt(6.0);
 
2424
      basisvalues[3] *= std::sqrt(7.5);
 
2425
      basisvalues[7] *= std::sqrt(10.0);
 
2426
      basisvalues[6] *= std::sqrt(14.0);
2887
2427
      
2888
2428
      // Table(s) of coefficients.
2889
2429
      static const double coefficients0[10] = \