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
635
1038
// Reset values.
636
1039
values[0] = 0.00000000;
637
1040
values[1] = 0.00000000;
638
if (0 <= i && i <= 2)
640
// Map degree of freedom to element degree of freedom
641
const unsigned int dof = i;
643
// Array of basisvalues.
644
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
646
// Declare helper variables.
649
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
651
// Compute basisvalues.
652
basisvalues[0] = 1.00000000;
653
basisvalues[1] = tmp0;
654
for (unsigned int r = 0; r < 1; r++)
656
rr = (r + 1)*(r + 1 + 1)/2 + 1;
658
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
659
}// end loop over 'r'
660
for (unsigned int r = 0; r < 2; r++)
662
for (unsigned int s = 0; s < 2 - r; s++)
664
rr = (r + s)*(r + s + 1)/2 + s;
665
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
666
}// end loop over 's'
667
}// end loop over 'r'
669
// Table(s) of coefficients.
670
static const double coefficients0[3][3] = \
671
{{0.47140452, -0.28867513, -0.16666667},
672
{0.47140452, 0.28867513, -0.16666667},
673
{0.47140452, 0.00000000, 0.33333333}};
676
for (unsigned int r = 0; r < 3; r++)
678
values[0] += coefficients0[dof][r]*basisvalues[r];
679
}// end loop over 'r'
682
if (3 <= i && i <= 5)
684
// Map degree of freedom to element degree of freedom
685
const unsigned int dof = i - 3;
687
// Array of basisvalues.
688
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
690
// Declare helper variables.
693
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
695
// Compute basisvalues.
696
basisvalues[0] = 1.00000000;
697
basisvalues[1] = tmp0;
698
for (unsigned int r = 0; r < 1; r++)
700
rr = (r + 1)*(r + 1 + 1)/2 + 1;
702
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
703
}// end loop over 'r'
704
for (unsigned int r = 0; r < 2; r++)
706
for (unsigned int s = 0; s < 2 - r; s++)
708
rr = (r + s)*(r + s + 1)/2 + s;
709
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
710
}// end loop over 's'
711
}// end loop over 'r'
713
// Table(s) of coefficients.
714
static const double coefficients0[3][3] = \
715
{{0.47140452, -0.28867513, -0.16666667},
716
{0.47140452, 0.28867513, -0.16666667},
717
{0.47140452, 0.00000000, 0.33333333}};
720
for (unsigned int r = 0; r < 3; r++)
722
values[1] += coefficients0[dof][r]*basisvalues[r];
723
}// end loop over 'r'
1046
// Array of basisvalues.
1047
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1049
// Declare helper variables.
1050
unsigned int rr = 0;
1051
unsigned int ss = 0;
1052
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1054
// Compute basisvalues.
1055
basisvalues[0] = 1.00000000;
1056
basisvalues[1] = tmp0;
1057
for (unsigned int r = 0; r < 1; r++)
1059
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1061
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1062
}// end loop over 'r'
1063
for (unsigned int r = 0; r < 2; r++)
1065
for (unsigned int s = 0; s < 2 - r; s++)
1067
rr = (r + s)*(r + s + 1)/2 + s;
1068
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1069
}// end loop over 's'
1070
}// end loop over 'r'
1072
// Table(s) of coefficients.
1073
static const double coefficients0[3] = \
1074
{0.47140452, -0.28867513, -0.16666667};
1076
// Compute value(s).
1077
for (unsigned int r = 0; r < 3; r++)
1079
values[0] += coefficients0[r]*basisvalues[r];
1080
}// end loop over 'r'
1086
// Array of basisvalues.
1087
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1089
// Declare helper variables.
1090
unsigned int rr = 0;
1091
unsigned int ss = 0;
1092
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1094
// Compute basisvalues.
1095
basisvalues[0] = 1.00000000;
1096
basisvalues[1] = tmp0;
1097
for (unsigned int r = 0; r < 1; r++)
1099
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1101
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1102
}// end loop over 'r'
1103
for (unsigned int r = 0; r < 2; r++)
1105
for (unsigned int s = 0; s < 2 - r; s++)
1107
rr = (r + s)*(r + s + 1)/2 + s;
1108
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1109
}// end loop over 's'
1110
}// end loop over 'r'
1112
// Table(s) of coefficients.
1113
static const double coefficients0[3] = \
1114
{0.47140452, 0.28867513, -0.16666667};
1116
// Compute value(s).
1117
for (unsigned int r = 0; r < 3; r++)
1119
values[0] += coefficients0[r]*basisvalues[r];
1120
}// end loop over 'r'
1126
// Array of basisvalues.
1127
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1129
// Declare helper variables.
1130
unsigned int rr = 0;
1131
unsigned int ss = 0;
1132
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1134
// Compute basisvalues.
1135
basisvalues[0] = 1.00000000;
1136
basisvalues[1] = tmp0;
1137
for (unsigned int r = 0; r < 1; r++)
1139
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1141
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1142
}// end loop over 'r'
1143
for (unsigned int r = 0; r < 2; r++)
1145
for (unsigned int s = 0; s < 2 - r; s++)
1147
rr = (r + s)*(r + s + 1)/2 + s;
1148
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1149
}// end loop over 's'
1150
}// end loop over 'r'
1152
// Table(s) of coefficients.
1153
static const double coefficients0[3] = \
1154
{0.47140452, 0.00000000, 0.33333333};
1156
// Compute value(s).
1157
for (unsigned int r = 0; r < 3; r++)
1159
values[0] += coefficients0[r]*basisvalues[r];
1160
}// end loop over 'r'
1166
// Array of basisvalues.
1167
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1169
// Declare helper variables.
1170
unsigned int rr = 0;
1171
unsigned int ss = 0;
1172
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1174
// Compute basisvalues.
1175
basisvalues[0] = 1.00000000;
1176
basisvalues[1] = tmp0;
1177
for (unsigned int r = 0; r < 1; r++)
1179
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1181
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1182
}// end loop over 'r'
1183
for (unsigned int r = 0; r < 2; r++)
1185
for (unsigned int s = 0; s < 2 - r; s++)
1187
rr = (r + s)*(r + s + 1)/2 + s;
1188
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1189
}// end loop over 's'
1190
}// end loop over 'r'
1192
// Table(s) of coefficients.
1193
static const double coefficients0[3] = \
1194
{0.47140452, -0.28867513, -0.16666667};
1196
// Compute value(s).
1197
for (unsigned int r = 0; r < 3; r++)
1199
values[1] += coefficients0[r]*basisvalues[r];
1200
}// end loop over 'r'
1206
// Array of basisvalues.
1207
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1209
// Declare helper variables.
1210
unsigned int rr = 0;
1211
unsigned int ss = 0;
1212
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1214
// Compute basisvalues.
1215
basisvalues[0] = 1.00000000;
1216
basisvalues[1] = tmp0;
1217
for (unsigned int r = 0; r < 1; r++)
1219
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1221
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1222
}// end loop over 'r'
1223
for (unsigned int r = 0; r < 2; r++)
1225
for (unsigned int s = 0; s < 2 - r; s++)
1227
rr = (r + s)*(r + s + 1)/2 + s;
1228
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1229
}// end loop over 's'
1230
}// end loop over 'r'
1232
// Table(s) of coefficients.
1233
static const double coefficients0[3] = \
1234
{0.47140452, 0.28867513, -0.16666667};
1236
// Compute value(s).
1237
for (unsigned int r = 0; r < 3; r++)
1239
values[1] += coefficients0[r]*basisvalues[r];
1240
}// end loop over 'r'
1246
// Array of basisvalues.
1247
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1249
// Declare helper variables.
1250
unsigned int rr = 0;
1251
unsigned int ss = 0;
1252
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1254
// Compute basisvalues.
1255
basisvalues[0] = 1.00000000;
1256
basisvalues[1] = tmp0;
1257
for (unsigned int r = 0; r < 1; r++)
1259
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1261
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1262
}// end loop over 'r'
1263
for (unsigned int r = 0; r < 2; r++)
1265
for (unsigned int s = 0; s < 2 - r; s++)
1267
rr = (r + s)*(r + s + 1)/2 + s;
1268
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1269
}// end loop over 's'
1270
}// end loop over 'r'
1272
// Table(s) of coefficients.
1273
static const double coefficients0[3] = \
1274
{0.47140452, 0.00000000, 0.33333333};
1276
// Compute value(s).
1277
for (unsigned int r = 0; r < 3; r++)
1279
values[1] += coefficients0[r]*basisvalues[r];
1280
}// end loop over 'r'
841
1400
values[r] = 0.00000000;
842
1401
}// end loop over 'r'
844
if (0 <= i && i <= 2)
846
// Map degree of freedom to element degree of freedom
847
const unsigned int dof = i;
849
// Array of basisvalues.
850
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
852
// Declare helper variables.
855
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
857
// Compute basisvalues.
858
basisvalues[0] = 1.00000000;
859
basisvalues[1] = tmp0;
860
for (unsigned int r = 0; r < 1; r++)
862
rr = (r + 1)*(r + 1 + 1)/2 + 1;
864
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
865
}// end loop over 'r'
866
for (unsigned int r = 0; r < 2; r++)
868
for (unsigned int s = 0; s < 2 - r; s++)
870
rr = (r + s)*(r + s + 1)/2 + s;
871
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
872
}// end loop over 's'
873
}// end loop over 'r'
875
// Table(s) of coefficients.
876
static const double coefficients0[3][3] = \
877
{{0.47140452, -0.28867513, -0.16666667},
878
{0.47140452, 0.28867513, -0.16666667},
879
{0.47140452, 0.00000000, 0.33333333}};
881
// Tables of derivatives of the polynomial base (transpose).
882
static const double dmats0[3][3] = \
883
{{0.00000000, 0.00000000, 0.00000000},
884
{4.89897949, 0.00000000, 0.00000000},
885
{0.00000000, 0.00000000, 0.00000000}};
887
static const double dmats1[3][3] = \
888
{{0.00000000, 0.00000000, 0.00000000},
889
{2.44948974, 0.00000000, 0.00000000},
890
{4.24264069, 0.00000000, 0.00000000}};
892
// Compute reference derivatives.
893
// Declare pointer to array of derivatives on FIAT element.
894
double *derivatives = new double[num_derivatives];
895
for (unsigned int r = 0; r < num_derivatives; r++)
897
derivatives[r] = 0.00000000;
898
}// end loop over 'r'
900
// Declare derivative matrix (of polynomial basis).
901
double dmats[3][3] = \
902
{{1.00000000, 0.00000000, 0.00000000},
903
{0.00000000, 1.00000000, 0.00000000},
904
{0.00000000, 0.00000000, 1.00000000}};
906
// Declare (auxiliary) derivative matrix (of polynomial basis).
907
double dmats_old[3][3] = \
908
{{1.00000000, 0.00000000, 0.00000000},
909
{0.00000000, 1.00000000, 0.00000000},
910
{0.00000000, 0.00000000, 1.00000000}};
912
// Loop possible derivatives.
913
for (unsigned int r = 0; r < num_derivatives; r++)
915
// Resetting dmats values to compute next derivative.
916
for (unsigned int t = 0; t < 3; t++)
918
for (unsigned int u = 0; u < 3; u++)
920
dmats[t][u] = 0.00000000;
923
dmats[t][u] = 1.00000000;
926
}// end loop over 'u'
927
}// end loop over 't'
929
// Looping derivative order to generate dmats.
930
for (unsigned int s = 0; s < n; s++)
932
// Updating dmats_old with new values and resetting dmats.
933
for (unsigned int t = 0; t < 3; t++)
935
for (unsigned int u = 0; u < 3; u++)
937
dmats_old[t][u] = dmats[t][u];
938
dmats[t][u] = 0.00000000;
939
}// end loop over 'u'
940
}// end loop over 't'
942
// Update dmats using an inner product.
943
if (combinations[r][s] == 0)
945
for (unsigned int t = 0; t < 3; t++)
947
for (unsigned int u = 0; u < 3; u++)
949
for (unsigned int tu = 0; tu < 3; tu++)
951
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
952
}// end loop over 'tu'
953
}// end loop over 'u'
954
}// end loop over 't'
957
if (combinations[r][s] == 1)
959
for (unsigned int t = 0; t < 3; t++)
961
for (unsigned int u = 0; u < 3; u++)
963
for (unsigned int tu = 0; tu < 3; tu++)
965
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
966
}// end loop over 'tu'
967
}// end loop over 'u'
968
}// end loop over 't'
971
}// end loop over 's'
972
for (unsigned int s = 0; s < 3; s++)
974
for (unsigned int t = 0; t < 3; t++)
976
derivatives[r] += coefficients0[dof][s]*dmats[s][t]*basisvalues[t];
977
}// end loop over 't'
978
}// end loop over 's'
979
}// end loop over 'r'
981
// Transform derivatives back to physical element
982
for (unsigned int r = 0; r < num_derivatives; r++)
984
for (unsigned int s = 0; s < num_derivatives; s++)
986
values[r] += transform[r][s]*derivatives[s];
987
}// end loop over 's'
988
}// end loop over 'r'
990
// Delete pointer to array of derivatives on FIAT element
991
delete [] derivatives;
993
// Delete pointer to array of combinations of derivatives and transform
994
for (unsigned int r = 0; r < num_derivatives; r++)
996
delete [] combinations[r];
997
}// end loop over 'r'
998
delete [] combinations;
999
for (unsigned int r = 0; r < num_derivatives; r++)
1001
delete [] transform[r];
1002
}// end loop over 'r'
1003
delete [] transform;
1006
if (3 <= i && i <= 5)
1008
// Map degree of freedom to element degree of freedom
1009
const unsigned int dof = i - 3;
1011
// Array of basisvalues.
1012
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1014
// Declare helper variables.
1015
unsigned int rr = 0;
1016
unsigned int ss = 0;
1017
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1019
// Compute basisvalues.
1020
basisvalues[0] = 1.00000000;
1021
basisvalues[1] = tmp0;
1022
for (unsigned int r = 0; r < 1; r++)
1024
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1026
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1027
}// end loop over 'r'
1028
for (unsigned int r = 0; r < 2; r++)
1030
for (unsigned int s = 0; s < 2 - r; s++)
1032
rr = (r + s)*(r + s + 1)/2 + s;
1033
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1034
}// end loop over 's'
1035
}// end loop over 'r'
1037
// Table(s) of coefficients.
1038
static const double coefficients0[3][3] = \
1039
{{0.47140452, -0.28867513, -0.16666667},
1040
{0.47140452, 0.28867513, -0.16666667},
1041
{0.47140452, 0.00000000, 0.33333333}};
1043
// Tables of derivatives of the polynomial base (transpose).
1044
static const double dmats0[3][3] = \
1045
{{0.00000000, 0.00000000, 0.00000000},
1046
{4.89897949, 0.00000000, 0.00000000},
1047
{0.00000000, 0.00000000, 0.00000000}};
1049
static const double dmats1[3][3] = \
1050
{{0.00000000, 0.00000000, 0.00000000},
1051
{2.44948974, 0.00000000, 0.00000000},
1052
{4.24264069, 0.00000000, 0.00000000}};
1054
// Compute reference derivatives.
1055
// Declare pointer to array of derivatives on FIAT element.
1056
double *derivatives = new double[num_derivatives];
1057
for (unsigned int r = 0; r < num_derivatives; r++)
1059
derivatives[r] = 0.00000000;
1060
}// end loop over 'r'
1062
// Declare derivative matrix (of polynomial basis).
1063
double dmats[3][3] = \
1064
{{1.00000000, 0.00000000, 0.00000000},
1065
{0.00000000, 1.00000000, 0.00000000},
1066
{0.00000000, 0.00000000, 1.00000000}};
1068
// Declare (auxiliary) derivative matrix (of polynomial basis).
1069
double dmats_old[3][3] = \
1070
{{1.00000000, 0.00000000, 0.00000000},
1071
{0.00000000, 1.00000000, 0.00000000},
1072
{0.00000000, 0.00000000, 1.00000000}};
1074
// Loop possible derivatives.
1075
for (unsigned int r = 0; r < num_derivatives; r++)
1077
// Resetting dmats values to compute next derivative.
1078
for (unsigned int t = 0; t < 3; t++)
1080
for (unsigned int u = 0; u < 3; u++)
1082
dmats[t][u] = 0.00000000;
1085
dmats[t][u] = 1.00000000;
1088
}// end loop over 'u'
1089
}// end loop over 't'
1091
// Looping derivative order to generate dmats.
1092
for (unsigned int s = 0; s < n; s++)
1094
// Updating dmats_old with new values and resetting dmats.
1095
for (unsigned int t = 0; t < 3; t++)
1097
for (unsigned int u = 0; u < 3; u++)
1099
dmats_old[t][u] = dmats[t][u];
1100
dmats[t][u] = 0.00000000;
1101
}// end loop over 'u'
1102
}// end loop over 't'
1104
// Update dmats using an inner product.
1105
if (combinations[r][s] == 0)
1107
for (unsigned int t = 0; t < 3; t++)
1109
for (unsigned int u = 0; u < 3; u++)
1111
for (unsigned int tu = 0; tu < 3; tu++)
1113
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1114
}// end loop over 'tu'
1115
}// end loop over 'u'
1116
}// end loop over 't'
1119
if (combinations[r][s] == 1)
1121
for (unsigned int t = 0; t < 3; t++)
1123
for (unsigned int u = 0; u < 3; u++)
1125
for (unsigned int tu = 0; tu < 3; tu++)
1127
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1128
}// end loop over 'tu'
1129
}// end loop over 'u'
1130
}// end loop over 't'
1133
}// end loop over 's'
1134
for (unsigned int s = 0; s < 3; s++)
1136
for (unsigned int t = 0; t < 3; t++)
1138
derivatives[r] += coefficients0[dof][s]*dmats[s][t]*basisvalues[t];
1139
}// end loop over 't'
1140
}// end loop over 's'
1141
}// end loop over 'r'
1143
// Transform derivatives back to physical element
1144
for (unsigned int r = 0; r < num_derivatives; r++)
1146
for (unsigned int s = 0; s < num_derivatives; s++)
1148
values[num_derivatives + r] += transform[r][s]*derivatives[s];
1149
}// end loop over 's'
1150
}// end loop over 'r'
1152
// Delete pointer to array of derivatives on FIAT element
1153
delete [] derivatives;
1155
// Delete pointer to array of combinations of derivatives and transform
1156
for (unsigned int r = 0; r < num_derivatives; r++)
1158
delete [] combinations[r];
1159
}// end loop over 'r'
1160
delete [] combinations;
1161
for (unsigned int r = 0; r < num_derivatives; r++)
1163
delete [] transform[r];
1164
}// end loop over 'r'
1165
delete [] transform;
1408
// Array of basisvalues.
1409
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1411
// Declare helper variables.
1412
unsigned int rr = 0;
1413
unsigned int ss = 0;
1414
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1416
// Compute basisvalues.
1417
basisvalues[0] = 1.00000000;
1418
basisvalues[1] = tmp0;
1419
for (unsigned int r = 0; r < 1; r++)
1421
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1423
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1424
}// end loop over 'r'
1425
for (unsigned int r = 0; r < 2; r++)
1427
for (unsigned int s = 0; s < 2 - r; s++)
1429
rr = (r + s)*(r + s + 1)/2 + s;
1430
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1431
}// end loop over 's'
1432
}// end loop over 'r'
1434
// Table(s) of coefficients.
1435
static const double coefficients0[3] = \
1436
{0.47140452, -0.28867513, -0.16666667};
1438
// Tables of derivatives of the polynomial base (transpose).
1439
static const double dmats0[3][3] = \
1440
{{0.00000000, 0.00000000, 0.00000000},
1441
{4.89897949, 0.00000000, 0.00000000},
1442
{0.00000000, 0.00000000, 0.00000000}};
1444
static const double dmats1[3][3] = \
1445
{{0.00000000, 0.00000000, 0.00000000},
1446
{2.44948974, 0.00000000, 0.00000000},
1447
{4.24264069, 0.00000000, 0.00000000}};
1449
// Compute reference derivatives.
1450
// Declare pointer to array of derivatives on FIAT element.
1451
double *derivatives = new double[num_derivatives];
1452
for (unsigned int r = 0; r < num_derivatives; r++)
1454
derivatives[r] = 0.00000000;
1455
}// end loop over 'r'
1457
// Declare derivative matrix (of polynomial basis).
1458
double dmats[3][3] = \
1459
{{1.00000000, 0.00000000, 0.00000000},
1460
{0.00000000, 1.00000000, 0.00000000},
1461
{0.00000000, 0.00000000, 1.00000000}};
1463
// Declare (auxiliary) derivative matrix (of polynomial basis).
1464
double dmats_old[3][3] = \
1465
{{1.00000000, 0.00000000, 0.00000000},
1466
{0.00000000, 1.00000000, 0.00000000},
1467
{0.00000000, 0.00000000, 1.00000000}};
1469
// Loop possible derivatives.
1470
for (unsigned int r = 0; r < num_derivatives; r++)
1472
// Resetting dmats values to compute next derivative.
1473
for (unsigned int t = 0; t < 3; t++)
1475
for (unsigned int u = 0; u < 3; u++)
1477
dmats[t][u] = 0.00000000;
1480
dmats[t][u] = 1.00000000;
1483
}// end loop over 'u'
1484
}// end loop over 't'
1486
// Looping derivative order to generate dmats.
1487
for (unsigned int s = 0; s < n; s++)
1489
// Updating dmats_old with new values and resetting dmats.
1490
for (unsigned int t = 0; t < 3; t++)
1492
for (unsigned int u = 0; u < 3; u++)
1494
dmats_old[t][u] = dmats[t][u];
1495
dmats[t][u] = 0.00000000;
1496
}// end loop over 'u'
1497
}// end loop over 't'
1499
// Update dmats using an inner product.
1500
if (combinations[r][s] == 0)
1502
for (unsigned int t = 0; t < 3; t++)
1504
for (unsigned int u = 0; u < 3; u++)
1506
for (unsigned int tu = 0; tu < 3; tu++)
1508
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1509
}// end loop over 'tu'
1510
}// end loop over 'u'
1511
}// end loop over 't'
1514
if (combinations[r][s] == 1)
1516
for (unsigned int t = 0; t < 3; t++)
1518
for (unsigned int u = 0; u < 3; u++)
1520
for (unsigned int tu = 0; tu < 3; tu++)
1522
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1523
}// end loop over 'tu'
1524
}// end loop over 'u'
1525
}// end loop over 't'
1528
}// end loop over 's'
1529
for (unsigned int s = 0; s < 3; s++)
1531
for (unsigned int t = 0; t < 3; t++)
1533
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1534
}// end loop over 't'
1535
}// end loop over 's'
1536
}// end loop over 'r'
1538
// Transform derivatives back to physical element
1539
for (unsigned int r = 0; r < num_derivatives; r++)
1541
for (unsigned int s = 0; s < num_derivatives; s++)
1543
values[r] += transform[r][s]*derivatives[s];
1544
}// end loop over 's'
1545
}// end loop over 'r'
1547
// Delete pointer to array of derivatives on FIAT element
1548
delete [] derivatives;
1550
// Delete pointer to array of combinations of derivatives and transform
1551
for (unsigned int r = 0; r < num_derivatives; r++)
1553
delete [] combinations[r];
1554
}// end loop over 'r'
1555
delete [] combinations;
1556
for (unsigned int r = 0; r < num_derivatives; r++)
1558
delete [] transform[r];
1559
}// end loop over 'r'
1560
delete [] transform;
1566
// Array of basisvalues.
1567
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1569
// Declare helper variables.
1570
unsigned int rr = 0;
1571
unsigned int ss = 0;
1572
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1574
// Compute basisvalues.
1575
basisvalues[0] = 1.00000000;
1576
basisvalues[1] = tmp0;
1577
for (unsigned int r = 0; r < 1; r++)
1579
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1581
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1582
}// end loop over 'r'
1583
for (unsigned int r = 0; r < 2; r++)
1585
for (unsigned int s = 0; s < 2 - r; s++)
1587
rr = (r + s)*(r + s + 1)/2 + s;
1588
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1589
}// end loop over 's'
1590
}// end loop over 'r'
1592
// Table(s) of coefficients.
1593
static const double coefficients0[3] = \
1594
{0.47140452, 0.28867513, -0.16666667};
1596
// Tables of derivatives of the polynomial base (transpose).
1597
static const double dmats0[3][3] = \
1598
{{0.00000000, 0.00000000, 0.00000000},
1599
{4.89897949, 0.00000000, 0.00000000},
1600
{0.00000000, 0.00000000, 0.00000000}};
1602
static const double dmats1[3][3] = \
1603
{{0.00000000, 0.00000000, 0.00000000},
1604
{2.44948974, 0.00000000, 0.00000000},
1605
{4.24264069, 0.00000000, 0.00000000}};
1607
// Compute reference derivatives.
1608
// Declare pointer to array of derivatives on FIAT element.
1609
double *derivatives = new double[num_derivatives];
1610
for (unsigned int r = 0; r < num_derivatives; r++)
1612
derivatives[r] = 0.00000000;
1613
}// end loop over 'r'
1615
// Declare derivative matrix (of polynomial basis).
1616
double dmats[3][3] = \
1617
{{1.00000000, 0.00000000, 0.00000000},
1618
{0.00000000, 1.00000000, 0.00000000},
1619
{0.00000000, 0.00000000, 1.00000000}};
1621
// Declare (auxiliary) derivative matrix (of polynomial basis).
1622
double dmats_old[3][3] = \
1623
{{1.00000000, 0.00000000, 0.00000000},
1624
{0.00000000, 1.00000000, 0.00000000},
1625
{0.00000000, 0.00000000, 1.00000000}};
1627
// Loop possible derivatives.
1628
for (unsigned int r = 0; r < num_derivatives; r++)
1630
// Resetting dmats values to compute next derivative.
1631
for (unsigned int t = 0; t < 3; t++)
1633
for (unsigned int u = 0; u < 3; u++)
1635
dmats[t][u] = 0.00000000;
1638
dmats[t][u] = 1.00000000;
1641
}// end loop over 'u'
1642
}// end loop over 't'
1644
// Looping derivative order to generate dmats.
1645
for (unsigned int s = 0; s < n; s++)
1647
// Updating dmats_old with new values and resetting dmats.
1648
for (unsigned int t = 0; t < 3; t++)
1650
for (unsigned int u = 0; u < 3; u++)
1652
dmats_old[t][u] = dmats[t][u];
1653
dmats[t][u] = 0.00000000;
1654
}// end loop over 'u'
1655
}// end loop over 't'
1657
// Update dmats using an inner product.
1658
if (combinations[r][s] == 0)
1660
for (unsigned int t = 0; t < 3; t++)
1662
for (unsigned int u = 0; u < 3; u++)
1664
for (unsigned int tu = 0; tu < 3; tu++)
1666
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1667
}// end loop over 'tu'
1668
}// end loop over 'u'
1669
}// end loop over 't'
1672
if (combinations[r][s] == 1)
1674
for (unsigned int t = 0; t < 3; t++)
1676
for (unsigned int u = 0; u < 3; u++)
1678
for (unsigned int tu = 0; tu < 3; tu++)
1680
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1681
}// end loop over 'tu'
1682
}// end loop over 'u'
1683
}// end loop over 't'
1686
}// end loop over 's'
1687
for (unsigned int s = 0; s < 3; s++)
1689
for (unsigned int t = 0; t < 3; t++)
1691
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1692
}// end loop over 't'
1693
}// end loop over 's'
1694
}// end loop over 'r'
1696
// Transform derivatives back to physical element
1697
for (unsigned int r = 0; r < num_derivatives; r++)
1699
for (unsigned int s = 0; s < num_derivatives; s++)
1701
values[r] += transform[r][s]*derivatives[s];
1702
}// end loop over 's'
1703
}// end loop over 'r'
1705
// Delete pointer to array of derivatives on FIAT element
1706
delete [] derivatives;
1708
// Delete pointer to array of combinations of derivatives and transform
1709
for (unsigned int r = 0; r < num_derivatives; r++)
1711
delete [] combinations[r];
1712
}// end loop over 'r'
1713
delete [] combinations;
1714
for (unsigned int r = 0; r < num_derivatives; r++)
1716
delete [] transform[r];
1717
}// end loop over 'r'
1718
delete [] transform;
1724
// Array of basisvalues.
1725
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1727
// Declare helper variables.
1728
unsigned int rr = 0;
1729
unsigned int ss = 0;
1730
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1732
// Compute basisvalues.
1733
basisvalues[0] = 1.00000000;
1734
basisvalues[1] = tmp0;
1735
for (unsigned int r = 0; r < 1; r++)
1737
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1739
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1740
}// end loop over 'r'
1741
for (unsigned int r = 0; r < 2; r++)
1743
for (unsigned int s = 0; s < 2 - r; s++)
1745
rr = (r + s)*(r + s + 1)/2 + s;
1746
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1747
}// end loop over 's'
1748
}// end loop over 'r'
1750
// Table(s) of coefficients.
1751
static const double coefficients0[3] = \
1752
{0.47140452, 0.00000000, 0.33333333};
1754
// Tables of derivatives of the polynomial base (transpose).
1755
static const double dmats0[3][3] = \
1756
{{0.00000000, 0.00000000, 0.00000000},
1757
{4.89897949, 0.00000000, 0.00000000},
1758
{0.00000000, 0.00000000, 0.00000000}};
1760
static const double dmats1[3][3] = \
1761
{{0.00000000, 0.00000000, 0.00000000},
1762
{2.44948974, 0.00000000, 0.00000000},
1763
{4.24264069, 0.00000000, 0.00000000}};
1765
// Compute reference derivatives.
1766
// Declare pointer to array of derivatives on FIAT element.
1767
double *derivatives = new double[num_derivatives];
1768
for (unsigned int r = 0; r < num_derivatives; r++)
1770
derivatives[r] = 0.00000000;
1771
}// end loop over 'r'
1773
// Declare derivative matrix (of polynomial basis).
1774
double dmats[3][3] = \
1775
{{1.00000000, 0.00000000, 0.00000000},
1776
{0.00000000, 1.00000000, 0.00000000},
1777
{0.00000000, 0.00000000, 1.00000000}};
1779
// Declare (auxiliary) derivative matrix (of polynomial basis).
1780
double dmats_old[3][3] = \
1781
{{1.00000000, 0.00000000, 0.00000000},
1782
{0.00000000, 1.00000000, 0.00000000},
1783
{0.00000000, 0.00000000, 1.00000000}};
1785
// Loop possible derivatives.
1786
for (unsigned int r = 0; r < num_derivatives; r++)
1788
// Resetting dmats values to compute next derivative.
1789
for (unsigned int t = 0; t < 3; t++)
1791
for (unsigned int u = 0; u < 3; u++)
1793
dmats[t][u] = 0.00000000;
1796
dmats[t][u] = 1.00000000;
1799
}// end loop over 'u'
1800
}// end loop over 't'
1802
// Looping derivative order to generate dmats.
1803
for (unsigned int s = 0; s < n; s++)
1805
// Updating dmats_old with new values and resetting dmats.
1806
for (unsigned int t = 0; t < 3; t++)
1808
for (unsigned int u = 0; u < 3; u++)
1810
dmats_old[t][u] = dmats[t][u];
1811
dmats[t][u] = 0.00000000;
1812
}// end loop over 'u'
1813
}// end loop over 't'
1815
// Update dmats using an inner product.
1816
if (combinations[r][s] == 0)
1818
for (unsigned int t = 0; t < 3; t++)
1820
for (unsigned int u = 0; u < 3; u++)
1822
for (unsigned int tu = 0; tu < 3; tu++)
1824
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1825
}// end loop over 'tu'
1826
}// end loop over 'u'
1827
}// end loop over 't'
1830
if (combinations[r][s] == 1)
1832
for (unsigned int t = 0; t < 3; t++)
1834
for (unsigned int u = 0; u < 3; u++)
1836
for (unsigned int tu = 0; tu < 3; tu++)
1838
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1839
}// end loop over 'tu'
1840
}// end loop over 'u'
1841
}// end loop over 't'
1844
}// end loop over 's'
1845
for (unsigned int s = 0; s < 3; s++)
1847
for (unsigned int t = 0; t < 3; t++)
1849
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1850
}// end loop over 't'
1851
}// end loop over 's'
1852
}// end loop over 'r'
1854
// Transform derivatives back to physical element
1855
for (unsigned int r = 0; r < num_derivatives; r++)
1857
for (unsigned int s = 0; s < num_derivatives; s++)
1859
values[r] += transform[r][s]*derivatives[s];
1860
}// end loop over 's'
1861
}// end loop over 'r'
1863
// Delete pointer to array of derivatives on FIAT element
1864
delete [] derivatives;
1866
// Delete pointer to array of combinations of derivatives and transform
1867
for (unsigned int r = 0; r < num_derivatives; r++)
1869
delete [] combinations[r];
1870
}// end loop over 'r'
1871
delete [] combinations;
1872
for (unsigned int r = 0; r < num_derivatives; r++)
1874
delete [] transform[r];
1875
}// end loop over 'r'
1876
delete [] transform;
1882
// Array of basisvalues.
1883
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1885
// Declare helper variables.
1886
unsigned int rr = 0;
1887
unsigned int ss = 0;
1888
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1890
// Compute basisvalues.
1891
basisvalues[0] = 1.00000000;
1892
basisvalues[1] = tmp0;
1893
for (unsigned int r = 0; r < 1; r++)
1895
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1897
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1898
}// end loop over 'r'
1899
for (unsigned int r = 0; r < 2; r++)
1901
for (unsigned int s = 0; s < 2 - r; s++)
1903
rr = (r + s)*(r + s + 1)/2 + s;
1904
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1905
}// end loop over 's'
1906
}// end loop over 'r'
1908
// Table(s) of coefficients.
1909
static const double coefficients0[3] = \
1910
{0.47140452, -0.28867513, -0.16666667};
1912
// Tables of derivatives of the polynomial base (transpose).
1913
static const double dmats0[3][3] = \
1914
{{0.00000000, 0.00000000, 0.00000000},
1915
{4.89897949, 0.00000000, 0.00000000},
1916
{0.00000000, 0.00000000, 0.00000000}};
1918
static const double dmats1[3][3] = \
1919
{{0.00000000, 0.00000000, 0.00000000},
1920
{2.44948974, 0.00000000, 0.00000000},
1921
{4.24264069, 0.00000000, 0.00000000}};
1923
// Compute reference derivatives.
1924
// Declare pointer to array of derivatives on FIAT element.
1925
double *derivatives = new double[num_derivatives];
1926
for (unsigned int r = 0; r < num_derivatives; r++)
1928
derivatives[r] = 0.00000000;
1929
}// end loop over 'r'
1931
// Declare derivative matrix (of polynomial basis).
1932
double dmats[3][3] = \
1933
{{1.00000000, 0.00000000, 0.00000000},
1934
{0.00000000, 1.00000000, 0.00000000},
1935
{0.00000000, 0.00000000, 1.00000000}};
1937
// Declare (auxiliary) derivative matrix (of polynomial basis).
1938
double dmats_old[3][3] = \
1939
{{1.00000000, 0.00000000, 0.00000000},
1940
{0.00000000, 1.00000000, 0.00000000},
1941
{0.00000000, 0.00000000, 1.00000000}};
1943
// Loop possible derivatives.
1944
for (unsigned int r = 0; r < num_derivatives; r++)
1946
// Resetting dmats values to compute next derivative.
1947
for (unsigned int t = 0; t < 3; t++)
1949
for (unsigned int u = 0; u < 3; u++)
1951
dmats[t][u] = 0.00000000;
1954
dmats[t][u] = 1.00000000;
1957
}// end loop over 'u'
1958
}// end loop over 't'
1960
// Looping derivative order to generate dmats.
1961
for (unsigned int s = 0; s < n; s++)
1963
// Updating dmats_old with new values and resetting dmats.
1964
for (unsigned int t = 0; t < 3; t++)
1966
for (unsigned int u = 0; u < 3; u++)
1968
dmats_old[t][u] = dmats[t][u];
1969
dmats[t][u] = 0.00000000;
1970
}// end loop over 'u'
1971
}// end loop over 't'
1973
// Update dmats using an inner product.
1974
if (combinations[r][s] == 0)
1976
for (unsigned int t = 0; t < 3; t++)
1978
for (unsigned int u = 0; u < 3; u++)
1980
for (unsigned int tu = 0; tu < 3; tu++)
1982
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1983
}// end loop over 'tu'
1984
}// end loop over 'u'
1985
}// end loop over 't'
1988
if (combinations[r][s] == 1)
1990
for (unsigned int t = 0; t < 3; t++)
1992
for (unsigned int u = 0; u < 3; u++)
1994
for (unsigned int tu = 0; tu < 3; tu++)
1996
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1997
}// end loop over 'tu'
1998
}// end loop over 'u'
1999
}// end loop over 't'
2002
}// end loop over 's'
2003
for (unsigned int s = 0; s < 3; s++)
2005
for (unsigned int t = 0; t < 3; t++)
2007
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2008
}// end loop over 't'
2009
}// end loop over 's'
2010
}// end loop over 'r'
2012
// Transform derivatives back to physical element
2013
for (unsigned int r = 0; r < num_derivatives; r++)
2015
for (unsigned int s = 0; s < num_derivatives; s++)
2017
values[num_derivatives + r] += transform[r][s]*derivatives[s];
2018
}// end loop over 's'
2019
}// end loop over 'r'
2021
// Delete pointer to array of derivatives on FIAT element
2022
delete [] derivatives;
2024
// Delete pointer to array of combinations of derivatives and transform
2025
for (unsigned int r = 0; r < num_derivatives; r++)
2027
delete [] combinations[r];
2028
}// end loop over 'r'
2029
delete [] combinations;
2030
for (unsigned int r = 0; r < num_derivatives; r++)
2032
delete [] transform[r];
2033
}// end loop over 'r'
2034
delete [] transform;
2040
// Array of basisvalues.
2041
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
2043
// Declare helper variables.
2044
unsigned int rr = 0;
2045
unsigned int ss = 0;
2046
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
2048
// Compute basisvalues.
2049
basisvalues[0] = 1.00000000;
2050
basisvalues[1] = tmp0;
2051
for (unsigned int r = 0; r < 1; r++)
2053
rr = (r + 1)*(r + 1 + 1)/2 + 1;
2055
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
2056
}// end loop over 'r'
2057
for (unsigned int r = 0; r < 2; r++)
2059
for (unsigned int s = 0; s < 2 - r; s++)
2061
rr = (r + s)*(r + s + 1)/2 + s;
2062
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
2063
}// end loop over 's'
2064
}// end loop over 'r'
2066
// Table(s) of coefficients.
2067
static const double coefficients0[3] = \
2068
{0.47140452, 0.28867513, -0.16666667};
2070
// Tables of derivatives of the polynomial base (transpose).
2071
static const double dmats0[3][3] = \
2072
{{0.00000000, 0.00000000, 0.00000000},
2073
{4.89897949, 0.00000000, 0.00000000},
2074
{0.00000000, 0.00000000, 0.00000000}};
2076
static const double dmats1[3][3] = \
2077
{{0.00000000, 0.00000000, 0.00000000},
2078
{2.44948974, 0.00000000, 0.00000000},
2079
{4.24264069, 0.00000000, 0.00000000}};
2081
// Compute reference derivatives.
2082
// Declare pointer to array of derivatives on FIAT element.
2083
double *derivatives = new double[num_derivatives];
2084
for (unsigned int r = 0; r < num_derivatives; r++)
2086
derivatives[r] = 0.00000000;
2087
}// end loop over 'r'
2089
// Declare derivative matrix (of polynomial basis).
2090
double dmats[3][3] = \
2091
{{1.00000000, 0.00000000, 0.00000000},
2092
{0.00000000, 1.00000000, 0.00000000},
2093
{0.00000000, 0.00000000, 1.00000000}};
2095
// Declare (auxiliary) derivative matrix (of polynomial basis).
2096
double dmats_old[3][3] = \
2097
{{1.00000000, 0.00000000, 0.00000000},
2098
{0.00000000, 1.00000000, 0.00000000},
2099
{0.00000000, 0.00000000, 1.00000000}};
2101
// Loop possible derivatives.
2102
for (unsigned int r = 0; r < num_derivatives; r++)
2104
// Resetting dmats values to compute next derivative.
2105
for (unsigned int t = 0; t < 3; t++)
2107
for (unsigned int u = 0; u < 3; u++)
2109
dmats[t][u] = 0.00000000;
2112
dmats[t][u] = 1.00000000;
2115
}// end loop over 'u'
2116
}// end loop over 't'
2118
// Looping derivative order to generate dmats.
2119
for (unsigned int s = 0; s < n; s++)
2121
// Updating dmats_old with new values and resetting dmats.
2122
for (unsigned int t = 0; t < 3; t++)
2124
for (unsigned int u = 0; u < 3; u++)
2126
dmats_old[t][u] = dmats[t][u];
2127
dmats[t][u] = 0.00000000;
2128
}// end loop over 'u'
2129
}// end loop over 't'
2131
// Update dmats using an inner product.
2132
if (combinations[r][s] == 0)
2134
for (unsigned int t = 0; t < 3; t++)
2136
for (unsigned int u = 0; u < 3; u++)
2138
for (unsigned int tu = 0; tu < 3; tu++)
2140
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2141
}// end loop over 'tu'
2142
}// end loop over 'u'
2143
}// end loop over 't'
2146
if (combinations[r][s] == 1)
2148
for (unsigned int t = 0; t < 3; t++)
2150
for (unsigned int u = 0; u < 3; u++)
2152
for (unsigned int tu = 0; tu < 3; tu++)
2154
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2155
}// end loop over 'tu'
2156
}// end loop over 'u'
2157
}// end loop over 't'
2160
}// end loop over 's'
2161
for (unsigned int s = 0; s < 3; s++)
2163
for (unsigned int t = 0; t < 3; t++)
2165
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2166
}// end loop over 't'
2167
}// end loop over 's'
2168
}// end loop over 'r'
2170
// Transform derivatives back to physical element
2171
for (unsigned int r = 0; r < num_derivatives; r++)
2173
for (unsigned int s = 0; s < num_derivatives; s++)
2175
values[num_derivatives + r] += transform[r][s]*derivatives[s];
2176
}// end loop over 's'
2177
}// end loop over 'r'
2179
// Delete pointer to array of derivatives on FIAT element
2180
delete [] derivatives;
2182
// Delete pointer to array of combinations of derivatives and transform
2183
for (unsigned int r = 0; r < num_derivatives; r++)
2185
delete [] combinations[r];
2186
}// end loop over 'r'
2187
delete [] combinations;
2188
for (unsigned int r = 0; r < num_derivatives; r++)
2190
delete [] transform[r];
2191
}// end loop over 'r'
2192
delete [] transform;
2198
// Array of basisvalues.
2199
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
2201
// Declare helper variables.
2202
unsigned int rr = 0;
2203
unsigned int ss = 0;
2204
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
2206
// Compute basisvalues.
2207
basisvalues[0] = 1.00000000;
2208
basisvalues[1] = tmp0;
2209
for (unsigned int r = 0; r < 1; r++)
2211
rr = (r + 1)*(r + 1 + 1)/2 + 1;
2213
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
2214
}// end loop over 'r'
2215
for (unsigned int r = 0; r < 2; r++)
2217
for (unsigned int s = 0; s < 2 - r; s++)
2219
rr = (r + s)*(r + s + 1)/2 + s;
2220
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
2221
}// end loop over 's'
2222
}// end loop over 'r'
2224
// Table(s) of coefficients.
2225
static const double coefficients0[3] = \
2226
{0.47140452, 0.00000000, 0.33333333};
2228
// Tables of derivatives of the polynomial base (transpose).
2229
static const double dmats0[3][3] = \
2230
{{0.00000000, 0.00000000, 0.00000000},
2231
{4.89897949, 0.00000000, 0.00000000},
2232
{0.00000000, 0.00000000, 0.00000000}};
2234
static const double dmats1[3][3] = \
2235
{{0.00000000, 0.00000000, 0.00000000},
2236
{2.44948974, 0.00000000, 0.00000000},
2237
{4.24264069, 0.00000000, 0.00000000}};
2239
// Compute reference derivatives.
2240
// Declare pointer to array of derivatives on FIAT element.
2241
double *derivatives = new double[num_derivatives];
2242
for (unsigned int r = 0; r < num_derivatives; r++)
2244
derivatives[r] = 0.00000000;
2245
}// end loop over 'r'
2247
// Declare derivative matrix (of polynomial basis).
2248
double dmats[3][3] = \
2249
{{1.00000000, 0.00000000, 0.00000000},
2250
{0.00000000, 1.00000000, 0.00000000},
2251
{0.00000000, 0.00000000, 1.00000000}};
2253
// Declare (auxiliary) derivative matrix (of polynomial basis).
2254
double dmats_old[3][3] = \
2255
{{1.00000000, 0.00000000, 0.00000000},
2256
{0.00000000, 1.00000000, 0.00000000},
2257
{0.00000000, 0.00000000, 1.00000000}};
2259
// Loop possible derivatives.
2260
for (unsigned int r = 0; r < num_derivatives; r++)
2262
// Resetting dmats values to compute next derivative.
2263
for (unsigned int t = 0; t < 3; t++)
2265
for (unsigned int u = 0; u < 3; u++)
2267
dmats[t][u] = 0.00000000;
2270
dmats[t][u] = 1.00000000;
2273
}// end loop over 'u'
2274
}// end loop over 't'
2276
// Looping derivative order to generate dmats.
2277
for (unsigned int s = 0; s < n; s++)
2279
// Updating dmats_old with new values and resetting dmats.
2280
for (unsigned int t = 0; t < 3; t++)
2282
for (unsigned int u = 0; u < 3; u++)
2284
dmats_old[t][u] = dmats[t][u];
2285
dmats[t][u] = 0.00000000;
2286
}// end loop over 'u'
2287
}// end loop over 't'
2289
// Update dmats using an inner product.
2290
if (combinations[r][s] == 0)
2292
for (unsigned int t = 0; t < 3; t++)
2294
for (unsigned int u = 0; u < 3; u++)
2296
for (unsigned int tu = 0; tu < 3; tu++)
2298
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2299
}// end loop over 'tu'
2300
}// end loop over 'u'
2301
}// end loop over 't'
2304
if (combinations[r][s] == 1)
2306
for (unsigned int t = 0; t < 3; t++)
2308
for (unsigned int u = 0; u < 3; u++)
2310
for (unsigned int tu = 0; tu < 3; tu++)
2312
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2313
}// end loop over 'tu'
2314
}// end loop over 'u'
2315
}// end loop over 't'
2318
}// end loop over 's'
2319
for (unsigned int s = 0; s < 3; s++)
2321
for (unsigned int t = 0; t < 3; t++)
2323
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2324
}// end loop over 't'
2325
}// end loop over 's'
2326
}// end loop over 'r'
2328
// Transform derivatives back to physical element
2329
for (unsigned int r = 0; r < num_derivatives; r++)
2331
for (unsigned int s = 0; s < num_derivatives; s++)
2333
values[num_derivatives + r] += transform[r][s]*derivatives[s];
2334
}// end loop over 's'
2335
}// end loop over 'r'
2337
// Delete pointer to array of derivatives on FIAT element
2338
delete [] derivatives;
2340
// Delete pointer to array of combinations of derivatives and transform
2341
for (unsigned int r = 0; r < num_derivatives; r++)
2343
delete [] combinations[r];
2344
}// end loop over 'r'
2345
delete [] combinations;
2346
for (unsigned int r = 0; r < num_derivatives; r++)
2348
delete [] transform[r];
2349
}// end loop over 'r'
2350
delete [] transform;