diff --git a/src/gaussrules.C b/src/gaussrules.C index 7ae0be7..ab1b29f 100644 --- a/src/gaussrules.C +++ b/src/gaussrules.C @@ -1,329 +1,331 @@ #include "gaussrules.h" #include "sandia_rules.hpp" //nodes and weights for the gaussian quadrature rules //from https://pomax.github.io/bezierinfo/legendre-gauss.html double gr::xxx[GRNMAX][GRNMAX]; double gr::www[GRNMAX][GRNMAX]; const double gr::xxx2[2]={-0.5773502691896257,0.5773502691896257}; const double gr::www2[2]={1.0000000000000000,1.0000000000000000}; const double gr::xxx3[3]={0.0000000000000000,-0.7745966692414834,0.7745966692414834}; const double gr::www3[3]={0.8888888888888888,0.5555555555555556,0.5555555555555556}; const double gr::xxx4[4]={-0.3399810435848563,0.3399810435848563, -0.8611363115940526,0.8611363115940526}; const double gr::www4[4]={0.6521451548625461,0.6521451548625461, 0.3478548451374538,0.3478548451374538}; const double gr::xxx5[5]={0.0000000000000000,-0.5384693101056831, 0.5384693101056831,-0.9061798459386640, 0.9061798459386640}; const double gr::www5[5]={0.5688888888888889,0.4786286704993665, 0.4786286704993665,0.2369268850561891, 0.2369268850561891}; const double gr::xxx8[8]={-0.1834346424956498,0.1834346424956498, -0.5255324099163290,0.5255324099163290, -0.7966664774136267,0.7966664774136267, -0.9602898564975363,0.9602898564975363}; const double gr::www8[8]={0.3626837833783620,0.3626837833783620, 0.3137066458778873,0.3137066458778873, 0.2223810344533745,0.2223810344533745, 0.1012285362903763,0.1012285362903763}; const double gr::xxx10[10]={-0.1488743389816312,0.1488743389816312, -0.4333953941292472,0.4333953941292472, -0.6794095682990244,0.6794095682990244, -0.8650633666889845,0.8650633666889845, -0.9739065285171717,0.9739065285171717}; const double gr::www10[10]={0.2955242247147529,0.2955242247147529, 0.2692667193099963,0.2692667193099963, 0.2190863625159820,0.2190863625159820, 0.1494513491505806,0.1494513491505806, 0.0666713443086881,0.0666713443086881}; const double gr::www20[20]={0.1527533871307258,0.1527533871307258, 0.1491729864726037,0.1491729864726037, 0.1420961093183820,0.1420961093183820, 0.1316886384491766,0.1316886384491766, 0.1181945319615184,0.1181945319615184, 0.1019301198172404,0.1019301198172404, 0.0832767415767048,0.0832767415767048, 0.0626720483341091,0.0626720483341091, 0.0406014298003869,0.0406014298003869, 0.0176140071391521,0.0176140071391521}; const double gr::xxx20[20]={-0.0765265211334973,0.0765265211334973, -0.2277858511416451,0.2277858511416451, -0.3737060887154195,0.3737060887154195, -0.5108670019508271,0.5108670019508271, -0.6360536807265150,0.6360536807265150, -0.7463319064601508,0.7463319064601508, -0.8391169718222188,0.8391169718222188, -0.9122344282513259,0.9122344282513259, -0.9639719272779138,0.9639719272779138, -0.9931285991850949,0.9931285991850949}; const double gr::xxx24[24]={-0.0640568928626056,0.0640568928626056, -0.1911188674736163,0.1911188674736163, -0.3150426796961634,0.3150426796961634, -0.4337935076260451,0.4337935076260451, -0.5454214713888396,0.5454214713888396, -0.6480936519369755,0.6480936519369755, -0.7401241915785544,0.7401241915785544, -0.8200019859739029,0.8200019859739029, -0.8864155270044011,0.8864155270044011, -0.9382745520027328,0.9382745520027328, -0.9747285559713095,0.9747285559713095, -0.9951872199970213,0.9951872199970213}; const double gr::www24[24]={0.1279381953467522,0.1279381953467522, 0.1258374563468283,0.1258374563468283, 0.1216704729278034,0.1216704729278034, 0.1155056680537256,0.1155056680537256, 0.1074442701159656,0.1074442701159656, 0.0976186521041139,0.0976186521041139, 0.0861901615319533,0.0861901615319533, 0.0733464814110803,0.0733464814110803, 0.0592985849154368,0.0592985849154368, 0.0442774388174198,0.0442774388174198, 0.0285313886289337,0.0285313886289337, 0.0123412297999872,0.0123412297999872}; const double gr::xxx40[40]={-0.0387724175060508,0.0387724175060508, -0.1160840706752552,0.1160840706752552, -0.1926975807013711,0.1926975807013711, -0.2681521850072537,0.2681521850072537, -0.3419940908257585,0.3419940908257585, -0.4137792043716050,0.4137792043716050, -0.4830758016861787,0.4830758016861787, -0.5494671250951282,0.5494671250951282, -0.6125538896679802,0.6125538896679802, -0.6719566846141796,0.6719566846141796, -0.7273182551899271,0.7273182551899271, -0.7783056514265194,0.7783056514265194, -0.8246122308333117,0.8246122308333117, -0.8659595032122595,0.8659595032122595, -0.9020988069688743,0.9020988069688743, -0.9328128082786765,0.9328128082786765, -0.9579168192137917,0.9579168192137917, -0.9772599499837743,0.9772599499837743, -0.9907262386994570,0.9907262386994570, -0.9982377097105593,0.9982377097105593}; const double gr::www40[40]={0.0775059479784248,0.0775059479784248, 0.0770398181642480,0.0770398181642480, 0.0761103619006262,0.0761103619006262, 0.0747231690579683,0.0747231690579683, 0.0728865823958041,0.0728865823958041, 0.0706116473912868,0.0706116473912868, 0.0679120458152339,0.0679120458152339, 0.0648040134566010,0.0648040134566010, 0.0613062424929289,0.0613062424929289, 0.0574397690993916,0.0574397690993916, 0.0532278469839368,0.0532278469839368, 0.0486958076350722,0.0486958076350722, 0.0438709081856733,0.0438709081856733, 0.0387821679744720,0.0387821679744720, 0.0334601952825478,0.0334601952825478, 0.0279370069800234,0.0279370069800234, 0.0222458491941670,0.0222458491941670, 0.0164210583819079,0.0164210583819079, 0.0104982845311528,0.0104982845311528, 0.0045212770985332,0.0045212770985332}; const double gr::xxx50[50]={-0.0310983383271889,0.0310983383271889, -0.0931747015600861,0.0931747015600861, -0.1548905899981459,0.1548905899981459, -0.2160072368760418,0.2160072368760418, -0.2762881937795320,0.2762881937795320, -0.3355002454194373,0.3355002454194373, -0.3934143118975651,0.3934143118975651, -0.4498063349740388,0.4498063349740388, -0.5044581449074642,0.5044581449074642, -0.5571583045146501,0.5571583045146501, -0.6077029271849502,0.6077029271849502, -0.6558964656854394,0.6558964656854394, -0.7015524687068222,0.7015524687068222, -0.7444943022260685,0.7444943022260685, -0.7845558329003993,0.7845558329003993, -0.8215820708593360,0.8215820708593360, -0.8554297694299461,0.8554297694299461, -0.8859679795236131,0.8859679795236131, -0.9130785566557919,0.9130785566557919, -0.9366566189448780,0.9366566189448780, -0.9566109552428079,0.9566109552428079, -0.9728643851066920,0.9728643851066920, -0.9853540840480058,0.9853540840480058, -0.9940319694320907,0.9940319694320907, -0.9988664044200710,0.9988664044200710}; const double gr::www50[50]={0.0621766166553473,0.0621766166553473, 0.0619360674206832,0.0619360674206832, 0.0614558995903167,0.0614558995903167, 0.0607379708417702,0.0607379708417702, 0.0597850587042655,0.0597850587042655, 0.0586008498132224,0.0586008498132224, 0.0571899256477284,0.0571899256477284, 0.0555577448062125,0.0555577448062125, 0.0537106218889962,0.0537106218889962, 0.0516557030695811,0.0516557030695811, 0.0494009384494663,0.0494009384494663, 0.0469550513039484,0.0469550513039484, 0.0443275043388033,0.0443275043388033, 0.0415284630901477,0.0415284630901477, 0.0385687566125877,0.0385687566125877, 0.0354598356151462,0.0354598356151462, 0.0322137282235780,0.0322137282235780, 0.0288429935805352,0.0288429935805352, 0.0253606735700124,0.0253606735700124, 0.0217802431701248,0.0217802431701248, 0.0181155607134894,0.0181155607134894, 0.0143808227614856,0.0143808227614856, 0.0105905483836510,0.0105905483836510, 0.0067597991957454,0.0067597991957454, 0.0029086225531551,0.0029086225531551}; const double gr::xxx64[64]={-0.0243502926634244,0.0243502926634244, -0.0729931217877990,0.0729931217877990, -0.1214628192961206,0.1214628192961206, -0.1696444204239928,0.1696444204239928, -0.2174236437400071,0.2174236437400071, -0.2646871622087674,0.2646871622087674, -0.3113228719902110,0.3113228719902110, -0.3572201583376681,0.3572201583376681, -0.4022701579639916,0.4022701579639916, -0.4463660172534641,0.4463660172534641, -0.4894031457070530,0.4894031457070530, -0.5312794640198946,0.5312794640198946, -0.5718956462026340,0.5718956462026340, -0.6111553551723933,0.6111553551723933, -0.6489654712546573,0.6489654712546573, -0.6852363130542333,0.6852363130542333, -0.7198818501716109,0.7198818501716109, -0.7528199072605319,0.7528199072605319, -0.7839723589433414,0.7839723589433414, -0.8132653151227975,0.8132653151227975, -0.8406292962525803,0.8406292962525803, -0.8659993981540928,0.8659993981540928, -0.8893154459951141,0.8893154459951141, -0.9105221370785028,0.9105221370785028, -0.9295691721319396,0.9295691721319396, -0.9464113748584028,0.9464113748584028, -0.9610087996520538,0.9610087996520538, -0.9733268277899110,0.9733268277899110, -0.9833362538846260,0.9833362538846260, -0.9910133714767443,0.9910133714767443, -0.9963401167719553,0.9963401167719553, -0.9993050417357722,0.9993050417357722}; const double gr::www64[64]={0.0486909570091397,0.0486909570091397, 0.0485754674415034,0.0485754674415034, 0.0483447622348030,0.0483447622348030, 0.0479993885964583,0.0479993885964583, 0.0475401657148303,0.0475401657148303, 0.0469681828162100,0.0469681828162100, 0.0462847965813144,0.0462847965813144, 0.0454916279274181,0.0454916279274181, 0.0445905581637566,0.0445905581637566, 0.0435837245293235,0.0435837245293235, 0.0424735151236536,0.0424735151236536, 0.0412625632426235,0.0412625632426235, 0.0399537411327203,0.0399537411327203, 0.0385501531786156,0.0385501531786156, 0.0370551285402400,0.0370551285402400, 0.0354722132568824,0.0354722132568824, 0.0338051618371416,0.0338051618371416, 0.0320579283548516,0.0320579283548516, 0.0302346570724025,0.0302346570724025, 0.0283396726142595,0.0283396726142595, 0.0263774697150547,0.0263774697150547, 0.0243527025687109,0.0243527025687109, 0.0222701738083833,0.0222701738083833, 0.0201348231535302,0.0201348231535302, 0.0179517157756973,0.0179517157756973, 0.0157260304760247,0.0157260304760247, 0.0134630478967186,0.0134630478967186, 0.0111681394601311,0.0111681394601311, 0.0088467598263639,0.0088467598263639, 0.0065044579689784,0.0065044579689784, 0.0041470332605625,0.0041470332605625, 0.0017832807216964,0.0017832807216964}; void gr::init() { for (int i = 0; i < 64; i++) for (int j = 0; j < 64; j++) { xxx[i][j] = 0; www[i][j] = 0; } for (int i = 0; i < 64; i++) { if (i < 2) xxx[2-1][i] = xxx2[i]; if (i < 3) xxx[3-1][i] = xxx3[i]; if (i < 4) xxx[4-1][i] = xxx4[i]; if (i < 5) xxx[5-1][i] = xxx5[i]; if (i < 8) xxx[8-1][i] = xxx8[i]; if (i < 10) xxx[10-1][i] = xxx10[i]; if (i < 20) xxx[20-1][i] = xxx20[i]; if (i < 24) xxx[24-1][i] = xxx24[i]; if (i < 40) xxx[40-1][i] = xxx40[i]; if (i < 50) xxx[50-1][i] = xxx50[i]; if (i < 64) xxx[64-1][i] = xxx64[i]; if (i < 2) www[2-1][i] = www2[i]; if (i < 3) www[3-1][i] = www3[i]; if (i < 4) www[4-1][i] = www4[i]; if (i < 5) www[5-1][i] = www5[i]; if (i < 8) www[8-1][i] = www8[i]; if (i < 10) www[10-1][i] = www10[i]; if (i < 20) www[20-1][i] = www20[i]; if (i < 24) www[24-1][i] = www24[i]; if (i < 40) www[40-1][i] = www40[i]; if (i < 50) www[50-1][i] = www50[i]; if (i < 64) www[64-1][i] = www64[i]; } /* //generation of weights and nodes double eps = 1e-14; int i2; double s; for (int n = 1; n <= nmax; n++) { double *x = new double[n+1]; double *w1 = new double[n+1]; double *w2 = new double[n+1]; kronrod (n, eps, x, w1, w2); for ( int i = 1; i <= n; i++ ) { int i2; double s; if ( 2 * i <= n + 1 ) { i2 = 2 * i; s = -1.0; } else { i2 = 2 * ( n + 1 ) - 2 * i; s = +1.0; } xxx[n-1][i-1] = s * x[i2-1]; www[n-1][i-1] = w2[i2-1]; } } */ for (int n = 1; n <= GRNMAX; n++) { double *w = new double[n]; double *x = new double[n]; webbur::legendre_compute(n, x, w); for ( int i = 1; i <= n; i++ ) { xxx[n-1][i-1] = x[i-1]; www[n-1][i-1] = w[i-1]; } + delete[] w; + delete[] x; } }