diff --git a/code/include/common/globalconstants.h b/code/include/common/globalconstants.h index f1fdb179f1ec35b112799f079a436692e7cc5a92..38845ad0604e52f9615cfafe57d9d037acfdf9ce 100644 --- a/code/include/common/globalconstants.h +++ b/code/include/common/globalconstants.h @@ -115,6 +115,7 @@ enum SOLVER_NAME { CSD_SN_FOKKERPLANCK_TRAFO_SOLVER, CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D, CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D, + CSD_PN_SOLVER, PN_SOLVER, MN_SOLVER }; @@ -126,6 +127,7 @@ inline std::map Solver_Map{ { "SN_SOLVER", SN_SOLVER } { "CSD_SN_FOKKERPLANCK_TRAFO_SOLVER", CSD_SN_FOKKERPLANCK_TRAFO_SOLVER }, { "CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D", CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D }, { "CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D", CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D }, + { "CSD_PN", CSD_PN_SOLVER }, { "PN_SOLVER", PN_SOLVER }, { "MN_SOLVER", MN_SOLVER } }; diff --git a/code/include/solvers/csdpn_starmap_constants.h b/code/include/solvers/csdpn_starmap_constants.h new file mode 100644 index 0000000000000000000000000000000000000000..7fa4b841e83951961046e8d7f876903a839d894c --- /dev/null +++ b/code/include/solvers/csdpn_starmap_constants.h @@ -0,0 +1,805 @@ +#ifndef CSDPN_STARMAP_CONSTANTS_H +#define CSDPN_STARMAP_CONSTANTS_H + +#include "common/typedef.h" + +Vector S_tab = Vector{ 3.708534e+02, 3.699684e+02, 4.133405e+02, 4.274105e+02, 4.260186e+02, 4.186586e+02, 3.922167e+02, 3.688788e+02, 3.463548e+02, + 3.257439e+02, 2.908540e+02, 2.630191e+02, 2.404492e+02, 2.217993e+02, 2.061233e+02, 1.927484e+02, 1.710935e+02, 1.542666e+02, + 1.407737e+02, 1.296838e+02, 1.203898e+02, 1.039700e+02, 9.254342e+01, 8.320152e+01, 7.566431e+01, 6.437254e+01, 5.642073e+01, + 5.035990e+01, 4.558456e+01, 4.171830e+01, 3.851864e+01, 3.351779e+01, 2.977553e+01, 2.686036e+01, 2.451957e+01, 2.259489e+01, + 1.899632e+01, 1.648443e+01, 1.462404e+01, 1.318674e+01, 1.110365e+01, 9.660915e+00, 8.599157e+00, 7.783278e+00, 7.135750e+00, + 6.608783e+00, 5.801905e+00, 5.212303e+00, 4.762214e+00, 4.407207e+00, 4.120014e+00, 3.596089e+00, 3.242415e+00, 2.988451e+00, + 2.797986e+00, 2.533335e+00, 2.360488e+00, 2.240721e+00, 2.154309e+00, 2.089939e+00, 2.040369e+00, 1.970505e+00, 1.925374e+00, + 1.895321e+00, 1.874983e+00, 1.861203e+00, 1.844043e+00, 1.840365e+00, 1.843365e+00, 1.849892e+00, 1.867868e+00, 1.888401e+00, + 1.909511e+00, 1.930464e+00, 1.951003e+00, 1.971034e+00, 2.009575e+00, 2.046398e+00, 2.081818e+00, 2.116074e+00, 2.149385e+00, + 2.229456e+00, 2.306226e+00, 2.380759e+00, 2.453708e+00, 2.596472e+00, 2.736375e+00, 2.874414e+00, 3.011466e+00, 3.148070e+00, + 3.284170e+00, 3.555000e+00, 3.825700e+00, 4.096830e+00, 4.368190e+00, 4.639790e+00, 5.319310e+00, 5.999900e+00, 6.681620e+00, + 7.364310e+00, 8.730830e+00, 1.009809e+01, 1.146515e+01, 1.283297e+01, 1.420194e+01, 1.557175e+01, 1.831283e+01, 2.105730e+01, + 2.380410e+01, 2.655165e+01, 2.929944e+01 }; + +Vector StarMAPmoments = + Vector{ 2820.94791774, 37.95019512, -0.00000000, -0.00000000, 36.05041960, -0.00000000, 0.00000000, -0.00000000, 63.71546773, 34.40862654, + 0.00000000, -0.00000000, -0.00000000, 8.73259034, 0.00000000, 0.00000000, 33.04412649, 0.00000000, -0.00000000, -0.00000000, + 12.47039316, -0.00000000, -0.00000000, -0.00000000, 87.47767636, 31.89788170, -0.00000000, -0.00000000, -0.00000000, 14.26351208, + 0.00000000, -0.00000000, 0.00000000, 4.10500742, -0.00000000, -0.00000000, 30.91896140, -0.00000000, -0.00000000, -0.00000000, + 15.22343499, 0.00000000, -0.00000000, 0.00000000, 6.89892131, -0.00000000, 0.00000000, -0.00000000, 108.89945612, 30.06993663, + -0.00000000, -0.00000000, 0.00000000, 15.76096279, -0.00000000, -0.00000000, -0.00000000, 8.54838342, 0.00000000, -0.00000000, + -0.00000000, 2.27739358, -0.00000000, 0.00000000, 29.32367822, 0.00000000, -0.00000000, 0.00000000, 16.06124821, -0.00000000, + -0.00000000, 0.00000000, 9.62294149, 0.00000000, -0.00000000, 0.00000000, 4.48948046, -0.00000000, -0.00000000, 0.00000000, + 130.39047126, 28.66025422, -0.00000000, 0.00000000, -0.00000000, 16.21931065, -0.00000000, 0.00000000, -0.00000000, 10.36227896, + -0.00000000, 0.00000000, 0.00000000, 5.87676147, -0.00000000, 0.00000000, -0.00000000, 1.26853345, 0.00000000, 0.00000000, + 28.06473575, 0.00000000, -0.00000000, 0.00000000, 16.28823942, 0.00000000, -0.00000000, 0.00000000, 10.88627875, -0.00000000, + -0.00000000, -0.00000000, 6.84214167, 0.00000000, 0.00000000, -0.00000000, 3.15411458, -0.00000000, -0.00000000, -0.00000000, + 153.13522111, 27.52572106, 0.00000000, -0.00000000, -0.00000000, 16.29953531, -0.00000000, -0.00000000, -0.00000000, 11.26418625, + -0.00000000, 0.00000000, -0.00000000, 7.55817678, -0.00000000, 0.00000000, -0.00000000, 4.35421948, -0.00000000, 0.00000000, + -0.00000000, 0.59867914, -0.00000000, 0.00000000, 27.03434254, -0.00000000, 0.00000000, 0.00000000, 16.27276194, 0.00000000, + -0.00000000, 0.00000000, 11.53940961, 0.00000000, -0.00000000, -0.00000000, 8.10587621, -0.00000000, 0.00000000, 0.00000000, + 5.20041458, 0.00000000, -0.00000000, -0.00000000, 2.29040462, -0.00000000, 0.00000000, -0.00000000, 177.84820564, 26.58358894, + 0.00000000, -0.00000000, 0.00000000, 16.22051420, 0.00000000, -0.00000000, 0.00000000, 11.74050474, -0.00000000, -0.00000000, + -0.00000000, 8.53207446, -0.00000000, -0.00000000, -0.00000000, 5.84982345, -0.00000000, -0.00000000, 0.00000000, 3.37702606, + 0.00000000, -0.00000000, -0.00000000, 0.10357268, -0.00000000, 0.00000000 }; + +Vector E_tab = Vector{ 0.00005000, 0.00006000, 0.00007000, 0.00008000, 0.00009000, 0.00010000, 0.00012500, 0.00015000, 0.00017500, + 0.00020000, 0.00025000, 0.00030000, 0.00035000, 0.00040000, 0.00045000, 0.00050000, 0.00060000, 0.00070000, + 0.00080000, 0.00090000, 0.00100000, 0.00125000, 0.00150000, 0.00175000, 0.00200000, 0.00250000, 0.00300000, + 0.00350000, 0.00400000, 0.00450000, 0.00500000, 0.00600000, 0.00700000, 0.00800000, 0.00900000, 0.01000000, + 0.01250000, 0.01500000, 0.01750000, 0.02000000, 0.02500000, 0.03000000, 0.03500000, 0.04000000, 0.04500000, + 0.05000000, 0.06000000, 0.07000000, 0.08000000, 0.09000000, 0.10000000, 0.12500000, 0.15000000, 0.17500000, + 0.20000000, 0.25000000, 0.30000000, 0.35000000, 0.40000000, 0.45000000, 0.50000000, 0.60000000, 0.70000000, + 0.80000000, 0.90000000, 1.00000000, 1.25000000, 1.50000000, 1.75000000, 2.00000000, 2.50000000, 3.00000000, + 3.50000000, 4.00000000, 4.50000000, 5.00000000, 6.00000000, 7.00000000, 8.00000000, 9.00000000, 10.00000000, + 12.50000000, 15.00000000, 17.50000000, 20.00000000, 25.00000000, 30.00000000, 35.00000000, 40.00000000, 45.00000000, + 50.00000000, 60.00000000, 70.00000000, 80.00000000, 90.00000000, 100.00000000, 125.00000000, 150.00000000, 175.00000000, + 200.00000000, 250.00000000, 300.00000000, 350.00000000, 400.00000000, 450.00000000, 500.00000000, 600.00000000, 700.00000000, + 800.00000000, 900.00000000, 1000.00000000 }; + +Vector E_trans = Vector{ + 0.00000000, 0.00000003, 0.00000005, 0.00000008, 0.00000010, 0.00000012, 0.00000019, 0.00000025, 0.00000032, 0.00000040, 0.00000056, + 0.00000074, 0.00000094, 0.00000115, 0.00000139, 0.00000164, 0.00000219, 0.00000281, 0.00000349, 0.00000423, 0.00000503, 0.00000727, + 0.00000982, 0.00001268, 0.00001583, 0.00002302, 0.00003133, 0.00004073, 0.00005118, 0.00006265, 0.00007514, 0.00010303, 0.00013474, + 0.00017015, 0.00020916, 0.00025168, 0.00037280, 0.00051443, 0.00067574, 0.00085601, 0.00127074, 0.00175467, 0.00230417, 0.00291610, + 0.00358765, 0.00431628, 0.00593463, 0.00775569, 0.00976489, 0.01194933, 0.01429742, 0.02080739, 0.02813854, 0.03617646, 0.04482673, + 0.06363014, 0.08408959, 0.10583774, 0.12859951, 0.15216623, 0.17638099, 0.22626057, 0.27760375, 0.32995349, 0.38300115, 0.43653241, + 0.57147911, 0.70718625, 0.84291833, 0.97830062, 1.24728607, 1.51351565, 1.77682635, 2.03725247, 2.29489423, 2.54987043, 3.05235322, + 3.54549379, 4.03000023, 4.50646156, 4.97537287, 6.11760947, 7.22029542, 8.28734912, 9.32182484, 11.30353595, 13.17999838, 14.96335835, + 16.66326130, 18.28755912, 19.84292382, 22.77184827, 25.48526839, 28.01267457, 30.37776924, 32.60004307, 37.64405937, 42.07735627, 46.03152811, + 49.59970748, 55.85787485, 61.19700674, 65.85324342, 69.98187149, 73.69030148, 77.05609581, 82.99736493, 88.10216461, 92.57711656, 96.56071719, + 100.15035659 }; + +Vector E_ref = { 5.000100e-05, 6.000000e-05, 7.000000e-05, 8.000000e-05, 9.000000e-05, 1.000000e-04, 1.250000e-04, 1.500000e-04, 1.750000e-04, + 2.000000e-04, 2.500000e-04, 3.000000e-04, 3.500000e-04, 4.000000e-04, 4.500000e-04, 5.000000e-04, 6.000000e-04, 7.000000e-04, + 8.000000e-04, 9.000000e-04, 1.000000e-03, 1.250000e-03, 1.500000e-03, 1.750000e-03, 2.000000e-03, 2.500000e-03, 3.000000e-03, + 3.500000e-03, 4.000000e-03, 4.500000e-03, 5.000000e-03, 6.000000e-03, 7.000000e-03, 8.000000e-03, 9.000000e-03, 1.000000e-02, + 1.250000e-02, 1.500000e-02, 1.750000e-02, 2.000000e-02, 2.500000e-02, 3.000000e-02, 3.500000e-02, 4.000000e-02, 4.500000e-02, + 5.000000e-02, 6.000000e-02, 7.000000e-02, 8.000000e-02, 9.000000e-02, 1.000000e-01, 1.250000e-01, 1.500000e-01, 1.750000e-01, + 2.000000e-01, 2.500000e-01, 3.000000e-01, 3.500000e-01, 4.000000e-01, 4.500000e-01, 5.000000e-01, 6.000000e-01, 7.000000e-01, + 8.000000e-01, 9.000000e-01, 1.000000e+00, 1.250000e+00, 1.500000e+00, 1.750000e+00, 2.000000e+00, 2.500000e+00, 3.000000e+00, + 3.500000e+00, 4.000000e+00, 4.500000e+00, 5.000000e+00, 6.000000e+00, 7.000000e+00, 8.000000e+00, 9.000000e+00, 1.000000e+01, + 1.250000e+01, 1.500000e+01, 1.750000e+01, 2.000000e+01, 2.500000e+01, 3.000000e+01, 3.500000e+01, 4.000000e+01, 4.500000e+01, + 5.000000e+01, 6.000000e+01, 7.000000e+01, 8.000000e+01, 9.000000e+01, 1.000000e+02 }; + +Matrix sigma_ref = Matrix{ + { 29862950.8787046149373055, 15832930.4872363097965717, 14707265.9671539682894945, 5629129.8551302049309015, 2823587.0814588069915771, + 786376.6804724421817809, 82275.2240006912907120, 168938.0233102306956425, 430967.1089941480895504, 491558.9014602738316171, + 285788.1295406753197312, -17269.0214510667137802, -212202.0839011180796660, -198594.3648096479882952, -38620.5840763664164115, + 125893.5199542525806464, 173471.6732932037266437, 91881.7620774131501094, -42931.7849445911779185, -124076.3717723933223169, + -103984.7762658291758271, -9001.9826283416841761, 79224.2471464856644161, 99804.7178429236810189, 43159.8434006886018324, + -37879.4736774849443464, -84015.0637299599911785, -62641.4707518384311697, 867.2379057964735694, 58256.6938843615425867, + 65390.6622186500608223, 24655.9207605657720705, -31785.8081209974698140, -57932.7808127791067818, -39545.5715941912203562, + 8730.7087048016710469, 45199.1116296181498910, 48422.7000098053540569, 10084.9661444062930968, -29412.6603611357277259 }, + { 27478590.5712461769580841, 15876394.9161294214427471, 15156708.3431697674095631, 7560885.2432267991825938, 4514031.8245148565620184, + 2037459.4657859401777387, 687782.4189437092281878, 240149.6096994926920161, 295094.3995055741397664, 474788.7975538457976654, + 529938.6380447705741972, 395400.6562647615792230, 144988.0697760005132295, -82707.4192794980772305, -185654.9863048061379232, + -139762.5117406620411202, -7544.1357468075384531, 118720.5624730655399617, 162866.9145876640104689, 112350.2465644397016149, + 6223.9323257219475636, -85691.6826582903595408, -115367.2308007259125588, -72036.4192996327474248, 7525.1422923174595780, + 74677.3294567623815965, 89245.3425683941895841, 50567.4976318458138849, -15378.9358292069082381, -64869.0630795897450298, + -72562.3667354571516626, -35502.0866624265763676, 18309.9621709678322077, 57967.7292443326732609, 59117.6477677237489843, + 26725.7565174180781469, -20338.6438320970119094, -48044.3778995863685850, -50844.7728604823205387, -19072.0495956707054575 }, + { 26454135.0237197801470757, 16339196.6671859808266163, 15281055.9369445219635963, 8594595.9500509947538376, 5449120.8552199564874172, + 2941268.5318036521784961, 1410522.4617224996909499, 690957.4891044680261984, 508835.7649032648187131, 576837.8347296882420778, + 644058.9708407385041937, 570794.4904871941544116, 353829.0810667653568089, 98974.9290802648320096, -77633.3276308824715670, + -118683.6405749611440115, -52120.6874687465096940, 54439.7718815413099946, 132100.7774784210196231, 146460.0797118288464844, + 94013.7751475199329434, 6457.1881594831011171, -71395.9026925528305583, -96482.0450150400283746, -61513.3004597488470608, + 7638.3589276552447700, 63379.7833352578163613, 76791.6520558091287967, 45708.2985460075578885, -3454.7897825824211395, + -44258.6610636324912775, -56295.0846252337869373, -38837.5248555877042236, -707.5061523739150289, 35407.1860129104243242, + 51212.1261163697345182, 34975.8857472274539759, 2927.1512183536924567, -33949.0029221140575828, -42844.6721407291333890 }, + { 25221540.5736945345997810, 16416950.4051520265638828, 15188727.4617474824190140, 9318841.8816560767591000, 6132865.5338454954326153, + 3615785.2667411211878061, 2018864.8259085302706808, 1185980.6299517985899001, 853394.8774009889457375, 770167.6583059071563184, + 743752.9961354103870690, 665410.1014040366280824, 502780.9199274167767726, 292721.2763795228675008, 102778.7908755704120267, + -4025.8713954324784936, -11828.8691875011154480, 47548.1866366458780249, 111549.5661066173634026, 133043.3921668635448441, + 99518.5119090951629914, 38460.9224113900636439, -14261.7589502277696738, -33303.3500152645792696, -21523.6983653905408573, + 5043.2852444541513250, 25218.4641992718752590, 30592.0154049981683784, 19959.2919990186564974, 2660.2779443735344103, + -13345.2869776789520984, -18104.0117469494216493, -10417.8555553025580593, 6832.0582269384667597, 21035.4787357319655712, + 23508.4792786943398823, 8700.5061765677291987, -9285.3136185733637831, -28265.6402998432313325, -23981.6554914646803809 }, + { 23932583.6940678656101227, 16214064.2336932830512524, 14893386.8292862214148045, 9769985.7448383532464504, 6666325.1964040584862232, + 4192610.8543906910344958, 2549735.1625132998451591, 1622119.9038689923472703, 1179451.7674999511800706, 991372.6379037046572194, + 884314.9182202182710171, 766857.8180835887324065, 612314.5630053975619376, 439318.0816996242501773, 279941.6800175061216578, + 165190.4103449917747639, 106046.5179213761293795, 95048.9133957385201938, 105797.3162038128939457, 112103.6733289640687872, + 96580.9966491443483392, 63765.9410956482606707, 29421.0475035426861723, 12758.5651011845693574, 17451.2181944995754748, + 34142.9293874467184651, 42981.9595146022475092, 33224.0776874536313699, 6232.9636401424886571, -20853.3635452366725076, + -32251.0189007115404820, -19621.8628441874716373, 7733.0236647843612445, 34203.6825561468940577, 43168.4251844486279879, + 31716.9004959598896676, 4738.4219719661487034, -18148.2220537374269043, -36852.7338005781639367, -31717.3079723804476089 }, + { 22703654.8634493276476860, 15884157.5882104262709618, 14510116.4521656669676304, 10026344.4622031990438700, 7060136.8824208825826645, + 4663726.2760528866201639, 3004038.6930384067818522, 2004920.1879277722910047, 1475780.6941979373805225, 1209743.3023588065989316, + 1043472.5403043838450685, 889107.7376548850443214, 721950.2876289440318942, 557644.8713368331082165, 417588.0044421898201108, + 314929.2903611375950277, 245444.4585399971692823, 198283.8882866275380366, 159928.5104177425964735, 124965.2051479346118867, + 92382.7454048211366171, 67727.3288923484942643, 54132.2896541141381022, 53580.2731604187720222, 60531.3295942351542180, + 67810.0721989568992285, 65288.0849508246174082, 49244.4384859632700682, 20905.4653580789745320, -8861.0280738639794436, + -28588.2063880324858474, -28090.9541892333909345, -8696.0733888598260819, 20595.0837694305810146, 43349.8552368454620591, + 48694.1559540183807258, 31684.5982093308157346, 6350.1306772985808493, -25087.6261535334124346, -35166.9298904023744399 }, + { 20063498.4764772504568100, 14887635.5635053031146526, 13459512.5419370010495186, 10147170.1127178482711315, 7590456.8123716749250889, + 5456741.3033404853194952, 3856785.4908301448449492, 2773268.4294078191742301, 2097559.5981703614816070, 1688340.8313434463925660, + 1417337.8726697396486998, 1201647.1100033321417868, 1006091.1496203418355435, 832000.7834181752987206, 691315.8818916974123567, + 590334.8583260106388479, 519040.3862112648785114, 458832.9726475456845947, 391046.7760313375038095, 310217.1280913967639208, + 223980.1452771799813490, 150467.1464718114875723, 104871.8970167155348463, 93267.1946010164392646, 106546.2587355757423211, + 127730.0549710628547473, 137856.2799891555332579, 127500.0508163962513208, 97589.1404221724078525, 60000.8197341430422966, + 27816.1540745137826889, 11105.2190586604810960, 10056.7696703925103066, 18805.6361886742815841, 27325.8948271426743304, + 29955.9119258370301395, 23815.9316872109193355, 18471.6304260547040030, 7177.9511129141837955, 8452.8654179184832174 }, + { 18039992.7923327572643757, 13939060.4632646925747395, 12501518.7098128423094749, 9907320.6522889267653227, 7710955.7862095003947616, + 5839063.1898331521078944, 4371713.7820130139589310, 3308839.7561852103099227, 2581332.3982232385315001, 2090601.1918165166862309, + 1742390.4879354152362794, 1471500.1850144083146006, 1245529.9918817800935358, 1058234.9966839873231947, 912032.8279122429667041, + 806270.3449413207126781, 729311.9324597788508981, 663453.0476653256919235, 591217.3136602721642703, 505315.2976770122768357, + 409704.8451208380283788, 318263.3699503266834654, 245290.4032263337285258, 199910.2297967214253731, 180273.1948784776614048, + 176978.8165173836750910, 176518.1952570363064297, 169451.1366072823875584, 152232.6384219457686413, 128980.7102469161181943, + 105990.6144983092381153, 89176.8516483275452629, 79182.3191740600450430, 73236.6533663010050077, 65974.4615965404955205, + 54923.3165751424749033, 38916.6797314519717474, 27160.4281366694012831, 12180.4226476970252406, 12069.3099763327445544 }, + { 16424076.8163126334547997, 13077759.4523208606988192, 11678422.4503413364291191, 9556380.0084291696548462, 7654177.6581855788826942, + 6002324.0456484491005540, 4666249.7333866022527218, 3654073.9919209117069840, 2920281.9454941712319851, 2393856.5198540659621358, + 2004002.1790931276045740, 1699312.6870762351900339, 1451560.3266907818615437, 1251450.7164859245531261, 1096352.5178566225804389, + 981854.9677217059070244, 896109.5783194187097251, 823287.1948627224192023, 748198.0089819040149450, 663485.4973412693943828, + 570568.5039640977047384, 478739.0340609513223171, 398443.1455362233100459, 337148.6399063019780442, 295054.9696086653857492, + 267192.1317389928735793, 245557.8773307547089644, 224533.2386221348715480, 201932.7414952530525625, 180083.4720195365371183, + 162042.7740190418553539, 150036.1706625094811898, 142484.6178632871888112, 135743.1138304623891599, 125149.7045122177951271, + 109073.7173585422278848, 87200.3975184429727960, 68740.4571203422819963, 46291.7569226052073645, 37957.5069152916548774 }, + { 15087162.0535950567573309, 12295510.2389335073530674, 10961810.2329786904156208, 9170634.2344265915453434, 7508926.6231793276965618, + 6042620.4136631675064564, 4827968.2495411718264222, 3876864.3721314570866525, 3158694.8009504554793239, 2621115.4408503854647279, + 2210039.0347423851490021, 1884759.6032350976020098, 1621411.8479207709897310, 1410081.0128843951970339, 1245826.5180339151993394, + 1122437.3290675100870430, 1028351.3185884751146659, 949323.4666240849765018, 872015.4751732540316880, 789373.7283655984792858, + 701339.1615379601716995, 614058.9950788111891598, 534830.9392169578932226, 468954.6609977228799835, 416600.7718490766128525, + 374406.2051167364115827, 337137.1350831834133714, 301629.2516813949914649, 267419.5266823714482598, 237235.4643898296053521, + 213918.7254286339157261, 199024.9572886646492407, 190619.4980520510580391, 184678.5681867639650591, 176259.7892052720417269, + 162879.0837783508468419, 143133.9948229005676694, 124737.1007342523662373, 99527.3385186832892941, 85220.5107159095787210 }, + { 13031821.1977208796888590, 10986677.5481680352240801, 9803614.1411625873297453, 8432791.4581124670803547, 7120425.4280841602012515, + 5934846.9360014796257019, 4919612.8080275412648916, 4088495.7364673269912601, 3426860.7827935330569744, 2904129.7591484636068344, + 2486669.3026529680937529, 2147825.2207980467937887, 1870658.7036114060319960, 1646416.6600288543850183, 1469164.2093114203307778, + 1331986.0490695685148239, 1224656.3758197878487408, 1135446.0089977304451168, 1053583.7546844251919538, 972668.3797815856523812, + 891168.1268618553876877, 811801.9584693389479071, 738314.6578475116984919, 673363.6271112337708473, 616575.9434480789350346, + 565529.0108809503726661, 516913.0610663484549150, 469008.5038655449170619, 422135.9762067414703779, 378835.3854782562702894, + 341839.0138460622983985, 312955.2388013226445764, 291569.5484655243344605, 275318.4459961508400738, 260893.7103498146170750, + 246202.5495028690202162, 229089.0947127335239202, 214926.0114133765455335, 193619.7025333830970339, 180366.0503732270444743 }, + { 11521554.6323176734149456, 9946618.4794945307075977, 8907502.3512605540454388, 7791362.1404775995761156, 6713209.9103812323883176, + 5724638.3663823679089546, 4859464.3800918366760015, 4130539.7343248231336474, 3530633.9853804470039904, 3040540.6969193872064352, + 2637921.4550522374920547, 2304378.4959255130961537, 2027607.1461608326062560, 1800505.0535154319368303, 1617638.5666138608939946, + 1472701.8101534277666360, 1357037.7976961196400225, 1260952.4030213234946132, 1175529.4084341260604560, 1095021.7025404546875507, + 1017260.4930736718233675, 943201.8629273823462427, 874709.0740532332565635, 813032.4916889857267961, 757468.1411889621522278, + 705987.7463832969078794, 656067.0986638760659844, 606373.5148660335689783, 557115.0722893816418946, 510138.6852230335352942, + 467553.2494684878038242, 430908.8263704616110772, 400163.7735625336063094, 374053.0387321787420660, 350668.9215183696942404, + 328907.9808935667388141, 307138.1447197247762233, 290242.3772910838597454, 268013.0912779167410918, 254359.2726627283846028 }, + { 10351479.7559210658073425, 9094955.7832512836903334, 8182541.2085022293031216, 7240323.9342830516397953, 6328995.1145652094855905, + 5485619.9601588090881705, 4736291.7520009009167552, 4092094.9508804744109511, 3549412.4754672539420426, 3095478.5183693040162325, + 2714719.5748240407556295, 2393945.8644745415076613, 2124043.1861705137416720, 1899404.3767512016929686, 1715436.5739105236716568, + 1566743.9376899041235447, 1446112.3673766753636301, 1345506.0393451997078955, 1257462.8825396427419037, 1176875.1455937149003148, + 1101341.4177445326931775, 1030841.2630413043079898, 966136.6866130118723959, 907640.8177939997985959, 854442.8376592211425304, + 804740.7942810100503266, 756451.7816610625013709, 708420.6404407692607492, 660682.9287514891475439, 614515.1758710236754268, + 571440.1459599029039964, 532609.2345765561331064, 498068.5501437669154257, 466994.0360420894576237, 438165.6480908821104094, + 411028.9432114369701594, 384372.5171399703249335, 362930.9822184225777164, 336954.1066678470233455, 319757.4024082460091449 }, + { 9420239.1965848281979561, 8390319.9833990912884474, 7585221.4473423101007938, 6770079.5509531702846289, 5981913.8228890430182219, + 5248011.0888884123414755, 4588748.0768278380855918, 4013494.7766825780272484, 3520525.3342983475886285, 3100972.7216756143607199, + 2743537.6852676891721785, 2438424.7572062769904733, 2178688.7431129156611860, 1959853.1735436066519469, 1778070.2543301992118359, + 1628765.8814176465384662, 1505907.7211060733534396, 1402785.9506353519391268, 1313115.3770076078362763, 1232409.7708085931371897, + 1158279.8564563554245979, 1090190.2963150511495769, 1028257.6629218757152557, 972382.8057993114925921, 921517.5712410783162341, + 873986.6628525136038661, 827961.5741240325151011, 782370.9614816238172352, 737106.3427579529816285, 693045.1106646661646664, + 651294.0187686111312360, 612703.0821526454528794, 577314.5831547451671213, 544516.5190044466871768, 513442.8623388675041497, + 483795.9907192322425544, 454560.6769737292779610, 430251.2600707224919461, 401526.7451889946241863, 381169.4868925354676321 }, + { 8654378.9499170817434788, 7792447.4512057509273291, 7078150.6058947108685970, 6361502.9993181005120277, 5668684.1852314257994294, + 5020741.4981979895383120, 4433876.4280727095901966, 3915951.5609445567242801, 3466233.1187190320342779, 3078315.4949807520024478, + 2743723.5727599728852510, 2454974.8121979897841811, 2206662.0606467993929982, 1995180.7923240840900689, 1817318.5548330822493881, + 1669209.4295500223524868, 1545785.0658942211885005, 1441402.8999132805038244, 1350736.6485541211441159, 1269868.1071649570949376, + 1196539.3603911828249693, 1129964.4426983247976750, 1069894.5886909426189959, 1015933.6406234013848007, 966970.2574490753468126, + 921429.3139034945052117, 877653.6906374893151224, 834616.9839285491034389, 792089.8600057779112831, 750649.4365319574717432, + 711084.4178883975837380, 674001.6988030830398202, 639397.6744260372361168, 606758.7390036948490888, 575407.3681795964948833, + 545162.6544481760356575, 515098.4659567368798889, 489478.5631077325087972, 459320.3811204785015434, 436871.0920078136259690 }, + { 8014338.7275455556809902, 7280732.9188967123627663, 6643082.6333899218589067, 6005234.7654605014249682, 5388175.2377545265480876, + 4809034.5185493063181639, 4281035.2432771790772676, 3810831.9697623965330422, 3398246.8255678722634912, 3038514.6209318991750479, + 2725112.4346107188612223, 2452194.9878745749592781, 2215474.3944766889326274, 2012014.2318655312992632, 1839115.8358864369802177, + 1693489.8471750817261636, 1570833.0697571958880872, 1466346.4195978613570333, 1375470.0827112037222832, 1294771.5296447915025055, + 1222160.5253325011581182, 1156738.7114728959277272, 1098052.1160878017544746, 1045537.7063083066605031, 998071.9374107412295416, + 954173.7979938457719982, 912320.4376170935574919, 871521.7563882509712130, 831459.2889519229065627, 792489.0347511593718082, + 755162.1937487138202414, 719900.5152124591404572, 686653.5625179975759238, 654963.4182248549768701, 624268.5094849374145269, + 594447.7958599107805640, 564622.7288522953167558, 538814.3419791581109166, 508357.2605344910407439, 484971.6584891708916984 }, + { 6998070.4047773275524378, 6445444.2155206166207790, 5928509.3257028106600046, 5409841.4247329868376255, 4906278.3079368146136403, + 4430795.5176269169896841, 3992956.2447999245487154, 3597739.8355444613844156, 3245481.2816957272589207, 2933352.5658842404372990, + 2657237.6061864211224020, 2413363.1598133407533169, 2198900.2075984170660377, 2011829.9451941726729274, 1850199.5902287517674267, + 1711568.7702197770122439, 1592742.2570444194134325, 1490142.4318400183692575, 1400336.6213845051825047, 1320658.5348741426132619, + 1249368.7799793290905654, 1185551.6620665609370917, 1128605.1727725034579635, 1077856.7396044763736427, 1032258.1051814021775499, + 990525.5958308076951653, 951366.6033789645880461, 913876.5586089945863932, 877641.1350615727715194, 842734.6277374733472243, + 809391.2737085747066885, 777774.6212908762972802, 747746.4036908049602062, 718890.1822115007089451, 690756.0388735787710175, + 663254.7477029003202915, 635541.0561560906935483, 611201.8433151458157226, 582117.3811525793280452, 559053.5580172629561275 }, + { 6226136.1680186344310641, 5792977.8508337978273630, 5365177.4328304976224899, 4932462.8216768614947796, 4509994.0012246463447809, + 4108764.6700330530293286, 3736395.4389364761300385, 3396886.6987528093159199, 3090796.1093309726566076, 2816351.9635670930147171, + 2570802.6324608866125345, 2351582.1381273898296058, 2156740.9576634857803583, 1984847.0015804113354534, 1834452.1446468497160822, + 1703697.1669413424097002, 1590131.3789119836874306, 1490995.1916311541572213, 1403618.5664167674258351, 1325881.4463145199697465, + 1256338.4696790871676058, 1194143.9689565040171146, 1138682.2123830188065767, 1089284.9501541410572827, 1045011.7654932212317362, + 1004752.8665095223113894, 967399.8868590127676725, 932137.0220488640479743, 898520.0748350082430989, 866474.1573992264457047, + 836055.3600291586481035, 807279.2146899233339354, 779955.9400504465447739, 753692.9608035408891737, 728100.2770903384080157, + 703093.7632948614191264, 677851.5234030988067389, 655614.6100158430635929, 628745.2526424907846376, 607192.6069533083355054 }, + { 5617077.5616988455876708, 5267336.1950611248612404, 4907080.7206457024440169, 4539219.9086467288434505, 4177744.3688144632615149, + 3832453.7795657515525818, 3509843.7847603275440633, 3213334.2820638264529407, 2943613.2700009476393461, 2699551.0536199016496539, + 2479238.2284920495003462, 2280865.4124421668238938, 2103046.5491837086156011, 1944741.0346288708969951, 1804851.8531471311580390, + 1681929.7018313370645046, 1574045.0051647564396262, 1479010.5802008467726409, 1394694.4823097251355648, 1319375.7758019722532481, + 1251844.8394981119781733, 1191346.7759848330169916, 1137301.3367325607687235, 1089086.4315356290899217, 1045872.4348641493124887, + 1006700.4887556767789647, 970615.7984939278103411, 936890.1570016664918512, 905084.9025015644729137, 875048.6728270081803203, + 846737.0944210975430906, 820080.5323918955400586, 794861.9036034180317074, 770707.7216240745037794, 747265.7887742251623422, + 724449.4213307237951085, 701458.1550458469428122, 681253.8585752611979842, 656627.5969679146073759, 636830.9520702091977000 }, + { 5123360.9898556740954518, 4834372.7684181332588196, 4526482.1382045578211546, 4209080.8391333259642124, 3895101.4230236997827888, + 3593457.7683180533349514, 3309916.7769713886082172, 3047536.7359967986121774, 2807100.6935716206207871, 2587905.0552021758630872, + 2388598.7308146730065346, 2207877.2617655303329229, 2044736.3674914445728064, 1898409.0728756722528487, 1768051.8508067973889410, + 1652514.7926711279433221, 1550247.0814965402241796, 1459477.5181654100306332, 1378467.3643985204398632, 1305794.2597980166319758, + 1240435.1053503865841776, 1181722.3163614154327661, 1129124.7416891050525010, 1082076.5411051944829524, 1039847.8720126288244501, + 1001606.3982585675548762, 966524.1363080309238285, 933952.9411964159226045, 903475.7591146910563111, 874904.5659565296955407, + 848139.2687707388540730, 823062.7117357727838680, 799447.1359016452915967, 776938.5806424517650157, 755213.8372811159351841, + 734184.3599313702434301, 713072.7548916002269834, 694612.6949311032658443, 671979.2396735581569374, 653824.0491795239504427 }, + { 4712885.0668527679517865, 4469658.6478452812880278, 4203241.6773716220632195, 3926109.3830809686332941, 3650187.1127214627340436, + 3383642.5939569598995149, 3131710.4801952876150608, 2897201.2551771188154817, 2680968.3196069947443902, 2482604.8718426898121834, + 2301146.7331212526187301, 2135639.7687961463816464, 1985346.5111015916336328, 1849695.1444500512443483, 1728027.8656005063094199, + 1619417.3323684546630830, 1522594.6937344023026526, 1436099.2156450299080461, 1358487.3196579592768103, 1288564.9140513034071773, + 1225457.4585603449959308, 1168575.4949107156135142, 1117438.9071390959434211, 1071538.4210994197055697, 1030231.9777219714596868, + 992794.3052725931629539, 958504.3985571672674268, 926787.3185528793837875, 897256.6093590471427888, 869712.2858331728493795, + 844027.3797229512128979, 820062.4726397928316146, 797592.1283341307425871, 776285.2789786193752661, 755845.8633092480013147, + 736187.5594592404086143, 716559.4519064868800342, 699505.4394530229037628, 678551.7022817939287052, 661826.9418541829800233 }, + { 3939568.7755893166176975, 3771097.7141291573643684, 3576647.8096331544220448, 3370615.3490975396707654, 3162742.8422444192692637, + 2959458.3116592639125884, 2764863.6280805091373622, 2581369.5766164157539606, 2410041.2863238537684083, 2250959.4441760899499059, + 2103683.1924797859974205, 1967733.0285921604372561, 1842797.5410308383870870, 1728655.7505532717332244, 1624949.9384766940493137, + 1531080.7389682796783745, 1446226.3518065062817186, 1369458.8821853278204799, 1299841.5255129500292242, 1236551.1887553569395095, + 1178951.8151662561576813, 1126608.7620555819012225, 1079171.6903854904230684, 1036254.0342902750708163, 997362.4238366918871179, + 961954.4154644219670445, 929510.9836153797805309, 899609.6873436724999920, 871932.8502609659917653, 846273.5875635948032141, + 822485.0217041801661253, 800426.0633743144571781, 779899.0775352455675602, 760618.0518471200484782, 742334.3238544564228505, + 724978.1685546566732228, 707876.4737287783063948, 693216.6719990035053343, 675252.9291657430585474, 661079.0302425444824621 }, + { 3393574.1782416533678770, 3269392.7387680569663644, 3120535.5448944955132902, 2960203.9767479738220572, 2796549.1720573268830776, + 2634996.3081744783557951, 2478950.7570889266207814, 2330333.0362025843933225, 2190055.3139216974377632, 2058435.0102658888790756, + 1935474.1827236413955688, 1821048.5478369258344173, 1714997.4442307478748262, 1617160.5001869625411928, 1527330.4880085000768304, + 1445185.2086305613629520, 1370223.6970686563290656, 1301797.9113973933272064, 1239210.3396698213182390, 1181853.5677063558250666, + 1129276.4198147731367499, 1081170.0135951747652143, 1037267.1191459868568927, 997260.4741769470274448, 960763.6653172806836665, + 927355.8528463096590713, 896637.8350212902296335, 868288.2228183597326279, 842064.2687722871778533, 817789.6077764970250428, + 795312.7702727477299049, 774485.1997339713852853, 755140.0149052382912487, 737058.5977723600808531, 720049.5103401683736593, + 704047.2457352858036757, 688424.9027237701229751, 675116.1557314484380186, 658978.0815437301062047, 646348.3947751300875098 }, + { 2985632.5446466086432338, 2890050.7001290880143642, 2772195.4377924022264779, 2643500.4377838424406946, 2510736.0493098944425583, + 2378482.9434590721502900, 2249706.6754353316500783, 2126119.5252273394726217, 2008550.3970408523455262, 1897325.2690676804631948, + 1792553.6780127885285765, 1694295.0700705368071795, 1602587.8736301762983203, 1517417.1044560442678630, 1438656.2292910795658827, + 1366048.9381070742383599, 1299218.5635544280521572, 1237720.4939740197733045, 1181094.4824849071446806, 1128922.5966570433229208, + 1080853.2313453890383244, 1036607.4827058179071173, 995945.3953885751543567, 958630.8302926596952602, 924392.5349221848882735, + 892924.9859913114923984, 863908.7198526428546757, 837059.6092981364345178, 812156.4599640162196010, 789050.5461638728156686, + 767629.8885461256140843, 747781.6489422153681517, 729362.3197083137929440, 712170.7800741272512823, 696034.4219384007155895, + 680905.0604748417390510, 666228.8714148068102077, 653761.6035727371927351, 638833.5994332450209185, 627176.3251693847123533 }, + { 2668819.1518746959045529, 2592789.4382736738771200, 2496943.8954680319875479, 2391084.6001471178606153, 2280887.5267405370250344, + 2170227.0285276891663671, 2061684.1792907472699881, 1956810.5652595264837146, 1856400.4537149921525270, 1760796.4385910704731941, + 1670144.5485566400457174, 1584557.4161109826527536, 1504151.5888269818387926, 1429010.0888543352484703, 1359110.8173440154641867, + 1294292.7106370877008885, 1234265.8535232585854828, 1178674.2541736671701074, 1127161.5059309152420610, 1079424.9743049866519868, + 1035223.1754166635219008, 994358.9113793906290084, 956639.1653719503665343, 921851.9281254590023309, 889754.9552594720153138, + 860094.7346416218206286, 832626.9414329843129963, 807142.7229965275619179, 783472.5342899167444557, 761483.7546164835803211, + 741058.5575445953290910, 722080.0443160743452609, 704423.0730722476728261, 687929.7587218536064029, 672473.4374679760076106, + 658027.9276005211286247, 644081.4557744287885725, 632223.4131664992310107, 618162.3904544529505074, 607150.4885597061365843 }, + { 2207678.8305781967937946, 2155996.8103206027299166, 2088659.2051691345404834, 2012948.4242179291322827, 1933005.1329282163642347, + 1851670.3147625476121902, 1770906.1064129355363548, 1691970.8902808981947601, 1615581.6190901838708669, 1542105.4884261577390134, + 1471735.3578992306720465, 1404617.5491226802114397, 1340899.2784832669422030, 1280716.5188702391460538, 1224144.0860647286754102, + 1171158.2264133119024336, 1121627.0852723387070000, 1075344.5941960904747248, 1032080.1223142486996949, 991629.4705266586970538, + 953835.2049238422187045, 918581.6793890402186662, 885763.6093595193233341, 855258.5231282564345747, 826909.0959165636450052, + 800533.3652899124426767, 775945.6703910757787526, 752985.3892431163694710, 731528.3081587307387963, 711485.6612389928195626, + 692782.9601187242660671, 675341.5488181104883552, 659068.1044616634026170, 643833.9861388518474996, 629534.4922166534233838, + 616153.6050266303354874, 603259.8400039668194950, 592230.0229305475950241, 579390.3549445406533778, 569267.2539614313282073 }, + { 1887379.3408176572993398, 1849756.1874442500993609, 1799546.7464934447780252, 1742334.2408151198178530, 1681290.6168684831354767, + 1618587.7653256289195269, 1555744.8316433823201805, 1493766.2667152411304414, 1433259.3633855078369379, 1374570.1919473677407950, + 1317908.9701134501956403, 1263442.6439864477142692, 1211331.2222462715581059, 1161721.3438831674866378, 1114712.2229493951890618, + 1070328.9708627485670149, 1028514.8814033034723252, 989154.0106711160624400, 952105.6334182181162760, 917240.5108352353563532, + 884456.7379777412861586, 853678.1378929048078135, 824834.0686142860213295, 797841.0807278519496322, 772590.7378841690951958, + 748956.1255353591404855, 726805.7968460640404373, 706023.3362001185305417, 686515.5228123678825796, 668212.3813716943841428, + 651053.4588593648513779, 634975.8998549771495163, 619908.3829536333214492, 605752.3262189602246508, 592430.5455986100714654, + 579941.0609198438469321, 567909.9146832374390215, 557549.1503577198600397, 545630.2721647461876273, 536144.4586457855766639 }, + { 1651366.4917294350452721, 1622658.0470207296311855, 1583636.0666847871616483, 1538694.6087187053635716, 1490340.7938690679147840, + 1440288.5182695880066603, 1389746.2995263643097132, 1339531.1240738448686898, 1290158.5052996231243014, 1241943.1699658138677478, + 1195091.6928953151218593, 1149771.4004526222124696, 1106138.4443358578719199, 1064334.5230051763355732, 1024463.1323936372064054, + 986570.6697344323620200, 950640.9260527419392020, 916611.2655686355428770, 884397.3278689178405330, 853919.0747712431475520, + 825112.2542562778107822, 797927.5017842464148998, 772316.3378202328458428, 748218.7559210441540927, 725555.3893648637458682, + 704233.0459959637373686, 684155.2884190975455567, 665236.5990476179867983, 647407.9092444457346573, 630616.0827341112308204, + 614813.4804621837101877, 599949.2895912718959153, 585966.0709978267550468, 572783.4559010232333094, 560340.4277383476728573, + 548642.8184388102963567, 537360.8842215638142079, 527582.6970781928393990, 516425.4339843409834430, 507470.8670472500962205 }, + { 1469914.5375163364224136, 1447229.2416891446337104, 1415938.5622114618308842, 1379583.7302878154441714, 1340198.3153776181861758, + 1299171.1392975719645619, 1257486.2166453253012151, 1215819.0046642031520605, 1174608.7352359991054982, 1134136.3989669037982821, + 1094595.8474583323113620, 1056146.6769729740917683, 1018936.1013513392535970, 983096.9816227932460606, 948730.2947001284919679, + 915891.2167093164753169, 884585.3037293205270544, 854780.9882157251704484, 826428.3980203503742814, 799479.0054371660808101, + 773894.1092374557629228, 749643.9228548705577850, 726696.8774895820533857, 705010.3631547745317221, 684525.2324563185684383, + 665170.6188277525361627, 646872.6293567490065470, 629565.5900052926735952, 613196.4729596702381968, 597724.4345825344789773, + 583112.5511092857923359, 569320.9194804187864065, 556304.2089441774878651, 543996.6540297139436007, 532349.1243390699382871, + 521371.7718701895209961, 510767.9197835378581658, 501525.2017753288964741, 491034.5863931009080261, 482550.1224235628615133 }, + { 1325944.2510120782535523, 1307528.7472367193549871, 1281818.2836326649412513, 1251725.0149840801022947, 1218933.2780060069635510, + 1184593.0790847484022379, 1149521.6491824081167579, 1114286.0257656916510314, 1079263.0701541542075574, 1044702.0482190791517496, + 1010781.0191372567787766, 977648.6003089365549386, 945441.2970055625773966, 914282.0940883044386283, 884266.8819089322350919, + 855453.7633165984880179, 827860.3394893575459719, 801473.7799588404595852, 776265.7843736609211192, 752208.0474665304645896, + 729278.8249933612532914, 707462.0192988337948918, 686738.5936693707481027, 667079.2045318972086534, 648439.9682778497226536, + 630766.4914551400579512, 614001.0795947909355164, 598091.9674944409634918, 582997.1337784384377301, 568684.1385250000748783, + 555123.6282336460426450, 542283.8662305461475626, 530128.9876183482119814, 518605.0138230029260740, 507672.6511171017773449, + 497345.8101601694361307, 487355.1599229044513777, 478606.2193821800174192, 468712.7313674545148388, 460659.7834230349399149 }, + { 1208815.6041375652421266, 1193543.1615489386022091, 1172001.9069222756661475, 1146627.8079982395283878, 1118839.9321798051241785, + 1089607.4538687563035637, 1059620.4349291385151446, 1029361.4266889704158530, 999156.4362502591684461, 969226.5512559392955154, + 939733.8668387543875724, 910815.2779467211803421, 882596.4438752771820873, 855190.6144695497350767, 828687.7063384134089574, + 803145.7794656713958830, 778589.0368167824344710, 755016.1644534375518560, 732412.6042299231048673, 710763.1428856072016060, + 690057.2223721246700734, 670288.1040743379853666, 651445.7992359066847712, 633510.9824625991750509, 616451.5116622081259266, + 600225.7062645172700286, 584788.3015525705413893, 570098.0965865110047162, 556121.2668069782666862, 542831.4510407524649054, + 530204.6386507272254676, 518214.8844891370390542, 506833.2012354601174593, 496014.5907072564586997, 485727.4918719568522647, + 475988.8953368388465606, 466552.7453857935033739, 458256.8815418321755715, 448900.8534545883303508, 441245.8129269525525160 }, + { 1029558.4038458375725895, 1018522.7001969917910174, 1002698.3854435360990465, 983862.4600836064200848, 963064.4561179250013083, + 941022.6636538252932951, 918249.8003806014312431, 895108.0154834727291018, 871847.3440497254487127, 848643.0438861685106531, + 825628.0843459544703364, 802916.7369498582556844, 780614.2326478310860693, 758815.8628202044637874, 737599.3742142169503495, + 717019.0870684564579278, 697104.6235624781111255, 677866.8354746155673638, 659306.4726677428698167, 641423.0148585229180753, + 624218.4025986848864704, 607696.4215147602371871, 591857.7276588414097205, 576695.5229388707084581, 562193.0729487758362666, + 548325.9425283083692193, 535066.1615436850115657, 522387.6077491546166129, 510268.4398034334299155, 498691.3222618533181958, + 487639.9978852621279657, 477096.5215339229907840, 467041.0102352076210082, 457440.4639433176489547, 448273.4708747970871627, + 439560.2235189161729068, 431090.8342252571601421, 423596.4720044290879741, 415169.2362089478410780, 408218.2007113864528947 }, + { 898615.3124357890337706, 890238.8110773093067110, 878071.8696719884173945, 863468.1432791573461145, 847236.8909314898774028, + 829933.7041599758667871, 811955.9124515363946557, 793585.8812735490500927, 775021.2258446861524135, 756403.3647099885856733, + 737841.9439295409247279, 719432.3628722643479705, 701262.8822218396235257, 683413.8894837622065097, 665952.2386029129847884, + 648926.8786444272845984, 632367.9261934101814404, 616291.0595643327105790, 600703.9595465863822028, 585612.8626122223213315, + 571025.3585236479993910, 556949.9594974899664521, 543392.4483821433968842, 530352.6758931537624449, 517822.7098909492488019, + 505788.4416643383447081, 494232.6268765601562336, 483138.8237140023848042, 472493.1850077176350169, 462284.6505017236922868, + 452502.4299919458571821, 443134.0671736018266529, 434165.6145024202414788, 425571.8308701670030132, 417337.5268709252122790, + 409483.9131459924392402, 401827.5635400089668110, 395018.3595592084457166, 387368.7019206519471481, 381019.6256204131059349 }, + { 798629.7593386673834175, 792036.6222943484317511, 782359.1824813643470407, 770663.4046606284100562, 757593.3425506586208940, + 743592.8217975106090307, 728979.8403262007050216, 713981.3346521949861199, 698757.5642156677786261, 683424.7829196366947144, + 668074.4037794561590999, 652786.6299857900012285, 637635.9627201453549787, 622690.6184436806943268, 608008.1499524966347963, + 593632.0548479047138244, 579591.0468232053099200, 565902.4206023865845054, 552577.0065088443225250, 539624.2124762020539492, + 527054.1919220348354429, 514877.5244322635116987, 503102.4258254902670160, 491732.2898688085842878, 480764.2680242433561943, + 470190.4902937559527345, 460000.3899565909523517, 450183.7100097547518089, 440731.8695003647007979, 431638.1127313681645319, + 422895.5487944408087060, 414495.7080262082163244, 406428.9095091787748970, 398675.4976466646185145, 391224.6294513215543702, + 384097.7537033224944025, 377131.8033951602410525, 370912.5809836898697540, 363924.3384787039831281, 358097.0362774452660233 }, + { 719701.6662197335390374, 714365.5632885874947533, 706464.2088474058546126, 696859.2314923505764455, 686076.0354638511780649, + 674478.1236863089725375, 662326.4715939310844988, 649807.9273314457386732, 637055.2901782811386511, 624165.8023518957197666, + 611216.6570019230712205, 598275.9639992017764598, 585407.1848549484275281, 572668.6811647610738873, 560110.2349494346417487, + 547770.3390817119507119, 535675.6042246527504176, 523843.4110328572569415, 512285.8326468724990264, 501013.6272267379099503, + 490037.9611729028983973, 479370.1592266754014418, 469019.5009478504071012, 458991.2744750378187746, 449285.6541124372743070, + 439898.6627757432870567, 430824.0106975887902081, 422055.4682556246407330, 413587.9419468647101894, 405417.5922535465215333, + 397540.2497145442175679, 389950.2958998862886801, 382641.1281141815125011, 375597.2121870769187808, 368810.8697903316933662, + 362303.4571875948458910, 355928.1424949393258430, 350218.9366058108862489, 343798.3856302975909784, 338425.8187543488456868 }, + { 655767.4015988407190889, 651352.3801408864092082, 644765.6740117520093918, 636718.5507278530858457, 627648.1954510938376188, + 617858.2769535074476153, 607567.2766978645231575, 596932.0450031610671431, 586064.6035566427744925, 575047.5400162518490106, + 563946.8545831434894353, 552821.0091664008796215, 541724.6014832129003480, 530708.0218486138619483, 519814.6279521653195843, + 509078.5311592750949785, 498524.1020832660142332, 488168.1102493706857786, 478022.9021291487151757, 468099.6364213680499233, + 458409.6829991800477728, 448964.4187599081778899, 439773.4419277606066316, 430842.9928014925681055, 422175.0467923206742853, + 413768.0957502556266263, 405618.6428178129135631, 397723.1262460357393138, 390078.7897790900897235, 382683.7797894388786517, + 375535.8312513187993318, 368631.3741343306028284, 361966.0492284352076240, 355527.4201537367189303, 349310.1699120961129665, + 343335.3632521613617428, 337469.3612740286625922, 332203.5887320268666372, 326274.3431203140062280, 321299.9769301235210150 }, + { 538639.1124794792849571, 535685.2535336655564606, 531212.0744397114031017, 525691.7868880438618362, 519419.2589611170114949, + 512601.2371651504654437, 505387.3102987742749974, 497885.5005569890490733, 490173.6264232874382287, 482309.6845933194854297, + 474340.4721160331391729, 466307.6404101876541972, 458250.1976184030645527, 450204.3528786480310373, 442201.7242364126723260, + 434267.9124985021771863, 426422.1750154682085849, 418678.7875086862477474, 411049.0784849173505791, 403543.4980560424737632, + 396172.5106090561603196, 388946.4541296865209006, 381874.3884061687858775, 374963.0748128913110122, 368216.3954988500918262, + 361635.8563569718971848, 355221.5531875733286142, 348973.4092249054228887, 342891.7340428053867072, 336977.2923721715342253, + 331230.4148368865717202, 325650.4466894090874121, 320236.3098973702872172, 314980.4375278779189102, 309881.1204080792376772, + 304958.1912225998821668, 300102.3280987969483249, 295725.1807871752534993, 290774.5302625334588811, 286604.7513070154236630 }, + { 458941.0640257926424965, 456814.7828629992436618, 453557.9485664381645620, 449507.5824915198609233, 444876.5737411599839106, + 439815.4246314686024562, 434433.6457586947362870, 428810.7368663461529650, 423004.3343230764730833, 417057.6812755765276961, + 411005.8366065473528579, 404880.0405148668214679, 398709.5570210497244261, 392521.6218710187240504, 386340.2243617454078048, + 380185.1253880151198246, 374071.6356798590859398, 368011.5646948994253762, 362014.6380908300634474, 356089.9348666297737509, + 350246.5043701385729946, 344493.2593234149971977, 338838.1663091741502285, 333287.5279850818915293, 327845.5766196652548388, + 322514.8239682404091582, 317296.7380895231035538, 312192.6079047971870750, 307203.9331935809459537, 302332.4796166515443474, + 297579.6277601999463513, 292946.0054620977607556, 288432.0485671815113164, 284032.7833971931831911, 279748.2980812984169461, + 275596.8943265470443293, 271485.7632396308472380, 267770.7873240076005459, 263546.4195425815414637, 259982.2135311538586393 }, + { 401056.7627166260499507, 399446.6361105907708406, 396957.7605177221121266, 393843.2325946405180730, 390264.3117520625819452, + 386335.8090040019014850, 382141.7114864304894581, 377743.2912615399109200, 373185.2079733252176084, 368501.1343178953975439, + 363718.4453175874659792, 358861.5257729516597465, 353953.1938396870973520, 349014.7042691660462879, 344064.8766394541598856, + 339119.3860049109207466, 334190.6094259909586981, 329288.3307266819756478, 324420.7891054728534073, 319595.7379419263452291, + 314820.8972123981220648, 310103.8685161541798152, 305451.5326598414685577, 300869.5145930715953000, 296361.8814528936054558, + 291931.3992833804222755, 287580.0336735621094704, 283309.5885064088506624, 279121.9936542181530967, 275019.3514689336298034, + 271003.4338571597472765, 267075.4230788424611092, 263236.4559625498950481, 259483.0314433953026310, 255816.1423152536735870, + 252252.6005957258457784, 248711.4241413520649076, 245507.2764028499368578, 241842.3633405549335293, 238749.7444899244001135 }, + { 357048.9259263535495847, 355783.4227553479140624, 353812.3358561017666943, 351333.0519474815810099, 348472.1651434499071911, + 345320.3524945033132099, 341944.2734371603582986, 338392.7834451182279736, 334701.6628043621312827, 330898.0004507516277954, + 327003.8613453360740095, 323038.8822872145101428, 319021.4082989550661296, 314968.5244039124227129, 310895.4062398060923442, + 306814.7881726879859343, 302736.8556249144021422, 298669.7933937847847119, 294620.5965739258099347, 290595.8855764818144962, + 286602.2531827615457587, 282646.1956108925514854, 278733.6458459796849638, 274869.5582370286574587, 271057.6745170601643622, + 267300.7198102645343170, 263600.7881687519839033, 259959.8341258718864992, 256379.8933802339597605, 252863.1232124391244724, + 249411.3980602181691211, 246026.1184225998877082, 242708.7326577586354688, 239456.6291264962055720, 236271.2483228175551631, + 233168.0564584895037115, 230074.9489534313615877, 227274.8422782586421818, 224052.2364726566302124, 221335.4908747519948520 }, + { 294466.2683158330619335, 293620.1288956065545790, 292286.2399419259745628, 290594.8124982286244631, 288630.1082912627607584, + 286453.0592029461404309, 284108.8337438660673797, 281630.8034502158407122, 279043.6088007357902825, 276366.0306611560517922, + 273613.4093708107247949, 270799.3682905944297090, 267936.5881609276402742, 265036.8580648809438571, 262110.6802597379428335, + 259166.9443679792457260, 256212.8729079913755413, 253254.3862670346279629, 250296.6350956537644379, 247344.5304975992767140, + 244402.9694874798296951, 241476.7877611977746710, 238570.4552643591887318, 235687.8038005077687558, 232831.8740520038991235, + 230005.0405773377569858, 227209.2610974082490429, 224446.3942335727624595, 221718.3405732981627807, 219027.0749718154256698, + 216374.3612369931943249, 213761.6399916599621065, 211190.4991954941942822, 208659.2697610312898178, 206169.6915838994609658, + 203735.0129363476007711, 201295.6056473286298569, 199088.2841150373569690, 196516.0304336170083843, 194355.2876326991245151 }, + { 252064.5923993051983416, 251455.0591365107102320, 250484.9966418840340339, 249247.1437579509220086, 247801.8529411617200822, + 246193.0860867638548370, 244453.6613466358394362, 242607.9981185751385055, 240674.2594709124241490, 238666.3749235001741908, + 236595.7547323703183793, 234472.5174514031386934, 232306.0510345782677177, 230105.0633818193164188, 227877.3184552549209911, + 225629.4186343405744992, 223366.7768514940980822, 221093.8807475735084154, 218814.6730443846317939, 216532.9273848164302763, + 214252.4087490327947307, 211976.8399675645050593, 209709.6874582346063107, 207453.9685407953802496, 205212.1436766232945956, + 202986.2035839744203258, 200777.8444565763056744, 198588.6911839279346168, 196420.3951310816337354, 194274.6614216252928600, + 192153.0312404991127551, 190056.8123232568032108, 187987.5008818410278764, 185943.8653145934222266, 183927.6256694814655930, + 181950.3503729669027962, 179960.7725534149212763, 178163.8273813525156584, 176043.7919490989297628, 174271.8245654143393040 }, + { 221390.0275387176952790, 220927.8235152882698458, 220186.4802009348932188, 219235.6545073767774738, 218120.8372437440266367, + 216875.3515780413290486, 215524.2177934049104806, 214086.1660156970319804, 212575.2166852889349684, 211002.1819407274597324, + 209375.9440128072455991, 207704.3738885712227784, 205994.7559809022932313, 204253.8327753912890330, 202487.6161190934944898, + 200701.2321292558335699, 198898.9072205264819786, 197084.1698897136957385, 195260.1383048204006627, 193429.8025106036511716, + 191596.1456816581776366, 189762.1196074924082495, 187930.4857075374457054, 186103.6714021166553721, 184283.6902816323854495, + 182472.2067815042100847, 180670.6667618449719157, 178880.4637461041565984, 177103.0106116221868433, 175339.7638659270596690, + 173592.0481635295436718, 171861.0125338688376360, 170148.0126238703669515, 168452.0477698891190812, 166774.7237471500411630, + 165126.3270317543647252, 163461.6027772431261837, 161962.0084779826574959, 160171.6071333273721393, 158683.4585899395460729 }, + { 198127.3731420862895902, 197763.6121384263096843, 197176.2948195008502807, 196419.7275531493069138, 195529.4298538250732236, + 194531.5650327693147119, 193445.9281530874432065, 192287.4675604197836947, 191067.4591831073630601, 189794.6256860253633931, + 188476.1074440399243031, 187118.1853765113046393, 185726.6447057515906636, 184306.8488731987599749, 182863.6186966713867150, + 181401.1124046180630103, 179922.7939904601371381, 178431.5613409953075461, 176929.9515042690327391, 175420.3622167904977687, + 173905.1684184721088968, 172386.7324611803633161, 170867.3017786697018892, 169348.8987831981503405, 167833.2417074271361344, + 166321.7687728618620895, 164815.7201179459225386, 163316.2645378311863169, 161824.5696351784281433, 160341.8481576321646571, + 158869.2300683592620771, 157407.7391538408119231, 155958.6289020745316520, 154521.0646631663548760, 153096.5322560802451335, + 151694.2814177701366134, 150273.5554711881559342, 148997.9152403772168327, 147456.9738676194101572, 146183.7486946486169472 }, + { 179887.3789871530607343, 179592.6101814092253335, 179113.9493074665952008, 178495.1041099711437710, 177764.6960449603211600, + 176943.8819601594295818, 176048.7331681400828529, 175091.4394260952831246, 174081.2400969454611186, 173025.3148019128420856, + 171929.5584409405419137, 170799.1590197461773641, 169638.8895975379855372, 168453.1687983768060803, 167245.9664285917242523, + 166020.7098853277275339, 164780.2617154329200275, 163527.0245694890909363, 162263.1078172655543312, 160990.5063133857038338, + 159711.1948943635215983, 158427.1370538382907398, 157140.2036371423746459, 155852.0849048597738147, 154564.2276908397325315, + 153277.8549624011502601, 151994.0317606238822918, 150713.7670510925527196, 149438.0693530120770447, 148167.9867289031390101, + 146904.4956093977962155, 145648.4885577009117696, 144401.0837126586120576, 143161.5241939666157123, 141931.1699250381498132, + 140718.4562083413475193, 139486.1811061485786922, 138383.8290849628974684, 137036.9269670925277751, 135930.8445681973826140 }, + { 165199.7222371392417699, 164955.3712123496807180, 164556.5648626181937288, 164039.3238535181735642, 163427.2482880098978058, + 162737.8331882611382753, 161984.4133469564549159, 161177.1414993823855184, 160323.7456980756251141, 159430.2557168669300154, + 158501.6366190653061494, 157542.2614992593298666, 156556.1508634572965093, 155547.0226288560370449, 154518.2159116064140107, + 153472.6156730587827042, 152412.6362408538407180, 151340.3090892645996064, 150257.4212368652224541, 149165.6629972907830961, + 148066.7064657525625080, 146962.2130372641258873, 145853.7671832448977511, 144742.8044982452702243, 143630.5606186005170457, + 142518.0875165876350366, 141406.3079669532016851, 140296.0995468947803602, 139188.3399146464944351, 138083.9420599428704008, + 136983.7557879034138750, 135888.5638761014852207, 134799.3679989977390505, 133715.4633433569688350, 132638.0963921623479109, + 131575.0398886493640020, 130491.9570731084095314, 129526.8765071964880917, 128334.4429097360844025, 127361.4747209096676670 }, + { 142931.8310710535151884, 142754.9775594779057428, 142463.8272092654951848, 142084.2074345667497255, 141633.0357539688993711, + 141122.9069707231828943, 140563.4728095737518743, 139962.1277611912228167, 139324.5404105169000104, 138655.1648861986177508, + 137957.6883934139623307, 137235.3652213826135267, 136491.1859812246693764, 135727.9126357622153591, 134948.0249322919407859, + 134153.6678891274495982, 133346.6420754662540276, 132528.4679693666694220, 131700.4865545534994453, 130863.9658431006246246, + 130020.1579389992111828, 129170.3048519799049245, 128315.5919430227222620, 127457.0969370346574578, 126595.7542338505008956, + 125732.3669464999838965, 124867.6462857519218232, 124002.2721927956008585, 123136.9251484740525484, 122272.3149048888153629, + 121409.0993868098303210, 120547.8930772779276595, 119689.5120269675389864, 118833.3217919685703237, 117980.3706688121019397, + 117137.4267675732553471, 116274.4899604612146504, 115511.9784133687790018, 114549.3331798932194943, 113774.0524907793587772 }, + { 126887.6459126008121530, 126752.8698067853692919, 126529.3803130185697228, 126236.7191670004394837, 125887.6700725943082944, + 125491.7783371018304024, 125056.3884635263821110, 124587.1545987367862836, 124088.4357805988402106, 123563.6771857292624190, + 123015.7443915215262678, 122447.1725700797687750, 121860.2924487805139506, 121257.2556016617018031, 120639.9939441456954228, + 120010.1804409673495684, 119369.2227678447088692, 118718.3127706627856242, 118058.5034323791333009, 117390.7898453590896679, + 116716.1528830576571636, 116035.5637819149123970, 115349.9494147883815458, 114660.1540098608093103, 113966.9127535593870562, + 113270.8612091513350606, 112572.5654479886288755, 111872.5684157813666388, 111171.4136264798435150, 110469.6694923341274261, + 109767.8602013284107670, 109066.4808533847390208, 108366.2122958448890131, 107666.4661114074406214, 106968.1299132455023937, + 106277.2646367471024860, 105566.9767958709271625, 104944.8764303329808172, 104143.0263665219099494, 103505.7552529753011186 }, + { 114781.0120478618773632, 114674.3925407768401783, 114496.4859389489865862, 114262.6434684401901904, 113982.8823267286643386, + 113664.7053146648395341, 113313.9184867963194847, 112935.0231621307902969, 112531.5123503935319604, 112106.1563060133485124, + 111661.2568511983699864, 111198.8427260744210798, 110720.7750030658789910, 110228.7755560908262851, 109724.4012741182377795, + 109209.0131269518460613, 108683.7656440692662727, 108149.6377122678968590, 107607.4872952229488874, 107058.1144130825559841, + 106502.3004998719698051, 105940.8196342398296110, 105374.4177204792795237, 104803.7841205480945064, 104229.5276036876020953, + 103652.1772206605528481, 103072.2002346615918214, 102490.0369747331424151, 101906.1220696992531884, 101320.9117545697517926, + 100734.8292415555333719, 100148.2862442229670705, 99561.8724469077715185, 98975.0441212618025020, 98388.5692829572653864, + 97807.9762972682365216, 97208.7138250992575195, 96688.6657870569324587, 96004.5623802877089474, 95468.2901482575398404 }, + { 105289.8186096651770640, 105202.9783492536516860, 105057.2835590146132745, 104865.1821309664228465, 104634.7789052597217960, + 104372.1532808821648359, 104082.0212550730939256, 103768.0502180600888096, 103433.0966956375341397, 103079.4355227880441817, + 102708.9641354413761292, 102323.3591829126526136, 101924.1606939349003369, 101512.7941231777658686, 101090.5489744726946810, + 100658.5535072393249720, 100217.7664370056882035, 99769.0021483562886715, 99312.9754661879269406, 98850.3529011915670708, + 98381.7847699573321734, 97907.9142939078446943, 97429.3608320791681763, 96946.6968940535443835, 96460.4288741424534237, + 95970.9979158600035589, 95478.7946729740360752, 94984.1879988458531443, 94487.5419796428905101, 93989.2397864271188155, + 93489.6343986195861362, 92989.0719102050497895, 92488.0635789087973535, 91986.0916180707281455, 91483.8244829565228429, + 90986.3739100724633317, 90471.0477398206421640, 90028.0316181468078867, 89433.5394682150945300, 88974.1702727048832458 }, + { 97689.9542826770339161, 97617.5961189963854849, 97495.6062430987512926, 97334.3187343403114937, 97140.4462635329691693, 96919.0292298546555685, + 96673.9851610014302423, 96408.3680623368854867, 96124.5640728965518065, 95824.4801435574772768, 95509.7123178856563754, 95181.6744426742516225, + 94841.6670118311594706, 94490.8945668071683031, 94130.4474625062139239, 93761.2805943934363313, 93384.2065988270333037, 92999.9169330504082609, + 92609.0193444884207565, 92212.0805522342561744, 91809.6530591638293117, 91402.2826593354111537, 90990.4945465115451952, 90574.7741803888202412, + 90155.5514372520847246, 89733.2014355943829287, 89308.0569694895530120, 88880.4327152445330285, 88450.6392051948496373, 88019.0040949910180643, + 87585.8270098275097553, 87151.4039711975201499, 86716.1854633095208555, 86279.6754852354788454, 85842.4634423922689166, 85409.3273757951537846, + 84959.0714578231418272, 84575.6636442995513789, 84051.0464088445878588, 83651.4108586209767964 }, + { 83904.3901893158908933, 83855.0669855181185994, 83771.0559446783154272, 83659.3456953463901300, 83524.4451937460107729, 83369.7481673719157698, + 83197.9076710916415323, 83011.0075840255740331, 82810.6886817723861896, 82598.2697698663250776, 82374.8572703991667368, 82141.4311045701469993, + 81898.8930652334820479, 81648.0814128922211239, 81389.7606758778274525, 81124.6070193825289607, 80853.2013026427885052, 80576.0397977060056292, + 80293.5568965458078310, 80006.1533089866570663, 79714.2160491754766554, 79418.1265859346895013, 79118.2543944824428763, 78814.9450636504188878, + 78508.5085918657568982, 78199.2172929794905940, 77887.3115478241816163, 77573.0154077637998853, 77256.5463888715603389, 76938.1348432562517701, + 76617.9886779071966885, 76296.3209695135010406, 75973.4818420199153479, 75649.0236797050747555, 75323.3986941983166616, 75000.7815320970257744, + 74662.7132400454720482, 74381.7584967318689451, 73978.6715479698323179, 73682.3195749478472862 }, + { 74685.6256445614853874, 74649.4031589605001500, 74587.1943092153524049, 74504.1086440326180309, 74403.4235016229213215, 74287.6067086479451973, + 74158.5911958168580895, 74017.8993255138047971, 73866.7342482211679453, 73706.0677280911913840, 73536.7196236845338717, 73359.4198052137944615, + 73174.8426075558527373, 72983.6164629719569348, 72786.3156499085889664, 72583.4489970751019428, 72375.4546622956695501, 72162.7080238152411766, + 71945.5385899444518145, 71724.2508111130882753, 71499.1388481667090673, 71270.4924121536605526, 71038.5919111311086453, 70803.6995042621565517, + 70566.0505159855529200, 70325.8519100005214568, 70083.2866338258754695, 69838.5255837343283929, 69591.7345415553136263, 69343.0902224350138567, + 69092.7489883115486009, 68840.8743057075480465, 68587.7510868375829887, 68332.9633400417806115, 68076.8715192758827470, 67823.2466088808432687, + 67555.5015125425852602, 67338.4627221668051789, 67012.3361423640308203, 66780.9885905953997280 }, + { 68100.9497646277741296, 68073.0054440798849100, 68024.6692498215998057, 67959.8630857181269675, 67881.0872041350521613, 67790.2260461005207617, + 67688.7610010715434328, 67577.8644851734279655, 67458.4674258389131865, 67331.3238355931680417, 67197.0700130180193810, 67056.2717594371206360, + 66909.4519714997732081, 66757.0996795581013430, 66599.6649415386782493, 66437.5501208467903780, 66271.1046216686954722, 66100.6289723857189529, + 65926.3862007338320836, 65748.6172264586202800, 65567.5529858248773962, 65383.4204956907706219, 65196.4407713249820517, 65006.8226966572110541, + 64814.7560531007620739, 64620.4089480469992850, 64423.9295503305911552, 64225.4546025334348087, 64025.1146042498730822, 63823.0486604250254459, + 63619.3777772355388151, 63414.2328972401737701, 63207.8572671800939133, 62999.8622917996399337, 62790.5500164480399690, 62583.3993216282542562, + 62363.1791742270288523, 62189.1147202884458238, 61915.4249807930755196, 61728.1955491224071011 }, + { 63170.0218426182109397, 63147.6218619388600928, 63108.6476617894513765, 63056.2306673408747884, 62992.3558275210525608, 62918.5199482057796558, + 62835.9032382291188696, 62745.4435857039934490, 62647.8885606828989694, 62543.8448790020920569, 62433.8242920474222046, 62318.2810207767906832, + 62197.6346473368903389, 62072.2786493063613307, 61942.5773995985946385, 61808.8593486721001682, 61671.4120009658654453, 61530.4836954274651362, + 61386.2913402017438784, 61239.0320481787930476, 61088.8932137843075907, 60936.0584792897425359, 60780.7074037673592102, 60623.0113439235719852, + 60463.1278288465837250, 60301.1975656960712513, 60137.3445395960297901, 59971.6820972835994326, 59804.3166694020328578, 59635.3614028798983782, + 59464.9126732028307742, 59293.0779905781673733, 59120.0706071272143163, 58945.5227432501415024, 58769.6938566946701030, 58595.8462679024305544, + 58409.7729556351696374, 58266.4608375522220740, 58030.6714302563341334, 57875.2377001618297072 }, + { 56319.7210351173271192, 56304.1571542278907145, 56276.8171724010462640, 56239.8642798679138650, 56194.6571147242357256, 56142.2200124224618776, + 56083.3628611189124058, 56018.7317686630485696, 55948.8437844064246747, 55874.1197753794622258, 55794.9152983629319351, 55711.5462368211883586, + 55624.3050367543473840, 55533.4672284273183323, 55439.2898425692837918, 55342.0066186434414703, 55241.8239267118769931, 55138.9210044122010004, + 55033.4544415392010706, 54925.5657772711638245, 54815.3887036401793011, 54703.0538716256851330, 54588.6895229371148162, 54472.4191478096909123, + 54354.3576198635782930, 54234.6085319204285042, 54113.2633751613757340, 53990.4054072488070233, 53866.1116424319916405, 53740.4641391958866734, + 53613.5298026598175056, 53485.3870852763939183, 53356.2090185597990057, 53225.6570186135068070, 53093.9315133332638652, 52963.9987229194521205, + 52823.0886238319362747, 52720.2186605987517396, 52534.9322657032316783, 52421.5616353047662415 }, + { 51820.9798886570497416, 51809.3658077421132475, 51788.8103172111004824, 51760.9187330269342056, 51726.6916926936319214, 51686.8833866643035435, + 51642.0913788311590906, 51592.7938205266691511, 51539.3744387463812018, 51482.1460852401360171, 51421.3731110990484012, 51357.2902920007181820, + 51290.1152374249213608, 51220.0537579784286208, 51147.2991236096713692, 51072.0285332432322321, 50994.3997006709687412, 50914.5503224408021197, + 50832.6007346746991971, 50748.6591540882727713, 50662.8271157789131394, 50575.2035013179702219, 50485.8856549532720237, 50394.9680981377750868, + 50302.5397804736712715, 50208.6817477290605893, 50113.4658794935749029, 50016.9574601141648600, 49919.2160783902654657, 49820.3053156237147050, + 49720.2745949752570596, 49619.1847452561778482, 49517.1841429809428519, 49413.9527042535410146, 49309.6564564802392852, 49207.0656478341697948, + 49094.3743579034999129, 49016.6176610529146274, 48863.1239925732297706, 48776.0619403672171757 }, + { 48675.6648715584233287, 48666.5679243879276328, 48650.3691314526950009, 48628.3188350360142067, 48601.1915108357061399, 48569.5707231486885576, + 48533.9196872618631460, 48494.6099989290087251, 48451.9405427881574724, 48406.1552176793484250, 48357.4599674431010499, 48306.0374559321207926, + 48252.0570231132151093, 48195.6793087870828458, 48137.0560650333936792, 48076.3274992866718094, 48013.6193743140465813, 47949.0420753774160403, + 47882.6921373590448638, 47814.6559603978457744, 47745.0140393257606775, 47673.8444088243704755, 47601.2240122012299253, 47527.2281097374361707, + 47451.9283192391303601, 47375.3906099210435059, 47297.6738429973338498, 47218.8315150663693203, 47138.9119002874504076, 47057.9665579545981018, + 46976.0335689887215267, 46893.1620220172262634, 46809.4834277054906124, 46724.6910225289102527, 46638.9274498313097865, 46554.8279520495052566, + 46461.2622368185548112, 46400.4435347248072503, 46268.6080328780954005, 46199.4401406820034026 }, + { 46377.8309179612988373, 46370.4526094915781869, 46357.2477242209715769, 46339.2245125084737083, 46317.0041885538958013, 46291.0547352759749629, + 46261.7482469437818509, 46229.3839182677183999, 46194.2028726630960591, 46156.4019768456491875, 46116.1472542089977651, 46073.5856576867372496, + 46028.8533263097779127, 45982.0796864638032275, 45933.3876524259467260, 45882.8916165821719915, 45830.6949717937459354, 45776.8889753933908651, + 45721.5535352164806682, 45664.7598667314887280, 45606.5738334178968216, 45547.0589208629971836, 45486.2777268151403405, 45424.2918494773912244, + 45361.1605240518838400, 45296.9389307103847386, 45231.6766757642617449, 45165.4189888918481302, 45098.2063207680912456, 45030.0819133658078499, + 44961.0760237223294098, 44891.2293737819854869, 44820.6614239457776421, 44749.0748778112465516, 44676.5957629234035267, 44605.7624505080239032, + 44525.9347969346417813, 44477.2395542097801808, 44361.0263145126664313, 44304.7248311051662313 }, + { 44642.4132775113394018, 44636.2699120799807133, 44625.2283233284179005, 44610.1229958150797756, 44591.4657524845169974, 44569.6421159518067725, + 44544.9591109940447495, 44517.6641656074061757, 44487.9570554664169322, 44456.0009484618058195, 44421.9332322284244583, 44385.8751924210373545, + 44347.9390213653532555, 44308.2315248928352958, 44266.8546052792371484, 44223.9037544271777733, 44179.4659363105602097, 44133.6183630169325625, + 44086.4287778993602842, 44037.9573424934787909, 43988.2592882406243007, 43937.3874902441530139, 43885.3939961652649799, 43832.3302538981370162, + 43778.2462153588858200, 43723.1889437877107412, 43667.2011180172121385, 43610.3218700308498228, 43552.5859858349431306, 43494.0306903607197455, + 43434.6806412307196297, 43374.5702917712042108, 43313.8101509907501168, 43252.1100054822745733, 43189.5823117952968460, 43128.6947503559640609, + 43059.1802624258634751, 43019.5542814894433832, 42915.0940480438439408, 42868.4107065803545993 }, + { 43295.7633145005092956, 43290.5429901347961277, 43281.1262153949210187, 43268.2177708869639901, 43252.2482264780119294, 43233.5418800971383462, + 43212.3574083145213081, 43188.9037404288683319, 43163.3498826352733886, 43135.8339206923265010, 43106.4719218269892735, 43075.3660345785174286, + 43042.6105385804767138, 43008.2952368671103613, 42972.5061483617610065, 42935.3244038594202721, 42896.8244435183078167, 42857.0727770809025969, + 42816.1279201046854723, 42774.0417024929920444, 42730.8613683348230552, 42686.6317975643396494, 42641.3970175037975423, 42595.2006702361250063, + 42548.0854900358099258, 42500.0921909314274671, 42451.2580514444416622, 42401.6175179669953650, 42351.2011100193485618, 42300.0415679756406462, + 42248.1594053524895571, 42195.5843094688243582, 42142.4197647574401344, 42088.3811623201909242, 42033.5705200344891637, 41980.3979858684178907, + 41918.8896755234309239, 41886.2937183538597310, 41790.9652270658843918, 41751.7873165982600767 }, + { 41381.9595289127610158, 41378.0136220402055187, 41370.8535932617814979, 41361.0055527008807985, 41348.7888064057260635, 41334.4438491843611700, + 41318.1631167788582388, 41300.1027428419183707, 41280.3895289948122809, 41259.1271848375035916, 41236.4025822472758591, 41212.2916423273127293, + 41186.8639951939912862, 41160.1858805492665851, 41132.3211117801838554, 41103.3305749024730176, 41073.2709570883671404, 41042.1935998254266451, + 41010.1440363508809241, 40977.1625151742919115, 40943.2852703385287896, 40908.5461408108967589, 40872.9779394030774711, 40836.6131905519141583, + 40799.4841480038303416, 40761.6221749974502018, 40723.0565884452371392, 40683.8150544771779096, 40643.9221045042431797, 40603.4043916735463426, + 40562.2768390811397694, 40520.5625948537053773, 40478.3551701609685551, 40435.3766832997498568, 40391.7141022629075451, 40349.6993670504016336, + 40299.7646100302954437, 40277.3803593809134327, 40195.2404249042738229, 40166.9566362050099997 }, + { 40124.3069452885029023, 40121.1870772034599213, 40115.5000759198301239, 40107.6572940967889735, 40097.9074029598268680, 40086.4376794346608222, + 40073.3981353958515683, 40058.9106280769628938, 40043.0741784381898469, 40025.9697144700330682, 40007.6648787094381987, 39988.2186267066645087, + 39967.6849568075558636, 39946.1153169778044685, 39923.5595043650537264, 39900.0653598079443327, 39875.6777699174854206, 39850.4376647695899010, + 39824.3814915872353595, 39797.5414513740979601, 39769.9463814210030250, 39741.6230049579025945, 39712.5970914213539800, 39682.8941767130236258, + 39652.5397448365474702, 39621.5588327266450506, 39589.9750807850796264, 39557.8111367786332266, 39525.0870946037030080, 39491.8253961534501286, + 39458.0373966163751902, 39423.7418167341020308, 39389.0266351980171748, 39353.6175429734576028, 39317.5919048257783288, 39283.2318104569494608, + 39241.2374162882188102, 39225.8948979449924082, 39152.6986890456755646, 39131.9299108226477983 }, + { 39266.5089016337879002, 39263.9634982339266571, 39259.3065126235960633, 39252.8693672129593324, 39244.8514919930821634, 39235.4031069519623998, + 39224.6449281995228375, 39212.6755020769051043, 39199.5752975087671075, 39185.4102283645042917, 39170.2352403822442284, 39154.0978461268095998, + 39137.0411443513148697, 39119.1059457865703735, 39100.3317884403950302, 39080.7569690583914053, 39060.4179023233591579, 39039.3482962438065442, + 39017.5785436953301542, 38995.1356286013906356, 38972.0435656878835289, 38948.3242467274103547, 38923.9983883246750338, 38899.0862772910913918, + 38873.6081892083893763, 38847.5843097428660258, 38821.0340688012365717, 38793.9765971060260199, 38766.4290799183218041, 38738.4113523105334025, + 38709.9325775876204716, 38681.0082419135505916, 38651.7224817501919460, 38621.8028044327656971, 38591.3209062913374510, 38562.5214931533555500, + 38526.2939036833704449, 38516.0913609786293819, 38449.3411058418569155, 38433.9609020875723218 }, + { 38670.3826035046804463, 38668.2543674708867911, 38664.3489235823872150, 38658.9403735116939060, 38652.1932385857362533, 38644.2314626369479811, + 38635.1547706401543110, 38625.0447022240405204, 38613.9679187803994864, 38601.9790195008390583, 38589.1234283378798864, 38575.4402820306568174, + 38560.9649539397214539, 38545.7308909600978950, 38529.7705604983784724, 38513.1155710481252754, 38495.7961923364637187, 38477.8406563699827529, + 38459.2745776666197344, 38440.1207622515648836, 38420.3994631804525852, 38400.1290125290106516, 38379.3266039931913838, 38358.0089656168565853, + 38336.1928173193155089, 38313.8949023890891112, 38291.1314731675593066, 38267.9188057342471438, 38244.2715925452503143, 38220.2074678930803202, + 38195.7338613943720702, 38170.8637861918832641, 38145.6789703278773231, 38119.9083330070425291, 38093.6197279754705960, 38069.0316770914796507, + 38037.1656611885555321, 38030.9081626219194732, 37968.9635948396244203, 37957.6543019689706853 }, + { 38262.7338873296539532, 38260.9218093986564782, 38257.5880251263588434, 38252.9630832791444845, 38247.1848299719131319, 38240.3571158516715514, + 38232.5637589169782586, 38223.8736536267970223, 38214.3434517433779547, 38204.0197370071109617, 38192.9412384518800536, 38181.1410972778394353, + 38168.6489383552252548, 38155.4924895959848072, 38141.6985529613666586, 38127.2933161542459857, 38112.3021230550584733, 38096.7489613843717962, + 38080.6559295889092027, 38064.0429260322416667, 38046.9276657142327167, 38029.3260346887836931, 38011.2526558395038592, 37992.7214708280080231, + 37973.7462573336670175, 37954.3408267394552240, 37934.5187355717280298, 37914.2939305596664781, 37893.6792117620498175, 37872.6907382761855843, + 37851.3348518628044985, 37829.6227681753007346, 37807.6346297957352363, 37785.1001616943540284, 37762.0849435711352271, 37740.7880675107589923, + 37712.3200826130050700, 37709.1901647462218534, 37650.9239039375170250, 37642.7672470705583692 }, + { 37651.7753126881725620, 37650.4877278250787640, 37648.1074027208815096, 37644.7939769232471008, 37640.6423805476151756, 37635.7241401748615317, + 37630.0972177021831158, 37623.8095717963296920, 37616.9009268588270061, 37609.4041114976789686, 37601.3464014408091316, 37592.7509372616768815, + 37583.6380979947134620, 37574.0266715384859708, 37563.9346735447907122, 37553.3797574391646776, 37542.3792368066497147, 37530.9498376297560753, + 37519.1073299977288116, 37506.8662054913438624, 37494.2395107744378038, 37481.2389019730035216, 37467.8748959325748729, 37454.1572189265571069, + 37440.0952414053026587, 37425.6982421785432962, 37410.9753445559181273, 37395.9363160823850194, 37380.5902411464121542, 37364.9502529809687985, + 37349.0203630428004544, 37332.8086604154450470, 37316.3926951113389805, 37299.5032897639903240, 37282.2072504282841692, 37266.6616836484681698, + 37244.1355537207709858, 37246.5312586931104306, 37194.7039622758020414, 37191.8781524030709988 }, + { 37418.9872253161156550, 37418.0159404748410452, 37416.2140327939123381, 37413.6990787812974304, 37410.5406481135141803, 37406.7911386967607541, + 37402.4931671835947782, 37397.6822391977912048, 37392.3880158646061318, 37386.6351942041219445, 37380.4443556934420485, 37373.8328763786048512, + 37366.8158528694184497, 37359.4069519383047009, 37351.6190796921728179, 37343.4648070788389305, 37334.9565315882791765, 37326.1064171425896348, + 37316.9261875756201334, 37307.4268764121006825, 37297.6186198068753583, 37287.5105675177910598, 37277.1109330280887662, 37266.4271456587812281, + 37255.4661489189602435, 37244.2346172519028187, 37232.7389745340769878, 37220.9862670002476079, 37208.9829954314482166, 37196.7401781558874063, + 37184.2602082147641340, 37171.5486904488134314, 37158.6823223591636634, 37145.3921409592658165, 37131.7502387992863078, 37119.8797322443497251, + 37101.1552791012509260, 37107.1522898016264662, 37059.3444080486224266, 37059.8981776990258368 }, + { 37381.3234644635886070, 37380.5596331504493719, 37379.1387897843669634, 37377.1515066923166160, 37374.6512253659820999, 37371.6781932640660671, + 37368.2652175978146261, 37364.4397418798471335, 37360.2248065063395188, 37355.6396819456567755, 37350.7004605395050021, 37345.4206954737601336, + 37339.8120701026055031, 37333.8850388130595093, 37327.6493645000300603, 37321.1144978900265414, 37314.2897700912726577, 37307.1844115563289961, + 37299.8074384189385455, 37292.1674722985335393, 37284.2725570603506640, 37276.1300384782953188, 37267.7465357491237228, 37259.1279928903677501, + 37250.2798793803813169, 37241.2073339134731214, 37231.9151804008433828, 37222.4087845479807584, 37212.6929211980459513, 37202.7771803178766277, + 37192.6626765560504282, 37182.3529473044909537, 37171.9240472818783019, 37161.1075490698131034, 37149.9817686917085666, 37140.6414721607870888, + 37124.5303267470953870, 37133.0727480871137232, 37087.9484560717246495, 37090.8052002237600391 }, + { 37416.3103346836142009, 37415.6914633384149056, 37414.5378051644074731, 37412.9213674050624832, 37410.8845184196252376, 37408.4591528337405180, + 37405.6713205897322041, 37402.5429019362200052, 37399.0923672460630769, 37395.3352506404989981, 37391.2845731843044632, 37386.9512981849984499, + 37382.3448196127719712, 37377.4734482770218165, 37372.3448430395801552, 37366.9663425003382144, 37361.3451671863585943, 37355.4884897172523779, + 37349.4033918035784154, 37343.0967481440748088, 37336.5750804698473075, 37329.8444362230948173, 37322.9103197251388337, 37315.7776777496910654, + 37308.4510236579517368, 37300.9345115383039229, 37293.2319253101013601, 37285.3474992776027648, 37277.2847796314672451, 37269.0523639121165616, + 37260.6503146715404000, 37252.0806747610913590, 37243.4189766894196509, 37234.3962057362368796, 37225.1004534324747510, 37217.6005526335939066, + 37203.3817467988119461, 37213.8205997505501728, 37170.6643942037917441, 37175.1218930686663953 }, + { 37589.8821760086575523, 37589.4490567280154210, 37588.6390254748112056, 37587.5007995341511560, 37586.0628713542828336, 37584.3466455117741134, + 37582.3696536698334967, 37580.1467341837269487, 37577.6905568578004022, 37575.0119182340276893, 37572.1199740517549799, 37569.0224775514652720, + 37565.7260414530101116, 37562.2364158232958289, 37558.5587587538684602, 37554.6978744088264648, 37550.6583952809014590, 37546.4448957714048447, + 37542.0619346591047361, 37537.5140366090636235, 37532.8056269546214025, 37527.9409524620859884, 37522.9240028456260916, 37517.7584431208233582, + 37512.4476464569233940, 37506.9946640737543930, 37501.4021418612974230, 37495.6730593477986986, 37489.8094779349121382, 37483.8187886893138057, + 37477.6996864951943280, 37471.4515803853064426, 37465.1501853443187429, 37458.5231238279520767, 37451.6796029056567932, 37446.6441654009831836, + 37434.9834669083356857, 37448.0546415736607742, 37407.5033209932807949, 37414.0639924406641512 }, + { 37775.0194514504182735, 37774.6972877961525228, 37774.0933093846106203, 37773.2427416207719943, 37772.1661000135209179, 37770.8787671067402698, + 37769.3933591961103957, 37767.7206053698173491, 37765.8697375910414848, 37763.8486983275724924, 37761.6642879588835058, 37759.3223059669398936, + 37756.8277055940125138, 37754.1847636085949489, 37751.3972553047642577, 37748.4686206423066324, 37745.4021062893152703, 37742.2008719814184587, + 37738.8680546118121129, 37735.4067905050469562, 37731.8201974941694061, 37728.1113376136636361, 37724.2831630376676912, 37720.3384546135494020, + 37716.2798316815242288, 37712.1096852614573436, 37707.8300497964519309, 37703.4433006133331219, 37698.9507264457497513, 37694.3592260898440145, + 37689.6666578800213756, 37684.8708745576441288, 37680.0481991153792478, 37674.9222456589268404, 37669.6219264560349984, 37666.1381312176599749, + 37656.0802620027316152, 37670.9025974863980082, 37631.9223927113489481, 37639.7504995087947464 }, + { 37808.3852723765594419, 37808.1354321208491456, 37807.6661565813119523, 37807.0040955485746963, 37806.1646974188188324, 37805.1595111241913401, + 37803.9980105984723195, 37802.6882831941402401, 37801.2373379837008542, 37799.6512645425755181, 37797.9353348964868928, 37796.0940914339735173, + 37794.1314394248620374, 37792.0507499957311666, 37789.8549710035586031, 37787.5467391273268731, 37785.1284842700988520, 37782.6025179426287650, + 37779.9710992146574426, 37777.2364753973815823, 37774.4008929698757129, 37771.4665927690366516, 37768.4357833446410950, 37765.3106002090280526, + 37762.0931153516139602, 37758.7852653902664315, 37755.3886958678485826, 37751.9054469166949275, 37748.3363592442619847, 37744.6881150558911031, + 37740.9580798226234037, 37737.1432748138904572, 37733.3204754908510949, 37729.2098965603508987, 37724.9586590992839774, 37722.5227768653567182, + 37713.5620137190562673, 37729.5846942256248440, 37691.6803409969143104, 37700.3227326708001783 }, + { 37750.6708438673085766, 37750.4707541312382091, 37750.0943475958993076, 37749.5625324611319229, 37748.8874066924981889, 37748.0780038038210478, + 37747.1417363619693788, 37746.0849442324106349, 37744.9131411624184693, 37743.6311401531784213, 37742.2431303049233975, 37740.7527392117917771, + 37739.1630966880038613, 37737.4769059023601585, 37735.6965216411335859, 37733.8240319549513515, 37731.8613373868574854, 37729.8102217187843053, + 37727.6724090759962564, 37725.4496044786210405, 37723.1435117817163700, 37720.7558408764816704, 37718.2882943982840516, 37715.7425414036333677, + 37713.1202319825461018, 37710.4229347950968076, 37707.6519684359591338, 37704.8091041620791657, 37701.8948456541038468, 37698.9157193444916629, + 37695.8688065630922210, 37692.7505304617952788, 37689.6382066547084833, 37686.2501710086871753, 37682.7463051186787197, 37681.0528193745849421, + 37672.8866541277966462, 37689.7506727426225552, 37652.6507928681821795, 37661.8873161428200547 }, + { 37621.8352192307138466, 37621.6711014761967817, 37621.3619643469719449, 37620.9246372047637124, 37620.3688310025754618, 37619.7017806778749218, + 37618.9294200387957972, 37618.0568324715277413, 37617.0884557547396980, 37616.0281857138616033, 37614.8794369793322403, 37613.6451884964335477, + 37612.3280272968695499, 37610.9301966221610201, 37609.4536496704895399, 37607.9001074115440133, 37606.2711171001355979, 37604.5681074301101035, + 37602.7924364826758392, 37600.9454299821954919, 37599.0284031468909234, 37597.0426765415904811, 37594.9895739814237459, 37592.8704091988620348, + 37590.6865071186985006, 37588.4391546553379158, 37586.1294197060487932, 37583.7588805717387004, 37581.3278037272393703, 37578.8426006769441301, + 37576.3001819451601477, 37573.6966256708328729, 37571.1095461753211566, 37568.2555966704530874, 37565.3060225235240068, 37564.1581867640852579, + 37556.5942531259352108, 37574.0625214179890463, 37537.6112703155085910, 37547.4097281796639436 }, + { 37441.1341096450923942, 37440.9968968200118979, 37440.7381510278646601, 37440.3717049276456237, 37439.9055163980738143, 37439.3454981038084952, + 37438.6964940591205959, 37437.9626582275814144, 37437.1476288076228229, 37436.2546167545224307, 37435.2864561319438508, 37434.2456390261213528, + 37433.1343465499085141, 37431.9544816777342930, 37430.7077059736329829, 37429.3954800175124547, 37428.0191058130294550, 37426.5797686589212390, + 37425.0785758220299613, 37423.5165902325898060, 37421.8948525142332073, 37420.2144010063639143, 37418.4762769037261023, 37416.6815205056991545, + 37414.8311986105982214, 37412.9263697766728001, 37410.9678925613843603, 37408.9571838661504444, 37406.8943238623760408, 37404.7856158529612003, + 37402.6278578478159034, 37400.4169735178438714, 37398.2305476004112279, 37395.7840937618530006, 37393.2590156080113957, 37392.5239930244497373, + 37385.4396493829117389, 37403.3425162256899057, 37367.4277872071834281, 37377.7146389851404820 }, + { 37026.0607748097099829, 37025.9604036579257809, 37025.7707827492558863, 37025.5017416395785403, 37025.1589137155096978, 37024.7464673691283679, + 37024.2678106626772205, 37023.7258683194886544, 37023.1232116456521908, 37022.4621253344594152, 37021.7446446595204179, 37020.9725790872253128, + 37020.1475307079381309, 37019.2709120439467370, 37018.3439654564645025, 37017.3677848823572276, 37016.3433396143227583, 37015.2714991845641634, + 37014.1530580634498619, 37012.9887595626860275, 37011.7793129129931913, 37010.5254127463704208, 37009.2277483123179991, 37007.8870073090001824, + 37006.5039089808415156, 37005.0791912565473467, 37003.6133969636721304, 37002.1076854845741764, 37000.5618618743028492, 36998.9819682566230767, + 36997.3646585182068520, 36995.7058162391331280, 36994.0826940565821133, 36992.2093046162772225, 36990.2838658291293541, 36990.1221891691093333, + 36983.7433753506920766, 37002.1969500449122279, 36967.1032658148760675, 36978.0909363322280115 }, + { 36595.4196337978646625, 36595.3428174441796727, 36595.1974811359832529, 36594.9909668504260480, 36594.7274701678252313, 36594.4100837390360539, + 36594.0413301577209495, 36593.6233736465146649, 36593.1581209338182816, 36592.6472739405580796, 36592.0923591169848805, 36591.4947452732885722, + 36590.8556561894220067, 36590.1761815496065537, 36589.4572881507992861, 36588.6998323083244031, 36587.9045736871630652, 36587.0721903400408337, + 36586.2032943455487839, 36585.2984481699677417, 36584.3581763785259682, 36583.3829817263831501, 36582.3733539342647418, 36581.3297749947450939, + 36580.2527535198969417, 36579.1428270202959538, 36578.0003268687141826, 36576.8262258965405636, 36575.6201599724445259, 36574.3878811195754679, + 36573.1260007255477831, 36571.8304827764441143, 36570.5781394443474710, 36569.0822726420301478, 36567.5535283573844936, 36567.7616820181719959, + 36561.8632636070251465, 36580.6402498501556693, 36546.1465558312775102, 36557.6608435148664284 }, + { 36192.5852032356124255, 36192.5243958993232809, 36192.4092057726229541, 36192.2453249769023387, 36192.0360003893511021, 36191.7836177770805079, + 36191.4901189364900347, 36191.1571686332172249, 36190.7862350977811730, 36190.3786326420959085, 36189.9355455663244356, 36189.4580424525629496, + 36188.9470856923726387, 36188.4035390257704421, 36187.8281747091896250, 36187.2216811851176317, 36186.5846716263040435, 36185.9176934407441877, + 36185.2212384392623790, 36184.4957541797339218, 36183.7416515890727169, 36182.9593176869675517, 36182.1491227062797407, 36181.3114243678937783, + 36180.4466023595450679, 36179.5550690439195023, 36178.6370164561885758, 36177.6932853870821418, 36176.7234110371791758, 36175.7328721946687438, + 36174.7182834567065584, 36173.6757905921695055, 36172.6816334316390567, 36171.4491272799350554, 36170.1978605117183179, 36170.6578497160007828, + 36165.1089563662681030, 36184.0581200799351791, 36150.0332362346598529, 36161.8915346622234210 }, + { 35827.0225366047670832, 35826.9731501221758663, 35826.8794955491757719, 35826.7461116723861778, 35826.5755825329688378, 35826.3697999122014153, + 35826.1302992202108726, 35825.8583948881569086, 35825.5552464398861048, 35825.2218940171878785, 35824.8592785866349004, 35824.4682540093926946, + 35824.0495947979579796, 35823.6040017673949478, 35823.1321069146288210, 35822.6344783019303577, 35822.1116253482468892, 35821.5640047724809847, + 35820.9920270476941369, 35820.3960641315497924, 35819.7764539147028700, 35819.1335100308788242, 35818.4675271850865101, 35817.7787835640046978, + 35817.0675756671989802, 35816.3342331003368599, 35815.5788517719774973, 35814.8021751672567916, 35814.0036768094360013, 35813.1886025239800802, + 35812.3535649681434734, 35811.4949961986349081, 35810.6883239088056143, 35809.6472463139507454, 35808.5979703449120279, 35809.2391412335346104, + 35803.9535808173095575, 35822.9877000847700401, 35789.3317760575737339, 35801.3804977462787065 }, + { 35499.0817749727866612, 35499.0408115806203568, 35498.9630571958186920, 35498.8522160697320942, 35498.7103956668142928, 35498.5391347757686162, + 35498.3396797027016873, 35498.1130960854716250, 35497.8603238760842942, 35497.5822072119699442, 35497.2795115892440663, 35496.9529341644883971, + 35496.6031102818087675, 35496.2306180145460530, 35495.8359818216194981, 35495.4196759795304388, 35494.9821281579279457, 35494.5237234346568584, + 35494.0448086498290650, 35493.5456979829687043, 35493.0266754325639340, 35492.4880025755628594, 35491.9299225111753913, 35491.3526603817444993, + 35490.7564586767257424, 35490.1415942759340396, 35489.5080971875431715, 35488.8566480011941167, 35488.1866735349904047, 35487.5032413594453828, + 35486.8029601347516291, 35486.0825917092224699, 35485.4166762259555981, 35484.5197744037723169, 35483.6224838335328968, 35484.3976177775475662, + 35479.3226598833425669, 35498.3876315604356932, 35465.0009629948908696, 35477.2022365319280652 }, + { 34841.0622808304906357, 34841.0348047145162127, 34840.9825481302686967, 34840.9079124256968498, 34840.8122640679794131, 34840.6965951882666559, + 34840.5617056054907152, 34840.4082770395325497, 34840.2369100861105835, 34840.0481446954072453, 34839.8424722156778444, 34839.6203427513828501, + 34839.3821698142783134, 34839.1283334038162138, 34838.8591822279631742, 34838.5750355087948265, 34838.2761846221765154, 34837.9628948840108933, + 34837.6354073669208447, 34837.2939417418238008, 34836.9386961191194132, 34836.5698519340585335, 34836.1875755612854846, 34835.7920149437850341, + 34835.3833389890351100, 34834.9617516171856550, 34834.5271854641323444, 34834.0802327808487462, 34833.6202516812918475, 34833.1519805700081633, + 34832.6719458734223736, 34832.1781923110247590, 34831.7426944873877801, 34831.0821957031002967, 34830.4324011627613800, 34831.4267127265047748, + 34826.7325912612286629, 34845.7433570375069394, 34812.9613753510493552, 34825.3363877301017055 }, + { 34347.6148973132949322, 34347.5951395021183998, 34347.5575014847709099, 34347.5036626446380978, 34347.4345803473406704, 34347.3509460540808504, + 34347.2533146373607451, 34347.1421573506813729, 34347.0178884596753051, 34346.8808802069834201, 34346.7314717837653006, 34346.5699749260093085, + 34346.3966775084554683, 34346.2118459160046768, 34346.0157266813621391, 34345.8085477019121754, 34345.5905191892306902, 34345.3618346565417596, + 34345.1226717607787577, 34344.8731940408470109, 34344.6135496620845515, 34344.3438748752960237, 34344.0642946038642549, 34343.7749161015890422, + 34343.4758746446896112, 34343.1673366399190854, 34342.8491880048168241, 34342.5219754873833153, 34342.1850233610020950, 34341.8428820050758077, + 34341.4919111473864177, 34341.1314906789775705, 34340.8316664297235548, 34340.3107659619272454, 34339.8027804821031168, 34340.9292741865792777, + 34336.4811631349075469, 34355.3745735605843947, 34323.0480832865941920, 34335.5686610819248017 }, + { 34002.9796048135613091, 34002.9646845854440471, 34002.9362219289905624, 34002.8954552680297638, 34002.8430931017646799, 34002.7796448566878098, + 34002.7055176909489091, 34002.6210562595224474, 34002.5265628147171810, 34002.4223086104757385, 34002.3085408332408406, 34002.1854869972012239, + 34002.0533578156901058, 34001.9123491161299171, 34001.7626431547105312, 34001.6044095621764427, 34001.4378060082526645, 34001.2629788799822563, + 34001.0800637309148442, 34000.8891865837722435, 34000.6904621930298163, 34000.4839969196327729, 34000.2698886593425414, 34000.0482188474416034, + 33999.8191040226083715, 33999.5826844977564178, 33999.3388252259464934, 33999.0880428914751974, 33998.8296651233322336, 33998.5680657259799773, + 33998.2994233096542303, 33998.0244441415270558, 33997.8116036618448561, 33997.3819854894754826, 33996.9614449027722003, 33998.1760742976766778, + 33993.8938508833234664, 34012.6652382176180254, 33980.7056578226620331, 33993.3209905143012293 }, + { 33762.1758922285880544, 33762.1642069816007279, 33762.1418868835608009, 33762.1098816388475825, 33762.0687374478729907, 33762.0188456495525315, + 33761.9605180361686507, 33761.8940178443008335, 33761.8195754593180027, 33761.7373973750145524, 33761.6476716851248057, 33761.5505716040352127, + 33761.4462577955200686, 33761.3348799435552792, 33761.2165778345515719, 33761.0914821338665206, 33760.9597148972097784, 33760.8213901034905575, + 33760.6766139386600116, 33760.5254858922708081, 33760.3680968256667256, 33760.2045315795985516, 33760.0348685991630191, 33759.8591707834857516, + 33759.6775424138468225, 33759.4901028025051346, 33759.2967059038055595, 33759.0978583062242251, 33758.8928729306790046, 33758.6859755089899409, + 33758.4732969359465642, 33758.2565646980510792, 33758.1030575175536796, 33757.7359909608348971, 33757.3716028303751955, 33758.6460846295231022, + 33754.4902490134627442, 33773.1743348653253634, 33741.4895974574319553, 33754.0400283087510616 }, + { 33564.1607200343860313, 33564.1529762400532491, 33564.1381503697557491, 33564.1168491253192769, 33564.0894262253714260, 33564.0561334731901297, + 33564.0171702962688869, 33563.9727042139857076, 33563.9228812299261335, 33563.8678318012098316, 33563.8076745407015551, 33563.7425186294276500, + 33563.6724654451681999, 33563.5976096857484663, 33563.5180401548277587, 33563.4338403383808327, 33563.3450887574290391, 33563.2518593619606690, + 33563.1542216984671541, 33563.0522418203036068, 33562.9459801801567664, 33562.8354940841381904, 33562.7208370862063020, 33562.6020482430903940, + 33562.4792183534009382, 33562.3524332316301297, 33562.2215389374032384, 33562.0870642736408627, 33561.9482351228361949, 33561.8091790427570231, + 33561.6659424209065037, 33561.5215271369452239, 33561.4414156809070846, 33561.1529151131253457, 33560.8512062906302162, 33562.2043853710492840, + 33558.2208410870152875, 33576.8168272923940094, 33545.4150551113998517, 33558.0700004109239671 }, + { 33620.1143402683810564, 33620.1088175182376290, 33620.0982210663569276, 33620.0829697131921421, 33620.0633120799757307, 33620.0394243961636676, + 33620.0114456549490569, 33619.9794922293076525, 33619.9436652790463995, 33619.9040550089994213, 33619.8607433205179404, 33619.8138055497474852, + 33619.7633116525976220, 33619.7093270306504564, 33619.6519131125678541, 33619.5911277930863434, 33619.5270256827207049, 33619.4596584135215380, + 33619.3890747760233353, 33619.3153215453494340, 33619.2384412461251486, 33619.1584746957814787, 33619.0754602652959875, 33618.9894228883640608, + 33618.9004430775967194, 33618.8085831405260251, 33618.7136959648560151, 33618.6163153089291882, 33618.5156067280258867, 33618.4156764264334925, + 33618.3126875645393739, 33618.2099066453083651, 33618.1722492411063286, 33617.9288259462409769, 33617.6614105939079309, 33619.0662501345723285, + 33615.2241260023729410, 33633.7942836740839994, 33602.4452174974067020, 33614.9877474475870258 }, + { 33940.6617842958949041, 33940.6576446767721791, 33940.6496857807142078, 33940.6382121808128431, 33940.6234083742310759, 33940.6054045619530370, + 33940.5843029035022482, 33940.5601885611104080, 33940.5331352872744901, 33940.5032086391220219, 33940.4704679878996103, 33940.4349678457147093, + 33940.3967587795268628, 33940.3558880565033178, 33940.3124001030810177, 33940.2663368637295207, 33940.2177379942004336, 33940.1666411155893002, + 33940.1130819515528856, 33940.0570951048430288, 33939.9987117278506048, 33939.9379622138148989, 33939.8748752889005118, 33939.8094672850929783, + 33939.7418120715519763, 33939.6719535951269791, 33939.5997564799181418, 33939.5257616326052812, 33939.4490794108132832, 33939.3738527207315201, + 33939.2964174984517740, 33939.2199709066917421, 33939.2092960468289675, 33938.9926707205595449, 33938.7430213774205185, 33940.1905952010638430, + 33936.4452006848296151, 33955.1264856388588669, 33923.4934877856139792, 33936.0871937183837872 }, + { 34426.4366059396052151, 34426.4333848139431211, 34426.4271794947708258, 34426.4182201613584766, 34426.4066494859289378, 34426.3925678762243479, + 34426.3760537696143729, 34426.3571723211425706, 34426.3359797897428507, 34426.3125260573433479, 34426.2868562053190544, 34426.2590115581479040, + 34426.2290304068155820, 34426.1969485233421437, 34426.1627995281523908, 34426.1266151863965206, 34426.0884255562268663, 34426.0482592002954334, + 34426.0061433247246896, 34425.9621045237581711, 34425.9161663505219622, 34425.8683521888087853, 34425.8186841772840125, 34425.7671730348083656, + 34425.7138874729716917, 34425.6588562544129672, 34425.6019576189210056, 34425.5437357999398955, 34425.4832567950943485, 34425.4247162867031875, + 34425.3646771200292278, 34425.3061012435573502, 34425.3138098273848300, 34425.1133303143724333, 34424.8724454155744752, 34426.3608043322019512, + 34422.6871574059478007, 34441.5719621654279763, 34409.4067196338874055, 34422.1479967993072933 }, + { 35117.3267841932465672, 35117.3242050717890379, 35117.3192268505808897, 35117.3120285671029706, 35117.3027239997391007, 35117.2913931114380830, + 35117.2780981108589913, 35117.2628904995508492, 35117.2458146251738071, 35117.2269097172102192, 35117.2062111599589116, 35117.1837513367063366, + 35117.1595602170709753, 35117.1336657764477422, 35117.1060942964104470, 35117.0768706141534494, 35117.0460182368769892, 35117.0135595189203741, + 35116.9795158057313529, 35116.9439081576856552, 35116.9067548117163824, 35116.8680742544092936, 35116.8278840100829257, 35116.7861909129060223, + 35116.7430597130660317, 35116.6985070801601978, 35116.6524242201921879, 35116.6053612035902916, 35116.5563371872267453, 35116.5096325188715127, + 35116.4620201088400790, 35116.4162440621876158, 35116.4372126146699884, 35116.2465582235090551, 35116.0082170858804602, 35117.5419464582228102, + 35113.9154726924462011, 35133.1250595303572481, 35100.1858642891602358, 35113.1699746569502167 }, + { 35977.2480838109331671, 35977.2459714003343834, 35977.2418862364356755, 35977.2359707286013872, 35977.2283178170182509, 35977.2189928336811136, + 35977.2080464153914363, 35977.1955203542238451, 35977.1814505488946452, 35977.1658686903610942, 35977.1488033142377390, 35977.1302804984661634, + 35977.1103243499528617, 35977.0889573529711924, 35977.0662006184575148, 35977.0420740973058855, 35977.0165966679851408, 35976.9897862855432322, + 35976.9616601311863633, 35976.9322353199459030, 35976.9015262547545717, 35976.8695479157468071, 35976.8363144699833356, 35976.8018301091506146, + 35976.7661562025532476, 35976.7292996849864721, 35976.6911647065935540, 35976.6523065742512699, 35976.6116951991862152, 35976.5737333251163363, + 35976.5353804333062726, 35976.4991699384481763, 35976.5301323359744856, 35976.3450727091767476, 35976.1049007672554580, 35977.6885671825584723, + 35974.0896075288401335, 35993.7241678922291612, 35959.7961320673639420, 35973.1079161336965626 }, + { 38198.2253719561413163, 38198.2238799108017702, 38198.2209838600538205, 38198.2167784899284015, 38198.2113291695059161, 38198.2046820833784295, + 38198.1968727893035975, 38198.1879304516551201, 38198.1778799980456824, 38198.1667433438487933, 38198.1545401534531265, 38198.1412883435914409, + 38198.1270044357152074, 38198.1117038082957151, 38198.0954008774278918, 38198.0781092599354452, 38198.0598418241352192, 38198.0406107984454138, + 38198.0204279324825620, 38197.9993051822893904, 38197.9772518727913848, 38197.9542783774450072, 38197.9303944068815326, 38197.9056009650521446, + 38197.8799544073990546, 38197.8534466060300474, 38197.8260067056326079, 38197.7981934851777623, 38197.7688862826034892, 38197.7427953383448767, + 38197.7171665365749504, 38197.6944556293019559, 38197.7396503199706785, 38197.5572832695543184, 38197.3018133020523237, 38199.0084815971567878, + 38195.3958756119027385, 38216.1900289034892921, 38179.6456065890743048, 38193.7849211546854349 }, + { 41051.2295979911359609, 41051.2284879779836047, 41051.2263260260224342, 41051.2231781702939770, 41051.2190927467454458, 41051.2141043158917455, + 41051.2082393685413990, 41051.2015195102867438, 41051.1939631251443643, 41051.1855863179225707, 41051.1764034965308383, 41051.1664277553281863, + 41051.1556711435478064, 41051.1441448568875785, 41051.1318593742907979, 41051.1188245882513002, 41051.1050498306576628, 41051.0905439541675150, + 41051.0753155021957355, 41051.0593733775021974, 41051.0427238523625419, 41051.0253745653171791, 41051.0073325174962520, 41050.9885971753028571, + 41050.9692206092731794, 41050.9491850343329133, 41050.9284423591016093, 41050.9075452438555658, 41050.8853024035997805, 41050.8667843283401453, + 41050.8494694536057068, 41050.8359593967907131, 41050.8910079018605757, 41050.7038658931924147, 41050.4215759250801057, 41052.2850102726733894, + 41048.5800984274246730, 41070.9009107920282986, 41030.9172189693272230, 41046.1737574376747943 }, + { 44595.0871789997909218, 44595.0863211393880192, 44595.0846450230237679, 44595.0821982690322329, 44595.0790178380120778, 44595.0751306441670749, + 44595.0705572843580740, 44595.0653144716779934, 44595.0594163649657276, 44595.0528753247490386, 44595.0457023781928001, 44595.0379075231976458, + 44595.0294999416946666, 44595.0204881505342200, 44595.0108801089809276, 44595.0006833269726485, 44594.9899048734005191, 44594.9785514389950549, + 44594.9666295138013083, 44594.9541460479667876, 44594.9411053243966307, 44594.9275132125549135, 44594.9133749938700930, 44594.8986895634880057, + 44594.8835048922774149, 44594.8677969545387896, 44594.8515377266885480, 44594.8352718453534180, 44594.8177324981661513, 44594.8045011364447419, + 44594.7930231518403161, 44594.7866414269083180, 44594.8496494963255827, 44594.6519949196663219, 44594.3319119434163440, 44596.3877092946713674, + 44592.5166661117400508, 44616.7635170380381169, 44572.4839467948040692, 44589.1323347240104340 }, + { 48662.6018787505599903, 48662.6011963508790359, 48662.5998592803807696, 48662.5979027288485668, 48662.5953556163731264, 48662.5922395031666383, + 48662.5885709154899814, 48662.5843632033211179, 48662.5796276244000182, 48662.5743739693862153, 48662.5686109454763937, 48662.5623464258096647, + 48662.5555876244907267, 48662.5483412194807897, 48662.5406134394215769, 48662.5324101570004132, 48662.5237368848538608, 48662.5145988238073187, + 48662.5050010525883408, 48662.4949491702718660, 48662.4844460816384526, 48662.4734964055605815, 48662.4621042838407448, 48662.4502684204780962, + 48662.4380330265848897, 48662.4253701858397108, 48662.4122687900962774, 48662.3992608615226345, 48662.3850233301636763, 48662.3756836116881459, + 48662.3686277213346330, 48662.3680556789258844, 48662.4377397514326731, 48662.2264489676308585, 48661.8598382567215594, 48664.1312378416623687, + 48660.0446234667324461, 48686.5309444847443956, 48637.3671572027815273, 48655.6593325918220216 }, + { 52752.6439310660862247, 52752.6433753096498549, 52752.6422836499259574, 52752.6406825949234189, 52752.6385951550619211, 52752.6360389701512759, + 52752.6330276377702830, 52752.6295721106580459, 52752.6256815874876338, 52752.6213640403511818, 52752.6166265389474574, 52752.6114754607842769, + 52752.6059166379563976, 52752.5999554598383838, 52752.5935969447164098, 52752.5868458218465094, 52752.5797065182196093, 52752.5721831956689130, + 52752.5642799514971557, 52752.5560014408692950, 52752.5473496042395709, 52752.5383281817412353, 52752.5289405008588801, 52752.5191854458680609, + 52752.5091034446886624, 52752.4986653533196659, 52752.4878725113376277, 52752.4772455604834249, 52752.4654158840494347, 52752.4590425680653425, + 52752.4554074084880995, 52752.4597575527441222, 52752.5349629303673282, 52752.3096328230676590, 52751.8941312954848399, 52754.3812031647685217, + 52750.0559234406173346, 52778.8316240248823306, 52724.6888348269276321, 52744.7146600888227113 } }; + +#endif // CSDPN_STARMAP_CONSTANTS_H diff --git a/code/include/solvers/csdpnsolver.h b/code/include/solvers/csdpnsolver.h new file mode 100644 index 0000000000000000000000000000000000000000..e0d6e52df0f9d3ca354e85e412bb7f16b0fff768 --- /dev/null +++ b/code/include/solvers/csdpnsolver.h @@ -0,0 +1,42 @@ +#ifndef CSDPNSOLVER_H +#define CSDPNSOLVER_H + +#include "solvers/pnsolver.h" + +class CSDPNSolver : public PNSolver +{ + private: + std::vector _dose; /*!< @brief TODO */ + + // Physics acess + Vector _energies; /*!< @brief energy levels for CSD, lenght = _nEnergies */ + Vector _angle; /*!< @brief angles */ + + std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ + Vector _sigmaTE; /*!< @brief total cross section for all energies*/ + + public: + /** + * @brief CSDPNSolver constructor + * @param settings stores all needed information + */ + CSDPNSolver( Config* settings ); + + virtual ~CSDPNSolver() {} + + // virtual Solve() override; + + private: + void SolverPreprocessing() override; + + void IterPreprocessing( unsigned /*idx_iter*/ ) override; + void IterPostprocessing( unsigned /*idx_iter*/ ) override; + + // void FluxUpdate() override; + void FVMUpdate( unsigned idx_energy ) override; + + void PrepareVolumeOutput() override; + void WriteVolumeOutput( unsigned idx_pseudoTime ) override; +}; + +#endif // CSDPNSOLVER_H diff --git a/code/include/solvers/csdsnsolver.h b/code/include/solvers/csdsnsolver.h index a939e7cafe68ba34b4b4d86d721d949c18c67b16..043642ba192a27275066ac3f33158e10c168b4df 100644 --- a/code/include/solvers/csdsnsolver.h +++ b/code/include/solvers/csdsnsolver.h @@ -9,8 +9,7 @@ class CSDSNSolver : public SNSolver std::vector _dose; /*!< @brief TODO */ // Physics acess - Vector _energies; /*!< @brief energy levels for CSD, lenght = _nEnergies */ - Vector _angle; /*!< @brief angles for SN */ + Vector _angle; /*!< @brief angles for SN */ std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ Vector _sigmaTE; /*!< @brief total cross section for all energies*/ diff --git a/code/include/solvers/csdsnsolverfp.h b/code/include/solvers/csdsnsolverfp.h index a6aaa99201f378687f815e7ab116d58f540b3661..ce48bd5750814f5598328704d9262616a4330a13 100644 --- a/code/include/solvers/csdsnsolverfp.h +++ b/code/include/solvers/csdsnsolverfp.h @@ -11,11 +11,7 @@ class CSDSNSolverFP : public SNSolver std::vector _dose; /*!< @brief TODO */ // Physics acess - Vector _energies; /*!< @brief energy levels for CSD, length = _nEnergies */ - Vector _angle; /*!< @brief angles for SN */ - - std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ - Vector _sigmaTE; /*!< @brief total cross section for all energies*/ + Vector _angle; /*!< @brief angles for SN */ Matrix _L; /*!< @brief Laplace Beltrami Matrix */ Matrix _IL; /*!< @brief Laplace Beltrami Matrix */ diff --git a/code/include/solvers/csdsnsolvernotrafo.h b/code/include/solvers/csdsnsolvernotrafo.h index 4de19f093a9744fc3b45fe11aa73b668d264dfcd..d7667aef40411217f0d063d0a88ca775634e1b0f 100644 --- a/code/include/solvers/csdsnsolvernotrafo.h +++ b/code/include/solvers/csdsnsolvernotrafo.h @@ -11,8 +11,7 @@ class CSDSNSolverNoTrafo : public SNSolver std::vector _dose; /*!< @brief TODO */ // Physics acess - Vector _energies; /*!< @brief energy levels for CSD, lenght = _nEnergies */ - Vector _angle; /*!< @brief angles for SN */ + Vector _angle; /*!< @brief angles for SN */ std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ Vector _sigmaTE; /*!< @brief total cross section for all energies*/ diff --git a/code/include/solvers/csdsolvertrafofp.h b/code/include/solvers/csdsolvertrafofp.h index 1cda2f759de4c2be67f23adfccd1ff95ee7e2a22..abd3ad66280044e2b264d7ddb05c8a4aaa2ed217 100644 --- a/code/include/solvers/csdsolvertrafofp.h +++ b/code/include/solvers/csdsolvertrafofp.h @@ -10,12 +10,7 @@ class CSDSolverTrafoFP : public SNSolver private: std::vector _dose; /*!< @brief TODO */ - // Physics acess - Vector _energies; /*!< @brief energy levels for CSD, lenght = _nEnergies */ - Vector _angle; /*!< @brief angles for SN */ - - std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ - Vector _sigmaTE; /*!< @brief total cross section for all energies*/ + // Helper Variables Matrix _L; /*!< @brief Laplace Beltrami Matrix */ Matrix _IL; /*!< @brief Laplace Beltrami Matrix */ diff --git a/code/include/solvers/csdsolvertrafofp2d.h b/code/include/solvers/csdsolvertrafofp2d.h index fe01331002297ce68441a3d4dc6d79af55c262c6..cf580e4b5fa1fdcdd8fe4f2b9e0eba30274c662d 100644 --- a/code/include/solvers/csdsolvertrafofp2d.h +++ b/code/include/solvers/csdsolvertrafofp2d.h @@ -10,19 +10,12 @@ class CSDSolverTrafoFP2D : public SNSolver private: std::vector _dose; /*!< @brief TODO */ - // Physics acess - Vector _energies; /*!< @brief energy levels for CSD, lenght = _nEnergies */ - Vector _angle; /*!< @brief angles for SN */ - - std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ - Vector _sigmaTE; /*!< @brief total cross section for all energies*/ + // Helper Variables Matrix _L; /*!< @brief Laplace Beltrami Matrix */ Matrix _IL; /*!< @brief Laplace Beltrami Matrix */ - VectorVector _quadPoints; VectorVector _quadPointsSphere; - Vector _weights; Vector _mu; Vector _phi; Vector _wp; diff --git a/code/include/solvers/csdsolvertrafofpsh2d.h b/code/include/solvers/csdsolvertrafofpsh2d.h index c10910a41826a8d9726735b5f80d4d555e481cdd..1c6b24baff45baa65e8e13f1553bd17ec2546cd4 100644 --- a/code/include/solvers/csdsolvertrafofpsh2d.h +++ b/code/include/solvers/csdsolvertrafofpsh2d.h @@ -21,13 +21,7 @@ class CSDSolverTrafoFPSH2D : public SNSolver private: std::vector _dose; /*!< @brief TODO */ - // Physics acess - Vector _energies; /*!< @brief energy levels for CSD, lenght = _nEnergies */ - Vector _angle; /*!< @brief angles for SN */ - - std::vector _sigmaSE; /*!< @brief scattering cross section for all energies*/ - Vector _sigmaTE; /*!< @brief total cross section for all energies*/ - + // Helper Variables Matrix _L; /*!< @brief Laplace Beltrami Matrix */ Matrix _IL; /*!< @brief Laplace Beltrami Matrix */ @@ -35,9 +29,7 @@ class CSDSolverTrafoFPSH2D : public SNSolver Matrix _S; Matrix _M; - VectorVector _quadPoints; VectorVector _quadPointsSphere; - Vector _weights; Vector _mu; Vector _phi; Vector _wp; diff --git a/code/include/solvers/pnsolver.h b/code/include/solvers/pnsolver.h index f9bd715f21084b498e6a75d84275bc5ba6a3be0b..c275a5daa61f54831f46c6a4b0d6a3ec242e4973 100644 --- a/code/include/solvers/pnsolver.h +++ b/code/include/solvers/pnsolver.h @@ -14,7 +14,7 @@ class PNSolver : public SolverBase /*! @brief PNSolver destructor */ virtual ~PNSolver() {} - private: + protected: unsigned _nSystem; /*!< @brief total number of equations in the system */ unsigned _polyDegreeBasis; /*!< @brief maximal degree of the spherical harmonics basis*/ diff --git a/code/include/toolboxes/textprocessingtoolbox.h b/code/include/toolboxes/textprocessingtoolbox.h index ef170797abaf0d84a122e1dab24fbf76058f5fee..ddac8726d123dd62aa10e7ceb9d546e876ec9eab 100644 --- a/code/include/toolboxes/textprocessingtoolbox.h +++ b/code/include/toolboxes/textprocessingtoolbox.h @@ -53,6 +53,8 @@ inline void PrintVectorVector( const VectorVector vectorIn ) { } } +inline void PrintMatrix( const Matrix mat ) { std::cout << mat << std::endl; } + /*! * @brief utility function for returning the last number in a string * @param str string to be checked diff --git a/code/input/DataGenerator1D.cfg b/code/input/DataGenerator1D.cfg index 75a567314aaaa931f3d3edcfd1448882984dfcde..7389bfb585fc0c0bd713003d626e4e84c0dee324 100644 --- a/code/input/DataGenerator1D.cfg +++ b/code/input/DataGenerator1D.cfg @@ -7,12 +7,12 @@ % % ---- Datagenerator settings ---- DATA_GENERATOR_MODE = YES -TRAINING_SET_SIZE = 100000 +TRAINING_SET_SIZE = 20 MAX_VALUE_FIRST_MOMENT = 1 SPATIAL_DIM = 1 REALIZABLE_SET_EPSILON_U1 = 0.003 REALIZABLE_SET_EPSILON_U0 = 0.003 -NORMALIZED_SAMPLING = YES +NORMALIZED_SAMPLING = NO MAX_MOMENT_SOLVER = 1 % % ---- File specifications ---- diff --git a/code/input/linesource_PN.cfg b/code/input/linesource_PN.cfg index 37795bd43a180e2498efdf60b2d80a36b65ce977..8cb0b76ff277fa1e68445db3be9e5738f5894659 100644 --- a/code/input/linesource_PN.cfg +++ b/code/input/linesource_PN.cfg @@ -31,16 +31,21 @@ CFL_NUMBER = 0.7 % Final time for simulation TIME_FINAL = 0.3 % Maximal Moment degree -MAX_MOMENT_SOLVER = 2 +MAX_MOMENT_SOLVER = 13 % Reconstruction order -RECONS_ORDER = 2 +RECONS_ORDER = 1 % ---- Boundary Conditions ---- % Example: BC_DIRICLET = (dummyMarker1, dummyMarker2) % Dirichlet Boundary BC_DIRICHLET = ( void ) % +% % ----- Output ---- % -VOLUME_OUTPUT = (MINIMAL) - +VOLUME_OUTPUT = (MINIMAL, MOMENTS) +VOLUME_OUTPUT_FREQUENCY = 1 +SCREEN_OUTPUT = (ITER, MASS, RMS_FLUX, VTK_OUTPUT, CSV_OUTPUT) +SCREEN_OUTPUT_FREQUENCY = 1 +HISTORY_OUTPUT = (ITER, MASS, RMS_FLUX, VTK_OUTPUT, CSV_OUTPUT) +HISTORY_OUTPUT_FREQUENCY = 1 diff --git a/code/input/pointSource_PNCSD.cfg b/code/input/pointSource_PNCSD.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5121fe1be0bd492611f889a44b24cbae4c95e99b --- /dev/null +++ b/code/input/pointSource_PNCSD.cfg @@ -0,0 +1,53 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Linesource Benchmarking File MN % +% Author % +% Date 23.03.2021 % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% ---- File specifications ---- +% +OUTPUT_DIR = ../result +OUTPUT_FILE = volOut_07_moments +LOG_DIR = ../result/logs +MESH_FILE = meshes/phantom2D.su2 +% +% ---- Problem specifications ---- +% +PROBLEM = ISOTROPICPOINTSOURCE2D +HYDROGEN_FILE = ENDL_H.txt +OXYGEN_FILE = ENDL_O.txt +KERNEL = ISOTROPIC +% +% ---- Solver specifications ---- +% +% Solver type +SOLVER = CSD_PN +% CFL number +CFL_NUMBER = 0.006 +% Final time for simulation +TIME_FINAL = 0.1 +% Maximal Moment degree +MAX_MOMENT_SOLVER = 13 +% Reconstruction order +RECONS_ORDER = 1 +% +CLEAN_FLUX_MATRICES = YES +% +% ---- Boundary Conditions ---- +% +BC_DIRICHLET = ( void ) +% +% ----- Quadrature Specification --- +% +QUAD_TYPE = GAUSS_LEGENDRE_TENSORIZED +QUAD_ORDER = 6 +% +% ----- Output ---- +% +VOLUME_OUTPUT = (MINIMAL, MEDICAL, MOMENTS) +VOLUME_OUTPUT_FREQUENCY = 1 +SCREEN_OUTPUT = (ITER, MASS, RMS_FLUX, VTK_OUTPUT, CSV_OUTPUT) +SCREEN_OUTPUT_FREQUENCY = 1 +HISTORY_OUTPUT = (ITER, MASS, RMS_FLUX, VTK_OUTPUT, CSV_OUTPUT) +HISTORY_OUTPUT_FREQUENCY = 1 diff --git a/code/input/pointSource_sph_csd.cfg b/code/input/pointSource_sph_csd.cfg deleted file mode 100644 index c5988b1ba2dde72f470501bfb18205f945b2e27e..0000000000000000000000000000000000000000 --- a/code/input/pointSource_sph_csd.cfg +++ /dev/null @@ -1,17 +0,0 @@ -OUTPUT_DIR = ../result -OUTPUT_FILE = IsotropicPointSource_sph_nq6 -LOG_DIR = ../result/logs -MESH_FILE = phantom2D_fine.su2 -PROBLEM = ISOTROPICPOINTSOURCE2D -SOLVER = CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D -CONTINUOUS_SLOWING_DOWN = YES -HYDROGEN_FILE = ENDL_H.txt -OXYGEN_FILE = ENDL_O.txt -KERNEL = ISOTROPIC -CFL_NUMBER = 2.0 -TIME_FINAL = 1.0 -CLEAN_FLUX_MATRICES = NO - -BC_DIRICHLET = ( void ) -QUAD_TYPE = GAUSS_LEGENDRE_TENSORIZED -QUAD_ORDER = 6 diff --git a/code/src/common/config.cpp b/code/src/common/config.cpp index 70fc7b3ec1e03406419334b614cf051861b8d907..0172449eb96e5953df548d0f9ff47701707061a1 100644 --- a/code/src/common/config.cpp +++ b/code/src/common/config.cpp @@ -570,6 +570,17 @@ void Config::SetPostprocessing() { CURRENT_FUNCTION ); } break; + case CSD_PN_SOLVER: + supportedGroups = { MINIMAL, MEDICAL, MOMENTS }; + if( supportedGroups.end() == std::find( supportedGroups.begin(), supportedGroups.end(), _volumeOutput[idx_volOutput] ) ) { + + ErrorMessages::Error( + "CSD_PN_SOLVER types only supports volume output MEDICAL, MOMENTS and MINIMAL.\nPlease check your .cfg file.", + CURRENT_FUNCTION ); + } + break; + default: + ErrorMessages::Error( "Solver output check not implemented for this Solver.\nThis is the fault of the coder.", CURRENT_FUNCTION ); } } @@ -694,7 +705,7 @@ bool Config::TokenizeString( string& str, string& option_name, vector& o pos = str.find( "=" ); if( pos == string::npos ) { string errmsg = "Error in Config::TokenizeString(): line in the configuration file with no \"=\" sign. "; - errmsg += "\nLook for: \n str.length() = " + std::to_string(str.length()); + errmsg += "\nLook for: \n str.length() = " + std::to_string( str.length() ); spdlog::error( errmsg ); throw( -1 ); } diff --git a/code/src/fluxes/upwindflux.cpp b/code/src/fluxes/upwindflux.cpp index b46d91dcc7aac33c498092278c62b6425da1f743..0b60b4257ecc03df5820b80abaf1497b0acb0e4a 100644 --- a/code/src/fluxes/upwindflux.cpp +++ b/code/src/fluxes/upwindflux.cpp @@ -3,7 +3,7 @@ UpwindFlux::UpwindFlux() : NumericalFlux() {} double UpwindFlux::Flux( const Vector& Omega, double psiL, double psiR, const Vector& n ) const { - double inner = Omega[0] * n[0] + Omega[1] * n[1]; // Only use x and y axis in 2d case + double inner = Omega[0] * n[0] + Omega[1] * n[1]; // Only use x and y axis in 2d case if( inner > 0 ) { return inner * psiL; } diff --git a/code/src/problems/isotropicsource2d.cpp b/code/src/problems/isotropicsource2d.cpp index 3957caa3cdb6e85ad0666c6e10c3cdb9665c52b2..874c9791d114c55554a66d7f4e67ec72d3993d1d 100644 --- a/code/src/problems/isotropicsource2d.cpp +++ b/code/src/problems/isotropicsource2d.cpp @@ -12,28 +12,49 @@ std::vector IsotropicSource2D::GetExternalSource( const Vector& en VectorVector IsotropicSource2D::SetupIC() { VectorVector psi( _mesh->GetNumCells(), Vector( _settings->GetNQuadPoints(), 1e-10 ) ); - auto cellMids = _mesh->GetCellMidPoints(); - double enterPositionX = 0.0; - double enterPositionY = 0.5; - auto boundaryCells = _mesh->GetBoundaryTypes(); - + auto cellMids = _mesh->GetCellMidPoints(); + // double enterPositionX = 0.5; // 0.0; + // double enterPositionY = 0.5; + // auto boundaryCells = _mesh->GetBoundaryTypes(); + // Case 1: Ingoing radiation in just one cell // find cell that best matches enter position - double dist = 1000.0; - unsigned indexSource = 0; + // double dist = 1000.0; + // unsigned indexSource = 0; for( unsigned j = 0; j < cellMids.size(); ++j ) { - if( boundaryCells[j] == BOUNDARY_TYPE::DIRICHLET ) { + // if( boundaryCells[j] == BOUNDARY_TYPE::DIRICHLET ) { + double x = cellMids[j][0]; + double y = cellMids[j][1]; + if( x >= 0.49 && x <= 0.5 && y >= 0.49 && y <= 0.5 ) { + psi[j] = Vector( _settings->GetNQuadPoints(), 1.0 ); + } + //} + } + // psi[indexSource] = Vector( _settings->GetNQuadPoints(), 1.0 ); + /* + // Case 2: Ingoing radiation as Gauss curve + double t = 1e-5; // pseudo time for gaussian smoothing + for( unsigned j = 0; j < cellMids.size(); ++j ) { double x = cellMids[j][0] - enterPositionX; double y = cellMids[j][1] - enterPositionY; - if( sqrt( x * x + y * y ) < dist ) { - dist = sqrt( x * x + y * y ); - indexSource = j; - } + psi[j] = 1.0 / ( 4.0 * M_PI * t ) * std::exp( -( x * x + y * y ) / ( 4 * t ) ); } - } - psi[indexSource] = Vector( _settings->GetNQuadPoints(), 1.0 ); + */ + return psi; } std::vector IsotropicSource2D::GetDensity( const VectorVector& /*cellMidPoints*/ ) { - return std::vector( _settings->GetNCells(), 1.0 ); + double rhoL = 1.0; + double rhoR = 5.0; + std::vector rho( _settings->GetNCells(), rhoL ); + + // use values rhoR on right third of domain + auto cellMids = _mesh->GetCellMidPoints(); + for( unsigned j = 0; j < cellMids.size(); ++j ) { + double x = cellMids[j][0]; + if( x >= 0.56 ) { + rho[j] = rhoR; + } + } + return rho; } diff --git a/code/src/solvers/csdpnsolver.cpp b/code/src/solvers/csdpnsolver.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a61791dc308a90d0864a2e550fa634770acf8620 --- /dev/null +++ b/code/src/solvers/csdpnsolver.cpp @@ -0,0 +1,230 @@ +#include "solvers/csdpnsolver.h" +#include "common/config.h" +#include "common/globalconstants.h" +#include "common/io.h" +#include "common/mesh.h" +#include "fluxes/numericalflux.h" +#include "kernels/scatteringkernelbase.h" +#include "problems/icru.h" +#include "problems/problembase.h" +#include "solvers/csdpn_starmap_constants.h" +#include "toolboxes/textprocessingtoolbox.h" +// externals +#include "spdlog/spdlog.h" +#include +#include + +double normpdf( double x, double mu, double sigma ) { + return INV_SQRT_2PI / sigma * std::exp( -( ( x - mu ) * ( x - mu ) ) / ( 2.0 * sigma * sigma ) ); +} + +Vector Time2Energy( const Vector& t, const double E_CutOff ) { + Interpolation interp( E_trans, E_tab ); + Interpolation interp2( E_tab, E_trans ); + return blaze::max( 0, interp( interp2( E_CutOff, 0 ) - t ) ); +} + +Vector Energy2Time( const Vector& E, const double E_CutOff ) { + Interpolation interp( E_tab, E_trans ); + return blaze::max( 0, interp( E_CutOff - E ) ); +} + +CSDPNSolver::CSDPNSolver( Config* settings ) : PNSolver( settings ) { + _dose = std::vector( _settings->GetNCells(), 0.0 ); + + // only dummies for compilation + // + double minE = 5e-5; + double maxE = 1.0; + _dE = ComputeTimeStep( _settings->GetCFL() ); + _nEnergies = std::ceil( ( maxE - minE ) / _dE ); + _energies = blaze::linspace( _nEnergies, maxE, minE ); + + Vector pos_beam = Vector{ 0.5, 0.5 }; + _sol = VectorVector( _nCells, Vector( _nSystem, 0.0 ) ); + for( unsigned idx_cell = 0; idx_cell < _nCells; ++idx_cell ) { + double x = _cellMidPoints[idx_cell][0]; + double y = _cellMidPoints[idx_cell][1]; + const double stddev = .005; + double f = normpdf( x, pos_beam[0], stddev ) * normpdf( y, pos_beam[1], stddev ); + + _sol[idx_cell][0] = f * StarMAPmoments[0]; + for( unsigned idx_sys = 1; idx_sys < _nSystem; idx_sys++ ) { + + _sol[idx_cell][idx_sys] = f * 0; // must be VectorVector + //_sol[idx_cell][idx_sys] = 0; + } + } + + _solNew = _sol; + + _sigmaS = VectorVector( _nEnergies, Vector( _polyDegreeBasis ) ); + for( unsigned idx_degree = 0; idx_degree < _polyDegreeBasis; ++idx_degree ) { + Vector xs_m = blaze::column( sigma_ref, idx_degree ); // Scattering cross section Moments + Interpolation interp( E_ref, xs_m ); + auto tmp = interp( _energies ); + for( unsigned idx_energy = 0; idx_energy < _nEnergies; ++idx_energy ) { + _sigmaS[idx_energy][idx_degree] = tmp[idx_energy]; + } + } + + _sigmaT = VectorVector( _nEnergies, Vector( _polyDegreeBasis ) ); + for( unsigned idx_energy = 0; idx_energy < _nEnergies; ++idx_energy ) { + for( unsigned idx_degree = 0; idx_degree < _polyDegreeBasis; ++idx_degree ) { + _sigmaT[idx_energy][idx_degree] = _sigmaS[idx_energy][0] - _sigmaS[idx_energy][idx_degree]; + } + } + + Interpolation interpS( E_tab, S_tab ); + _s = interpS( _energies ); + + // SanityChecks + for( unsigned idx_cell = 0; idx_cell < _nCells; idx_cell++ ) { + _density[idx_cell] = 1.0; + } +} + +void CSDPNSolver::SolverPreprocessing() { + // TODO +} + +void CSDPNSolver::IterPreprocessing( unsigned /*idx_iter*/ ) { + // TODO +} + +void CSDPNSolver::IterPostprocessing( unsigned idx_iter ) { + // --- Update Solution --- + _sol = _solNew; + + // --- Compute Flux for solution and Screen Output --- + ComputeRadFlux(); + + unsigned n = idx_iter; + // -- Compute Dose + for( unsigned j = 0; j < _nCells; ++j ) { + if( n > 0 ) { + _dose[j] += 0.5 * _dE * ( _fluxNew[j] * _s[_nEnergies - n - 1] + _flux[j] * _s[_nEnergies - n] ) / + _density[j]; // update dose with trapezoidal rule + } + else { + _dose[j] += _dE * _fluxNew[j] * _s[_nEnergies - n - 1] / _density[j]; + } + } +} + +void CSDPNSolver::FVMUpdate( unsigned idx_energy ) { +// loop over all spatial cells +#pragma omp parallel for + for( unsigned idx_cell = 0; idx_cell < _nCells; idx_cell++ ) { + // Dirichlet cells stay at IC, farfield assumption + if( _boundaryCells[idx_cell] == BOUNDARY_TYPE::DIRICHLET ) continue; + // Flux update + // for( unsigned idx_sys = 0; idx_sys < _nSystem; idx_sys++ ) { + for( int idx_l = 0; idx_l <= (int)_polyDegreeBasis; idx_l++ ) { + for( int idx_k = -idx_l; idx_k <= idx_l; idx_k++ ) { + int idx_sys = GlobalIndex( idx_l, idx_k ); + + _solNew[idx_cell][idx_sys] = _sol[idx_cell][idx_sys] - + ( _dE / _areas[idx_cell] ) * _solNew[idx_cell][idx_sys] /* cell averaged flux */ + - _dE * _sol[idx_cell][idx_sys] * + ( _sigmaT[idx_energy][idx_l] /* absorbtion influence */ + ); /* scattering influence */ + } + } + // Source Term + // _solNew[idx_cell][0] += _dE * _Q[0][idx_cell][0]; + } +} + +void CSDPNSolver::PrepareVolumeOutput() { + unsigned nGroups = (unsigned)_settings->GetNVolumeOutput(); + + _outputFieldNames.resize( nGroups ); + _outputFields.resize( nGroups ); + + // Prepare all OutputGroups ==> Specified in option VOLUME_OUTPUT + for( unsigned idx_group = 0; idx_group < nGroups; idx_group++ ) { + // Prepare all Output Fields per group + + // Different procedure, depending on the Group... + switch( _settings->GetVolumeOutput()[idx_group] ) { + case MINIMAL: + // Currently only one entry ==> rad flux + _outputFields[idx_group].resize( 1 ); + _outputFieldNames[idx_group].resize( 1 ); + + _outputFields[idx_group][0].resize( _nCells ); + _outputFieldNames[idx_group][0] = "radiation flux density"; + break; + + case MEDICAL: + _outputFields[idx_group].resize( 2 ); + _outputFieldNames[idx_group].resize( 2 ); + + // Dose + _outputFields[idx_group][0].resize( _nCells ); + _outputFieldNames[idx_group][0] = "dose"; + // Normalized Dose + _outputFields[idx_group][1].resize( _nCells ); + _outputFieldNames[idx_group][1] = "normalized dose"; + break; + case MOMENTS: + // As many entries as there are moments in the system + _outputFields[idx_group].resize( _nSystem ); + _outputFieldNames[idx_group].resize( _nSystem ); + + for( int idx_l = 0; idx_l <= (int)_polyDegreeBasis; idx_l++ ) { + for( int idx_k = -idx_l; idx_k <= idx_l; idx_k++ ) { + _outputFields[idx_group][GlobalIndex( idx_l, idx_k )].resize( _nCells ); + + _outputFieldNames[idx_group][GlobalIndex( idx_l, idx_k )] = + std::string( "u_" + std::to_string( idx_l ) + "^" + std::to_string( idx_k ) ); + } + } + break; + default: ErrorMessages::Error( "Volume Output Group not defined for PN Solver!", CURRENT_FUNCTION ); break; + } + } +} + +void CSDPNSolver::WriteVolumeOutput( unsigned idx_pseudoTime ) { + unsigned nGroups = (unsigned)_settings->GetNVolumeOutput(); + double maxDose; + if( ( _settings->GetVolumeOutputFrequency() != 0 && idx_pseudoTime % (unsigned)_settings->GetVolumeOutputFrequency() == 0 ) || + ( idx_pseudoTime == _maxIter - 1 ) /* need sol at last iteration */ ) { + + for( unsigned idx_group = 0; idx_group < nGroups; idx_group++ ) { + switch( _settings->GetVolumeOutput()[idx_group] ) { + case MINIMAL: + for( unsigned idx_cell = 0; idx_cell < _nCells; ++idx_cell ) { + _outputFields[idx_group][0][idx_cell] = _fluxNew[idx_cell]; + } + break; + + case MEDICAL: + // Compute Dose + for( unsigned idx_cell = 0; idx_cell < _nCells; ++idx_cell ) { + _outputFields[idx_group][0][idx_cell] += _dose[idx_cell]; + } + // Compute normalized dose + _outputFields[idx_group][1] = _outputFields[idx_group][0]; + + maxDose = *std::max_element( _outputFields[idx_group][0].begin(), _outputFields[idx_group][0].end() ); + + for( unsigned idx_cell = 0; idx_cell < _nCells; ++idx_cell ) { + _outputFields[idx_group][1][idx_cell] /= maxDose; + } + break; + case MOMENTS: + for( unsigned idx_sys = 0; idx_sys < _nSystem; idx_sys++ ) { + for( unsigned idx_cell = 0; idx_cell < _nCells; ++idx_cell ) { + _outputFields[idx_group][idx_sys][idx_cell] = _sol[idx_cell][idx_sys]; + } + } + break; + + default: ErrorMessages::Error( "Volume Output Group not defined for CSD_PN_TRAFO Solver!", CURRENT_FUNCTION ); break; + } + } + } +} diff --git a/code/src/solvers/csdsolvertrafofp.cpp b/code/src/solvers/csdsolvertrafofp.cpp index 7027f51889c862912e85dbc4e878ced504374f72..c7806f2bc7c8a865cec54cb3422e650cb9ba9984 100644 --- a/code/src/solvers/csdsolvertrafofp.cpp +++ b/code/src/solvers/csdsolvertrafofp.cpp @@ -188,6 +188,7 @@ void CSDSolverTrafoFP::IterPostprocessing( unsigned idx_pseudotime ) { _sol = _solNew; unsigned n = idx_pseudotime; + // Compute Dose for( unsigned j = 0; j < _nCells; ++j ) { _fluxNew[j] = dot( _sol[j], _weights ); if( n > 0 ) { diff --git a/code/src/solvers/csdsolvertrafofpsh2d.cpp b/code/src/solvers/csdsolvertrafofpsh2d.cpp index 4a811d6eccbb1ab2db9e2576fbcf0108a0fd735d..60ed4a84708d451f7b9b1515440036474ff5bd17 100644 --- a/code/src/solvers/csdsolvertrafofpsh2d.cpp +++ b/code/src/solvers/csdsolvertrafofpsh2d.cpp @@ -479,7 +479,6 @@ void CSDSolverTrafoFPSH2D::IterPostprocessing( unsigned idx_pseudotime ) { _dose[j] += _dE * _fluxNew[j] * _s[_nEnergies - n - 1] / _density[j]; } _solverOutput[j] = _fluxNew[j]; - _flux[j] = _fluxNew[j]; } } diff --git a/code/src/solvers/pnsolver.cpp b/code/src/solvers/pnsolver.cpp index 29fe8e6212af7f2da8576efcf335c122d02bda93..11c45ebcffd49bd6c444ad774aa78283e7e11658 100644 --- a/code/src/solvers/pnsolver.cpp +++ b/code/src/solvers/pnsolver.cpp @@ -162,8 +162,9 @@ void PNSolver::FVMUpdate( unsigned idx_energy ) { for( unsigned idx_sys = 0; idx_sys < _nSystem; idx_sys++ ) { _solNew[idx_cell][idx_sys] = _sol[idx_cell][idx_sys] - ( _dE / _areas[idx_cell] ) * _solNew[idx_cell][idx_sys] /* cell averaged flux */ - _dE * _sol[idx_cell][idx_sys] * - ( _sigmaT[idx_energy][idx_cell] /* absorbtion influence */ - + _sigmaS[idx_energy][idx_cell] * _scatterMatDiag[idx_sys] ); /* scattering influence */ + ( _sigmaS[idx_energy][idx_cell] * _scatterMatDiag[idx_sys] /* scattering influence */ + + _sigmaT[idx_energy][idx_cell] ); + /* total xs influence */ // Vorzeichenfehler! } // Source Term _solNew[idx_cell][0] += _dE * _Q[0][idx_cell][0]; @@ -338,14 +339,14 @@ void PNSolver::ComputeFluxComponents() { // std::cout << "Spectral Radius Y " << blaze::max( blaze::abs( eigenValuesY ) ) << "\n"; // std::cout << "Spectral Radius Z " << blaze::max( blaze::abs( eigenValues ) ) << "\n"; - // _combinedSpectralRadius = blaze::max( blaze::abs( eigenValues + eigenValuesX + eigenValuesY ) ); - // std::cout << "Spectral Radius combined " << _combinedSpectralRadius << "\n"; + //_combinedSpectralRadius = blaze::max( blaze::abs( eigenValues + eigenValuesX + eigenValuesY ) ); + std::cout << "Spectral Radius combined " << blaze::max( blaze::abs( eigenValues + eigenValuesX + eigenValuesY ) ) << "\n"; } void PNSolver::ComputeScatterMatrix() { // --- Isotropic --- - _scatterMatDiag[0] = -1.0; + _scatterMatDiag[0] = -1; for( unsigned idx_diag = 1; idx_diag < _nSystem; idx_diag++ ) { _scatterMatDiag[idx_diag] = 0.0; } diff --git a/code/src/solvers/solverbase.cpp b/code/src/solvers/solverbase.cpp index 4eea1aacbea4819606fa8f9aaa0fd60a0832ddac..fda297961bf095f9aa751a219cd3ea499a9e114b 100644 --- a/code/src/solvers/solverbase.cpp +++ b/code/src/solvers/solverbase.cpp @@ -6,6 +6,7 @@ #include "fluxes/numericalflux.h" #include "problems/problembase.h" #include "quadratures/quadraturebase.h" +#include "solvers/csdpnsolver.h" #include "solvers/csdsnsolver.h" #include "solvers/csdsolvertrafofp.h" #include "solvers/csdsolvertrafofp2d.h" @@ -110,6 +111,7 @@ SolverBase* SolverBase::Create( Config* settings ) { case CSD_SN_FOKKERPLANCK_TRAFO_SOLVER: return new CSDSolverTrafoFP( settings ); case CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D: return new CSDSolverTrafoFP2D( settings ); case CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D: return new CSDSolverTrafoFPSH2D( settings ); + case CSD_PN_SOLVER: return new CSDPNSolver( settings ); default: ErrorMessages::Error( "Creator for the chosen solver does not yet exist. This is is the fault of the coder!", CURRENT_FUNCTION ); } ErrorMessages::Error( "Creator for the chosen solver does not yet exist. This is is the fault of the coder!", CURRENT_FUNCTION ); @@ -119,7 +121,6 @@ SolverBase* SolverBase::Create( Config* settings ) { void SolverBase::Solve() { // --- Preprocessing --- - PrepareVolumeOutput(); DrawPreSolverOutput(); @@ -231,10 +232,7 @@ void SolverBase::WriteScalarOutput( unsigned iteration ) { case ITER: _screenOutputFields[idx_field] = iteration; break; - case RMS_FLUX: - _screenOutputFields[idx_field] = blaze::l2Norm( _fluxNew - _flux ); - _flux = _fluxNew; - break; + case RMS_FLUX: _screenOutputFields[idx_field] = blaze::l2Norm( _fluxNew - _flux ); break; case VTK_OUTPUT: _screenOutputFields[idx_field] = 0; @@ -285,7 +283,6 @@ void SolverBase::WriteScalarOutput( unsigned iteration ) { case RMS_FLUX: if( screenOutputFields.end() == itScreenOutput ) { _screenOutputFields[idx_field] = blaze::l2Norm( _fluxNew - _flux ); - _flux = _fluxNew; } else { _historyOutputFields[idx_field] = *itScreenOutput; @@ -311,6 +308,7 @@ void SolverBase::WriteScalarOutput( unsigned iteration ) { default: ErrorMessages::Error( "History output group not defined!", CURRENT_FUNCTION ); break; } } + _flux = _fluxNew; } void SolverBase::PrintScreenOutput( unsigned iteration ) { diff --git a/code/src/toolboxes/interpolation.cpp b/code/src/toolboxes/interpolation.cpp index 7a26f2a5b992138f054e7303ce4eae3cfe1ae4c2..5f09ddb1532ba27523e5ab27f9edc2a29133c32f 100644 --- a/code/src/toolboxes/interpolation.cpp +++ b/code/src/toolboxes/interpolation.cpp @@ -53,7 +53,7 @@ double Interpolation::operator()( double x ) const { // Check whether 1D if( _dim != 1u ) ErrorMessages::Error( "Invalid data dimension for operator(x)!", CURRENT_FUNCTION ); // x must be between min and max of table values - if( x < _x[0] || x > _x[_x.size() - 1u] ) { + if( ( x < _x[0] || x > _x[_x.size() - 1u] ) && _type != linear ) { // std::cout << x << "\t" << _x[0] << std::endl; // std::cout << x << "\t" << _x[_x.size() - 1u] << std::endl; ErrorMessages::Error( "Extrapolation is not supported!", CURRENT_FUNCTION ); @@ -63,7 +63,16 @@ double Interpolation::operator()( double x ) const { Vector::ConstIterator it = std::lower_bound( _x.begin(), _x.end(), x ); // index of the lower bound to x in _x - unsigned idx = static_cast( std::max( int( it - _x.begin() ) - 1, 0 ) ); + unsigned idx = 0; + if( x >= _x[0] && x <= _x[_x.size() - 1u] ) { + idx = static_cast( std::max( int( it - _x.begin() ) - 1, 0 ) ); + } + else if( x < _x[0] ) { + idx = 0; + } + else if( x > _x[_x.size() - 1u] ) { + idx = _x.size() - 1u; + } // linear interpolation if( _type == linear || _type == loglinear ) {