107
107
*values = 0.00000000;
109
// Map degree of freedom to element degree of freedom
110
const unsigned int dof = i;
112
// Array of basisvalues.
113
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
115
// Declare helper variables.
118
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
120
// Compute basisvalues.
121
basisvalues[0] = 1.00000000;
122
basisvalues[1] = tmp0;
123
for (unsigned int r = 0; r < 1; r++)
125
rr = (r + 1)*(r + 1 + 1)/2 + 1;
127
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
128
}// end loop over 'r'
129
for (unsigned int r = 0; r < 2; r++)
131
for (unsigned int s = 0; s < 2 - r; s++)
133
rr = (r + s)*(r + s + 1)/2 + s;
134
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
135
}// end loop over 's'
136
}// end loop over 'r'
138
// Table(s) of coefficients.
139
static const double coefficients0[3][3] = \
140
{{0.47140452, -0.28867513, -0.16666667},
141
{0.47140452, 0.28867513, -0.16666667},
142
{0.47140452, 0.00000000, 0.33333333}};
145
for (unsigned int r = 0; r < 3; r++)
147
*values += coefficients0[dof][r]*basisvalues[r];
148
}// end loop over 'r'
113
// Array of basisvalues.
114
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
116
// Declare helper variables.
119
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
121
// Compute basisvalues.
122
basisvalues[0] = 1.00000000;
123
basisvalues[1] = tmp0;
124
for (unsigned int r = 0; r < 1; r++)
126
rr = (r + 1)*(r + 1 + 1)/2 + 1;
128
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
129
}// end loop over 'r'
130
for (unsigned int r = 0; r < 2; r++)
132
for (unsigned int s = 0; s < 2 - r; s++)
134
rr = (r + s)*(r + s + 1)/2 + s;
135
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
136
}// end loop over 's'
137
}// end loop over 'r'
139
// Table(s) of coefficients.
140
static const double coefficients0[3] = \
141
{0.47140452, -0.28867513, -0.16666667};
144
for (unsigned int r = 0; r < 3; r++)
146
*values += coefficients0[r]*basisvalues[r];
147
}// end loop over 'r'
153
// Array of basisvalues.
154
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
156
// Declare helper variables.
159
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
161
// Compute basisvalues.
162
basisvalues[0] = 1.00000000;
163
basisvalues[1] = tmp0;
164
for (unsigned int r = 0; r < 1; r++)
166
rr = (r + 1)*(r + 1 + 1)/2 + 1;
168
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
169
}// end loop over 'r'
170
for (unsigned int r = 0; r < 2; r++)
172
for (unsigned int s = 0; s < 2 - r; s++)
174
rr = (r + s)*(r + s + 1)/2 + s;
175
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
176
}// end loop over 's'
177
}// end loop over 'r'
179
// Table(s) of coefficients.
180
static const double coefficients0[3] = \
181
{0.47140452, 0.28867513, -0.16666667};
184
for (unsigned int r = 0; r < 3; r++)
186
*values += coefficients0[r]*basisvalues[r];
187
}// end loop over 'r'
193
// Array of basisvalues.
194
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
196
// Declare helper variables.
199
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
201
// Compute basisvalues.
202
basisvalues[0] = 1.00000000;
203
basisvalues[1] = tmp0;
204
for (unsigned int r = 0; r < 1; r++)
206
rr = (r + 1)*(r + 1 + 1)/2 + 1;
208
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
209
}// end loop over 'r'
210
for (unsigned int r = 0; r < 2; r++)
212
for (unsigned int s = 0; s < 2 - r; s++)
214
rr = (r + s)*(r + s + 1)/2 + s;
215
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
216
}// end loop over 's'
217
}// end loop over 'r'
219
// Table(s) of coefficients.
220
static const double coefficients0[3] = \
221
{0.47140452, 0.00000000, 0.33333333};
224
for (unsigned int r = 0; r < 3; r++)
226
*values += coefficients0[r]*basisvalues[r];
227
}// end loop over 'r'
151
234
/// Evaluate all basis functions at given point in cell
261
344
values[r] = 0.00000000;
262
345
}// end loop over 'r'
264
// Map degree of freedom to element degree of freedom
265
const unsigned int dof = i;
267
// Array of basisvalues.
268
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
270
// Declare helper variables.
273
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
275
// Compute basisvalues.
276
basisvalues[0] = 1.00000000;
277
basisvalues[1] = tmp0;
278
for (unsigned int r = 0; r < 1; r++)
280
rr = (r + 1)*(r + 1 + 1)/2 + 1;
282
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
283
}// end loop over 'r'
284
for (unsigned int r = 0; r < 2; r++)
286
for (unsigned int s = 0; s < 2 - r; s++)
288
rr = (r + s)*(r + s + 1)/2 + s;
289
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
290
}// end loop over 's'
291
}// end loop over 'r'
293
// Table(s) of coefficients.
294
static const double coefficients0[3][3] = \
295
{{0.47140452, -0.28867513, -0.16666667},
296
{0.47140452, 0.28867513, -0.16666667},
297
{0.47140452, 0.00000000, 0.33333333}};
299
// Tables of derivatives of the polynomial base (transpose).
300
static const double dmats0[3][3] = \
301
{{0.00000000, 0.00000000, 0.00000000},
302
{4.89897949, 0.00000000, 0.00000000},
303
{0.00000000, 0.00000000, 0.00000000}};
305
static const double dmats1[3][3] = \
306
{{0.00000000, 0.00000000, 0.00000000},
307
{2.44948974, 0.00000000, 0.00000000},
308
{4.24264069, 0.00000000, 0.00000000}};
310
// Compute reference derivatives.
311
// Declare pointer to array of derivatives on FIAT element.
312
double *derivatives = new double[num_derivatives];
313
for (unsigned int r = 0; r < num_derivatives; r++)
315
derivatives[r] = 0.00000000;
316
}// end loop over 'r'
318
// Declare derivative matrix (of polynomial basis).
319
double dmats[3][3] = \
320
{{1.00000000, 0.00000000, 0.00000000},
321
{0.00000000, 1.00000000, 0.00000000},
322
{0.00000000, 0.00000000, 1.00000000}};
324
// Declare (auxiliary) derivative matrix (of polynomial basis).
325
double dmats_old[3][3] = \
326
{{1.00000000, 0.00000000, 0.00000000},
327
{0.00000000, 1.00000000, 0.00000000},
328
{0.00000000, 0.00000000, 1.00000000}};
330
// Loop possible derivatives.
331
for (unsigned int r = 0; r < num_derivatives; r++)
333
// Resetting dmats values to compute next derivative.
334
for (unsigned int t = 0; t < 3; t++)
336
for (unsigned int u = 0; u < 3; u++)
338
dmats[t][u] = 0.00000000;
341
dmats[t][u] = 1.00000000;
344
}// end loop over 'u'
345
}// end loop over 't'
347
// Looping derivative order to generate dmats.
348
for (unsigned int s = 0; s < n; s++)
350
// Updating dmats_old with new values and resetting dmats.
351
for (unsigned int t = 0; t < 3; t++)
353
for (unsigned int u = 0; u < 3; u++)
355
dmats_old[t][u] = dmats[t][u];
356
dmats[t][u] = 0.00000000;
357
}// end loop over 'u'
358
}// end loop over 't'
360
// Update dmats using an inner product.
361
if (combinations[r][s] == 0)
363
for (unsigned int t = 0; t < 3; t++)
365
for (unsigned int u = 0; u < 3; u++)
367
for (unsigned int tu = 0; tu < 3; tu++)
369
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
370
}// end loop over 'tu'
371
}// end loop over 'u'
372
}// end loop over 't'
375
if (combinations[r][s] == 1)
377
for (unsigned int t = 0; t < 3; t++)
379
for (unsigned int u = 0; u < 3; u++)
381
for (unsigned int tu = 0; tu < 3; tu++)
383
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
384
}// end loop over 'tu'
385
}// end loop over 'u'
386
}// end loop over 't'
389
}// end loop over 's'
390
for (unsigned int s = 0; s < 3; s++)
392
for (unsigned int t = 0; t < 3; t++)
394
derivatives[r] += coefficients0[dof][s]*dmats[s][t]*basisvalues[t];
395
}// end loop over 't'
396
}// end loop over 's'
397
}// end loop over 'r'
399
// Transform derivatives back to physical element
400
for (unsigned int r = 0; r < num_derivatives; r++)
402
for (unsigned int s = 0; s < num_derivatives; s++)
404
values[r] += transform[r][s]*derivatives[s];
405
}// end loop over 's'
406
}// end loop over 'r'
408
// Delete pointer to array of derivatives on FIAT element
409
delete [] derivatives;
411
// Delete pointer to array of combinations of derivatives and transform
412
for (unsigned int r = 0; r < num_derivatives; r++)
414
delete [] combinations[r];
415
}// end loop over 'r'
416
delete [] combinations;
417
for (unsigned int r = 0; r < num_derivatives; r++)
419
delete [] transform[r];
420
}// end loop over 'r'
352
// Array of basisvalues.
353
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
355
// Declare helper variables.
358
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
360
// Compute basisvalues.
361
basisvalues[0] = 1.00000000;
362
basisvalues[1] = tmp0;
363
for (unsigned int r = 0; r < 1; r++)
365
rr = (r + 1)*(r + 1 + 1)/2 + 1;
367
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
368
}// end loop over 'r'
369
for (unsigned int r = 0; r < 2; r++)
371
for (unsigned int s = 0; s < 2 - r; s++)
373
rr = (r + s)*(r + s + 1)/2 + s;
374
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
375
}// end loop over 's'
376
}// end loop over 'r'
378
// Table(s) of coefficients.
379
static const double coefficients0[3] = \
380
{0.47140452, -0.28867513, -0.16666667};
382
// Tables of derivatives of the polynomial base (transpose).
383
static const double dmats0[3][3] = \
384
{{0.00000000, 0.00000000, 0.00000000},
385
{4.89897949, 0.00000000, 0.00000000},
386
{0.00000000, 0.00000000, 0.00000000}};
388
static const double dmats1[3][3] = \
389
{{0.00000000, 0.00000000, 0.00000000},
390
{2.44948974, 0.00000000, 0.00000000},
391
{4.24264069, 0.00000000, 0.00000000}};
393
// Compute reference derivatives.
394
// Declare pointer to array of derivatives on FIAT element.
395
double *derivatives = new double[num_derivatives];
396
for (unsigned int r = 0; r < num_derivatives; r++)
398
derivatives[r] = 0.00000000;
399
}// end loop over 'r'
401
// Declare derivative matrix (of polynomial basis).
402
double dmats[3][3] = \
403
{{1.00000000, 0.00000000, 0.00000000},
404
{0.00000000, 1.00000000, 0.00000000},
405
{0.00000000, 0.00000000, 1.00000000}};
407
// Declare (auxiliary) derivative matrix (of polynomial basis).
408
double dmats_old[3][3] = \
409
{{1.00000000, 0.00000000, 0.00000000},
410
{0.00000000, 1.00000000, 0.00000000},
411
{0.00000000, 0.00000000, 1.00000000}};
413
// Loop possible derivatives.
414
for (unsigned int r = 0; r < num_derivatives; r++)
416
// Resetting dmats values to compute next derivative.
417
for (unsigned int t = 0; t < 3; t++)
419
for (unsigned int u = 0; u < 3; u++)
421
dmats[t][u] = 0.00000000;
424
dmats[t][u] = 1.00000000;
427
}// end loop over 'u'
428
}// end loop over 't'
430
// Looping derivative order to generate dmats.
431
for (unsigned int s = 0; s < n; s++)
433
// Updating dmats_old with new values and resetting dmats.
434
for (unsigned int t = 0; t < 3; t++)
436
for (unsigned int u = 0; u < 3; u++)
438
dmats_old[t][u] = dmats[t][u];
439
dmats[t][u] = 0.00000000;
440
}// end loop over 'u'
441
}// end loop over 't'
443
// Update dmats using an inner product.
444
if (combinations[r][s] == 0)
446
for (unsigned int t = 0; t < 3; t++)
448
for (unsigned int u = 0; u < 3; u++)
450
for (unsigned int tu = 0; tu < 3; tu++)
452
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
453
}// end loop over 'tu'
454
}// end loop over 'u'
455
}// end loop over 't'
458
if (combinations[r][s] == 1)
460
for (unsigned int t = 0; t < 3; t++)
462
for (unsigned int u = 0; u < 3; u++)
464
for (unsigned int tu = 0; tu < 3; tu++)
466
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
467
}// end loop over 'tu'
468
}// end loop over 'u'
469
}// end loop over 't'
472
}// end loop over 's'
473
for (unsigned int s = 0; s < 3; s++)
475
for (unsigned int t = 0; t < 3; t++)
477
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
478
}// end loop over 't'
479
}// end loop over 's'
480
}// end loop over 'r'
482
// Transform derivatives back to physical element
483
for (unsigned int r = 0; r < num_derivatives; r++)
485
for (unsigned int s = 0; s < num_derivatives; s++)
487
values[r] += transform[r][s]*derivatives[s];
488
}// end loop over 's'
489
}// end loop over 'r'
491
// Delete pointer to array of derivatives on FIAT element
492
delete [] derivatives;
494
// Delete pointer to array of combinations of derivatives and transform
495
for (unsigned int r = 0; r < num_derivatives; r++)
497
delete [] combinations[r];
498
}// end loop over 'r'
499
delete [] combinations;
500
for (unsigned int r = 0; r < num_derivatives; r++)
502
delete [] transform[r];
503
}// end loop over 'r'
510
// Array of basisvalues.
511
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
513
// Declare helper variables.
516
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
518
// Compute basisvalues.
519
basisvalues[0] = 1.00000000;
520
basisvalues[1] = tmp0;
521
for (unsigned int r = 0; r < 1; r++)
523
rr = (r + 1)*(r + 1 + 1)/2 + 1;
525
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
526
}// end loop over 'r'
527
for (unsigned int r = 0; r < 2; r++)
529
for (unsigned int s = 0; s < 2 - r; s++)
531
rr = (r + s)*(r + s + 1)/2 + s;
532
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
533
}// end loop over 's'
534
}// end loop over 'r'
536
// Table(s) of coefficients.
537
static const double coefficients0[3] = \
538
{0.47140452, 0.28867513, -0.16666667};
540
// Tables of derivatives of the polynomial base (transpose).
541
static const double dmats0[3][3] = \
542
{{0.00000000, 0.00000000, 0.00000000},
543
{4.89897949, 0.00000000, 0.00000000},
544
{0.00000000, 0.00000000, 0.00000000}};
546
static const double dmats1[3][3] = \
547
{{0.00000000, 0.00000000, 0.00000000},
548
{2.44948974, 0.00000000, 0.00000000},
549
{4.24264069, 0.00000000, 0.00000000}};
551
// Compute reference derivatives.
552
// Declare pointer to array of derivatives on FIAT element.
553
double *derivatives = new double[num_derivatives];
554
for (unsigned int r = 0; r < num_derivatives; r++)
556
derivatives[r] = 0.00000000;
557
}// end loop over 'r'
559
// Declare derivative matrix (of polynomial basis).
560
double dmats[3][3] = \
561
{{1.00000000, 0.00000000, 0.00000000},
562
{0.00000000, 1.00000000, 0.00000000},
563
{0.00000000, 0.00000000, 1.00000000}};
565
// Declare (auxiliary) derivative matrix (of polynomial basis).
566
double dmats_old[3][3] = \
567
{{1.00000000, 0.00000000, 0.00000000},
568
{0.00000000, 1.00000000, 0.00000000},
569
{0.00000000, 0.00000000, 1.00000000}};
571
// Loop possible derivatives.
572
for (unsigned int r = 0; r < num_derivatives; r++)
574
// Resetting dmats values to compute next derivative.
575
for (unsigned int t = 0; t < 3; t++)
577
for (unsigned int u = 0; u < 3; u++)
579
dmats[t][u] = 0.00000000;
582
dmats[t][u] = 1.00000000;
585
}// end loop over 'u'
586
}// end loop over 't'
588
// Looping derivative order to generate dmats.
589
for (unsigned int s = 0; s < n; s++)
591
// Updating dmats_old with new values and resetting dmats.
592
for (unsigned int t = 0; t < 3; t++)
594
for (unsigned int u = 0; u < 3; u++)
596
dmats_old[t][u] = dmats[t][u];
597
dmats[t][u] = 0.00000000;
598
}// end loop over 'u'
599
}// end loop over 't'
601
// Update dmats using an inner product.
602
if (combinations[r][s] == 0)
604
for (unsigned int t = 0; t < 3; t++)
606
for (unsigned int u = 0; u < 3; u++)
608
for (unsigned int tu = 0; tu < 3; tu++)
610
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
611
}// end loop over 'tu'
612
}// end loop over 'u'
613
}// end loop over 't'
616
if (combinations[r][s] == 1)
618
for (unsigned int t = 0; t < 3; t++)
620
for (unsigned int u = 0; u < 3; u++)
622
for (unsigned int tu = 0; tu < 3; tu++)
624
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
625
}// end loop over 'tu'
626
}// end loop over 'u'
627
}// end loop over 't'
630
}// end loop over 's'
631
for (unsigned int s = 0; s < 3; s++)
633
for (unsigned int t = 0; t < 3; t++)
635
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
636
}// end loop over 't'
637
}// end loop over 's'
638
}// end loop over 'r'
640
// Transform derivatives back to physical element
641
for (unsigned int r = 0; r < num_derivatives; r++)
643
for (unsigned int s = 0; s < num_derivatives; s++)
645
values[r] += transform[r][s]*derivatives[s];
646
}// end loop over 's'
647
}// end loop over 'r'
649
// Delete pointer to array of derivatives on FIAT element
650
delete [] derivatives;
652
// Delete pointer to array of combinations of derivatives and transform
653
for (unsigned int r = 0; r < num_derivatives; r++)
655
delete [] combinations[r];
656
}// end loop over 'r'
657
delete [] combinations;
658
for (unsigned int r = 0; r < num_derivatives; r++)
660
delete [] transform[r];
661
}// end loop over 'r'
668
// Array of basisvalues.
669
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
671
// Declare helper variables.
674
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
676
// Compute basisvalues.
677
basisvalues[0] = 1.00000000;
678
basisvalues[1] = tmp0;
679
for (unsigned int r = 0; r < 1; r++)
681
rr = (r + 1)*(r + 1 + 1)/2 + 1;
683
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
684
}// end loop over 'r'
685
for (unsigned int r = 0; r < 2; r++)
687
for (unsigned int s = 0; s < 2 - r; s++)
689
rr = (r + s)*(r + s + 1)/2 + s;
690
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
691
}// end loop over 's'
692
}// end loop over 'r'
694
// Table(s) of coefficients.
695
static const double coefficients0[3] = \
696
{0.47140452, 0.00000000, 0.33333333};
698
// Tables of derivatives of the polynomial base (transpose).
699
static const double dmats0[3][3] = \
700
{{0.00000000, 0.00000000, 0.00000000},
701
{4.89897949, 0.00000000, 0.00000000},
702
{0.00000000, 0.00000000, 0.00000000}};
704
static const double dmats1[3][3] = \
705
{{0.00000000, 0.00000000, 0.00000000},
706
{2.44948974, 0.00000000, 0.00000000},
707
{4.24264069, 0.00000000, 0.00000000}};
709
// Compute reference derivatives.
710
// Declare pointer to array of derivatives on FIAT element.
711
double *derivatives = new double[num_derivatives];
712
for (unsigned int r = 0; r < num_derivatives; r++)
714
derivatives[r] = 0.00000000;
715
}// end loop over 'r'
717
// Declare derivative matrix (of polynomial basis).
718
double dmats[3][3] = \
719
{{1.00000000, 0.00000000, 0.00000000},
720
{0.00000000, 1.00000000, 0.00000000},
721
{0.00000000, 0.00000000, 1.00000000}};
723
// Declare (auxiliary) derivative matrix (of polynomial basis).
724
double dmats_old[3][3] = \
725
{{1.00000000, 0.00000000, 0.00000000},
726
{0.00000000, 1.00000000, 0.00000000},
727
{0.00000000, 0.00000000, 1.00000000}};
729
// Loop possible derivatives.
730
for (unsigned int r = 0; r < num_derivatives; r++)
732
// Resetting dmats values to compute next derivative.
733
for (unsigned int t = 0; t < 3; t++)
735
for (unsigned int u = 0; u < 3; u++)
737
dmats[t][u] = 0.00000000;
740
dmats[t][u] = 1.00000000;
743
}// end loop over 'u'
744
}// end loop over 't'
746
// Looping derivative order to generate dmats.
747
for (unsigned int s = 0; s < n; s++)
749
// Updating dmats_old with new values and resetting dmats.
750
for (unsigned int t = 0; t < 3; t++)
752
for (unsigned int u = 0; u < 3; u++)
754
dmats_old[t][u] = dmats[t][u];
755
dmats[t][u] = 0.00000000;
756
}// end loop over 'u'
757
}// end loop over 't'
759
// Update dmats using an inner product.
760
if (combinations[r][s] == 0)
762
for (unsigned int t = 0; t < 3; t++)
764
for (unsigned int u = 0; u < 3; u++)
766
for (unsigned int tu = 0; tu < 3; tu++)
768
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
769
}// end loop over 'tu'
770
}// end loop over 'u'
771
}// end loop over 't'
774
if (combinations[r][s] == 1)
776
for (unsigned int t = 0; t < 3; t++)
778
for (unsigned int u = 0; u < 3; u++)
780
for (unsigned int tu = 0; tu < 3; tu++)
782
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
783
}// end loop over 'tu'
784
}// end loop over 'u'
785
}// end loop over 't'
788
}// end loop over 's'
789
for (unsigned int s = 0; s < 3; s++)
791
for (unsigned int t = 0; t < 3; t++)
793
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
794
}// end loop over 't'
795
}// end loop over 's'
796
}// end loop over 'r'
798
// Transform derivatives back to physical element
799
for (unsigned int r = 0; r < num_derivatives; r++)
801
for (unsigned int s = 0; s < num_derivatives; s++)
803
values[r] += transform[r][s]*derivatives[s];
804
}// end loop over 's'
805
}// end loop over 'r'
807
// Delete pointer to array of derivatives on FIAT element
808
delete [] derivatives;
810
// Delete pointer to array of combinations of derivatives and transform
811
for (unsigned int r = 0; r < num_derivatives; r++)
813
delete [] combinations[r];
814
}// end loop over 'r'
815
delete [] combinations;
816
for (unsigned int r = 0; r < num_derivatives; r++)
818
delete [] transform[r];
819
}// end loop over 'r'
424
827
/// Evaluate order n derivatives of all basis functions at given point in cell