/*
The main features of this software are:
- Speed: due to the simple formulas and the O(1) complexity computation of
individual Gauss-Legendre quadrature nodes and weights. This makes it
compatible with parallel computing paradigms.
- Accuracy: the error on the nodes and weights is within a few ulps.
*/
# include <assert.h>
# include <math.h>
# include <stddef.h>
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# include "fastgl.h"
/*
Tabulated nodes and weights
The required theta values for the Legendre nodes for l <= 100
*/
const double EvenThetaZero1[1]={
0.9553166181245092781638573E+00};
const double EvenThetaZero2[2]={
0.1223899586470372591854100E+01,
0.5332956802491269896325121E+00};
const double EvenThetaZero3[3]={
0.1329852612388110166006182E+01,
0.8483666264874876548310910E+00,
0.3696066519448289481138796E+00};
const double EvenThetaZero4[4]={
0.1386317078892131346282665E+01,
0.1017455539490153431016397E+01,
0.6490365804607796100719162E+00,
0.2827570635937967783987981E+00};
const double EvenThetaZero5[5]={
0.1421366498439524924081833E+01,
0.1122539327631709474018620E+01,
0.8238386589997556048023640E+00,
0.5255196555285001171749362E+00,
0.2289442988470260178701589E+00};
const double EvenThetaZero6[6]={
0.1445233238471440081118261E+01,
0.1194120375947706635968399E+01,
0.9430552870605735796668951E+00,
0.6921076988818410126677201E+00,
0.4414870814893317611922530E+00,
0.1923346793046672033050762E+00};
const double EvenThetaZero7[7]={
0.1462529992921481833498746E+01,
0.1246003586776677662375070E+01,
0.1029498592525136749641068E+01,
0.8130407055389454598609888E+00,
0.5966877608172733931509619E+00,
0.3806189306666775272453522E+00,
0.1658171411523664030454318E+00};
const double EvenThetaZero8[8]={
0.1475640280808194256470687E+01,
0.1285331444322965257106517E+01,
0.1095033401803444343034890E+01,
0.9047575323895165085030778E+00,
0.7145252532340252146626998E+00,
0.5243866409035941583262629E+00,
0.3344986386876292124968005E+00,
0.1457246820036738335698855E+00};
const double EvenThetaZero9[9]={
0.1485919440392653014379727E+01,
0.1316167494718022699851110E+01,
0.1146421481056642228295923E+01,
0.9766871104439832694094465E+00,
0.8069738930788195349918620E+00,
0.6373005058706191519531139E+00,
0.4677113145328286263205134E+00,
0.2983460782092324727528346E+00,
0.1299747364196768405406564E+00};
const double EvenThetaZero10[10]={
0.1494194914310399553510039E+01,
0.1340993178589955138305166E+01,
0.1187794926634098887711586E+01,
0.1034603297590104231043189E+01,
0.8814230742890135843662021E+00,
0.7282625848696072912405713E+00,
0.5751385026314284688366450E+00,
0.4220907301111166004529037E+00,
0.2692452880289302424376614E+00,
0.1172969277059561308491253E+00};
const double EvenThetaZero11[11]={
0.1501000399130816063282492E+01,
0.1361409225664372117193308E+01,
0.1221820208990359866348145E+01,
0.1082235198111836788818162E+01,
0.9426568273796608630446470E+00,
0.8030892957063359443650460E+00,
0.6635400754448062852164288E+00,
0.5240242709487281141128643E+00,
0.3845781703583910933413978E+00,
0.2453165389983612942439953E+00,
0.1068723357985259945018899E+00};
const double EvenThetaZero12[12]={
0.1506695545558101030878728E+01,
0.1378494427506219143960887E+01,
0.1250294703417272987066314E+01,
0.1122097523267250692925104E+01,
0.9939044422989454674968570E+00,
0.8657177770401081355080608E+00,
0.7375413075437535618804594E+00,
0.6093818382449565759195927E+00,
0.4812531951313686873528891E+00,
0.3531886675690780704072227E+00,
0.2252936226353075734690198E+00,
0.9814932949793685067733311E-01};
const double EvenThetaZero13[13]={
0.1511531546703289231944719E+01,
0.1393002286179807923400254E+01,
0.1274473959424494104852958E+01,
0.1155947313793812040125722E+01,
0.1037423319077439147088755E+01,
0.9189033445598992550553862E+00,
0.8003894803353296871788647E+00,
0.6818851814129298518332401E+00,
0.5633967073169293284500428E+00,
0.4449368152119130526034289E+00,
0.3265362611165358134766736E+00,
0.2082924425598466358987549E+00,
0.9074274842993199730441784E-01};
const double EvenThetaZero14[14]={
0.1515689149557281132993364E+01,
0.1405475003062348722192382E+01,
0.1295261501292316172835393E+01,
0.1185049147889021579229406E+01,
0.1074838574917869281769567E+01,
0.9646306371285440922680794E+00,
0.8544265718392254369377945E+00,
0.7442282945111358297916378E+00,
0.6340389954584301734412433E+00,
0.5238644768825679339859620E+00,
0.4137165857369637683488098E+00,
0.3036239070914333637971179E+00,
0.1936769929947376175341314E+00,
0.8437551461511597225722252E-01};
const double EvenThetaZero15[15]={
0.1519301729274526620713294E+01,
0.1416312682230741743401738E+01,
0.1313324092045794720169874E+01,
0.1210336308624476413072722E+01,
0.1107349759228459143499061E+01,
0.1004365001539081003659288E+01,
0.9013828087667156388167226E+00,
0.7984043170121235411718744E+00,
0.6954313000299367256853883E+00,
0.5924667257887385542924194E+00,
0.4895160050896970092628705E+00,
0.3865901987860504829542802E+00,
0.2837160095793466884313556E+00,
0.1809780449917272162574031E+00,
0.7884320726554945051322849E-01};
const double EvenThetaZero16[16]={
0.1522469852641529230282387E+01,
0.1425817011963825344615095E+01,
0.1329164502391080681347666E+01,
0.1232512573416362994802398E+01,
0.1135861522840293704616614E+01,
0.1039211728068951568003361E+01,
0.9425636940046777101926515E+00,
0.8459181315837993237739032E+00,
0.7492760951181414487254243E+00,
0.6526392394594561548023681E+00,
0.5560103418005302722406995E+00,
0.4593944730762095704649700E+00,
0.3628020075350028174968692E+00,
0.2662579994723859636910796E+00,
0.1698418454282150179319973E+00,
0.7399171309970959768773072E-01};
const double EvenThetaZero17[17]={
0.1525270780617194430047563E+01,
0.1434219768045409606267345E+01,
0.1343169000217435981125683E+01,
0.1252118659062444379491066E+01,
0.1161068957629157748792749E+01,
0.1070020159291475075961444E+01,
0.9789726059789103169325141E+00,
0.8879267623988119819560021E+00,
0.7968832893748414870413015E+00,
0.7058431727509840105946884E+00,
0.6148079652926100198490992E+00,
0.5237802779694730663856110E+00,
0.4327648832448234459097574E+00,
0.3417715500266717765568488E+00,
0.2508238767288223767569849E+00,
0.1599966542668327644694431E+00,
0.6970264809814094464033170E-01};
const double EvenThetaZero18[18]={
0.1527764849261740485876940E+01,
0.1441701954349064743573367E+01,
0.1355639243522655042028688E+01,
0.1269576852063768424508476E+01,
0.1183514935851550608323947E+01,
0.1097453683555812711123880E+01,
0.1011393333949027021740881E+01,
0.9253342019812867059380523E+00,
0.8392767201322475821509486E+00,
0.7532215073977623159515351E+00,
0.6671694908788198522546767E+00,
0.5811221342350705406265672E+00,
0.4950819018993074588093747E+00,
0.4090533017972007314666814E+00,
0.3230455648729987995657071E+00,
0.2370809940997936908335290E+00,
0.1512302802537625099602687E+00,
0.6588357082399222649528476E-01};
const double EvenThetaZero19[19]={
0.1529999863223206659623262E+01,
0.1448406982124841835685420E+01,
0.1366814241651488684482888E+01,
0.1285221744143731581870833E+01,
0.1203629605904952775544878E+01,
0.1122037965173751996510051E+01,
0.1040446993107623345153211E+01,
0.9588569097730895525404200E+00,
0.8772680085516152329147030E+00,
0.7956806951062012653043722E+00,
0.7140955526031660805347356E+00,