510
505
*values = 0.00000000;
512
// Map degree of freedom to element degree of freedom
513
const unsigned int dof = i;
515
// Array of basisvalues.
516
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
518
// Declare helper variables.
521
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
523
// Compute basisvalues.
524
basisvalues[0] = 1.00000000;
525
basisvalues[1] = tmp0;
526
for (unsigned int r = 0; r < 1; r++)
528
rr = (r + 1)*(r + 1 + 1)/2 + 1;
530
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
531
}// end loop over 'r'
532
for (unsigned int r = 0; r < 2; r++)
534
for (unsigned int s = 0; s < 2 - r; s++)
536
rr = (r + s)*(r + s + 1)/2 + s;
537
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
538
}// end loop over 's'
539
}// end loop over 'r'
541
// Table(s) of coefficients.
542
static const double coefficients0[3][3] = \
543
{{0.47140452, -0.28867513, -0.16666667},
544
{0.47140452, 0.28867513, -0.16666667},
545
{0.47140452, 0.00000000, 0.33333333}};
548
for (unsigned int r = 0; r < 3; r++)
550
*values += coefficients0[dof][r]*basisvalues[r];
551
}// end loop over 'r'
511
// Array of basisvalues.
512
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
514
// Declare helper variables.
517
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
519
// Compute basisvalues.
520
basisvalues[0] = 1.00000000;
521
basisvalues[1] = tmp0;
522
for (unsigned int r = 0; r < 1; r++)
524
rr = (r + 1)*(r + 1 + 1)/2 + 1;
526
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
527
}// end loop over 'r'
528
for (unsigned int r = 0; r < 2; r++)
530
for (unsigned int s = 0; s < 2 - r; s++)
532
rr = (r + s)*(r + s + 1)/2 + s;
533
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
534
}// end loop over 's'
535
}// end loop over 'r'
537
// Table(s) of coefficients.
538
static const double coefficients0[3] = \
539
{0.47140452, -0.28867513, -0.16666667};
542
for (unsigned int r = 0; r < 3; r++)
544
*values += coefficients0[r]*basisvalues[r];
545
}// end loop over 'r'
551
// Array of basisvalues.
552
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
554
// Declare helper variables.
557
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
559
// Compute basisvalues.
560
basisvalues[0] = 1.00000000;
561
basisvalues[1] = tmp0;
562
for (unsigned int r = 0; r < 1; r++)
564
rr = (r + 1)*(r + 1 + 1)/2 + 1;
566
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
567
}// end loop over 'r'
568
for (unsigned int r = 0; r < 2; r++)
570
for (unsigned int s = 0; s < 2 - r; s++)
572
rr = (r + s)*(r + s + 1)/2 + s;
573
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
574
}// end loop over 's'
575
}// end loop over 'r'
577
// Table(s) of coefficients.
578
static const double coefficients0[3] = \
579
{0.47140452, 0.28867513, -0.16666667};
582
for (unsigned int r = 0; r < 3; r++)
584
*values += coefficients0[r]*basisvalues[r];
585
}// end loop over 'r'
591
// Array of basisvalues.
592
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
594
// Declare helper variables.
597
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
599
// Compute basisvalues.
600
basisvalues[0] = 1.00000000;
601
basisvalues[1] = tmp0;
602
for (unsigned int r = 0; r < 1; r++)
604
rr = (r + 1)*(r + 1 + 1)/2 + 1;
606
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
607
}// end loop over 'r'
608
for (unsigned int r = 0; r < 2; r++)
610
for (unsigned int s = 0; s < 2 - r; s++)
612
rr = (r + s)*(r + s + 1)/2 + s;
613
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
614
}// end loop over 's'
615
}// end loop over 'r'
617
// Table(s) of coefficients.
618
static const double coefficients0[3] = \
619
{0.47140452, 0.00000000, 0.33333333};
622
for (unsigned int r = 0; r < 3; r++)
624
*values += coefficients0[r]*basisvalues[r];
625
}// end loop over 'r'
554
632
/// Evaluate all basis functions at given point in cell
664
742
values[r] = 0.00000000;
665
743
}// end loop over 'r'
667
// Map degree of freedom to element degree of freedom
668
const unsigned int dof = i;
670
// Array of basisvalues.
671
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
673
// Declare helper variables.
676
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
678
// Compute basisvalues.
679
basisvalues[0] = 1.00000000;
680
basisvalues[1] = tmp0;
681
for (unsigned int r = 0; r < 1; r++)
683
rr = (r + 1)*(r + 1 + 1)/2 + 1;
685
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
686
}// end loop over 'r'
687
for (unsigned int r = 0; r < 2; r++)
689
for (unsigned int s = 0; s < 2 - r; s++)
691
rr = (r + s)*(r + s + 1)/2 + s;
692
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
693
}// end loop over 's'
694
}// end loop over 'r'
696
// Table(s) of coefficients.
697
static const double coefficients0[3][3] = \
698
{{0.47140452, -0.28867513, -0.16666667},
699
{0.47140452, 0.28867513, -0.16666667},
700
{0.47140452, 0.00000000, 0.33333333}};
702
// Tables of derivatives of the polynomial base (transpose).
703
static const double dmats0[3][3] = \
704
{{0.00000000, 0.00000000, 0.00000000},
705
{4.89897949, 0.00000000, 0.00000000},
706
{0.00000000, 0.00000000, 0.00000000}};
708
static const double dmats1[3][3] = \
709
{{0.00000000, 0.00000000, 0.00000000},
710
{2.44948974, 0.00000000, 0.00000000},
711
{4.24264069, 0.00000000, 0.00000000}};
713
// Compute reference derivatives.
714
// Declare pointer to array of derivatives on FIAT element.
715
double *derivatives = new double[num_derivatives];
716
for (unsigned int r = 0; r < num_derivatives; r++)
718
derivatives[r] = 0.00000000;
719
}// end loop over 'r'
721
// Declare derivative matrix (of polynomial basis).
722
double dmats[3][3] = \
723
{{1.00000000, 0.00000000, 0.00000000},
724
{0.00000000, 1.00000000, 0.00000000},
725
{0.00000000, 0.00000000, 1.00000000}};
727
// Declare (auxiliary) derivative matrix (of polynomial basis).
728
double dmats_old[3][3] = \
729
{{1.00000000, 0.00000000, 0.00000000},
730
{0.00000000, 1.00000000, 0.00000000},
731
{0.00000000, 0.00000000, 1.00000000}};
733
// Loop possible derivatives.
734
for (unsigned int r = 0; r < num_derivatives; r++)
736
// Resetting dmats values to compute next derivative.
737
for (unsigned int t = 0; t < 3; t++)
739
for (unsigned int u = 0; u < 3; u++)
741
dmats[t][u] = 0.00000000;
744
dmats[t][u] = 1.00000000;
747
}// end loop over 'u'
748
}// end loop over 't'
750
// Looping derivative order to generate dmats.
751
for (unsigned int s = 0; s < n; s++)
753
// Updating dmats_old with new values and resetting dmats.
754
for (unsigned int t = 0; t < 3; t++)
756
for (unsigned int u = 0; u < 3; u++)
758
dmats_old[t][u] = dmats[t][u];
759
dmats[t][u] = 0.00000000;
760
}// end loop over 'u'
761
}// end loop over 't'
763
// Update dmats using an inner product.
764
if (combinations[r][s] == 0)
766
for (unsigned int t = 0; t < 3; t++)
768
for (unsigned int u = 0; u < 3; u++)
770
for (unsigned int tu = 0; tu < 3; tu++)
772
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
773
}// end loop over 'tu'
774
}// end loop over 'u'
775
}// end loop over 't'
778
if (combinations[r][s] == 1)
780
for (unsigned int t = 0; t < 3; t++)
782
for (unsigned int u = 0; u < 3; u++)
784
for (unsigned int tu = 0; tu < 3; tu++)
786
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
787
}// end loop over 'tu'
788
}// end loop over 'u'
789
}// end loop over 't'
792
}// end loop over 's'
793
for (unsigned int s = 0; s < 3; s++)
795
for (unsigned int t = 0; t < 3; t++)
797
derivatives[r] += coefficients0[dof][s]*dmats[s][t]*basisvalues[t];
798
}// end loop over 't'
799
}// end loop over 's'
800
}// end loop over 'r'
802
// Transform derivatives back to physical element
803
for (unsigned int r = 0; r < num_derivatives; r++)
805
for (unsigned int s = 0; s < num_derivatives; s++)
807
values[r] += transform[r][s]*derivatives[s];
808
}// end loop over 's'
809
}// end loop over 'r'
811
// Delete pointer to array of derivatives on FIAT element
812
delete [] derivatives;
814
// Delete pointer to array of combinations of derivatives and transform
815
for (unsigned int r = 0; r < num_derivatives; r++)
817
delete [] combinations[r];
818
}// end loop over 'r'
819
delete [] combinations;
820
for (unsigned int r = 0; r < num_derivatives; r++)
822
delete [] transform[r];
823
}// end loop over 'r'
750
// Array of basisvalues.
751
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
753
// Declare helper variables.
756
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
758
// Compute basisvalues.
759
basisvalues[0] = 1.00000000;
760
basisvalues[1] = tmp0;
761
for (unsigned int r = 0; r < 1; r++)
763
rr = (r + 1)*(r + 1 + 1)/2 + 1;
765
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
766
}// end loop over 'r'
767
for (unsigned int r = 0; r < 2; r++)
769
for (unsigned int s = 0; s < 2 - r; s++)
771
rr = (r + s)*(r + s + 1)/2 + s;
772
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
773
}// end loop over 's'
774
}// end loop over 'r'
776
// Table(s) of coefficients.
777
static const double coefficients0[3] = \
778
{0.47140452, -0.28867513, -0.16666667};
780
// Tables of derivatives of the polynomial base (transpose).
781
static const double dmats0[3][3] = \
782
{{0.00000000, 0.00000000, 0.00000000},
783
{4.89897949, 0.00000000, 0.00000000},
784
{0.00000000, 0.00000000, 0.00000000}};
786
static const double dmats1[3][3] = \
787
{{0.00000000, 0.00000000, 0.00000000},
788
{2.44948974, 0.00000000, 0.00000000},
789
{4.24264069, 0.00000000, 0.00000000}};
791
// Compute reference derivatives.
792
// Declare pointer to array of derivatives on FIAT element.
793
double *derivatives = new double[num_derivatives];
794
for (unsigned int r = 0; r < num_derivatives; r++)
796
derivatives[r] = 0.00000000;
797
}// end loop over 'r'
799
// Declare derivative matrix (of polynomial basis).
800
double dmats[3][3] = \
801
{{1.00000000, 0.00000000, 0.00000000},
802
{0.00000000, 1.00000000, 0.00000000},
803
{0.00000000, 0.00000000, 1.00000000}};
805
// Declare (auxiliary) derivative matrix (of polynomial basis).
806
double dmats_old[3][3] = \
807
{{1.00000000, 0.00000000, 0.00000000},
808
{0.00000000, 1.00000000, 0.00000000},
809
{0.00000000, 0.00000000, 1.00000000}};
811
// Loop possible derivatives.
812
for (unsigned int r = 0; r < num_derivatives; r++)
814
// Resetting dmats values to compute next derivative.
815
for (unsigned int t = 0; t < 3; t++)
817
for (unsigned int u = 0; u < 3; u++)
819
dmats[t][u] = 0.00000000;
822
dmats[t][u] = 1.00000000;
825
}// end loop over 'u'
826
}// end loop over 't'
828
// Looping derivative order to generate dmats.
829
for (unsigned int s = 0; s < n; s++)
831
// Updating dmats_old with new values and resetting dmats.
832
for (unsigned int t = 0; t < 3; t++)
834
for (unsigned int u = 0; u < 3; u++)
836
dmats_old[t][u] = dmats[t][u];
837
dmats[t][u] = 0.00000000;
838
}// end loop over 'u'
839
}// end loop over 't'
841
// Update dmats using an inner product.
842
if (combinations[r][s] == 0)
844
for (unsigned int t = 0; t < 3; t++)
846
for (unsigned int u = 0; u < 3; u++)
848
for (unsigned int tu = 0; tu < 3; tu++)
850
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
851
}// end loop over 'tu'
852
}// end loop over 'u'
853
}// end loop over 't'
856
if (combinations[r][s] == 1)
858
for (unsigned int t = 0; t < 3; t++)
860
for (unsigned int u = 0; u < 3; u++)
862
for (unsigned int tu = 0; tu < 3; tu++)
864
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
865
}// end loop over 'tu'
866
}// end loop over 'u'
867
}// end loop over 't'
870
}// end loop over 's'
871
for (unsigned int s = 0; s < 3; s++)
873
for (unsigned int t = 0; t < 3; t++)
875
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
876
}// end loop over 't'
877
}// end loop over 's'
878
}// end loop over 'r'
880
// Transform derivatives back to physical element
881
for (unsigned int r = 0; r < num_derivatives; r++)
883
for (unsigned int s = 0; s < num_derivatives; s++)
885
values[r] += transform[r][s]*derivatives[s];
886
}// end loop over 's'
887
}// end loop over 'r'
889
// Delete pointer to array of derivatives on FIAT element
890
delete [] derivatives;
892
// Delete pointer to array of combinations of derivatives and transform
893
for (unsigned int r = 0; r < num_derivatives; r++)
895
delete [] combinations[r];
896
}// end loop over 'r'
897
delete [] combinations;
898
for (unsigned int r = 0; r < num_derivatives; r++)
900
delete [] transform[r];
901
}// end loop over 'r'
908
// Array of basisvalues.
909
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
911
// Declare helper variables.
914
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
916
// Compute basisvalues.
917
basisvalues[0] = 1.00000000;
918
basisvalues[1] = tmp0;
919
for (unsigned int r = 0; r < 1; r++)
921
rr = (r + 1)*(r + 1 + 1)/2 + 1;
923
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
924
}// end loop over 'r'
925
for (unsigned int r = 0; r < 2; r++)
927
for (unsigned int s = 0; s < 2 - r; s++)
929
rr = (r + s)*(r + s + 1)/2 + s;
930
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
931
}// end loop over 's'
932
}// end loop over 'r'
934
// Table(s) of coefficients.
935
static const double coefficients0[3] = \
936
{0.47140452, 0.28867513, -0.16666667};
938
// Tables of derivatives of the polynomial base (transpose).
939
static const double dmats0[3][3] = \
940
{{0.00000000, 0.00000000, 0.00000000},
941
{4.89897949, 0.00000000, 0.00000000},
942
{0.00000000, 0.00000000, 0.00000000}};
944
static const double dmats1[3][3] = \
945
{{0.00000000, 0.00000000, 0.00000000},
946
{2.44948974, 0.00000000, 0.00000000},
947
{4.24264069, 0.00000000, 0.00000000}};
949
// Compute reference derivatives.
950
// Declare pointer to array of derivatives on FIAT element.
951
double *derivatives = new double[num_derivatives];
952
for (unsigned int r = 0; r < num_derivatives; r++)
954
derivatives[r] = 0.00000000;
955
}// end loop over 'r'
957
// Declare derivative matrix (of polynomial basis).
958
double dmats[3][3] = \
959
{{1.00000000, 0.00000000, 0.00000000},
960
{0.00000000, 1.00000000, 0.00000000},
961
{0.00000000, 0.00000000, 1.00000000}};
963
// Declare (auxiliary) derivative matrix (of polynomial basis).
964
double dmats_old[3][3] = \
965
{{1.00000000, 0.00000000, 0.00000000},
966
{0.00000000, 1.00000000, 0.00000000},
967
{0.00000000, 0.00000000, 1.00000000}};
969
// Loop possible derivatives.
970
for (unsigned int r = 0; r < num_derivatives; r++)
972
// Resetting dmats values to compute next derivative.
973
for (unsigned int t = 0; t < 3; t++)
975
for (unsigned int u = 0; u < 3; u++)
977
dmats[t][u] = 0.00000000;
980
dmats[t][u] = 1.00000000;
983
}// end loop over 'u'
984
}// end loop over 't'
986
// Looping derivative order to generate dmats.
987
for (unsigned int s = 0; s < n; s++)
989
// Updating dmats_old with new values and resetting dmats.
990
for (unsigned int t = 0; t < 3; t++)
992
for (unsigned int u = 0; u < 3; u++)
994
dmats_old[t][u] = dmats[t][u];
995
dmats[t][u] = 0.00000000;
996
}// end loop over 'u'
997
}// end loop over 't'
999
// Update dmats using an inner product.
1000
if (combinations[r][s] == 0)
1002
for (unsigned int t = 0; t < 3; t++)
1004
for (unsigned int u = 0; u < 3; u++)
1006
for (unsigned int tu = 0; tu < 3; tu++)
1008
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1009
}// end loop over 'tu'
1010
}// end loop over 'u'
1011
}// end loop over 't'
1014
if (combinations[r][s] == 1)
1016
for (unsigned int t = 0; t < 3; t++)
1018
for (unsigned int u = 0; u < 3; u++)
1020
for (unsigned int tu = 0; tu < 3; tu++)
1022
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1023
}// end loop over 'tu'
1024
}// end loop over 'u'
1025
}// end loop over 't'
1028
}// end loop over 's'
1029
for (unsigned int s = 0; s < 3; s++)
1031
for (unsigned int t = 0; t < 3; t++)
1033
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1034
}// end loop over 't'
1035
}// end loop over 's'
1036
}// end loop over 'r'
1038
// Transform derivatives back to physical element
1039
for (unsigned int r = 0; r < num_derivatives; r++)
1041
for (unsigned int s = 0; s < num_derivatives; s++)
1043
values[r] += transform[r][s]*derivatives[s];
1044
}// end loop over 's'
1045
}// end loop over 'r'
1047
// Delete pointer to array of derivatives on FIAT element
1048
delete [] derivatives;
1050
// Delete pointer to array of combinations of derivatives and transform
1051
for (unsigned int r = 0; r < num_derivatives; r++)
1053
delete [] combinations[r];
1054
}// end loop over 'r'
1055
delete [] combinations;
1056
for (unsigned int r = 0; r < num_derivatives; r++)
1058
delete [] transform[r];
1059
}// end loop over 'r'
1060
delete [] transform;
1066
// Array of basisvalues.
1067
double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1069
// Declare helper variables.
1070
unsigned int rr = 0;
1071
unsigned int ss = 0;
1072
double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1074
// Compute basisvalues.
1075
basisvalues[0] = 1.00000000;
1076
basisvalues[1] = tmp0;
1077
for (unsigned int r = 0; r < 1; r++)
1079
rr = (r + 1)*(r + 1 + 1)/2 + 1;
1081
basisvalues[rr] = basisvalues[ss]*(0.50000000 + r + Y*(1.50000000 + r));
1082
}// end loop over 'r'
1083
for (unsigned int r = 0; r < 2; r++)
1085
for (unsigned int s = 0; s < 2 - r; s++)
1087
rr = (r + s)*(r + s + 1)/2 + s;
1088
basisvalues[rr] *= std::sqrt((0.50000000 + r)*(1.00000000 + r + s));
1089
}// end loop over 's'
1090
}// end loop over 'r'
1092
// Table(s) of coefficients.
1093
static const double coefficients0[3] = \
1094
{0.47140452, 0.00000000, 0.33333333};
1096
// Tables of derivatives of the polynomial base (transpose).
1097
static const double dmats0[3][3] = \
1098
{{0.00000000, 0.00000000, 0.00000000},
1099
{4.89897949, 0.00000000, 0.00000000},
1100
{0.00000000, 0.00000000, 0.00000000}};
1102
static const double dmats1[3][3] = \
1103
{{0.00000000, 0.00000000, 0.00000000},
1104
{2.44948974, 0.00000000, 0.00000000},
1105
{4.24264069, 0.00000000, 0.00000000}};
1107
// Compute reference derivatives.
1108
// Declare pointer to array of derivatives on FIAT element.
1109
double *derivatives = new double[num_derivatives];
1110
for (unsigned int r = 0; r < num_derivatives; r++)
1112
derivatives[r] = 0.00000000;
1113
}// end loop over 'r'
1115
// Declare derivative matrix (of polynomial basis).
1116
double dmats[3][3] = \
1117
{{1.00000000, 0.00000000, 0.00000000},
1118
{0.00000000, 1.00000000, 0.00000000},
1119
{0.00000000, 0.00000000, 1.00000000}};
1121
// Declare (auxiliary) derivative matrix (of polynomial basis).
1122
double dmats_old[3][3] = \
1123
{{1.00000000, 0.00000000, 0.00000000},
1124
{0.00000000, 1.00000000, 0.00000000},
1125
{0.00000000, 0.00000000, 1.00000000}};
1127
// Loop possible derivatives.
1128
for (unsigned int r = 0; r < num_derivatives; r++)
1130
// Resetting dmats values to compute next derivative.
1131
for (unsigned int t = 0; t < 3; t++)
1133
for (unsigned int u = 0; u < 3; u++)
1135
dmats[t][u] = 0.00000000;
1138
dmats[t][u] = 1.00000000;
1141
}// end loop over 'u'
1142
}// end loop over 't'
1144
// Looping derivative order to generate dmats.
1145
for (unsigned int s = 0; s < n; s++)
1147
// Updating dmats_old with new values and resetting dmats.
1148
for (unsigned int t = 0; t < 3; t++)
1150
for (unsigned int u = 0; u < 3; u++)
1152
dmats_old[t][u] = dmats[t][u];
1153
dmats[t][u] = 0.00000000;
1154
}// end loop over 'u'
1155
}// end loop over 't'
1157
// Update dmats using an inner product.
1158
if (combinations[r][s] == 0)
1160
for (unsigned int t = 0; t < 3; t++)
1162
for (unsigned int u = 0; u < 3; u++)
1164
for (unsigned int tu = 0; tu < 3; tu++)
1166
dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1167
}// end loop over 'tu'
1168
}// end loop over 'u'
1169
}// end loop over 't'
1172
if (combinations[r][s] == 1)
1174
for (unsigned int t = 0; t < 3; t++)
1176
for (unsigned int u = 0; u < 3; u++)
1178
for (unsigned int tu = 0; tu < 3; tu++)
1180
dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1181
}// end loop over 'tu'
1182
}// end loop over 'u'
1183
}// end loop over 't'
1186
}// end loop over 's'
1187
for (unsigned int s = 0; s < 3; s++)
1189
for (unsigned int t = 0; t < 3; t++)
1191
derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1192
}// end loop over 't'
1193
}// end loop over 's'
1194
}// end loop over 'r'
1196
// Transform derivatives back to physical element
1197
for (unsigned int r = 0; r < num_derivatives; r++)
1199
for (unsigned int s = 0; s < num_derivatives; s++)
1201
values[r] += transform[r][s]*derivatives[s];
1202
}// end loop over 's'
1203
}// end loop over 'r'
1205
// Delete pointer to array of derivatives on FIAT element
1206
delete [] derivatives;
1208
// Delete pointer to array of combinations of derivatives and transform
1209
for (unsigned int r = 0; r < num_derivatives; r++)
1211
delete [] combinations[r];
1212
}// end loop over 'r'
1213
delete [] combinations;
1214
for (unsigned int r = 0; r < num_derivatives; r++)
1216
delete [] transform[r];
1217
}// end loop over 'r'
1218
delete [] transform;
827
1225
/// Evaluate order n derivatives of all basis functions at given point in cell