#include "quadrature.h" #include fp_t g1d_1[1][3] = { 0.5,0.5,1.0, }; fp_t g1d_2[2][3] = { static_cast((1.0-1.0/sqrt(3.0))/2.0),static_cast((1.0+1.0/sqrt(3.0))/2.0),0.5, static_cast((1.0+1.0/sqrt(3.0))/2.0),static_cast((1.0-1.0/sqrt(3.0))/2.0),0.5, }; fp_t g1d_3[3][3] = { 0.5,0.5,4.0/9.0, static_cast((1.0-sqrt(15)/(5.0))/2.0),static_cast((1.0+sqrt(15)/(5.0))/2.0),5.0/18.0, static_cast((1.0+sqrt(15)/(5.0))/2.0),static_cast((1.0-sqrt(15)/(5.0))/2.0),5.0/18.0, }; fp_t g1d_4[4][3] = { static_cast((1.0- sqrt((3.0-2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((1.0 + sqrt((3.0-2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((18.0+sqrt(30.0))/72.0), static_cast((1.0+ sqrt((3.0-2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((1.0 - sqrt((3.0-2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((18.0+sqrt(30.0))/72.0), static_cast((1.0- sqrt((3.0+2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((1.0 + sqrt((3.0+2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((18.0+sqrt(30.0))/72.0), static_cast((1.0+ sqrt((3.0+2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((1.0 - sqrt((3.0+2.0*sqrt(6.0/5.0))/7))/2.0), static_cast((18.0+sqrt(30.0))/72.0), }; fp_t g1d_5[5][3] = { 0.5,0.5,64.0/225.0, static_cast((1.0- sqrt((5.0-2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((1.0+ sqrt((5.0-2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((322.0+13.0*sqrt(70.0))/1800.0), static_cast((1.0+ sqrt((5.0-2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((1.0- sqrt((5.0-2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((322.0+13.0*sqrt(70.0))/1800.0), static_cast((1.0- sqrt((5.0+2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((1.0+ sqrt((5.0+2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((322.0-13.0*sqrt(70.0))/1800.0), static_cast((1.0+ sqrt((5.0+2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((1.0- sqrt((5.0+2.0*sqrt(10.0/7.0)))/3.0)/2.0), static_cast((322.0-13.0*sqrt(70.0))/1800.0), }; // Order = 1 static fp_t g2d_1[1][4] = { one_third, one_third, one_third, 1.0 }; // Order = 2 static fp_t g2d_3[3][4] = { two_third, one_sixth, one_sixth, one_third, one_sixth, two_third, one_sixth, one_third, one_sixth, one_sixth, two_third, one_third }; // Order = 3 static fp_t g2d_4[4][4] = { one_third, one_third, one_third, -0.5625, 0.6, 0.2, 0.2, 0.520833333333333, 0.2, 0.6, 0.2, 0.520833333333333, 0.2, 0.2, 0.6, 0.520833333333333 }; // added by Marinos N. Vouvakis & Seung-Cheol Lee 08/12/02 // Order = 4 #define g6_a 0.816847572980459 #define g6_b ( 1.0 - g6_a ) / 2.0 #define g6_c 0.108103018168070 #define g6_d ( 1.0 - g6_c ) / 2.0 #define g6_W1 0.109951743655322 #define g6_W2 0.223381589678011 static fp_t g2d_6[6][4] = { g6_a, g6_b, g6_b, g6_W1 , g6_b, g6_a, g6_b, g6_W1 , g6_b, g6_b, g6_a, g6_W1 , g6_c, g6_d, g6_d, g6_W2 , g6_d, g6_c, g6_d, g6_W2 , g6_d, g6_d, g6_c, g6_W2 }; // Order = 5 static fp_t g2d_7[7][4] = { one_third, one_third, one_third, 0.225033000033, 0.797426985353087, 0.101286507323456, 0.101286507323456, 0.125939180544827, 0.101286507323456, 0.797426985353087, 0.101286507323456, 0.125939180544827, 0.101286507323456, 0.101286507323456, 0.797426985353087, 0.125939180544827, 0.470142064105115, 0.470142064105115, 0.059715871789770, 0.132394152788506, 0.059715871789770, 0.470142064105115, 0.470142064105115, 0.132394152788506, 0.470142064105115, 0.059715871789770, 0.470142064105115, 0.132394152788506 }; // added by Seung-Cheol Lee & Marinos N. Vouvakis 08/12/02 // Order = 5 #define g9_a 0.437525248383384 #define g9_b 1.0 - 2.0 * g9_a #define g9_c 0.797112651860071 #define g9_d 0.165409927389841 #define g9_e 1.0 - g9_c - g9_d #define g9_W1 0.205950504760887 #define g9_W2 0.063691414286223 static fp_t g2d_9[9][4] = { g9_b, g9_a, g9_a, g9_W1 , g9_a, g9_b, g9_a, g9_W1 , g9_a, g9_a, g9_b, g9_W1 , g9_c, g9_d, g9_e, g9_W2 , g9_c, g9_e, g9_d, g9_W2 , g9_d, g9_c, g9_e, g9_W2 , g9_d, g9_e, g9_c, g9_W2 , g9_e, g9_c, g9_d, g9_W2 , g9_e, g9_d, g9_c, g9_W2 }; // added by Marinos N. Vouvakis & Seung-Cheol Lee 08/12/02 // Order = 6 #define g12_a 0.063089014491502 #define g12_b 1.0 - 2.0 * g12_a #define g12_c 0.249286745170910 #define g12_d 1.0 - 2.0 * g12_c #define g12_e 0.636502499121399 #define g12_f 0.310352451033785 #define g12_g 1.0 - g12_e - g12_f #define g12_W1 0.050844906370207 #define g12_W2 0.116786275726379 #define g12_W3 0.082851075618374 static fp_t g2d_12[12][4] = { g12_b, g12_a, g12_a, g12_W1 , g12_a, g12_b, g12_a, g12_W1 , g12_a, g12_a, g12_b, g12_W1 , g12_d, g12_c, g12_c, g12_W2 , g12_c, g12_d, g12_c, g12_W2 , g12_c, g12_c, g12_d, g12_W2 , g12_e, g12_f, g12_g, g12_W3 , g12_e, g12_g, g12_f, g12_W3 , g12_f, g12_e, g12_g, g12_W3 , g12_f, g12_g, g12_e, g12_W3 , g12_g, g12_e, g12_f, g12_W3 , g12_g, g12_f, g12_e, g12_W3 }; // Order = 7 #define g13_a 0.638444188569809 #define g13_b 0.312865496004875 #define g13_c 0.048690315425316 static fp_t g2d_13[13][4] = { one_third, one_third, one_third, -0.149570044467670, 0.479308067841923, 0.260345966079038, 0.260345966079038, 0.175615257433204, 0.260345966079038, 0.479308067841923, 0.260345966079038, 0.175615257433204, 0.260345966079038, 0.260345966079038, 0.479308067841923, 0.175615257433204, 0.869739794195568, 0.065130102902216, 0.065130102902216, 0.053347235608839, 0.065130102902216, 0.869739794195568, 0.065130102902216, 0.053347235608839, 0.065130102902216, 0.065130102902216, 0.869739794195568, 0.053347235608839, g13_a, g13_b, g13_c, 0.077113760890257, g13_a, g13_c, g13_b, 0.077113760890257, g13_b, g13_a, g13_c, 0.077113760890257, g13_b, g13_c, g13_a, 0.077113760890257, g13_c, g13_a, g13_b, 0.077113760890257, g13_c, g13_b, g13_a, 0.077113760890257, }; // added by MV 03/04/03 // Order = 8 #define g16_z0_2 0.04666912123569507 #define g16_z1_2 0.4766654393821525 #define g16_z2_2 0.4766654393821525 #define g16_z0_3 0.9324563118910393 #define g16_z1_3 0.03377184405448033 #define g16_z2_3 0.03377184405448033 #define g16_z0_4 0.4593042216691921 #define g16_z1_4 0.2703478891654040 #define g16_z2_4 0.2703478891654040 #define g16_z0_5 0.05146433548666149 #define g16_z1_5 0.7458294907672514 #define g16_z2_5 1. - g16_z0_5 - g16_z1_5 #define g16_W1 -0.2834183851113958 #define g16_W2 0.2097208857979572/3. #define g16_W3 0.05127273801480265/3. #define g16_W4 0.6564896469913506/3. #define g16_W5 0.3659351143072855/6. static fp_t g2d_16[16][4] = { one_third, one_third, one_third, g16_W1, g16_z0_2, g16_z1_2, g16_z1_2, g16_W2, g16_z1_2, g16_z0_2, g16_z1_2, g16_W2, g16_z1_2, g16_z1_2, g16_z0_2, g16_W2, g16_z0_3, g16_z1_3, g16_z1_3, g16_W3, g16_z1_3, g16_z0_3, g16_z1_3, g16_W3, g16_z1_3, g16_z1_3, g16_z0_3, g16_W3, g16_z0_4, g16_z1_4, g16_z1_4, g16_W4, g16_z1_4, g16_z0_4, g16_z1_4, g16_W4, g16_z1_4, g16_z1_4, g16_z0_4, g16_W4, g16_z0_5, g16_z1_5, g16_z2_5, g16_W5, g16_z0_5, g16_z2_5, g16_z1_5, g16_W5, g16_z1_5, g16_z0_5, g16_z2_5, g16_W5, g16_z1_5, g16_z2_5, g16_z0_5, g16_W5, g16_z2_5, g16_z0_5, g16_z1_5, g16_W5, g16_z2_5, g16_z1_5, g16_z0_5, g16_W5 }; // added by MV 03/04/03 // Order = 9 #define g19_z0_2 0.02063496160252593 #define g19_z1_2 0.4896825191987370 #define g19_z2_2 0.4896825191987370 #define g19_z0_3 0.1258208170141290 #define g19_z1_3 0.4370895914929355 #define g19_z2_3 0.4370895914929355 #define g19_z0_4 0.6235929287619356 #define g19_z1_4 0.1882035356190322 #define g19_z2_4 0.1882035356190322 #define g19_z0_5 0.9105409732110941 #define g19_z1_5 0.04472951339445297 #define g19_z2_5 0.04472951339445297 #define g19_z0_6 0.03683841205473626 #define g19_z1_6 0.7411985987844980 #define g19_z2_6 1. - g19_z0_6 - g19_z1_6 #define g19_W1 0.09713579628279610 #define g19_W2 0.09400410068141950/3. #define g19_W3 0.2334826230143263/3. #define g19_W4 0.2389432167815273/3. #define g19_W5 0.07673302697609430/3. #define g19_W6 0.2597012362637364/6. static fp_t g2d_19[19][4] = { one_third, one_third, one_third, g19_W1, g19_z0_2, g19_z1_2, g19_z1_2, g19_W2, g19_z1_2, g19_z0_2, g19_z1_2, g19_W2, g19_z1_2, g19_z1_2, g19_z0_2, g19_W2, g19_z0_3, g19_z1_3, g19_z1_3, g19_W3, g19_z1_3, g19_z0_3, g19_z1_3, g19_W3, g19_z1_3, g19_z1_3, g19_z0_3, g19_W3, g19_z0_4, g19_z1_4, g19_z1_4, g19_W4, g19_z1_4, g19_z0_4, g19_z1_4, g19_W4, g19_z1_4, g19_z1_4, g19_z0_4, g19_W4, g19_z0_5, g19_z1_5, g19_z1_5, g19_W5, g19_z1_5, g19_z0_5, g19_z1_5, g19_W5, g19_z1_5, g19_z1_5, g19_z0_5, g19_W5, g19_z0_6, g19_z1_6, g19_z2_6, g19_W6, g19_z0_6, g19_z2_6, g19_z1_6, g19_W6, g19_z1_6, g19_z0_6, g19_z2_6, g19_W6, g19_z1_6, g19_z2_6, g19_z0_6, g19_W6, g19_z2_6, g19_z0_6, g19_z1_6, g19_W6, g19_z2_6, g19_z1_6, g19_z0_6, g19_W6 }; // added by MV 03/04/03 // Order = 11 #define g27_z0_1 0.9352701037774565 #define g27_z1_1 0.03236494811127173 #define g27_z2_1 0.03236494811127173 #define g27_z0_2 0.7612981754348137 #define g27_z1_2 0.1193509122825931 #define g27_z2_2 0.1193509122825931 #define g27_z0_3 -0.06922209654151433 #define g27_z1_3 0.5346110482707572 #define g27_z2_3 0.5346110482707572 #define g27_z0_4 0.5933801991374367 #define g27_z1_4 0.2033099004312816 #define g27_z2_4 0.2033099004312816 #define g27_z0_5 0.2020613940682885 #define g27_z1_5 0.3989693029658558 #define g27_z2_5 0.3989693029658558 #define g27_z0_6 0.05017813831049474 #define g27_z1_6 0.5932012134282132 #define g27_z2_6 1. - g27_z0_6 - g27_z1_6 #define g27_z0_7 0.02102201653616613 #define g27_z1_7 0.8074890031597923 #define g27_z2_7 1. - g27_z0_7 - g27_z1_7 #define g27_W1 0.04097919300803106/3. #define g27_W2 0.1085536215102866/3. #define g27_W3 0.002781018986881812/3. #define g27_W4 0.1779689321422668/3. #define g27_W5 0.2314486047444677/3. #define g27_W6 0.3140226717732234/6. #define g27_W7 0.1242459578348437/6. static fp_t g2d_27[27][4] = { g27_z0_1, g27_z1_1, g27_z1_1, g27_W1, g27_z1_1, g27_z0_1, g27_z1_1, g27_W1, g27_z1_1, g27_z1_1, g27_z0_1, g27_W1, g27_z0_2, g27_z1_2, g27_z1_2, g27_W2, g27_z1_2, g27_z0_2, g27_z1_2, g27_W2, g27_z1_2, g27_z1_2, g27_z0_2, g27_W2, g27_z0_3, g27_z1_3, g27_z1_3, g27_W3, g27_z1_3, g27_z0_3, g27_z1_3, g27_W3, g27_z1_3, g27_z1_3, g27_z0_3, g27_W3, g27_z0_4, g27_z1_4, g27_z1_4, g27_W4, g27_z1_4, g27_z0_4, g27_z1_4, g27_W4, g27_z1_4, g27_z1_4, g27_z0_4, g27_W4, g27_z0_5, g27_z1_5, g27_z1_5, g27_W5, g27_z1_5, g27_z0_5, g27_z1_5, g27_W5, g27_z1_5, g27_z1_5, g27_z0_5, g27_W5, g27_z0_6, g27_z1_6, g27_z2_6, g27_W6, g27_z0_6, g27_z2_6, g27_z1_6, g27_W6, g27_z1_6, g27_z0_6, g27_z2_6, g27_W6, g27_z1_6, g27_z2_6, g27_z0_6, g27_W6, g27_z2_6, g27_z0_6, g27_z1_6, g27_W6, g27_z2_6, g27_z1_6, g27_z0_6, g27_W6, g27_z0_7, g27_z1_7, g27_z2_7, g27_W7, g27_z0_7, g27_z2_7, g27_z1_7, g27_W7, g27_z1_7, g27_z0_7, g27_z2_7, g27_W7, g27_z1_7, g27_z2_7, g27_z0_7, g27_W7, g27_z2_7, g27_z0_7, g27_z1_7, g27_W7, g27_z2_7, g27_z1_7, g27_z0_7, g27_W7 }; // added by MV 03/07/03 // Order = 12 #define g33_z0_1 0.023565220452390 #define g33_z1_1 0.488217389773805 #define g33_z2_1 0.488217389773805 #define g33_z0_2 0.120551215411079 #define g33_z1_2 0.439724392294460 #define g33_z2_2 0.439724392294460 #define g33_z0_3 0.457579229975768 #define g33_z1_3 0.271210385012116 #define g33_z2_3 0.271210385012116 #define g33_z0_4 0.744847708916828 #define g33_z1_4 0.127576145541586 #define g33_z2_4 0.127576145541586 #define g33_z0_5 0.957365299093579 #define g33_z1_5 0.021317350453210 #define g33_z2_5 0.021317350453210 #define g33_z0_6 0.115343494534698 #define g33_z1_6 0.275713269685514 #define g33_z2_6 0.608943235779788 #define g33_z0_7 0.022838332222257 #define g33_z1_7 0.281325580989940 #define g33_z2_7 0.695836086787803 #define g33_z0_8 0.025734050548330 #define g33_z1_8 0.116251915907597 #define g33_z2_8 0.858014033544073 #define g33_W1 0.025731066440455 #define g33_W2 0.043692544538038 #define g33_W3 0.062858224217885 #define g33_W4 0.034796112930709 #define g33_W5 0.006166261051559 #define g33_W6 0.040371557766381 #define g33_W7 0.022356773202303 #define g33_W8 0.017316231108659 static fp_t g2d_33[33][4] = { g33_z0_1, g33_z1_1, g33_z1_1, g33_W1, g33_z1_1, g33_z0_1, g33_z1_1, g33_W1, g33_z1_1, g33_z1_1, g33_z0_1, g33_W1, g33_z0_2, g33_z1_2, g33_z1_2, g33_W2, g33_z1_2, g33_z0_2, g33_z1_2, g33_W2, g33_z1_2, g33_z1_2, g33_z0_2, g33_W2, g33_z0_3, g33_z1_3, g33_z1_3, g33_W3, g33_z1_3, g33_z0_3, g33_z1_3, g33_W3, g33_z1_3, g33_z1_3, g33_z0_3, g33_W3, g33_z0_4, g33_z1_4, g33_z1_4, g33_W4, g33_z1_4, g33_z0_4, g33_z1_4, g33_W4, g33_z1_4, g33_z1_4, g33_z0_4, g33_W4, g33_z0_5, g33_z1_5, g33_z1_5, g33_W5, g33_z1_5, g33_z0_5, g33_z1_5, g33_W5, g33_z1_5, g33_z1_5, g33_z0_5, g33_W5, g33_z0_6, g33_z1_6, g33_z2_6, g33_W6, g33_z0_6, g33_z2_6, g33_z1_6, g33_W6, g33_z1_6, g33_z0_6, g33_z2_6, g33_W6, g33_z1_6, g33_z2_6, g33_z0_6, g33_W6, g33_z2_6, g33_z0_6, g33_z1_6, g33_W6, g33_z2_6, g33_z1_6, g33_z0_6, g33_W6, g33_z0_7, g33_z1_7, g33_z2_7, g33_W7, g33_z0_7, g33_z2_7, g33_z1_7, g33_W7, g33_z1_7, g33_z0_7, g33_z2_7, g33_W7, g33_z1_7, g33_z2_7, g33_z0_7, g33_W7, g33_z2_7, g33_z0_7, g33_z1_7, g33_W7, g33_z2_7, g33_z1_7, g33_z0_7, g33_W7, g33_z0_8, g33_z1_8, g33_z2_8, g33_W8, g33_z0_8, g33_z2_8, g33_z1_8, g33_W8, g33_z1_8, g33_z0_8, g33_z2_8, g33_W8, g33_z1_8, g33_z2_8, g33_z0_8, g33_W8, g33_z2_8, g33_z0_8, g33_z1_8, g33_W8, g33_z2_8, g33_z1_8, g33_z0_8, g33_W8 }; // added by MV 03/07/03 // Order = 13 #define g37_z0_2 0.009903630120591 #define g37_z1_2 0.495048184939705 #define g37_z2_2 0.495048184939705 #define g37_z0_3 0.062566729780852 #define g37_z1_3 0.468716635109574 #define g37_z2_3 0.468716635109574 #define g37_z0_4 0.170957326397447 #define g37_z1_4 0.414521336801277 #define g37_z2_4 0.414521336801277 #define g37_z0_5 0.541200855914337 #define g37_z1_5 0.229399572042831 #define g37_z2_5 0.229399572042831 #define g37_z0_6 0.771151009607340 #define g37_z1_6 0.114424495196330 #define g37_z2_6 0.114424495196330 #define g37_z0_7 0.950377217273082 #define g37_z1_7 0.024811391363459 #define g37_z2_7 0.024811391363459 #define g37_z0_8 0.094853828379579 #define g37_z1_8 0.268794997058761 #define g37_z2_8 0.636351174561660 #define g37_z0_9 0.018100773278807 #define g37_z1_9 0.291730066734288 #define g37_z2_9 0.690169159986905 #define g37_z0_10 0.022233076674090 #define g37_z1_10 0.126357385491669 #define g37_z2_10 0.851409537834241 #define g37_W1 0.052520923400802 #define g37_W2 0.011280145209330 #define g37_W3 0.031423518362454 #define g37_W4 0.047072502504194 #define g37_W5 0.047363586536355 #define g37_W6 0.031167529045794 #define g37_W7 0.007975771465074 #define g37_W8 0.036848402728732 #define g37_W9 0.017401463303822 #define g37_W10 0.015521786839045 static fp_t g2d_37[37][4] = { one_third, one_third, one_third, g37_W1, g37_z0_2, g37_z1_2, g37_z1_2, g37_W2, g37_z1_2, g37_z0_2, g37_z1_2, g37_W2, g37_z1_2, g37_z1_2, g37_z0_2, g37_W2, g37_z0_3, g37_z1_3, g37_z1_3, g37_W3, g37_z1_3, g37_z0_3, g37_z1_3, g37_W3, g37_z1_3, g37_z1_3, g37_z0_3, g37_W3, g37_z0_4, g37_z1_4, g37_z1_4, g37_W4, g37_z1_4, g37_z0_4, g37_z1_4, g37_W4, g37_z1_4, g37_z1_4, g37_z0_4, g37_W4, g37_z0_5, g37_z1_5, g37_z1_5, g37_W5, g37_z1_5, g37_z0_5, g37_z1_5, g37_W5, g37_z1_5, g37_z1_5, g37_z0_5, g37_W5, g37_z0_6, g37_z1_6, g37_z1_6, g37_W6, g37_z1_6, g37_z0_6, g37_z1_6, g37_W6, g37_z1_6, g37_z1_6, g37_z0_6, g37_W6, g37_z0_7, g37_z1_7, g37_z1_7, g37_W7, g37_z1_7, g37_z0_7, g37_z1_7, g37_W7, g37_z1_7, g37_z1_7, g37_z0_7, g37_W7, g37_z0_8, g37_z1_8, g37_z2_8, g37_W8, g37_z0_8, g37_z2_8, g37_z1_8, g37_W8, g37_z1_8, g37_z0_8, g37_z2_8, g37_W8, g37_z1_8, g37_z2_8, g37_z0_8, g37_W8, g37_z2_8, g37_z0_8, g37_z1_8, g37_W8, g37_z2_8, g37_z1_8, g37_z0_8, g37_W8, g37_z0_9, g37_z1_9, g37_z2_9, g37_W9, g37_z0_9, g37_z2_9, g37_z1_9, g37_W9, g37_z1_9, g37_z0_9, g37_z2_9, g37_W9, g37_z1_9, g37_z2_9, g37_z0_9, g37_W9, g37_z2_9, g37_z0_9, g37_z1_9, g37_W9, g37_z2_9, g37_z1_9, g37_z0_9, g37_W9, g37_z0_10, g37_z1_10, g37_z2_10, g37_W10, g37_z0_10, g37_z2_10, g37_z1_10, g37_W10, g37_z1_10, g37_z0_10, g37_z2_10, g37_W10, g37_z1_10, g37_z2_10, g37_z0_10, g37_W10, g37_z2_10, g37_z0_10, g37_z1_10, g37_W10, g37_z2_10, g37_z1_10, g37_z0_10, g37_W10 }; // Added by Samuel Jung, 4/16/2025 // these are 3rd order quadrature points for a tetrahedron. // there are 4 evaluation points in this scheme. // these points come from the paper"Symmetric quadrature rules for tetrahedra based on a // cubic close-packed lattice arrangement" by Lee Shunn and Frank Ham #define g3d_4_a 0.1381966011250110 #define g3d_4_b 0.5854101966249680 #define g3d_4_w 0.250 static fp_t g3d_4[4][5] = { g3d_4_b, g3d_4_a, g3d_4_a, g3d_4_a, g3d_4_w, g3d_4_a, g3d_4_b, g3d_4_a, g3d_4_a, g3d_4_w, g3d_4_a, g3d_4_a, g3d_4_b, g3d_4_a, g3d_4_w, g3d_4_a, g3d_4_a, g3d_4_a, g3d_4_b, g3d_4_w }; #define g3d_10_a 0.0738349017262234 #define g3d_10_b 0.7784952948213300 #define g3d_10_c 0.4062443438840510 #define g3d_10_d 0.0937556561159491 #define g3d_10_w1 0.0476331348432089 #define g3d_10_w2 0.1349112434378610 static fp_t g3d_10[10][5] = { g3d_10_b, g3d_10_a, g3d_10_a, g3d_10_a, g3d_10_w1, g3d_10_a, g3d_10_b, g3d_10_a, g3d_10_a, g3d_10_w1, g3d_10_a, g3d_10_a, g3d_10_b, g3d_10_a, g3d_10_w1, g3d_10_a, g3d_10_a, g3d_10_a, g3d_10_b, g3d_10_w1, g3d_10_c, g3d_10_c, g3d_10_d, g3d_10_d, g3d_10_w2, g3d_10_c, g3d_10_d, g3d_10_c, g3d_10_d, g3d_10_w2, g3d_10_c, g3d_10_d, g3d_10_d, g3d_10_c, g3d_10_w2, g3d_10_d, g3d_10_c, g3d_10_c, g3d_10_d, g3d_10_w2, g3d_10_d, g3d_10_c, g3d_10_d, g3d_10_c, g3d_10_w2, g3d_10_d, g3d_10_d, g3d_10_c, g3d_10_c, g3d_10_w2, }; static fp_t g3d_20[20][5] = { 0.9029422158182680, 0.0323525947272439, 0.0323525947272439, 0.0323525947272439, 0.0070670747944695, 0.0323525947272439, 0.9029422158182680, 0.0323525947272439, 0.0323525947272439, 0.0070670747944695, 0.0323525947272439, 0.0323525947272439, 0.9029422158182680, 0.0323525947272439, 0.0070670747944695, 0.0323525947272439, 0.0323525947272439, 0.0323525947272439, 0.9029422158182680, 0.0070670747944695, 0.2626825838877790, 0.6165965330619370, 0.0603604415251421, 0.0603604415251421, 0.0469986689718877, 0.6165965330619370, 0.2626825838877790, 0.0603604415251421, 0.0603604415251421, 0.0469986689718877, 0.2626825838877790, 0.0603604415251421, 0.6165965330619370, 0.0603604415251421, 0.0469986689718877, 0.6165965330619370, 0.0603604415251421, 0.2626825838877790, 0.0603604415251421, 0.0469986689718877, 0.2626825838877790, 0.0603604415251421, 0.0603604415251421, 0.6165965330619370, 0.0469986689718877, 0.6165965330619370, 0.0603604415251421, 0.0603604415251421, 0.2626825838877790, 0.0469986689718877, 0.0603604415251421, 0.2626825838877790, 0.6165965330619370, 0.0603604415251421, 0.0469986689718877, 0.0603604415251421, 0.6165965330619370, 0.2626825838877790, 0.0603604415251421, 0.0469986689718877, 0.0603604415251421, 0.2626825838877790, 0.0603604415251421, 0.6165965330619370, 0.0469986689718877, 0.0603604415251421, 0.6165965330619370, 0.0603604415251421, 0.2626825838877790, 0.0469986689718877, 0.0603604415251421, 0.0603604415251421, 0.2626825838877790, 0.6165965330619370, 0.0469986689718877, 0.0603604415251421, 0.0603604415251421, 0.6165965330619370, 0.2626825838877790, 0.0469986689718877, 0.3097693042728620, 0.3097693042728620, 0.3097693042728620, 0.0706920871814129, 0.1019369182898680, 0.3097693042728620, 0.3097693042728620, 0.0706920871814129, 0.3097693042728620, 0.1019369182898680, 0.3097693042728620, 0.0706920871814129, 0.3097693042728620, 0.3097693042728620, 0.1019369182898680, 0.0706920871814129, 0.3097693042728620, 0.3097693042728620, 0.3097693042728620, 0.1019369182898680 }; static fp_t g3d_35[35][5] = { 0.9197896733368800, 0.0267367755543735, 0.0267367755543735, 0.0267367755543735, 0.0021900463965388, 0.0267367755543735, 0.9197896733368800, 0.0267367755543735, 0.0267367755543735, 0.0021900463965388, 0.0267367755543735, 0.0267367755543735, 0.9197896733368800, 0.0267367755543735, 0.0021900463965388, 0.0267367755543735, 0.0267367755543735, 0.0267367755543735, 0.9197896733368800, 0.0021900463965388, 0.1740356302468940, 0.7477598884818090, 0.0391022406356488, 0.0391022406356488, 0.0143395670177665, 0.7477598884818090, 0.1740356302468940, 0.0391022406356488, 0.0391022406356488, 0.0143395670177665, 0.1740356302468940, 0.0391022406356488, 0.7477598884818090, 0.0391022406356488, 0.0143395670177665, 0.7477598884818090, 0.0391022406356488, 0.1740356302468940, 0.0391022406356488, 0.0143395670177665, 0.1740356302468940, 0.0391022406356488, 0.0391022406356488, 0.7477598884818090, 0.0143395670177665, 0.7477598884818090, 0.0391022406356488, 0.0391022406356488, 0.1740356302468940, 0.0143395670177665, 0.0391022406356488, 0.1740356302468940, 0.7477598884818090, 0.0391022406356488, 0.0143395670177665, 0.0391022406356488, 0.7477598884818090, 0.1740356302468940, 0.0391022406356488, 0.0143395670177665, 0.0391022406356488, 0.1740356302468940, 0.0391022406356488, 0.7477598884818090, 0.0143395670177665, 0.0391022406356488, 0.7477598884818090, 0.0391022406356488, 0.1740356302468940, 0.0143395670177665, 0.0391022406356488, 0.0391022406356488, 0.1740356302468940, 0.7477598884818090, 0.0143395670177665, 0.0391022406356488, 0.0391022406356488, 0.7477598884818090, 0.1740356302468940, 0.0143395670177665, 0.4547545999844830, 0.4547545999844830, 0.0452454000155172, 0.0452454000155172, 0.0250305395686746, 0.4547545999844830, 0.0452454000155172, 0.4547545999844830, 0.0452454000155172, 0.0250305395686746, 0.4547545999844830, 0.0452454000155172, 0.0452454000155172, 0.4547545999844830, 0.0250305395686746, 0.0452454000155172, 0.4547545999844830, 0.4547545999844830, 0.0452454000155172, 0.0250305395686746, 0.0452454000155172, 0.4547545999844830, 0.0452454000155172, 0.4547545999844830, 0.0250305395686746, 0.0452454000155172, 0.0452454000155172, 0.4547545999844830, 0.4547545999844830, 0.0250305395686746, 0.5031186450145980, 0.2232010379623150, 0.2232010379623150, 0.0504792790607720, 0.0479839333057554, 0.2232010379623150, 0.5031186450145980, 0.2232010379623150, 0.0504792790607720, 0.0479839333057554, 0.2232010379623150, 0.2232010379623150, 0.5031186450145980, 0.0504792790607720, 0.0479839333057554, 0.5031186450145980, 0.2232010379623150, 0.0504792790607720, 0.2232010379623150, 0.0479839333057554, 0.2232010379623150, 0.5031186450145980, 0.0504792790607720, 0.2232010379623150, 0.0479839333057554, 0.2232010379623150, 0.2232010379623150, 0.0504792790607720, 0.5031186450145980, 0.0479839333057554, 0.5031186450145980, 0.0504792790607720, 0.2232010379623150, 0.2232010379623150, 0.0479839333057554, 0.2232010379623150, 0.0504792790607720, 0.5031186450145980, 0.2232010379623150, 0.0479839333057554, 0.2232010379623150, 0.0504792790607720, 0.2232010379623150, 0.5031186450145980, 0.0479839333057554, 0.0504792790607720, 0.5031186450145980, 0.2232010379623150, 0.2232010379623150, 0.0479839333057554, 0.0504792790607720, 0.2232010379623150, 0.5031186450145980, 0.2232010379623150, 0.0479839333057554, 0.0504792790607720, 0.2232010379623150, 0.2232010379623150, 0.5031186450145980, 0.0479839333057554, 0.2500000000000000, 0.2500000000000000, 0.2500000000000000, 0.2500000000000000, 0.0931745731195340 }; static fp_t g3d_56[56][5] = { 0.9551438045408220, 0.0149520651530592, 0.0149520651530592, 0.0149520651530592, 0.0010373112336140, 0.0149520651530592, 0.9551438045408220, 0.0149520651530592, 0.0149520651530592, 0.0010373112336140, 0.0149520651530592, 0.0149520651530592, 0.9551438045408220, 0.0149520651530592, 0.0010373112336140, 0.0149520651530592, 0.0149520651530592, 0.0149520651530592, 0.9551438045408220, 0.0010373112336140, 0.7799760084415400, 0.1518319491659370, 0.0340960211962615, 0.0340960211962615, 0.0096016645399480, 0.1518319491659370, 0.7799760084415400, 0.0340960211962615, 0.0340960211962615, 0.0096016645399480, 0.7799760084415400, 0.0340960211962615, 0.1518319491659370, 0.0340960211962615, 0.0096016645399480, 0.1518319491659370, 0.0340960211962615, 0.7799760084415400, 0.0340960211962615, 0.0096016645399480, 0.7799760084415400, 0.0340960211962615, 0.0340960211962615, 0.1518319491659370, 0.0096016645399480, 0.1518319491659370, 0.0340960211962615, 0.0340960211962615, 0.7799760084415400, 0.0096016645399480, 0.0340960211962615, 0.7799760084415400, 0.1518319491659370, 0.0340960211962615, 0.0096016645399480, 0.0340960211962615, 0.1518319491659370, 0.7799760084415400, 0.0340960211962615, 0.0096016645399480, 0.0340960211962615, 0.7799760084415400, 0.0340960211962615, 0.1518319491659370, 0.0096016645399480, 0.0340960211962615, 0.1518319491659370, 0.0340960211962615, 0.7799760084415400, 0.0096016645399480, 0.0340960211962615, 0.0340960211962615, 0.7799760084415400, 0.1518319491659370, 0.0096016645399480, 0.0340960211962615, 0.0340960211962615, 0.1518319491659370, 0.7799760084415400, 0.0096016645399480, 0.3549340560639790, 0.5526556431060170, 0.0462051504150017, 0.0462051504150017, 0.0164493976798232, 0.5526556431060170, 0.3549340560639790, 0.0462051504150017, 0.0462051504150017, 0.0164493976798232, 0.3549340560639790, 0.0462051504150017, 0.5526556431060170, 0.0462051504150017, 0.0164493976798232, 0.5526556431060170, 0.0462051504150017, 0.3549340560639790, 0.0462051504150017, 0.0164493976798232, 0.3549340560639790, 0.0462051504150017, 0.0462051504150017, 0.5526556431060170, 0.0164493976798232, 0.5526556431060170, 0.0462051504150017, 0.0462051504150017, 0.3549340560639790, 0.0164493976798232, 0.0462051504150017, 0.3549340560639790, 0.5526556431060170, 0.0462051504150017, 0.0164493976798232, 0.0462051504150017, 0.5526556431060170, 0.3549340560639790, 0.0462051504150017, 0.0164493976798232, 0.0462051504150017, 0.3549340560639790, 0.0462051504150017, 0.5526556431060170, 0.0164493976798232, 0.0462051504150017, 0.5526556431060170, 0.0462051504150017, 0.3549340560639790, 0.0164493976798232, 0.0462051504150017, 0.0462051504150017, 0.3549340560639790, 0.5526556431060170, 0.0164493976798232, 0.0462051504150017, 0.0462051504150017, 0.5526556431060170, 0.3549340560639790, 0.0164493976798232, 0.5381043228880020, 0.2281904610687610, 0.2281904610687610, 0.0055147549744775, 0.0153747766513310, 0.2281904610687610, 0.5381043228880020, 0.2281904610687610, 0.0055147549744775, 0.0153747766513310, 0.2281904610687610, 0.2281904610687610, 0.5381043228880020, 0.0055147549744775, 0.0153747766513310, 0.5381043228880020, 0.2281904610687610, 0.0055147549744775, 0.2281904610687610, 0.0153747766513310, 0.2281904610687610, 0.5381043228880020, 0.0055147549744775, 0.2281904610687610, 0.0153747766513310, 0.2281904610687610, 0.2281904610687610, 0.0055147549744775, 0.5381043228880020, 0.0153747766513310, 0.5381043228880020, 0.0055147549744775, 0.2281904610687610, 0.2281904610687610, 0.0153747766513310, 0.2281904610687610, 0.0055147549744775, 0.5381043228880020, 0.2281904610687610, 0.0153747766513310, 0.2281904610687610, 0.0055147549744775, 0.2281904610687610, 0.5381043228880020, 0.0153747766513310, 0.0055147549744775, 0.5381043228880020, 0.2281904610687610, 0.2281904610687610, 0.0153747766513310, 0.0055147549744775, 0.2281904610687610, 0.5381043228880020, 0.2281904610687610, 0.0153747766513310, 0.0055147549744775, 0.2281904610687610, 0.2281904610687610, 0.5381043228880020, 0.0153747766513310, 0.1961837595745600, 0.3523052600879940, 0.3523052600879940, 0.0992057202494530, 0.0293520118375230, 0.3523052600879940, 0.1961837595745600, 0.3523052600879940, 0.0992057202494530, 0.0293520118375230, 0.3523052600879940, 0.3523052600879940, 0.1961837595745600, 0.0992057202494530, 0.0293520118375230, 0.1961837595745600, 0.3523052600879940, 0.0992057202494530, 0.3523052600879940, 0.0293520118375230, 0.3523052600879940, 0.1961837595745600, 0.0992057202494530, 0.3523052600879940, 0.0293520118375230, 0.3523052600879940, 0.3523052600879940, 0.0992057202494530, 0.1961837595745600, 0.0293520118375230, 0.1961837595745600, 0.0992057202494530, 0.3523052600879940, 0.3523052600879940, 0.0293520118375230, 0.3523052600879940, 0.0992057202494530, 0.1961837595745600, 0.3523052600879940, 0.0293520118375230, 0.3523052600879940, 0.0992057202494530, 0.3523052600879940, 0.1961837595745600, 0.0293520118375230, 0.0992057202494530, 0.1961837595745600, 0.3523052600879940, 0.3523052600879940, 0.0293520118375230, 0.0992057202494530, 0.3523052600879940, 0.1961837595745600, 0.3523052600879940, 0.0293520118375230, 0.0992057202494530, 0.3523052600879940, 0.3523052600879940, 0.1961837595745600, 0.0293520118375230, 0.5965649956210170, 0.1344783347929940, 0.1344783347929940, 0.1344783347929940, 0.0366291366405108, 0.1344783347929940, 0.5965649956210170, 0.1344783347929940, 0.1344783347929940, 0.0366291366405108, 0.1344783347929940, 0.1344783347929940, 0.5965649956210170, 0.1344783347929940, 0.0366291366405108, 0.1344783347929940, 0.1344783347929940, 0.1344783347929940, 0.5965649956210170, 0.0366291366405108 }; static fp_t gauss21[21][4] = { 0.444444, 0.444444, 0.111111, 0.075011, 0.367096, 0.367096, 0.265809, 0.0419797, 0.831189, 0.135049, 0.0337622, 0.0419797, 0.135049, 0.831189, 0.0337622, 0.0419797, 0.626856, 0.21643, 0.156714, 0.0441314, 0.490047, 0.490047, 0.0199053, 0.0441314, 0.21643, 0.626856, 0.156714, 0.0441314, 0.111111, 0.444444, 0.444444, 0.075011, 0.265809, 0.367096, 0.367096, 0.0419797, 0.0337622, 0.831189, 0.135049, 0.0419797, 0.0337622, 0.135049, 0.831189, 0.0419797, 0.156714, 0.626856, 0.21643, 0.0441314, 0.0199053, 0.490047, 0.490047, 0.0441314, 0.156714, 0.21643, 0.626856, 0.0441314, 0.444444, 0.111111, 0.444444, 0.075011, 0.367096, 0.265809, 0.367096, 0.0419797, 0.135049, 0.0337622, 0.831189, 0.0419797, 0.831189, 0.0337622, 0.135049, 0.0419797, 0.21643, 0.156714, 0.626856, 0.0441314, 0.490047, 0.0199053, 0.490047, 0.0441314, 0.626856, 0.156714, 0.21643, 0.0441314 }; static fp_t gauss4_21[4][21][4] = { 0.444444, 0.444444, 0.111111, 0.075011, 0.367096, 0.367096, 0.265809, 0.0419797, 0.831189, 0.135049, 0.0337622, 0.0419797, 0.135049, 0.831189, 0.0337622, 0.0419797, 0.626856, 0.21643, 0.156714, 0.0441314, 0.490047, 0.490047, 0.0199053, 0.0441314, 0.21643, 0.626856, 0.156714, 0.0441314, 0.111111, 0.444444, 0.444444, 0.075011, 0.265809, 0.367096, 0.367096, 0.0419797, 0.0337622, 0.831189, 0.135049, 0.0419797, 0.0337622, 0.135049, 0.831189, 0.0419797, 0.156714, 0.626856, 0.21643, 0.0441314, 0.0199053, 0.490047, 0.490047, 0.0441314, 0.156714, 0.21643, 0.626856, 0.0441314, 0.444444, 0.111111, 0.444444, 0.075011, 0.367096, 0.265809, 0.367096, 0.0419797, 0.135049, 0.0337622, 0.831189, 0.0419797, 0.831189, 0.0337622, 0.135049, 0.0419797, 0.21643, 0.156714, 0.626856, 0.0441314, 0.490047, 0.0199053, 0.490047, 0.0441314, 0.626856, 0.156714, 0.21643, 0.0441314, 0.533333, 0.4, 0.0666667, 0.0450066, 0.579743, 0.260772, 0.159485, 0.0251878, 0.858199, 0.121544, 0.0202573, 0.0251878, 0.162058, 0.817684, 0.0202573, 0.0251878, 0.752227, 0.153744, 0.0940284, 0.0264788, 0.505972, 0.482085, 0.0119432, 0.0264788, 0.341801, 0.56417, 0.0940284, 0.0264788, 0.2, 0.4, 0.4, 0.13502, 0.478456, 0.260772, 0.260772, 0.0755635, 0.0607719, 0.817684, 0.121544, 0.0755635, 0.0607719, 0.121544, 0.817684, 0.0755635, 0.282085, 0.56417, 0.153744, 0.0794365, 0.0358295, 0.482085, 0.482085, 0.0794365, 0.282085, 0.153744, 0.56417, 0.0794365, 0.533333, 0.0666667, 0.4, 0.0450066, 0.579743, 0.159485, 0.260772, 0.0251878, 0.162058, 0.0202573, 0.817684, 0.0251878, 0.858199, 0.0202573, 0.121544, 0.0251878, 0.341801, 0.0940284, 0.56417, 0.0264788, 0.505972, 0.0119432, 0.482085, 0.0264788, 0.752227, 0.0940284, 0.153744, 0.0264788, 0.4, 0.533333, 0.0666667, 0.0450066, 0.260772, 0.579743, 0.159485, 0.0251878, 0.817684, 0.162058, 0.0202573, 0.0251878, 0.121544, 0.858199, 0.0202573, 0.0251878, 0.56417, 0.341801, 0.0940284, 0.0264788, 0.482085, 0.505972, 0.0119432, 0.0264788, 0.153744, 0.752227, 0.0940284, 0.0264788, 0.0666667, 0.533333, 0.4, 0.0450066, 0.159485, 0.579743, 0.260772, 0.0251878, 0.0202573, 0.858199, 0.121544, 0.0251878, 0.0202573, 0.162058, 0.817684, 0.0251878, 0.0940284, 0.752227, 0.153744, 0.0264788, 0.0119432, 0.505972, 0.482085, 0.0264788, 0.0940284, 0.341801, 0.56417, 0.0264788, 0.4, 0.2, 0.4, 0.13502, 0.260772, 0.478456, 0.260772, 0.0755635, 0.121544, 0.0607719, 0.817684, 0.0755635, 0.817684, 0.0607719, 0.121544, 0.0755635, 0.153744, 0.282085, 0.56417, 0.0794365, 0.482085, 0.0358295, 0.482085, 0.0794365, 0.56417, 0.282085, 0.153744, 0.0794365, 0.4, 0.4, 0.2, 0.13502, 0.260772, 0.260772, 0.478456, 0.0755635, 0.817684, 0.121544, 0.0607719, 0.0755635, 0.121544, 0.817684, 0.0607719, 0.0755635, 0.56417, 0.153744, 0.282085, 0.0794365, 0.482085, 0.482085, 0.0358295, 0.0794365, 0.153744, 0.56417, 0.282085, 0.0794365, 0.0666667, 0.4, 0.533333, 0.0450066, 0.159485, 0.260772, 0.579743, 0.0251878, 0.0202573, 0.817684, 0.162058, 0.0251878, 0.0202573, 0.121544, 0.858199, 0.0251878, 0.0940284, 0.56417, 0.341801, 0.0264788, 0.0119432, 0.482085, 0.505972, 0.0264788, 0.0940284, 0.153744, 0.752227, 0.0264788, 0.4, 0.0666667, 0.533333, 0.0450066, 0.260772, 0.159485, 0.579743, 0.0251878, 0.121544, 0.0202573, 0.858199, 0.0251878, 0.817684, 0.0202573, 0.162058, 0.0251878, 0.153744, 0.0940284, 0.752227, 0.0264788, 0.482085, 0.0119432, 0.505972, 0.0264788, 0.56417, 0.0940284, 0.341801, 0.0264788, }; // a factor of 2 was divided by all weights 08/15/02 static fp_t duffy1_12[1][12][4] = { 0.429558, 0.30755, 0.262892, 0.0704416/2., 0.30755, 0.429558, 0.262892, 0.0704416/2., 0.69245, 0.237108, 0.0704416, 0.262892/2., 0.237108, 0.69245, 0.0704416, 0.262892/2., 0.262892, 0.429558, 0.30755, 0.0704416/2., 0.262892, 0.30755, 0.429558, 0.0704416/2., 0.0704416, 0.69245, 0.237108, 0.262892/2., 0.0704416, 0.237108, 0.69245, 0.262892/2., 0.30755, 0.262892, 0.429558, 0.0704416/2., 0.429558, 0.262892, 0.30755, 0.0704416/2., 0.237108, 0.0704416, 0.69245, 0.262892/2., 0.69245, 0.0704416, 0.237108, 0.262892/2., }; // a factor of 2 was divided by all weights 08/15/02 static fp_t duffy3_12[3][12][4] = { 0.69245, 0.176104, 0.131446, 0.0352208/2., 0.570442, 0.298113, 0.131446, 0.0352208/2., 0.762892, 0.201887, 0.0352208, 0.131446/2., 0.30755, 0.657229, 0.0352208, 0.131446/2., 0.525783, 0.298113, 0.176104, 0.140883/2., 0.525783, 0.176104, 0.298113, 0.140883/2., 0.140883, 0.657229, 0.201887, 0.525783/2., 0.140883, 0.201887, 0.657229, 0.525783/2., 0.570442, 0.131446, 0.298113, 0.0352208/2., 0.69245, 0.131446, 0.176104, 0.0352208/2., 0.30755, 0.0352208, 0.657229, 0.131446/2., 0.762892, 0.0352208, 0.201887, 0.131446/2., 0.298113, 0.570442, 0.131446, 0.0352208/2., 0.176104, 0.69245, 0.131446, 0.0352208/2., 0.657229, 0.30755, 0.0352208, 0.131446/2., 0.201887, 0.762892, 0.0352208, 0.131446/2., 0.131446, 0.69245, 0.176104, 0.0352208/2., 0.131446, 0.570442, 0.298113, 0.0352208/2., 0.0352208, 0.762892, 0.201887, 0.131446/2., 0.0352208, 0.30755, 0.657229, 0.131446/2., 0.176104, 0.525783, 0.298113, 0.140883/2., 0.298113, 0.525783, 0.176104, 0.140883/2., 0.201887, 0.140883, 0.657229, 0.525783/2., 0.657229, 0.140883, 0.201887, 0.525783/2., 0.298113, 0.176104, 0.525783, 0.140883/2., 0.176104, 0.298113, 0.525783, 0.140883/2., 0.657229, 0.201887, 0.140883, 0.525783/2., 0.201887, 0.657229, 0.140883, 0.525783/2., 0.131446, 0.298113, 0.570442, 0.0352208/2., 0.131446, 0.176104, 0.69245, 0.0352208/2., 0.0352208, 0.657229, 0.30755, 0.131446/2., 0.0352208, 0.201887, 0.762892, 0.131446/2., 0.176104, 0.131446, 0.69245, 0.0352208/2., 0.298113, 0.131446, 0.570442, 0.0352208/2., 0.201887, 0.0352208, 0.762892, 0.131446/2., 0.657229, 0.0352208, 0.30755, 0.131446/2., }; // correct waights should add up to 2. static fp_t duffy4_12[4][12][4] = { 0.429558, 0.30755, 0.262892, 0.0704416, 0.30755, 0.429558, 0.262892, 0.0704416, 0.69245, 0.237108, 0.0704416, 0.262892, 0.237108, 0.69245, 0.0704416, 0.262892, 0.262892, 0.429558, 0.30755, 0.0704416, 0.262892, 0.30755, 0.429558, 0.0704416, 0.0704416, 0.69245, 0.237108, 0.262892, 0.0704416, 0.237108, 0.69245, 0.262892, 0.30755, 0.262892, 0.429558, 0.0704416, 0.429558, 0.262892, 0.30755, 0.0704416, 0.237108, 0.0704416, 0.69245, 0.262892, 0.69245, 0.0704416, 0.237108, 0.262892, 0.639872, 0.202393, 0.157735, 0.042265, 0.517863, 0.324402, 0.157735, 0.042265, 0.748803, 0.208932, 0.042265, 0.157735, 0.293462, 0.664273, 0.042265, 0.157735, 0.473205, 0.324402, 0.202393, 0.126795, 0.473205, 0.202393, 0.324402, 0.126795, 0.126795, 0.664273, 0.208932, 0.473205, 0.126795, 0.208932, 0.664273, 0.473205, 0.517863, 0.157735, 0.324402, 0.042265, 0.639872, 0.157735, 0.202393, 0.042265, 0.293462, 0.042265, 0.664273, 0.157735, 0.748803, 0.042265, 0.208932, 0.157735, 0.324402, 0.517863, 0.157735, 0.042265, 0.202393, 0.639872, 0.157735, 0.042265, 0.664273, 0.293462, 0.042265, 0.157735, 0.208932, 0.748803, 0.042265, 0.157735, 0.157735, 0.639872, 0.202393, 0.042265, 0.157735, 0.517863, 0.324402, 0.042265, 0.042265, 0.748803, 0.208932, 0.157735, 0.042265, 0.293462, 0.664273, 0.157735, 0.202393, 0.473205, 0.324402, 0.126795, 0.324402, 0.473205, 0.202393, 0.126795, 0.208932, 0.126795, 0.664273, 0.473205, 0.664273, 0.126795, 0.208932, 0.473205, 0.324402, 0.202393, 0.473205, 0.126795, 0.202393, 0.324402, 0.473205, 0.126795, 0.664273, 0.208932, 0.126795, 0.473205, 0.208932, 0.664273, 0.126795, 0.473205, 0.157735, 0.324402, 0.517863, 0.042265, 0.157735, 0.202393, 0.639872, 0.042265, 0.042265, 0.664273, 0.293462, 0.157735, 0.042265, 0.208932, 0.748803, 0.157735, 0.202393, 0.157735, 0.639872, 0.042265, 0.324402, 0.157735, 0.517863, 0.042265, 0.208932, 0.042265, 0.748803, 0.157735, 0.664273, 0.042265, 0.293462, 0.157735, }; // a factor of 2 was divided by all weights 08/15/02 static fp_t duffy7_12[7][12][4] = { 0.429558, 0.30755, 0.262892, 0.0704416/2., 0.30755, 0.429558, 0.262892, 0.0704416/2., 0.69245, 0.237108, 0.0704416, 0.262892/2., 0.237108, 0.69245, 0.0704416, 0.262892/2., 0.262892, 0.429558, 0.30755, 0.0704416/2., 0.262892, 0.30755, 0.429558, 0.0704416/2., 0.0704416, 0.69245, 0.237108, 0.262892/2., 0.0704416, 0.237108, 0.69245, 0.262892/2., 0.30755, 0.262892, 0.429558, 0.0704416/2., 0.429558, 0.262892, 0.30755, 0.0704416/2., 0.237108, 0.0704416, 0.69245, 0.262892/2., 0.69245, 0.0704416, 0.237108, 0.262892/2., 0.795578, 0.12454, 0.0798821, 0.0214044/2., 0.673569, 0.246549, 0.0798821, 0.0214044/2., 0.790525, 0.188071, 0.0214044, 0.0798821/2., 0.335183, 0.643413, 0.0214044, 0.0798821/2., 0.628911, 0.246549, 0.12454, 0.168516/2., 0.628911, 0.12454, 0.246549, 0.168516/2., 0.168516, 0.643413, 0.188071, 0.628911/2., 0.168516, 0.188071, 0.643413, 0.628911/2., 0.673569, 0.0798821, 0.246549, 0.0214044/2., 0.795578, 0.0798821, 0.12454, 0.0214044/2., 0.335183, 0.0214044, 0.643413, 0.0798821/2., 0.790525, 0.0214044, 0.188071, 0.0798821/2., 0.246549, 0.673569, 0.0798821, 0.0214044/2., 0.12454, 0.795578, 0.0798821, 0.0214044/2., 0.643413, 0.335183, 0.0214044, 0.0798821/2., 0.188071, 0.790525, 0.0214044, 0.0798821/2., 0.0798821, 0.795578, 0.12454, 0.0214044/2., 0.0798821, 0.673569, 0.246549, 0.0214044/2., 0.0214044, 0.790525, 0.188071, 0.0798821/2., 0.0214044, 0.335183, 0.643413, 0.0798821/2., 0.12454, 0.628911, 0.246549, 0.168516/2., 0.246549, 0.628911, 0.12454, 0.168516/2., 0.188071, 0.168516, 0.643413, 0.628911/2., 0.643413, 0.168516, 0.188071, 0.628911/2., 0.246549, 0.12454, 0.628911, 0.168516/2., 0.12454, 0.246549, 0.628911, 0.168516/2., 0.643413, 0.188071, 0.168516, 0.628911/2., 0.188071, 0.643413, 0.168516, 0.628911/2., 0.0798821, 0.246549, 0.673569, 0.0214044/2., 0.0798821, 0.12454, 0.795578, 0.0214044/2., 0.0214044, 0.643413, 0.335183, 0.0798821/2., 0.0214044, 0.188071, 0.790525, 0.0798821/2., 0.12454, 0.0798821, 0.795578, 0.0214044/2., 0.246549, 0.0798821, 0.673569, 0.0214044/2., 0.188071, 0.0214044, 0.790525, 0.0798821/2., 0.643413, 0.0214044, 0.335183, 0.0798821/2., 0.537456, 0.415448, 0.0470964, 0.0126194/2., 0.415448, 0.537456, 0.0470964, 0.0126194/2., 0.721361, 0.266019, 0.0126194, 0.0470964/2., 0.266019, 0.721361, 0.0126194, 0.0470964/2., 0.370789, 0.537456, 0.0917546, 0.0993527/2., 0.370789, 0.415448, 0.213763, 0.0993527/2., 0.0993527, 0.721361, 0.179286, 0.370789/2., 0.0993527, 0.266019, 0.634628, 0.370789/2., 0.415448, 0.370789, 0.213763, 0.0993527/2., 0.537456, 0.370789, 0.0917546, 0.0993527/2., 0.266019, 0.0993527, 0.634628, 0.370789/2., 0.721361, 0.0993527, 0.179286, 0.370789/2., 0.213763, 0.415448, 0.370789, 0.0993527/2., 0.0917546, 0.537456, 0.370789, 0.0993527/2., 0.634628, 0.266019, 0.0993527, 0.370789/2., 0.179286, 0.721361, 0.0993527, 0.370789/2., 0.0470964, 0.537456, 0.415448, 0.0126194/2., 0.0470964, 0.415448, 0.537456, 0.0126194/2., 0.0126194, 0.721361, 0.266019, 0.0470964/2., 0.0126194, 0.266019, 0.721361, 0.0470964/2., 0.0917546, 0.370789, 0.537456, 0.0993527/2., 0.213763, 0.370789, 0.415448, 0.0993527/2., 0.179286, 0.0993527, 0.721361, 0.370789/2., 0.634628, 0.0993527, 0.266019, 0.370789/2., 0.537456, 0.0917546, 0.370789, 0.0993527/2., 0.415448, 0.213763, 0.370789, 0.0993527/2., 0.721361, 0.179286, 0.0993527, 0.370789/2., 0.266019, 0.634628, 0.0993527, 0.370789/2., 0.370789, 0.213763, 0.415448, 0.0993527/2., 0.370789, 0.0917546, 0.537456, 0.0993527/2., 0.0993527, 0.634628, 0.266019, 0.370789/2., 0.0993527, 0.179286, 0.721361, 0.370789/2., 0.415448, 0.0470964, 0.537456, 0.0126194/2., 0.537456, 0.0470964, 0.415448, 0.0126194/2., 0.266019, 0.0126194, 0.721361, 0.0470964/2., 0.721361, 0.0126194, 0.266019, 0.0470964/2., }; static fp_t duffy1_27[1][27][4] = { 0.395766, 0.308468, 0.295766, 0.00579741, 0.308468, 0.395766, 0.295766, 0.00579741, 0.352117, 0.352117, 0.295766, 0.00927586, 0.824866, 0.137567, 0.0375672, 0.0456429, 0.137567, 0.824866, 0.0375672, 0.0456429, 0.481216, 0.481216, 0.0375672, 0.0730287, 0.610316, 0.223017, 0.166667, 0.0411523, 0.223017, 0.610316, 0.166667, 0.0411523, 0.416667, 0.416667, 0.166667, 0.0658436, 0.295766, 0.395766, 0.308468, 0.00579741, 0.295766, 0.308468, 0.395766, 0.00579741, 0.295766, 0.352117, 0.352117, 0.00927586, 0.0375672, 0.824866, 0.137567, 0.0456429, 0.0375672, 0.137567, 0.824866, 0.0456429, 0.0375672, 0.481216, 0.481216, 0.0730287, 0.166667, 0.610316, 0.223017, 0.0411523, 0.166667, 0.223017, 0.610316, 0.0411523, 0.166667, 0.416667, 0.416667, 0.0658436, 0.308468, 0.295766, 0.395766, 0.00579741, 0.395766, 0.295766, 0.308468, 0.00579741, 0.352117, 0.295766, 0.352117, 0.00927586, 0.137567, 0.0375672, 0.824866, 0.0456429, 0.824866, 0.0375672, 0.137567, 0.0456429, 0.481216, 0.0375672, 0.481216, 0.0730287, 0.223017, 0.166667, 0.610316, 0.0411523, 0.610316, 0.166667, 0.223017, 0.0411523, 0.416667, 0.166667, 0.416667, 0.0658436, }; static fp_t duffy3_27[3][27][4] = { 0.691532, 0.160585, 0.147883, 0.00289871, 0.604234, 0.247883, 0.147883, 0.00289871, 0.647883, 0.204234, 0.147883, 0.00463793, 0.862433, 0.118784, 0.0187836, 0.0228215, 0.175134, 0.806082, 0.0187836, 0.0228215, 0.518784, 0.462433, 0.0187836, 0.0365143, 0.776983, 0.139684, 0.0833333, 0.0205761, 0.389684, 0.526983, 0.0833333, 0.0205761, 0.583333, 0.333333, 0.0833333, 0.0329218, 0.591532, 0.247883, 0.160585, 0.0115948, 0.591532, 0.160585, 0.247883, 0.0115948, 0.591532, 0.204234, 0.204234, 0.0185517, 0.0751344, 0.806082, 0.118784, 0.0912858, 0.0751344, 0.118784, 0.806082, 0.0912858, 0.0751344, 0.462433, 0.462433, 0.146057, 0.333333, 0.526983, 0.139684, 0.0823045, 0.333333, 0.139684, 0.526983, 0.0823045, 0.333333, 0.333333, 0.333333, 0.131687, 0.604234, 0.147883, 0.247883, 0.00289871, 0.691532, 0.147883, 0.160585, 0.00289871, 0.647883, 0.147883, 0.204234, 0.00463793, 0.175134, 0.0187836, 0.806082, 0.0228215, 0.862433, 0.0187836, 0.118784, 0.0228215, 0.518784, 0.0187836, 0.462433, 0.0365143, 0.389684, 0.0833333, 0.526983, 0.0205761, 0.776983, 0.0833333, 0.139684, 0.0205761, 0.583333, 0.0833333, 0.333333, 0.0329218, 0.247883, 0.604234, 0.147883, 0.00289871, 0.160585, 0.691532, 0.147883, 0.00289871, 0.204234, 0.647883, 0.147883, 0.00463793, 0.806082, 0.175134, 0.0187836, 0.0228215, 0.118784, 0.862433, 0.0187836, 0.0228215, 0.462433, 0.518784, 0.0187836, 0.0365143, 0.526983, 0.389684, 0.0833333, 0.0205761, 0.139684, 0.776983, 0.0833333, 0.0205761, 0.333333, 0.583333, 0.0833333, 0.0329218, 0.147883, 0.691532, 0.160585, 0.00289871, 0.147883, 0.604234, 0.247883, 0.00289871, 0.147883, 0.647883, 0.204234, 0.00463793, 0.0187836, 0.862433, 0.118784, 0.0228215, 0.0187836, 0.175134, 0.806082, 0.0228215, 0.0187836, 0.518784, 0.462433, 0.0365143, 0.0833333, 0.776983, 0.139684, 0.0205761, 0.0833333, 0.389684, 0.526983, 0.0205761, 0.0833333, 0.583333, 0.333333, 0.0329218, 0.160585, 0.591532, 0.247883, 0.0115948, 0.247883, 0.591532, 0.160585, 0.0115948, 0.204234, 0.591532, 0.204234, 0.0185517, 0.118784, 0.0751344, 0.806082, 0.0912858, 0.806082, 0.0751344, 0.118784, 0.0912858, 0.462433, 0.0751344, 0.462433, 0.146057, 0.139684, 0.333333, 0.526983, 0.0823045, 0.526983, 0.333333, 0.139684, 0.0823045, 0.333333, 0.333333, 0.333333, 0.131687, 0.247883, 0.160585, 0.591532, 0.0115948, 0.160585, 0.247883, 0.591532, 0.0115948, 0.204234, 0.204234, 0.591532, 0.0185517, 0.806082, 0.118784, 0.0751344, 0.0912858, 0.118784, 0.806082, 0.0751344, 0.0912858, 0.462433, 0.462433, 0.0751344, 0.146057, 0.526983, 0.139684, 0.333333, 0.0823045, 0.139684, 0.526983, 0.333333, 0.0823045, 0.333333, 0.333333, 0.333333, 0.131687, 0.147883, 0.247883, 0.604234, 0.00289871, 0.147883, 0.160585, 0.691532, 0.00289871, 0.147883, 0.204234, 0.647883, 0.00463793, 0.0187836, 0.806082, 0.175134, 0.0228215, 0.0187836, 0.118784, 0.862433, 0.0228215, 0.0187836, 0.462433, 0.518784, 0.0365143, 0.0833333, 0.526983, 0.389684, 0.0205761, 0.0833333, 0.139684, 0.776983, 0.0205761, 0.0833333, 0.333333, 0.583333, 0.0329218, 0.160585, 0.147883, 0.691532, 0.00289871, 0.247883, 0.147883, 0.604234, 0.00289871, 0.204234, 0.147883, 0.647883, 0.00463793, 0.118784, 0.0187836, 0.862433, 0.0228215, 0.806082, 0.0187836, 0.175134, 0.0228215, 0.462433, 0.0187836, 0.518784, 0.0365143, 0.139684, 0.0833333, 0.776983, 0.0205761, 0.526983, 0.0833333, 0.389684, 0.0205761, 0.333333, 0.0833333, 0.583333, 0.0329218, }; static fp_t duffy4_27[4][27][4] = { 0.395766, 0.308468, 0.295766, 0.00579741, 0.308468, 0.395766, 0.295766, 0.00579741, 0.352117, 0.352117, 0.295766, 0.00927586, 0.824866, 0.137567, 0.0375672, 0.0456429, 0.137567, 0.824866, 0.0375672, 0.0456429, 0.481216, 0.481216, 0.0375672, 0.0730287, 0.610316, 0.223017, 0.166667, 0.0411523, 0.223017, 0.610316, 0.166667, 0.0411523, 0.416667, 0.416667, 0.166667, 0.0658436, 0.295766, 0.395766, 0.308468, 0.00579741, 0.295766, 0.308468, 0.395766, 0.00579741, 0.295766, 0.352117, 0.352117, 0.00927586, 0.0375672, 0.824866, 0.137567, 0.0456429, 0.0375672, 0.137567, 0.824866, 0.0456429, 0.0375672, 0.481216, 0.481216, 0.0730287, 0.166667, 0.610316, 0.223017, 0.0411523, 0.166667, 0.223017, 0.610316, 0.0411523, 0.166667, 0.416667, 0.416667, 0.0658436, 0.308468, 0.295766, 0.395766, 0.00579741, 0.395766, 0.295766, 0.308468, 0.00579741, 0.352117, 0.295766, 0.352117, 0.00927586, 0.137567, 0.0375672, 0.824866, 0.0456429, 0.824866, 0.0375672, 0.137567, 0.0456429, 0.481216, 0.0375672, 0.481216, 0.0730287, 0.223017, 0.166667, 0.610316, 0.0411523, 0.610316, 0.166667, 0.223017, 0.0411523, 0.416667, 0.166667, 0.416667, 0.0658436, 0.632379, 0.190161, 0.17746, 0.00347845, 0.545081, 0.27746, 0.17746, 0.00347845, 0.58873, 0.23381, 0.17746, 0.00556551, 0.854919, 0.12254, 0.0225403, 0.0273858, 0.167621, 0.809839, 0.0225403, 0.0273858, 0.51127, 0.46619, 0.0225403, 0.0438172, 0.743649, 0.156351, 0.1, 0.0246914, 0.356351, 0.543649, 0.1, 0.0246914, 0.55, 0.35, 0.1, 0.0395062, 0.532379, 0.27746, 0.190161, 0.0104353, 0.532379, 0.190161, 0.27746, 0.0104353, 0.532379, 0.23381, 0.23381, 0.0166965, 0.067621, 0.809839, 0.12254, 0.0821573, 0.067621, 0.12254, 0.809839, 0.0821573, 0.067621, 0.46619, 0.46619, 0.131452, 0.3, 0.543649, 0.156351, 0.0740741, 0.3, 0.156351, 0.543649, 0.0740741, 0.3, 0.35, 0.35, 0.118519, 0.545081, 0.17746, 0.27746, 0.00347845, 0.632379, 0.17746, 0.190161, 0.00347845, 0.58873, 0.17746, 0.23381, 0.00556551, 0.167621, 0.0225403, 0.809839, 0.0273858, 0.854919, 0.0225403, 0.12254, 0.0273858, 0.51127, 0.0225403, 0.46619, 0.0438172, 0.356351, 0.1, 0.543649, 0.0246914, 0.743649, 0.1, 0.156351, 0.0246914, 0.55, 0.1, 0.35, 0.0395062, 0.27746, 0.545081, 0.17746, 0.00347845, 0.190161, 0.632379, 0.17746, 0.00347845, 0.23381, 0.58873, 0.17746, 0.00556551, 0.809839, 0.167621, 0.0225403, 0.0273858, 0.12254, 0.854919, 0.0225403, 0.0273858, 0.46619, 0.51127, 0.0225403, 0.0438172, 0.543649, 0.356351, 0.1, 0.0246914, 0.156351, 0.743649, 0.1, 0.0246914, 0.35, 0.55, 0.1, 0.0395062, 0.17746, 0.632379, 0.190161, 0.00347845, 0.17746, 0.545081, 0.27746, 0.00347845, 0.17746, 0.58873, 0.23381, 0.00556551, 0.0225403, 0.854919, 0.12254, 0.0273858, 0.0225403, 0.167621, 0.809839, 0.0273858, 0.0225403, 0.51127, 0.46619, 0.0438172, 0.1, 0.743649, 0.156351, 0.0246914, 0.1, 0.356351, 0.543649, 0.0246914, 0.1, 0.55, 0.35, 0.0395062, 0.190161, 0.532379, 0.27746, 0.0104353, 0.27746, 0.532379, 0.190161, 0.0104353, 0.23381, 0.532379, 0.23381, 0.0166965, 0.12254, 0.067621, 0.809839, 0.0821573, 0.809839, 0.067621, 0.12254, 0.0821573, 0.46619, 0.067621, 0.46619, 0.131452, 0.156351, 0.3, 0.543649, 0.0740741, 0.543649, 0.3, 0.156351, 0.0740741, 0.35, 0.3, 0.35, 0.118519, 0.27746, 0.190161, 0.532379, 0.0104353, 0.190161, 0.27746, 0.532379, 0.0104353, 0.23381, 0.23381, 0.532379, 0.0166965, 0.809839, 0.12254, 0.067621, 0.0821573, 0.12254, 0.809839, 0.067621, 0.0821573, 0.46619, 0.46619, 0.067621, 0.131452, 0.543649, 0.156351, 0.3, 0.0740741, 0.156351, 0.543649, 0.3, 0.0740741, 0.35, 0.35, 0.3, 0.118519, 0.17746, 0.27746, 0.545081, 0.00347845, 0.17746, 0.190161, 0.632379, 0.00347845, 0.17746, 0.23381, 0.58873, 0.00556551, 0.0225403, 0.809839, 0.167621, 0.0273858, 0.0225403, 0.12254, 0.854919, 0.0273858, 0.0225403, 0.46619, 0.51127, 0.0438172, 0.1, 0.543649, 0.356351, 0.0246914, 0.1, 0.156351, 0.743649, 0.0246914, 0.1, 0.35, 0.55, 0.0395062, 0.190161, 0.17746, 0.632379, 0.00347845, 0.27746, 0.17746, 0.545081, 0.00347845, 0.23381, 0.17746, 0.58873, 0.00556551, 0.12254, 0.0225403, 0.854919, 0.0273858, 0.809839, 0.0225403, 0.167621, 0.0273858, 0.46619, 0.0225403, 0.51127, 0.0438172, 0.156351, 0.1, 0.743649, 0.0246914, 0.543649, 0.1, 0.356351, 0.0246914, 0.35, 0.1, 0.55, 0.0395062, }; static fp_t duffy7_27[7][27][4] = { 0.395766, 0.308468, 0.295766, 0.0115948, 0.308468, 0.395766, 0.295766, 0.0115948, 0.352117, 0.352117, 0.295766, 0.0185517, 0.824866, 0.137567, 0.0375672, 0.0912858, 0.137567, 0.824866, 0.0375672, 0.0912858, 0.481216, 0.481216, 0.0375672, 0.146057, 0.610316, 0.223017, 0.166667, 0.0823045, 0.223017, 0.610316, 0.166667, 0.0823045, 0.416667, 0.416667, 0.166667, 0.131687, 0.295766, 0.395766, 0.308468, 0.0115948, 0.295766, 0.308468, 0.395766, 0.0115948, 0.295766, 0.352117, 0.352117, 0.0185517, 0.0375672, 0.824866, 0.137567, 0.0912858, 0.0375672, 0.137567, 0.824866, 0.0912858, 0.0375672, 0.481216, 0.481216, 0.146057, 0.166667, 0.610316, 0.223017, 0.0823045, 0.166667, 0.223017, 0.610316, 0.0823045, 0.166667, 0.416667, 0.416667, 0.131687, 0.308468, 0.295766, 0.395766, 0.0115948, 0.395766, 0.295766, 0.308468, 0.0115948, 0.352117, 0.295766, 0.352117, 0.0185517, 0.137567, 0.0375672, 0.824866, 0.0912858, 0.824866, 0.0375672, 0.137567, 0.0912858, 0.481216, 0.0375672, 0.481216, 0.146057, 0.223017, 0.166667, 0.610316, 0.0823045, 0.610316, 0.166667, 0.223017, 0.0823045, 0.416667, 0.166667, 0.416667, 0.131687, 0.807556, 0.102573, 0.0898713, 0.0035232, 0.720257, 0.189871, 0.0898713, 0.0035232, 0.763906, 0.146222, 0.0898713, 0.00563712, 0.87717, 0.111415, 0.0114152, 0.0277381, 0.189871, 0.798713, 0.0114152, 0.0277381, 0.533521, 0.455064, 0.0114152, 0.0443809, 0.842363, 0.106994, 0.0506433, 0.025009, 0.455064, 0.494292, 0.0506433, 0.025009, 0.648713, 0.300643, 0.0506433, 0.0400144, 0.707556, 0.189871, 0.102573, 0.0277381, 0.707556, 0.102573, 0.189871, 0.0277381, 0.707556, 0.146222, 0.146222, 0.0443809, 0.0898713, 0.798713, 0.111415, 0.218381, 0.0898713, 0.111415, 0.798713, 0.218381, 0.0898713, 0.455064, 0.455064, 0.34941, 0.398713, 0.494292, 0.106994, 0.196896, 0.398713, 0.106994, 0.494292, 0.196896, 0.398713, 0.300643, 0.300643, 0.315033, 0.720257, 0.0898713, 0.189871, 0.0035232, 0.807556, 0.0898713, 0.102573, 0.0035232, 0.763906, 0.0898713, 0.146222, 0.00563712, 0.189871, 0.0114152, 0.798713, 0.0277381, 0.87717, 0.0114152, 0.111415, 0.0277381, 0.533521, 0.0114152, 0.455064, 0.0443809, 0.455064, 0.0506433, 0.494292, 0.025009, 0.842363, 0.0506433, 0.106994, 0.025009, 0.648713, 0.0506433, 0.300643, 0.0400144, 0.189871, 0.720257, 0.0898713, 0.0035232, 0.102573, 0.807556, 0.0898713, 0.0035232, 0.146222, 0.763906, 0.0898713, 0.00563712, 0.798713, 0.189871, 0.0114152, 0.0277381, 0.111415, 0.87717, 0.0114152, 0.0277381, 0.455064, 0.533521, 0.0114152, 0.0443809, 0.494292, 0.455064, 0.0506433, 0.025009, 0.106994, 0.842363, 0.0506433, 0.025009, 0.300643, 0.648713, 0.0506433, 0.0400144, 0.0898713, 0.807556, 0.102573, 0.0035232, 0.0898713, 0.720257, 0.189871, 0.0035232, 0.0898713, 0.763906, 0.146222, 0.00563712, 0.0114152, 0.87717, 0.111415, 0.0277381, 0.0114152, 0.189871, 0.798713, 0.0277381, 0.0114152, 0.533521, 0.455064, 0.0443809, 0.0506433, 0.842363, 0.106994, 0.025009, 0.0506433, 0.455064, 0.494292, 0.025009, 0.0506433, 0.648713, 0.300643, 0.0400144, 0.102573, 0.707556, 0.189871, 0.0277381, 0.189871, 0.707556, 0.102573, 0.0277381, 0.146222, 0.707556, 0.146222, 0.0443809, 0.111415, 0.0898713, 0.798713, 0.218381, 0.798713, 0.0898713, 0.111415, 0.218381, 0.455064, 0.0898713, 0.455064, 0.34941, 0.106994, 0.398713, 0.494292, 0.196896, 0.494292, 0.398713, 0.106994, 0.196896, 0.300643, 0.398713, 0.300643, 0.315033, 0.189871, 0.102573, 0.707556, 0.0277381, 0.102573, 0.189871, 0.707556, 0.0277381, 0.146222, 0.146222, 0.707556, 0.0443809, 0.798713, 0.111415, 0.0898713, 0.218381, 0.111415, 0.798713, 0.0898713, 0.218381, 0.455064, 0.455064, 0.0898713, 0.34941, 0.494292, 0.106994, 0.398713, 0.196896, 0.106994, 0.494292, 0.398713, 0.196896, 0.300643, 0.300643, 0.398713, 0.315033, 0.0898713, 0.189871, 0.720257, 0.0035232, 0.0898713, 0.102573, 0.807556, 0.0035232, 0.0898713, 0.146222, 0.763906, 0.00563712, 0.0114152, 0.798713, 0.189871, 0.0277381, 0.0114152, 0.111415, 0.87717, 0.0277381, 0.0114152, 0.455064, 0.533521, 0.0443809, 0.0506433, 0.494292, 0.455064, 0.025009, 0.0506433, 0.106994, 0.842363, 0.025009, 0.0506433, 0.300643, 0.648713, 0.0400144, 0.102573, 0.0898713, 0.807556, 0.0035232, 0.189871, 0.0898713, 0.720257, 0.0035232, 0.146222, 0.0898713, 0.763906, 0.00563712, 0.111415, 0.0114152, 0.87717, 0.0277381, 0.798713, 0.0114152, 0.189871, 0.0277381, 0.455064, 0.0114152, 0.533521, 0.0443809, 0.106994, 0.0506433, 0.842363, 0.025009, 0.494292, 0.0506433, 0.455064, 0.025009, 0.300643, 0.0506433, 0.648713, 0.0400144, 0.517156, 0.429858, 0.0529858, 0.00207718, 0.429858, 0.517156, 0.0529858, 0.00207718, 0.473507, 0.473507, 0.0529858, 0.0033235, 0.840284, 0.152986, 0.00673008, 0.0163536, 0.152986, 0.840284, 0.00673008, 0.0163536, 0.496635, 0.496635, 0.00673008, 0.0261658, 0.67872, 0.291422, 0.0298579, 0.0147447, 0.291422, 0.67872, 0.0298579, 0.0147447, 0.485071, 0.485071, 0.0298579, 0.0235915, 0.417156, 0.517156, 0.0656875, 0.0163536, 0.417156, 0.429858, 0.152986, 0.0163536, 0.417156, 0.473507, 0.109337, 0.0261658, 0.0529858, 0.840284, 0.10673, 0.128752, 0.0529858, 0.152986, 0.794028, 0.128752, 0.0529858, 0.496635, 0.450379, 0.206003, 0.235071, 0.67872, 0.0862088, 0.116084, 0.235071, 0.291422, 0.473507, 0.116084, 0.235071, 0.485071, 0.279858, 0.185735, 0.429858, 0.417156, 0.152986, 0.0163536, 0.517156, 0.417156, 0.0656875, 0.0163536, 0.473507, 0.417156, 0.109337, 0.0261658, 0.152986, 0.0529858, 0.794028, 0.128752, 0.840284, 0.0529858, 0.10673, 0.128752, 0.496635, 0.0529858, 0.450379, 0.206003, 0.291422, 0.235071, 0.473507, 0.116084, 0.67872, 0.235071, 0.0862088, 0.116084, 0.485071, 0.235071, 0.279858, 0.185735, 0.152986, 0.429858, 0.417156, 0.0163536, 0.0656875, 0.517156, 0.417156, 0.0163536, 0.109337, 0.473507, 0.417156, 0.0261658, 0.794028, 0.152986, 0.0529858, 0.128752, 0.10673, 0.840284, 0.0529858, 0.128752, 0.450379, 0.496635, 0.0529858, 0.206003, 0.473507, 0.291422, 0.235071, 0.116084, 0.0862088, 0.67872, 0.235071, 0.116084, 0.279858, 0.485071, 0.235071, 0.185735, 0.0529858, 0.517156, 0.429858, 0.00207718, 0.0529858, 0.429858, 0.517156, 0.00207718, 0.0529858, 0.473507, 0.473507, 0.0033235, 0.00673008, 0.840284, 0.152986, 0.0163536, 0.00673008, 0.152986, 0.840284, 0.0163536, 0.00673008, 0.496635, 0.496635, 0.0261658, 0.0298579, 0.67872, 0.291422, 0.0147447, 0.0298579, 0.291422, 0.67872, 0.0147447, 0.0298579, 0.485071, 0.485071, 0.0235915, 0.0656875, 0.417156, 0.517156, 0.0163536, 0.152986, 0.417156, 0.429858, 0.0163536, 0.109337, 0.417156, 0.473507, 0.0261658, 0.10673, 0.0529858, 0.840284, 0.128752, 0.794028, 0.0529858, 0.152986, 0.128752, 0.450379, 0.0529858, 0.496635, 0.206003, 0.0862088, 0.235071, 0.67872, 0.116084, 0.473507, 0.235071, 0.291422, 0.116084, 0.279858, 0.235071, 0.485071, 0.185735, 0.517156, 0.0656875, 0.417156, 0.0163536, 0.429858, 0.152986, 0.417156, 0.0163536, 0.473507, 0.109337, 0.417156, 0.0261658, 0.840284, 0.10673, 0.0529858, 0.128752, 0.152986, 0.794028, 0.0529858, 0.128752, 0.496635, 0.450379, 0.0529858, 0.206003, 0.67872, 0.0862088, 0.235071, 0.116084, 0.291422, 0.473507, 0.235071, 0.116084, 0.485071, 0.279858, 0.235071, 0.185735, 0.417156, 0.152986, 0.429858, 0.0163536, 0.417156, 0.0656875, 0.517156, 0.0163536, 0.417156, 0.109337, 0.473507, 0.0261658, 0.0529858, 0.794028, 0.152986, 0.128752, 0.0529858, 0.10673, 0.840284, 0.128752, 0.0529858, 0.450379, 0.496635, 0.206003, 0.235071, 0.473507, 0.291422, 0.116084, 0.235071, 0.0862088, 0.67872, 0.116084, 0.235071, 0.279858, 0.485071, 0.185735, 0.429858, 0.0529858, 0.517156, 0.00207718, 0.517156, 0.0529858, 0.429858, 0.00207718, 0.473507, 0.0529858, 0.473507, 0.0033235, 0.152986, 0.00673008, 0.840284, 0.0163536, 0.840284, 0.00673008, 0.152986, 0.0163536, 0.496635, 0.00673008, 0.496635, 0.0261658, 0.291422, 0.0298579, 0.67872, 0.0147447, 0.67872, 0.0298579, 0.291422, 0.0147447, 0.485071, 0.0298579, 0.485071, 0.0235915 }; void GetFormula(int np, int id, fp_t *zeta0, fp_t *zeta1, fp_t *zeta2, fp_t *weight){ if (id < 0 || id >= np) return; switch (np) { case 1: (*zeta0) = g2d_1[id][0]; (*zeta1) = g2d_1[id][1]; (*zeta2) = g2d_1[id][2]; (*weight) = g2d_1[id][3]; break; case 3: (*zeta0) = g2d_3[id][0]; (*zeta1) = g2d_3[id][1]; (*zeta2) = g2d_3[id][2]; (*weight) = g2d_3[id][3]; break; case 4: (*zeta0) = g2d_4[id][0]; (*zeta1) = g2d_4[id][1]; (*zeta2) = g2d_4[id][2]; (*weight) = g2d_4[id][3]; break; case 6: (*zeta0) = g2d_6[id][0]; (*zeta1) = g2d_6[id][1]; (*zeta2) = g2d_6[id][2]; (*weight) = g2d_6[id][3]; break; case 7: (*zeta0) = g2d_7[id][0]; (*zeta1) = g2d_7[id][1]; (*zeta2) = g2d_7[id][2]; (*weight) = g2d_7[id][3]; break; case 9: (*zeta0) = g2d_9[id][0]; (*zeta1) = g2d_9[id][1]; (*zeta2) = g2d_9[id][2]; (*weight) = g2d_9[id][3]; break; case 12: (*zeta0) = g2d_12[id][0]; (*zeta1) = g2d_12[id][1]; (*zeta2) = g2d_12[id][2]; (*weight) = g2d_12[id][3]; break; case 13: (*zeta0) = g2d_13[id][0]; (*zeta1) = g2d_13[id][1]; (*zeta2) = g2d_13[id][2]; (*weight) = g2d_13[id][3]; break; case 16: (*zeta0) = g2d_16[id][0]; (*zeta1) = g2d_16[id][1]; (*zeta2) = g2d_16[id][2]; (*weight) = g2d_16[id][3]; break; case 19: (*zeta0) = g2d_19[id][0]; (*zeta1) = g2d_19[id][1]; (*zeta2) = g2d_19[id][2]; (*weight) = g2d_19[id][3]; break; case 27: (*zeta0) = g2d_27[id][0]; (*zeta1) = g2d_27[id][1]; (*zeta2) = g2d_27[id][2]; (*weight) = g2d_27[id][3]; break; case 33: (*zeta0) = g2d_33[id][0]; (*zeta1) = g2d_33[id][1]; (*zeta2) = g2d_33[id][2]; (*weight) = g2d_33[id][3]; break; case 37: (*zeta0) = g2d_37[id][0]; (*zeta1) = g2d_37[id][1]; (*zeta2) = g2d_37[id][2]; (*weight) = g2d_37[id][3]; break; case 21: (*zeta0) = gauss21[id][0]; (*zeta1) = gauss21[id][1]; (*zeta2) = gauss21[id][2]; (*weight) = gauss21[id][3]; break; default: (*zeta0) = (*zeta1) = (*zeta2) = (*weight) = 0.0; } } void GetFormula2dPtr(int np, fp_t (*&gaussPts)[4]){ switch(np){ case 1: gaussPts = g2d_1; break; case 3: gaussPts = g2d_3; break; case 4: gaussPts = g2d_4; break; case 6: gaussPts = g2d_6; break; case 7: gaussPts = g2d_7; break; case 9: gaussPts = g2d_9; break; default: gaussPts = nullptr; break; } } void GetFormula3d(int np, int id, fp_t *zeta0, fp_t *zeta1, fp_t *zeta2, fp_t *zeta3, fp_t *weight){ if (id < 0 || id >= np) return; switch(np){ case 4: (*zeta0) = g3d_4[id][0]; (*zeta1) = g3d_4[id][1]; (*zeta2) = g3d_4[id][2]; (*zeta3) = g3d_4[id][3]; (*weight) = g3d_4[id][4]; break; case 10: (*zeta0) = g3d_10[id][0]; (*zeta1) = g3d_10[id][1]; (*zeta2) = g3d_10[id][2]; (*zeta3) = g3d_10[id][3]; (*weight) = g3d_10[id][4]; break; case 20: (*zeta0) = g3d_20[id][0]; (*zeta1) = g3d_20[id][1]; (*zeta2) = g3d_20[id][2]; (*zeta3) = g3d_20[id][3]; (*weight) = g3d_20[id][4]; break; case 35: (*zeta0) = g3d_35[id][0]; (*zeta1) = g3d_35[id][1]; (*zeta2) = g3d_35[id][2]; (*zeta3) = g3d_35[id][3]; (*weight) = g3d_35[id][4]; break; case 56: (*zeta0) = g3d_56[id][0]; (*zeta1) = g3d_56[id][1]; (*zeta2) = g3d_56[id][2]; (*zeta3) = g3d_56[id][3]; (*weight) = g3d_56[id][4]; break; default: (*zeta0) = (*zeta1) = (*zeta2) = (*zeta3) = (*weight) = 0.0; } } void GetFormula3dPtr(int np, fp_t (*&gaussPts)[5]){ switch(np){ case 4: gaussPts = g3d_4; break; case 10: gaussPts = g3d_10; break; case 20: gaussPts = g3d_20; break; case 35: gaussPts = g3d_35; break; case 56: gaussPts = g3d_56; break; default: gaussPts = nullptr; break; } } void GetGauss(int outLoop, int outID, int id, fp_t *zeta0, fp_t *zeta1, fp_t *zeta2, fp_t *wgt) { if (outLoop == 4) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = gauss4_21[outID][id][0]; (*zeta1) = gauss4_21[outID][id][1]; (*zeta2) = gauss4_21[outID][id][2]; (*wgt) = gauss4_21[outID][id][3]; } if (outLoop == 1) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = gauss21[id][0]; (*zeta1) = gauss21[id][1]; (*zeta2) = gauss21[id][2]; (*wgt) = gauss21[id][3]; } } void GetDuffy(int outLoop, int singularLoop, int outID, int id, fp_t *zeta0, fp_t *zeta1, fp_t *zeta2, fp_t *wgt) { if (outLoop == 1 && singularLoop == 27) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy1_27[outID][id][0]; (*zeta1) = duffy1_27[outID][id][1]; (*zeta2) = duffy1_27[outID][id][2]; (*wgt) = duffy1_27[outID][id][3]; } if (outLoop == 3 && singularLoop == 27) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy3_27[outID][id][0]; (*zeta1) = duffy3_27[outID][id][1]; (*zeta2) = duffy3_27[outID][id][2]; (*wgt) = duffy3_27[outID][id][3]; } if (outLoop == 4 && singularLoop == 27) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy4_27[outID][id][0]; (*zeta1) = duffy4_27[outID][id][1]; (*zeta2) = duffy4_27[outID][id][2]; (*wgt) = duffy4_27[outID][id][3]; } if (outLoop == 7 && singularLoop == 27) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy7_27[outID][id][0]; (*zeta1) = duffy7_27[outID][id][1]; (*zeta2) = duffy7_27[outID][id][2]; (*wgt) = duffy7_27[outID][id][3]; } if (outLoop == 1 && singularLoop == 12) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy1_12[outID][id][0]; (*zeta1) = duffy1_12[outID][id][1]; (*zeta2) = duffy1_12[outID][id][2]; (*wgt) = duffy1_12[outID][id][3]; } if (outLoop == 3 && singularLoop == 12) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy3_12[outID][id][0]; (*zeta1) = duffy3_12[outID][id][1]; (*zeta2) = duffy3_12[outID][id][2]; (*wgt) = duffy3_12[outID][id][3]; } if (outLoop == 4 && singularLoop == 12) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy4_12[outID][id][0]; (*zeta1) = duffy4_12[outID][id][1]; (*zeta2) = duffy4_12[outID][id][2]; (*wgt) = duffy4_12[outID][id][3]; } if (outLoop == 7 && singularLoop == 12) { if (outID < 0 || outID >= outLoop) return; (*zeta0) = duffy7_12[outID][id][0]; (*zeta1) = duffy7_12[outID][id][1]; (*zeta2) = duffy7_12[outID][id][2]; (*wgt) = duffy7_12[outID][id][3]; } } void GetFormula1D(int NP, int i, fp_t * v1, fp_t *v2, fp_t *w) { if(i<0 || i>=NP){ *v1=0; *v2=0; *w=0; return; } switch(NP){ case 1: *v1=g1d_1[ i][0]; *v2=g1d_1[ i][1]; *w =g1d_1[ i][2]; break; case 2: *v1=g1d_2[ i][0]; *v2=g1d_2[ i][1]; *w =g1d_2[ i][2]; break; case 3: *v1=g1d_3[ i][0]; *v2=g1d_3[ i][1]; *w =g1d_3[ i][2]; break; case 4: *v1=g1d_4[ i][0]; *v2=g1d_4[ i][1]; *w =g1d_4[ i][2]; break; case 5: *v1=g1d_5[ i][0]; *v2=g1d_5[ i][1]; *w =g1d_5[ i][2]; break; default: *v1=0; *v2=0; *w=0; return; break; } return; }