From 4570fffe7f7405a3450138eb99ab4d69ad44576d Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sun, 4 Jun 2023 16:26:10 -0400 Subject: [PATCH 01/45] start of the coefficents --- integration/ROCK4/rock4_coefficients.H | 1750 ++++++++++++++++++++++++ 1 file changed, 1750 insertions(+) create mode 100644 integration/ROCK4/rock4_coefficients.H diff --git a/integration/ROCK4/rock4_coefficients.H b/integration/ROCK4/rock4_coefficients.H new file mode 100644 index 0000000000..505ced616e --- /dev/null +++ b/integration/ROCK4/rock4_coefficients.H @@ -0,0 +1,1750 @@ +#ifndef ROCK4_COEFFICIENTS_H +#define ROCK4_COEFFICIENTS_H + +const inline AMREX_GPU_MANAGED amrex::Array1D ms = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 22, 24, 26, 28, 30, 32, 34, 36, 38, 41, 44, 47, 50, 53, 56, 59, 63, 67, 71, + 76, 81, 86, 92, 98, 105, 112, 120, 129, 138, 148}; + +// Parameters of the finishing procedure + +const inline AMREX_GPU_MANAGED amrex::Array2D fpa = { + {-.149352078672699e+00, 0.629768962985252e+00, -.355201061573650e+00, + 0.146745996307541e-01, -.558517281602565e-01, 0.590312931352706e+00}, + {-.179313593132677e+00, 0.522354978881996e+00, -.268020263243268e+00, + 0.410644459848542e-01, -.673692676033641e-01, 0.534974252895965e+00}, + {-.182428104178289e+00, 0.488581974232839e+00, -.243999027372673e+00, + 0.403844469216897e-01, -.621100542563179e-01, 0.510891501054959e+00}, + {-.177747282156689e+00, 0.475598890858970e+00, -.236544145857569e+00, + 0.357873367680739e-01, -.561802405454197e-01, 0.498502393780149e+00}, + {-.171097214294784e+00, 0.471021380996139e+00, -.235432301175529e+00, + 0.305165148305403e-01, -.508758913107147e-01, 0.491537536121394e+00}, + {-.164446145110292e+00, 0.470315341552133e+00, -.237054736024656e+00, + 0.253636332272387e-01, -.462365759807733e-01, 0.487394153808489e+00}, + {-.158427655171257e+00, 0.471468878620055e+00, -.239853802450812e+00, + 0.205746749952032e-01, -.421744356707249e-01, 0.484829913014008e+00}, + {-.153293058075572e+00, 0.473282079177035e+00, -.242910850765406e+00, + 0.163722321103915e-01, -.387108095861697e-01, 0.483081034299037e+00}, + {-.148972804305139e+00, 0.475296959544537e+00, -.245899260153289e+00, + 0.127203010191100e-01, -.357508839759137e-01, 0.481825981739298e+00}, + // + {-.145179937599982e+00, 0.477661231491125e+00, -.248988404183759e+00, + 0.930730703798092e-02, -.330359105371527e-01, 0.481074258113903e+00}, + {-.141803779162182e+00, 0.480294472251598e+00, -.252149638985389e+00, + 0.605980548716020e-02, -.304878190339923e-01, 0.480717680079251e+00}, + {-.139121943562170e+00, 0.482307569354585e+00, -.254656989245024e+00, + 0.349723479360248e-02, -.284636204606306e-01, 0.480267545886151e+00}, + {-.136626653539895e+00, 0.484641896383759e+00, -.257332057712838e+00, + 0.915869293860006e-03, -.264509129364182e-01, 0.480154720984400e+00}, + {-.134486447576714e+00, 0.486757723660692e+00, -.259733624852103e+00, + -.135988997170157e-02, -.246765061257936e-01, 0.480084593714673e+00}, + {-.132780674018083e+00, 0.488321952587049e+00, -.261588769418801e+00, + -.313701049350723e-02, -.232786280695929e-01, 0.479882004899598e+00}, + {-.131117609799413e+00, 0.490193639754613e+00, -.263646432339284e+00, + -.502134729674226e-02, -.218133033112692e-01, 0.479929065438669e+00}, + {-.129737943206222e+00, 0.491700319201409e+00, -.265337954300747e+00, + -.657602712355092e-02, -.205977998576123e-01, 0.479898556782486e+00}, + {-.128546948141681e+00, 0.493011323225514e+00, -.266816177922376e+00, + -.793004771706004e-02, -.195369613099883e-01, 0.479857299633325e+00}, + // + {-.127460377104448e+00, 0.494293149884316e+00, -.268231271325724e+00, + -.920717061172173e-02, -.185386009080156e-01, 0.479869528636923e+00}, + {-.126496410155342e+00, 0.495458691659965e+00, -.269513232370108e+00, + -.103575442717928e-01, -.176387115527810e-01, 0.479887174404288e+00}, + {-.124868416118615e+00, 0.497490597051425e+00, -.271737391165211e+00, + -.123394260182449e-01, -.160868868427959e-01, 0.479932724633469e+00}, + {-.123564405510046e+00, 0.499164732520327e+00, -.273565616640958e+00, + -.139585436258901e-01, -.148169722656038e-01, 0.479973747650230e+00}, + {-.122505008329286e+00, 0.500555383947992e+00, -.275081797679137e+00, + -.152951780850662e-01, -.137670777523960e-01, 0.480009428375171e+00}, + {-.121640329449530e+00, 0.501700402349954e+00, -.276333007672789e+00, + -.163961730000813e-01, -.129007107727469e-01, 0.480031673127157e+00}, + {-.120917917691482e+00, 0.502675119491259e+00, -.277395466055127e+00, + -.173277807640047e-01, -.121670308408281e-01, 0.480054118477096e+00}, + {-.120710248396632e+00, 0.502361065588637e+00, -.277299180400763e+00, + -.173459597107178e-01, -.121268146405534e-01, 0.479596544727020e+00}, + {-.120151946726542e+00, 0.503187463625006e+00, -.278173489088946e+00, + -.180998664145073e-01, -.115355117518033e-01, 0.479663327238431e+00}, + // + {-.119650804512964e+00, 0.503968844736113e+00, -.278987558251327e+00, + -.187954561730573e-01, -.109907774512063e-01, 0.479748806593835e+00}, + {-.119231690274109e+00, 0.504610327555198e+00, -.279662019452110e+00, + -.193736976241804e-01, -.105368584242475e-01, 0.479807172254604e+00}, + {-.118685223311611e+00, 0.505479309944796e+00, -.280566027535941e+00, + -.201436607277488e-01, -.993291024114479e-02, 0.479903135786603e+00}, + {-.118231796286135e+00, 0.506213890671776e+00, -.281327499307895e+00, + -.207902381330527e-01, -.942553811892237e-02, 0.479988558979737e+00}, + {-.117860168810132e+00, 0.506813986559461e+00, -.281951733666353e+00, + -.213206692268858e-01, -.900871675159034e-02, 0.480053891764692e+00}, + {-.117541632407920e+00, 0.507340547092223e+00, -.282496164808253e+00, + -.217814864430309e-01, -.864670120809640e-02, 0.480116952219068e+00}, + {-.117280791290490e+00, 0.507762024730383e+00, -.282936101835780e+00, + -.221553810871189e-01, -.835235476491614e-02, 0.480159581641243e+00}, + {-.117020809344219e+00, 0.508234853606851e+00, -.283411245544839e+00, + -.225511383509412e-01, -.804255449961079e-02, 0.480240908974576e+00}, + {-.116840110106662e+00, 0.508513931927332e+00, -.283708061860511e+00, + -.228054436800931e-01, -.784157438541911e-02, 0.480258758199155e+00}, + // + {-.116999141776097e+00, 0.507738965363869e+00, -.283085550597818e+00, + -.223557928014705e-01, -.817646181729438e-02, 0.479839084150866e+00}, + {-.116787474223622e+00, 0.508124510062097e+00, -.283473179991593e+00, + -.226786360708563e-01, -.792370493215401e-02, 0.479905001144018e+00}, + {-.116543053242319e+00, 0.508649023059358e+00, -.283975543942050e+00, + -.230858609767789e-01, -.760742817737876e-02, 0.480040247388773e+00}, + {-.116369877848172e+00, 0.508950670881779e+00, -.284284071372858e+00, + -.233448484372084e-01, -.740387836067644e-02, 0.480081925815726e+00}, + {-.115981831952477e+00, 0.509942937789055e+00, -.285192892337194e+00, + -.240615204888854e-01, -.685134671736066e-02, 0.480412958109969e+00}, + {-.115934409239879e+00, 0.509932625794726e+00, -.285214065725890e+00, + -.240929036649298e-01, -.682325905888604e-02, 0.480353282861487e+00}, + {-.114543930853965e+00, 0.514055666969259e+00, -.288877128663596e+00, + -.269187182378037e-01, -.465261555222027e-02, 0.481928410401348e+00}, + {-.114338190892959e+00, 0.514568129329710e+00, -.289354467784058e+00, + -.272970253684862e-01, -.435838305221696e-02, 0.482082731512007e+00}, + {-.113900806706479e+00, 0.515815247278763e+00, -.290479621681517e+00, + -.281706242269155e-01, -.368286974902504e-02, 0.482524745170433e+00}, + // + {-.114241230745559e+00, 0.514642605930859e+00, -.289464730587169e+00, + -.274037778296787e-01, -.427016797791793e-02, 0.482029696494976e+00}, + {-.113830853818569e+00, 0.515834254672657e+00, -.290535565769687e+00, + -.282330735764243e-01, -.362939602828681e-02, 0.482459847410651e+00}, + {-.113105039346215e+00, 0.518047629039909e+00, -.292508542364670e+00, + -.297505373346793e-01, -.245703714012197e-02, 0.483285747825278e+00}, + {-.113373695071906e+00, 0.517118156325443e+00, -.291701320745508e+00, + -.291406743553601e-01, -.292560575875699e-02, 0.482899951273987e+00}, + {-.112938370080633e+00, 0.518440212713205e+00, -.292882869228272e+00, + -.300502325911247e-01, -.222188377341845e-02, 0.483386803334408e+00}}; + +const inline AMREX_GPU_MANAGED amrex::Array2D fpb = { + {0.934502625489809e+00, -.426556402801135e+00, -.428612609028723e+00, 0.744370090574855e+00}, + {0.727428506710284e+00, -.281882500610754e+00, -.366883181811475e+00, 0.684341322628128e+00}, + {0.671969568061243e+00, -.247327027296030e+00, -.348410422675722e+00, 0.657516722491004e+00}, + {0.655616700297981e+00, -.238808679740035e+00, -.342918097601918e+00, 0.643274312048176e+00}, + {0.653766630051757e+00, -.239717659625342e+00, -.342124625373560e+00, 0.634842894408973e+00}, + {0.657958401550080e+00, -.244504571310874e+00, -.343125007747822e+00, 0.629452994091047e+00}, + {0.664644828327504e+00, -.250836131475691e+00, -.344767760715637e+00, 0.625804292371554e+00}, + {0.671778926897883e+00, -.257341094888494e+00, -.346437936729090e+00, 0.623113789954589e+00}, + {0.678662206121957e+00, -.263538563990534e+00, -.347971227180309e+00, 0.621040683222628e+00}, + {0.685711960310753e+00, -.269724027269246e+00, -.349535907736682e+00, 0.619566456617273e+00}, + {0.692884607363355e+00, -.275886628173354e+00, -.351131980732774e+00, 0.618568501341401e+00}, + {0.698546656891454e+00, -.280881006247969e+00, -.352285102713857e+00, 0.617571192399056e+00}, + // + {0.704573921792281e+00, -.286045457291729e+00, -.353563979295968e+00, 0.616965030808178e+00}, + {0.709971428905986e+00, -.290682008221983e+00, -.354679184547433e+00, 0.616462060289197e+00}, + {0.714125178664410e+00, -.294349691347616e+00, -.355464510591820e+00, 0.615888572779772e+00}, + {0.718736274563484e+00, -.298288036358834e+00, -.356401512165052e+00, 0.615594896206387e+00}, + {0.722517387767685e+00, -.301568462204942e+00, -.357129478686764e+00, 0.615267647826005e+00}, + {0.725816343813274e+00, -.304448113195281e+00, -.357746756688570e+00, 0.614963961979991e+00}, + {0.728974076820863e+00, -.307182320589777e+00, -.358345483491417e+00, 0.614739362936109e+00}, + {0.731832397913825e+00, -.309659464712225e+00, -.358881456195461e+00, 0.614544900863432e+00}, + {0.736786729484850e+00, -.313957288328657e+00, -.359797924432667e+00, 0.614228100935116e+00}, + {0.740854099130286e+00, -.317495426161459e+00, -.360535121685962e+00, 0.613973796355241e+00}, + {0.744223896195403e+00, -.320433632193417e+00, -.361135560093482e+00, 0.613766054898060e+00}, + {0.747001832700433e+00, -.322865419691933e+00, -.361620350229670e+00, 0.613586121252665e+00}, + // + {0.749359431920161e+00, -.324930741701897e+00, -.362028107948934e+00, 0.613438378039065e+00}, + {0.749100998320598e+00, -.324985993239383e+00, -.361796607662197e+00, 0.612867258144605e+00}, + {0.751043873200700e+00, -.326661586308774e+00, -.362147816931696e+00, 0.612807453647952e+00}, + {0.752854624396087e+00, -.328210433831008e+00, -.362482431451812e+00, 0.612782100341090e+00}, + {0.754353169889782e+00, -.329501139703409e+00, -.362752509396770e+00, 0.612745403519662e+00}, + {0.756363017447499e+00, -.331222786188901e+00, -.363119850550614e+00, 0.612719466518580e+00}, + {0.758055963580132e+00, -.332671506824595e+00, -.363429198770158e+00, 0.612703916106263e+00}, + {0.759443004727975e+00, -.333862330033422e+00, -.363679324780792e+00, 0.612685408765563e+00}, + {0.760653160327002e+00, -.334898139570366e+00, -.363899175365336e+00, 0.612677301460611e+00}, + {0.761629956010211e+00, -.335739950284413e+00, -.364072376423153e+00, 0.612660139381166e+00}, + {0.762688789887627e+00, -.336630474589357e+00, -.364274785126092e+00, 0.612687294013859e+00}, + {0.763346400554849e+00, -.337204680067583e+00, -.364385896133756e+00, 0.612661785846953e+00}. + // + {0.761923304846226e+00, -.336206156720779e+00, -.363978603432088e+00, 0.612221699604794e+00}, + {0.762786806785331e+00, -.336933071907623e+00, -.364142956905108e+00, 0.612243212238912e+00}, + {0.763911644345184e+00, -.337848624997397e+00, -.364378249037553e+00, 0.612335667041690e+00}, + {0.764597562248984e+00, -.338433363367646e+00, -.364503441229143e+00, 0.612339040874567e+00}, + {0.766642781170500e+00, -.340044276021276e+00, -.364967251951014e+00, 0.612618883157375e+00}, + {0.766682555493412e+00, -.340118220148353e+00, -.364946973037536e+00, 0.612538317898983e+00}, + {0.774955438746513e+00, -.346489297090328e+00, -.366916081411072e+00, 0.613985554671875e+00}, + {0.776027351639685e+00, -.347348043660042e+00, -.367147411126057e+00, 0.614109087783370e+00}, + {0.778563137974742e+00, -.349330512988104e+00, -.367727843519890e+00, 0.614502095324990e+00}, + {0.776264664166250e+00, -.347594735539935e+00, -.367159451116240e+00, 0.614023148520995e+00}, + {0.778679038214519e+00, -.349476481579656e+00, -.367715953710640e+00, 0.614409463784688e+00}, + {0.783131247138323e+00, -.352927933064792e+00, -.368752741091226e+00, 0.615166687043411e+00}, + // + {0.781304104495501e+00, -.351541585232233e+00, -.368306700790280e+00, 0.614794688266817e+00}, + {0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}}; + +const inline AMREX_GPU_MANAGED amrex::Array2D fpe = { + {0.113509972110540e+01, -.584333360989720e+00, -.319172911177732e+00, 0.482853558185876e+00, 0.109256697110981e+00}, + {0.100479199674788e+01, -.436644602461537e+00, -.423443966877378e+00, 0.538770645909717e+00, 0.795300735974956e-01}, + {0.984907410167693e+00, -.403297625005343e+00, -.485090625106059e+00, 0.576309835350610e+00, 0.609198451735942e-01}, + {0.980171201303714e+00, -.394437889689979e+00, -.517381582925487e+00, 0.601142288908999e+00, 0.476702174069568e-01}, + {0.974834695776200e+00, -.392308952799017e+00, -.530263724070033e+00, 0.616510618632796e+00, 0.379946019218839e-01}, + {0.966668353329992e+00, -.391741144639394e+00, -.531455776704021e+00, 0.625494551194751e+00, 0.308158334011040e-01}, + {0.956319747720222e+00, -.391138376736994e+00, -.526142643689543e+00, 0.630404554467362e+00, 0.254019467466823e-01}, + {0.943587787064690e+00, -.389377300510789e+00, -.516876350192269e+00, 0.632531861517858e+00, 0.212476873553974e-01}, + {0.929868441621807e+00, -.386750527439590e+00, -.505935645060380e+00, 0.633001592986906e+00, 0.180092360649997e-01}, + // + {0.917878947092234e+00, -.384686528119553e+00, -.495511556683115e+00, 0.632891756120139e+00, 0.154458635123923e-01}, + {0.907921031017813e+00, -.383354597608536e+00, -.486086276370317e+00, 0.632568615019003e+00, 0.133857277406643e-01}, + {0.896388476009400e+00, -.380504535913835e+00, -.476131894672218e+00, 0.631491892380436e+00, 0.117078025249012e-01}, + {0.887685870010584e+00, -.378944197433540e+00, -.467828653690999e+00, 0.630692391160778e+00, 0.103241059659401e-01}, + {0.879470814062224e+00, -.377245094706344e+00, -.460102121012690e+00, 0.629778007382364e+00, 0.917069070021292e-02}, + {0.870530751362587e+00, -.374648589005799e+00, -.452452352164561e+00, 0.628569291738020e+00, 0.820044757449899e-02}, + {0.864018892596866e+00, -.373280954775127e+00, -.446202255714937e+00, 0.627730565946685e+00, 0.737537419249938e-02}, + {0.857357924295629e+00, -.371485680656218e+00, -.440234425775788e+00, 0.626780133051391e+00, 0.666914378696866e-02}, + {0.851096961215784e+00, -.369663988413454e+00, -.434754090977242e+00, 0.625846657124080e+00, 0.605989696024640e-02}, + // + {0.845691163494378e+00, -.368162878390094e+00, -.429905486466339e+00, 0.625032425385260e+00, 0.553041165257352e-02}, + {0.840754783321373e+00, -.366754374490097e+00, -.425504080282415e+00, 0.624272520855683e+00, 0.506752846502820e-02}, + {0.832129732678031e+00, -.364215201885908e+00, -.417868687835329e+00, 0.622912972095680e+00, 0.430080260616755e-02}, + {0.824841358445432e+00, -.361969316759517e+00, -.411506554101034e+00, 0.621735648069777e+00, 0.369621198344728e-02}, + {0.818660702021942e+00, -.359997706140366e+00, -.406173910081373e+00, 0.620720634622955e+00, 0.321103838340649e-02}, + {0.813343156361523e+00, -.358234931076463e+00, -.401657773073081e+00, 0.619835953653306e+00, 0.281577816620828e-02}, + {0.808812551334635e+00, -.356709737514645e+00, -.397829666549206e+00, 0.619076368359449e+00, 0.248944467816156e-02}, + {0.802058241484851e+00, -.353305127983149e+00, -.393665858753007e+00, 0.617880189866334e+00, 0.221821094859412e-02}, + {0.799023019885202e+00, -.352371068280062e+00, -.390970958156562e+00, 0.617372975124671e+00, 0.198795503493263e-02}, + // + {0.796533707522770e+00, -.351659214274525e+00, -.388680577600314e+00, 0.616958145987822e+00, 0.179179781860265e-02}, + {0.794254415802991e+00, -.350955011234794e+00, -.386652430547127e+00, 0.616574541234043e+00, 0.162340905415174e-02}, + {0.791451974069317e+00, -.350127723737597e+00, -.384099751306937e+00, 0.616103218945433e+00, 0.141212925634866e-02}, + {0.789140296939903e+00, -.349447391105024e+00, -.381986708309451e+00, 0.615713343205178e+00, 0.123963336103694e-02}, + {0.787155036742462e+00, -.348839107260454e+00, -.380202863720354e+00, 0.615376708082511e+00, 0.109698483515876e-02}, + {0.785509443687073e+00, -.348347728366112e+00, -.378703894403193e+00, 0.615097681507449e+00, 0.977644426693831e-03}, + {0.784038223206202e+00, -.347876842227869e+00, -.377407083344177e+00, 0.614846655967241e+00, 0.876815082414696e-03}, + {0.783010378301710e+00, -.347648245486129e+00, -.376356876713355e+00, 0.614674780335034e+00, 0.790787748777402e-03}, + {0.781833266343420e+00, -.347234482878725e+00, -.375370253527294e+00, 0.614472179428255e+00, 0.716900834807566e-03}, + // + {0.778157258445688e+00, -.345006104027160e+00, -.373629716648469e+00, 0.613804905745683e+00, 0.633900782409020e-03}, + {0.777300034873279e+00, -.344806720424309e+00, -.372764739426396e+00, 0.613661241678936e+00, 0.564173510000384e-03}, + {0.776985336763925e+00, -.344948310351192e+00, -.372138199888685e+00, 0.613616309802328e+00, 0.505301025547597e-03}, + {0.776123576908821e+00, -.344696744011525e+00, -.371340582024658e+00, 0.613469644712914e+00, 0.443902941209962e-03}, + {0.776949282583553e+00, -.345654199916775e+00, -.371072531043118e+00, 0.613634699306968e+00, 0.392885424956897e-03}, + {0.775876610212432e+00, -.345123309087147e+00, -.370392356339381e+00, 0.613444359409516e+00, 0.350376011087039e-03}, + {0.783347589653809e+00, -.351086251339795e+00, -.371860974551612e+00, 0.614828131953302e+00, 0.307119201283797e-03}, + {0.783496656673086e+00, -.351443051706240e+00, -.371545102252444e+00, 0.614860564019234e+00, 0.271917903319380e-03}, + {0.785178130625954e+00, -.352964147655529e+00, -.371615967722576e+00, 0.615170969674100e+00, 0.237891869788885e-03}, + // + {0.782045229930799e+00, -.350764936286095e+00, -.370561648626977e+00, 0.614604810918108e+00, 0.210170095234033e-03}, + {0.783792445229447e+00, -.352285904984906e+00, -.370720709266521e+00, 0.614926468923107e+00, 0.183766807783551e-03}, + {0.787664243592327e+00, -.355426631067992e+00, -.371408773264980e+00, 0.615628921926696e+00, 0.159498839664580e-03}, + {0.785248632105467e+00, -.353713152595833e+00, -.370620439974436e+00, 0.615195478568662e+00, 0.139988635943928e-03}, + {0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}}; + + +c ------- Recurrence parameters.------------------------------------ + +const inline AMREX_GPU_MANAGED amrex::Array1D recf = { + .1762962957651941e+00, .1067131485543800e+00, + .1296319693918818e+00, .6097984609869632e-02, .7296375286357569e-01, + .8749824867149327e-01, .6126949805354446e-02, .1026802330400501e+00, + .3026744779900850e-01, .5345766591735225e-01, .6421114488497465e-01, + .6297251335072349e-02, .7361067001944596e-01, .2954244012876854e-01, + .8450213007949955e-01, .6370198138618569e-01, .4102541073974864e-01, + .4936734181284644e-01, .6437548414781547e-02, .5655964819916140e-01, + .3008674068005620e-01, .6301337991392047e-01, .6092514503458917e-01, + .7122116739390528e-01, .1014508394981259e+00, .3256098772501858e-01, + .3923994550846150e-01, .6548791582739922e-02, .4499511886194148e-01, + .3061034821432499e-01, .5000269311882022e-01, .6157339578289546e-01, + .5465516336291797e-01, .9570538881974760e-01, .6104333020232396e-01, + .1406290220864037e+00, .2651417777294218e-01, .3199100352247176e-01, + .6637416338030012e-02, .3671473048471728e-01, .3104646653985547e-01, + .4080808506561111e-01, .6240780397840483e-01, .4441697436286914e-01, + .9608256539833336e-01, .4790790953491602e-01, .1314940925346221e+00, + .5299225195731577e-01, .1795490141555294e+00, .2203688946407306e-01, + .2661454798174795e-01, .6708509073973803e-02, .3056730958573840e-01, + .3140468274131318e-01, .3399153986085689e-01, .6314347647488826e-01, + .3698314358022203e-01, + .9706950916624359e-01, .3966494820191785e-01, .1312524251550016e+00, + .4237605842481057e-01, .1670258610104497e+00, .4651311259978263e-01, + .2174924541420837e+00, .1862250741526137e-01, .2250861576538788e-01, + .6766202022280821e-02, .2586805882924489e-01, .3170042346032810e-01, + .2877953008086195e-01, .6376714023863055e-01, .3131867762450776e-01, + .9801783524123061e-01, .3355864056201850e-01, .1322218594416999e+00, + .3560688231225300e-01, .1658724905539629e+00, .3777371673577270e-01, + .2016177039517425e+00, .4119698781191684e-01, .2539572842035754e+00, + .1595000101933615e-01, .1929098080329146e-01, .6813771091892661e-02, + .2218226060548395e-01, .3194763050768121e-01, .2468951849041972e-01, + .6429708643843554e-01, .2687566748685502e-01, .9885398134767074e-01, + .2879687047315825e-01, .1332911334324939e+00, .3051024265050759e-01, + .1666672556601528e+00, .3211180339134084e-01, .1993212628717513e+00, + .3387840798530223e-01, .2348117800966209e+00, .3672204698847085e-01, + .2881723275817451e+00, .1381614369504127e-01, .1671925338932986e-01, + .6853396714797705e-02, .1923405366588467e-01, .3215586472031486e-01, + .2141625996563439e-01, .6474907548155117e-01, .2331937590115891e-01, + .9958008772514044e-01, .2499024766114432e-01, .1342748583683893e+00, + .2647050763871464e-01, + .1677665086248348e+00, .2780637354179997e-01, .1998070962536277e+00, + .2908398701850636e-01, .2312827828857880e+00, .3054428937166170e-01, + .2663434084812225e+00, .3290759457513454e-01, .3198421010321994e+00, + .1209208337462717e-01, .1463956211973881e-01, .6886319232429428e-02, + .1684821591214353e-01, .3233043835607318e-01, .1876598514920064e-01, + .6513176017688395e-01, .2043905166732186e-01, .1002021458157551e+00, + .2190770330626050e-01, .1351369448238108e+00, .2320633429617816e-01, + .1688220571485906e+00, .2436655982458731e-01, .2008416611727759e+00, + .2542750723914090e-01, .2313613787046680e+00, .2646792773501215e-01, + .2616749611549993e+00, .2769967463189309e-01, .2964076499426887e+00, + .2970440766084731e-01, .3502117812643117e+00, .1067034715302655e-01, + .1292329710584654e-01, .6914320860943588e-02, .1487812037525849e-01, + .3248006428304434e-01, .1657652594868420e-01, .6546254336130322e-01, + .1805880263820550e-01, .1007449363462607e+00, .1936010074490956e-01, + .1358990057232774e+00, .2051007922030995e-01, .1697855056821405e+00, + .2153416689781703e-01, .2019295372474008e+00, .2245709430196045e-01, + .2322718220467692e+00, .2331275056513504e-01, .2612402870437151e+00, + .2417201314765524e-01, .2904095866946978e+00, .2521646587374857e-01, + .3246308095620147e+00, + .2690764435467064e-01, .3778240223542354e+00, .9487431939295813e-02, + .1149440138138981e-01, .6938125808908258e-02, .1323700105262745e-01, + .3260808020167218e-01, .1475188210924817e-01, .6574755356940067e-01, + .1607452560476730e-01, .1012162270929412e+00, .1723591531771676e-01, + .1365667423922086e+00, .1826211676183441e-01, .1706429091716792e+00, + .1917496536345655e-01, .2029443389633356e+00, .1999362278384748e-01, + .2333350798953319e+00, .2073811037471499e-01, .2619641661449880e+00, + .2143841440760416e-01, .2894413776906615e+00, .2215820736295387e-01, + .3175489053704050e+00, .2305270619849904e-01, .3512439576972030e+00, + .2449014264738941e-01, .4036179314586852e+00, .8494564197695063e-02, + .1029439196351078e-01, .6958406921839354e-02, .1185809158880236e-01, + .3271773184277712e-01, .1321815865055247e-01, .6599313162331371e-01, + .1440610601409755e-01, .1016249390468336e+00, .1544947770682643e-01, + .1371499803680846e+00, .1637143556780157e-01, .1713990070155131e+00, + .1719123774995229e-01, .2038574724036485e+00, .1792514377153798e-01, + .2343593316805466e+00, .1858798779956469e-01, .2629560717194659e+00, + .1919659343371288e-01, .2899296316580346e+00, .1977810373828767e-01, + .3160315643000932e+00, .2039024270914711e-01, .3432192271881122e+00, + .2116722465269759e-01, + .3765294846983478e+00, .2240833445471075e-01, .4283514372117345e+00, + .7648100953017721e-02, .9270847111494889e-02, .6976054938079860e-02, + .1068147039692487e-01, .3281359708712486e-01, .1190898600388846e-01, + .6620896361366048e-01, .1298157114442065e-01, .1019862089328133e+00, + .1392387354640439e-01, .1376687444923527e+00, .1475662479151471e-01, + .1720764656800079e+00, .1549702171989481e-01, .2046849615229637e+00, + .1615937354505817e-01, .2353135758405889e+00, .1675598207974404e-01, + .2639750061864973e+00, .1729863164965770e-01, .2908276346191939e+00, + .1780176282268598e-01, .3162404475076796e+00, .1828983612841132e-01, + .3410641528662292e+00, .1881415834433531e-01, .3673520724841440e+00, + .1948852933531380e-01, .4000529139809629e+00, .2055287002810484e-01, + .4505930922691549e+00, .6923848173158734e-02, .8394702950361005e-02, + .6991325631797234e-02, .9673911522111265e-02, .3289687833321025e-01, + .1078755757084805e-01, .6639729788616958e-01, .1176100014874140e-01, + .1023029830546846e+00, .1261643557454879e-01, .1381259991601194e+00, + .1337254080889024e-01, .1726770746288135e+00, .1404479965650065e-01, + .2054241214472704e+00, .1464602837670213e-01, .2361779701904081e+00, + .1518698551280871e-01, .2649344026216049e+00, .1567717541900471e-01, + .2918033340368942e+00, + .1612624123496420e-01, .3170079069341164e+00, .1654688879900881e-01, + .3409811920927984e+00, .1696136666824286e-01, .3646547307991162e+00, + .1741546145080310e-01, .3901537483439419e+00, .1800636597179543e-01, + .4223218228522266e+00, .1892881341268367e-01, .4717326233521751e+00, + .6298588439596636e-02, .7638030626687965e-02, .7004655851265844e-02, + .8803453943265294e-02, .3296982845467406e-01, .9818444950365933e-02, + .6656291057106479e-01, .1070595626475817e-01, .1025827278785117e+00, + .1148608766389635e-01, .1385316612194638e+00, .1217575810897931e-01, + .1732125747484649e+00, .1278899412440368e-01, .2060869881923743e+00, + .1333738432024735e-01, .2369597744170469e+00, .1383056388512692e-01, + .2658180187652428e+00, .1427674437223498e-01, .2927507447256686e+00, + .1468343958863289e-01, .3179214676099940e+00, .1505875998976432e-01, + .3415951393087426e+00, .1541407984395701e-01, .3642544652079210e+00, + .1576969712450036e-01, .3868951368176343e+00, .1616644053575092e-01, + .4116861214445555e+00, .1668748198434585e-01, .4433331570075596e+00, + .1749188724059570e-01, .4916033800451471e+00, .5754360678751824e-02, + .6979206263458857e-02, .7016389205940601e-02, .8045335113843407e-02, + .3303423464885706e-01, .8974185166510452e-02, .6670962735009836e-01, + .9786634336394069e-02, + .1028314890330009e+00, .1050097258572427e-01, .1388938643805943e+00, + .1113260003649783e-01, .1736928024956524e+00, .1169428623074936e-01, + .2066843246414360e+00, .1219657523409050e-01, .2376686083847098e+00, + .1264820000840307e-01, .2666274169278879e+00, .1305648757877945e-01, + .2936397261253015e+00, .1342781257742339e-01, .3188429723296673e+00, + .1376825401666917e-01, .3424305607919373e+00, .1408478812041018e-01, + .3646959159353649e+00, .1438768989133101e-01, .3861600014637602e+00, + .1469542216481714e-01, .4078642344326945e+00, .1504419066763009e-01, + .4319869811400004e+00, .1550494890247615e-01, .4630491704469774e+00, + .1620775053166640e-01, .5100139240423402e+00, .5278040811520425e-02, + .6402421198476983e-02, .7026749310824704e-02, .7381444032562888e-02, + .3309125386700502e-01, .8234685519924101e-02, .6683990648107069e-01, + .8981222939541469e-02, .1030531116670419e+00, .9637773923336657e-02, + .1392177117208699e+00, .1021841796444464e-01, .1741238287384007e+00, + .1073483180895483e-01, .2072226942408981e+00, .1119665624742548e-01, + .2383105498941010e+00, .1161186412382382e-01, .2673653866792523e+00, + .1198709958412187e-01, .2944607083863120e+00, .1232800940556657e-01, + .3197217653056301e+00, .1263963481803662e-01, .3433101656487968e+00, + .1292700918588335e-01, + .3654364911202174e+00, .1319625157476125e-01, .3864151426812009e+00, + .1345671217793918e-01, .4067976665874104e+00, .1372517143690529e-01, + .4276578990766819e+00, .1403368592830970e-01, .4511616717492440e+00, + .1444284729184994e-01, .4816264620225250e+00, .1505946839641039e-01, + .5272614695163532e+00, .4487666665675140e-02, .5444990141910759e-02, + .7044130283096086e-02, .6279049188091140e-02, .3318723192008640e-01, + .7006368632847780e-02, .6706002621750721e-01, .7643068862200888e-02, + .1034291291409337e+00, .8203282681027361e-02, .1397696656221023e+00, + .8698916419500412e-02, .1748620369064401e+00, .9139847522019589e-02, + .2081495587015637e+00, .9534232617493163e-02, .2394220617811718e+00, + .9888812556097355e-02, .2686520584410767e+00, .1020918148777924e-01, + .2959071488424056e+00, .1050001965367601e-01, .3213027967445414e+00, + .1076530680194359e-01, .3449782554868110e+00, .1100855051222504e-01, + .3670882760306343e+00, .1123309242673613e-01, .3878099745344409e+00, + .1144260835071195e-01, .4073711108103572e+00, .1164201330179298e-01, + .4261157327362403e+00, .1183914191832676e-01, .4446387149497601e+00, + .1204780719832178e-01, .4640454326093743e+00, .1229306401377462e-01, + .4864269389633110e+00, .1261927726417314e-01, .5156669165861498e+00, + .1309943489239065e-01, + .5586255185473764e+00, .3862975224403902e-02, .4687945053900655e-02, + .7058035858061096e-02, .5407041834964283e-02, .3326430524210259e-01, + .6034411186094848e-02, .6723753885455682e-01, .6583863333832890e-02, + .1037337930420006e+00, .7067509494777436e-02, .1402191813726617e+00, + .7495554804930935e-02, .1754665679972444e+00, .7876466939414612e-02, + .2089130635289459e+00, .8217239718909702e-02, .2403434536707747e+00, + .8523653399761676e-02, .2697261364777181e+00, .8800501778860810e-02, + .2971251237465357e+00, .9051782217229110e-02, .3226519291781493e+00, + .9280855010852164e-02, .3464394048134897e+00, .9490584189896422e-02, + .3686285665457733e+00, .9683478271871005e-02, .3893644369335397e+00, + .9861860805271805e-02, .4088004145802082e+00, .1002812139311295e-01, + .4271141176574624e+00, .1018513471380169e-01, .4445422442202590e+00, + .1033699621003472e-01, .4614490459910935e+00, .1049031549106710e-01, + .4784539901229190e+00, .1065642152893932e-01, .4966599824214358e+00, + .1085488420737215e-01, .5180410345089337e+00, .1111843432827249e-01, + .5460483341177160e+00, .1149782035140485e-01, .5864065338958527e+00, + .3360562419718235e-02, .4078879630499024e-02, .7069329073407106e-02, + .4705262542208223e-02, .3332708647415080e-01, .5251963413756800e-02, + .6738262760022461e-01, + .5730951315737387e-02, .1039837553534775e+00, .6152725177551053e-02, + .1405895253957461e+00, .6526132611753048e-02, .1759668677811218e+00, + .6858515620324401e-02, .2095479655628776e+00, .7155939019582245e-02, + .2411135586103733e+00, .7423415917481789e-02, .2706287495885053e+00, + .7665103884932816e-02, .2981548371545775e+00, .7884467592308588e-02, + .3238009173107087e+00, .8084411667986876e-02, .3476971265301733e+00, + .8267390411961632e-02, .3699801584879876e+00, .8435502610509800e-02, + .3907862310698117e+00, .8590582044778893e-02, .4102493117101150e+00, + .8734298913651078e-02, .4285042785031379e+00, .8868296093454296e-02, + .4456965009415761e+00, .8994399398069297e-02, .4620016328614911e+00, + .9114966064926033e-02, .4776628155317611e+00, .9233473962579847e-02, + .4930576673885005e+00, .9355505324217098e-02, .5088149715467647e+00, + .9490326792694050e-02, .5260104590494338e+00, .9653243364999375e-02, + .5464780715474396e+00, .9868600991484903e-02, .5732601989067468e+00, + .1017225716053114e-01, .6111363239215825e+00, .2950437825487400e-02, + .3581555112941687e-02, .7078620126622295e-02, .4132082643231012e-02, + .3337886298886408e-01, .4612740002118506e-02, .6750261702445300e-01, + .5034004128539568e-02, .1041911190752577e+00, .5405066674282486e-02, + .1408978061674918e+00, + .5733674167146439e-02, .1763848697593524e+00, .6026255228800488e-02, + .2100805343046851e+00, .6288120524548417e-02, .2417622608971423e+00, + .6523660186046708e-02, .2713924596018528e+00, .6736515451660314e-02, + .2990302271326234e+00, .6929720582831246e-02, .3247828257866806e+00, + .7105817882799941e-02, .3487787217481978e+00, .7266950671260499e-02, + .3711526971215219e+00, .7414939513031372e-02, .3920379717842592e+00, + .7551347241996011e-02, .4115626674210771e+00, .7677539108440712e-02, + .4298493831220752e+00, .7794746313920410e-02, .4470176901244603e+00, + .7904145004284749e-02, .4631903418970273e+00, .8006969465604538e-02, + .4785052149162398e+00, .8104689159161024e-02, .4931367316839517e+00, + .8199295885823026e-02, .5073330960096394e+00, .8293770604485683e-02, + .5214794128662904e+00, .8392826136597125e-02, .5362017345344410e+00, + .8504035938797334e-02, .5525322098044688e+00, .8639408222270374e-02, + .5721561451757253e+00, .8817216208331321e-02, .5977434938944347e+00, + .9063189668758037e-02, .6332939739614603e+00, .2611205692460249e-02, + .3170101091465017e-02, .7086356419628467e-02, .3657766349841741e-02, + .3342206181054271e-01, .4083661809252030e-02, .6760295824860309e-01, + .4457037354538724e-02, .1043649740346678e+00, .4786009222605838e-02, + .1411570048315963e+00, + .5077417957619811e-02, .1767374059456163e+00, .5336940476209487e-02, + .2105311844047106e+00, .5569266597573038e-02, .2423131187370251e+00, + .5778273412183262e-02, .2720433970782992e+00, .5967176862421978e-02, + .2997792878733318e+00, .6138656970674597e-02, .3256265499647623e+00, + .6294959076405515e-02, .3497123813254361e+00, .6437975105563999e-02, + .3721703830438909e+00, .6569309029799851e-02, .3931323996098995e+00, + .6690330403814164e-02, .4127244218331418e+00, .6802219694622686e-02, + .4310650456887266e+00, .6906009314473870e-02, .4482657882348953e+00, + .7002625080460826e-02, .4644331547605672e+00, .7092934548851317e-02, + .4796729107857300e+00, .7177811732959676e-02, .4940976831610963e+00, + .7258232689273568e-02, .5078399409574430e+00, .7335424050171227e-02, + .5210737517163408e+00, .7411097366633641e-02, .5340506436534539e+00, + .7487815663348852e-02, .5471575324915496e+00, .7569550927915151e-02, + .5610077596302204e+00, .7662488506257662e-02, .5765785117760304e+00, + .7776079157718089e-02, .5954049494922431e+00, .7924148666854938e-02, + .6198219542319461e+00, .8125409481841734e-02, .6531839888628567e+00, + .2329161903934607e-02, .2827942346666575e-02, .7092767801324573e-02, + .3263256653829519e-02, .3345792087848227e-01, .3643524065941897e-02, + .6768640663901933e-01, + .3976979208186409e-02, .1045098632090649e+00, .4270848280167040e-02, + .1413735187729310e+00, .4531221910361700e-02, .1770326285691667e+00, + .4763154723278143e-02, .2109095929304028e+00, .4970822485283018e-02, + .2427770065864133e+00, .5157677387973698e-02, .2725932360325259e+00, + .5326583047275474e-02, .3004140385861841e+00, .5479926007282439e-02, + .3263439258620141e+00, .5619705807004115e-02, .3505090634425326e+00, + .5747607114086801e-02, .3730421698484556e+00, .5865057476337201e-02, + .3940742505245702e+00, .5973273864880296e-02, .4137303052977993e+00, + .6073300781079440e-02, .4321274134643955e+00, .6166042448892977e-02, + .4493743356584487e+00, .6252291618234036e-02, .4655722399143190e+00, + .6332757862946729e-02, .4808165109947856e+00, .6408099103723341e-02, + .4951999355274510e+00, .6478961616347051e-02, .5088179499753192e+00, + .6546036269964925e-02, .5217771724376283e+00, .6610142518258857e-02, + .5342092003559118e+00, .6672357066182766e-02, .5462927399000752e+00, + .6734211186973384e-02, .5582886150793852e+00, .6797988292026415e-02, + .5705940457094262e+00, .6867157346618580e-02, .5838243594874886e+00, + .6946966207628190e-02, .5989305413025341e+00, .7045163972244657e-02, + .6173557330297905e+00, .7172668498534273e-02, .6412138054673769e+00, + .7343669551813224e-02, + .6734212283950197e+00, .2088962222558656e-02, .2536501141538391e-02, + .7098312096014856e-02, .2927174164471204e-02, .3348897507192802e-01, + .3268517695916878e-02, .6775879346915350e-01, .3567904939390041e-02, + .1046357814625728e+00, .3831806772332035e-02, .1415620734408565e+00, + .4065677361393518e-02, .1772903102475344e+00, .4274043151934446e-02, + .2112406912998520e+00, .4460643560808929e-02, .2431839618927255e+00, + .4628570053481958e-02, .2730769378663360e+00, .4780387068478273e-02, + .3009740811016449e+00, .4918231891978967e-02, .3269788261694700e+00, + .5043895306797768e-02, .3512164460435231e+00, .5158886125836192e-02, + .3738189139504120e+00, .5264482738771292e-02, .3949165867949340e+00, + .5361774417899160e-02, .4146338301275897e+00, .5451694687903237e-02, + .4330869551935628e+00, .5535048699155984e-02, .4503835468466499e+00, + .5612536310885108e-02, .4666226835980815e+00, .5684772523136652e-02, + .4818958265481784e+00, .5752307033652531e-02, .4962883637349025e+00, + .5815645095778566e-02, .5098819947919942e+00, .5875272604331699e-02, + .5227583713586083e+00, .5931689562795883e-02, .5350047139508995e+00, + .5985457948104635e-02, .5467225528673463e+00, .6037272660724469e-02, + .5580413411348073e+00, .6088067820748090e-02, .5691395094905580e+00, + .6139174903693435e-02, + .5802765872262356e+00, .6192552890264469e-02, .5918411775133858e+00, + .6251110114702117e-02, .6044203697962170e+00, .6319123951993900e-02, + .6188952404877303e+00, .6402719127039078e-02, .6365612063366765e+00, + .6510255774185010e-02, .6592545134576846e+00, .6652267840556133e-02, + .6894261807467007e+00, .1884070525273232e-02, .2287865166522269e-02, + .7103061833161608e-02, .2640414555924009e-02, .3351561092037226e-01, + .2948504867845529e-02, .6782096720073962e-01, .3218776897022670e-02, + .1047441025101927e+00, .3457059211747976e-02, .1417245576749319e+00, + .3668264712145178e-02, .1775127832127863e+00, .3856470649104565e-02, + .2115271336150133e+00, .4025045325158119e-02, .2435368006995073e+00, + .4176773382240289e-02, .2734972927884814e+00, .4313964750721690e-02, + .3014619731636417e+00, .4438544635664399e-02, .3275333564649527e+00, + .4552126174118954e-02, .3518359485899692e+00, .4656068554335920e-02, + .3745010840861863e+00, .4751523397588311e-02, .3956585819539499e+00, + .4839471843717534e-02, .4154323324012205e+00, .4920754357241174e-02, + .4339381722015443e+00, .4996094895419632e-02, .4512831048238278e+00, + .5066120791624743e-02, .4675653273310193e+00, .5131379519337958e-02, + .4828747738428288e+00, .5192353422296487e-02, .4972940502928434e+00, + .5249473538511721e-02, + .5108997625078284e+00, .5303133835275671e-02, .5237643599692746e+00, + .5353707549485549e-02, .5359587556465524e+00, .5401567951803124e-02, + .5475561617516223e+00, .5447116802332092e-02, .5586378279840697e+00, + .5490825128586838e-02, .5693017116602867e+00, .5533292803086976e-02, + .5796755768842047e+00, .5575335692614607e-02, .5899366290511978e+00, + .5618111542531525e-02, .6003405110877628e+00, .5663297103480300e-02, + .6112631579002907e+00, .5713326390293707e-02, .6232591473997167e+00, + .5771686951858539e-02, .6371386281547686e+00, .5843235308872718e-02, + .6540591245646711e+00, .5934415308321717e-02, .6756138475691030e+00, + .6053127455671619e-02, .7038679036965546e+00, .1708003175642380e-02, + .2074181532622547e-02, .7107154835723396e-02, .2393937473496849e-02, + .3353858755734360e-01, .2673414535955727e-02, .6787466315584890e-01, + .2918625868457997e-02, .1048377783441727e+00, .3134849526067874e-02, + .1418652820405583e+00, .3326534476511183e-02, .1777057753498972e+00, + .3497372950002969e-02, .2117760550049606e+00, .3650415148383601e-02, + .2438439995727389e+00, .3788182708532486e-02, .2738640090744446e+00, + .3912767381261045e-02, .3018885114907114e+00, .4025912539016479e-02, + .3280192335266340e+00, .4129078986309924e-02, .3523800195135267e+00, + .4223497595500826e-02, + .3751016505461964e+00, .4310211297602812e-02, .3963134824357808e+00, + .4390108627214284e-02, .4161390116668366e+00, .4463950627129625e-02, + .4346937216368967e+00, .4532392561972495e-02, .4520842562952224e+00, + .4596001602217271e-02, .4684083677796514e+00, .4655271425546727e-02, + .4837553218910148e+00, .4710634539896850e-02, .4982065930947042e+00, + .4762473060977909e-02, .5118367810144925e+00, .4811128680431732e-02, + .5247147588413267e+00, .4856912649796014e-02, .5369051384586530e+00, + .4900116799220620e-02, .5484702216816450e+00, .4941026937249812e-02, + .5594727154468603e+00, .4979940477837468e-02, .5699796357324364e+00, + .5017190859382927e-02, .5800680268418966e+00, .5053182300865962e-02, + .5898333966076153e+00, .5088439691236800e-02, .5994021272105722e+00, + .5123679830879367e-02, .6089495614023648e+00, .5159911463507254e-02, + .6187259309040364e+00, .5198571556852845e-02, .6290926122189227e+00, + .5241701843449486e-02, .6405709220757223e+00, .5292158145073340e-02, + .6539038212088008e+00, .5353817484714892e-02, .6701255576222123e+00, + .5431693560278526e-02, .6906222214439113e+00, .5531783368314496e-02, + .7171434625046844e+00, .1486821222610860e-02, .1805710570607849e-02, + .7112315426865264e-02, .2084226678642758e-02, .3356758851849525e-01, + .2327708403877407e-02, + .6794252207314784e-01, .2541382628281658e-02, .1049563283476954e+00, + .2729837665345000e-02, .1420436509870845e+00, .2896941194350830e-02, + .1779508117794810e+00, .3045903028705765e-02, .2120926886975343e+00, + .3179374802697815e-02, .2442355417695174e+00, .3299548613427395e-02, + .2743324022628396e+00, .3408242823717034e-02, .3024345386679296e+00, + .3506972940214846e-02, .3286426953033458e+00, .3597008842757047e-02, + .3530798855126308e+00, .3679420554768286e-02, .3758761896368122e+00, + .3755114750481509e-02, .3971603743636597e+00, .3824863905497256e-02, + .4170554403005484e+00, .3889329651040080e-02, .4356764468047173e+00, + .3949081575434511e-02, .4531296561693286e+00, .4004612453985609e-02, + .4695124355979618e+00, .4056350682593341e-02, .4849135873526999e+00, + .4104670535603563e-02, .4994139167345992e+00, .4149900758174290e-02, + .5130869342770428e+00, .4192331932996859e-02, .5259996460201358e+00, + .4232223028377952e-02, .5382134282701107e+00, .4269807540393116e-02, + .5497850203277219e+00, .4305299690448572e-02, .5607677074343013e+00, + .4338901239307418e-02, .5712128128876574e+00, .4370809641681970e-02, + .5811716792241682e+00, .4401228508048884e-02, .5906984004679025e+00, + .4430381681233268e-02, .5998536784140458e+00, .4458532691684085e-02, + .6087103236556506e+00, + .4486011931533010e-02, .6173611125584528e+00, .4513254549169507e-02, + .6259299431307766e+00, .4540852685066905e-02, .6345874840856066e+00, + .4569625913830092e-02, .6435727138959286e+00, .4600712887286172e-02, + .6532217324580875e+00, .4635683708228730e-02, .6640046346388578e+00, + .4676663849565939e-02, .6765693546213282e+00, .4726442410018883e-02, + .6917869917669843e+00, .4788505706770704e-02, .7107844374668939e+00, + .4866891449054713e-02, .7349355366345482e+00, .1306017463771605e-02, + .1586222301823758e-02, .7116548254584538e-02, .1830990793066982e-02, + .3359140173567671e-01, .2045006139498853e-02, .6799831246271334e-01, + .2232854278235691e-02, .1050539332243899e+00, .2398561178839865e-02, + .1421907384347976e+00, .2545520579058178e-02, .1781532257250431e+00, + .2676548965485182e-02, .2123547392925449e+00, .2793973015829898e-02, + .2445602455405584e+00, .2899716152387136e-02, .2747216803842120e+00, + .2995373840546507e-02, .3028893817005614e+00, .3082275794427197e-02, + .3291633014860622e+00, .3161536205810221e-02, .3536657782024154e+00, + .3234093916059993e-02, .3765263180987164e+00, .3300744456546394e-02, + .3978732008486888e+00, .3362165629048766e-02, .4178290151302299e+00, + .3418937992980868e-02, .4365084718269216e+00, .3471561346521851e-02, + .4540175351893392e+00, + .3520468055585971e-02, .4704533078136206e+00, .3566033899133432e-02, + .4859043358175601e+00, .3608586955892009e-02, .5004511375120722e+00, + .3648414949109787e-02, .5141668418466542e+00, .3685771386301219e-02, + .5271178746069831e+00, .3720880775408019e-02, .5393646641028532e+00, + .3753943164375919e-02, .5509623620882760e+00, .3785138236518451e-02, + .5619615952404358e+00, .3814629199517684e-02, .5724092815186362e+00, + .3842566733485300e-02, .5823495672538734e+00, .3869093316887355e-02, + .5918249678197956e+00, .3894348333795344e-02, .6008778302882713e+00, + .3918474488962536e-02, .6095522840022940e+00, .3941626226723230e-02, + .6178969082896937e+00, .3963981072925327e-02, .6259684294183701e+00, + .3985755098069792e-02, .6338368642128979e+00, .4007224021775936e-02, + .6415926549632834e+00, .4028751796394626e-02, .6493564801329609e+00, + .4050828701392520e-02, .6572925493481835e+00, .4074120789204574e-02, + .6656262309872097e+00, .4099531432075899e-02, .6746666723127143e+00, + .4128272797582476e-02, .6848343774930394e+00, .4161938830162795e-02, + .6966920189552035e+00, .4202559743668019e-02, .7109733150553114e+00, + .4252599514137185e-02, .7285986885865631e+00, .4314833901724070e-02, + .7506571441023483e+00, .1156343000755387e-02, .1404504257957441e-02, + .7120061440091347e-02, + .1621310545540372e-02, .3361118414788869e-01, .1810903712325119e-02, + .6804470745318069e-01, .1977340288814310e-02, .1051351961493040e+00, + .2124181703071103e-02, .1423133589772792e+00, .2254430165931555e-02, + .1783222117476625e+00, .2370577235911165e-02, .2125738546054181e+00, + .2474681149731246e-02, .2448322054772776e+00, .2568443387429520e-02, + .2750483122588739e+00, .2653275289328116e-02, .3032717571879833e+00, + .2730353093366796e-02, .3296018469202774e+00, .2800662377663822e-02, + .3541603675689819e+00, .2865033605362301e-02, .3770763523850850e+00, + .2924170474532069e-02, .3984776764701321e+00, .2978672551304409e-02, + .4184865833334669e+00, .3029053394756756e-02, .4372174902153924e+00, + .3075755134140899e-02, .4547761117084665e+00, .3119160251996799e-02, + .4712593365381469e+00, .3159601161354295e-02, .4867555224942895e+00, + .3197368036290039e-02, .5013450107382228e+00, .3232715256012342e-02, + .5151007425806035e+00, .3265866747398978e-02, .5280889117936882e+00, + .3297020454653708e-02, .5403696166527656e+00, .3326352123823280e-02, + .5519974959907685e+00, .3354018561785408e-02, .5630223474016425e+00, + .3380160512425799e-02, .5734897364461758e+00, .3404905286403203e-02, + .5834416154573392e+00, .3428369285319778e-02, .5929169809805325e+00, + .3450660577239604e-02, + .6019526114875673e+00, .3471881710106394e-02, .6105839432336187e+00, + .3492132995268978e-02, .6188461635645998e+00, .3511516558294448e-02, + .6267756293962285e+00, .3530141542180836e-02, .6344117559126738e+00, + .3548130962196775e-02, .6417995687010485e+00, .3565630852851213e-02, + .6489931729721409e+00, .3582822510857449e-02, .6560604660107810e+00, + .3599938804777734e-02, .6630894993854867e+00, .3617285646093928e-02, + .6701969730666828e+00, .3635269699036237e-02, .6775393849143700e+00, + .3654433055424882e-02, .6853273049469121e+00, .3675494570182433e-02, + .6938429782822218e+00, .3699395273559710e-02, .7034607793792287e+00, + .3727340922414418e-02, .7146686166221225e+00, .3760827388752240e-02, + .7280857713064263e+00, .3801623782166765e-02, .7444684055765861e+00, + .3851675608889073e-02, .7646881040691488e+00, .1031010001534118e-02, + .1252325311246044e-02, .7123010369617354e-02, .1445699377070109e-02, + .3362780174930066e-01, .1614821702453833e-02, .6808371387504373e-01, + .1763306316297053e-02, .1052035845952689e+00, .1894326321527065e-02, + .1424166653656900e+00, .2010556629704488e-02, .1784647514196653e+00, + .2114217175592618e-02, .2127589198858749e+00, .2207141797804957e-02, + .2450622274788554e+00, .2290846453223580e-02, .2753249929535957e+00, + .2366588574329418e-02, + .3035961777269406e+00, .2435416111636774e-02, .3299745572968218e+00, + .2498207136828419e-02, .3545814616992661e+00, .2555701517785104e-02, + .3775455317600242e+00, .2608526182258946e-02, .3989943047683779e+00, + .2657215287010062e-02, .4190497337604562e+00, .2702226368977643e-02, + .4378259868084232e+00, .2743953334055468e-02, .4554285653702798e+00, + .2782736954335406e-02, .4719541760694932e+00, .2818873396984337e-02, + .4874910203110806e+00, .2852621192436532e-02, .5021193021763500e+00, + .2884206960364913e-02, .5159118365654818e+00, .2913830143454304e-02, + .5289346889752990e+00, .2941666946802540e-02, .5412478085861132e+00, + .2967873641281116e-02, .5529056351590590e+00, .2992589359741792e-02, + .5639576722484762e+00, .3015938493650994e-02, .5744490272864715e+00, + .3038032783280771e-02, .5844209250482745e+00, .3058973186216636e-02, + .5939112061179864e+00, .3078851606347056e-02, .6029548271815797e+00, + .3097752568780461e-02, .6115843860580712e+00, .3115754935792624e-02, + .6198307020754208e+00, .3132933775825234e-02, .6277234924693847e+00, + .3149362522988406e-02, .6352921987752219e+00, .3165115600029473e-02, + .6425670346395947e+00, .3180271725033977e-02, .6495803491305275e+00, + .3194918182718492e-02, .6563684284758635e+00, .3209156415539186e-02, + .6629738949529550e+00, + .3223109375845204e-02, .6694489043071365e+00, .3236931170179888e-02, + .6758593906225592e+00, .3250819601641628e-02, .6822906541085610e+00, + .3265032236292007e-02, .6888546193197504e+00, .3279906508904962e-02, + .6956990815908923e+00, .3295884006098741e-02, .7030191567938097e+00, + .3313538195666039e-02, .7110708644516797e+00, .3333603169205194e-02, + .7201861618009667e+00, .3356997989054186e-02, .7307875953685270e+00, + .3384836571738381e-02, .7433987921789071e+00, .3418406731492194e-02, + .7586440923075351e+00, .3459095390889103e-02, .7772269308571649e+00, + .9250365544833106e-03, .1123642957047639e-02, .7125507954787448e-02, + .1297191729022396e-02, .3364188485222631e-01, .1448990578148682e-02, + .6811679517715986e-01, .1582279947362813e-02, .1052616326176499e+00, + .1699905063056458e-02, .1425044323407192e+00, .1804264479385807e-02, + .1785859728026249e+00, .1897348784865108e-02, .2129164803933608e+00, + .1980802350907045e-02, .2452582966079122e+00, .2055984495008354e-02, + .2755611351402767e+00, .2124022707017878e-02, .3038734422531415e+00, + .2185856628127736e-02, .3302935522984499e+00, .2242273566275012e-02, + .3549424157624133e+00, .2293936902368478e-02, .3779483458160068e+00, + .2341408747104221e-02, .3994385963604223e+00, .2385168029019629e-02, + .4195348752453025e+00, + .2425624979060079e-02, .4383511386477932e+00, .2463132778750725e-02, + .4559927053277270e+00, .2497996973377256e-02, .4725561248235422e+00, + .2530483119020393e-02, .4881294636884907e+00, .2560823028544199e-02, + .5027928098555960e+00, .2589219901343181e-02, .5166188766435952e+00, + .2615852559843530e-02, .5296736371549673e+00, .2640878968300298e-02, + .5420169498193963e+00, .2664439173073012e-02, .5537031542330661e+00, + .2686657775798838e-02, .5647816278134981e+00, .2707646029843779e-02, + .5752973009271112e+00, .2727503634730079e-02, .5852911327970665e+00, + .2746320291944519e-02, .5948005537838443e+00, .2764177077984035e-02, + .6038598823048999e+00, .2781147686318178e-02, .6125007272671443e+00, + .2797299589001256e-02, .6207523898606690e+00, .2812695171020565e-02, + .6286422822922934e+00, .2827392896389240e-02, .6361963859104227e+00, + .2841448574941446e-02, .6434397776056558e+00, .2854916813399088e-02, + .6503972618317222e+00, .2867852754331386e-02, .6570941566018360e+00, + .2880314232961717e-02, .6635572959395679e+00, .2892364515113282e-02, + .6698163290468718e+00, .2904075820167642e-02, .6759054182903871e+00, + .2915533879795195e-02, .6818654639717365e+00, .2926843832981620e-02, + .6877470127613112e+00, .2938137802322835e-02, .6936140357564597e+00, + .2949584518825127e-02, + .6995487849121559e+00, .2961401330692262e-02, .7056579402322907e+00, + .2973868789530239e-02, .7120802208967371e+00, .2987347661611534e-02, + .7189955103325420e+00, .3002297518260188e-02, .7266352712733982e+00, + .3019294818352010e-02, .7352935018498777e+00, .3039046378540213e-02, + .7453365750657752e+00, .3062391179964571e-02, .7572088751614536e+00, + .3090279763155639e-02, .7714291475982730e+00, .3123717004293759e-02, + .7885701646946724e+00, .8345540180276686e-03, .1013764009388037e-02, + .7127645881665573e-02, .1170376416196646e-02, .3365394644507796e-01, + .1307373442880687e-02, .6814514556190448e-01, .1427676957022642e-02, + .1053114143093287e+00, .1533852566639599e-02, .1425797600037836e+00, + .1628063138328361e-02, .1786901034175123e+00, .1712103666468225e-02, + .2130519545476170e+00, .1787456941371129e-02, .2454270534974888e+00, + .1855348698944282e-02, .2757646057348834e+00, .1916795617374952e-02, + .3041126250272165e+00, .1972644976800254e-02, .3305690752776119e+00, + .2023606687518786e-02, .3552545878917464e+00, .2070278907560604e-02, + .3782971999927905e+00, .2113168475544262e-02, .3998239259305988e+00, + .2152707223367783e-02, .4199562653334393e+00, .2189265039122685e-02, + .4388079933534241e+00, .2223160371923681e-02, .4564842715530542e+00, + .2254668720923272e-02, + .4730815132757386e+00, .2284029531207622e-02, .4886876674022503e+00, + .2311451825653930e-02, .5033827203854437e+00, .2337118829323729e-02, + .5172392978550550e+00, .2361191787080918e-02, .5303232962672809e+00, + .2383813132113577e-02, .5426945049786824e+00, .2405109129935129e-02, + .5544071973678512e+00, .2425192096951206e-02, .5655106807683926e+00, + .2444162273064263e-02, .5760498017810869e+00, .2462109412745146e-02, + .5860654077087350e+00, .2479114147565534e-02, .5955947674756841e+00, + .2495249164658244e-02, .6046719571441241e+00, .2510580239462893e-02, + .6133282164799120e+00, .2525167157099261e-02, .6215922842757839e+00, + .2539064554606323e-02, .6294907215579771e+00, .2552322716028421e-02, + .6370482335961646e+00, .2564988353967443e-02, .6442880040095037e+00, + .2577105414898926e-02, .6512320574262512e+00, .2588715951514404e-02, + .6579016713460415e+00, .2599861113932935e-02, .6643178633382018e+00, + .2610582323220381e-02, .6705019867831056e+00, .2620922705689986e-02, + .6764764773431096e+00, .2630928885293276e-02, .6822658035386095e+00, + .2640653254172355e-02, .6878976884216645e+00, .2650156867702621e-02, + .6934046853762110e+00, .2659513138546438e-02, .6988262090327137e+00, + .2668812530675645e-02, .7042111407137301e+00, .2678168471535181e-02, + .7096211435207562e+00, + .2687724694622147e-02, .7151348288632315e+00, .2697664171457851e-02, + .7208529025232651e+00, .2708219651065415e-02, .7269043646867752e+00, + .2719685534125355e-02, .7334537129952923e+00, .2732430278157871e-02, + .7407088522578688e+00, .2746907645451310e-02, .7489289818382320e+00, + .2763663754705104e-02, .7584310317783358e+00, .2783335043530471e-02, + .7695921849731747e+00, .2806630086397274e-02, .7828446706602086e+00, + .2834286424739216e-02, .7986575762535248e+00, .7568003719318281e-03, + .9193373558789463e-03, .7129483255703461e-02, .1061389190056637e-02, + .3366431715745472e-01, .1185658720812506e-02, .6816953450862767e-01, + .1294794350315917e-02, .1053542656584974e+00, .1391121645368222e-02, + .1426446444034435e+00, .1476601139740284e-02, .1787798638427945e+00, + .1552859914551620e-02, .2131688271751633e+00, .1621242048290884e-02, + .2455727658693272e+00, .1682858604168091e-02, .2759404560655418e+00, + .1738631136850422e-02, .3043195464558018e+00, .1789327643414803e-02, + .3308076883028777e+00, .1835591597189766e-02, .3555252435875009e+00, + .1877965170693660e-02, .3786000160301540e+00, .1916907758736738e-02, + .4001588169674569e+00, .1952810766576543e-02, .4203229689645817e+00, + .1986009452068925e-02, .4392060925299616e+00, .2016792448794289e-02, + .4569132141578328e+00, + .2045409461693157e-02, .4735406293653057e+00, .2072077518345742e-02, + .4891761844801786e+00, .2096986074148179e-02, .5038997769424400e+00, + .2120301203878496e-02, .5177839552843484e+00, .2142169061433792e-02, + .5308945491240521e+00, .2162718750455528e-02, .5432912893815535e+00, + .2182064718440740e-02, .5550283971155782e+00, .2200308763672422e-02, + .5661551304354499e+00, .2217541726297687e-02, .5767162856210821e+00, + .2233844920932215e-02, .5867526525797927e+00, .2249291357368938e-02, + .5963014271336025e+00, .2263946787643312e-02, .6053965840290423e+00, + .2277870611359356e-02, .6140692154201157e+00, .2291116666449641e-02, + .6223478401763524e+00, .2303733929177061e-02, .6302586899076299e+00, + .2315767145022433e-02, .6378259782215101e+00, .2327257411049353e-02, + .6450721605572670e+00, .2338242730369626e-02, .6520181930839076e+00, + .2348758560479908e-02, .6586838007193958e+00, .2358838379587591e-02, + .6650877664469207e+00, .2368514298725632e-02, .6712482569089239e+00, + .2377817752650840e-02, .6771832029067319e+00, .2386780309439892e-02, + .6829107580966474e+00, .2395434647564189e-02, .6884498650357838e+00, + .2403815760225585e-02, .6938209649667989e+00, .2411962459936224e-02, + .6990468964641347e+00, .2419919271518965e-02, .7041540382931724e+00, + .2427738818137931e-02, + .7091737632918418e+00, .2435484820891955e-02, .7141442820039481e+00, + .2443235844427740e-02, .7191129655073966e+00, .2451089922557623e-02, + .7241392431779231e+00, .2459170177943326e-02, .7292981672564718e+00, + .2467631490367586e-02, .7346847122783368e+00, .2476668140634181e-02, + .7404188178940524e+00, .2486522120258960e-02, .7466510642206331e+00, + .2497491395393781e-02, .7535686551625321e+00, .2509936783254573e-02, + .7614010329283727e+00, .2524285190189721e-02, .7704239097236394e+00, + .2541025785320841e-02, .7809597539113882e+00, .2560694413103588e-02, + .7933718506147267e+00, .2583840650378180e-02, .8080481691101191e+00, + .6694334606038313e-03, .8132301052210061e-03, .7131535707087396e-02, + .9389134630471259e-03, .3367590696807291e-01, .1048872877008853e-02, + .6819680438492585e-01, .1145449798724469e-02, .1054022066039507e+00, + .1230700342275683e-02, .1427172823544694e+00, .1306357911890783e-02, + .1788804222099017e+00, .1373861096813421e-02, .2132998613259399e+00, + .1434398265869949e-02, .2457362721216975e+00, .1488951760223115e-02, + .2761379595225904e+00, .1538336359526358e-02, .3045521719476219e+00, + .1583231069003380e-02, .3310762180672609e+00, .1624204791259703e-02, + .3558301646036297e+00, .1661736860472097e-02, .3789415592809941e+00, + .1696233421123923e-02, + .4005369903859170e+00, .1728040504318892e-02, .4207375854097784e+00, + .1757454499192354e-02, .4396567938240963e+00, .1784730573761186e-02, + .4573994919708219e+00, .1810089479804955e-02, .4740618435452991e+00, + .1833723080526557e-02, .4897315792782505e+00, .1855798864682184e-02, + .5044884954562696e+00, .1876463652712977e-02, .5184050523373731e+00, + .1895846655550170e-02, .5315470026926565e+00, .1914062012192412e-02, + .5439740105721099e+00, .1931210905475803e-02, .5557402385626821e+00, + .1947383334819745e-02, .5668948928266588e+00, .1962659608717758e-02, + .5774827218315940e+00, .1977111607276341e-02, .5875444685962498e+00, + .1990803855373865e-02, .5971172785245406e+00, .2003794439402125e-02, + .6062350661340985e+00, .2016135794604195e-02, .6149288446198813e+00, + .2027875385387674e-02, .6232270224896007e+00, .2039056297414846e-02, + .6311556716380911e+00, .2049717757561867e-02, .6387387713071162e+00, + .2059895595863033e-02, .6459984324868040e+00, .2069622662222278e-02, + .6529551075171532e+00, .2078929209927277e-02, .6596277899957604e+00, + .2087843257818011e-02, .6660342106414446e+00, .2096390943345113e-02, + .6721910355553485e+00, .2104596879732886e-02, .6781140744196829e+00, + .2112484532090143e-02, .6838185076461196e+00, .2120076629662863e-02, + .6893191434072465e+00, + .2127395634587425e-02, .6946307179415828e+00, .2134464291583733e-02, + .6997682556089891e+00, .2141306288121780e-02, .7047475089834524e+00, + .2147947060772256e-02, .7095855038862377e+00, .2154414790705499e-02, + .7143012197281974e+00, .2160741639474206e-02, .7189164418059094e+00, + .2166965284859545e-02, .7234568290808686e+00, .2173130824735037e-02, + .7279532479715103e+00, .2179293122829263e-02, .7324434288116620e+00, + .2185519670818465e-02, .7369740050569291e+00, .2191894031123936e-02, + .7416029929155098e+00, .2198519895768168e-02, .7464027556828451e+00, + .2205525735899346e-02, .7514634645503588e+00, .2213069905688267e-02, + .7568970038541067e+00, .2221345878507691e-02, .7628411564127120e+00, + .2230587003169685e-02, .7694637214568848e+00, .2241069745958558e-02, + .7769659387231029e+00, .2253113820886843e-02, .7855841979737009e+00, + .2267076946734208e-02, .7955885073370143e+00, .2283341347108146e-02, + .8072756369544127e+00, .2302288836034036e-02, .8209544135936097e+00, + .5959608869219697e-03, .7239930216451945e-03, .7133279984105104e-02, + .8359051841424598e-03, .3368576099913345e-01, .9338233700778646e-03, + .6822000216330427e-01, .1019831142421348e-02, .1054430127732599e+00, + .1095758216195270e-02, .1427791507549994e+00, .1163147152914922e-02, + .1789661337538298e+00, + .1223278163696114e-02, .2134116378937676e+00, .1277208785600386e-02, + .2458758686973440e+00, .1325813205911649e-02, .2763067382696023e+00, + .1369816492784942e-02, .3047511618662466e+00, .1409822883247175e-02, + .3313061633300986e+00, .1446338629616970e-02, .3560915640558304e+00, + .1479790274040400e-02, .3792346990474591e+00, .1510539225034315e-02, + .4008619710852165e+00, .1538893395093506e-02, .4210943451273732e+00, + .1565116520065816e-02, .4400451277298846e+00, .1589435653602577e-02, + .4578190692609130e+00, .1612047223434259e-02, .4745122222302962e+00, + .1633121950929719e-02, .4902122192180130e+00, .1652808868600187e-02, + .5049987699443599e+00, .1671238618449212e-02, .5189442584592429e+00, + .1688526174140261e-02, .5321143706133679e+00, .1704773099175760e-02, + .5445687118458739e+00, .1720069429524861e-02, .5563613934916154e+00, + .1734495250750528e-02, .5675415768232118e+00, .1748122025406067e-02, + .5781539706502275e+00, .1761013715337100e-02, .5882392821853880e+00, + .1773227734809691e-02, .5978346230971775e+00, .1784815763538346e-02, + .6069738738486110e+00, .1795824443291854e-02, .6156880099806808e+00, + .1806295977494385e-02, .6240053941930317e+00, .1816268649874427e-02, + .6319520380671680e+00, .1825777275563891e-02, .6395518371737207e+00, + .1834853595977716e-02, + .6468267831733791e+00, .1843526627209035e-02, .6537971564070679e+00, + .1851822970482422e-02, .6604817024077319e+00, .1859767092366030e-02, + .6668977957794100e+00, .1867381581918830e-02, .6730615950017611e+00, + .1874687391723729e-02, .6789881919521959e+00, .1881704069826390e-02, + .6846917603173716e+00, .1888449989971118e-02, .6901857076183885e+00, + .1894942588218185e-02, .6954828363313554e+00, .1901198615070921e-02, + .7005955205839351e+00, .1907234413674205e-02, .7055359061912127e+00, + .1913066236513566e-02, .7103161434075709e+00, .1918710615393293e-02, + .7149486637645913e+00, .1924184802344570e-02, .7194465147858177e+00, + .1929507302533566e-02, .7238237692546146e+00, .1934698524185406e-02, + .7280960290730413e+00, .1939781574913619e-02, .7322810475484290e+00, + .1944783238404899e-02, .7363994980480986e+00, .1949735169676031e-02, + .7404759210790995e+00, .1954675350226750e-02, .7445398854214426e+00, + .1959649844884542e-02, .7486274009877383e+00, .1964714897577384e-02, + .7527826199581922e+00, .1969939389932244e-02, .7570598558183508e+00, + .1975407658858821e-02, .7615259331570643e+00, .1981222619086292e-02, + .7662628484770114e+00, .1987509053119538e-02, .7713706654164001e+00, + .1994416800895364e-02, .7769704756416124e+00, .2002123390500117e-02, + .7832071162571111e+00, + .2010835389853712e-02, .7902511335384258e+00, .2020787431823991e-02, + .7982992156041412e+00, .2032237508156190e-02, .8075719965967809e+00, + .2045456833973120e-02, .8183078136932541e+00, .2060712530690398e-02, + .8307507916355182e+00, .5338928457208802e-03, .6486041055927330e-03, + .7134757145335637e-02, .7488783022520046e-03, .3369410911427631e-01, + .8366191792139075e-03, .6823966328875076e-01, .9136926200367255e-03, + .1054776147161770e+00, .9817372289705743e-03, .1428316413133060e+00, + .1042134467481678e-02, .1790388973189992e+00, .1096030851195136e-02, + .2135065916571426e+00, .1144373475917349e-02, .2459945403613866e+00, + .1187945232547193e-02, .2764503284138904e+00, .1227395462237520e-02, + .3049205940601908e+00, .1263265290388587e-02, .3315021246228428e+00, + .1296008087702652e-02, .3563145379544189e+00, .1326005836926910e-02, + .3794849926333959e+00, .1353582187798311e-02, .4011397375442878e+00, + .1379012879924876e-02, .4213996026736057e+00, .1402534089465843e-02, + .4403777756781442e+00, .1424349141395722e-02, .4581789018294929e+00, + .1444633933714447e-02, .4748989405223802e+00, .1463541343583908e-02, + .4906254417290438e+00, .1481204825549461e-02, .5054380418632013e+00, + .1497741365648968e-02, .5194090599684319e+00, .1513253919449596e-02, + .5326041243428160e+00, + .1527833434485045e-02, .5450827895910497e+00, .1541560536285142e-02, + .5568991222679660e+00, .1554506940716115e-02, .5681022442899654e+00, + .1566736642551277e-02, .5787368298952323e+00, .1578306920207553e-02, + .5888435558143096e+00, .1589269188760702e-02, .5984595065104622e+00, + .1599669727196656e-02, .6076185375122531e+00, .1609550300992578e-02, + .6163516003945891e+00, .1618948697263611e-02, .6246870331241742e+00, + .1627899186642147e-02, .6326508194315294e+00, .1636432923609736e-02, + .6402668207058439e+00, .1644578295050302e-02, .6475569836949800e+00, + .1652361225240263e-02, .6545415270716049e+00, .1659805444262448e-02, + .6612391097238539e+00, .1666932725870720e-02, .6676669834625878e+00, + .1673763100099416e-02, .6738411327196651e+00, .1680315045376260e-02, + .6797764037527307e+00, .1686605664538830e-02, .6854866258810527e+00, + .1692650848960719e-02, .6909847273635962e+00, .1698465434958682e-02, + .6962828487057689e+00, .1704063356777271e-02, .7013924564580136e+00, + .1709457800739110e-02, .7063244609630222e+00, .1714661365618782e-02, + .7110893420369401e+00, .1719686234962450e-02, .7156972872545727e+00, + .1724544367953908e-02, .7201583483730915e+00, .1729247716543003e-02, + .7244826224989144e+00, .1733808477926433e-02, .7286804659046311e+00, + .1738239393121469e-02, + .7327627499609472e+00, .1742554104306060e-02, .7367411704788124e+00, + .1746767585796486e-02, .7406286238588718e+00, .1750896665936375e-02, + .7444396657879347e+00, .1754960659646605e-02, .7481910707203003e+00, + .1758982133685755e-02, .7519025128611727e+00, .1762987828362212e-02, + .7555973915123057e+00, .1767009759806471e-02, .7593038249053531e+00, + .1771086524820975e-02, .7630558361569231e+00, .1775264824037991e-02, + .7668947513550588e+00, .1779601206067178e-02, .7708708209501843e+00, + .1784164011861242e-02, .7750450585439046e+00, .1789035459753730e-02, + .7794912616154927e+00, .1794313751342973e-02, .7842981311142257e+00, + .1800114989664162e-02, .7895713343902400e+00, .1806574577713146e-02, + .7954352514919308e+00, .1813847605191753e-02, .8020340030828954e+00, + .1822107542131273e-02, .8095311799649906e+00, .1831542366827648e-02, + .8181074940047334e+00, .1842347120393410e-02, .8279553875468303e+00, + .1854711901010908e-02, .8392695503623823e+00, .4691372119147557e-03, + .5699474625461372e-03, .7136296792849224e-02, .6580754336890405e-03, + .3370281338535284e-01, .7351932064547252e-03, .6826017144205968e-01, + .8029397345236971e-03, .1055137237879695e+00, .8627543786402343e-03, + .1428864460309730e+00, .9158506408206921e-03, .1791149115084724e+00, + .9632356479495138e-03, + .2136058483079311e+00, .1005741352235223e-02, .2461186723532833e+00, + .1044055462224991e-02, .2766006332016539e+00, .1078748370226813e-02, + .3050980855476346e+00, .1110295406319466e-02, .3317075749743232e+00, + .1139094812215725e-02, .3565485115490737e+00, .1165482118715345e-02, + .3797478738863422e+00, .1189741614017051e-02, .4014317539275095e+00, + .1212115499934443e-02, .4217208439626945e+00, .1232811224277848e-02, + .4407282102151493e+00, .1252007377470389e-02, .4585583904118685e+00, + .1269858457651580e-02, .4753072483903950e+00, .1286498741428814e-02, + .4910622490186240e+00, .1302045444889013e-02, .5059029528099534e+00, + .1316601318761973e-02, .5199016110853500e+00, .1330256790211312e-02, + .5331237917441728e+00, .1343091739511245e-02, .5456289955944984e+00, + .1355176981171679e-02, .5574712413729396e+00, .1366575504600436e-02, + .5686996086005114e+00, .1377343518145096e-02, .5793587340271479e+00, + .1387531331581560e-02, .5894892612975623e+00, .1397184105238413e-02, + .5991282456659598e+00, .1406342488530390e-02, .6083095167442896e+00, + .1415043166390284e-02, .6170640027934311e+00, .1423319328684793e-02, + .6254200202131955e+00, .1431201074983781e-02, .6334035318149531e+00, + .1438715764876940e-02, .6410383772701038e+00, .1445888322283529e-02, + .6483464788808477e+00, + .1452741500792328e-02, .6553480255553266e+00, .1459296115932730e-02, + .6620616376107076e+00, .1465571249361709e-02, .6685045147893643e+00, + .1471584429214883e-02, .6746925696634154e+00, .1477351790282003e-02, + .6806405484266425e+00, .1482888217204235e-02, .6863621409335069e+00, + .1488207473534721e-02, .6918700817451654e+00, .1493322319242184e-02, + .6971762438844605e+00, .1498244619060822e-02, .7022917269886535e+00, + .1502985443992799e-02, .7072269415837240e+00, .1507555168249840e-02, + .7119916912919050e+00, .1511963563977790e-02, .7165952549304837e+00, + .1516219896245011e-02, .7210464706718194e+00, .1520333020996940e-02, + .7253538247205133e+00, .1524311488991586e-02, .7295255473336399e+00, + .1528163659142506e-02, .7335697194752111e+00, .1531897825216204e-02, + .7374943939689233e+00, .1535522360469415e-02, .7413077357064542e+00, + .1539045885576599e-02, .7450181862940887e+00, .1542477466093639e-02, + .7486346594874230e+00, .1545826846727079e-02, .7521667748753935e+00, + .1549104730812699e-02, .7556251385226099e+00, .1552323114613247e-02, + .7590216806350385e+00, .1555495687246740e-02, .7623700617184821e+00, + .1558638308120671e-02, .7656861600411088e+00, .1561769574454004e-02, + .7689886543012415e+00, .1564911491470015e-02, .7722997159327905e+00, + .1568090256606748e-02, + .7756458249739051e+00, .1571337165828147e-02, .7790587211550291e+00, + .1574689643692269e-02, .7825764967678216e+00, .1578192387667105e-02, + .7862448284470696e+00, .1581898599185298e-02, .7901183291700260e+00, + .1585871246475873e-02, .7942619768635446e+00, .1590184264311382e-02, + .7987525387422443e+00, .1594923540574454e-02, .8036798573342322e+00, + .1600187467232215e-02, .8091477920349469e+00, .1606086745205357e-02, + .8152745179862013e+00, .1612743036112452e-02, .8221917759509073e+00, + .1620285966641179e-02, .8300425555166407e+00, .1628847946012576e-02, + .8389766067695471e+00, .1638556304338204e-02, .8491431596995497e+00, + .4152983993727092e-03, .5045486166497230e-03, .7137584516676377e-02, + .5825747502812775e-03, .3371009582559231e-01, .6508564339714855e-03, + .6827733616228911e-01, .7108440797559780e-03, .1055439591076286e+00, + .7638115008710665e-03, .1429323580617065e+00, .8108326421179146e-03, + .1791786256178479e+00, .8527988118498596e-03, .2136890926697665e+00, + .8904462894848839e-03, .2462228452780043e+00, .9243836974156776e-03, + .2767268570137912e+00, .9551158310881699e-03, .3052472497196298e+00, + .9830633537396637e-03, .3318803708195339e+00, .1008578703487142e-02, + .3567454603219721e+00, .1031958817701520e-02, .3799693497349148e+00, + .1053455282818112e-02, + .4016780028151404e+00, .1073282437929197e-02, .4219919994202545e+00, + .1091623864253886e-02, .4410243065866673e+00, .1108637603920062e-02, + .4588793741064279e+00, .1124460377322258e-02, .4756529875379346e+00, + .1139211008944395e-02, .4914325418394411e+00, .1152993225032100e-02, + .5062975349402129e+00, .1165897950461469e-02, .5203201620487163e+00, + .1178005204347923e-02, .5335659407189512e+00, .1189385672505494e-02, + .5460943265934672e+00, .1200102018320324e-02, .5579592979271204e+00, + .1210209980791963e-02, .5692098980166754e+00, .1219759298541784e-02, + .5798907312704116e+00, .1228794490820103e-02, .5900424125337194e+00, + .1237355520454566e-02, .5997019714820298e+00, .1245478358886877e-02, + .6089032150489527e+00, .1253195469650359e-02, .6176770513802826e+00, + .1260536223624142e-02, .6260517789476357e+00, .1267527256990541e-02, + .6340533443783142e+00, .1274192780889601e-02, .6417055723602077e+00, + .1280554850208162e-02, .6490303707240170e+00, .1286633597682126e-02, + .6560479135277237e+00, .1292447438469551e-02, .6627768046927827e+00, + .1298013249521533e-02, .6692342244811717e+00, .1303346527400884e-02, + .6754360608644642e+00, .1308461527646537e-02, .6813970276241349e+00, + .1313371388331951e-02, .6871307708378881e+00, .1318088240100810e-02, + .6926499652502783e+00, + .1322623304669488e-02, .6979664018971263e+00, .1326986983552337e-02, + .7030910682519399e+00, .1331188938584919e-02, .7080342220886105e+00, + .1335238165685898e-02, .7128054602082953e+00, .1339143063206245e-02, + .7174137831602817e+00, .1342911496162030e-02, .7218676570980016e+00, + .1346550857633121e-02, .7261750739540748e+00, .1350068128634278e-02, + .7303436111948426e+00, .1353469937828520e-02, .7343804925285762e+00, + .1356762622556962e-02, .7382926510963945e+00, .1359952292807390e-02, + .7420867968756576e+00, .1363044899939134e-02, .7457694902776256e+00, + .1366046312228174e-02, .7493472242304510e+00, .1368962399598178e-02, + .7528265174113487e+00, .1371799130263930e-02, .7562140217340938e+00, + .1374562682436201e-02, .7595166477149035e+00, .1377259574721566e-02, + .7627417119340626e+00, .1379896819392827e-02, .7658971114809663e+00, + .1382482103293908e-02, .7689915310079312e+00, .1385024001753947e-02, + .7720346888027838e+00, .1387532231477270e-02, .7750376290830836e+00, + .1390017948880056e-02, .7780130684490018e+00, .1392494100651911e-02, + .7809758049987551e+00, .1394975833264466e-02, .7839431988406547e+00, + .1397480967482131e-02, .7869357323732872e+00, .1400030542294373e-02, + .7899776573739077e+00, .1402649429581176e-02, .7930977330965135e+00, + .1405367015557528e-02, + .7963300544867956e+00, .1408217936717937e-02, .7997149612640727e+00, + .1411242845492577e-02, .8033000057004371e+00, .1414489162825236e-02, + .8071409378596117e+00, .1418011750045248e-02, .8113026400715047e+00, + .1421873399672547e-02, .8158599058260445e+00, .1426145003995468e-02, + .8208979110240450e+00, .1430905213100405e-02, .8265121682023010e+00, + .1436239345537763e-02, .8328076907174900e+00, .1442237275146430e-02, + .8398970330439564e+00, .1448990003811190e-02, .8478968323160648e+00, + .1456584666833031e-02, .8569224819892680e+00, .3704312646343119e-03, + .4500459652486567e-03, .7138650748115411e-02, .5196512293102546e-03, + .3371612727399277e-01, .5805664280060180e-03, .6829155668533947e-01, + .6340849446568049e-03, .1055690170651003e+00, .6813427081724704e-03, + .1429704232383565e+00, .7232974239492588e-03, .1792314731911011e+00, + .7607439326118729e-03, .2137581723047245e+00, .7943388257980795e-03, + .2463093367632228e+00, .8246248539513288e-03, .2768317147355182e+00, + .8520521766292996e-03, .3053712382217758e+00, .8769959255269664e-03, + .3320240933589542e+00, .8997703900142133e-03, .3569093819512950e+00, + .9206403645220593e-03, .3801538161111002e+00, .9398302000432457e-03, + .4018832556603875e+00, .9575310308788060e-03, .4222181893493448e+00, + .9739065619456522e-03, + .4412715038513685e+00, .9890977229041295e-03, .4591475776827830e+00, + .1003226429225417e-02, .4759421328870969e+00, .1016398637371945e-02, + .4917425076000317e+00, .1028706839793818e-02, .5066281487544273e+00, + .1040232113307033e-02, .5206712056814181e+00, .1051045809625145e-02, + .5339371545956020e+00, .1061210957702222e-02, .5464854138565951e+00, + .1070783432788909e-02, .5583699280903157e+00, .1079812935679248e-02, + .5696397102784545e+00, .1088343816748556e-02, .5803393375366302e+00, + .1096415772455089e-02, .5905094001856708e+00, .1104064436547561e-02, + .6001869059172129e+00, .1111321883943327e-02, .6094056420120871e+00, + .1118217061857135e-02, .6181964990928702e+00, .1124776160068879e-02, + .6265877600346048e+00, .1131022930068676e-02, .6346053575793632e+00, + .1136978961092068e-02, .6422731040006305e+00, .1142663919667303e-02, + .6496128959041625e+00, .1148095758170784e-02, .6566448969707471e+00, + .1153290896971796e-02, .6633877011656901e+00, .1158264384001310e-02, + .6698584786727629e+00, .1163030034968892e-02, .6760731065636836e+00, + .1167600556950560e-02, .6820462859911614e+00, .1171987657658222e-02, + .6877916474950851e+00, .1176202142362038e-02, .6933218458373045e+00, + .1180254000157654e-02, .6986486456296808e+00, .1184152481040773e-02, + .7037829988914664e+00, + .1187906165063826e-02, .7087351155643580e+00, .1191523024697338e-02, + .7135145279256490e+00, .1195010481397003e-02, .7181301497708876e+00, + .1198375457282797e-02, .7225903311867283e+00, .1201624422765785e-02, + .7269029097019594e+00, .1204763440909706e-02, .7310752585900764e+00, + .1207798209286642e-02, .7351143331006848e+00, .1210734100078424e-02, + .7390267154202931e+00, .1213576199187821e-02, .7428186592069160e+00, + .1216329345156313e-02, .7464961346090013e+00, .1218998168739366e-02, + .7500648747695434e+00, .1221587134066625e-02, .7535304249333266e+00, + .1224100582415115e-02, .7568981954218305e+00, .1226542779750137e-02, + .7601735199195562e+00, .1228917969342930e-02, .7633617207306558e+00, + .1231230430958390e-02, .7664681829190014e+00, .1233484548321435e-02, + .7694984395410563e+00, .1235684886817594e-02, .7724582705209949e+00, + .1237836283660978e-02, .7753538181016055e+00, .1239943953067019e-02, + .7781917222296842e+00, .1242013609290138e-02, .7809792796931293e+00, + .1244051610712973e-02, .7837246313034256e+00, .1246065128479356e-02, + .7864369818849385e+00, .1248062343408890e-02, .7891268582478557e+00, + .1250052675057249e-02, .7918064106168962e+00, .1252047046705140e-02, + .7944897630608011e+00, .1254058189642781e-02, .7971934181681546e+00, + .1256100989185991e-02, + .7999367203284967e+00, .1258192873167162e-02, .8027423802037812e+00, + .1260354240858018e-02, .8056370599049799e+00, .1262608925972372e-02, + .8086520134810325e+00, .1264984681034516e-02, .8118237698928188e+00, + .1267513661363494e-02, .8151948348470072e+00, .1270232874562430e-02, + .8188143727609828e+00, .1273184545147458e-02, .8227388097836817e+00, + .1276416323542609e-02, .8270322725064919e+00, .1279981244520295e-02, + .8317667447053557e+00, .1283937313921567e-02, .8370217873957335e+00, + .1288346577738765e-02, .8428836291187909e+00, .1293273510746542e-02, + .8494434005718798e+00, .1298782562596834e-02, .8567942719004841e+00, + .1304934730786103e-02, .8650272688993226e+00, .3247324487808653e-03, + .3945315229438140e-03, .7139767532965116e-02, .4555578699667749e-03, + .3372244637254624e-01, .5089677216150194e-03, .6830646000320411e-01, + .5558945983563953e-03, .1055952873791690e+00, .5973340508520150e-03, + .1430103457525390e+00, .6341254407194094e-03, .1792869234600663e+00, + .6669653938797302e-03, .2138306885390802e+00, .6964293711881412e-03, + .2464001780084456e+00, .7229930587138452e-03, .2769419073380583e+00, + .7470509916283250e-03, .3055016129403092e+00, .7689319468807855e-03, + .3321753151236530e+00, .7889113759410096e-03, .3570819738779806e+00, + .8072213501811222e-03, + .3803481790268297e+00, .8240584940970029e-03, .4020996841123463e+00, + .8395903192560990e-03, .4224568848461668e+00, .8539602966613761e-03, + .4415325859147346e+00, .8672919359416600e-03, .4594310931563854e+00, + .8796920818161035e-03, .4762480638503880e+00, .8912535918781442e-03, + .4920707781580621e+00, .9020575233992923e-03, .5069786309167420e+00, + .9121749286872399e-03, .5210437244980383e+00, .9216683368023415e-03, + .5343314926832955e+00, .9305929826843983e-03, .5469013154214589e+00, + .9389978318087510e-03, .5588071025313237e+00, .9469264384779324e-03, + .5700978354396460e+00, .9544176680744464e-03, .5808180626619678e+00, + .9615063075283847e-03, .5910083486194518e+00, .9682235834936652e-03, + .6007056775836025e+00, .9745976039775797e-03, .6099438156993251e+00, + .9806537362012611e-03, .6187536345605122e+00, .9864149311092719e-03, + .6271633999553797e+00, .9919020030614374e-03, .6351990293204530e+00, + .9971338717269585e-03, .6428843212420017e+00, .1002127771980826e-02, + .6502411600835498e+00, .1006899436614548e-02, .6572896985355157e+00, + .1011463255869661e-02, .6640485206005014e+00, .1015832417146389e-02, + .6705347872580487e+00, .1020019027701906e-02, .6767643668025705e+00, + .1024034222710236e-02, .6827519516206730e+00, .1027888260690500e-02, + .6885111629699746e+00, + .1031590608007845e-02, .6940546451402459e+00, .1035150013900340e-02, + .6993941502179868e+00, .1038574577276322e-02, .7045406145358273e+00, + .1041871806352736e-02, .7095042277666803e+00, .1045048672060125e-02, + .7142944955177615e+00, .1048111656019274e-02, .7189202961898697e+00, + .1051066793794383e-02, .7233899327913630e+00, .1053919714044959e-02, + .7277111803329067e+00, .1056675674131018e-02, .7318913293773558e+00, + .1059339592671662e-02, .7359372262783432e+00, .1061916079514346e-02, + .7398553106107196e+00, .1064409463539858e-02, .7436516502756216e+00, + .1066823818705570e-02, .7473319747524817e+00, .1069162988716224e-02, + .7509017069698120e+00, .1071430610707160e-02, .7543659942763458e+00, + .1073630138329335e-02, .7577297390145481e+00, .1075764864638867e-02, + .7609976292302569e+00, .1077837945216411e-02, .7641741700960905e+00, + .1079852421973832e-02, .7672637166832609e+00, .1081811248148003e-02, + .7702705087876981e+00, .1083717315034678e-02, .7731987086032039e+00, + .1085573481080025e-02, .7760524421380459e+00, .1087382604024221e-02, + .7788358453933391e+00, .1089147576881027e-02, .7815531164629429e+00, + .1090871368639801e-02, .7842085748763442e+00, .1092557070691845e-02, + .7868067296884163e+00, .1094207950110233e-02, .7893523580223542e+00, + .1095827511049306e-02, + .7918505959922322e+00, .1097419565672728e-02, .7943070441648366e+00, + .1098988316160812e-02, .7967278899584393e+00, .1100538449478067e-02, + .7991200496055508e+00, .1102075246684770e-02, .8014913325065773e+00, + .1103604708628230e-02, .8038506309404848e+00, .1105133699816469e-02, + .8062081381315597e+00, .1106670112111886e-02, .8085755975333251e+00, + .1108223049519360e-02, .8109665857911905e+00, .1109803034693859e-02, + .8133968310607946e+00, .1111422236740111e-02, .8158845670237690e+00, + .1113094718271409e-02, .8184509208406880e+00, .1114836697350123e-02, + .8211203301382262e+00, .1116666816628120e-02, .8239209796093340e+00, + .1118606407495873e-02, .8268852415235039e+00, .1120679731089786e-02, + .8300500959832002e+00, .1122914170403457e-02, .8334574957353697e+00, + .1125340338439976e-02, .8371546264999228e+00, .1127992056534935e-02, + .8411939971620041e+00, .1130906145334969e-02, .8456332754097852e+00, + .1134121959793832e-02, .8505347650275864e+00, .1137680591275090e-02, + .8559644039843292e+00, .1141623657948933e-02, .8619901524142233e+00, + .1145991613898916e-02, .8686796434054859e+00, .2875557040695001e-03, + .3493682107340224e-03, .7140652840633392e-02, .4034136512140228e-03, + .3372745678580264e-01, .4507156263114678e-03, .6831827979235850e-01, + .4922776751319498e-03, + .1056161282055053e+00, .5289812044432154e-03, .1430420271934089e+00, + .5615693465755460e-03, .1793309426893349e+00, .5906588650957148e-03, + .2138882776015863e+00, .6167592500442515e-03, .2464723498787023e+00, + .6402916548621664e-03, .2770294926804611e+00, .6616053847329528e-03, + .3056052894425374e+00, .6809915244670573e-03, .3322956309926026e+00, + .6986939459404484e-03, .3572193667731841e+00, .7149181133975426e-03, + .3805029914283647e+00, .7298381072985964e-03, .4022721758944257e+00, + .7436022322429452e-03, .4226472436509502e+00, .7563375079342728e-03, + .4417409357850834e+00, .7681532808226864e-03, .4596575017826150e+00, + .7791441427437137e-03, .4764925487070491e+00, .7893923017930954e-03, + .4923333117464571e+00, .7989695184985524e-03, .5072591452826548e+00, + .8079386954131118e-03, .5213421151585618e+00, .8163551890154100e-03, + .5346476220690836e+00, .8242678979707145e-03, .5472350159192663e+00, + .8317201703560293e-03, .5591581791948586e+00, .8387505635876626e-03, + .5704660684234719e+00, .8453934839008121e-03, .5812032094226068e+00, + .8516797268548300e-03, .5914101459193340e+00, .8576369361234619e-03, + .6011238433265917e+00, .8632899945099273e-03, .6103780506208373e+00, + .8686613584996434e-03, .6192036237904337e+00, .8737713455743161e-03, + .6276288144678238e+00, + .8786383818419734e-03, .6356795272806593e+00, .8832792161976796e-03, + .6433795492571826e+00, .8877091061492647e-03, .6507507543610395e+00, + .8919419795673447e-03, .6578132859480015e+00, .8959905759071083e-03, + .6645857196542167e+00, .8998665698679513e-03, .6710852089553721e+00, + .9035806799802425e-03, .6773276153852716e+00, .9071427642160033e-03, + .6833276251737907e+00, .9105619043959713e-03, .6890988538586815e+00, + .9138464808966333e-03, .6946539402426604e+00, .9170042389371524e-03, + .7000046309052734e+00, .9200423475395102e-03, .7051618563365225e+00, + .9229674520990890e-03, .7101357996343394e+00, .9257857213720340e-03, + .7149359585989350e+00, .9285028895757936e-03, .7195712019621512e+00, + .9311242942067709e-03, .7240498204076717e+00, .9336549101012279e-03, + .7283795729669328e+00, .9360993802001778e-03, .7325677293146301e+00, + .9384620434241330e-03, .7366211084358048e+00, .9407469600177421e-03, + .7405461140927553e+00, .9429579346863432e-03, .7443487674837327e+00, + .9450985378153066e-03, .7480347374559778e+00, .9471721250379737e-03, + .7516093686126949e+00, .9491818553984218e-03, .7550777076367228e+00, + .9511307083407467e-03, .7584445281427596e+00, .9530214997467334e-03, + .7617143543649362e+00, .9548568972384669e-03, .7648914839873381e+00, + .9566394349615138e-03, + .7679800104318763e+00, .9583715280677518e-03, .7709838449309258e+00, + .9600554871248025e-03, .7739067387317117e+00, .9616935326914640e-03, + .7767523058059454e+00, .9632878103157287e-03, .7795240464721949e+00, + .9648404062341729e-03, .7822253723804877e+00, .9663533640789765e-03, + .7848596333593397e+00, .9678287029319074e-03, .7874301466854236e+00, + .9692684371035443e-03, .7899402294061247e+00, .9706745980610887e-03, + .7923932344258478e+00, .9720492589794330e-03, .7947925911586078e+00, + .9733945624476692e-03, .7971418516523020e+00, .9747127519265526e-03, + .7994447432038601e+00, .9760062076207416e-03, .8017052286081833e+00, + .9772774875013603e-03, .8039275753153862e+00, .9785293742870215e-03, + .8061164349067315e+00, .9797649292608988e-03, .8082769344340225e+00, + .9809875538617746e-03, .8104147812911904e+00, .9822010600294816e-03, + .8125363833872510e+00, .9834097502974072e-03, .8146489864477286e+00, + .9846185085894264e-03, .8167608302603168e+00, .9858329025720856e-03, + .8188813255629256e+00, .9870592982031829e-03, .8210212529979992e+00, + .9883049867630125e-03, .8231929850588618e+00, .9895783241000432e-03, + .8254107311438275e+00, .9908888810000608e-03, .8276908045991552e+00, + .9922476024127977e-03, .8300519088320196e+00, .9936669716440181e-03, + .8325154370399047e+00, + .9951611734340783e-03, .8351057766377819e+00, .9967462469844777e-03, + .8378506048585280e+00, .9984402163659223e-03, .8407811560526175e+00, + .1000263181294734e-02, .8439324337673380e+00, .1002237346041166e-02, + .8473433317092810e+00, .1004386958434913e-02, .8510566173745598e+00, + .1006738125009853e-02, .8551187210241215e+00, .1009318463085570e-02, + .8595792618934147e+00, .1012156547280817e-02, .8644902349222623e+00, + .1015281108386375e-02, .8699047776816512e+00, .1018719948988823e-02, + .8758754423894201e+00, .2516072353014572e-03, .3056959967091976e-03, + .7141513331248321e-02, .3529898095786411e-03, .3373232773731790e-01, + .3943840897337921e-03, .6832977329356830e-01, .4307567414106005e-03, + .1056363991444212e+00, .4628788405472162e-03, .1430728515532258e+00, + .4914005032824914e-03, .1793737852691615e+00, .5168612968898808e-03, + .2139443476569179e+00, .5397069428251232e-03, .2465426458452338e+00, + .5603058824394920e-03, .2771148378485354e+00, .5789637011504982e-03, + .3057063604036936e+00, .5959350504603019e-03, .3324129804044311e+00, + .6114332776489099e-03, .3573534416826857e+00, .6256381290223384e-03, + .3806541481236008e+00, .6387018947049087e-03, .4024406920346254e+00, + .6507543147370997e-03, .4228333282534617e+00, .6619065080162839e-03, + .4419447375155043e+00, + .6722541319677103e-03, .4598791158936434e+00, .6818799359437668e-03, + .4767320228947860e+00, .6908558354114982e-03, .4925906511342484e+00, + .6992446058387721e-03, .5075343166976332e+00, .7071012733743214e-03, + .5216350508314642e+00, .7144742625858456e-03, .5349582228611499e+00, + .7214063485450536e-03, .5475631541591855e+00, .7279354505312647e-03, + .5595037011924066e+00, .7340952968696949e-03, .5708287967136168e+00, + .7399159843938746e-03, .5815829447836500e+00, .7454244513185431e-03, + .5918066692004921e+00, .7506448786223955e-03, .6015369171138536e+00, + .7555990321360334e-03, .6108074207645846e+00, .7603065552321395e-03, + .6196490208139152e+00, .7647852201872223e-03, .6280899548719071e+00, + .7690511448239667e-03, .6361561147571614e+00, .7731189798710006e-03, + .6438712758203572e+00, .7770020715316172e-03, .6512573014043507e+00, + .7807126029873436e-03, .6583343252310160e+00, .7842617179394069e-03, + .6651209142221997e+00, .7876596287823588e-03, .6716342139918672e+00, + .7909157115868082e-03, .6778900789954702e+00, .7940385897245874e-03, + .6839031890937339e+00, .7970362076856718e-03, .6896871540821554e+00, + .7999158964005718e-03, .6952546075538913e+00, .8026844311858064e-03, + .7006172913010297e+00, .8053480832662807e-03, .7057861313157792e+00, + .8079126656911606e-03, + .7107713063270146e+00, .8103835743445347e-03, .7155823096970855e+00, + .8127658246549895e-03, .7202280054070732e+00, .8150640845261530e-03, + .7247166787741906e+00, .8172827039407797e-03, .7290560824713176e+00, + .8194257416320207e-03, .7332534783544617e+00, .8214969891654706e-03, + .7373156755481164e+00, .8234999927330391e-03, .7412490651900622e+00, + .8254380729235324e-03, .7450596521952805e+00, .8273143427041148e-03, + .7487530843625872e+00, .8291317238207998e-03, .7523346791167432e+00, + .8308929618041609e-03, .7558094481526250e+00, .8326006397480466e-03, + .7591821202261264e+00, .8342571910138194e-03, .7624571623184618e+00, + .8358649110001742e-03, .7656387993861767e+00, .8374259681086725e-03, + .7687310328982383e+00, .8389424140275449e-03, .7717376583539388e+00, + .8404161934509115e-03, .7746622819709052e+00, .8418491533472557e-03, + .7775083367312447e+00, .8432430518896748e-03, .7802790979757885e+00, + .8445995671611185e-03, .7829776987415892e+00, .8459203057504956e-03, + .7856071450464104e+00, .8472068113602371e-03, .7881703313360623e+00, + .8484605735526905e-03, .7906700563263103e+00, .8496830367716911e-03, + .7931090394909276e+00, .8508756097868982e-03, .7954899384715712e+00, + .8520396757221188e-03, .7978153677138051e+00, .8531766028449862e-03, + .8000879186670883e+00, + .8542877563141193e-03, .8023101819251651e+00, .8553745111013562e-03, + .8044847717273021e+00, .8564382663308516e-03, .8066143532903718e+00, + .8574804613037265e-03, .8087016734969329e+00, .8585025935063833e-03, + .8107495955250247e+00, .8595062389322027e-03, .8127611380708978e+00, + .8604930750795124e-03, .8147395198853895e+00, .8614649070224791e-03, + .8166882104165335e+00, .8624236969844256e-03, .8186109874227465e+00, + .8633715978728290e-03, .8205120024888089e+00, .8643109912587642e-03, + .8223958554353771e+00, .8652445302964463e-03, .8242676786542088e+00, + .8661751880747444e-03, .8261332324148928e+00, .8671063118639506e-03, + .8279990121599971e+00, .8680416836568219e-03, .8298723687144858e+00, + .8689855872887505e-03, .8317616421559534e+00, .8699428822395237e-03, + .8336763097907850e+00, .8709190839453324e-03, .8356271482143981e+00, + .8719204500557906e-03, .8376264087468918e+00, .8729540715222103e-03, + .8396880045621392e+00, .8740279666600877e-03, .8418277064895145e+00, + .8751511753462460e-03, .8440633426727417e+00, .8763338492436154e-03, + .8464149949224021e+00, .8775873323529088e-03, .8489051816016571e+00, + .8789242242430914e-03, .8515590131598368e+00, .8803584160127719e-03, + .8544043019385164e+00, .8819050864333951e-03, .8574716026611897e+00, + .8835806429514380e-03, + .8607941542532526e+00, .8854025895229178e-03, .8644076876951290e+00, + .8873893010135113e-03, .8683500591389794e+00, .8895596827024104e-03, + .8726606635323475e+00, .8919326940631082e-03, .8773795829320804e+00, + .8945267194288890e-03, .8825464274388153e+00, .2223192652822833e-03, + .2701145057190040e-03, .7142201961578917e-02, .3119065510375409e-03, + .3373622651253249e-01, .3484864321264339e-03, .6833897467046082e-01, + .3806297364820721e-03, .1056526311462410e+00, .4090176838012951e-03, + .1430975404471804e+00, .4342246342064952e-03, .1794081097583843e+00, + .4567272828059632e-03, .2139892833907438e+00, .4769194148963887e-03, + .2465990011834060e+00, .4951265406555741e-03, .2771832823761325e+00, + .5116186382371054e-03, .3057874476558851e+00, .5266206864730374e-03, + .3325071660393497e+00, .5403211724599088e-03, .3574610980955170e+00, + .5528788972227103e-03, .3807755762784305e+00, .5644284045399661e-03, + .4025761311147353e+00, .5750843154180597e-03, .4229829635932437e+00, + .5849447992701323e-03, .4421087071714556e+00, .5940943654599883e-03, + .4600575161312302e+00, .6026061192146514e-03, .4769249128064807e+00, + .6105435941597527e-03, .4927980565571165e+00, .6179622488629170e-03, + .5077562335628903e+00, .6249106954973403e-03, .5218714480507487e+00, + .6314317138679972e-03, + .5352090448328407e+00, .6375630925795459e-03, .5478283229614227e+00, + .6433383302749551e-03, .5597831185164269e+00, .6487872230220317e-03, + .5711223455807324e+00, .6539363586005573e-03, .5818904910810551e+00, + .6588095342876049e-03, .5921280630645866e+00, .6634281114812186e-03, + .6018719941845592e+00, .6678113179369536e-03, .6111560033299172e+00, + .6719765063612168e-03, .6200109188606474e+00, .6759393764906060e-03, + .6284649670553408e+00, .6797141664962577e-03, .6365440293006893e+00, + .6833138185165486e-03, .6442718713535327e+00, .6867501222863375e-03, + .6516703477465010e+00, .6900338401544602e-03, .6587595841259685e+00, + .6931748162308895e-03, .6655581400283747e+00, .6961820719554190e-03, + .6720831543307668e+00, .6990638900109890e-03, .6783504753604156e+00, + .7018278882011304e-03, .6843747774195197e+00, .7044810846600041e-03, + .6901696652750492e+00, .7070299555552817e-03, .6957477679800600e+00, + .7094804862707378e-03, .7011208232299629e+00, .7118382169105868e-03, + .7062997533135355e+00, .7141082828461975e-03, .7112947335920807e+00, + .7162954509237486e-03, .7161152543292093e+00, .7184041518653100e-03, + .7207701765965301e+00, .7204385093230375e-03, .7252677828954485e+00, + .7224023659844375e-03, .7296158230608452e+00, .7242993070741803e-03, + .7338215559473337e+00, + .7261326815532289e-03, .7378917873419190e+00, .7279056212778734e-03, + .7418329044971879e+00, .7296210583486120e-03, .7456509076357754e+00, + .7312817408508591e-03, .7493514387389932e+00, .7328902471654914e-03, + .7529398078995253e+00, .7344489990066897e-03, .7564210174894084e+00, + .7359602733269230e-03, .7597997843696403e+00, .7374262132138434e-03, + .7630805603462782e+00, .7388488378909974e-03, .7662675510594492e+00, + .7402300519233290e-03, .7693647334760027e+00, .7415716537192339e-03, + .7723758721433454e+00, .7428753434132293e-03, .7753045343511121e+00, + .7441427302069922e-03, .7781541043385911e+00, .7453753392414597e-03, + .7809277966791060e+00, .7465746180687906e-03, .7836286689677923e+00, + .7477419427901918e-03, .7862596339363163e+00, .7488786239238555e-03, + .7888234711170709e+00, .7499859120665148e-03, .7913228381802210e+00, + .7510650034123837e-03, .7937602820697135e+00, .7521170451945067e-03, + .7961382500690559e+00, .7531431411158165e-03, .7984591009343806e+00, + .7541443568405107e-03, .8007251162411515e+00, .7551217256207493e-03, + .8029385121019574e+00, .7560762541391865e-03, .8051014514262963e+00, + .7570089286545360e-03, .8072160569092491e+00, .7579207215452834e-03, + .8092844249546161e+00, .7588125983558522e-03, .8113086407595959e+00, + .7596855254600513e-03, + .8132907948125792e+00, .7605404784685073e-03, .8152330010832001e+00, + .7613784515200193e-03, .8171374172145180e+00, .7622004676113267e-03, + .8190062670610542e+00, .7630075901355534e-03, .8208418659532486e+00, + .7638009358163845e-03, .8226466491084072e+00, .7645816892425407e-03, + .8244232036498043e+00, .7653511192248359e-03, .8261743047383627e+00, + .7661105972153171e-03, .8279029563638637e+00, .7668616180436525e-03, + .8296124373828724e+00, .7676058232385866e-03, .8313063534256175e+00, + .7683450272099249e-03, .8329886953198786e+00, .7690812465664271e-03, + .8346639046910128e+00, .7698167328335732e-03, .8363369473861753e+00, + .7705540088076615e-03, .8380133953277569e+00, .7712959087329680e-03, + .8396995173132502e+00, .7720456224088709e-03, .8414023791296488e+00, + .7728067432140554e-03, .8431299531191393e+00, .7735833198629735e-03, + .8448912369930949e+00, .7743799114709090e-03, .8466963812112370e+00, + .7752016451809944e-03, .8485568235840266e+00, .7760542751796868e-03, + .8504854288745331e+00, .7769442413753351e-03, .8524966300217779e+00, + .7778787253163293e-03, .8546065661289764e+00, .7788657000623884e-03, + .8568332105076614e+00, .7799139696833306e-03, .8591964798032911e+00, + .7810331928461635e-03, .8617183125335791e+00, .7822338835880836e-03, + .8644227022726899e+00, + .7835273809189877e-03, .8673356673041829e+00, .7849257774604757e-03, + .8704851350330805e+00, .7864417960824488e-03, .8739007161188697e+00, + .7880886026971684e-03, .8776133406687649e+00, .7898795433580249e-03, + .8816547276255949e+00, .7918277950171212e-03, .8860566596308294e+00, + .7939459222137213e-03, .8908500402679119e+00, .1944104808172863e-03, + .2362079689279158e-03, .7142870645995927e-02, .2727565493010114e-03, + .3374001298187475e-01, .3047478195749429e-03, .6834791269705135e-01, + .3328598979745383e-03, .1056684019862271e+00, .3576884028469226e-03, + .1431215337265024e+00, .3797355245930193e-03, .1794414760981541e+00, + .3994180621642384e-03, .2140329776183974e+00, .4170803229573239e-03, + .2466538170423533e+00, .4330069180398755e-03, .2772498801896881e+00, + .4474339038008580e-03, .3058663763636773e+00, .4605579911155484e-03, + .3325988808094674e+00, .4725439839337465e-03, .3575659744772789e+00, + .4835307298323497e-03, .3808939216502081e+00, .4936358667461324e-03, + .4027081940104168e+00, .5029596128586884e-03, .4231289413573305e+00, + .5115878016710237e-03, .4422687522901076e+00, .5195943228286058e-03, + .4602317415082190e+00, .5270430946153614e-03, .4771133961932997e+00, + .5339896662637906e-03, .4930008443009192e+00, .5404825264865527e-03, + .5079733438010129e+00, + .5465641777837335e-03, .5221028734536996e+00, .5522720230787040e-03, + .5354547549768437e+00, .5576391012124826e-03, .5480882663954187e+00, + .5626947000884556e-03, .5600572245757691e+00, .5674648702683609e-03, + .5714105259898375e+00, .5719728571649507e-03, .5821926413793687e+00, + .5762394663436609e-03, .5924440638839293e+00, .5802833735974854e-03, + .6022017124008726e+00, .5841213892159104e-03, .6114992931083616e+00, + .5877686840933180e-03, .6203676226097062e+00, .5912389839103901e-03, + .6288349163028890e+00, .5945447364939478e-03, .6369270455027728e+00, + .5976972565551031e-03, .6446677666447656e+00, .6007068512753596e-03, + .6520789256394533e+00, .6035829296188047e-03, .6591806401656133e+00, + .6063340977673600e-03, .6659914624065441e+00, .6089682426829690e-03, + .6725285244645835e+00, .6114926054781716e-03, .6788076684377859e+00, + .6139138460109964e-03, .6848435629139552e+00, .6162380999006194e-03, + .6906498074313085e+00, .6184710289781289e-03, .6962390262713238e+00, + .6206178660351128e-03, .7016229527864589e+00, .6226834546060953e-03, + .7068125053216800e+00, .6246722844146502e-03, .7118178556622645e+00, + .6265885230237052e-03, .7166484908292960e+00, .6284360441552101e-03, + .7213132689469173e+00, .6302184530805945e-03, .7258204698201126e+00, + .6319391094293539e-03, + .7301778407871102e+00, .6336011477170803e-03, .7343926383451021e+00, + .6352074958549976e-03, .7384716659907177e+00, .6367608918694911e-03, + .7424213086665331e+00, .6382638990313429e-03, .7462475641609494e+00, + .6397189195696667e-03, .7499560717702578e+00, .6411282071242605e-03, + .7535521384979339e+00, .6424938780717482e-03, .7570407630365846e+00, + .6438179218450410e-03, .7604266577520003e+00, .6451022103519516e-03, + .7637142688659893e+00, .6463485065869407e-03, .7669077950147200e+00, + .6475584725197199e-03, .7700112043418378e+00, .6487336763355520e-03, + .7730282502703713e+00, .6498755990944187e-03, .7759624860841656e+00, + .6509856408696007e-03, .7788172784380622e+00, .6520651264205267e-03, + .7815958199061201e+00, .6531153104498718e-03, .7843011406686931e+00, + .6541373824907589e-03, .7869361194320170e+00, .6551324714664429e-03, + .7895034936680300e+00, .6561016499619955e-03, .7920058692573547e+00, + .6570459382452019e-03, .7944457296146663e+00, .6579663080720945e-03, + .7968254443729997e+00, .6588636863112547e-03, .7991472777018847e+00, + .6597389584201900e-03, .8014133963335314e+00, .6605929718067311e-03, + .8036258773716017e+00, .6614265391084759e-03, .8057867159584249e+00, + .6622404414238483e-03, .8078978328788472e+00, .6630354315293254e-03, + .8099610821822974e+00, + .6638122371188470e-03, .8119782589091303e+00, .6645715641033481e-03, + .8139511070129370e+00, .6653141000107842e-03, .8158813275773382e+00, + .6660405175299570e-03, .8177705874338766e+00, .6667514782449204e-03, + .8196205282970527e+00, .6674476366107756e-03, .8214327765433879e+00, + .6681296442262653e-03, .8232089537737035e+00, .6687981544637654e-03, + .8249506883116352e+00, .6694538275230569e-03, .8266596278067956e+00, + .6700973359816298e-03, .8283374531279623e+00, .6707293709212047e-03, + .8299858937501699e+00, .6713506487175973e-03, .8316067448595304e+00, + .6719619185889133e-03, .8332018864208099e+00, .6725639710052013e-03, + .8347733044749573e+00, .6731576470708964e-03, .8363231149564427e+00, + .6737438489993667e-03, .8378535903427503e+00, .6743235518061943e-03, + .8393671894697208e+00, .6748978163539151e-03, .8408665908653167e+00, + .6754678038850311e-03, .8423547299689948e+00, .6760347921811532e-03, + .8438348406117731e+00, .6766001934827970e-03, .8453105011300979e+00, + .6771655742948708e-03, .8467856854705638e+00, .6777326771850360e-03, + .8482648196070496e+00, .6783034446530447e-03, .8497528435300649e+00, + .6788800451053436e-03, .8512552789714525e+00, .6794649009063182e-03, + .8527783028853924e+00, .6800607183903050e-03, .8543288265058851e+00, + .6806705196006733e-03, + .8559145795259218e+00, .6812976753667025e-03, .8575441985760543e+00, + .6819459391275817e-03, .8592273186991227e+00, .6826194806570309e-03, + .8609746659004745e+00, .6833229185231614e-03, .8627981480750792e+00, + .6840613497285638e-03, .8647109406514445e+00, .6848403745099397e-03, + .8667275621282101e+00, .6856661137341258e-03, .8688639333027147e+00, + .6865452157148281e-03, .8711374124074637e+00, .6874848486099405e-03, + .8735667966111717e+00, .6884926738773655e-03, .8761722784739423e+00, + .6895767956239815e-03, .8789753440908044e+00, .6907456801615706e-03, + .8819985980014631e+00, .6920080398012621e-03, .8852654987569412e+00, + .6933726750250028e-03, .8887999886800295e+00, .6948482698509175e-03, + .8926260022952612e+00, .6964431366613300e-03, .8967668406721245e+00, + .1687522084062742e-03, .2050350430521891e-03, .7143489225104815e-02, + .2367622652786059e-03, .3374351625166600e-01, .2645340906026387e-03, + .6835618366232366e-01, .2889390544558335e-03, .1056829987008023e+00, + .3104940979691790e-03, .1431437456375445e+00, .3296350786177901e-03, + .1794723727318731e+00, .3467237429868135e-03, .2140734485464243e+00, + .3620589217153205e-03, .2467046039766637e+00, .3758876341573480e-03, + .2773116025546536e+00, .3884147581578293e-03, .3059395516583021e+00, + .3998110227339366e-03, + .3326839408735750e+00, .4102194641152033e-03, .3576632785546656e+00, + .4197605903284232e-03, .3810037669469621e+00, .4285365009823915e-03, + .4028308242884812e+00, .4366341766023805e-03, .4232645539797606e+00, + .4441281128435874e-03, .4424175040394658e+00, .4510824389517647e-03, + .4603937534270471e+00, .4575526297479205e-03, .4772887576403662e+00, + .4635868963219365e-03, .4931896163747717e+00, .4692273217485011e-03, + .5081755622500646e+00, .4745107935135632e-03, .5223185511672184e+00, + .4794697730555439e-03, .5356838841319745e+00, .4841329341264508e-03, + .5483308203204026e+00, .4885256949620448e-03, .5603131593778051e+00, + .4926706640505523e-03, .5716797819868060e+00, .4965880152488166e-03, + .5824751443673352e+00, .5002958048415423e-03, .5927397262665235e+00, + .5038102406673260e-03, .6025104342019820e+00, .5071459114881099e-03, + .6118209628858234e+00, .5103159832377398e-03, .6207021182846412e+00, + .5133323675598979e-03, .6291821059168485e+00, .5162058670665758e-03, + .6372867879128392e+00, .5189463009622880e-03, .6450399121650791e+00, + .5215626140454308e-03, .6524633166362534e+00, .5240629715848113e-03, + .6595771116117261e+00, .5264548421517410e-03, .6663998424002746e+00, + .5287450701469129e-03, .6729486347171443e+00, .5309399394814304e-03, + .6792393247326799e+00, + .5330452296408964e-03, .6852865755411093e+00, .5350662651709710e-03, + .6911039815981985e+00, .5370079594647384e-03, .6967041624928251e+00, + .5388748536006167e-03, .7020988472546843e+00, .5406711508695714e-03, + .7072989502566063e+00, .5424007475382063e-03, .7123146396434907e+00, + .5440672603167729e-03, .7171553991088069e+00, .5456740509357201e-03, + .7218300837422168e+00, .5472242481790601e-03, .7263469705865458e+00, + .5487207676758462e-03, .7307138044675716e+00, .5501663297110800e-03, + .7349378395946277e+00, .5515634752832511e-03, .7390258773726449e+00, + .5529145806065207e-03, .7429843008159668e+00, .5542218702305272e-03, + .7468191059101640e+00, .5554874289292619e-03, .7505359302293567e+00, + .5567132124919160e-03, .7541400790825443e+00, .5579010575325747e-03, + .7576365494325465e+00, .5590526904217706e-03, .7610300518048510e+00, + .5601697354308826e-03, .7643250303805051e+00, .5612537221699207e-03, + .7675256814467769e+00, .5623060923901496e-03, .7706359703613220e+00, + .5633282062150818e-03, .7736596471697186e+00, .5643213478564601e-03, + .7766002610022336e+00, .5652867308658178e-03, .7794611733633313e+00, + .5662255029669265e-03, .7822455704165419e+00, .5671387505098367e-03, + .7849564743577130e+00, .5680275025831865e-03, .7875967539612229e+00, + .5688927348179374e-03, + .7901691343763252e+00, .5697353729126355e-03, .7926762062443136e+00, + .5705562959076292e-03, .7951204342015494e+00, .5713563392333756e-03, + .7975041648285145e+00, .5721362975559819e-03, .7998296341008703e+00, + .5728969274414421e-03, .8020989743949635e+00, .5736389498586027e-03, + .8043142210972835e+00, .5743630525397174e-03, .8064773188650033e+00, + .5750698922165000e-03, .8085901275829018e+00, .5757600967488519e-03, + .8106544280606480e+00, .5764342671629149e-03, .8126719275136132e+00, + .5770929796147660e-03, .8146442648700572e+00, .5777367872959363e-03, + .8165730159477090e+00, .5783662222969873e-03, .8184596985434300e+00, + .5789817974456180e-03, .8203057774808211e+00, .5795840081362118e-03, + .8221126696623233e+00, .5801733341683536e-03, .8238817491745800e+00, + .5807502416126773e-03, .8256143524986065e+00, .5813151847234263e-03, + .8273117838796568e+00, .5818686079183535e-03, .8289753209156332e+00, + .5824109478480398e-03, .8306062204274619e+00, .5829426355783928e-03, + .8322057246800982e+00, .5834640989120021e-03, .8337750680287443e+00, + .5839757648761716e-03, .8353154840714917e+00, .5844780624078450e-03, + .8368282133969516e+00, .5849714252682631e-03, .8383145120235179e+00, + .5854562952230521e-03, .8397756606357110e+00, .5859331255265216e-03, + .8412129747325485e+00, + .5864023847522156e-03, .8426278158130220e+00, .5868645610151844e-03, + .8440216037344282e+00, .5873201666349592e-03, .8453958303903652e+00, + .5877697432917324e-03, .8467520748664289e+00, .5882138677316644e-03, + .8480920202427393e+00, .5886531580803781e-03, .8494174722229419e+00, + .5890882808263732e-03, .8507303797787185e+00, .5895199585379871e-03, + .8520328580063178e+00, .5899489783783064e-03, .8533272133961881e+00, + .5903762014816018e-03, .8546159717171726e+00, .5908025732518324e-03, + .8559019087112308e+00, .5912291346377758e-03, .8571880837811911e+00, + .5916570344294526e-03, .8584778768299521e+00, .5920875426055483e-03, + .8597750283715609e+00, .5925220647400795e-03, .8610836829786467e+00, + .5929621574468788e-03, .8624084360518852e+00, .5934095448005555e-03, + .8637543837896255e+00, .5938661356200435e-03, .8651271760926207e+00, + .5943340414329835e-03, .8665330719519609e+00, .5948155948529893e-03, + .8679789966288171e+00, .5953133679941353e-03, .8694725996326263e+00, + .5958301904145430e-03, .8710223121296252e+00, .5963691659207649e-03, + .8726374019561603e+00, .5969336873744813e-03, .8743280238622816e+00, + .5975274484218217e-03, .8761052619650037e+00, .5981544508145503e-03, + .8779811606467382e+00, .5988190057157910e-03, .8799687393004150e+00, + .5995257270899495e-03, + .8820819854186045e+00, .6002795149823573e-03, .8843358195863941e+00, + .6010855262223838e-03, .8867460250263935e+00, .6019491298677465e-03, + .8893291335470804e+00, .6028758445922773e-03, .8921022591848045e+00, + .6038712552612013e-03, .8950828706648276e+00, .6049409062046725e-03, + .8982884942350033e+00, .6060901692668508e-03, .9017363396754307e+00, + .1481251565099711e-03, .1799742621307956e-03, .7143974934319647e-02, + .2078249765617697e-03, .3374626735466673e-01, .2322040770469374e-03, + .6836267972058510e-01, .2536281024389343e-03, .1056944648470500e+00, + .2725507603509361e-03, .1431611968300346e+00, .2893545952483257e-03, + .1794966519846322e+00, .3043571067937865e-03, .2141052583069300e+00, + .3178205747305427e-03, .2467445313185863e+00, .3299618049127232e-03, + .2773601392459256e+00, .3409606161517330e-03, .3059971101361032e+00, + .3509668551995601e-03, .3327508670011682e+00, .3601060630945735e-03, + .3577398618615326e+00, .3684840080409944e-03, .3810902489006329e+00, + .3761903012944965e-03, .4029274050222500e+00, .3833012841788339e-03, + .4233713978033811e+00, .3898823401138323e-03, .4425347439853034e+00, + .3959897539743794e-03, .4605214950272289e+00, .4016722146902933e-03, + .4774270820870889e+00, .4069720358522181e-03, .4933385831828130e+00, + .4119261525257769e-03, + .5083352115151812e+00, .4165669396400193e-03, .5224889054945915e+00, + .4209228874124991e-03, .5358649502937634e+00, .4250191616382618e-03, + .5485225906897057e+00, .4288780707755034e-03, .5605156131771370e+00, + .4325194571969843e-03, .5718928863819531e+00, .4359610264298928e-03, + .5826988554317172e+00, .4392186254392934e-03, .5929739898366225e+00, + .4423064788406665e-03, .6027551866407443e+00, .4452373902181403e-03, + .6120761317679944e+00, .4480229143725210e-03, .6209676230156103e+00, + .4506735052476993e-03, .6294578582946426e+00, .4531986434246486e-03, + .6375726926413187e+00, .4556069463824008e-03, .6453358673250855e+00, + .4579062641690959e-03, .6527692141203824e+00, .4601037626756183e-03, + .6598928375275065e+00, .4622059963377751e-03, .6667252774457851e+00, + .4642189717935211e-03, .6732836545324753e+00, .4661482037761131e-03, + .6795838002301146e+00, .4679987643218002e-03, .6856403732164480e+00, + .4697753262034514e-03, .6914669638252581e+00, .4714822013627870e-03, + .6970761878028088e+00, .4731233749983658e-03, .7024797706018147e+00, + .4747025358699538e-03, .7076886232711463e+00, .4762231032989864e-03, + .7127129108730295e+00, .4776882512767774e-03, .7175621142484538e+00, + .4791009300347118e-03, .7222450858541227e+00, .4804638853820701e-03, + .7267701003089459e+00, + .4817796760758937e-03, .7311449002133155e+00, .4830506894522046e-03, + .7353767377389203e+00, .4842791555179398e-03, .7394724124294618e+00, + .4854671596773276e-03, .7434383056023196e+00, .4866166542444491e-03, + .7472804116970708e+00, .4877294688748149e-03, .7510043668780048e+00, + .4888073200324911e-03, .7546154751637144e+00, .4898518195952196e-03, + .7581187323268813e+00, .4908644826877864e-03, .7615188477809879e+00, + .4918467348233061e-03, .7648202646474365e+00, .4927999184228891e-03, + .7680271781760355e+00, .4937252987761405e-03, .7711435526736958e+00, + .4946240694979417e-03, .7741731370801548e+00, .4954973575308488e-03, + .7771194793153748e+00, .4963462277370809e-03, .7799859395107068e+00, + .4971716871193750e-03, .7827757022247849e+00, .4979746887058557e-03, + .7854917877352522e+00, .4987561351304407e-03, .7881370624886681e+00, + .4995168819371097e-03, .7907142487831792e+00, .5002577406335545e-03, + .7932259337516524e+00, .5009794815172498e-03, .7956745777068556e+00, + .5016828362948059e-03, .7980625219048639e+00, .5023685005135441e-03, + .8003919957780823e+00, .5030371358225455e-03, .8026651236850512e+00, + .5036893720789472e-03, .8048839312204863e+00, .5043258093139596e-03, + .8070503511257529e+00, .5049470195719527e-03, .8091662288371395e+00, + .5055535486349787e-03, + .8112333277068590e+00, .5061459176442604e-03, .8132533339296184e+00, + .5067246246294598e-03, .8152278612058557e+00, .5072901459559465e-03, + .8171584551713140e+00, .5078429376997978e-03, .8190465976214947e+00, + .5083834369598832e-03, .8208937105586977e+00, .5089120631160979e-03, + .8227011600888023e+00, .5094292190426258e-03, .8244702601946616e+00, + .5099352922850141e-03, .8262022764129838e+00, .5104306562098391e-03, + .8278984294418413e+00, .5109156711358289e-03, .8295598987064962e+00, + .5113906854554846e-03, .8311878259120602e+00, .5118560367565149e-03, + .8327833186126263e+00, .5123120529527563e-03, .8343474538279233e+00, + .5127590534347159e-03, .8358812817402723e+00, .5131973502504269e-03, + .8373858295066677e+00, .5136272493279681e-03, .8388621052231878e+00, + .5140490517517615e-03, .8403111020816669e+00, .5144630551056335e-03, + .8417338027616508e+00, .5148695548966082e-03, .8431311841041218e+00, + .5152688460744951e-03, .8445042221173288e+00, .5156612246635426e-03, + .8458538973693004e+00, .5160469895237514e-03, .8471812008262565e+00, + .5164264442608728e-03,.8484871402011642e+00, .5167998993056541e-03, + .8497727468820885e+00, .5171676741845232e-03, .8510390835157447e+00, + .5175301000056107e-03, .8522872523277160e+00, .5178875221857676e-03, + .8535184042670900e+00, + .5182403034460151e-03, .8547337490696901e+00, .5185888271046153e-03, + .8559345663404898e+00, .5189335006986103e-03, .8571222177620127e+00, + .5192747599661662e-03, .8582981605412726e+00, .5196130732232652e-03, + .8594639622127785e+00, .5199489461690734e-03, .8606213169188581e+00, + .5202829271545004e-03, .8617720632905069e+00, .5206156129478311e-03, + .8629182040514101e+00, .5209476550295670e-03, .8640619274638366e+00, + .5212797664454193e-03, .8652056307266341e+00, .5216127292413131e-03, + .8663519454211874e+00, .5219474024967696e-03, .8675037650792340e+00, + .5222847309624981e-03, .8686642749148173e+00, .5226257542936992e-03, + .8698369837189167e+00, .5229716168515654e-03, .8710257578565097e+00, + .5233235780207398e-03, .8722348572285707e+00, .5236830229588920e-03, + .8734689729618574e+00, .5240514736547882e-03, .8747332664628638e+00, + .5244306001218837e-03, .8760334093141518e+00, .5248222314940908e-03, + .8773756232962860e+00, .5252283667175941e-03, .8787667195815746e+00, + .5256511844461572e-03, .8802141358619505e+00, .5260930516464654e-03, + .8817259698386895e+00, .5265565303044835e-03, .8833110071141399e+00, + .5270443814944088e-03, .8849787410860012e+00, .5275595659308863e-03, + .8867393819581020e+00, .5281052399771031e-03, .8886038514594998e+00, + .5286847459332971e-03, + .8905837593259870e+00, .5293015952926587e-03, .8926913570756628e+00, + .5299594435392922e-03, .8949394641477838e+00, .5306620549953031e-03, + .8973413611324083e+00, .5314132562256762e-03, .8999106446760794e+00, + .5322168766096216e-03, .9026610388027025e+00, .5330766749183085e-03, + .9056061579514983e+00, .5339962511354281e-03, .9087592181279729e+00, + .1291672658807919e-03, .1569411415132314e-03, .7144429374444041e-02, + .1812286696375032e-03, .3374884163870904e-01, .2024891487895646e-03, + .6836875906346668e-01, .2211729609091939e-03, .1057051970576302e+00, + .2376757078934563e-03, .1431775337300160e+00, .2523309440420044e-03, + .1795193851821314e+00, .2654155096114621e-03, .2141350485529856e+00, + .2771580968905830e-03, .2467819320733997e+00, .2877477478365611e-03, + .2774056154477370e+00, .2973412539386665e-03, .3060510531385813e+00, + .3060692727883761e-03, .3328136064982617e+00, .3140412687616450e-03, + .3578116754563008e+00, .3213494654089220e-03, .3811713698313008e+00, + .3280719982928522e-03, .4030180284424702e+00, .3342754323013638e-03, + .4234716859228214e+00, .3400167776073826e-03, .4426448303068433e+00, + .3453451109288780e-03, .4606414878637722e+00, .3503028857160415e-03, + .4775570675004032e+00, .3549269964559184e-03, .4934786274558236e+00, + .3592496478431822e-03, + .5084853632454121e+00, .3632990683734921e-03, .5226491973781846e+00, + .3671000992804959e-03, .5360354006553708e+00, .3706746830802694e-03, + .5487032048025572e+00, .3740422708473267e-03, .5607063844089743e+00, + .3772201633670793e-03, .5720937971957492e+00, .3802237982173855e-03, + .5829098782647340e+00, .3830669924186714e-03, .5931950878770883e+00, + .3857621484003172e-03, .6029863145180096e+00, .3883204295409269e-03, + .6123172361692740e+00, .3907519103608007e-03, .6212186432401899e+00, + .3930657055071256e-03, .6297187267546153e+00, .3952700809230814e-03, + .6378433353164356e+00, .3973725499905643e-03, .6456162041780895e+00, + .3993799569511753e-03, .6530591594781886e+00, .4012985495172340e-03, + .6601923004327613e+00, .4031340422649590e-03, .6670341619826434e+00, + .4048916721408514e-03, .6736018601298540e+00, .4065762471981460e-03, + .6799112219451941e+00, .4081921895038212e-03, .6859769020007800e+00, + .4097435730108617e-03, .6918124867754874e+00, .4112341570695012e-03, + .6974305883977158e+00, .4126674161504436e-03, .7028429289271262e+00, + .4140465662688992e-03, .7080604162333366e+00, .4153745885277149e-03, + .7130932124031323e+00, .4166542501385347e-03, .7179507954967295e+00, + .4178881232298605e-03, .7226420153762622e+00, .4190786017085115e-03, + .7271751442443414e+00, + .4202279164050269e-03, .7315579224557873e+00, .4213381487029441e-03, + .7357976001001488e+00, .4224112428257702e-03, .7399009747952365e+00, + .4234490169331078e-03, .7438744260815747e+00, .4244531731582231e-03, + .7477239467635279e+00, .4254253067028491e-03, .7514551715040853e+00, + .4263669140908001e-03, .7550734029462083e+00, .4272794006696848e-03, + .7585836356036648e+00, .4281640874393643e-03, .7619905777378661e+00, + .4290222172765655e-03, .7652986714139369e+00, .4298549606170237e-03, + .7685121109086968e+00, .4306634206495281e-03, .7716348596250679e+00, + .4314486380701255e-03, .7746706656513523e+00, .4322115954393903e-03, + .7776230760895890e+00, .4329532211809737e-03, .7804954502645794e+00, + .4336743932555310e-03, .7832909719139642e+00, .4343759425404994e-03, + .7860126604497781e+00, .4350586559430094e-03, .7886633813730524e+00, + .4357232792703970e-03, .7912458559151491e+00, .4363705198802944e-03, + .7937626699724827e+00, .4370010491300795e-03, .7962162823950203e+00, + .4376155046435118e-03, .7986090326833559e+00, .4382144924106579e-03, + .8009431481441662e+00, .4387985887356742e-03, .8032207505493939e+00, + .4393683420456565e-03, .8054438623405243e+00, .4399242745725549e-03, + .8076144124157677e+00, .4404668839190812e-03, .8097342415347859e+00, + .4409966445185832e-03, + .8118051073727768e+00, .4415140089980146e-03, .8138286892532131e+00, + .4420194094523807e-03, .8158065925862987e+00, .4425132586383796e-03, + .8177403530382282e+00, .4429959510943727e-03, .8196314404545940e+00, + .4434678641933102e-03, .8214812625597571e+00, .4439293591347870e-03, + .8232911684526717e+00, .4443807818820194e-03, .8250624519185151e+00, + .4448224640492010e-03, .8267963545745015e+00, .4452547237444166e-03, + .8284940688674631e+00, .4456778663730607e-03, .8301567409401316e+00, + .4460921854065215e-03, .8317854733825585e+00, .4464979631207512e-03, + .8333813278847675e+00, .4468954713092401e-03, .8349453278065194e+00, + .4472849719748584e-03, .8364784606800110e+00, .4476667180050050e-03, + .8379816806613994e+00, .4480409538345297e-03, .8394559109472592e+00, + .4484079161009533e-03, .8409020461724398e+00, .4487678342966111e-03, + .8423209548062871e+00, .4491209314224874e-03, .8437134815648469e+00, + .4494674246486925e-03, .8450804498574688e+00, .4498075259867541e-03, + .8464226642871850e+00, .4501414429791688e-03, .8477409132253626e+00, + .4504693794119635e-03, .8490359714824147e+00, .4507915360563808e-03, + .8503086030978187e+00, .4511081114462013e-03, .8515595642743328e+00, + .4514193026976681e-03, .8527896064831288e+00, .4517253063794774e-03, + .8539994797685749e+00, + .4520263194408489e-03, .8551899362836138e+00, .4523225402062811e-03, + .8563617340890786e+00, .4526141694462433e-03, .8575156412528867e+00, + .4529014115337412e-03, .8586524402878235e+00, .4531844756974208e-03, + .8597729329695807e+00, .4534635773826384e-03, .8608779455798124e+00, + .4537389397327130e-03, .8619683346221994e+00, .4540107952033793e-03, + .8630449930628203e+00, .4542793873242631e-03, .8641088571494663e+00, + .4545449726219747e-03, .8651609138678200e+00, .4548078227201481e-03, + .8662022090955665e+00, .4550682266323894e-03, .8672338565183648e+00, + .4553264932646083e-03, .8682570473740338e+00, .4555829541435220e-03, + .8692730610930815e+00, .4558379663881761e-03, .8702832769045586e+00, + .4560919159410250e-03, .8712891864758329e+00, .4563452210743556e-03, + .8722924076528336e+00, .4565983361864682e-03, .8732946993631147e+00, + .4568517558999058e-03, .8742979777371169e+00, .4571060194709263e-03, + .8753043334925269e+00, .4573617155151244e-03, .8763160506117581e+00, + .4576194870483323e-03, .8773356263222484e+00, .4578800368343567e-03, + .8783657923622515e+00, .4581441330213403e-03, .8794095374796469e+00, + .4584126150361641e-03, .8804701310663527e+00, .4586863996908342e-03, + .8815511477743261e+00, .4589664874357118e-03, .8826564928888149e+00, + .4592539686711794e-03, + .8837904281482389e+00, .4595500300013319e-03, .8849575975954920e+00, + .4598559602799827e-03, .8861630529202465e+00, .4601731562602071e-03, + .8874122776038270e+00, .4605031276134677e-03, .8887112090056589e+00, + .4608475010329713e-03, .8900662573321374e+00, .4612080230785231e-03, + .8914843202051330e+00, .4615865613575363e-03, .8929727913000981e+00, + .4619851035704269e-03, .8945395612571059e+00, .4624057538807515e-03, + .8961930087896581e+00, .4628507260045860e-03, .8979419796374420e+00, + .4633223323547168e-03, .8997957507473553e+00, .4638229685297288e-03, + .9017639768452591e+00, .4643550924143431e-03, .9038566164094044e+00, + .4649211971655587e-03, .9060838340132801e+00, .4655237774111018e-03, + .9084558761162183e+00, .4661652880954744e-03, .9109829176962647e+00, + .4668480955879464e-03, .9136748776971255e+00}; + +#endif From b9feb5e23f22a9e10c56763b789947978872cbc2 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Jun 2023 08:03:56 -0400 Subject: [PATCH 02/45] more work --- integration/ROCK4/README.md | 238 +++++++++ integration/ROCK4/actual_integrator.H | 144 +++++ .../ROCK4/actual_integrator_simplified_sdc.H | 226 ++++++++ integration/ROCK4/rock4.H | 493 ++++++++++++++++++ integration/ROCK4/rock4_type.H | 110 ++++ 5 files changed, 1211 insertions(+) create mode 100644 integration/ROCK4/README.md create mode 100644 integration/ROCK4/actual_integrator.H create mode 100644 integration/ROCK4/actual_integrator_simplified_sdc.H create mode 100644 integration/ROCK4/rock4.H create mode 100644 integration/ROCK4/rock4_type.H diff --git a/integration/ROCK4/README.md b/integration/ROCK4/README.md new file mode 100644 index 0000000000..3c03a6c6f5 --- /dev/null +++ b/integration/ROCK4/README.md @@ -0,0 +1,238 @@ +# ROCK4 Integrator + +Here are the original comments from the `rock4.f` source code: + +``` + + Numerical solution of a (mildly) stiff system + of first order differential equations. ROCK4 is + based on a family of 4th order explicit Runge- + Kutta methods with nearly optimal stability domain + on the negative real axis. The numerical method is + based on a three-term recursion relation, and a + composition of two sub-methods. + The size (along the negative axis) of the stability + domains increases quadratically with the stage number. + + Intended for problems of large dimensions with + eigenvalues of the Jacobian close to the negative + real axis. Typically for problems originating from + paraboliPDEs. + + + Author: A. Abdulle + Universite de Geneve, Dept. de mathematiques + Ch-1211 Geneve 24, Switzerland + e-mail: assyr.abdulle@math.unige.ch + + Version of April 2002 minor bug corrected + + The analysis of the ROCK4 method is described in: + + [ ] A. Abdulle + Fourth order Chebyshev methods with + recurrence relation + To appear in SISC + http://www.unige.ch/math/biblio/preprint/liste.html + + Input parameters + ---------------- + NEQN: Number of differential equations of the system + (integer). + + T: Initial point of integration (double precision). + + TEND: End of the interval of integration, + may be less than t (double precision) + + H: Initial step size guess + (usually between 1d-4 and 1d-6). + + Y(NEQN): Initial value of the solution + (double precision array of length neqn). + + F: Name (external) of subroutine computing the value + of f(x,y). Must have the form + + subroutine f(neqn,t,y,dy) + double precision y(neqn),dy(neqn) + integer neqn + dy(1)=... + ... + dy(neqn)=... + return + end + + Implementation: + for stability issues when the problem + is originating from paraboliPDEs, transforming + inhomogeneous boundary conditions in homogeneous ones + (by adding the appropriate function to the right-hand side) + may increase the performance of the code. + + + ATOL(*) : Absolute and relative error tolerances + RTOL(*) can be both scalar (double precision) + or vectors of length neqn (double precision). + + RHO: Name (external) of a function (double precision) + giving the spectral radius of the Jacobian + matrix of f at (t,y). Must have the form + + double precision function rho(neqn,t,y) + double precision y(neqn),t + integer neqn + ... + rho=... + return + end + + N.b. Gerschgorin's theorem can be helpful. If the + Jacobian is known to be constant it should be + specified by setting iwork(2)=1 (see below). + + ROCK4 can also compute this estimate. In that + case, provide a dummy function rho(neqn,t,y) + and set iwork(1)=0 (see below). + + If it is possible to give an estimate of + the spectral radius, it should be preferred to + the estimate computed internally by ROCK4. + + IWORK(*): Integer array of length 12 that gives information + on how the problem is to be solved and communicates + statistics about the integration process. + + IWORK(1): =0 ROCK4 attempts to compute the spectral radius + internally. Define a dummy function + + double precision function rho(neqn,t,y) + double precision y(neqn),t + integer neqn + rho=0.d0 + return + end + + =1 RHO returns an upper bound of the spectral + radius of the Jacobian matrix of f at (t,y). + + IWORK(2): =0 The Jacobian is not constant. + =1 The Jacobian is constant + the function rho is called only once. + + IWORK(3): =0 Return and solution at tend. + =1 The code returns after each step t_i chosen + automatically between [t,tend] (solution + at t_i is in y(*) ). + To continue call ROCK4 again without changing + any arguments. + + IWORK(4): =0 Atol and rtol are scalar. + =1 Atol and rtol are array of length neqn. + + WORK(*): Workspace of length 8*neqn if iwork(1)=0, + otherwise of length 7*neqn. + Work(1),..,work(7*neqn) serve as + working space for the solution of + the ode. + Work(7*neqn+1),..,work(8*neqn) + serve as working space for the + internal computation of the + spectral radius of the Jacobian. + + IDID: Report on successfulness upon return + (integer). + + Output parameters + ----------------- + T: T-value for which the solution has been computed + (after successful return t=tend). + + Y(NEQN): Numerical solution at tend. + + IDID: Reports what happened upon return + + IDID =1 Successful computation t=tend. + =2 Successful computation of one step. + To continue call ROCK4 again without + altering any arguments. + =-1 invalid input parameters. + =-2 Stepsize becomes to small. + =-3 The method used in ROCK4 to estimate + the spectral radius did not converge. + + IWORK(5) =Number of function evaluations. + IWORK(6) =Number of steps. + IWORK(7) =Number of accepted steps. + IWORK(8) =Number of rejected steps. + IWORK(9) =Number of evaluations of f used + to estimate the spectral radius + (equal to zero if iwork(1)=1). + IWORK(10) =Maximum number of stages used. + IWORK(11) =Maximum value of the estimated + bound for the spectral radius + (rounded to the nearest integer). + IWORK(12) =Minimum value of the estimated + bound for the spectral radius + (rounded to the nearest integer). + + + Caution: The variable UROUND (the rounding unit) is set to + ------- 1.0d-16 and may depends on the machines. + +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + Numerical method +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + The nearly optimal stability polynomial is computed + as a product: R_s(z)=P_{s-4}(z)*w(z). + We realize this polynomial as a composition of two + Runge-Kutta methods W(P), where the stability + polynomial of the method P is P_{s-4}(z) and the stability + polynomial of the method W is w(z). The first s-4 stages + possess a three-term recurrence formula. + +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + Stability functions and three-term recurrence relation +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + + The stability functions: R_j(z)=P_{j-4}(z) (internal j<=ms-4) + R_{ms}=P_{s-4}(z)*w(z) ( absolute) + w(z)=1+a_1*z+a_2*z^2+a_3*z^3+a_4*z^4 + + P_j(z) orthogonal with respect to w(z)^2/sqrt{1-x^2} + + Recurrence formula: + + P_j(z)=(a_j*z-b_j)*P_{j-1}(z)-c_j*P_{j-2}(z) + j=1..ms-4 b_1=-1,c_1=0 + + Normalization: P_(0)=1 =>b_{j}=-(1+c_{j}) + + Runge-Kutta formula: + + g_j(z)=a_{j}*f(g_{j-1})-b_{j}*g_{j-1}-c_{j}*g_{j-2} j=1..ms-4 + + Data (rec. param.): rec(i)= a_1,a_2,c_2,a_3,c_3,.,a_(ms-4), + c_(ms-4) for ms=1,3,5,.. + + The finishing procedure: + + g_{s-3}=g_{s-4} + h*a_{2,1}*f(g_{s-4} + g_{s-2}=g_{s-4} + h*(a_{3,1}*f(g_{s-4}+a_{3,2}*f(g_{s-3}) + g_{s-1}=g_{s-4} + h*(a_{4,1}*f(g_{s-4} + + a_{4,2}*f(g_{s-3}a_{4,3}*f(g_{s-2}) + y1:=g_{s}=g_{s-4} h*(b_1*f(g_{s-4}+b_2*f(g_{s-3}+ + b_3*f(g_{s-2})+b_4*f(g_{s-1}) + + Embedded method: + + y1e:=g_{s}=g_{s-4} h*(be_1*f(g_{s-4}+be_2*f(g_{s-3}+ + be_3*f(g_{s-2})+be_4*f(g_{s-1}+be_5*f(y_1)) + + Data (finish. proced.):fpa(i,j)=a_ij,fpb(i)=b_i,fpbe(i)=be_i + i=1,.,4 j=1,.,i-1 for ms=1,3,5,.. + + Chosen degrees: s=5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, + 26,28,30,32,34,36,38,40,42,45,48,51,54,57,60,63,67,71,75, + 80,85,90,96,102,109,116,124,133,142,152 ms=s-4 +``` diff --git a/integration/ROCK4/actual_integrator.H b/integration/ROCK4/actual_integrator.H new file mode 100644 index 0000000000..438dfcb52a --- /dev/null +++ b/integration/ROCK4/actual_integrator.H @@ -0,0 +1,144 @@ +#ifndef actual_integrator_H +#define actual_integrator_H + +#include + +#include +#include +#include +#include +#include +#include +#include + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +void actual_integrator (BurnT& state, Real dt) +{ + rock4_t rock_state{}; + + // Set the tolerances. + + rock_state.atol_spec = atol_spec; // mass fractions + rock_state.atol_enuc = atol_enuc; // energy generated + + rock_state.rtol_spec = rtol_spec; // mass fractions + rock_state.rtol_enuc = rtol_enuc; // energy generated + + // Start off by assuming a successful burn. + + state.success = true; + + // Initialize the integration time. + + rock_state.t = 0.0_rt; + rock_state.tend = dt; + + // We assume that (rho, T) coming in are valid, do an EOS call + // to fill the rest of the thermodynamic variables. + + eos(eos_input_rt, state); + + // Fill in the initial integration state. + + burn_to_integrator(state, rock_state); + + // Save the initial composition, temperature, and energy for our later diagnostics. + +#ifndef AMREX_USE_GPU + Real xn_in[NumSpec]; + for (int n = 0; n < NumSpec; ++n) { + xn_in[n] = state.xn[n]; + } + Real T_in = state.T; +#endif + Real e_in = state.e; + + // Call the integration routine. + + int ierr = rock4(state, rock_state); + + // Copy the integration data back to the burn state. + + integrator_to_burn(rock_state, state); + + // Subtract off the initial energy (the application codes expect + // to get back only the generated energy during the burn). + // Don't subtract it for primordial chem + if (subtract_internal_energy) { + state.e -= e_in; + } + + // Normalize the final abundances. + // Don't normalize for primordial chem + if (!use_number_densities) { + normalize_abundances_burn(state); + } + + // Get the number of RHS and Jacobian evaluations. + + state.n_rhs = rock_state.nfe; + state.n_jac = 0; + state.n_step = rock_state.nsteps; + + if (ierr > 2) { + state.success = false; + } + + // ROCK4 does not always fail even though it can lead to unphysical states. + // Add some checks that indicate a burn fail even if ROCK4 thinks the + // integration was successful. + + for (int n = 1; n <= NumSpec; ++n) { + if (rock_state.y(n) < -rock_failure_tolerance) { + state.success = false; + } + + // Don't enforce the condition below + // for primordial chem + if (!use_number_densities) { + if (rock_state.y(n) > 1.0_rt + rock_failure_tolerance) { + state.success = false; + } + } + } + +#ifndef AMREX_USE_GPU + if (burner_verbose) { + // Print out some integration statistics, if desired. + std::cout << "integration summary: " << std::endl; + std::cout << "dens: " << state.rho << " temp: " << state.T << std::endl; + std::cout << " energy released: " << state.e << std::endl; + std::cout << "number of steps taken: " << rock_state.nsteps << std::endl; + std::cout << "number of f evaluations: " << rock_state.nfe << std::endl; + } +#endif + + // If we failed, print out the current state of the integration. + + if (!state.success) { +#ifndef AMREX_USE_GPU + std::cout << Font::Bold << FGColor::Red << "[ERROR] integration failed in net" << ResetDisplay << std::endl; + std::cout << "ierr = " << ierr << std::endl; + std::cout << "zone = (" << state.i << ", " << state.j << ", " << state.k << ")" << std::endl; + std::cout << "time = " << rock_state.t << std::endl; + std::cout << "dt = " << std::setprecision(16) << dt << std::endl; + std::cout << "temp start = " << std::setprecision(16) << T_in << std::endl; + std::cout << "xn start = "; + for (int n = 0; n < NumSpec; ++n) { + std::cout << std::setprecision(16) << xn_in[n] << " "; + } + std::cout << std::endl; + std::cout << "dens current = " << std::setprecision(16) << state.rho << std::endl; + std::cout << "temp current = " << std::setprecision(16) << state.T << std::endl; + std::cout << "xn current = "; + for (int n = 0; n < NumSpec; ++n) { + std::cout << std::setprecision(16) << state.xn[n] << " "; + } + std::cout << std::endl; + std::cout << "energy generated = " << state.e << std::endl; +#endif + } +} + +#endif diff --git a/integration/ROCK4/actual_integrator_simplified_sdc.H b/integration/ROCK4/actual_integrator_simplified_sdc.H new file mode 100644 index 0000000000..0fff2d6550 --- /dev/null +++ b/integration/ROCK4/actual_integrator_simplified_sdc.H @@ -0,0 +1,226 @@ +#ifndef actual_integrator_H +#define actual_integrator_H + +// Common variables and routines for burners +// that use VODE for their integration. + +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace integrator_rp; + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +void actual_integrator (BurnT& state, Real dt) +{ + + rock_t rock_state{}; + + // Start off by assuming a successful burn. + + state.success = true; + + // Initialize the integration time. + + rock_state.t = 0.0_rt; + rock_state.tend = dt; + + // We assume that (rho, T) coming in are valid, do an EOS call + // to fill the rest of the thermodynamic variables. + + eos(eos_input_rt, state); + + // Fill in the initial integration state. + + burn_to_int(state, rock_state); + + // Save the initial composition and temperature for our later diagnostics. + +#ifndef AMREX_USE_GPU + Real xn_in[NumSpec]; + for (int n = 0; n < NumSpec; ++n) { + xn_in[n] = state.y[SFS+n] / state.y[SRHO]; + } + // we are assuming that the temperature was valid on input + Real T_in = state.T; +#ifdef AUX_THERMO + Real aux_in[NumAux]; + for (int n = 0; n < NumAux; ++n) { + aux_in[n] = state.y[SFX+n] / state.y[SRHO]; + } +#endif + Real rhoe_in = state.y[SEINT]; +#endif + + + // Set the tolerances. + + Real sdc_tol_fac = std::pow(sdc_burn_tol_factor, state.num_sdc_iters - state.sdc_iter - 1); + + // we use 1-based indexing inside of ROCK4, so we need to shift the + // indices SRHO, SFS, etc by 1 + + Real sdc_min_density = amrex::min(state.rho, state.rho_orig + state.ydot_a[SRHO] * dt); + + rock_state.atol_enuc = sdc_min_density * atol_enuc * sdc_tol_fac; + rock_state.rtol_enuc = rtol_enuc * sdc_tol_fac; + + // Note: we define the input atol for species to refer only to the + // mass fraction part, and we multiply by a representative density + // so that atol becomes an absolutely tolerance on (rho X) + + rock_state.atol_spec = sdc_min_density * atol_spec * sdc_tol_fac; + rock_state.rtol_spec = rtol_spec * sdc_tol_fac; + + // Call the integration routine. + + int ierr = rock4(state, rock_state); + + // Get the number of RHS and Jacobian evaluations. + + state.n_rhs = rock_state.nfe; + state.n_jac = 0; + state.n_step = rock_state.nsteps; + + // Copy the integration data back to the burn state. + // This will also update the aux state from X if we are using NSE + + int_to_burn(rock_state.t, rock_state, state); + + // we only evolved (rho e), not (rho E), so we need to update the + // total energy now to ensure we are conservative + + Real rho_Sdot = 0.0_rt; + if (state.time > 0) { + rho_Sdot = (rock_state.y(SEINT+1) - state.rhoe_orig) / state.time - state.ydot_a[SEINT]; + } + + state.y[SEDEN] += state.time * (state.ydot_a[SEDEN] + rho_Sdot); + + // also momentum + + state.y[SMX] += state.time * state.ydot_a[SMX]; + state.y[SMY] += state.time * state.ydot_a[SMY]; + state.y[SMZ] += state.time * state.ydot_a[SMZ]; + + // normalize the abundances on exit. We'll assume that the driver + // calling this is making use of the conserved state (state.y[]), + // so that is what will be normalized. + + normalize_abundances_sdc_burn(state); + + // ROCK4 does not always fail even though it can lead to unphysical states. + // Add some checks that indicate a burn fail even if ROCK4 thinks the + // integration was successful. + + if (ierr > 2) { + state.success = false; + } + +#if defined(SDC_EVOLVE_ENERGY) + if (rock_state.y(SEINT+1) < 0.0_rt) { + state.success = false; + } + + for (int n = 1; n <= NumSpec; ++n) { + if (rock_state.y(SFS+n) / state.y[SRHO] < -rock_failure_tolerance) { + state.success = false; + } + + if (rock_state.y(SFS+n) / state.y[SRHO] > 1.0_rt + rock_failure_tolerance) { + state.success = false; + } + } + +#elif defined(SDC_EVOLVE_ENTHALPY) + for (int n = 1; n <= NumSpec; ++n) { + if (rock_state.y(SFS+n) / state.rho < -rock_failure_tolerance) { + state.success = false; + } + + if (rock_state.y(SFS+n) / state.rho > 1.0_rt + rock_failure_tolerance) { + state.success = false; + } + } + +#endif + + +#ifndef AMREX_USE_GPU + if (burner_verbose) { + // Print out some integration statistics, if desired. + std::cout << "integration summary: " << std::endl; + std::cout << "dens: " << state.rho << " temp: " << state.T << std::endl; + std::cout << " energy released: " << state.e << std::endl; + std::cout << "number of steps taken: " << rock_state.nsteps << std::endl; + std::cout << "number of f evaluations: " << rock_state.nfe << std::endl; + } +#endif + + // If we failed, print out the current state of the integration. + + if (!state.success) { +#ifndef AMREX_USE_GPU + std::cout << Font::Bold << FGColor::Red << "[ERROR] integration failed in net" << ResetDisplay << std::endl; + std::cout << "ierr = " << ierr << std::endl; + std::cout << "zone = (" << state.i << ", " << state.j << ", " << state.k << ")" << std::endl; + std::cout << "time = " << rock_state.t << std::endl; + std::cout << "dt = " << std::setprecision(16) << dt << std::endl; + std::cout << "dens start = " << std::setprecision(16) << state.rho_orig << std::endl; + std::cout << "temp start = " << std::setprecision(16) << T_in << std::endl; + std::cout << "rhoe start = " << std::setprecision(16) << rhoe_in << std::endl; + std::cout << "xn start = "; + for (int n = 0; n < NumSpec; ++n) { + std::cout << std::setprecision(16) << xn_in[n] << " "; + } + std::cout << std::endl; +#ifdef AUX_THERMO + std::cout << "aux start = "; + for (int n = 0; n < NumAux; ++n) { + std::cout << std::setprecision(16) << aux_in[n] << " "; + } + std::cout << std::endl; +#endif + std::cout << "dens current = " << std::setprecision(16) << state.rho << std::endl; + std::cout << "temp current = " << std::setprecision(16) << state.T << std::endl; + std::cout << "xn current = "; + for (int n = 0; n < NumSpec; ++n) { + std::cout << std::setprecision(16) << state.xn[n] << " "; + } + std::cout << std::endl; +#ifdef AUX_THERMO + std::cout << "aux current = "; + for (int n = 0; n < NumAux; ++n) { + std::cout << std::setprecision(16) << state.aux[n] << " "; + } + std::cout << std::endl; +#endif +#if defined(SDC_EVOLVE_ENERGY) + std::cout << "A(rho) = " << std::setprecision(16) << state.ydot_a[SRHO] << std::endl; +#endif + std::cout << "A(rho e) = " << std::setprecision(16) << state.ydot_a[SEINT] << std::endl; + std::cout << "A(rho X_k) = "; + for (int n = 0; n < NumSpec; n++) { + std::cout << std::setprecision(16) << state.ydot_a[SFS+n] << " "; + } + std::cout << std::endl; +#ifdef AUX_THERMO + std::cout << "A(rho aux_k) = "; + for (int n = 0; n < NumAux; n++) { + std::cout << std::setprecision(16) << state.ydot_a[SFX+n] << " "; + } + std::cout << std::endl; +#endif +#endif + } + +} + +#endif diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H new file mode 100644 index 0000000000..2c0df02e81 --- /dev/null +++ b/integration/ROCK4/rock4.H @@ -0,0 +1,493 @@ +#ifndef ROCK4_H +#define ROCK4_H + +#include +#include +#ifdef STRANG +#include +#include +#endif +#ifdef SIMPLIFIED_SDC +#include +#include +#endif + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +int rock4 (BurnT& state, rkc_t& rstate) +{ + // initializations + + // TODO: get the initial set size + + // Test the initial step size and tolerances. + + if (h.gt.abs(tend-t)) then + write(6,*)'initial step is longer than the integration interval' + arret=.true. + idid=-1 + return + end if + if (h.lt.10.d0*uround) then + write(6,*)'initial step-size is too small' + idid=-1 + arret=.true. + return + end if + +c -------- Call to the core integrator.----------- + call rockfcore(neqn,t,tend,h,y,f,work,work(n1),work(n2), + & work(n3),work(n4),work(n5),work(n6),work(n7),ms,atol,rtol, + & ntol,recf,fpa,fpb,fpbe,iwork,arret,uround,idid) + return + end +c ---------------------------------------------- +c End of subroutine ROCK4. +c ---------------------------------------------- +c + subroutine rockfcore(neqn,t,tend,h,y,f,work,yn,fn,fnt,yjm1, + & yjm2,yjm3,yjm4,ms,atol,rtol,ntol,recf,fpa,fpb,fpbe,iwork, + & arret,uround,idid) +c ---------------------------------------------- +c Core integrator for ROCK4. +c ---------------------------------------------- +c Declarations +c ---------------------------------------------- + double precision y(*),yn(*),fn(*),fnt(neqn),work(*), + & yjm1(neqn),yjm2(neqn),yjm3(neqn),yjm4(neqn),recf(4382), + & atol(*),rtol(*),fpa(50,6),fpb(50,4),fpbe(50,5),err,errp, + & eigmax,t,tend,h,hnew,hp,facmax,fac,facp,rho,uround,told + integer ms(50),mp(2),iwork(12),neqn,mdeg,i,ntol, + & nrho,mdego,nrej,idid + logical last,reject,arret + external f +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +c initializations +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + + iwork(5)=0 + iwork(6)=100000000 + iwork(7)=0 + iwork(8)=0 + iwork(9)=0 + iwork(10)=0 + iwork(11)=0 + iwork(12)=0 + + facmax=5.d0 + told=0.d0 + nrej=0 + hp=h + mdego=0 + last=.false. + reject=.false. + err=0.d0 + nrho=0 + idid=1 +c -------- initialization of the integration step.-------- +10 if (rstate.nsteps != 0) { + do i=1,neqn + yn(i)=y(i) + fn(i)=fnt(i) + end do + } else { + do i=1,neqn + yn(i)=y(i) + end do + call f(neqn,t,yn,fn) + } + rstate.nsteps++; + errp=err + + // Step-size is adjusted. +20 if(1.01d0*h.ge.abs(tend-t)) then + h=dabs(tend-t) + last=.true. + end if + if (h.lt.10.d0*uround) then + write(6,*)' tolerances are too small' + idid=-2 + arret=.true. + return + end if + // Spectral radius. + if (nrho == 0) { + // Computed internally by rockfrho + call rockfrho(neqn,t,y,f,yn,fn,work,yjm1, + & yjm2,eigmax,uround,idid,iwork) + rstate.max_rho = std::max(rstate.max_rho, std::round(eigmax)); + rstate.min_rho = std::min(rstate.min_rho, std::round(eigmax)); + } + +c -------- The number of stages.-------- + mdeg=sqrt((3.d0+h*eigmax)/0.353d0)+1 + if (mdeg.gt.152) then + h=0.8d0*(152.d0**2*0.353d0-3.d0)/eigmax + mdeg=152 + last=.false. + end if + mdeg=max(mdeg,5)-4 + if (mdeg.ne.mdego) then + call mdegre(mdeg,mp,ms) + end if + if (mdeg+4 > rstate.max_stages) { + rstate.max_stages = mdeg + 4; + } + +c -------- Computation of an integration step.-------- + call rfstep(neqn,t,h,y,f,yn,fn,fnt,yjm1,yjm2,yjm3,yjm4, + & mdeg,mp,err,atol,rtol,ntol,recf,fpa,fpb,fpbe) + mdego=mdeg + rstate.nsteps++; + rstate.nfe += mdeg + 4; + +c -------- Error control procedure.-------- + fac=(1.d0/err)**(0.25d0) + if (errp.ne.0.d0.and..not.reject) then + facp=errp**(0.25d0)*fac**2*(h/hp) + fac=dmin1(fac,facp) + end if + if (reject) then + facmax=1.d0 + end if + fac=dmin1(facmax,dmax1(0.1d0,0.8d0*fac)) + hnew=h*fac +c -------- Accepted step.-------- + if (err.lt.1.d0) then + rstate.naccpt++; + facmax=2.d0 + t=t+h + if (reject) then + hnew=dmin1(hnew,h) + if (tend.lt.t) hnew=dmax1(hnew,h) + reject= .false. + nrej=0 + end if + hp=h + h=hnew + nrho=nrho+1 + nrho=mod(nrho+1,10) + if (last) then + return + else + goto 10 + end if + else +c -------- Rejected step.-------- + rstate.nrejct++; + reject= .true. + last=.false. + h= 0.8d0*hnew + if (rstate.nsteps == 0) { + h = 0.1e0 * h; + } + if (told.eq.t) then + nrej=nrej+1 + if (nrej.eq.10) h=1.0d-5 + end if + told=t +c -------The spectral radius is recomputed.-------- +c after a step failure + if (nrho.ne.0) then + nrho=0 + else + nrho=1 + end if + goto 20 + end if + return + end +c ---------------------------------------------- +c End of subroutine rockcore. +c ---------------------------------------------- +c + subroutine rfstep(neqn,t,h,y,f,yn,fn,fnt,yjm1,yjm2,yjm3, + & yjm4,mdeg,mp,err,atol,rtol,ntol,recf,fpa,fpb,fpbe) +c ---------------------------------------------- +c Solut. at t+h by an explicit (mdeg+4)-stages formula. +c----------------------------------------------- +c ---------------------------------------------- +c Declarations +c ---------------------------------------------- + double precision y(neqn),yn(neqn),fn(neqn),fnt(neqn), + & yjm2(neqn),yjm3(neqn),yjm4(neqn),recf(4382),fpa(50,6), + & yjm1(neqn),fpb(50,4),fpbe(50,5),atol(*),rtol(*),err,t, + & h,ci1,ci2,ci3,temp1,temp2,temp3,temp4,temp5,ato,rto + integer mp(2),neqn,mdeg,mr,mz,i,j,ntol + external f +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +c initializations +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + err=0.d0 + mz=mp(1) + mr=mp(2) +c -------- First stage.-------- + temp1=h*recf(mr) + ci1=t+temp1 + ci2=t+temp1 + ci3=t + do i=1,neqn + yjm2(i)=yn(i) + yjm1(i)=yn(i)+temp1*fn(i) + if (mdeg.lt.2) then + y(i)=yjm1(i) + end if + end do +c --------- Stage for j=2..mdeg.-------- + do i=2,mdeg + temp1=h*recf(mr+2*(i-2)+1) + temp3=-recf(mr+2*(i-2)+2) + temp2=1.d0-temp3 + call f(neqn,ci1,yjm1,y) + ci1=temp1+temp2*ci2+temp3*ci3 + do j=1,neqn + y(j)=temp1*y(j)+temp2*yjm1(j)+temp3*yjm2(j) +c -------- Shift the value "y" for the next stage.-------- + if (i.lt.mdeg) then + yjm2(j)=yjm1(j) + yjm1(j)=y(j) + end if + end do + ci3=ci2 + ci2=ci1 + end do +c -------- The finishing procedure (4-stage method). +c -------- Stage 1.-------- + temp1=h*fpa(mz,1) + call f(neqn,ci1,y,yjm1) + do j=1,neqn + yjm3(j)=y(j)+temp1*yjm1(j) + end do +c -------- Stage 2.-------- + ci2=ci1+temp1 + temp1=h*fpa(mz,2) + temp2=h*fpa(mz,3) + call f(neqn,ci2,yjm3,yjm2) + do j=1,neqn + yjm4(j)=y(j)+temp1*yjm1(j)+temp2*yjm2(j) + end do +c -------- Stage 3.-------- + ci2=ci1+temp1+temp2 + temp1=h*fpa(mz,4) + temp2=h*fpa(mz,5) + temp3=h*fpa(mz,6) + call f(neqn,ci2,yjm4,yjm3) + do j=1,neqn + fnt(j)=y(j)+temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) + end do +c -------- Stage 4.-------- + ci2=ci1+temp1+temp2+temp3 + temp1=h*fpb(mz,1) + temp2=h*fpb(mz,2) + temp3=h*fpb(mz,3) + temp4=h*fpb(mz,4) + call f(neqn,ci2,fnt,yjm4) + do j=1,neqn + y(j)=y(j)+temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) + & +temp4*yjm4(j) + end do +c -------- Error evaluation (embedded method of order 3).-------- + temp1=h*fpbe(mz,1)-temp1 + temp2=h*fpbe(mz,2)-temp2 + temp3=h*fpbe(mz,3)-temp3 + temp4=h*fpbe(mz,4)-temp4 + temp5=h*fpbe(mz,5) + call f(neqn,t+h,y,fnt) +c -------- Atol and rtol are scalar.-------- + if (ntol.eq.0) then + ato=atol(1) + rto=rtol(1) + do j=1,neqn + ci1=dabs(y(j))*rto + err=err+((temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) + & +temp4*yjm4(j)+temp5*fnt(j))/(ato+ci1))**2 + end do +c -------- Atol and rtol are array.-------- + else + do j=1,neqn + ci1=dabs(y(j))*rtol(j) + err=err+((temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) + & +temp4*yjm4(j)+temp5*fnt(j))/(atol(j)+ci1))**2 + end do + end if + err=sqrt(err/neqn) + return + end +c ---------------------------------------------- +c End of subroutine rfstep. +c ---------------------------------------------- +c + subroutine mdegre(mdeg,mp,ms) +c------------------------------------------------------------- +c Find the optimal degree. +c MP(1): pointer which select the degree in ms(i)\1,2,.. +c such that mdeg<=ms(i). +c MP(2): pointer which gives the corresponding position +c of a_1 in the data recf for the selected degree. +c------------------------------------------------------------- +c ---------------------------------------------- +c Declarations +c ---------------------------------------------- + integer ms(50),mp(2),mdeg,i +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +c initializations +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + mp(2)=1 +c -------- Find the degree.-------- + do i=1,50 + if ((ms(i)/mdeg).ge.1) then + mdeg=ms(i) + mp(1)=i + return + end if + mp(2)=mp(2)+ms(i)*2-1 + end do + return + end +c ---------------------------------------------- +c End of subroutine mdegr. +c ---------------------------------------------- +c + subroutine rockfrho(neqn,t,y,f,yn,fn,work,z,fz,eigmax, + & uround,idid,iwork) +c------------------------------------------------------------ +c Rockfrho compute eigmax, a close upper bound of the +c spectral radius of the Jacobian matrix using a +c power method (J.N. Franklin (matrix theory)). +c The algorithm used is a small change (initial vector +c and stopping criteria) of that of +c Sommeijer-Shampine-Verwer, implemented in RKC. +c------------------------------------------------------------- +c Declarations +c------------------------------------------------------------- + double precision y(neqn),yn(neqn),fn(neqn),z(neqn), + & work(*),fz(neqn),t,eigmax,eigmaxo,sqrtu,uround,znor, + & ynor,quot,dzyn,dfzfn,safe + integer iwork(12),neqn,n8,i,iter,maxiter,nind,ntest, + & ind,idid + parameter (maxiter=50) + parameter (safe=1.2d0) + external f +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +c initializations +c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + sqrtu=sqrt(uround) + ynor=0.d0 + znor=0.d0 + n8=7*neqn +c ------ The initial vectors for the power method are yn -------- +c and yn+c*f(v_n), where vn=f(yn) a perturbation of yn +c (if first step) or a perturbation of the last computed +c eigenvector (otherwise) +c + if (rstate.nsteps == 0) { + do i=1,neqn + fz(i)=fn(i) + end do + call f(neqn,t,fz,z) + rstate.nfesig++; + } else { + do i=1,neqn + z(i)=work(n8+i) + end do + } +c ------ Perturbation.-------- + do i=1,neqn + ynor=ynor+yn(i)**2 + znor=znor+z(i)**2 + end do + ynor=sqrt(ynor) + znor=sqrt(znor) +c ------ Normalization of the vector z so that -------- +c the difference z-yn lie in a circle +c around yn (i.e has a constant modulus). +c + if (ynor.ne.0.d0.and.znor.ne.0.d0) then + dzyn=ynor*sqrtu + quot=dzyn/znor + do i=1,neqn + z(i)=yn(i)+z(i)*quot + end do + elseif(ynor.ne.0.d0) then + dzyn=ynor*sqrtu + do i=1,neqn + z(i)=yn(i)+yn(i)*sqrtu + end do + elseif(znor.ne.0.d0) then + dzyn=uround + quot=dzyn/znor + do i=1,neqn + z(i)=z(i)*quot + end do + else + dzyn=uround + do i=1,neqn + z(i)=dzyn + end do + end if +c ------ Start the power method.-------- + eigmax=0.d0 + do iter=1,maxiter + call f(neqn,t,z,fz) + rstate.nfesig++; + dfzfn=0.d0 + do i=1,neqn + dfzfn=dfzfn+(fz(i)-fn(i))**2 + end do + dfzfn=dsqrt(dfzfn) + eigmaxo=eigmax + eigmax=dfzfn/dzyn + eigmax=safe*eigmax +c ------ The stopping criteria is based on a +c relative error between two succesive +c estimation ``eigmax'' of the spectral +c radius. +c + if (iter.ge.2.and.dabs(eigmax-eigmaxo) + & .le.(eigmax*0.05d0)) then +c ----- The last eigenvector is stored.-------- + do i=1,neqn + work(n8+i)=z(i)-yn(i) + end do + return + end if +c ----- The next z is defined by -------- +c z_new=yn+coef*(fz-fn) where +c coef is choosen so that +c norm(z_new-yn)=norm(z_old-yn) +c + if (dfzfn.ne.0.d0) then + quot=dzyn/dfzfn + do i=1,neqn + z(i)=yn(i)+(fz(i)-fn(i))*quot + end do + else +c ----- The new z is defined by an arbitrary -------- +c perturbation of the current approximation +c of the eigenvector. +c + nind=neqn + ntest=0 + ind=1+mod(iter,nind) + if (z(ind).ne.yn(ind).or.ntest.eq.10) then + z(ind)=yn(ind)-(z(ind)-yn(ind)) + else + nind=neqn+ind + ntest=ntest+1 + end if + end if + end do + write(6,*) 'convergence failure in the + & spectral radius computation' + idid=-3 + return + end + + + + + + + + + diff --git a/integration/ROCK4/rock4_type.H b/integration/ROCK4/rock4_type.H new file mode 100644 index 0000000000..3ee69bd50c --- /dev/null +++ b/integration/ROCK4/rock4_type.H @@ -0,0 +1,110 @@ +#ifndef ROCK4_TYPE_H +#define ROCK4_TYPE_H + +#include +#include + +#include +#include + +#include + +typedef amrex::Array1D RArray1D; +typedef amrex::Array1D RArray1D; + +const amrex::Real UROUND = std::numeric_limits::epsilon(); + +// We will use this parameter to determine if a given species abundance +// is unreasonably small or large (each X must satisfy +// -failure_tolerance <= X <= 1.0 + failure_tolerance). +const Real rock4_failure_tolerance = 1.e-2_rt; + + +struct rock4_t { + + // The initial point of the integration. + amrex::Real t; + + // timestep + amrex::Real h; + + // The end of the interval of integration. + amrex::Real tend; + + // Integration array + RArray1D y; + + // Tolerances + amrex::Real rtol_spec, atol_spec; + amrex::Real rtol_enuc, atol_enuc; +#ifdef TRUE_SDC + amrex::Real rtol_dens, atol_dens; +#endif + + // RKC had an info array with 4 elements + + // info(1) was to allow for intermediate solutions -- we do not + // use this (we do the equivalent of info(1) = 1) + + // info(2) defined how to compute the spectral radius. We + // have RKC do it internally (this is equivalent to info(2) = 0 + + // info(3) was to allow for a constant Jacobian. We state that + // the Jacobian is not constant (this is equivalent to info(3) = 0 + + // info(4) told RKC whether ATOL was a scalar or an array. + // We have our own tolerances + + // work array -- we break the original Fortran work array up into + // 7 separate arrays, each of length INT_NEQS. + + amrex::Real hmax; + + RArray1D yn; + RArray1D fn; + RArray1D fnt; + RArray1D yjm1; + RArray1D yjm2; + RArray1D yjm3; + RArray1D yjm4; + + // set IDID = 0 for initialization + short idid; + + // the following a variables that were in the RKCDID common + // block + + // number of function evaluations + int nfe; + + // number of integration stesp + int nsteps; + + // number of accepted steps + int naccpt; + + // number of rejected steps + int nrejct; + + // number of evaluations of F used to estimate the spectral radius + int nfesig; + + // maximum number of stages used + int maxm; + + // maximum value of the spectral radius (nearest int) + int max_rho; + + // minimum value of the spectral radius (nearest int) + int min_rho; + +}; + +#ifdef SIMPLIFIED_SDC +#include +#endif +#ifdef STRANG +#include +#endif + +#endif From ecf585c26cab82bcdc9e6569551be9c88163d007 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Jun 2023 14:41:18 -0400 Subject: [PATCH 03/45] more conversion --- integration/RKC/actual_integrator.H | 4 +- .../RKC/actual_integrator_simplified_sdc.H | 2 +- integration/RKC/rkc_type.H | 1 - integration/ROCK4/rock4.H | 858 +++++++++--------- integration/ROCK4/rock4_type.H | 10 +- 5 files changed, 447 insertions(+), 428 deletions(-) diff --git a/integration/RKC/actual_integrator.H b/integration/RKC/actual_integrator.H index ead50f79ef..0fd5ee1457 100644 --- a/integration/RKC/actual_integrator.H +++ b/integration/RKC/actual_integrator.H @@ -85,8 +85,8 @@ void actual_integrator (BurnT& state, Real dt) state.success = false; } - // VODE does not always fail even though it can lead to unphysical states. - // Add some checks that indicate a burn fail even if VODE thinks the + // RKC does not always fail even though it can lead to unphysical states. + // Add some checks that indicate a burn fail even if RKC thinks the // integration was successful. for (int n = 1; n <= NumSpec; ++n) { diff --git a/integration/RKC/actual_integrator_simplified_sdc.H b/integration/RKC/actual_integrator_simplified_sdc.H index 72939cb0bb..95f4f69bce 100644 --- a/integration/RKC/actual_integrator_simplified_sdc.H +++ b/integration/RKC/actual_integrator_simplified_sdc.H @@ -2,7 +2,7 @@ #define actual_integrator_H // Common variables and routines for burners -// that use VODE for their integration. +// that use RKC for their integration. #include diff --git a/integration/RKC/rkc_type.H b/integration/RKC/rkc_type.H index 357b181107..a1ffeb6c68 100644 --- a/integration/RKC/rkc_type.H +++ b/integration/RKC/rkc_type.H @@ -11,7 +11,6 @@ const int RKC_NEQS = INT_NEQS; -typedef amrex::Array1D RArray1D; typedef amrex::Array1D RArray1D; const amrex::Real UROUND = std::numeric_limits::epsilon(); diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index 2c0df02e81..4625eddd71 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -14,427 +14,452 @@ template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rock4 (BurnT& state, rkc_t& rstate) +int rock4 (BurnT& state, rock4_t& rstate) { + + const Real rmax = 0.1_rt; + const Real rmin = 10.0_rt * UROUND; + // initializations // TODO: get the initial set size // Test the initial step size and tolerances. - if (h.gt.abs(tend-t)) then - write(6,*)'initial step is longer than the integration interval' - arret=.true. - idid=-1 - return - end if - if (h.lt.10.d0*uround) then - write(6,*)'initial step-size is too small' - idid=-1 - arret=.true. - return - end if - -c -------- Call to the core integrator.----------- - call rockfcore(neqn,t,tend,h,y,f,work,work(n1),work(n2), - & work(n3),work(n4),work(n5),work(n6),work(n7),ms,atol,rtol, - & ntol,recf,fpa,fpb,fpbe,iwork,arret,uround,idid) - return - end -c ---------------------------------------------- -c End of subroutine ROCK4. -c ---------------------------------------------- -c - subroutine rockfcore(neqn,t,tend,h,y,f,work,yn,fn,fnt,yjm1, - & yjm2,yjm3,yjm4,ms,atol,rtol,ntol,recf,fpa,fpb,fpbe,iwork, - & arret,uround,idid) -c ---------------------------------------------- -c Core integrator for ROCK4. -c ---------------------------------------------- -c Declarations -c ---------------------------------------------- - double precision y(*),yn(*),fn(*),fnt(neqn),work(*), - & yjm1(neqn),yjm2(neqn),yjm3(neqn),yjm4(neqn),recf(4382), - & atol(*),rtol(*),fpa(50,6),fpb(50,4),fpbe(50,5),err,errp, - & eigmax,t,tend,h,hnew,hp,facmax,fac,facp,rho,uround,told - integer ms(50),mp(2),iwork(12),neqn,mdeg,i,ntol, - & nrho,mdego,nrej,idid - logical last,reject,arret - external f -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** -c initializations -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** - - iwork(5)=0 - iwork(6)=100000000 - iwork(7)=0 - iwork(8)=0 - iwork(9)=0 - iwork(10)=0 - iwork(11)=0 - iwork(12)=0 - - facmax=5.d0 - told=0.d0 - nrej=0 - hp=h - mdego=0 - last=.false. - reject=.false. - err=0.d0 - nrho=0 - idid=1 -c -------- initialization of the integration step.-------- -10 if (rstate.nsteps != 0) { - do i=1,neqn - yn(i)=y(i) - fn(i)=fnt(i) - end do - } else { - do i=1,neqn - yn(i)=y(i) - end do - call f(neqn,t,yn,fn) - } - rstate.nsteps++; - errp=err - - // Step-size is adjusted. -20 if(1.01d0*h.ge.abs(tend-t)) then - h=dabs(tend-t) - last=.true. - end if - if (h.lt.10.d0*uround) then - write(6,*)' tolerances are too small' - idid=-2 - arret=.true. - return - end if - // Spectral radius. - if (nrho == 0) { - // Computed internally by rockfrho - call rockfrho(neqn,t,y,f,yn,fn,work,yjm1, - & yjm2,eigmax,uround,idid,iwork) + if (rstate.h < 10.0_rt * UROUND) { + rstate.idid = -1; + return rstate.idid; + } + + bool valid = true; + + if ((rtol_spec > rmax) || (rtol_enuc > rmax) || + (rtol_spec < rmin) || (rtol_spec < rmin)) { + valid = false; + } + + if (atol_spec < 0.0_rt || atol_enuc < 0.0_rt) { + valid = false; + } + + if (! valid) { + rstate.idid = -1; // TODO: remove idid from rstate + return rstate.idid; + } + + // call the integrator + + rockfcore(state, rstate); + + return rstate.idid; +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +int rockfcore (BurnT& state, rock4_t& rstate) +{ + + // Core integrator for ROCK4. + + // initializations + + rstate.nfe = 0; + rstate.nsteps = 0; + rstate.naccpt = 0; + rstate.nreject = 0; + rstate.nfesig = 0; + rstate.maxm = 0; + rstate.max_rho = 0; + rstate.min_rho = std::numeric_limits::max(); + + rstate.idid = 1; + + Real facmax{5.0_rt}; + Real told{0.0_rt}; + Real err{0.0_rt} + + int nrej{0}; + int nrho{0}; + int mdego{0}; + + Real hp{rstate.h}; + + bool last{false}; + bool reject{false}; + + + // initialization of the integration step. + + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yn(i) = rstate.y(i); + } + rhs(rstate.t, state, rstate, rstate.fn); + + rstate.nfe++; + Real errp = err; + + while (true) { + + // Step-size is adjusted. + + if (1.01_rt * rstate.h >= std::abs(rstate.tend - rstate.t)) { + rstate.h = std::abs(rstate.tend - rstate.t); + last = true; + } + + if (rstate.h < 10.0_rt * UROUND) { + rstate.idid = -2; + return rstate.idir; + } + + // Spectral radius. + + if (nrho == 0) { + // Computed internally by rockfrho + eigmax = rockfrho(state, rstate); rstate.max_rho = std::max(rstate.max_rho, std::round(eigmax)); rstate.min_rho = std::min(rstate.min_rho, std::round(eigmax)); - } - -c -------- The number of stages.-------- - mdeg=sqrt((3.d0+h*eigmax)/0.353d0)+1 - if (mdeg.gt.152) then - h=0.8d0*(152.d0**2*0.353d0-3.d0)/eigmax - mdeg=152 - last=.false. - end if - mdeg=max(mdeg,5)-4 - if (mdeg.ne.mdego) then - call mdegre(mdeg,mp,ms) - end if - if (mdeg+4 > rstate.max_stages) { - rstate.max_stages = mdeg + 4; - } - -c -------- Computation of an integration step.-------- - call rfstep(neqn,t,h,y,f,yn,fn,fnt,yjm1,yjm2,yjm3,yjm4, - & mdeg,mp,err,atol,rtol,ntol,recf,fpa,fpb,fpbe) - mdego=mdeg - rstate.nsteps++; - rstate.nfe += mdeg + 4; - -c -------- Error control procedure.-------- - fac=(1.d0/err)**(0.25d0) - if (errp.ne.0.d0.and..not.reject) then - facp=errp**(0.25d0)*fac**2*(h/hp) - fac=dmin1(fac,facp) - end if - if (reject) then - facmax=1.d0 - end if - fac=dmin1(facmax,dmax1(0.1d0,0.8d0*fac)) - hnew=h*fac -c -------- Accepted step.-------- - if (err.lt.1.d0) then - rstate.naccpt++; - facmax=2.d0 - t=t+h - if (reject) then - hnew=dmin1(hnew,h) - if (tend.lt.t) hnew=dmax1(hnew,h) - reject= .false. - nrej=0 - end if - hp=h - h=hnew - nrho=nrho+1 - nrho=mod(nrho+1,10) - if (last) then - return - else - goto 10 - end if - else -c -------- Rejected step.-------- + } + + // The number of stages. + + rstate.mdeg = static_cast(std::sqrt((3.0_rt + rstate.h * eigmax) / 0.353_rt)) + 1; + + if (rstate.mdeg > 152) { + rstate.h = 0.8_rt * (std::pow(152.0_rt, 2) * 0.353_rt - 3.0_rt) / eigmax; + rstate.mdeg = 152; + last = false; + } + + rstate.mdeg = std::max(mdeg, 5) - 4; + + if (rstate.mdeg != mdego) { + mdegre(rstate); + } + + if (rstate.mdeg + 4 > rstate.max_stages) { + rstate.max_stages = mdeg + 4; + } + + // Computation of an integration step. + + err = rfstep(state, rstate); + + mdego = rstate.mdeg; + rstate.nsteps++; + rstate.nfe += mdeg + 4; + + // Error control procedure. + + Real fac = std::pow(1.0_rt / err, 0.25_rt); + + if (errp != 0.0_rt && ! reject) { + Real facp = std::pow(errp, 0.25_rt) * fac * fac * (h / hp); + fac = std::min(fac, facp); + } + + if (reject) { + facmax = 1.0; + } + + fac = std::min(facmax, std::max(0.1_rt, 0.8_rt * fac)); + Real hnew = rstate.h * fac; + + // Accepted step. + if (err < 1.0_rt) { + rstate.naccpt++; + facmax = 2.0_rt; + rstate.t += rstate.h; + if (reject) { + hnew = std::min(hnew, rstate.h); + if (rstate.tend < rstate.t) { + hnew = std::max(hnew, rstate.h); + } + reject = false; + nrej=0; + } + hp = h; + rstate.h = hnew; + nrho++; + nrho = nrho+1 % 10; + if (last) { + return rstate.idid; + } else { + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yn(i) = rstate.y(i); + rstate.fn(i) = rstate.fnt(i); + } + } + rstate.nfe++; + errp = err; + continue; + } + + // Rejected step. rstate.nrejct++; - reject= .true. - last=.false. - h= 0.8d0*hnew + reject = true; + last = false; + rstate.h = 0.8_rt * hnew; if (rstate.nsteps == 0) { h = 0.1e0 * h; } - if (told.eq.t) then - nrej=nrej+1 - if (nrej.eq.10) h=1.0d-5 - end if - told=t -c -------The spectral radius is recomputed.-------- -c after a step failure - if (nrho.ne.0) then - nrho=0 - else - nrho=1 - end if - goto 20 - end if - return - end -c ---------------------------------------------- -c End of subroutine rockcore. -c ---------------------------------------------- -c - subroutine rfstep(neqn,t,h,y,f,yn,fn,fnt,yjm1,yjm2,yjm3, - & yjm4,mdeg,mp,err,atol,rtol,ntol,recf,fpa,fpb,fpbe) -c ---------------------------------------------- -c Solut. at t+h by an explicit (mdeg+4)-stages formula. -c----------------------------------------------- -c ---------------------------------------------- -c Declarations -c ---------------------------------------------- - double precision y(neqn),yn(neqn),fn(neqn),fnt(neqn), - & yjm2(neqn),yjm3(neqn),yjm4(neqn),recf(4382),fpa(50,6), - & yjm1(neqn),fpb(50,4),fpbe(50,5),atol(*),rtol(*),err,t, - & h,ci1,ci2,ci3,temp1,temp2,temp3,temp4,temp5,ato,rto - integer mp(2),neqn,mdeg,mr,mz,i,j,ntol - external f -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** -c initializations -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** - err=0.d0 - mz=mp(1) - mr=mp(2) -c -------- First stage.-------- - temp1=h*recf(mr) - ci1=t+temp1 - ci2=t+temp1 - ci3=t - do i=1,neqn - yjm2(i)=yn(i) - yjm1(i)=yn(i)+temp1*fn(i) - if (mdeg.lt.2) then - y(i)=yjm1(i) - end if - end do -c --------- Stage for j=2..mdeg.-------- - do i=2,mdeg - temp1=h*recf(mr+2*(i-2)+1) - temp3=-recf(mr+2*(i-2)+2) - temp2=1.d0-temp3 - call f(neqn,ci1,yjm1,y) - ci1=temp1+temp2*ci2+temp3*ci3 - do j=1,neqn - y(j)=temp1*y(j)+temp2*yjm1(j)+temp3*yjm2(j) -c -------- Shift the value "y" for the next stage.-------- - if (i.lt.mdeg) then - yjm2(j)=yjm1(j) - yjm1(j)=y(j) - end if - end do - ci3=ci2 - ci2=ci1 - end do -c -------- The finishing procedure (4-stage method). -c -------- Stage 1.-------- - temp1=h*fpa(mz,1) - call f(neqn,ci1,y,yjm1) - do j=1,neqn - yjm3(j)=y(j)+temp1*yjm1(j) - end do -c -------- Stage 2.-------- - ci2=ci1+temp1 - temp1=h*fpa(mz,2) - temp2=h*fpa(mz,3) - call f(neqn,ci2,yjm3,yjm2) - do j=1,neqn - yjm4(j)=y(j)+temp1*yjm1(j)+temp2*yjm2(j) - end do -c -------- Stage 3.-------- - ci2=ci1+temp1+temp2 - temp1=h*fpa(mz,4) - temp2=h*fpa(mz,5) - temp3=h*fpa(mz,6) - call f(neqn,ci2,yjm4,yjm3) - do j=1,neqn - fnt(j)=y(j)+temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) - end do -c -------- Stage 4.-------- - ci2=ci1+temp1+temp2+temp3 - temp1=h*fpb(mz,1) - temp2=h*fpb(mz,2) - temp3=h*fpb(mz,3) - temp4=h*fpb(mz,4) - call f(neqn,ci2,fnt,yjm4) - do j=1,neqn - y(j)=y(j)+temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) - & +temp4*yjm4(j) - end do -c -------- Error evaluation (embedded method of order 3).-------- - temp1=h*fpbe(mz,1)-temp1 - temp2=h*fpbe(mz,2)-temp2 - temp3=h*fpbe(mz,3)-temp3 - temp4=h*fpbe(mz,4)-temp4 - temp5=h*fpbe(mz,5) - call f(neqn,t+h,y,fnt) -c -------- Atol and rtol are scalar.-------- - if (ntol.eq.0) then - ato=atol(1) - rto=rtol(1) - do j=1,neqn - ci1=dabs(y(j))*rto - err=err+((temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) - & +temp4*yjm4(j)+temp5*fnt(j))/(ato+ci1))**2 - end do -c -------- Atol and rtol are array.-------- - else - do j=1,neqn - ci1=dabs(y(j))*rtol(j) - err=err+((temp1*yjm1(j)+temp2*yjm2(j)+temp3*yjm3(j) - & +temp4*yjm4(j)+temp5*fnt(j))/(atol(j)+ci1))**2 - end do - end if - err=sqrt(err/neqn) - return - end -c ---------------------------------------------- -c End of subroutine rfstep. -c ---------------------------------------------- -c - subroutine mdegre(mdeg,mp,ms) -c------------------------------------------------------------- -c Find the optimal degree. -c MP(1): pointer which select the degree in ms(i)\1,2,.. -c such that mdeg<=ms(i). -c MP(2): pointer which gives the corresponding position -c of a_1 in the data recf for the selected degree. -c------------------------------------------------------------- -c ---------------------------------------------- -c Declarations -c ---------------------------------------------- - integer ms(50),mp(2),mdeg,i -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** -c initializations -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** - mp(2)=1 -c -------- Find the degree.-------- - do i=1,50 - if ((ms(i)/mdeg).ge.1) then - mdeg=ms(i) - mp(1)=i - return - end if - mp(2)=mp(2)+ms(i)*2-1 - end do - return - end -c ---------------------------------------------- -c End of subroutine mdegr. -c ---------------------------------------------- -c - subroutine rockfrho(neqn,t,y,f,yn,fn,work,z,fz,eigmax, - & uround,idid,iwork) -c------------------------------------------------------------ -c Rockfrho compute eigmax, a close upper bound of the -c spectral radius of the Jacobian matrix using a -c power method (J.N. Franklin (matrix theory)). -c The algorithm used is a small change (initial vector -c and stopping criteria) of that of -c Sommeijer-Shampine-Verwer, implemented in RKC. -c------------------------------------------------------------- -c Declarations -c------------------------------------------------------------- - double precision y(neqn),yn(neqn),fn(neqn),z(neqn), - & work(*),fz(neqn),t,eigmax,eigmaxo,sqrtu,uround,znor, - & ynor,quot,dzyn,dfzfn,safe - integer iwork(12),neqn,n8,i,iter,maxiter,nind,ntest, - & ind,idid - parameter (maxiter=50) - parameter (safe=1.2d0) - external f -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** -c initializations -c *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** - sqrtu=sqrt(uround) - ynor=0.d0 - znor=0.d0 - n8=7*neqn -c ------ The initial vectors for the power method are yn -------- -c and yn+c*f(v_n), where vn=f(yn) a perturbation of yn -c (if first step) or a perturbation of the last computed -c eigenvector (otherwise) -c - if (rstate.nsteps == 0) { - do i=1,neqn - fz(i)=fn(i) - end do - call f(neqn,t,fz,z) + if (told == rstate.t) { + nrej++; + if (nrej == 10) rstate.h = 1.0e-5; // this may not be enough for us? + } + told = rstate.t; + // The spectral radius is recomputed after a step failure + if (nrho != 0) { + nrho = 0; + } else { + nrho = 1; + } + continue; + } + + return rstate.idid; +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real rfstep (BurnT& state, rock4_t& rstate) +{ + + // Solut. at t+h by an explicit (mdeg+4)-stages formula. + + int mz = rstate.mp(1); + int mr = rstate.mp(2); + + // First stage + + Real temp1 = h * recf(mr); + Real ci1 = rstate.t + temp1; + Real ci2 = rstate.t + temp1; + Real ci3 = rstate.t; + + Real temp2, temp3, temp4, temp5; + + for (int i = 1; i < INT_NEQS; ++i) { + rstate.yjm2(i) = rstate.yn(i); + rstate.yjm1(i) = rstate.yn(i) + temp1 * rstate.fn(i); + if (rstate.mdeg < 2) { + rstate.y(i) = rstate.yjm1(i); + } + } + + // Stage for j=2..mdeg. + + for (int i = 2; i <= rstate.mdeg; ++i) { + temp1 = rstate.h * recf(mr+2*(i-2)+1); + temp3 = -recf(mr+2*(i-2)+2); + temp2 = 1.0_rt - temp3; + call f(neqn,ci1,yjm1,y); + ci1 = temp1 + temp2 * ci2 + temp3 * ci3; + for (int j = 1; j < INT_NEQS; ++j) { + rstate.y(j) = temp1 * rstate.y(j) + temp2 * rstate.yjm1(j) + temp3 * rstate.yjm2(j); + + // Shift the value "y" for the next stage. + if (i < rstate.mdeg) { + rstate.yjm2(j) = rstate.yjm1(j); + rstate.yjm1(j) = rstate.y(j); + } + } + ci3 = ci2; + ci2 = ci1; + } + + // The finishing procedure (4-stage method) + + // stage 1 + temp1 = rstate.h * fpa(mz, 1); + call f(neqn,ci1,y,yjm1); + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.yjm3(j) = rstate.y(j) + temp1 * rstate.yjm1(j); + } + + // stage 2 + ci2 = ci1 + temp1; + temp1 = rstate.h * fpa(mz,2); + temp2 = rstate.h * fpa(mz,3); + call f(neqn,ci2,yjm3,yjm2); + for (int k = 1; j < INT_NEQS; ++j) { + rstate.yjm4(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j); + } + + // state 3 + ci2 = ci1 + temp1 + temp2; + temp1 = rstate.h * fpa(mz,4); + temp2 = rstate.h * fpa(mz,5); + temp3 = rstate.h * fpa(mz,6); + call f(neqn,ci2,yjm4,yjm3); + for (int j = 1; j < INT_NEQS; ++j) { + rstate.fnt(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j) + temp3 * rstate.yjm3(j); + } + + // stage 4 + ci2 = ci1 + temp1 + temp2 + temp3; + temp1 = rstate.h * fpb(mz,1); + temp2 = rstate.h * fpb(mz,2); + temp3 = rstate.h * fpb(mz,3); + temp4 = rstate.h * fpb(mz,4); + call f(neqn,ci2,fnt,yjm4); + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.y(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate,yjm2(j) + + temp3 * rstate.yjm3(j) + temp4 * rstate,yjm4(j); + } + + // Error evaluation (embedded method of order 3). + temp1 = rstate.h * fpbe(mz,1) - temp1; + temp2 = rstate.h * fpbe(mz,2) - temp2; + temp3 = rstate.h * fpbe(mz,3) - temp3; + temp4 = rstate.h * fpbe(mz,4) - temp4; + temp5 = rstate.h * fpbe(mz,5); + call f(neqn,t+h,y,fnt); + + + Real err{}; + + for (int j = 1; j <= INT_NEQS; ++j) { + Real wt{}; + if (i <= NumSpec) { + wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; + } else { + wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; + } + + err += std::pow((temp1 * rstate.yjm1(j) + + temp2 * rstate,yjm2(j) + + temp3 * rstate.yjm3(j) + + temp4 * rstate.yjm4(j) + + temp5 * rstate.fnt(j)) / wt, 2); + } + + err = std::sqrt(err / static_cast(INT_NEQS)); + + return err; +} + +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real mdegre(rock4_t& rstate) +{ + + // Find the optimal degree. + // MP(1): pointer which select the degree in ms(i)\1,2,.. + // such that mdeg<=ms(i). + // MP(2): pointer which gives the corresponding position + // of a_1 in the data recf for the selected degree. + + rstate.mp(2) = 1; + + // Find the degree + + for (int i = 1; i <= 50; ++i) { + if ((ms(i) / rstate.mdeg) >= 1) { + rstate.mdeg = ms(i); + rstate.mp(1) = i; + return; + } + rstate.mp(2) += ms(i)*2 - 1; + } + return +} + + + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real rockfrho (BurnT& state, rkc_t& rstate) +{ + + // Rockfrho compute eigmax, a close upper bound of the spectral + // radius of the Jacobian matrix using a power method + // (J.N. Franklin (matrix theory). The algorithm used is a small + // change (initial vector and stopping criteria) of that of + // Sommeijer-Shampine-Verwer, implemented in RKC. + + // note: in the original code, the following names were used: + // z = yjm1 + // fz = yjm2 + + constexpr int itmax{50}; + constexpr Real onep2{1.2_rt}; + + const Real sqrtu = std::sqrt(UROUND); + + // The initial vectors for the power method are yn and + // yn+c*f(v_n), where vn=f(yn) a perturbation of yn (if first + // step) or a perturbation of the last computed eigenvector + // (otherwise) + + if (rstate.nsteps == 0) { + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm2(i) = rstate.fn(i); + } + call f(neqn,t,rstate.yjm2,z); rstate.nfesig++; - } else { - do i=1,neqn - z(i)=work(n8+i) - end do - } -c ------ Perturbation.-------- - do i=1,neqn - ynor=ynor+yn(i)**2 - znor=znor+z(i)**2 - end do - ynor=sqrt(ynor) - znor=sqrt(znor) -c ------ Normalization of the vector z so that -------- -c the difference z-yn lie in a circle -c around yn (i.e has a constant modulus). -c - if (ynor.ne.0.d0.and.znor.ne.0.d0) then - dzyn=ynor*sqrtu - quot=dzyn/znor - do i=1,neqn - z(i)=yn(i)+z(i)*quot - end do - elseif(ynor.ne.0.d0) then - dzyn=ynor*sqrtu - do i=1,neqn - z(i)=yn(i)+yn(i)*sqrtu - end do - elseif(znor.ne.0.d0) then - dzyn=uround - quot=dzyn/znor - do i=1,neqn - z(i)=z(i)*quot - end do - else - dzyn=uround - do i=1,neqn - z(i)=dzyn - end do - end if -c ------ Start the power method.-------- - eigmax=0.d0 - do iter=1,maxiter - call f(neqn,t,z,fz) + } else { + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = rstate.sprad(i); + } + } + + // Perturbation. + + Real ynor{}; + Real znor{}; + + for (int i = 1; i <= INT_NEQS; ++i) { + ynor += std::pow(rstate.yn(i), 2); + znor += std::pow(rstate.yjm1(i), 2); + } + ynor = std::sqrt(ynor); + znor = std::sqrt(znor); + + // Normalization of the vector z so that the difference z-yn lie + // in a circle around yn (i.e has a constant modulus). + + Real dzyn{}; + + if (ynor != 0.0_rt && znor != 0.0_rt) { + dzyn = ynor * sqrtu; + Real quot = dzyn / znor; + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * quot; + } + } else if (ynor != 0.0_rt) { + dzyn = ynor * sqrtu; + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * sqrtu; + } + } else if (znor != 0.0_rt) { + dzyn = uround; + Real quot = dzyn / znor; + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = rstate.yjm1(i) * quot; + } + } else { + dzyn = UROUND; + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = dzyn; + } + } + + // Start the power method. + + Real eigmax{}; + + for (int iter = 0; iter < maxiter; ++iter) { + call f(neqn,t,z,rstate.yjm2); rstate.nfesig++; - dfzfn=0.d0 - do i=1,neqn - dfzfn=dfzfn+(fz(i)-fn(i))**2 - end do - dfzfn=dsqrt(dfzfn) + + Real dfzfn{}; + for (int i = 1; i <= INT_NEQS; ++i) { + dfzfn += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); + } + dfzfn = std::sqrt(dfzfn); + eigmaxo=eigmax eigmax=dfzfn/dzyn eigmax=safe*eigmax @@ -443,11 +468,11 @@ c relative error between two succesive c estimation ``eigmax'' of the spectral c radius. c - if (iter.ge.2.and.dabs(eigmax-eigmaxo) + if (iter.ge.1.and.dabs(eigmax-eigmaxo) & .le.(eigmax*0.05d0)) then c ----- The last eigenvector is stored.-------- do i=1,neqn - work(n8+i)=z(i)-yn(i) + work(n8+i)=rstate.yjm1(i)-yn(i) end do return end if @@ -459,7 +484,7 @@ c if (dfzfn.ne.0.d0) then quot=dzyn/dfzfn do i=1,neqn - z(i)=yn(i)+(fz(i)-fn(i))*quot + rstate.yjm1(i)=yn(i)+(rstate.yjm2(i)-fn(i))*quot end do else c ----- The new z is defined by an arbitrary -------- @@ -468,9 +493,9 @@ c of the eigenvector. c nind=neqn ntest=0 - ind=1+mod(iter,nind) - if (z(ind).ne.yn(ind).or.ntest.eq.10) then - z(ind)=yn(ind)-(z(ind)-yn(ind)) + ind=1+mod(iter+1,nind) + if (rstate.yjm1(ind).ne.yn(ind).or.ntest.eq.10) then + rstate.yjm1(ind)=yn(ind)-(rstate.yjm1(ind)-yn(ind)) else nind=neqn+ind ntest=ntest+1 @@ -482,12 +507,3 @@ c idid=-3 return end - - - - - - - - - diff --git a/integration/ROCK4/rock4_type.H b/integration/ROCK4/rock4_type.H index 3ee69bd50c..df91f0c54c 100644 --- a/integration/ROCK4/rock4_type.H +++ b/integration/ROCK4/rock4_type.H @@ -9,7 +9,6 @@ #include -typedef amrex::Array1D RArray1D; typedef amrex::Array1D RArray1D; const amrex::Real UROUND = std::numeric_limits::epsilon(); @@ -56,7 +55,7 @@ struct rock4_t { // We have our own tolerances // work array -- we break the original Fortran work array up into - // 7 separate arrays, each of length INT_NEQS. + // 8 separate arrays, each of length INT_NEQS. amrex::Real hmax; @@ -67,6 +66,11 @@ struct rock4_t { RArray1D yjm2; RArray1D yjm3; RArray1D yjm4; + RArray1D sprad; + + int mdeg; + + amrex::Array1D mp; // set IDID = 0 for initialization short idid; @@ -90,7 +94,7 @@ struct rock4_t { int nfesig; // maximum number of stages used - int maxm; + int max_stages; // maximum value of the spectral radius (nearest int) int max_rho; From 8a0d75ed402d9b3553927aaad84a2eb4d7355586 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Jun 2023 15:56:18 -0400 Subject: [PATCH 04/45] finish first pass --- integration/ROCK4/rock4.H | 104 +++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 51 deletions(-) diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index 4625eddd71..1aca381561 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -118,6 +118,9 @@ int rockfcore (BurnT& state, rock4_t& rstate) if (nrho == 0) { // Computed internally by rockfrho eigmax = rockfrho(state, rstate); + if (rstate.idid == -3) { + return rstate.idid; + } rstate.max_rho = std::max(rstate.max_rho, std::round(eigmax)); rstate.min_rho = std::min(rstate.min_rho, std::round(eigmax)); } @@ -241,7 +244,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) Real temp2, temp3, temp4, temp5; - for (int i = 1; i < INT_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm2(i) = rstate.yn(i); rstate.yjm1(i) = rstate.yn(i) + temp1 * rstate.fn(i); if (rstate.mdeg < 2) { @@ -257,7 +260,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp2 = 1.0_rt - temp3; call f(neqn,ci1,yjm1,y); ci1 = temp1 + temp2 * ci2 + temp3 * ci3; - for (int j = 1; j < INT_NEQS; ++j) { + for (int j = 1; j <= INT_NEQS; ++j) { rstate.y(j) = temp1 * rstate.y(j) + temp2 * rstate.yjm1(j) + temp3 * rstate.yjm2(j); // Shift the value "y" for the next stage. @@ -284,7 +287,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp1 = rstate.h * fpa(mz,2); temp2 = rstate.h * fpa(mz,3); call f(neqn,ci2,yjm3,yjm2); - for (int k = 1; j < INT_NEQS; ++j) { + for (int k = 1; j <= INT_NEQS; ++j) { rstate.yjm4(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j); } @@ -294,7 +297,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp2 = rstate.h * fpa(mz,5); temp3 = rstate.h * fpa(mz,6); call f(neqn,ci2,yjm4,yjm3); - for (int j = 1; j < INT_NEQS; ++j) { + for (int j = 1; j <= INT_NEQS; ++j) { rstate.fnt(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j) + temp3 * rstate.yjm3(j); } @@ -450,6 +453,10 @@ Real rockfrho (BurnT& state, rkc_t& rstate) Real eigmax{}; + int ntest{}; + int nind{}; + int ind{}; + for (int iter = 0; iter < maxiter; ++iter) { call f(neqn,t,z,rstate.yjm2); rstate.nfesig++; @@ -460,50 +467,45 @@ Real rockfrho (BurnT& state, rkc_t& rstate) } dfzfn = std::sqrt(dfzfn); - eigmaxo=eigmax - eigmax=dfzfn/dzyn - eigmax=safe*eigmax -c ------ The stopping criteria is based on a -c relative error between two succesive -c estimation ``eigmax'' of the spectral -c radius. -c - if (iter.ge.1.and.dabs(eigmax-eigmaxo) - & .le.(eigmax*0.05d0)) then -c ----- The last eigenvector is stored.-------- - do i=1,neqn - work(n8+i)=rstate.yjm1(i)-yn(i) - end do - return - end if -c ----- The next z is defined by -------- -c z_new=yn+coef*(fz-fn) where -c coef is choosen so that -c norm(z_new-yn)=norm(z_old-yn) -c - if (dfzfn.ne.0.d0) then - quot=dzyn/dfzfn - do i=1,neqn - rstate.yjm1(i)=yn(i)+(rstate.yjm2(i)-fn(i))*quot - end do - else -c ----- The new z is defined by an arbitrary -------- -c perturbation of the current approximation -c of the eigenvector. -c - nind=neqn - ntest=0 - ind=1+mod(iter+1,nind) - if (rstate.yjm1(ind).ne.yn(ind).or.ntest.eq.10) then - rstate.yjm1(ind)=yn(ind)-(rstate.yjm1(ind)-yn(ind)) - else - nind=neqn+ind - ntest=ntest+1 - end if - end if - end do - write(6,*) 'convergence failure in the - & spectral radius computation' - idid=-3 - return - end + Real eigmaxo = eigmax; + eigmax = dfzfn / dzyn; + eigmax = safe * eigmax; + + // The stopping criteria is based on a relative error between + // two succesive estimation ``eigmax'' of the spectral radius. + + if (iter >= 1 ** std::abs(eigmax-eigmaxo) <= (eigmax*0.05_rt)) { + // The last eigenvector is stored. + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); + } + return eigmax; + } + + // The next z is defined by z_new=yn+coef*(fz-fn) where coef + // is choosen so that norm(z_new-yn)=norm(z_old-yn) + + if (dfzfn != 0.0_rt) { + Real quot = dzyn / dfzfn; + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + (rstate.yjm2(i) - rstate.fn(i)) * quot; + } + } else { + // The new z is defined by an arbitrary perturbation of + // the current approximation of the eigenvector. + ntest = 0; + nind = INT_NEQS; + ind = 1 + iter+1 % nind; + if (rstate.yjm1(ind) != rstate.yn(ind) || ntest == 10) { + rstate.yjm1(ind) = rstate.yn(ind) - (rstate.yjm1(ind) - rstate.yn(ind)); + } else { + nind = INT_NEQS + ind; + ntest++; + } + } + } + + // if we made it here, we failed, and the caller will abort + rstate.idid = -3; + return 0.0_rt; +} From 50c945cde402b301537b79171e6d0049966b91bc Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Jun 2023 15:57:10 -0400 Subject: [PATCH 05/45] add missing files --- integration/ROCK4/Make.package | 10 ++++++++++ integration/ROCK4/_parameters | 1 + 2 files changed, 11 insertions(+) create mode 100644 integration/ROCK4/Make.package create mode 100644 integration/ROCK4/_parameters diff --git a/integration/ROCK4/Make.package b/integration/ROCK4/Make.package new file mode 100644 index 0000000000..299a20c4fd --- /dev/null +++ b/integration/ROCK4/Make.package @@ -0,0 +1,10 @@ +ifeq ($(USE_SIMPLIFIED_SDC), TRUE) + CEXE_headers += actual_integrator_simplified_sdc.H +else + ifneq ($(USE_TRUE_SDC), TRUE) + CEXE_headers += actual_integrator.H + endif +endif + +CEXE_headers += rock4_type.H +CEXE_headers += rock4.H diff --git a/integration/ROCK4/_parameters b/integration/ROCK4/_parameters new file mode 100644 index 0000000000..81ef30d75a --- /dev/null +++ b/integration/ROCK4/_parameters @@ -0,0 +1 @@ +@namespace: integrator From 4ba9cd30af6397fa572c44b6abaffc48e5f6db98 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Jun 2023 20:07:32 -0400 Subject: [PATCH 06/45] more compilation work --- integration/ROCK4/actual_integrator.H | 4 +- .../ROCK4/actual_integrator_simplified_sdc.H | 8 +- integration/ROCK4/rock4.H | 501 +++++++++--------- integration/ROCK4/rock4_coefficients.H | 439 +++++++-------- integration/ROCK4/rock4_type.H | 2 +- 5 files changed, 481 insertions(+), 473 deletions(-) diff --git a/integration/ROCK4/actual_integrator.H b/integration/ROCK4/actual_integrator.H index 438dfcb52a..2194b7228d 100644 --- a/integration/ROCK4/actual_integrator.H +++ b/integration/ROCK4/actual_integrator.H @@ -90,14 +90,14 @@ void actual_integrator (BurnT& state, Real dt) // integration was successful. for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(n) < -rock_failure_tolerance) { + if (rock_state.y(n) < -rock4_failure_tolerance) { state.success = false; } // Don't enforce the condition below // for primordial chem if (!use_number_densities) { - if (rock_state.y(n) > 1.0_rt + rock_failure_tolerance) { + if (rock_state.y(n) > 1.0_rt + rock4_failure_tolerance) { state.success = false; } } diff --git a/integration/ROCK4/actual_integrator_simplified_sdc.H b/integration/ROCK4/actual_integrator_simplified_sdc.H index 0fff2d6550..ae55c287aa 100644 --- a/integration/ROCK4/actual_integrator_simplified_sdc.H +++ b/integration/ROCK4/actual_integrator_simplified_sdc.H @@ -130,22 +130,22 @@ void actual_integrator (BurnT& state, Real dt) } for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(SFS+n) / state.y[SRHO] < -rock_failure_tolerance) { + if (rock_state.y(SFS+n) / state.y[SRHO] < -rock4_failure_tolerance) { state.success = false; } - if (rock_state.y(SFS+n) / state.y[SRHO] > 1.0_rt + rock_failure_tolerance) { + if (rock_state.y(SFS+n) / state.y[SRHO] > 1.0_rt + rock4_failure_tolerance) { state.success = false; } } #elif defined(SDC_EVOLVE_ENTHALPY) for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(SFS+n) / state.rho < -rock_failure_tolerance) { + if (rock_state.y(SFS+n) / state.rho < -rock4_failure_tolerance) { state.success = false; } - if (rock_state.y(SFS+n) / state.rho > 1.0_rt + rock_failure_tolerance) { + if (rock_state.y(SFS+n) / state.rho > 1.0_rt + rock4_failure_tolerance) { state.success = false; } } diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index 1aca381561..5a51e0ab27 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -12,216 +12,31 @@ #include #endif -template -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rock4 (BurnT& state, rock4_t& rstate) -{ - - const Real rmax = 0.1_rt; - const Real rmin = 10.0_rt * UROUND; - - // initializations - - // TODO: get the initial set size - - // Test the initial step size and tolerances. - - if (rstate.h < 10.0_rt * UROUND) { - rstate.idid = -1; - return rstate.idid; - } - - bool valid = true; - - if ((rtol_spec > rmax) || (rtol_enuc > rmax) || - (rtol_spec < rmin) || (rtol_spec < rmin)) { - valid = false; - } - - if (atol_spec < 0.0_rt || atol_enuc < 0.0_rt) { - valid = false; - } - - if (! valid) { - rstate.idid = -1; // TODO: remove idid from rstate - return rstate.idid; - } - - // call the integrator - - rockfcore(state, rstate); - - return rstate.idid; -} +#include - -template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rockfcore (BurnT& state, rock4_t& rstate) +void mdegre(rock4_t& rstate) { - // Core integrator for ROCK4. - - // initializations - - rstate.nfe = 0; - rstate.nsteps = 0; - rstate.naccpt = 0; - rstate.nreject = 0; - rstate.nfesig = 0; - rstate.maxm = 0; - rstate.max_rho = 0; - rstate.min_rho = std::numeric_limits::max(); - - rstate.idid = 1; - - Real facmax{5.0_rt}; - Real told{0.0_rt}; - Real err{0.0_rt} - - int nrej{0}; - int nrho{0}; - int mdego{0}; - - Real hp{rstate.h}; - - bool last{false}; - bool reject{false}; - - - // initialization of the integration step. - - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yn(i) = rstate.y(i); - } - rhs(rstate.t, state, rstate, rstate.fn); - - rstate.nfe++; - Real errp = err; - - while (true) { - - // Step-size is adjusted. - - if (1.01_rt * rstate.h >= std::abs(rstate.tend - rstate.t)) { - rstate.h = std::abs(rstate.tend - rstate.t); - last = true; - } - - if (rstate.h < 10.0_rt * UROUND) { - rstate.idid = -2; - return rstate.idir; - } - - // Spectral radius. - - if (nrho == 0) { - // Computed internally by rockfrho - eigmax = rockfrho(state, rstate); - if (rstate.idid == -3) { - return rstate.idid; - } - rstate.max_rho = std::max(rstate.max_rho, std::round(eigmax)); - rstate.min_rho = std::min(rstate.min_rho, std::round(eigmax)); - } - - // The number of stages. - - rstate.mdeg = static_cast(std::sqrt((3.0_rt + rstate.h * eigmax) / 0.353_rt)) + 1; - - if (rstate.mdeg > 152) { - rstate.h = 0.8_rt * (std::pow(152.0_rt, 2) * 0.353_rt - 3.0_rt) / eigmax; - rstate.mdeg = 152; - last = false; - } - - rstate.mdeg = std::max(mdeg, 5) - 4; - - if (rstate.mdeg != mdego) { - mdegre(rstate); - } - - if (rstate.mdeg + 4 > rstate.max_stages) { - rstate.max_stages = mdeg + 4; - } - - // Computation of an integration step. - - err = rfstep(state, rstate); - - mdego = rstate.mdeg; - rstate.nsteps++; - rstate.nfe += mdeg + 4; - - // Error control procedure. - - Real fac = std::pow(1.0_rt / err, 0.25_rt); - - if (errp != 0.0_rt && ! reject) { - Real facp = std::pow(errp, 0.25_rt) * fac * fac * (h / hp); - fac = std::min(fac, facp); - } - - if (reject) { - facmax = 1.0; - } + // Find the optimal degree. + // MP(1): pointer which select the degree in ms(i)\1,2,.. + // such that mdeg<=ms(i). + // MP(2): pointer which gives the corresponding position + // of a_1 in the data recf for the selected degree. - fac = std::min(facmax, std::max(0.1_rt, 0.8_rt * fac)); - Real hnew = rstate.h * fac; + rstate.mp(2) = 1; - // Accepted step. - if (err < 1.0_rt) { - rstate.naccpt++; - facmax = 2.0_rt; - rstate.t += rstate.h; - if (reject) { - hnew = std::min(hnew, rstate.h); - if (rstate.tend < rstate.t) { - hnew = std::max(hnew, rstate.h); - } - reject = false; - nrej=0; - } - hp = h; - rstate.h = hnew; - nrho++; - nrho = nrho+1 % 10; - if (last) { - return rstate.idid; - } else { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yn(i) = rstate.y(i); - rstate.fn(i) = rstate.fnt(i); - } - } - rstate.nfe++; - errp = err; - continue; - } + // Find the degree - // Rejected step. - rstate.nrejct++; - reject = true; - last = false; - rstate.h = 0.8_rt * hnew; - if (rstate.nsteps == 0) { - h = 0.1e0 * h; - } - if (told == rstate.t) { - nrej++; - if (nrej == 10) rstate.h = 1.0e-5; // this may not be enough for us? - } - told = rstate.t; - // The spectral radius is recomputed after a step failure - if (nrho != 0) { - nrho = 0; - } else { - nrho = 1; + for (int i = 1; i <= 50; ++i) { + if ((ms(i) / rstate.mdeg) >= 1) { + rstate.mdeg = ms(i); + rstate.mp(1) = i; + return; } - continue; + rstate.mp(2) += ms(i)*2 - 1; } - - return rstate.idid; + return; } @@ -237,7 +52,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) // First stage - Real temp1 = h * recf(mr); + Real temp1 = rstate.h * recf(mr); Real ci1 = rstate.t + temp1; Real ci2 = rstate.t + temp1; Real ci3 = rstate.t; @@ -258,7 +73,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp1 = rstate.h * recf(mr+2*(i-2)+1); temp3 = -recf(mr+2*(i-2)+2); temp2 = 1.0_rt - temp3; - call f(neqn,ci1,yjm1,y); + //call f(neqn,ci1,yjm1,y); ci1 = temp1 + temp2 * ci2 + temp3 * ci3; for (int j = 1; j <= INT_NEQS; ++j) { rstate.y(j) = temp1 * rstate.y(j) + temp2 * rstate.yjm1(j) + temp3 * rstate.yjm2(j); @@ -277,7 +92,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) // stage 1 temp1 = rstate.h * fpa(mz, 1); - call f(neqn,ci1,y,yjm1); + //call f(neqn,ci1,y,yjm1); for (int j = 1; j <= INT_NEQS; ++j) { rstate.yjm3(j) = rstate.y(j) + temp1 * rstate.yjm1(j); } @@ -286,8 +101,8 @@ Real rfstep (BurnT& state, rock4_t& rstate) ci2 = ci1 + temp1; temp1 = rstate.h * fpa(mz,2); temp2 = rstate.h * fpa(mz,3); - call f(neqn,ci2,yjm3,yjm2); - for (int k = 1; j <= INT_NEQS; ++j) { + //call f(neqn,ci2,yjm3,yjm2); + for (int j = 1; j <= INT_NEQS; ++j) { rstate.yjm4(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j); } @@ -296,7 +111,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp1 = rstate.h * fpa(mz,4); temp2 = rstate.h * fpa(mz,5); temp3 = rstate.h * fpa(mz,6); - call f(neqn,ci2,yjm4,yjm3); + //call f(neqn,ci2,yjm4,yjm3); for (int j = 1; j <= INT_NEQS; ++j) { rstate.fnt(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j) + temp3 * rstate.yjm3(j); } @@ -307,10 +122,10 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp2 = rstate.h * fpb(mz,2); temp3 = rstate.h * fpb(mz,3); temp4 = rstate.h * fpb(mz,4); - call f(neqn,ci2,fnt,yjm4); + //call f(neqn,ci2,fnt,yjm4); for (int j = 1; j <= INT_NEQS; ++j) { - rstate.y(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate,yjm2(j) - + temp3 * rstate.yjm3(j) + temp4 * rstate,yjm4(j); + rstate.y(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j) + + temp3 * rstate.yjm3(j) + temp4 * rstate.yjm4(j); } // Error evaluation (embedded method of order 3). @@ -319,21 +134,21 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp3 = rstate.h * fpbe(mz,3) - temp3; temp4 = rstate.h * fpbe(mz,4) - temp4; temp5 = rstate.h * fpbe(mz,5); - call f(neqn,t+h,y,fnt); + //call f(neqn,t+h,y,fnt); Real err{}; for (int j = 1; j <= INT_NEQS; ++j) { Real wt{}; - if (i <= NumSpec) { - wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; + if (j <= NumSpec) { + wt = rstate.rtol_spec * std::abs(rstate.yn(j)) + rstate.atol_spec; } else { - wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; + wt = rstate.rtol_enuc * std::abs(rstate.yn(j)) + rstate.atol_enuc; } err += std::pow((temp1 * rstate.yjm1(j) + - temp2 * rstate,yjm2(j) + + temp2 * rstate.yjm2(j) + temp3 * rstate.yjm3(j) + temp4 * rstate.yjm4(j) + temp5 * rstate.fnt(j)) / wt, 2); @@ -344,36 +159,10 @@ Real rfstep (BurnT& state, rock4_t& rstate) return err; } -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real mdegre(rock4_t& rstate) -{ - - // Find the optimal degree. - // MP(1): pointer which select the degree in ms(i)\1,2,.. - // such that mdeg<=ms(i). - // MP(2): pointer which gives the corresponding position - // of a_1 in the data recf for the selected degree. - - rstate.mp(2) = 1; - - // Find the degree - - for (int i = 1; i <= 50; ++i) { - if ((ms(i) / rstate.mdeg) >= 1) { - rstate.mdeg = ms(i); - rstate.mp(1) = i; - return; - } - rstate.mp(2) += ms(i)*2 - 1; - } - return -} - - template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rockfrho (BurnT& state, rkc_t& rstate) +Real rockfrho (BurnT& state, rock4_t& rstate) { // Rockfrho compute eigmax, a close upper bound of the spectral @@ -386,8 +175,8 @@ Real rockfrho (BurnT& state, rkc_t& rstate) // z = yjm1 // fz = yjm2 - constexpr int itmax{50}; - constexpr Real onep2{1.2_rt}; + constexpr int maxiter{50}; + constexpr Real safe{1.2_rt}; const Real sqrtu = std::sqrt(UROUND); @@ -400,7 +189,7 @@ Real rockfrho (BurnT& state, rkc_t& rstate) for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm2(i) = rstate.fn(i); } - call f(neqn,t,rstate.yjm2,z); + //call f(neqn,t,rstate.yjm2,z); rstate.nfesig++; } else { for (int i = 1; i <= INT_NEQS; ++i) { @@ -437,7 +226,7 @@ Real rockfrho (BurnT& state, rkc_t& rstate) rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * sqrtu; } } else if (znor != 0.0_rt) { - dzyn = uround; + dzyn = UROUND; Real quot = dzyn / znor; for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yjm1(i) * quot; @@ -458,7 +247,7 @@ Real rockfrho (BurnT& state, rkc_t& rstate) int ind{}; for (int iter = 0; iter < maxiter; ++iter) { - call f(neqn,t,z,rstate.yjm2); + //call f(neqn,t,z,rstate.yjm2); rstate.nfesig++; Real dfzfn{}; @@ -474,7 +263,7 @@ Real rockfrho (BurnT& state, rkc_t& rstate) // The stopping criteria is based on a relative error between // two succesive estimation ``eigmax'' of the spectral radius. - if (iter >= 1 ** std::abs(eigmax-eigmaxo) <= (eigmax*0.05_rt)) { + if (iter >= 1 && std::abs(eigmax-eigmaxo) <= (eigmax*0.05_rt)) { // The last eigenvector is stored. for (int i = 1; i <= INT_NEQS; ++i) { rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); @@ -509,3 +298,219 @@ Real rockfrho (BurnT& state, rkc_t& rstate) rstate.idid = -3; return 0.0_rt; } + + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +int rockfcore (BurnT& state, rock4_t& rstate) +{ + + // Core integrator for ROCK4. + + // initializations + + rstate.nfe = 0; + rstate.nsteps = 0; + rstate.naccpt = 0; + rstate.nreject = 0; + rstate.nfesig = 0; + rstate.max_stages = 0; + rstate.max_rho = 0; + rstate.min_rho = std::numeric_limits::max(); + + rstate.idid = 1; + + Real facmax{5.0_rt}; + Real told{0.0_rt}; + Real err{0.0_rt}; + + int nrej{0}; + int nrho{0}; + int mdego{0}; + + Real hp{rstate.h}; + + bool last{false}; + bool reject{false}; + + + // initialization of the integration step. + + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yn(i) = rstate.y(i); + } + rhs(rstate.t, state, rstate, rstate.fn); + + rstate.nfe++; + Real errp = err; + Real eigmax{}; + + while (true) { + + // Step-size is adjusted. + + if (1.01_rt * rstate.h >= std::abs(rstate.tend - rstate.t)) { + rstate.h = std::abs(rstate.tend - rstate.t); + last = true; + } + + if (rstate.h < 10.0_rt * UROUND) { + rstate.idid = -2; + return rstate.idid; + } + + // Spectral radius. + + if (nrho == 0) { + // Computed internally by rockfrho + eigmax = rockfrho(state, rstate); + if (rstate.idid == -3) { + return rstate.idid; + } + rstate.max_rho = std::max(rstate.max_rho, static_cast(std::round(eigmax))); + rstate.min_rho = std::min(rstate.min_rho, static_cast(std::round(eigmax))); + } + + // The number of stages. + + rstate.mdeg = static_cast(std::sqrt((3.0_rt + rstate.h * eigmax) / 0.353_rt)) + 1; + + if (rstate.mdeg > 152) { + rstate.h = 0.8_rt * (std::pow(152.0_rt, 2) * 0.353_rt - 3.0_rt) / eigmax; + rstate.mdeg = 152; + last = false; + } + + rstate.mdeg = std::max(rstate.mdeg, 5) - 4; + + if (rstate.mdeg != mdego) { + mdegre(rstate); + } + + if (rstate.mdeg + 4 > rstate.max_stages) { + rstate.max_stages = rstate.mdeg + 4; + } + + // Computation of an integration step. + + err = rfstep(state, rstate); + + mdego = rstate.mdeg; + rstate.nsteps++; + rstate.nfe += rstate.mdeg + 4; + + // Error control procedure. + + Real fac = std::pow(1.0_rt / err, 0.25_rt); + + if (errp != 0.0_rt && ! reject) { + Real facp = std::pow(errp, 0.25_rt) * fac * fac * (rstate.h / hp); + fac = std::min(fac, facp); + } + + if (reject) { + facmax = 1.0; + } + + fac = std::min(facmax, std::max(0.1_rt, 0.8_rt * fac)); + Real hnew = rstate.h * fac; + + // Accepted step. + if (err < 1.0_rt) { + rstate.naccpt++; + facmax = 2.0_rt; + rstate.t += rstate.h; + if (reject) { + hnew = std::min(hnew, rstate.h); + if (rstate.tend < rstate.t) { + hnew = std::max(hnew, rstate.h); + } + reject = false; + nrej=0; + } + hp = rstate.h; + rstate.h = hnew; + nrho++; + nrho = nrho+1 % 10; + if (last) { + return rstate.idid; + } else { + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yn(i) = rstate.y(i); + rstate.fn(i) = rstate.fnt(i); + } + } + rstate.nfe++; + errp = err; + continue; + } + + // Rejected step. + rstate.nreject++; + reject = true; + last = false; + rstate.h = 0.8_rt * hnew; + if (rstate.nsteps == 0) { + rstate.h = 0.1e0 * rstate.h; + } + if (told == rstate.t) { + nrej++; + if (nrej == 10) rstate.h = 1.0e-5; // this may not be enough for us? + } + told = rstate.t; + // The spectral radius is recomputed after a step failure + if (nrho != 0) { + nrho = 0; + } else { + nrho = 1; + } + continue; + } + + return rstate.idid; +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +int rock4 (BurnT& state, rock4_t& rstate) +{ + + const Real rmax = 0.1_rt; + const Real rmin = 10.0_rt * UROUND; + + // initializations + + // TODO: get the initial set size + + // Test the initial step size and tolerances. + + if (rstate.h < 10.0_rt * UROUND) { + rstate.idid = -1; + return rstate.idid; + } + + bool valid = true; + + if ((rtol_spec > rmax) || (rtol_enuc > rmax) || + (rtol_spec < rmin) || (rtol_spec < rmin)) { + valid = false; + } + + if (atol_spec < 0.0_rt || atol_enuc < 0.0_rt) { + valid = false; + } + + if (! valid) { + rstate.idid = -1; // TODO: remove idid from rstate + return rstate.idid; + } + + // call the integrator + + rockfcore(state, rstate); + + return rstate.idid; +} + +#endif diff --git a/integration/ROCK4/rock4_coefficients.H b/integration/ROCK4/rock4_coefficients.H index 505ced616e..1e19e3fe7f 100644 --- a/integration/ROCK4/rock4_coefficients.H +++ b/integration/ROCK4/rock4_coefficients.H @@ -8,230 +8,233 @@ const inline AMREX_GPU_MANAGED amrex::Array1D ms = { // Parameters of the finishing procedure -const inline AMREX_GPU_MANAGED amrex::Array2D fpa = { - {-.149352078672699e+00, 0.629768962985252e+00, -.355201061573650e+00, - 0.146745996307541e-01, -.558517281602565e-01, 0.590312931352706e+00}, - {-.179313593132677e+00, 0.522354978881996e+00, -.268020263243268e+00, - 0.410644459848542e-01, -.673692676033641e-01, 0.534974252895965e+00}, - {-.182428104178289e+00, 0.488581974232839e+00, -.243999027372673e+00, - 0.403844469216897e-01, -.621100542563179e-01, 0.510891501054959e+00}, - {-.177747282156689e+00, 0.475598890858970e+00, -.236544145857569e+00, - 0.357873367680739e-01, -.561802405454197e-01, 0.498502393780149e+00}, - {-.171097214294784e+00, 0.471021380996139e+00, -.235432301175529e+00, - 0.305165148305403e-01, -.508758913107147e-01, 0.491537536121394e+00}, - {-.164446145110292e+00, 0.470315341552133e+00, -.237054736024656e+00, - 0.253636332272387e-01, -.462365759807733e-01, 0.487394153808489e+00}, - {-.158427655171257e+00, 0.471468878620055e+00, -.239853802450812e+00, - 0.205746749952032e-01, -.421744356707249e-01, 0.484829913014008e+00}, - {-.153293058075572e+00, 0.473282079177035e+00, -.242910850765406e+00, - 0.163722321103915e-01, -.387108095861697e-01, 0.483081034299037e+00}, - {-.148972804305139e+00, 0.475296959544537e+00, -.245899260153289e+00, - 0.127203010191100e-01, -.357508839759137e-01, 0.481825981739298e+00}, - // - {-.145179937599982e+00, 0.477661231491125e+00, -.248988404183759e+00, - 0.930730703798092e-02, -.330359105371527e-01, 0.481074258113903e+00}, - {-.141803779162182e+00, 0.480294472251598e+00, -.252149638985389e+00, - 0.605980548716020e-02, -.304878190339923e-01, 0.480717680079251e+00}, - {-.139121943562170e+00, 0.482307569354585e+00, -.254656989245024e+00, - 0.349723479360248e-02, -.284636204606306e-01, 0.480267545886151e+00}, - {-.136626653539895e+00, 0.484641896383759e+00, -.257332057712838e+00, - 0.915869293860006e-03, -.264509129364182e-01, 0.480154720984400e+00}, - {-.134486447576714e+00, 0.486757723660692e+00, -.259733624852103e+00, - -.135988997170157e-02, -.246765061257936e-01, 0.480084593714673e+00}, - {-.132780674018083e+00, 0.488321952587049e+00, -.261588769418801e+00, - -.313701049350723e-02, -.232786280695929e-01, 0.479882004899598e+00}, - {-.131117609799413e+00, 0.490193639754613e+00, -.263646432339284e+00, - -.502134729674226e-02, -.218133033112692e-01, 0.479929065438669e+00}, - {-.129737943206222e+00, 0.491700319201409e+00, -.265337954300747e+00, - -.657602712355092e-02, -.205977998576123e-01, 0.479898556782486e+00}, - {-.128546948141681e+00, 0.493011323225514e+00, -.266816177922376e+00, - -.793004771706004e-02, -.195369613099883e-01, 0.479857299633325e+00}, - // - {-.127460377104448e+00, 0.494293149884316e+00, -.268231271325724e+00, - -.920717061172173e-02, -.185386009080156e-01, 0.479869528636923e+00}, - {-.126496410155342e+00, 0.495458691659965e+00, -.269513232370108e+00, - -.103575442717928e-01, -.176387115527810e-01, 0.479887174404288e+00}, - {-.124868416118615e+00, 0.497490597051425e+00, -.271737391165211e+00, - -.123394260182449e-01, -.160868868427959e-01, 0.479932724633469e+00}, - {-.123564405510046e+00, 0.499164732520327e+00, -.273565616640958e+00, - -.139585436258901e-01, -.148169722656038e-01, 0.479973747650230e+00}, - {-.122505008329286e+00, 0.500555383947992e+00, -.275081797679137e+00, - -.152951780850662e-01, -.137670777523960e-01, 0.480009428375171e+00}, - {-.121640329449530e+00, 0.501700402349954e+00, -.276333007672789e+00, - -.163961730000813e-01, -.129007107727469e-01, 0.480031673127157e+00}, - {-.120917917691482e+00, 0.502675119491259e+00, -.277395466055127e+00, - -.173277807640047e-01, -.121670308408281e-01, 0.480054118477096e+00}, - {-.120710248396632e+00, 0.502361065588637e+00, -.277299180400763e+00, - -.173459597107178e-01, -.121268146405534e-01, 0.479596544727020e+00}, - {-.120151946726542e+00, 0.503187463625006e+00, -.278173489088946e+00, - -.180998664145073e-01, -.115355117518033e-01, 0.479663327238431e+00}, - // - {-.119650804512964e+00, 0.503968844736113e+00, -.278987558251327e+00, - -.187954561730573e-01, -.109907774512063e-01, 0.479748806593835e+00}, - {-.119231690274109e+00, 0.504610327555198e+00, -.279662019452110e+00, - -.193736976241804e-01, -.105368584242475e-01, 0.479807172254604e+00}, - {-.118685223311611e+00, 0.505479309944796e+00, -.280566027535941e+00, - -.201436607277488e-01, -.993291024114479e-02, 0.479903135786603e+00}, - {-.118231796286135e+00, 0.506213890671776e+00, -.281327499307895e+00, - -.207902381330527e-01, -.942553811892237e-02, 0.479988558979737e+00}, - {-.117860168810132e+00, 0.506813986559461e+00, -.281951733666353e+00, - -.213206692268858e-01, -.900871675159034e-02, 0.480053891764692e+00}, - {-.117541632407920e+00, 0.507340547092223e+00, -.282496164808253e+00, - -.217814864430309e-01, -.864670120809640e-02, 0.480116952219068e+00}, - {-.117280791290490e+00, 0.507762024730383e+00, -.282936101835780e+00, - -.221553810871189e-01, -.835235476491614e-02, 0.480159581641243e+00}, - {-.117020809344219e+00, 0.508234853606851e+00, -.283411245544839e+00, - -.225511383509412e-01, -.804255449961079e-02, 0.480240908974576e+00}, - {-.116840110106662e+00, 0.508513931927332e+00, -.283708061860511e+00, - -.228054436800931e-01, -.784157438541911e-02, 0.480258758199155e+00}, - // - {-.116999141776097e+00, 0.507738965363869e+00, -.283085550597818e+00, - -.223557928014705e-01, -.817646181729438e-02, 0.479839084150866e+00}, - {-.116787474223622e+00, 0.508124510062097e+00, -.283473179991593e+00, - -.226786360708563e-01, -.792370493215401e-02, 0.479905001144018e+00}, - {-.116543053242319e+00, 0.508649023059358e+00, -.283975543942050e+00, - -.230858609767789e-01, -.760742817737876e-02, 0.480040247388773e+00}, - {-.116369877848172e+00, 0.508950670881779e+00, -.284284071372858e+00, - -.233448484372084e-01, -.740387836067644e-02, 0.480081925815726e+00}, - {-.115981831952477e+00, 0.509942937789055e+00, -.285192892337194e+00, - -.240615204888854e-01, -.685134671736066e-02, 0.480412958109969e+00}, - {-.115934409239879e+00, 0.509932625794726e+00, -.285214065725890e+00, - -.240929036649298e-01, -.682325905888604e-02, 0.480353282861487e+00}, - {-.114543930853965e+00, 0.514055666969259e+00, -.288877128663596e+00, - -.269187182378037e-01, -.465261555222027e-02, 0.481928410401348e+00}, - {-.114338190892959e+00, 0.514568129329710e+00, -.289354467784058e+00, - -.272970253684862e-01, -.435838305221696e-02, 0.482082731512007e+00}, - {-.113900806706479e+00, 0.515815247278763e+00, -.290479621681517e+00, - -.281706242269155e-01, -.368286974902504e-02, 0.482524745170433e+00}, - // - {-.114241230745559e+00, 0.514642605930859e+00, -.289464730587169e+00, - -.274037778296787e-01, -.427016797791793e-02, 0.482029696494976e+00}, - {-.113830853818569e+00, 0.515834254672657e+00, -.290535565769687e+00, - -.282330735764243e-01, -.362939602828681e-02, 0.482459847410651e+00}, - {-.113105039346215e+00, 0.518047629039909e+00, -.292508542364670e+00, - -.297505373346793e-01, -.245703714012197e-02, 0.483285747825278e+00}, - {-.113373695071906e+00, 0.517118156325443e+00, -.291701320745508e+00, - -.291406743553601e-01, -.292560575875699e-02, 0.482899951273987e+00}, - {-.112938370080633e+00, 0.518440212713205e+00, -.292882869228272e+00, +inline AMREX_GPU_MANAGED amrex::Array2D fpa = {{ + // rows 1-9 + -.149352078672699e+00, 0.629768962985252e+00, -.355201061573650e+00, + 0.146745996307541e-01, -.558517281602565e-01, 0.590312931352706e+00, + -.179313593132677e+00, 0.522354978881996e+00, -.268020263243268e+00, + 0.410644459848542e-01, -.673692676033641e-01, 0.534974252895965e+00, + -.182428104178289e+00, 0.488581974232839e+00, -.243999027372673e+00, + 0.403844469216897e-01, -.621100542563179e-01, 0.510891501054959e+00, + -.177747282156689e+00, 0.475598890858970e+00, -.236544145857569e+00, + 0.357873367680739e-01, -.561802405454197e-01, 0.498502393780149e+00, + -.171097214294784e+00, 0.471021380996139e+00, -.235432301175529e+00, + 0.305165148305403e-01, -.508758913107147e-01, 0.491537536121394e+00, + -.164446145110292e+00, 0.470315341552133e+00, -.237054736024656e+00, + 0.253636332272387e-01, -.462365759807733e-01, 0.487394153808489e+00, + -.158427655171257e+00, 0.471468878620055e+00, -.239853802450812e+00, + 0.205746749952032e-01, -.421744356707249e-01, 0.484829913014008e+00, + -.153293058075572e+00, 0.473282079177035e+00, -.242910850765406e+00, + 0.163722321103915e-01, -.387108095861697e-01, 0.483081034299037e+00, + -.148972804305139e+00, 0.475296959544537e+00, -.245899260153289e+00, + 0.127203010191100e-01, -.357508839759137e-01, 0.481825981739298e+00, + // rows 10-18 + -.145179937599982e+00, 0.477661231491125e+00, -.248988404183759e+00, + 0.930730703798092e-02, -.330359105371527e-01, 0.481074258113903e+00, + -.141803779162182e+00, 0.480294472251598e+00, -.252149638985389e+00, + 0.605980548716020e-02, -.304878190339923e-01, 0.480717680079251e+00, + -.139121943562170e+00, 0.482307569354585e+00, -.254656989245024e+00, + 0.349723479360248e-02, -.284636204606306e-01, 0.480267545886151e+00, + -.136626653539895e+00, 0.484641896383759e+00, -.257332057712838e+00, + 0.915869293860006e-03, -.264509129364182e-01, 0.480154720984400e+00, + -.134486447576714e+00, 0.486757723660692e+00, -.259733624852103e+00, + -.135988997170157e-02, -.246765061257936e-01, 0.480084593714673e+00, + -.132780674018083e+00, 0.488321952587049e+00, -.261588769418801e+00, + -.313701049350723e-02, -.232786280695929e-01, 0.479882004899598e+00, + -.131117609799413e+00, 0.490193639754613e+00, -.263646432339284e+00, + -.502134729674226e-02, -.218133033112692e-01, 0.479929065438669e+00, + -.129737943206222e+00, 0.491700319201409e+00, -.265337954300747e+00, + -.657602712355092e-02, -.205977998576123e-01, 0.479898556782486e+00, + -.128546948141681e+00, 0.493011323225514e+00, -.266816177922376e+00, + -.793004771706004e-02, -.195369613099883e-01, 0.479857299633325e+00, + // rows 19-27 + -.127460377104448e+00, 0.494293149884316e+00, -.268231271325724e+00, + -.920717061172173e-02, -.185386009080156e-01, 0.479869528636923e+00, + -.126496410155342e+00, 0.495458691659965e+00, -.269513232370108e+00, + -.103575442717928e-01, -.176387115527810e-01, 0.479887174404288e+00, + -.124868416118615e+00, 0.497490597051425e+00, -.271737391165211e+00, + -.123394260182449e-01, -.160868868427959e-01, 0.479932724633469e+00, + -.123564405510046e+00, 0.499164732520327e+00, -.273565616640958e+00, + -.139585436258901e-01, -.148169722656038e-01, 0.479973747650230e+00, + -.122505008329286e+00, 0.500555383947992e+00, -.275081797679137e+00, + -.152951780850662e-01, -.137670777523960e-01, 0.480009428375171e+00, + -.121640329449530e+00, 0.501700402349954e+00, -.276333007672789e+00, + -.163961730000813e-01, -.129007107727469e-01, 0.480031673127157e+00, + -.120917917691482e+00, 0.502675119491259e+00, -.277395466055127e+00, + -.173277807640047e-01, -.121670308408281e-01, 0.480054118477096e+00, + -.120710248396632e+00, 0.502361065588637e+00, -.277299180400763e+00, + -.173459597107178e-01, -.121268146405534e-01, 0.479596544727020e+00, + -.120151946726542e+00, 0.503187463625006e+00, -.278173489088946e+00, + -.180998664145073e-01, -.115355117518033e-01, 0.479663327238431e+00, + // rows 28-36 + -.119650804512964e+00, 0.503968844736113e+00, -.278987558251327e+00, + -.187954561730573e-01, -.109907774512063e-01, 0.479748806593835e+00, + -.119231690274109e+00, 0.504610327555198e+00, -.279662019452110e+00, + -.193736976241804e-01, -.105368584242475e-01, 0.479807172254604e+00, + -.118685223311611e+00, 0.505479309944796e+00, -.280566027535941e+00, + -.201436607277488e-01, -.993291024114479e-02, 0.479903135786603e+00, + -.118231796286135e+00, 0.506213890671776e+00, -.281327499307895e+00, + -.207902381330527e-01, -.942553811892237e-02, 0.479988558979737e+00, + -.117860168810132e+00, 0.506813986559461e+00, -.281951733666353e+00, + -.213206692268858e-01, -.900871675159034e-02, 0.480053891764692e+00, + -.117541632407920e+00, 0.507340547092223e+00, -.282496164808253e+00, + -.217814864430309e-01, -.864670120809640e-02, 0.480116952219068e+00, + -.117280791290490e+00, 0.507762024730383e+00, -.282936101835780e+00, + -.221553810871189e-01, -.835235476491614e-02, 0.480159581641243e+00, + -.117020809344219e+00, 0.508234853606851e+00, -.283411245544839e+00, + -.225511383509412e-01, -.804255449961079e-02, 0.480240908974576e+00, + -.116840110106662e+00, 0.508513931927332e+00, -.283708061860511e+00, + -.228054436800931e-01, -.784157438541911e-02, 0.480258758199155e+00, + // rows 37-45 + -.116999141776097e+00, 0.507738965363869e+00, -.283085550597818e+00, + -.223557928014705e-01, -.817646181729438e-02, 0.479839084150866e+00, + -.116787474223622e+00, 0.508124510062097e+00, -.283473179991593e+00, + -.226786360708563e-01, -.792370493215401e-02, 0.479905001144018e+00, + -.116543053242319e+00, 0.508649023059358e+00, -.283975543942050e+00, + -.230858609767789e-01, -.760742817737876e-02, 0.480040247388773e+00, + -.116369877848172e+00, 0.508950670881779e+00, -.284284071372858e+00, + -.233448484372084e-01, -.740387836067644e-02, 0.480081925815726e+00, + -.115981831952477e+00, 0.509942937789055e+00, -.285192892337194e+00, + -.240615204888854e-01, -.685134671736066e-02, 0.480412958109969e+00, + -.115934409239879e+00, 0.509932625794726e+00, -.285214065725890e+00, + -.240929036649298e-01, -.682325905888604e-02, 0.480353282861487e+00, + -.114543930853965e+00, 0.514055666969259e+00, -.288877128663596e+00, + -.269187182378037e-01, -.465261555222027e-02, 0.481928410401348e+00, + -.114338190892959e+00, 0.514568129329710e+00, -.289354467784058e+00, + -.272970253684862e-01, -.435838305221696e-02, 0.482082731512007e+00, + -.113900806706479e+00, 0.515815247278763e+00, -.290479621681517e+00, + -.281706242269155e-01, -.368286974902504e-02, 0.482524745170433e+00, + // rows 46-50 + -.114241230745559e+00, 0.514642605930859e+00, -.289464730587169e+00, + -.274037778296787e-01, -.427016797791793e-02, 0.482029696494976e+00, + -.113830853818569e+00, 0.515834254672657e+00, -.290535565769687e+00, + -.282330735764243e-01, -.362939602828681e-02, 0.482459847410651e+00, + -.113105039346215e+00, 0.518047629039909e+00, -.292508542364670e+00, + -.297505373346793e-01, -.245703714012197e-02, 0.483285747825278e+00, + -.113373695071906e+00, 0.517118156325443e+00, -.291701320745508e+00, + -.291406743553601e-01, -.292560575875699e-02, 0.482899951273987e+00, + -.112938370080633e+00, 0.518440212713205e+00, -.292882869228272e+00, -.300502325911247e-01, -.222188377341845e-02, 0.483386803334408e+00}}; -const inline AMREX_GPU_MANAGED amrex::Array2D fpb = { - {0.934502625489809e+00, -.426556402801135e+00, -.428612609028723e+00, 0.744370090574855e+00}, - {0.727428506710284e+00, -.281882500610754e+00, -.366883181811475e+00, 0.684341322628128e+00}, - {0.671969568061243e+00, -.247327027296030e+00, -.348410422675722e+00, 0.657516722491004e+00}, - {0.655616700297981e+00, -.238808679740035e+00, -.342918097601918e+00, 0.643274312048176e+00}, - {0.653766630051757e+00, -.239717659625342e+00, -.342124625373560e+00, 0.634842894408973e+00}, - {0.657958401550080e+00, -.244504571310874e+00, -.343125007747822e+00, 0.629452994091047e+00}, - {0.664644828327504e+00, -.250836131475691e+00, -.344767760715637e+00, 0.625804292371554e+00}, - {0.671778926897883e+00, -.257341094888494e+00, -.346437936729090e+00, 0.623113789954589e+00}, - {0.678662206121957e+00, -.263538563990534e+00, -.347971227180309e+00, 0.621040683222628e+00}, - {0.685711960310753e+00, -.269724027269246e+00, -.349535907736682e+00, 0.619566456617273e+00}, - {0.692884607363355e+00, -.275886628173354e+00, -.351131980732774e+00, 0.618568501341401e+00}, - {0.698546656891454e+00, -.280881006247969e+00, -.352285102713857e+00, 0.617571192399056e+00}, - // - {0.704573921792281e+00, -.286045457291729e+00, -.353563979295968e+00, 0.616965030808178e+00}, - {0.709971428905986e+00, -.290682008221983e+00, -.354679184547433e+00, 0.616462060289197e+00}, - {0.714125178664410e+00, -.294349691347616e+00, -.355464510591820e+00, 0.615888572779772e+00}, - {0.718736274563484e+00, -.298288036358834e+00, -.356401512165052e+00, 0.615594896206387e+00}, - {0.722517387767685e+00, -.301568462204942e+00, -.357129478686764e+00, 0.615267647826005e+00}, - {0.725816343813274e+00, -.304448113195281e+00, -.357746756688570e+00, 0.614963961979991e+00}, - {0.728974076820863e+00, -.307182320589777e+00, -.358345483491417e+00, 0.614739362936109e+00}, - {0.731832397913825e+00, -.309659464712225e+00, -.358881456195461e+00, 0.614544900863432e+00}, - {0.736786729484850e+00, -.313957288328657e+00, -.359797924432667e+00, 0.614228100935116e+00}, - {0.740854099130286e+00, -.317495426161459e+00, -.360535121685962e+00, 0.613973796355241e+00}, - {0.744223896195403e+00, -.320433632193417e+00, -.361135560093482e+00, 0.613766054898060e+00}, - {0.747001832700433e+00, -.322865419691933e+00, -.361620350229670e+00, 0.613586121252665e+00}, - // - {0.749359431920161e+00, -.324930741701897e+00, -.362028107948934e+00, 0.613438378039065e+00}, - {0.749100998320598e+00, -.324985993239383e+00, -.361796607662197e+00, 0.612867258144605e+00}, - {0.751043873200700e+00, -.326661586308774e+00, -.362147816931696e+00, 0.612807453647952e+00}, - {0.752854624396087e+00, -.328210433831008e+00, -.362482431451812e+00, 0.612782100341090e+00}, - {0.754353169889782e+00, -.329501139703409e+00, -.362752509396770e+00, 0.612745403519662e+00}, - {0.756363017447499e+00, -.331222786188901e+00, -.363119850550614e+00, 0.612719466518580e+00}, - {0.758055963580132e+00, -.332671506824595e+00, -.363429198770158e+00, 0.612703916106263e+00}, - {0.759443004727975e+00, -.333862330033422e+00, -.363679324780792e+00, 0.612685408765563e+00}, - {0.760653160327002e+00, -.334898139570366e+00, -.363899175365336e+00, 0.612677301460611e+00}, - {0.761629956010211e+00, -.335739950284413e+00, -.364072376423153e+00, 0.612660139381166e+00}, - {0.762688789887627e+00, -.336630474589357e+00, -.364274785126092e+00, 0.612687294013859e+00}, - {0.763346400554849e+00, -.337204680067583e+00, -.364385896133756e+00, 0.612661785846953e+00}. - // - {0.761923304846226e+00, -.336206156720779e+00, -.363978603432088e+00, 0.612221699604794e+00}, - {0.762786806785331e+00, -.336933071907623e+00, -.364142956905108e+00, 0.612243212238912e+00}, - {0.763911644345184e+00, -.337848624997397e+00, -.364378249037553e+00, 0.612335667041690e+00}, - {0.764597562248984e+00, -.338433363367646e+00, -.364503441229143e+00, 0.612339040874567e+00}, - {0.766642781170500e+00, -.340044276021276e+00, -.364967251951014e+00, 0.612618883157375e+00}, - {0.766682555493412e+00, -.340118220148353e+00, -.364946973037536e+00, 0.612538317898983e+00}, - {0.774955438746513e+00, -.346489297090328e+00, -.366916081411072e+00, 0.613985554671875e+00}, - {0.776027351639685e+00, -.347348043660042e+00, -.367147411126057e+00, 0.614109087783370e+00}, - {0.778563137974742e+00, -.349330512988104e+00, -.367727843519890e+00, 0.614502095324990e+00}, - {0.776264664166250e+00, -.347594735539935e+00, -.367159451116240e+00, 0.614023148520995e+00}, - {0.778679038214519e+00, -.349476481579656e+00, -.367715953710640e+00, 0.614409463784688e+00}, - {0.783131247138323e+00, -.352927933064792e+00, -.368752741091226e+00, 0.615166687043411e+00}, - // - {0.781304104495501e+00, -.351541585232233e+00, -.368306700790280e+00, 0.614794688266817e+00}, - {0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}}; +inline AMREX_GPU_MANAGED amrex::Array2D fpb = {{ + // rows 1-12 + 0.934502625489809e+00, -.426556402801135e+00, -.428612609028723e+00, 0.744370090574855e+00, + 0.727428506710284e+00, -.281882500610754e+00, -.366883181811475e+00, 0.684341322628128e+00, + 0.671969568061243e+00, -.247327027296030e+00, -.348410422675722e+00, 0.657516722491004e+00, + 0.655616700297981e+00, -.238808679740035e+00, -.342918097601918e+00, 0.643274312048176e+00, + 0.653766630051757e+00, -.239717659625342e+00, -.342124625373560e+00, 0.634842894408973e+00, + 0.657958401550080e+00, -.244504571310874e+00, -.343125007747822e+00, 0.629452994091047e+00, + 0.664644828327504e+00, -.250836131475691e+00, -.344767760715637e+00, 0.625804292371554e+00, + 0.671778926897883e+00, -.257341094888494e+00, -.346437936729090e+00, 0.623113789954589e+00, + 0.678662206121957e+00, -.263538563990534e+00, -.347971227180309e+00, 0.621040683222628e+00, + 0.685711960310753e+00, -.269724027269246e+00, -.349535907736682e+00, 0.619566456617273e+00, + 0.692884607363355e+00, -.275886628173354e+00, -.351131980732774e+00, 0.618568501341401e+00, + 0.698546656891454e+00, -.280881006247969e+00, -.352285102713857e+00, 0.617571192399056e+00, + // rows 13-24 + 0.704573921792281e+00, -.286045457291729e+00, -.353563979295968e+00, 0.616965030808178e+00, + 0.709971428905986e+00, -.290682008221983e+00, -.354679184547433e+00, 0.616462060289197e+00, + 0.714125178664410e+00, -.294349691347616e+00, -.355464510591820e+00, 0.615888572779772e+00, + 0.718736274563484e+00, -.298288036358834e+00, -.356401512165052e+00, 0.615594896206387e+00, + 0.722517387767685e+00, -.301568462204942e+00, -.357129478686764e+00, 0.615267647826005e+00, + 0.725816343813274e+00, -.304448113195281e+00, -.357746756688570e+00, 0.614963961979991e+00, + 0.728974076820863e+00, -.307182320589777e+00, -.358345483491417e+00, 0.614739362936109e+00, + 0.731832397913825e+00, -.309659464712225e+00, -.358881456195461e+00, 0.614544900863432e+00, + 0.736786729484850e+00, -.313957288328657e+00, -.359797924432667e+00, 0.614228100935116e+00, + 0.740854099130286e+00, -.317495426161459e+00, -.360535121685962e+00, 0.613973796355241e+00, + 0.744223896195403e+00, -.320433632193417e+00, -.361135560093482e+00, 0.613766054898060e+00, + 0.747001832700433e+00, -.322865419691933e+00, -.361620350229670e+00, 0.613586121252665e+00, + // rows 25-36 + 0.749359431920161e+00, -.324930741701897e+00, -.362028107948934e+00, 0.613438378039065e+00, + 0.749100998320598e+00, -.324985993239383e+00, -.361796607662197e+00, 0.612867258144605e+00, + 0.751043873200700e+00, -.326661586308774e+00, -.362147816931696e+00, 0.612807453647952e+00, + 0.752854624396087e+00, -.328210433831008e+00, -.362482431451812e+00, 0.612782100341090e+00, + 0.754353169889782e+00, -.329501139703409e+00, -.362752509396770e+00, 0.612745403519662e+00, + 0.756363017447499e+00, -.331222786188901e+00, -.363119850550614e+00, 0.612719466518580e+00, + 0.758055963580132e+00, -.332671506824595e+00, -.363429198770158e+00, 0.612703916106263e+00, + 0.759443004727975e+00, -.333862330033422e+00, -.363679324780792e+00, 0.612685408765563e+00, + 0.760653160327002e+00, -.334898139570366e+00, -.363899175365336e+00, 0.612677301460611e+00, + 0.761629956010211e+00, -.335739950284413e+00, -.364072376423153e+00, 0.612660139381166e+00, + 0.762688789887627e+00, -.336630474589357e+00, -.364274785126092e+00, 0.612687294013859e+00, + 0.763346400554849e+00, -.337204680067583e+00, -.364385896133756e+00, 0.612661785846953e+00, + // rows 37-48 + 0.761923304846226e+00, -.336206156720779e+00, -.363978603432088e+00, 0.612221699604794e+00, + 0.762786806785331e+00, -.336933071907623e+00, -.364142956905108e+00, 0.612243212238912e+00, + 0.763911644345184e+00, -.337848624997397e+00, -.364378249037553e+00, 0.612335667041690e+00, + 0.764597562248984e+00, -.338433363367646e+00, -.364503441229143e+00, 0.612339040874567e+00, + 0.766642781170500e+00, -.340044276021276e+00, -.364967251951014e+00, 0.612618883157375e+00, + 0.766682555493412e+00, -.340118220148353e+00, -.364946973037536e+00, 0.612538317898983e+00, + 0.774955438746513e+00, -.346489297090328e+00, -.366916081411072e+00, 0.613985554671875e+00, + 0.776027351639685e+00, -.347348043660042e+00, -.367147411126057e+00, 0.614109087783370e+00, + 0.778563137974742e+00, -.349330512988104e+00, -.367727843519890e+00, 0.614502095324990e+00, + 0.776264664166250e+00, -.347594735539935e+00, -.367159451116240e+00, 0.614023148520995e+00, + 0.778679038214519e+00, -.349476481579656e+00, -.367715953710640e+00, 0.614409463784688e+00, + 0.783131247138323e+00, -.352927933064792e+00, -.368752741091226e+00, 0.615166687043411e+00, + // rows 49-50 + 0.781304104495501e+00, -.351541585232233e+00, -.368306700790280e+00, 0.614794688266817e+00, + 0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}}; -const inline AMREX_GPU_MANAGED amrex::Array2D fpe = { - {0.113509972110540e+01, -.584333360989720e+00, -.319172911177732e+00, 0.482853558185876e+00, 0.109256697110981e+00}, - {0.100479199674788e+01, -.436644602461537e+00, -.423443966877378e+00, 0.538770645909717e+00, 0.795300735974956e-01}, - {0.984907410167693e+00, -.403297625005343e+00, -.485090625106059e+00, 0.576309835350610e+00, 0.609198451735942e-01}, - {0.980171201303714e+00, -.394437889689979e+00, -.517381582925487e+00, 0.601142288908999e+00, 0.476702174069568e-01}, - {0.974834695776200e+00, -.392308952799017e+00, -.530263724070033e+00, 0.616510618632796e+00, 0.379946019218839e-01}, - {0.966668353329992e+00, -.391741144639394e+00, -.531455776704021e+00, 0.625494551194751e+00, 0.308158334011040e-01}, - {0.956319747720222e+00, -.391138376736994e+00, -.526142643689543e+00, 0.630404554467362e+00, 0.254019467466823e-01}, - {0.943587787064690e+00, -.389377300510789e+00, -.516876350192269e+00, 0.632531861517858e+00, 0.212476873553974e-01}, - {0.929868441621807e+00, -.386750527439590e+00, -.505935645060380e+00, 0.633001592986906e+00, 0.180092360649997e-01}, - // - {0.917878947092234e+00, -.384686528119553e+00, -.495511556683115e+00, 0.632891756120139e+00, 0.154458635123923e-01}, - {0.907921031017813e+00, -.383354597608536e+00, -.486086276370317e+00, 0.632568615019003e+00, 0.133857277406643e-01}, - {0.896388476009400e+00, -.380504535913835e+00, -.476131894672218e+00, 0.631491892380436e+00, 0.117078025249012e-01}, - {0.887685870010584e+00, -.378944197433540e+00, -.467828653690999e+00, 0.630692391160778e+00, 0.103241059659401e-01}, - {0.879470814062224e+00, -.377245094706344e+00, -.460102121012690e+00, 0.629778007382364e+00, 0.917069070021292e-02}, - {0.870530751362587e+00, -.374648589005799e+00, -.452452352164561e+00, 0.628569291738020e+00, 0.820044757449899e-02}, - {0.864018892596866e+00, -.373280954775127e+00, -.446202255714937e+00, 0.627730565946685e+00, 0.737537419249938e-02}, - {0.857357924295629e+00, -.371485680656218e+00, -.440234425775788e+00, 0.626780133051391e+00, 0.666914378696866e-02}, - {0.851096961215784e+00, -.369663988413454e+00, -.434754090977242e+00, 0.625846657124080e+00, 0.605989696024640e-02}, - // - {0.845691163494378e+00, -.368162878390094e+00, -.429905486466339e+00, 0.625032425385260e+00, 0.553041165257352e-02}, - {0.840754783321373e+00, -.366754374490097e+00, -.425504080282415e+00, 0.624272520855683e+00, 0.506752846502820e-02}, - {0.832129732678031e+00, -.364215201885908e+00, -.417868687835329e+00, 0.622912972095680e+00, 0.430080260616755e-02}, - {0.824841358445432e+00, -.361969316759517e+00, -.411506554101034e+00, 0.621735648069777e+00, 0.369621198344728e-02}, - {0.818660702021942e+00, -.359997706140366e+00, -.406173910081373e+00, 0.620720634622955e+00, 0.321103838340649e-02}, - {0.813343156361523e+00, -.358234931076463e+00, -.401657773073081e+00, 0.619835953653306e+00, 0.281577816620828e-02}, - {0.808812551334635e+00, -.356709737514645e+00, -.397829666549206e+00, 0.619076368359449e+00, 0.248944467816156e-02}, - {0.802058241484851e+00, -.353305127983149e+00, -.393665858753007e+00, 0.617880189866334e+00, 0.221821094859412e-02}, - {0.799023019885202e+00, -.352371068280062e+00, -.390970958156562e+00, 0.617372975124671e+00, 0.198795503493263e-02}, - // - {0.796533707522770e+00, -.351659214274525e+00, -.388680577600314e+00, 0.616958145987822e+00, 0.179179781860265e-02}, - {0.794254415802991e+00, -.350955011234794e+00, -.386652430547127e+00, 0.616574541234043e+00, 0.162340905415174e-02}, - {0.791451974069317e+00, -.350127723737597e+00, -.384099751306937e+00, 0.616103218945433e+00, 0.141212925634866e-02}, - {0.789140296939903e+00, -.349447391105024e+00, -.381986708309451e+00, 0.615713343205178e+00, 0.123963336103694e-02}, - {0.787155036742462e+00, -.348839107260454e+00, -.380202863720354e+00, 0.615376708082511e+00, 0.109698483515876e-02}, - {0.785509443687073e+00, -.348347728366112e+00, -.378703894403193e+00, 0.615097681507449e+00, 0.977644426693831e-03}, - {0.784038223206202e+00, -.347876842227869e+00, -.377407083344177e+00, 0.614846655967241e+00, 0.876815082414696e-03}, - {0.783010378301710e+00, -.347648245486129e+00, -.376356876713355e+00, 0.614674780335034e+00, 0.790787748777402e-03}, - {0.781833266343420e+00, -.347234482878725e+00, -.375370253527294e+00, 0.614472179428255e+00, 0.716900834807566e-03}, - // - {0.778157258445688e+00, -.345006104027160e+00, -.373629716648469e+00, 0.613804905745683e+00, 0.633900782409020e-03}, - {0.777300034873279e+00, -.344806720424309e+00, -.372764739426396e+00, 0.613661241678936e+00, 0.564173510000384e-03}, - {0.776985336763925e+00, -.344948310351192e+00, -.372138199888685e+00, 0.613616309802328e+00, 0.505301025547597e-03}, - {0.776123576908821e+00, -.344696744011525e+00, -.371340582024658e+00, 0.613469644712914e+00, 0.443902941209962e-03}, - {0.776949282583553e+00, -.345654199916775e+00, -.371072531043118e+00, 0.613634699306968e+00, 0.392885424956897e-03}, - {0.775876610212432e+00, -.345123309087147e+00, -.370392356339381e+00, 0.613444359409516e+00, 0.350376011087039e-03}, - {0.783347589653809e+00, -.351086251339795e+00, -.371860974551612e+00, 0.614828131953302e+00, 0.307119201283797e-03}, - {0.783496656673086e+00, -.351443051706240e+00, -.371545102252444e+00, 0.614860564019234e+00, 0.271917903319380e-03}, - {0.785178130625954e+00, -.352964147655529e+00, -.371615967722576e+00, 0.615170969674100e+00, 0.237891869788885e-03}, - // - {0.782045229930799e+00, -.350764936286095e+00, -.370561648626977e+00, 0.614604810918108e+00, 0.210170095234033e-03}, - {0.783792445229447e+00, -.352285904984906e+00, -.370720709266521e+00, 0.614926468923107e+00, 0.183766807783551e-03}, - {0.787664243592327e+00, -.355426631067992e+00, -.371408773264980e+00, 0.615628921926696e+00, 0.159498839664580e-03}, - {0.785248632105467e+00, -.353713152595833e+00, -.370620439974436e+00, 0.615195478568662e+00, 0.139988635943928e-03}, - {0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}}; +inline AMREX_GPU_MANAGED amrex::Array2D fpbe = {{ + // rows 1-9 + 0.113509972110540e+01, -.584333360989720e+00, -.319172911177732e+00, 0.482853558185876e+00, 0.109256697110981e+00, + 0.100479199674788e+01, -.436644602461537e+00, -.423443966877378e+00, 0.538770645909717e+00, 0.795300735974956e-01, + 0.984907410167693e+00, -.403297625005343e+00, -.485090625106059e+00, 0.576309835350610e+00, 0.609198451735942e-01, + 0.980171201303714e+00, -.394437889689979e+00, -.517381582925487e+00, 0.601142288908999e+00, 0.476702174069568e-01, + 0.974834695776200e+00, -.392308952799017e+00, -.530263724070033e+00, 0.616510618632796e+00, 0.379946019218839e-01, + 0.966668353329992e+00, -.391741144639394e+00, -.531455776704021e+00, 0.625494551194751e+00, 0.308158334011040e-01, + 0.956319747720222e+00, -.391138376736994e+00, -.526142643689543e+00, 0.630404554467362e+00, 0.254019467466823e-01, + 0.943587787064690e+00, -.389377300510789e+00, -.516876350192269e+00, 0.632531861517858e+00, 0.212476873553974e-01, + 0.929868441621807e+00, -.386750527439590e+00, -.505935645060380e+00, 0.633001592986906e+00, 0.180092360649997e-01, + // rows 10-18 + 0.917878947092234e+00, -.384686528119553e+00, -.495511556683115e+00, 0.632891756120139e+00, 0.154458635123923e-01, + 0.907921031017813e+00, -.383354597608536e+00, -.486086276370317e+00, 0.632568615019003e+00, 0.133857277406643e-01, + 0.896388476009400e+00, -.380504535913835e+00, -.476131894672218e+00, 0.631491892380436e+00, 0.117078025249012e-01, + 0.887685870010584e+00, -.378944197433540e+00, -.467828653690999e+00, 0.630692391160778e+00, 0.103241059659401e-01, + 0.879470814062224e+00, -.377245094706344e+00, -.460102121012690e+00, 0.629778007382364e+00, 0.917069070021292e-02, + 0.870530751362587e+00, -.374648589005799e+00, -.452452352164561e+00, 0.628569291738020e+00, 0.820044757449899e-02, + 0.864018892596866e+00, -.373280954775127e+00, -.446202255714937e+00, 0.627730565946685e+00, 0.737537419249938e-02, + 0.857357924295629e+00, -.371485680656218e+00, -.440234425775788e+00, 0.626780133051391e+00, 0.666914378696866e-02, + 0.851096961215784e+00, -.369663988413454e+00, -.434754090977242e+00, 0.625846657124080e+00, 0.605989696024640e-02, + // rows 19-27 + 0.845691163494378e+00, -.368162878390094e+00, -.429905486466339e+00, 0.625032425385260e+00, 0.553041165257352e-02, + 0.840754783321373e+00, -.366754374490097e+00, -.425504080282415e+00, 0.624272520855683e+00, 0.506752846502820e-02, + 0.832129732678031e+00, -.364215201885908e+00, -.417868687835329e+00, 0.622912972095680e+00, 0.430080260616755e-02, + 0.824841358445432e+00, -.361969316759517e+00, -.411506554101034e+00, 0.621735648069777e+00, 0.369621198344728e-02, + 0.818660702021942e+00, -.359997706140366e+00, -.406173910081373e+00, 0.620720634622955e+00, 0.321103838340649e-02, + 0.813343156361523e+00, -.358234931076463e+00, -.401657773073081e+00, 0.619835953653306e+00, 0.281577816620828e-02, + 0.808812551334635e+00, -.356709737514645e+00, -.397829666549206e+00, 0.619076368359449e+00, 0.248944467816156e-02, + 0.802058241484851e+00, -.353305127983149e+00, -.393665858753007e+00, 0.617880189866334e+00, 0.221821094859412e-02, + 0.799023019885202e+00, -.352371068280062e+00, -.390970958156562e+00, 0.617372975124671e+00, 0.198795503493263e-02, + // rows 28-36 + 0.796533707522770e+00, -.351659214274525e+00, -.388680577600314e+00, 0.616958145987822e+00, 0.179179781860265e-02, + 0.794254415802991e+00, -.350955011234794e+00, -.386652430547127e+00, 0.616574541234043e+00, 0.162340905415174e-02, + 0.791451974069317e+00, -.350127723737597e+00, -.384099751306937e+00, 0.616103218945433e+00, 0.141212925634866e-02, + 0.789140296939903e+00, -.349447391105024e+00, -.381986708309451e+00, 0.615713343205178e+00, 0.123963336103694e-02, + 0.787155036742462e+00, -.348839107260454e+00, -.380202863720354e+00, 0.615376708082511e+00, 0.109698483515876e-02, + 0.785509443687073e+00, -.348347728366112e+00, -.378703894403193e+00, 0.615097681507449e+00, 0.977644426693831e-03, + 0.784038223206202e+00, -.347876842227869e+00, -.377407083344177e+00, 0.614846655967241e+00, 0.876815082414696e-03, + 0.783010378301710e+00, -.347648245486129e+00, -.376356876713355e+00, 0.614674780335034e+00, 0.790787748777402e-03, + 0.781833266343420e+00, -.347234482878725e+00, -.375370253527294e+00, 0.614472179428255e+00, 0.716900834807566e-03, + // rows 37-45 + 0.778157258445688e+00, -.345006104027160e+00, -.373629716648469e+00, 0.613804905745683e+00, 0.633900782409020e-03, + 0.777300034873279e+00, -.344806720424309e+00, -.372764739426396e+00, 0.613661241678936e+00, 0.564173510000384e-03, + 0.776985336763925e+00, -.344948310351192e+00, -.372138199888685e+00, 0.613616309802328e+00, 0.505301025547597e-03, + 0.776123576908821e+00, -.344696744011525e+00, -.371340582024658e+00, 0.613469644712914e+00, 0.443902941209962e-03, + 0.776949282583553e+00, -.345654199916775e+00, -.371072531043118e+00, 0.613634699306968e+00, 0.392885424956897e-03, + 0.775876610212432e+00, -.345123309087147e+00, -.370392356339381e+00, 0.613444359409516e+00, 0.350376011087039e-03, + 0.783347589653809e+00, -.351086251339795e+00, -.371860974551612e+00, 0.614828131953302e+00, 0.307119201283797e-03, + 0.783496656673086e+00, -.351443051706240e+00, -.371545102252444e+00, 0.614860564019234e+00, 0.271917903319380e-03, + 0.785178130625954e+00, -.352964147655529e+00, -.371615967722576e+00, 0.615170969674100e+00, 0.237891869788885e-03, + // rows 46-50 + 0.782045229930799e+00, -.350764936286095e+00, -.370561648626977e+00, 0.614604810918108e+00, 0.210170095234033e-03, + 0.783792445229447e+00, -.352285904984906e+00, -.370720709266521e+00, 0.614926468923107e+00, 0.183766807783551e-03, + 0.787664243592327e+00, -.355426631067992e+00, -.371408773264980e+00, 0.615628921926696e+00, 0.159498839664580e-03, + 0.785248632105467e+00, -.353713152595833e+00, -.370620439974436e+00, 0.615195478568662e+00, 0.139988635943928e-03, + 0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}}; -c ------- Recurrence parameters.------------------------------------ +// Recurrence parameters -const inline AMREX_GPU_MANAGED amrex::Array1D recf = { +inline AMREX_GPU_MANAGED amrex::Array1D recf = { .1762962957651941e+00, .1067131485543800e+00, .1296319693918818e+00, .6097984609869632e-02, .7296375286357569e-01, .8749824867149327e-01, .6126949805354446e-02, .1026802330400501e+00, diff --git a/integration/ROCK4/rock4_type.H b/integration/ROCK4/rock4_type.H index df91f0c54c..6a41464d13 100644 --- a/integration/ROCK4/rock4_type.H +++ b/integration/ROCK4/rock4_type.H @@ -88,7 +88,7 @@ struct rock4_t { int naccpt; // number of rejected steps - int nrejct; + int nreject; // number of evaluations of F used to estimate the spectral radius int nfesig; From 5506309d5a8d7be23a25f01355c752865ba1c539 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Jun 2023 20:10:06 -0400 Subject: [PATCH 07/45] ginore rock4 --- .codespell-ignore-words | 1 + 1 file changed, 1 insertion(+) diff --git a/.codespell-ignore-words b/.codespell-ignore-words index 25908b2add..3fcbaeabae 100644 --- a/.codespell-ignore-words +++ b/.codespell-ignore-words @@ -13,3 +13,4 @@ coul dum crate vie +rock4 From 16d8736d27af315d60b4b3ad47dc4f0e5bedb081 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 08:29:01 -0400 Subject: [PATCH 08/45] template out the initial timestep estimation function now it can be used by other integrators --- integration/BackwardEuler/be_integrator.H | 91 +--------------------- integration/utils/Make.package | 1 + integration/utils/initial_timestep.H | 95 +++++++++++++++++++++++ 3 files changed, 97 insertions(+), 90 deletions(-) create mode 100644 integration/utils/initial_timestep.H diff --git a/integration/BackwardEuler/be_integrator.H b/integration/BackwardEuler/be_integrator.H index 98a0a13c8a..7f71ad6463 100644 --- a/integration/BackwardEuler/be_integrator.H +++ b/integration/BackwardEuler/be_integrator.H @@ -14,96 +14,7 @@ #ifdef SIMPLIFIED_SDC #include #endif - -template -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real initial_dt (BurnT& state, be_t& be, - Array1D& ydot) -{ - // this is a version of the initial timestep estimator from VODE - // we come in with be.y() storing the initial solution - - // initial lower and upper bounds on the timestep - - Real hL = 100.0_rt * std::numeric_limits::epsilon() * be.tout; - Real hU = 0.1_rt * be.tout; - - // initial guess for the itteraction - - Real h = std::sqrt(hL * hU); - Real h_old = 10.0_rt * h; - - // Iterate on ddydtt = (RHS(t + h, y + h * dydt) - dydt) / h - - Array1D ewt; - Array1D ydot_temp; - Array1D ddydtt; - - // save the old state and update the stored state - Array1D y_old; - for (int n = 1; n <= BE_NEQS; ++n) { - y_old(n) = be.y(n); - } - - for (int n = 1; n <= 4; n++) { - - h_old = h; - - // Get the error weighting -- this is similar to VODE's dewset - // routine - - for (int ii = 1; ii <= NumSpec; ii++) { - ewt(ii) = be.rtol_spec * std::abs(y_old(ii)) + be.atol_spec; - } - ewt(net_ienuc) = be.rtol_enuc * std::abs(y_old(net_ienuc)) + be.atol_enuc; - - // Construct the trial point. - - for (int ii = 1; ii <= BE_NEQS; ii++) { - be.y(ii) = y_old(ii) + h * ydot(ii); - } - - // Call the RHS, then estimate the finite difference. - - rhs(be.t, state, be, ydot_temp); - - for (int ii = 1; ii <= BE_NEQS; ii++) { - ddydtt(ii) = (ydot_temp(ii) - ydot(ii)) / h; - } - - Real yddnorm = 0.0_rt; - for (int ii = 1; ii <= BE_NEQS; ii++) { - yddnorm += std::pow(ddydtt(ii) * ewt(ii), 2); - } - yddnorm = std::sqrt(yddnorm / BE_NEQS); - - if (yddnorm*hU*hU > 2.0_rt) { - h = std::sqrt(2.0_rt / yddnorm); - } else { - h = std::sqrt(h * hU); - } - - if (h_old < 2.0_rt * h && h_old > 0.5_rt * h) { - break; - } - - } - - // Save the final timestep, with a bias factor. - - Real dt = h / 2.0_rt; - dt = amrex::min(amrex::max(h, hL), hU); - - dt = amrex::min(dt, ode_max_dt); - - // restore the old time solution - for (int n = 1; n <= BE_NEQS; ++n) { - be.y(n) = y_old(n); - } - - return dt; -} - +#include /// /// update state.xn[] and state.e through a timestep dt diff --git a/integration/utils/Make.package b/integration/utils/Make.package index 33504f8366..a327aaac75 100644 --- a/integration/utils/Make.package +++ b/integration/utils/Make.package @@ -3,3 +3,4 @@ ifeq ($(USE_NONAKA_PLOT), TRUE) endif CEXE_headers += jacobian_utilities.H CEXE_headers += numerical_jacobian.H +CEXE_headers += initial_timestep.H diff --git a/integration/utils/initial_timestep.H b/integration/utils/initial_timestep.H new file mode 100644 index 0000000000..b73aad56b7 --- /dev/null +++ b/integration/utils/initial_timestep.H @@ -0,0 +1,95 @@ +#ifndef INITIAL_TIMESTEP_H +#define INITIAL_TIMESTEP_H + +#include + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real initial_dt (BurnT& burn_state, IntT& int_state, + Array1D& ydot) +{ + // this is a version of the initial timestep estimator from VODE + // we come in with int_state..y() storing the initial solution + + // initial lower and upper bounds on the timestep + + Real hL = 100.0_rt * std::numeric_limits::epsilon() * int_state.tout; + Real hU = 0.1_rt * int_state.tout; + + // initial guess for the itteraction + + Real h = std::sqrt(hL * hU); + Real h_old = 10.0_rt * h; + + // Iterate on ddydtt = (RHS(t + h, y + h * dydt) - dydt) / h + + Array1D ewt; + Array1D ydot_temp; + Array1D ddydtt; + + // save the old state and update the stored state + Array1D y_old; + for (int n = 1; n <= INT_NEQS; ++n) { + y_old(n) = int_state.y(n); + } + + for (int n = 1; n <= 4; n++) { + + h_old = h; + + // Get the error weighting -- this is similar to VODE's dewset + // routine + + for (int ii = 1; ii <= NumSpec; ii++) { + ewt(ii) = int_state.rtol_spec * std::abs(y_old(ii)) + int_state.atol_spec; + } + ewt(net_ienuc) = int_state.rtol_enuc * std::abs(y_old(net_ienuc)) + int_state.atol_enuc; + + // Construct the trial point. + + for (int ii = 1; ii <= INT_NEQS; ii++) { + int_state.y(ii) = y_old(ii) + h * ydot(ii); + } + + // Call the RHS, then estimate the finite difference. + + rhs(int_state.t, burn_state, int_state, ydot_temp); + + for (int ii = 1; ii <= INT_NEQS; ii++) { + ddydtt(ii) = (ydot_temp(ii) - ydot(ii)) / h; + } + + Real yddnorm = 0.0_rt; + for (int ii = 1; ii <= INT_NEQS; ii++) { + yddnorm += std::pow(ddydtt(ii) * ewt(ii), 2); + } + yddnorm = std::sqrt(yddnorm / INT_NEQS); + + if (yddnorm*hU*hU > 2.0_rt) { + h = std::sqrt(2.0_rt / yddnorm); + } else { + h = std::sqrt(h * hU); + } + + if (h_old < 2.0_rt * h && h_old > 0.5_rt * h) { + break; + } + + } + + // Save the final timestep, with a bias factor. + + Real dt = h / 2.0_rt; + dt = amrex::min(amrex::max(h, hL), hU); + + dt = amrex::min(dt, ode_max_dt); + + // restore the old time solution + for (int n = 1; n <= INT_NEQS; ++n) { + int_state.y(n) = y_old(n); + } + + return dt; +} + +#endif From 1d2fa41d05a87cde68f45999556bcb3465b06041 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 08:30:57 -0400 Subject: [PATCH 09/45] some more includes --- integration/utils/initial_timestep.H | 3 +++ 1 file changed, 3 insertions(+) diff --git a/integration/utils/initial_timestep.H b/integration/utils/initial_timestep.H index b73aad56b7..6efd0b769f 100644 --- a/integration/utils/initial_timestep.H +++ b/integration/utils/initial_timestep.H @@ -2,6 +2,9 @@ #define INITIAL_TIMESTEP_H #include +#include +#include +#include template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE From bb8fdda91b0ec5415095b2a907e0718198c85812 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 08:41:02 -0400 Subject: [PATCH 10/45] update SDC remove --- .../ROCK4/actual_integrator_simplified_sdc.H | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/integration/ROCK4/actual_integrator_simplified_sdc.H b/integration/ROCK4/actual_integrator_simplified_sdc.H index ae55c287aa..6631569431 100644 --- a/integration/ROCK4/actual_integrator_simplified_sdc.H +++ b/integration/ROCK4/actual_integrator_simplified_sdc.H @@ -124,7 +124,6 @@ void actual_integrator (BurnT& state, Real dt) state.success = false; } -#if defined(SDC_EVOLVE_ENERGY) if (rock_state.y(SEINT+1) < 0.0_rt) { state.success = false; } @@ -139,19 +138,6 @@ void actual_integrator (BurnT& state, Real dt) } } -#elif defined(SDC_EVOLVE_ENTHALPY) - for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(SFS+n) / state.rho < -rock4_failure_tolerance) { - state.success = false; - } - - if (rock_state.y(SFS+n) / state.rho > 1.0_rt + rock4_failure_tolerance) { - state.success = false; - } - } - -#endif - #ifndef AMREX_USE_GPU if (burner_verbose) { @@ -202,9 +188,7 @@ void actual_integrator (BurnT& state, Real dt) } std::cout << std::endl; #endif -#if defined(SDC_EVOLVE_ENERGY) std::cout << "A(rho) = " << std::setprecision(16) << state.ydot_a[SRHO] << std::endl; -#endif std::cout << "A(rho e) = " << std::setprecision(16) << state.ydot_a[SEINT] << std::endl; std::cout << "A(rho X_k) = "; for (int n = 0; n < NumSpec; n++) { From c4ca982a4706e7da0dce76cfcfc4f5407fad75a8 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 08:56:32 -0400 Subject: [PATCH 11/45] intall initial dt --- integration/ROCK4/rock4.H | 16 ++++++++++------ integration/ROCK4/rock4_type.H | 7 ++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index 5a51e0ab27..a195c3654b 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -11,7 +11,7 @@ #include #include #endif - +#include #include AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE @@ -339,7 +339,7 @@ int rockfcore (BurnT& state, rock4_t& rstate) for (int i = 1; i <= INT_NEQS; ++i) { rstate.yn(i) = rstate.y(i); } - rhs(rstate.t, state, rstate, rstate.fn); + rhs(rstate.t, state, rstate, rstate.fn); // TODO: I think this can be removed -- we already filled for finding rstate.h rstate.nfe++; Real errp = err; @@ -349,8 +349,8 @@ int rockfcore (BurnT& state, rock4_t& rstate) // Step-size is adjusted. - if (1.01_rt * rstate.h >= std::abs(rstate.tend - rstate.t)) { - rstate.h = std::abs(rstate.tend - rstate.t); + if (1.01_rt * rstate.h >= std::abs(rstate.tout - rstate.t)) { + rstate.h = std::abs(rstate.tout - rstate.t); last = true; } @@ -422,7 +422,7 @@ int rockfcore (BurnT& state, rock4_t& rstate) rstate.t += rstate.h; if (reject) { hnew = std::min(hnew, rstate.h); - if (rstate.tend < rstate.t) { + if (rstate.tout < rstate.t) { hnew = std::max(hnew, rstate.h); } reject = false; @@ -481,7 +481,11 @@ int rock4 (BurnT& state, rock4_t& rstate) // initializations - // TODO: get the initial set size + // get the initial timestep + + rhs(rstate.t, state, rstate, rstate.fn); + + rstate.h = initial_dt(state, rstate, rstate.fn); // Test the initial step size and tolerances. diff --git a/integration/ROCK4/rock4_type.H b/integration/ROCK4/rock4_type.H index 6a41464d13..81551505e6 100644 --- a/integration/ROCK4/rock4_type.H +++ b/integration/ROCK4/rock4_type.H @@ -28,7 +28,7 @@ struct rock4_t { amrex::Real h; // The end of the interval of integration. - amrex::Real tend; + amrex::Real tout; // Integration array RArray1D y; @@ -68,6 +68,11 @@ struct rock4_t { RArray1D yjm4; RArray1D sprad; + // because our rhs wrapper requires that rock4_t rstate.y() hold the state + // that is used for evaluating the RHS, we need to create an additional + // temporary to backup the contents of y + RArray1D y_backup; + int mdeg; amrex::Array1D mp; From 59b3d68009051be4458e4f2c66b76f6f00743b3c Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 12:54:45 -0400 Subject: [PATCH 12/45] more ROCK4 hacking --- integration/ROCK4/actual_integrator.H | 4 +- .../ROCK4/actual_integrator_simplified_sdc.H | 4 +- integration/ROCK4/rock4.H | 80 ++++++++++++++++--- 3 files changed, 75 insertions(+), 13 deletions(-) diff --git a/integration/ROCK4/actual_integrator.H b/integration/ROCK4/actual_integrator.H index 2194b7228d..9e816685bd 100644 --- a/integration/ROCK4/actual_integrator.H +++ b/integration/ROCK4/actual_integrator.H @@ -32,7 +32,7 @@ void actual_integrator (BurnT& state, Real dt) // Initialize the integration time. rock_state.t = 0.0_rt; - rock_state.tend = dt; + rock_state.tout = dt; // We assume that (rho, T) coming in are valid, do an EOS call // to fill the rest of the thermodynamic variables. @@ -81,7 +81,7 @@ void actual_integrator (BurnT& state, Real dt) state.n_jac = 0; state.n_step = rock_state.nsteps; - if (ierr > 2) { + if (ierr != 1) { state.success = false; } diff --git a/integration/ROCK4/actual_integrator_simplified_sdc.H b/integration/ROCK4/actual_integrator_simplified_sdc.H index 6631569431..8db05eaac1 100644 --- a/integration/ROCK4/actual_integrator_simplified_sdc.H +++ b/integration/ROCK4/actual_integrator_simplified_sdc.H @@ -30,7 +30,7 @@ void actual_integrator (BurnT& state, Real dt) // Initialize the integration time. rock_state.t = 0.0_rt; - rock_state.tend = dt; + rock_state.tout = dt; // We assume that (rho, T) coming in are valid, do an EOS call // to fill the rest of the thermodynamic variables. @@ -120,7 +120,7 @@ void actual_integrator (BurnT& state, Real dt) // Add some checks that indicate a burn fail even if ROCK4 thinks the // integration was successful. - if (ierr > 2) { + if (ierr != 1) { state.success = false; } diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index a195c3654b..67bee12098 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -73,7 +73,16 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp1 = rstate.h * recf(mr+2*(i-2)+1); temp3 = -recf(mr+2*(i-2)+2); temp2 = 1.0_rt - temp3; - //call f(neqn,ci1,yjm1,y); + // we want to use rstate.yjm1 as input and store ydot in the original y + // so we simply need to copy rstate.yjm1 to y here and use y_backup + // to store the RHS and then copy it after the call + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.y(j) = rstate.yjm1(j); + } + rhs(ci1, state, rstate, rstate.y_backup); + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.y(j) = rstate.y_backup(j); + } ci1 = temp1 + temp2 * ci2 + temp3 * ci3; for (int j = 1; j <= INT_NEQS; ++j) { rstate.y(j) = temp1 * rstate.y(j) + temp2 * rstate.yjm1(j) + temp3 * rstate.yjm2(j); @@ -92,7 +101,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) // stage 1 temp1 = rstate.h * fpa(mz, 1); - //call f(neqn,ci1,y,yjm1); + rhs(ci1, state, rstate, rstate.yjm1); for (int j = 1; j <= INT_NEQS; ++j) { rstate.yjm3(j) = rstate.y(j) + temp1 * rstate.yjm1(j); } @@ -101,17 +110,37 @@ Real rfstep (BurnT& state, rock4_t& rstate) ci2 = ci1 + temp1; temp1 = rstate.h * fpa(mz,2); temp2 = rstate.h * fpa(mz,3); - //call f(neqn,ci2,yjm3,yjm2); + + // call the RHS with yjm3 as input and store the output in yjm2 + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y_backup(i) = rstate.y(i); + rstate.y(i) = rstate.yjm3(i); + } + rhs(ci2, state, rstate, rstate.yjm2); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.y_backup(i); + } + for (int j = 1; j <= INT_NEQS; ++j) { rstate.yjm4(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j); } - // state 3 + // stage 3 ci2 = ci1 + temp1 + temp2; temp1 = rstate.h * fpa(mz,4); temp2 = rstate.h * fpa(mz,5); temp3 = rstate.h * fpa(mz,6); - //call f(neqn,ci2,yjm4,yjm3); + + // call the RHS with yjm4 as input and store the output in yjm3 + for (int i = 1; i <= INT_NEQS; ++i) { + // this is still backed-up: rstate.y_backup(i) = rstate.y(i); + rstate.y(i) = rstate.yjm4(i); + } + rhs(ci2, state, rstate, rstate.yjm3); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.y_backup(i); + } + for (int j = 1; j <= INT_NEQS; ++j) { rstate.fnt(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j) + temp3 * rstate.yjm3(j); } @@ -122,7 +151,17 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp2 = rstate.h * fpb(mz,2); temp3 = rstate.h * fpb(mz,3); temp4 = rstate.h * fpb(mz,4); - //call f(neqn,ci2,fnt,yjm4); + + // call the RHS with fnt as the input and store the output in yjm4 + for (int i = 1; i <= INT_NEQS; ++i) { + // this is still backed-up: rstate.y_backup(i) = rstate.y(i); + rstate.y(i) = rstate.fnt(i); + } + rhs(ci2, state, rstate, rstate.yjm4); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.y_backup(i); + } + for (int j = 1; j <= INT_NEQS; ++j) { rstate.y(j) = rstate.y(j) + temp1 * rstate.yjm1(j) + temp2 * rstate.yjm2(j) + temp3 * rstate.yjm3(j) + temp4 * rstate.yjm4(j); @@ -134,7 +173,8 @@ Real rfstep (BurnT& state, rock4_t& rstate) temp3 = rstate.h * fpbe(mz,3) - temp3; temp4 = rstate.h * fpbe(mz,4) - temp4; temp5 = rstate.h * fpbe(mz,5); - //call f(neqn,t+h,y,fnt); + + rhs(rstate.t + rstate.h, state, rstate, rstate.fnt); Real err{}; @@ -189,7 +229,15 @@ Real rockfrho (BurnT& state, rock4_t& rstate) for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm2(i) = rstate.fn(i); } - //call f(neqn,t,rstate.yjm2,z); + // call the RHS with yjm2 as input and yjm1 as output + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y_backup(i) = rstate.y(i); + rstate.y(i) = rstate.yjm2(i); + } + rhs(rstate.t, state, rstate, rstate.yjm1); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.y_backup(i); + } rstate.nfesig++; } else { for (int i = 1; i <= INT_NEQS; ++i) { @@ -247,7 +295,17 @@ Real rockfrho (BurnT& state, rock4_t& rstate) int ind{}; for (int iter = 0; iter < maxiter; ++iter) { - //call f(neqn,t,z,rstate.yjm2); + // call RHS with yjm1 as input and store the output as yjm2 + + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y_backup(i) = rstate.y(i); + rstate.y(i) = rstate.yjm1(i); + } + rhs(rstate.t, state, rstate, rstate.yjm2); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.y_backup(i); + } + rstate.nfesig++; Real dfzfn{}; @@ -487,12 +545,16 @@ int rock4 (BurnT& state, rock4_t& rstate) rstate.h = initial_dt(state, rstate, rstate.fn); + std::cout << "initial timestep = " << rstate.h << std::endl; + // Test the initial step size and tolerances. +#if 0 if (rstate.h < 10.0_rt * UROUND) { rstate.idid = -1; return rstate.idid; } +#endif bool valid = true; From fb277d8be9e1eb40f9f5f43cf9745afb7ad6f917 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 13:55:57 -0400 Subject: [PATCH 13/45] fix the order of the arrays --- integration/ROCK4/rock4.H | 11 ++++++++++- integration/ROCK4/rock4_coefficients.H | 19 +++++++------------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index 67bee12098..b4c682baa1 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -18,6 +18,12 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mdegre(rock4_t& rstate) { + constexpr amrex::Array1D ms = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 22, 24, 26, 28, 30, 32, 34, 36, 38, 41, 44, 47, 50, 53, 56, 59, 63, 67, 71, + 76, 81, 86, 92, 98, 105, 112, 120, 129, 138, 148}; + + // Find the optimal degree. // MP(1): pointer which select the degree in ms(i)\1,2,.. // such that mdeg<=ms(i). @@ -205,6 +211,7 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real rockfrho (BurnT& state, rock4_t& rstate) { + // Rockfrho compute eigmax, a close upper bound of the spectral // radius of the Jacobian matrix using a power method // (J.N. Franklin (matrix theory). The algorithm used is a small @@ -378,6 +385,7 @@ int rockfcore (BurnT& state, rock4_t& rstate) rstate.idid = 1; + Real facmax{5.0_rt}; Real told{0.0_rt}; Real err{0.0_rt}; @@ -391,7 +399,6 @@ int rockfcore (BurnT& state, rock4_t& rstate) bool last{false}; bool reject{false}; - // initialization of the integration step. for (int i = 1; i <= INT_NEQS; ++i) { @@ -412,10 +419,12 @@ int rockfcore (BurnT& state, rock4_t& rstate) last = true; } +#if 0 if (rstate.h < 10.0_rt * UROUND) { rstate.idid = -2; return rstate.idid; } +#endif // Spectral radius. diff --git a/integration/ROCK4/rock4_coefficients.H b/integration/ROCK4/rock4_coefficients.H index 1e19e3fe7f..824c21dc39 100644 --- a/integration/ROCK4/rock4_coefficients.H +++ b/integration/ROCK4/rock4_coefficients.H @@ -1,14 +1,9 @@ #ifndef ROCK4_COEFFICIENTS_H #define ROCK4_COEFFICIENTS_H -const inline AMREX_GPU_MANAGED amrex::Array1D ms = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 22, 24, 26, 28, 30, 32, 34, 36, 38, 41, 44, 47, 50, 53, 56, 59, 63, 67, 71, - 76, 81, 86, 92, 98, 105, 112, 120, 129, 138, 148}; - // Parameters of the finishing procedure -inline AMREX_GPU_MANAGED amrex::Array2D fpa = {{ +inline AMREX_GPU_MANAGED amrex::Array2D fpa{ // rows 1-9 -.149352078672699e+00, 0.629768962985252e+00, -.355201061573650e+00, 0.146745996307541e-01, -.558517281602565e-01, 0.590312931352706e+00, @@ -114,9 +109,9 @@ inline AMREX_GPU_MANAGED amrex::Array2D fpa = {{ -.113373695071906e+00, 0.517118156325443e+00, -.291701320745508e+00, -.291406743553601e-01, -.292560575875699e-02, 0.482899951273987e+00, -.112938370080633e+00, 0.518440212713205e+00, -.292882869228272e+00, - -.300502325911247e-01, -.222188377341845e-02, 0.483386803334408e+00}}; + -.300502325911247e-01, -.222188377341845e-02, 0.483386803334408e+00}; -inline AMREX_GPU_MANAGED amrex::Array2D fpb = {{ +inline AMREX_GPU_MANAGED amrex::Array2D fpb{ // rows 1-12 0.934502625489809e+00, -.426556402801135e+00, -.428612609028723e+00, 0.744370090574855e+00, 0.727428506710284e+00, -.281882500610754e+00, -.366883181811475e+00, 0.684341322628128e+00, @@ -171,9 +166,9 @@ inline AMREX_GPU_MANAGED amrex::Array2D fpb = {{ 0.783131247138323e+00, -.352927933064792e+00, -.368752741091226e+00, 0.615166687043411e+00, // rows 49-50 0.781304104495501e+00, -.351541585232233e+00, -.368306700790280e+00, 0.614794688266817e+00, - 0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}}; + 0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}; -inline AMREX_GPU_MANAGED amrex::Array2D fpbe = {{ +inline AMREX_GPU_MANAGED amrex::Array2D fpbe{ // rows 1-9 0.113509972110540e+01, -.584333360989720e+00, -.319172911177732e+00, 0.482853558185876e+00, 0.109256697110981e+00, 0.100479199674788e+01, -.436644602461537e+00, -.423443966877378e+00, 0.538770645909717e+00, 0.795300735974956e-01, @@ -229,12 +224,12 @@ inline AMREX_GPU_MANAGED amrex::Array2D fpbe = {{ 0.783792445229447e+00, -.352285904984906e+00, -.370720709266521e+00, 0.614926468923107e+00, 0.183766807783551e-03, 0.787664243592327e+00, -.355426631067992e+00, -.371408773264980e+00, 0.615628921926696e+00, 0.159498839664580e-03, 0.785248632105467e+00, -.353713152595833e+00, -.370620439974436e+00, 0.615195478568662e+00, 0.139988635943928e-03, - 0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}}; + 0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}; // Recurrence parameters -inline AMREX_GPU_MANAGED amrex::Array1D recf = { +AMREX_GPU_MANAGED amrex::Array1D recf{ .1762962957651941e+00, .1067131485543800e+00, .1296319693918818e+00, .6097984609869632e-02, .7296375286357569e-01, .8749824867149327e-01, .6126949805354446e-02, .1026802330400501e+00, From 49fd27e681161c6bc228f0c9d360ca9fd83accec Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 6 Jun 2023 13:58:25 -0400 Subject: [PATCH 14/45] fix spelling --- integration/ROCK4/rock4.H | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index b4c682baa1..e272ba16f3 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -326,7 +326,7 @@ Real rockfrho (BurnT& state, rock4_t& rstate) eigmax = safe * eigmax; // The stopping criteria is based on a relative error between - // two succesive estimation ``eigmax'' of the spectral radius. + // two successive estimation ``eigmax'' of the spectral radius. if (iter >= 1 && std::abs(eigmax-eigmaxo) <= (eigmax*0.05_rt)) { // The last eigenvector is stored. @@ -337,7 +337,7 @@ Real rockfrho (BurnT& state, rock4_t& rstate) } // The next z is defined by z_new=yn+coef*(fz-fn) where coef - // is choosen so that norm(z_new-yn)=norm(z_old-yn) + // is chosen so that norm(z_new-yn)=norm(z_old-yn) if (dfzfn != 0.0_rt) { Real quot = dzyn / dfzfn; From b604c01e1a32455ef079ec860937497b57cc5b07 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Wed, 7 Jun 2023 11:45:17 -0400 Subject: [PATCH 15/45] have BackwardEuler and RKC just use INT_NEQS directly there's no reason for them to define their own name. Also fix up some comments --- integration/BackwardEuler/be_integrator.H | 66 +++++++++---------- integration/BackwardEuler/be_type.H | 4 +- integration/RKC/actual_integrator.H | 4 +- .../RKC/actual_integrator_simplified_sdc.H | 3 - integration/RKC/rkc.H | 54 +++++++-------- integration/RKC/rkc_type.H | 7 +- 6 files changed, 65 insertions(+), 73 deletions(-) diff --git a/integration/BackwardEuler/be_integrator.H b/integration/BackwardEuler/be_integrator.H index 98a0a13c8a..4204573c09 100644 --- a/integration/BackwardEuler/be_integrator.H +++ b/integration/BackwardEuler/be_integrator.H @@ -18,7 +18,7 @@ template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real initial_dt (BurnT& state, be_t& be, - Array1D& ydot) + Array1D& ydot) { // this is a version of the initial timestep estimator from VODE // we come in with be.y() storing the initial solution @@ -35,13 +35,13 @@ Real initial_dt (BurnT& state, be_t& be, // Iterate on ddydtt = (RHS(t + h, y + h * dydt) - dydt) / h - Array1D ewt; - Array1D ydot_temp; - Array1D ddydtt; + Array1D ewt; + Array1D ydot_temp; + Array1D ddydtt; // save the old state and update the stored state - Array1D y_old; - for (int n = 1; n <= BE_NEQS; ++n) { + Array1D y_old; + for (int n = 1; n <= INT_NEQS; ++n) { y_old(n) = be.y(n); } @@ -59,7 +59,7 @@ Real initial_dt (BurnT& state, be_t& be, // Construct the trial point. - for (int ii = 1; ii <= BE_NEQS; ii++) { + for (int ii = 1; ii <= INT_NEQS; ii++) { be.y(ii) = y_old(ii) + h * ydot(ii); } @@ -67,15 +67,15 @@ Real initial_dt (BurnT& state, be_t& be, rhs(be.t, state, be, ydot_temp); - for (int ii = 1; ii <= BE_NEQS; ii++) { + for (int ii = 1; ii <= INT_NEQS; ii++) { ddydtt(ii) = (ydot_temp(ii) - ydot(ii)) / h; } Real yddnorm = 0.0_rt; - for (int ii = 1; ii <= BE_NEQS; ii++) { + for (int ii = 1; ii <= INT_NEQS; ii++) { yddnorm += std::pow(ddydtt(ii) * ewt(ii), 2); } - yddnorm = std::sqrt(yddnorm / BE_NEQS); + yddnorm = std::sqrt(yddnorm / INT_NEQS); if (yddnorm*hU*hU > 2.0_rt) { h = std::sqrt(2.0_rt / yddnorm); @@ -97,7 +97,7 @@ Real initial_dt (BurnT& state, be_t& be, dt = amrex::min(dt, ode_max_dt); // restore the old time solution - for (int n = 1; n <= BE_NEQS; ++n) { + for (int n = 1; n <= INT_NEQS; ++n) { be.y(n) = y_old(n); } @@ -127,9 +127,9 @@ int single_step (BurnT& state, be_t& be, const Real dt) be.n_rhs += 1; - Array1D y_old; + Array1D y_old; - for (int n = 1; n <= BE_NEQS; n++) { + for (int n = 1; n <= INT_NEQS; n++) { y_old(n) = be.y(n); be.y(n) = be.y(n) + dt * ydot(n); } @@ -159,7 +159,7 @@ int single_step (BurnT& state, be_t& be, const Real dt) be.n_jac++; if (!integrate_energy) { - for (int j = 1; j <= BE_NEQS; j++) { + for (int j = 1; j <= INT_NEQS; j++) { be.jac(net_ienuc, j) = 0.0_rt; } } @@ -167,8 +167,8 @@ int single_step (BurnT& state, be_t& be, const Real dt) // construct the matrix for the linear system // (I - dt J) dy^{n+1} = rhs - for (int m = 1; m <= BE_NEQS; m++) { - for (int n = 1; n <= BE_NEQS; n++) { + for (int m = 1; m <= INT_NEQS; m++) { + for (int n = 1; n <= INT_NEQS; n++) { be.jac(m, n) *= -dt; if (m == n) { be.jac(m, n) = 1.0_rt + be.jac(m, n); @@ -178,8 +178,8 @@ int single_step (BurnT& state, be_t& be, const Real dt) // construct the RHS of our linear system - Array1D b; - for (int n = 1; n <= BE_NEQS; n++) { + Array1D b; + for (int n = 1; n <= INT_NEQS; n++) { b(n) = y_old(n) - be.y(n) + dt * ydot(n); } @@ -187,18 +187,18 @@ int single_step (BurnT& state, be_t& be, const Real dt) int ierr_linpack; IArray1D pivot; - dgefa(be.jac, pivot, ierr_linpack); + dgefa(be.jac, pivot, ierr_linpack); if (ierr_linpack != 0) { ierr = BE_LU_DECOMPOSITION_ERROR; break; } - dgesl(be.jac, pivot, b); + dgesl(be.jac, pivot, b); // update our current guess for the solution - for (int n = 1; n <= BE_NEQS; n++) { + for (int n = 1; n <= INT_NEQS; n++) { be.y(n) += b(n); } @@ -207,12 +207,12 @@ int single_step (BurnT& state, be_t& be, const Real dt) Real y_norm = 0.0; Real b_norm = 0.0; - for (int n = 1; n <= BE_NEQS; n++) { + for (int n = 1; n <= INT_NEQS; n++) { y_norm += be.y(n) * be.y(n); b_norm += b(n) * b(n); } - y_norm = std::sqrt(y_norm / BE_NEQS); - b_norm = std::sqrt(b_norm / BE_NEQS); + y_norm = std::sqrt(y_norm / INT_NEQS); + b_norm = std::sqrt(b_norm / INT_NEQS); if (b_norm < tol * y_norm) { converged = true; @@ -233,7 +233,7 @@ int single_step (BurnT& state, be_t& be, const Real dt) ierr = BE_NONCONVERGENCE; // reset the solution to the original - for (int n = 1; n <= BE_NEQS; n++) { + for (int n = 1; n <= INT_NEQS; n++) { be.y(n) = y_old(n); } @@ -271,8 +271,8 @@ int be_integrator (BurnT& state, be_t& be) be.n_step < ode_max_steps) { // store the current solution -- we'll revert to this if a step fails - Array1D y_old; - for (int n = 1; n <= BE_NEQS; ++n) { + Array1D y_old; + for (int n = 1; n <= INT_NEQS; ++n) { y_old(n) = be.y(n); } @@ -290,7 +290,7 @@ int be_integrator (BurnT& state, be_t& be) // first do 2 (fine) dt/2 steps - Array1D y_fine; + Array1D y_fine; ierr = single_step(state, be, dt_sub/2); if (ierr == BE_SUCCESS) { @@ -298,13 +298,13 @@ int be_integrator (BurnT& state, be_t& be) // store the fine dt solution - for (int n = 1; n <= BE_NEQS; ++n) { + for (int n = 1; n <= INT_NEQS; ++n) { y_fine(n) = be.y(n); } // now that single (coarse) dt step // first reset the solution - for (int n = 1; n <= BE_NEQS; ++n) { + for (int n = 1; n <= INT_NEQS; ++n) { be.y(n) = y_old(n); } ierr = single_step(state, be, dt_sub); @@ -312,7 +312,7 @@ int be_integrator (BurnT& state, be_t& be) // define a weight for each variable to use in checking the error - Array1D w; + Array1D w; for (int n = 1; n <= NumSpec; n++) { w(n) = 1.0_rt / (be.rtol_spec * std::abs(y_fine(n)) + be.atol_spec); } @@ -341,7 +341,7 @@ int be_integrator (BurnT& state, be_t& be) be.t += dt_sub; - for (int n = 1; n <= BE_NEQS; ++n) { + for (int n = 1; n <= INT_NEQS; ++n) { be.y(n) = y_fine(n); } @@ -354,7 +354,7 @@ int be_integrator (BurnT& state, be_t& be) } else { // roll back the solution - for (int n = 1; n <= BE_NEQS; ++n) { + for (int n = 1; n <= INT_NEQS; ++n) { be.y(n) = y_old(n); } diff --git a/integration/BackwardEuler/be_type.H b/integration/BackwardEuler/be_type.H index c8bf9ac4ac..5b462c8409 100644 --- a/integration/BackwardEuler/be_type.H +++ b/integration/BackwardEuler/be_type.H @@ -19,8 +19,6 @@ #include #endif -const int BE_NEQS = INT_NEQS; - const int BE_SUCCESS = 0; const int BE_NONCONVERGENCE = -100; const int BE_LU_DECOMPOSITION_ERROR = -101; @@ -48,7 +46,7 @@ struct be_t { amrex::Real atol_enuc; amrex::Real rtol_enuc; - Array1D y; + Array1D y; JacNetArray2D jac; short jacobian_type; diff --git a/integration/RKC/actual_integrator.H b/integration/RKC/actual_integrator.H index ead50f79ef..cef49b1fbe 100644 --- a/integration/RKC/actual_integrator.H +++ b/integration/RKC/actual_integrator.H @@ -85,8 +85,8 @@ void actual_integrator (BurnT& state, Real dt) state.success = false; } - // VODE does not always fail even though it can lead to unphysical states. - // Add some checks that indicate a burn fail even if VODE thinks the + // We may not fail even though we generate unphysical states. + // Add some checks that indicate a burn fail even if RKC thinks the // integration was successful. for (int n = 1; n <= NumSpec; ++n) { diff --git a/integration/RKC/actual_integrator_simplified_sdc.H b/integration/RKC/actual_integrator_simplified_sdc.H index 72939cb0bb..2e5da0daea 100644 --- a/integration/RKC/actual_integrator_simplified_sdc.H +++ b/integration/RKC/actual_integrator_simplified_sdc.H @@ -1,9 +1,6 @@ #ifndef actual_integrator_H #define actual_integrator_H -// Common variables and routines for burners -// that use VODE for their integration. - #include #include diff --git a/integration/RKC/rkc.H b/integration/RKC/rkc.H index 4e07943b1d..3a216e928c 100644 --- a/integration/RKC/rkc.H +++ b/integration/RKC/rkc.H @@ -31,11 +31,11 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) // Evaluate the first stage. - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp2(i) = rstate.yn(i); } Real mus = w1 * bjm1; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.yn(i) + h * mus * rstate.fn(i); } @@ -67,13 +67,13 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) // the original Fortran code stored the output temporarily // in rstate.y(), but we need that for input - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = rstate.vtemp1(i); } RArray1D ydot; rhs(rstate.t + h*thjm1, state, rstate, ydot); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = mu * rstate.vtemp1(i) + nu * rstate.vtemp2(i) + (1.0_rt - mu - nu) * rstate.yn(i) + @@ -84,7 +84,7 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) // Shift the data for the next stage. if (j < m) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp2(i) = rstate.vtemp1(i); rstate.vtemp1(i) = rstate.y(i); } @@ -127,18 +127,18 @@ Real rkcrho (BurnT& state, rkc_t& rstate) // norm has the constant value dynrm. if (rstate.nsteps == 0) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.fn(i); } } else { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.sprad(i); } } Real ynrm{}; Real vnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ynrm += std::pow(rstate.yn(i), 2); vnrm += std::pow(rstate.vtemp1(i), 2); } @@ -148,22 +148,22 @@ Real rkcrho (BurnT& state, rkc_t& rstate) Real dynrm{}; if (ynrm != 0.0_rt && vnrm != 0.0_rt) { dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.yn(i) + rstate.vtemp1(i) * (dynrm / vnrm); } } else if (ynrm != 0.0_rt) { dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); } } else if (vnrm != 0.0_rt) { dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.vtemp1(i) * (dynrm / vnrm); } } else { dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = dynrm; } } @@ -178,17 +178,17 @@ Real rkcrho (BurnT& state, rkc_t& rstate) // we want to call the RHS with vtemp1() as the input, so we need to copy // this temporarily into vstate.y() RArray1D ysav; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ysav(i) = rstate.y(i); rstate.y(i) = rstate.vtemp1(i); } rhs(rstate.t, state, rstate, rstate.vtemp2); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = ysav(i); } rstate.nfesig++; Real dfnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { dfnrm += std::pow(rstate.vtemp2(i) - rstate.fn(i), 2); } dfnrm = std::sqrt(dfnrm); @@ -202,7 +202,7 @@ Real rkcrho (BurnT& state, rkc_t& rstate) if (iter >= 1 && std::abs(sigma - sigmal) <= std::max(sigma, small) * p01) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.sprad(i) = rstate.vtemp1(i) - rstate.yn(i); } return sprad; @@ -212,7 +212,7 @@ Real rkcrho (BurnT& state, rkc_t& rstate) // scaled so that norm(v - yn) = dynrm. if (dfnrm != 0.0_rt) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.yn(i) + (rstate.vtemp2(i) - rstate.fn(i)) * (dynrm / dfnrm); } @@ -222,7 +222,7 @@ Real rkcrho (BurnT& state, rkc_t& rstate) // current approximation to the eigenvector by changing // the sign of one component. - int index = 1 + (iter + 1) % RKC_NEQS; + int index = 1 + (iter + 1) % INT_NEQS; rstate.vtemp1(index) = rstate.yn(index) - (rstate.vtemp1(index) - rstate.yn(index)); } @@ -259,7 +259,7 @@ int rkclow (BurnT& state, rkc_t& rstate) bool newspc = true; bool jacatt = false; int nstsig = 0; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yn(i) = rstate.y(i); } @@ -303,19 +303,19 @@ int rkclow (BurnT& state, rkc_t& rstate) } absh = std::max(absh, hmin); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.vtemp1(i) = rstate.yn(i) + absh * rstate.fn(i); } // we want to call with vtemp1 as the input, so we need to stash the // current y RArray1D ysav; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ysav(i) = rstate.y(i); rstate.y(i) = rstate.vtemp1(i); } rhs(rstate.t+absh, state, rstate, rstate.vtemp2); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = ysav(i); } @@ -323,7 +323,7 @@ int rkclow (BurnT& state, rkc_t& rstate) Real est{}; // compute the weights using the tolerances - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { Real wt{}; if (i <= NumSpec) { wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; @@ -336,7 +336,7 @@ int rkclow (BurnT& state, rkc_t& rstate) } est += std::pow((rstate.vtemp2(i) - rstate.fn(i)) / wt, 2); } - est = absh * std::sqrt(est / RKC_NEQS); + est = absh * std::sqrt(est / INT_NEQS); if (p1 * absh < rstate.hmax * std::sqrt(est)) { absh = std::max(p1 * absh / std::sqrt(est), hmin); @@ -377,7 +377,7 @@ int rkclow (BurnT& state, rkc_t& rstate) // Estimate the local error and compute its weighted RMS norm. Real err{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { Real wt{}; if (i <= NumSpec) { wt = rstate.rtol_spec * std::max(std::abs(rstate.yn(i)), @@ -397,7 +397,7 @@ int rkclow (BurnT& state, rkc_t& rstate) err += std::pow(est / wt, 2); } - err = std::sqrt(err / RKC_NEQS); + err = std::sqrt(err / INT_NEQS); if (err > 1.0_rt) { // Step is rejected. @@ -424,7 +424,7 @@ int rkclow (BurnT& state, rkc_t& rstate) } // Update the data for interpolation stored in work(*). - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { Real ylast = rstate.yn(i); Real yplast = rstate.fn(i); rstate.yn(i) = rstate.y(i); diff --git a/integration/RKC/rkc_type.H b/integration/RKC/rkc_type.H index 357b181107..742264f0f3 100644 --- a/integration/RKC/rkc_type.H +++ b/integration/RKC/rkc_type.H @@ -9,10 +9,7 @@ #include -const int RKC_NEQS = INT_NEQS; - -typedef amrex::Array1D RArray1D; -typedef amrex::Array1D RArray1D; +typedef amrex::Array1D RArray1D; const amrex::Real UROUND = std::numeric_limits::epsilon(); @@ -55,7 +52,7 @@ struct rkc_t { // We have our own tolerances // work array -- we break the original Fortran work array up into - // 5 separate arrays, each of length RKC_NEQS. We don't need the + // 5 separate arrays, each of length INT_NEQS. We don't need the // 8 other pieces of data that were stored in the Fortran version. // // for reference, the Fortran version was: From f17a63398b21ff72fdde339b534ddc775f21155e Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Wed, 7 Jun 2023 11:56:27 -0400 Subject: [PATCH 16/45] fix compilation --- integration/BackwardEuler/be_type.H | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/BackwardEuler/be_type.H b/integration/BackwardEuler/be_type.H index 5b462c8409..864df24273 100644 --- a/integration/BackwardEuler/be_type.H +++ b/integration/BackwardEuler/be_type.H @@ -46,7 +46,7 @@ struct be_t { amrex::Real atol_enuc; amrex::Real rtol_enuc; - Array1D y; + Array1D y; JacNetArray2D jac; short jacobian_type; From c72b8aa3870b587bc66ff28c1629d0543c788ac7 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Wed, 7 Jun 2023 14:17:00 -0400 Subject: [PATCH 17/45] fix weighting --- integration/ROCK4/rock4.H | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index e272ba16f3..e5458d354e 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -188,9 +188,9 @@ Real rfstep (BurnT& state, rock4_t& rstate) for (int j = 1; j <= INT_NEQS; ++j) { Real wt{}; if (j <= NumSpec) { - wt = rstate.rtol_spec * std::abs(rstate.yn(j)) + rstate.atol_spec; + wt = rstate.rtol_spec * std::abs(rstate.y(j)) + rstate.atol_spec; } else { - wt = rstate.rtol_enuc * std::abs(rstate.yn(j)) + rstate.atol_enuc; + wt = rstate.rtol_enuc * std::abs(rstate.y(j)) + rstate.atol_enuc; } err += std::pow((temp1 * rstate.yjm1(j) + From 45d63268c534dd95be5b4c5488631264ba61c4b7 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Thu, 8 Jun 2023 14:49:52 -0400 Subject: [PATCH 18/45] add comments --- integration/RKC/rkc.H | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/integration/RKC/rkc.H b/integration/RKC/rkc.H index 4e07943b1d..3ed99c874e 100644 --- a/integration/RKC/rkc.H +++ b/integration/RKC/rkc.H @@ -111,6 +111,21 @@ Real rkcrho (BurnT& state, rkc_t& rstate) // the spectral radius of the Jacobian matrix using a nonlinear // power method. A convergence failure is reported by IDID = 6. + // for the start (nsteps == 0), this works off of the initial + // function evaluation, rstate.fn(i), which has units of dy/dt + // + // for other steps, with works off of rstate.sprad, which is the + // eigenvector from the previous solve. It also has units of + // y + // + // this means that the caller needs to initialize + // + // rstate.yn to the old-timesolution + // rstate.fn to the RHS called with yn for nsteps == 0 + // rstate.sprad to the previous eigenvector for nsteps > 0 + // + // we use rstate.vtemp1 and rstate.vtemp2 as internal storage + constexpr int itmax{50}; constexpr Real onep2{1.2_rt}; constexpr Real p01{0.01_rt}; From e9a368a38ca249aeac007045f08381dfae3c5aed Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Thu, 8 Jun 2023 15:25:53 -0400 Subject: [PATCH 19/45] start of some clean-ups of RKC --- integration/RKC/Make.package | 1 + integration/RKC/rkc.H | 54 ++++-------------------------------- 2 files changed, 6 insertions(+), 49 deletions(-) diff --git a/integration/RKC/Make.package b/integration/RKC/Make.package index 1d50a75d21..0a52d88c33 100644 --- a/integration/RKC/Make.package +++ b/integration/RKC/Make.package @@ -7,4 +7,5 @@ else endif CEXE_headers += rkc_type.H +CEXE_headers += rkc_util.H CEXE_headers += rkc.H diff --git a/integration/RKC/rkc.H b/integration/RKC/rkc.H index 3ed99c874e..b941989a8d 100644 --- a/integration/RKC/rkc.H +++ b/integration/RKC/rkc.H @@ -2,6 +2,7 @@ #define RKC_H #include +#include #include #ifdef STRANG #include @@ -135,6 +136,7 @@ Real rkcrho (BurnT& state, rkc_t& rstate) Real small = 1.0_rt / rstate.hmax; + // The initial slope is used as guess when nsteps = 0 and // thereafter the last computed eigenvector. Some care // is needed to deal with special cases. Approximations to @@ -258,7 +260,6 @@ int rkclow (BurnT& state, rkc_t& rstate) // RKC is an interface to RKCLOW where the actual solution takes place. const Real onep1 = 1.1_rt; - const Real p1 = 0.1_rt; const Real p4 = 0.4_rt; const Real p8 = 0.8_rt; const Real one3rd = 1.0_rt/3.0_rt; @@ -285,7 +286,7 @@ int rkclow (BurnT& state, rkc_t& rstate) Real tdir = std::copysign(1.0_rt, rstate.tend - rstate.t); rstate.hmax = std::abs(rstate.tend - rstate.t); - Real hmin = 10.0_rt * UROUND * std::max(std::abs(rstate.t), rstate.hmax); + Real hmin{}; Real sprad{}; Real absh{}; Real errold{}; @@ -312,52 +313,7 @@ int rkclow (BurnT& state, rkc_t& rstate) // Compute an initial step size. if (rstate.nsteps == 0) { - absh = rstate.hmax; - if (sprad * absh > 1.0_rt) { - absh = 1.0_rt / sprad; - } - absh = std::max(absh, hmin); - - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.yn(i) + absh * rstate.fn(i); - } - - // we want to call with vtemp1 as the input, so we need to stash the - // current y - RArray1D ysav; - for (int i = 1; i <= RKC_NEQS; ++i) { - ysav(i) = rstate.y(i); - rstate.y(i) = rstate.vtemp1(i); - } - rhs(rstate.t+absh, state, rstate, rstate.vtemp2); - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.y(i) = ysav(i); - } - - rstate.nfe++; - Real est{}; - - // compute the weights using the tolerances - for (int i = 1; i <= RKC_NEQS; ++i) { - Real wt{}; - if (i <= NumSpec) { - wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; - } else { - wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; - } - if (wt == 0.0_rt) { - rstate.idid = 3; - return rstate.idid; - } - est += std::pow((rstate.vtemp2(i) - rstate.fn(i)) / wt, 2); - } - est = absh * std::sqrt(est / RKC_NEQS); - - if (p1 * absh < rstate.hmax * std::sqrt(est)) { - absh = std::max(p1 * absh / std::sqrt(est), hmin); - } else { - absh = rstate.hmax; - } + absh = rkc_init_dt(state, rstate, rstate.hmax, sprad); } // Adjust the step size and determine the number of stages m. @@ -460,7 +416,7 @@ int rkclow (BurnT& state, rkc_t& rstate) fac = temp1 / temp2; } } - absh = std::max(p1, fac) * absh; + absh = std::max(0.1_rt, fac) * absh; absh = std::max(hmin, std::min(rstate.hmax, absh)); errold = err; hold = h; From 3accbff911e262db11974685f884b7cfe2657223 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 9 Jun 2023 12:45:00 -0400 Subject: [PATCH 20/45] add missing file --- integration/RKC/rkc_util.H | 72 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 integration/RKC/rkc_util.H diff --git a/integration/RKC/rkc_util.H b/integration/RKC/rkc_util.H new file mode 100644 index 0000000000..1b3ef7caec --- /dev/null +++ b/integration/RKC/rkc_util.H @@ -0,0 +1,72 @@ +#ifndef RKC_UTIL +#define RKC_UTIL + +#include + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real sprad) +{ + + // estimate the initial timestep + // + // this requires that yn hold the initial state and fn the corresponding RHS + // it also requires temporary space vtemp1 and vtemp2 + // finally, we require the initial spectral radius, sprad, and the maximum + // timestep (tend - tstart), max_dt. + + Real hmin = 10.0_rt * UROUND * std::max(std::abs(rstate.t), max_dt); + + Real absh = max_dt; + + if (sprad * absh > 1.0_rt) { + absh = 1.0_rt / sprad; + } + absh = std::max(absh, hmin); + + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.vtemp1(i) = rstate.yn(i) + absh * rstate.fn(i); + } + + // we want to call with vtemp1 as the input, so we need to stash the + // current y + RArray1D ysav; + for (int i = 1; i <= INT_NEQS; ++i) { + ysav(i) = rstate.y(i); + rstate.y(i) = rstate.vtemp1(i); + } + rhs(rstate.t+absh, state, rstate, rstate.vtemp2); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = ysav(i); + } + + rstate.nfe++; + Real est{}; + + // compute the weights using the tolerances + for (int i = 1; i <= INT_NEQS; ++i) { + Real wt{}; + if (i <= NumSpec) { + wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; + } else { + wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; + } + if (wt == 0.0_rt) { + rstate.idid = 3; + return rstate.idid; + } + est += std::pow((rstate.vtemp2(i) - rstate.fn(i)) / wt, 2); + } + est = absh * std::sqrt(est / INT_NEQS); + + if (0.1_rt * absh < max_dt * std::sqrt(est)) { + absh = std::max(0.1_rt * absh / std::sqrt(est), hmin); + } else { + absh = max_dt; + } + + return absh; + +} + +#endif From b7fe27b8fd87cfe0d2b4e1ad1750c276a337d853 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 9 Jun 2023 12:49:41 -0400 Subject: [PATCH 21/45] fix header guard --- integration/RKC/rkc_util.H | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration/RKC/rkc_util.H b/integration/RKC/rkc_util.H index 1b3ef7caec..fd44c435c8 100644 --- a/integration/RKC/rkc_util.H +++ b/integration/RKC/rkc_util.H @@ -1,5 +1,5 @@ -#ifndef RKC_UTIL -#define RKC_UTIL +#ifndef RKC_UTIL_H +#define RKC_UTIL_H #include From 682e3fe17d044e2ae2b772f00e9ed0069091fb04 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 9 Jun 2023 13:34:40 -0400 Subject: [PATCH 22/45] more restructuring --- integration/RKC/rkc.H | 177 ++++--------------------------------- integration/RKC/rkc_type.H | 4 +- integration/RKC/rkc_util.H | 160 +++++++++++++++++++++++++++++++-- 3 files changed, 171 insertions(+), 170 deletions(-) diff --git a/integration/RKC/rkc.H b/integration/RKC/rkc.H index b941989a8d..75896de5e0 100644 --- a/integration/RKC/rkc.H +++ b/integration/RKC/rkc.H @@ -33,11 +33,11 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) // Evaluate the first stage. for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp2(i) = rstate.yn(i); + rstate.yjm2(i) = rstate.yn(i); } Real mus = w1 * bjm1; for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.yn(i) + h * mus * rstate.fn(i); + rstate.yjm1(i) = rstate.yn(i) + h * mus * rstate.fn(i); } Real thjm2{}; @@ -64,19 +64,19 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) // Use the y array for temporary storage here. // for this call - // we want rstate.vtemp1() to be the input y + // we want rstate.yjm1() to be the input y // the original Fortran code stored the output temporarily // in rstate.y(), but we need that for input for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.y(i) = rstate.vtemp1(i); + rstate.y(i) = rstate.yjm1(i); } RArray1D ydot; rhs(rstate.t + h*thjm1, state, rstate, ydot); for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.y(i) = mu * rstate.vtemp1(i) + - nu * rstate.vtemp2(i) + + rstate.y(i) = mu * rstate.yjm1(i) + + nu * rstate.yjm2(i) + (1.0_rt - mu - nu) * rstate.yn(i) + h * mus * (ydot(i) - ajm1 * rstate.fn(i)); } @@ -86,8 +86,8 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) if (j < m) { for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp2(i) = rstate.vtemp1(i); - rstate.vtemp1(i) = rstate.y(i); + rstate.yjm2(i) = rstate.yjm1(i); + rstate.yjm1(i) = rstate.y(i); } thjm2 = thjm1; thjm1 = thj; @@ -103,153 +103,6 @@ void step (BurnT& state, rkc_t& rstate, const Real h, const int m) } } -template -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rkcrho (BurnT& state, rkc_t& rstate) -{ - - // RKCRHO attempts to compute a close upper bound, SPRAD, on - // the spectral radius of the Jacobian matrix using a nonlinear - // power method. A convergence failure is reported by IDID = 6. - - // for the start (nsteps == 0), this works off of the initial - // function evaluation, rstate.fn(i), which has units of dy/dt - // - // for other steps, with works off of rstate.sprad, which is the - // eigenvector from the previous solve. It also has units of - // y - // - // this means that the caller needs to initialize - // - // rstate.yn to the old-timesolution - // rstate.fn to the RHS called with yn for nsteps == 0 - // rstate.sprad to the previous eigenvector for nsteps > 0 - // - // we use rstate.vtemp1 and rstate.vtemp2 as internal storage - - constexpr int itmax{50}; - constexpr Real onep2{1.2_rt}; - constexpr Real p01{0.01_rt}; - - // sprad smaller than small = 1/hmax are not - // interesting because they do not constrain the step size. - - Real small = 1.0_rt / rstate.hmax; - - - // The initial slope is used as guess when nsteps = 0 and - // thereafter the last computed eigenvector. Some care - // is needed to deal with special cases. Approximations to - // the eigenvector are normalized so that their Euclidean - // norm has the constant value dynrm. - - if (rstate.nsteps == 0) { - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.fn(i); - } - } else { - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.sprad(i); - } - } - - Real ynrm{}; - Real vnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { - ynrm += std::pow(rstate.yn(i), 2); - vnrm += std::pow(rstate.vtemp1(i), 2); - } - ynrm = std::sqrt(ynrm); - vnrm = std::sqrt(vnrm); - - Real dynrm{}; - if (ynrm != 0.0_rt && vnrm != 0.0_rt) { - dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.yn(i) + rstate.vtemp1(i) * (dynrm / vnrm); - } - } else if (ynrm != 0.0_rt) { - dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); - } - } else if (vnrm != 0.0_rt) { - dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.vtemp1(i) * (dynrm / vnrm); - } - } else { - dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = dynrm; - } - } - - // Now iterate with a nonlinear power method. - - Real sigma{}; - Real sprad{}; - - for (int iter = 0; iter < itmax; ++iter) { - - // we want to call the RHS with vtemp1() as the input, so we need to copy - // this temporarily into vstate.y() - RArray1D ysav; - for (int i = 1; i <= RKC_NEQS; ++i) { - ysav(i) = rstate.y(i); - rstate.y(i) = rstate.vtemp1(i); - } - rhs(rstate.t, state, rstate, rstate.vtemp2); - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.y(i) = ysav(i); - } - rstate.nfesig++; - Real dfnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { - dfnrm += std::pow(rstate.vtemp2(i) - rstate.fn(i), 2); - } - dfnrm = std::sqrt(dfnrm); - Real sigmal = sigma; - sigma = dfnrm / dynrm; - - // sprad is a little bigger than the estimate sigma of the - // spectral radius, so is more likely to be an upper bound. - - sprad = onep2 * sigma; - - if (iter >= 1 && - std::abs(sigma - sigmal) <= std::max(sigma, small) * p01) { - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.sprad(i) = rstate.vtemp1(i) - rstate.yn(i); - } - return sprad; - } - - // The next vtemp1(*) is the change in f - // scaled so that norm(v - yn) = dynrm. - - if (dfnrm != 0.0_rt) { - for (int i = 1; i <= RKC_NEQS; ++i) { - rstate.vtemp1(i) = rstate.yn(i) + - (rstate.vtemp2(i) - rstate.fn(i)) * (dynrm / dfnrm); - } - } else { - - // The new v(*) degenerated to yn(*)--"randomly" perturb - // current approximation to the eigenvector by changing - // the sign of one component. - - int index = 1 + (iter + 1) % RKC_NEQS; - rstate.vtemp1(index) = rstate.yn(index) - - (rstate.vtemp1(index) - rstate.yn(index)); - } - } - - // Set flag to report a convergence failure. - - rstate.idid = 6; - return sprad; -} template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE @@ -301,7 +154,7 @@ int rkclow (BurnT& state, rkc_t& rstate) // in rkcrho is reported by idid = 6. if (newspc) { - sprad = rkcrho(state, rstate); + sprad = rkcrho(state, rstate, rstate.hmax); if (rstate.idid == 6) { return rstate.idid; } @@ -335,13 +188,13 @@ int rkclow (BurnT& state, rkc_t& rstate) rstate.maxm = std::max(m, rstate.maxm); // A tentative solution at t+h is returned in - // y and its slope is evaluated in vtemp1(*). + // y and its slope is evaluated in yjm1(*). h = tdir * absh; hmin = 10.0_rt * UROUND * std::max(std::abs(rstate.t), std::abs(rstate.t + h)); step(state, rstate, h, m); - rhs(rstate.t+h, state, rstate, rstate.vtemp1); + rhs(rstate.t+h, state, rstate, rstate.yjm1); rstate.nfe += m; rstate.nsteps++; @@ -364,7 +217,7 @@ int rkclow (BurnT& state, rkc_t& rstate) return rstate.idid; } Real est = p8 * (rstate.yn(i) - rstate.y(i)) + - p4 * h * (rstate.fn(i) + rstate.vtemp1(i)); + p4 * h * (rstate.fn(i) + rstate.yjm1(i)); err += std::pow(est / wt, 2); } @@ -399,9 +252,9 @@ int rkclow (BurnT& state, rkc_t& rstate) Real ylast = rstate.yn(i); Real yplast = rstate.fn(i); rstate.yn(i) = rstate.y(i); - rstate.fn(i) = rstate.vtemp1(i); - rstate.vtemp1(i) = ylast; - rstate.vtemp2(i) = yplast; + rstate.fn(i) = rstate.yjm1(i); + rstate.yjm1(i) = ylast; + rstate.yjm2(i) = yplast; } Real fac = 10.0_rt; if (rstate.naccpt == 1) { diff --git a/integration/RKC/rkc_type.H b/integration/RKC/rkc_type.H index 357b181107..d6e44c7409 100644 --- a/integration/RKC/rkc_type.H +++ b/integration/RKC/rkc_type.H @@ -80,8 +80,8 @@ struct rkc_t { RArray1D yn; RArray1D fn; - RArray1D vtemp1; - RArray1D vtemp2; + RArray1D yjm1; // sometimes called vtemp1 in rkc.f + RArray1D yjm2; // sometimes called vtemp2 in rkc.f RArray1D sprad; // set IDID = 0 for initialization diff --git a/integration/RKC/rkc_util.H b/integration/RKC/rkc_util.H index fd44c435c8..6d04f4a93e 100644 --- a/integration/RKC/rkc_util.H +++ b/integration/RKC/rkc_util.H @@ -11,7 +11,7 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra // estimate the initial timestep // // this requires that yn hold the initial state and fn the corresponding RHS - // it also requires temporary space vtemp1 and vtemp2 + // it also requires temporary space yjm1 and yjm2 // finally, we require the initial spectral radius, sprad, and the maximum // timestep (tend - tstart), max_dt. @@ -25,17 +25,17 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra absh = std::max(absh, hmin); for (int i = 1; i <= INT_NEQS; ++i) { - rstate.vtemp1(i) = rstate.yn(i) + absh * rstate.fn(i); + rstate.yjm1(i) = rstate.yn(i) + absh * rstate.fn(i); } - // we want to call with vtemp1 as the input, so we need to stash the + // we want to call with yjm1 as the input, so we need to stash the // current y RArray1D ysav; for (int i = 1; i <= INT_NEQS; ++i) { ysav(i) = rstate.y(i); - rstate.y(i) = rstate.vtemp1(i); + rstate.y(i) = rstate.yjm1(i); } - rhs(rstate.t+absh, state, rstate, rstate.vtemp2); + rhs(rstate.t+absh, state, rstate, rstate.yjm2); for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = ysav(i); } @@ -55,7 +55,7 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra rstate.idid = 3; return rstate.idid; } - est += std::pow((rstate.vtemp2(i) - rstate.fn(i)) / wt, 2); + est += std::pow((rstate.yjm2(i) - rstate.fn(i)) / wt, 2); } est = absh * std::sqrt(est / INT_NEQS); @@ -69,4 +69,152 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra } +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) +{ + + // RKCRHO attempts to compute a close upper bound, SPRAD, on + // the spectral radius of the Jacobian matrix using a nonlinear + // power method. A convergence failure is reported by IDID = 6. + + // for the start (nsteps == 0), this works off of the initial + // function evaluation, rstate.fn(i), which has units of dy/dt + // + // for other steps, with works off of rstate.sprad, which is the + // eigenvector from the previous solve. It also has units of + // y + // + // this means that the caller needs to initialize + // + // rstate.yn to the old-timesolution + // rstate.fn to the RHS called with yn for nsteps == 0 + // rstate.sprad to the previous eigenvector for nsteps > 0 + // + // max_dt is the maximum timestep, typically tend - tbegin + // + // we use rstate.yjm1 and rstate.yjm2 as internal storage + + constexpr int itmax{50}; + + // sprad smaller than small = 1/hmax are not + // interesting because they do not constrain the step size. + + Real small = 1.0_rt / max_dt; + + // The initial slope is used as guess when nsteps = 0 and + // thereafter the last computed eigenvector. Some care + // is needed to deal with special cases. Approximations to + // the eigenvector are normalized so that their Euclidean + // norm has the constant value dynrm. + + if (rstate.nsteps == 0) { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.fn(i); + } + } else { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.sprad(i); + } + } + + Real ynrm{}; + Real vnrm{}; + for (int i = 1; i <= RKC_NEQS; ++i) { + ynrm += std::pow(rstate.yn(i), 2); + vnrm += std::pow(rstate.yjm1(i), 2); + } + ynrm = std::sqrt(ynrm); + vnrm = std::sqrt(vnrm); + + Real dynrm{}; + if (ynrm != 0.0_rt && vnrm != 0.0_rt) { + dynrm = ynrm * std::sqrt(UROUND); + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * (dynrm / vnrm); + } + } else if (ynrm != 0.0_rt) { + dynrm = ynrm * std::sqrt(UROUND); + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); + } + } else if (vnrm != 0.0_rt) { + dynrm = UROUND; + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yjm1(i) * (dynrm / vnrm); + } + } else { + dynrm = UROUND; + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = dynrm; + } + } + + // Now iterate with a nonlinear power method. + + Real sigma{}; + Real sprad{}; + + for (int iter = 0; iter < itmax; ++iter) { + + // we want to call the RHS with yjm1() as the input, so we need to copy + // this temporarily into vstate.y() + RArray1D ysav; + for (int i = 1; i <= RKC_NEQS; ++i) { + ysav(i) = rstate.y(i); + rstate.y(i) = rstate.yjm1(i); + } + rhs(rstate.t, state, rstate, rstate.yjm2); + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.y(i) = ysav(i); + } + rstate.nfesig++; + Real dfnrm{}; + for (int i = 1; i <= RKC_NEQS; ++i) { + dfnrm += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); + } + dfnrm = std::sqrt(dfnrm); + Real sigmal = sigma; + sigma = dfnrm / dynrm; + + // sprad is a little bigger than the estimate sigma of the + // spectral radius, so is more likely to be an upper bound. + + sprad = 1.2_rt * sigma; + + if (iter >= 1 && + std::abs(sigma - sigmal) <= std::max(sigma, small) * 0.01_rt) { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); + } + return sprad; + } + + // The next yjm1(*) is the change in f + // scaled so that norm(v - yn) = dynrm. + + if (dfnrm != 0.0_rt) { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + + (rstate.yjm2(i) - rstate.fn(i)) * (dynrm / dfnrm); + } + } else { + + // The new v(*) degenerated to yn(*)--"randomly" perturb + // current approximation to the eigenvector by changing + // the sign of one component. + + int index = 1 + (iter + 1) % RKC_NEQS; + rstate.yjm1(index) = rstate.yn(index) - + (rstate.yjm1(index) - rstate.yn(index)); + } + } + + // Set flag to report a convergence failure. + + rstate.idid = 6; + return sprad; +} + + #endif From 48e8b8a086c829d97a1d1fedce98c84ec533bd48 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 9 Jun 2023 13:44:02 -0400 Subject: [PATCH 23/45] use rkc tools --- integration/ROCK4/rkc_util.H | 220 +++++++++++++++++++++++++++++++++++ integration/ROCK4/rock4.H | 9 +- 2 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 integration/ROCK4/rkc_util.H diff --git a/integration/ROCK4/rkc_util.H b/integration/ROCK4/rkc_util.H new file mode 100644 index 0000000000..6d04f4a93e --- /dev/null +++ b/integration/ROCK4/rkc_util.H @@ -0,0 +1,220 @@ +#ifndef RKC_UTIL_H +#define RKC_UTIL_H + +#include + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real sprad) +{ + + // estimate the initial timestep + // + // this requires that yn hold the initial state and fn the corresponding RHS + // it also requires temporary space yjm1 and yjm2 + // finally, we require the initial spectral radius, sprad, and the maximum + // timestep (tend - tstart), max_dt. + + Real hmin = 10.0_rt * UROUND * std::max(std::abs(rstate.t), max_dt); + + Real absh = max_dt; + + if (sprad * absh > 1.0_rt) { + absh = 1.0_rt / sprad; + } + absh = std::max(absh, hmin); + + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + absh * rstate.fn(i); + } + + // we want to call with yjm1 as the input, so we need to stash the + // current y + RArray1D ysav; + for (int i = 1; i <= INT_NEQS; ++i) { + ysav(i) = rstate.y(i); + rstate.y(i) = rstate.yjm1(i); + } + rhs(rstate.t+absh, state, rstate, rstate.yjm2); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = ysav(i); + } + + rstate.nfe++; + Real est{}; + + // compute the weights using the tolerances + for (int i = 1; i <= INT_NEQS; ++i) { + Real wt{}; + if (i <= NumSpec) { + wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; + } else { + wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; + } + if (wt == 0.0_rt) { + rstate.idid = 3; + return rstate.idid; + } + est += std::pow((rstate.yjm2(i) - rstate.fn(i)) / wt, 2); + } + est = absh * std::sqrt(est / INT_NEQS); + + if (0.1_rt * absh < max_dt * std::sqrt(est)) { + absh = std::max(0.1_rt * absh / std::sqrt(est), hmin); + } else { + absh = max_dt; + } + + return absh; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) +{ + + // RKCRHO attempts to compute a close upper bound, SPRAD, on + // the spectral radius of the Jacobian matrix using a nonlinear + // power method. A convergence failure is reported by IDID = 6. + + // for the start (nsteps == 0), this works off of the initial + // function evaluation, rstate.fn(i), which has units of dy/dt + // + // for other steps, with works off of rstate.sprad, which is the + // eigenvector from the previous solve. It also has units of + // y + // + // this means that the caller needs to initialize + // + // rstate.yn to the old-timesolution + // rstate.fn to the RHS called with yn for nsteps == 0 + // rstate.sprad to the previous eigenvector for nsteps > 0 + // + // max_dt is the maximum timestep, typically tend - tbegin + // + // we use rstate.yjm1 and rstate.yjm2 as internal storage + + constexpr int itmax{50}; + + // sprad smaller than small = 1/hmax are not + // interesting because they do not constrain the step size. + + Real small = 1.0_rt / max_dt; + + // The initial slope is used as guess when nsteps = 0 and + // thereafter the last computed eigenvector. Some care + // is needed to deal with special cases. Approximations to + // the eigenvector are normalized so that their Euclidean + // norm has the constant value dynrm. + + if (rstate.nsteps == 0) { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.fn(i); + } + } else { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.sprad(i); + } + } + + Real ynrm{}; + Real vnrm{}; + for (int i = 1; i <= RKC_NEQS; ++i) { + ynrm += std::pow(rstate.yn(i), 2); + vnrm += std::pow(rstate.yjm1(i), 2); + } + ynrm = std::sqrt(ynrm); + vnrm = std::sqrt(vnrm); + + Real dynrm{}; + if (ynrm != 0.0_rt && vnrm != 0.0_rt) { + dynrm = ynrm * std::sqrt(UROUND); + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * (dynrm / vnrm); + } + } else if (ynrm != 0.0_rt) { + dynrm = ynrm * std::sqrt(UROUND); + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); + } + } else if (vnrm != 0.0_rt) { + dynrm = UROUND; + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yjm1(i) * (dynrm / vnrm); + } + } else { + dynrm = UROUND; + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = dynrm; + } + } + + // Now iterate with a nonlinear power method. + + Real sigma{}; + Real sprad{}; + + for (int iter = 0; iter < itmax; ++iter) { + + // we want to call the RHS with yjm1() as the input, so we need to copy + // this temporarily into vstate.y() + RArray1D ysav; + for (int i = 1; i <= RKC_NEQS; ++i) { + ysav(i) = rstate.y(i); + rstate.y(i) = rstate.yjm1(i); + } + rhs(rstate.t, state, rstate, rstate.yjm2); + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.y(i) = ysav(i); + } + rstate.nfesig++; + Real dfnrm{}; + for (int i = 1; i <= RKC_NEQS; ++i) { + dfnrm += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); + } + dfnrm = std::sqrt(dfnrm); + Real sigmal = sigma; + sigma = dfnrm / dynrm; + + // sprad is a little bigger than the estimate sigma of the + // spectral radius, so is more likely to be an upper bound. + + sprad = 1.2_rt * sigma; + + if (iter >= 1 && + std::abs(sigma - sigmal) <= std::max(sigma, small) * 0.01_rt) { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); + } + return sprad; + } + + // The next yjm1(*) is the change in f + // scaled so that norm(v - yn) = dynrm. + + if (dfnrm != 0.0_rt) { + for (int i = 1; i <= RKC_NEQS; ++i) { + rstate.yjm1(i) = rstate.yn(i) + + (rstate.yjm2(i) - rstate.fn(i)) * (dynrm / dfnrm); + } + } else { + + // The new v(*) degenerated to yn(*)--"randomly" perturb + // current approximation to the eigenvector by changing + // the sign of one component. + + int index = 1 + (iter + 1) % RKC_NEQS; + rstate.yjm1(index) = rstate.yn(index) - + (rstate.yjm1(index) - rstate.yn(index)); + } + } + + // Set flag to report a convergence failure. + + rstate.idid = 6; + return sprad; +} + + +#endif diff --git a/integration/ROCK4/rock4.H b/integration/ROCK4/rock4.H index e5458d354e..d4444c6aab 100644 --- a/integration/ROCK4/rock4.H +++ b/integration/ROCK4/rock4.H @@ -13,6 +13,7 @@ #endif #include #include +#include AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mdegre(rock4_t& rstate) @@ -549,10 +550,16 @@ int rock4 (BurnT& state, rock4_t& rstate) // initializations // get the initial timestep + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yn(i) = rstate.y(i); + } rhs(rstate.t, state, rstate, rstate.fn); - rstate.h = initial_dt(state, rstate, rstate.fn); + Real sprad = rkcrho(state, rstate, rstate.tend); + + //rstate.h = initial_dt(state, rstate, rstate.fn); + rstate.h = rkc_init_dt(state, rstate, rstate.tend, sprad); std::cout << "initial timestep = " << rstate.h << std::endl; From 83fba13bc0a487bc9679c8cca5a7b8c4ce80809b Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 9 Jun 2023 20:09:41 -0400 Subject: [PATCH 24/45] fix compilation --- integration/RKC/rkc_util.H | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/integration/RKC/rkc_util.H b/integration/RKC/rkc_util.H index 6d04f4a93e..98be1ead68 100644 --- a/integration/RKC/rkc_util.H +++ b/integration/RKC/rkc_util.H @@ -109,18 +109,18 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // norm has the constant value dynrm. if (rstate.nsteps == 0) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.fn(i); } } else { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.sprad(i); } } Real ynrm{}; Real vnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ynrm += std::pow(rstate.yn(i), 2); vnrm += std::pow(rstate.yjm1(i), 2); } @@ -130,22 +130,22 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) Real dynrm{}; if (ynrm != 0.0_rt && vnrm != 0.0_rt) { dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * (dynrm / vnrm); } } else if (ynrm != 0.0_rt) { dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); } } else if (vnrm != 0.0_rt) { dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yjm1(i) * (dynrm / vnrm); } } else { dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = dynrm; } } @@ -160,17 +160,17 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // we want to call the RHS with yjm1() as the input, so we need to copy // this temporarily into vstate.y() RArray1D ysav; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ysav(i) = rstate.y(i); rstate.y(i) = rstate.yjm1(i); } rhs(rstate.t, state, rstate, rstate.yjm2); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = ysav(i); } rstate.nfesig++; Real dfnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { dfnrm += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); } dfnrm = std::sqrt(dfnrm); @@ -184,7 +184,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) if (iter >= 1 && std::abs(sigma - sigmal) <= std::max(sigma, small) * 0.01_rt) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); } return sprad; @@ -194,7 +194,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // scaled so that norm(v - yn) = dynrm. if (dfnrm != 0.0_rt) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yn(i) + (rstate.yjm2(i) - rstate.fn(i)) * (dynrm / dfnrm); } @@ -204,7 +204,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // current approximation to the eigenvector by changing // the sign of one component. - int index = 1 + (iter + 1) % RKC_NEQS; + int index = 1 + (iter + 1) % INT_NEQS; rstate.yjm1(index) = rstate.yn(index) - (rstate.yjm1(index) - rstate.yn(index)); } From eedad00e48e80c46372f186cb42d01153636f633 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 16 Jun 2023 21:50:43 -0400 Subject: [PATCH 25/45] rename --- integration/{ROCK4 => ROCK}/Make.package | 0 integration/{ROCK4 => ROCK}/README.md | 0 integration/{ROCK4 => ROCK}/_parameters | 0 integration/{ROCK4 => ROCK}/actual_integrator.H | 0 integration/{ROCK4 => ROCK}/actual_integrator_simplified_sdc.H | 0 integration/{ROCK4 => ROCK}/rkc_util.H | 0 integration/{ROCK4 => ROCK}/rock4.H | 0 integration/{ROCK4 => ROCK}/rock4_coefficients.H | 0 integration/{ROCK4 => ROCK}/rock4_type.H | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename integration/{ROCK4 => ROCK}/Make.package (100%) rename integration/{ROCK4 => ROCK}/README.md (100%) rename integration/{ROCK4 => ROCK}/_parameters (100%) rename integration/{ROCK4 => ROCK}/actual_integrator.H (100%) rename integration/{ROCK4 => ROCK}/actual_integrator_simplified_sdc.H (100%) rename integration/{ROCK4 => ROCK}/rkc_util.H (100%) rename integration/{ROCK4 => ROCK}/rock4.H (100%) rename integration/{ROCK4 => ROCK}/rock4_coefficients.H (100%) rename integration/{ROCK4 => ROCK}/rock4_type.H (100%) diff --git a/integration/ROCK4/Make.package b/integration/ROCK/Make.package similarity index 100% rename from integration/ROCK4/Make.package rename to integration/ROCK/Make.package diff --git a/integration/ROCK4/README.md b/integration/ROCK/README.md similarity index 100% rename from integration/ROCK4/README.md rename to integration/ROCK/README.md diff --git a/integration/ROCK4/_parameters b/integration/ROCK/_parameters similarity index 100% rename from integration/ROCK4/_parameters rename to integration/ROCK/_parameters diff --git a/integration/ROCK4/actual_integrator.H b/integration/ROCK/actual_integrator.H similarity index 100% rename from integration/ROCK4/actual_integrator.H rename to integration/ROCK/actual_integrator.H diff --git a/integration/ROCK4/actual_integrator_simplified_sdc.H b/integration/ROCK/actual_integrator_simplified_sdc.H similarity index 100% rename from integration/ROCK4/actual_integrator_simplified_sdc.H rename to integration/ROCK/actual_integrator_simplified_sdc.H diff --git a/integration/ROCK4/rkc_util.H b/integration/ROCK/rkc_util.H similarity index 100% rename from integration/ROCK4/rkc_util.H rename to integration/ROCK/rkc_util.H diff --git a/integration/ROCK4/rock4.H b/integration/ROCK/rock4.H similarity index 100% rename from integration/ROCK4/rock4.H rename to integration/ROCK/rock4.H diff --git a/integration/ROCK4/rock4_coefficients.H b/integration/ROCK/rock4_coefficients.H similarity index 100% rename from integration/ROCK4/rock4_coefficients.H rename to integration/ROCK/rock4_coefficients.H diff --git a/integration/ROCK4/rock4_type.H b/integration/ROCK/rock4_type.H similarity index 100% rename from integration/ROCK4/rock4_type.H rename to integration/ROCK/rock4_type.H From 46448c8ba447f4c72efe9e7296d1620390e9c3af Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 16 Jun 2023 22:11:41 -0400 Subject: [PATCH 26/45] some renaming to allow for us to add ROCK2 --- integration/ROCK/Make.package | 3 +- integration/ROCK/actual_integrator.H | 8 +- .../ROCK/actual_integrator_simplified_sdc.H | 6 +- integration/ROCK/rkc_util.H | 32 +- integration/ROCK/rock4.H | 52 +- integration/ROCK/rock4_coefficients.H | 3474 +++++++++-------- .../ROCK/{rock4_type.H => rock_type.H} | 14 +- 7 files changed, 1797 insertions(+), 1792 deletions(-) rename integration/ROCK/{rock4_type.H => rock_type.H} (90%) diff --git a/integration/ROCK/Make.package b/integration/ROCK/Make.package index 299a20c4fd..3bf79365c3 100644 --- a/integration/ROCK/Make.package +++ b/integration/ROCK/Make.package @@ -6,5 +6,6 @@ else endif endif -CEXE_headers += rock4_type.H +CEXE_headers += rock_type.H +CEXE_headers += rock4_coefficients.H CEXE_headers += rock4.H diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index 9e816685bd..ea2271e017 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -8,14 +8,14 @@ #include #include #include -#include +#include #include template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void actual_integrator (BurnT& state, Real dt) { - rock4_t rock_state{}; + rock_t rock_state{}; // Set the tolerances. @@ -90,14 +90,14 @@ void actual_integrator (BurnT& state, Real dt) // integration was successful. for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(n) < -rock4_failure_tolerance) { + if (rock_state.y(n) < -rock_failure_tolerance) { state.success = false; } // Don't enforce the condition below // for primordial chem if (!use_number_densities) { - if (rock_state.y(n) > 1.0_rt + rock4_failure_tolerance) { + if (rock_state.y(n) > 1.0_rt + rock_failure_tolerance) { state.success = false; } } diff --git a/integration/ROCK/actual_integrator_simplified_sdc.H b/integration/ROCK/actual_integrator_simplified_sdc.H index 8db05eaac1..f3c3646b60 100644 --- a/integration/ROCK/actual_integrator_simplified_sdc.H +++ b/integration/ROCK/actual_integrator_simplified_sdc.H @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include using namespace integrator_rp; @@ -129,11 +129,11 @@ void actual_integrator (BurnT& state, Real dt) } for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(SFS+n) / state.y[SRHO] < -rock4_failure_tolerance) { + if (rock_state.y(SFS+n) / state.y[SRHO] < -rock_failure_tolerance) { state.success = false; } - if (rock_state.y(SFS+n) / state.y[SRHO] > 1.0_rt + rock4_failure_tolerance) { + if (rock_state.y(SFS+n) / state.y[SRHO] > 1.0_rt + rock_failure_tolerance) { state.success = false; } } diff --git a/integration/ROCK/rkc_util.H b/integration/ROCK/rkc_util.H index 6d04f4a93e..dd9fc3e626 100644 --- a/integration/ROCK/rkc_util.H +++ b/integration/ROCK/rkc_util.H @@ -1,8 +1,6 @@ #ifndef RKC_UTIL_H #define RKC_UTIL_H -#include - template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real sprad) @@ -13,7 +11,7 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra // this requires that yn hold the initial state and fn the corresponding RHS // it also requires temporary space yjm1 and yjm2 // finally, we require the initial spectral radius, sprad, and the maximum - // timestep (tend - tstart), max_dt. + // timestep (tout - tstart), max_dt. Real hmin = 10.0_rt * UROUND * std::max(std::abs(rstate.t), max_dt); @@ -91,7 +89,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // rstate.fn to the RHS called with yn for nsteps == 0 // rstate.sprad to the previous eigenvector for nsteps > 0 // - // max_dt is the maximum timestep, typically tend - tbegin + // max_dt is the maximum timestep, typically tout - tbegin // // we use rstate.yjm1 and rstate.yjm2 as internal storage @@ -109,18 +107,18 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // norm has the constant value dynrm. if (rstate.nsteps == 0) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.fn(i); } } else { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.sprad(i); } } Real ynrm{}; Real vnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ynrm += std::pow(rstate.yn(i), 2); vnrm += std::pow(rstate.yjm1(i), 2); } @@ -130,22 +128,22 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) Real dynrm{}; if (ynrm != 0.0_rt && vnrm != 0.0_rt) { dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * (dynrm / vnrm); } } else if (ynrm != 0.0_rt) { dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); } } else if (vnrm != 0.0_rt) { dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yjm1(i) * (dynrm / vnrm); } } else { dynrm = UROUND; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = dynrm; } } @@ -160,17 +158,17 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // we want to call the RHS with yjm1() as the input, so we need to copy // this temporarily into vstate.y() RArray1D ysav; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { ysav(i) = rstate.y(i); rstate.y(i) = rstate.yjm1(i); } rhs(rstate.t, state, rstate, rstate.yjm2); - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.y(i) = ysav(i); } rstate.nfesig++; Real dfnrm{}; - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { dfnrm += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); } dfnrm = std::sqrt(dfnrm); @@ -184,7 +182,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) if (iter >= 1 && std::abs(sigma - sigmal) <= std::max(sigma, small) * 0.01_rt) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); } return sprad; @@ -194,7 +192,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // scaled so that norm(v - yn) = dynrm. if (dfnrm != 0.0_rt) { - for (int i = 1; i <= RKC_NEQS; ++i) { + for (int i = 1; i <= INT_NEQS; ++i) { rstate.yjm1(i) = rstate.yn(i) + (rstate.yjm2(i) - rstate.fn(i)) * (dynrm / dfnrm); } @@ -204,7 +202,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // current approximation to the eigenvector by changing // the sign of one component. - int index = 1 + (iter + 1) % RKC_NEQS; + int index = 1 + (iter + 1) % INT_NEQS; rstate.yjm1(index) = rstate.yn(index) - (rstate.yjm1(index) - rstate.yn(index)); } diff --git a/integration/ROCK/rock4.H b/integration/ROCK/rock4.H index d4444c6aab..8f8abed83f 100644 --- a/integration/ROCK/rock4.H +++ b/integration/ROCK/rock4.H @@ -1,7 +1,7 @@ #ifndef ROCK4_H #define ROCK4_H -#include +#include #include #ifdef STRANG #include @@ -16,7 +16,7 @@ #include AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mdegre(rock4_t& rstate) +void mdegre(rock_t& rstate) { constexpr amrex::Array1D ms = { @@ -49,7 +49,7 @@ void mdegre(rock4_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rfstep (BurnT& state, rock4_t& rstate) +Real rfstep (BurnT& state, rock_t& rstate) { // Solut. at t+h by an explicit (mdeg+4)-stages formula. @@ -59,7 +59,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) // First stage - Real temp1 = rstate.h * recf(mr); + Real temp1 = rstate.h * rock4_coeffs::recf(mr); Real ci1 = rstate.t + temp1; Real ci2 = rstate.t + temp1; Real ci3 = rstate.t; @@ -77,8 +77,8 @@ Real rfstep (BurnT& state, rock4_t& rstate) // Stage for j=2..mdeg. for (int i = 2; i <= rstate.mdeg; ++i) { - temp1 = rstate.h * recf(mr+2*(i-2)+1); - temp3 = -recf(mr+2*(i-2)+2); + temp1 = rstate.h * rock4_coeffs::recf(mr+2*(i-2)+1); + temp3 = -rock4_coeffs::recf(mr+2*(i-2)+2); temp2 = 1.0_rt - temp3; // we want to use rstate.yjm1 as input and store ydot in the original y // so we simply need to copy rstate.yjm1 to y here and use y_backup @@ -107,7 +107,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) // The finishing procedure (4-stage method) // stage 1 - temp1 = rstate.h * fpa(mz, 1); + temp1 = rstate.h * rock4_coeffs::fpa(mz, 1); rhs(ci1, state, rstate, rstate.yjm1); for (int j = 1; j <= INT_NEQS; ++j) { rstate.yjm3(j) = rstate.y(j) + temp1 * rstate.yjm1(j); @@ -115,8 +115,8 @@ Real rfstep (BurnT& state, rock4_t& rstate) // stage 2 ci2 = ci1 + temp1; - temp1 = rstate.h * fpa(mz,2); - temp2 = rstate.h * fpa(mz,3); + temp1 = rstate.h * rock4_coeffs::fpa(mz,2); + temp2 = rstate.h * rock4_coeffs::fpa(mz,3); // call the RHS with yjm3 as input and store the output in yjm2 for (int i = 1; i <= INT_NEQS; ++i) { @@ -134,9 +134,9 @@ Real rfstep (BurnT& state, rock4_t& rstate) // stage 3 ci2 = ci1 + temp1 + temp2; - temp1 = rstate.h * fpa(mz,4); - temp2 = rstate.h * fpa(mz,5); - temp3 = rstate.h * fpa(mz,6); + temp1 = rstate.h * rock4_coeffs::fpa(mz,4); + temp2 = rstate.h * rock4_coeffs::fpa(mz,5); + temp3 = rstate.h * rock4_coeffs::fpa(mz,6); // call the RHS with yjm4 as input and store the output in yjm3 for (int i = 1; i <= INT_NEQS; ++i) { @@ -154,10 +154,10 @@ Real rfstep (BurnT& state, rock4_t& rstate) // stage 4 ci2 = ci1 + temp1 + temp2 + temp3; - temp1 = rstate.h * fpb(mz,1); - temp2 = rstate.h * fpb(mz,2); - temp3 = rstate.h * fpb(mz,3); - temp4 = rstate.h * fpb(mz,4); + temp1 = rstate.h * rock4_coeffs::fpb(mz,1); + temp2 = rstate.h * rock4_coeffs::fpb(mz,2); + temp3 = rstate.h * rock4_coeffs::fpb(mz,3); + temp4 = rstate.h * rock4_coeffs::fpb(mz,4); // call the RHS with fnt as the input and store the output in yjm4 for (int i = 1; i <= INT_NEQS; ++i) { @@ -175,11 +175,11 @@ Real rfstep (BurnT& state, rock4_t& rstate) } // Error evaluation (embedded method of order 3). - temp1 = rstate.h * fpbe(mz,1) - temp1; - temp2 = rstate.h * fpbe(mz,2) - temp2; - temp3 = rstate.h * fpbe(mz,3) - temp3; - temp4 = rstate.h * fpbe(mz,4) - temp4; - temp5 = rstate.h * fpbe(mz,5); + temp1 = rstate.h * rock4_coeffs::fpbe(mz,1) - temp1; + temp2 = rstate.h * rock4_coeffs::fpbe(mz,2) - temp2; + temp3 = rstate.h * rock4_coeffs::fpbe(mz,3) - temp3; + temp4 = rstate.h * rock4_coeffs::fpbe(mz,4) - temp4; + temp5 = rstate.h * rock4_coeffs::fpbe(mz,5); rhs(rstate.t + rstate.h, state, rstate, rstate.fnt); @@ -209,7 +209,7 @@ Real rfstep (BurnT& state, rock4_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rockfrho (BurnT& state, rock4_t& rstate) +Real rockfrho (BurnT& state, rock_t& rstate) { @@ -368,7 +368,7 @@ Real rockfrho (BurnT& state, rock4_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rockfcore (BurnT& state, rock4_t& rstate) +int rockfcore (BurnT& state, rock_t& rstate) { // Core integrator for ROCK4. @@ -541,7 +541,7 @@ int rockfcore (BurnT& state, rock4_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rock4 (BurnT& state, rock4_t& rstate) +int rock4 (BurnT& state, rock_t& rstate) { const Real rmax = 0.1_rt; @@ -556,10 +556,10 @@ int rock4 (BurnT& state, rock4_t& rstate) rhs(rstate.t, state, rstate, rstate.fn); - Real sprad = rkcrho(state, rstate, rstate.tend); + Real sprad = rkcrho(state, rstate, rstate.tout); //rstate.h = initial_dt(state, rstate, rstate.fn); - rstate.h = rkc_init_dt(state, rstate, rstate.tend, sprad); + rstate.h = rkc_init_dt(state, rstate, rstate.tout, sprad); std::cout << "initial timestep = " << rstate.h << std::endl; diff --git a/integration/ROCK/rock4_coefficients.H b/integration/ROCK/rock4_coefficients.H index 824c21dc39..21634961e3 100644 --- a/integration/ROCK/rock4_coefficients.H +++ b/integration/ROCK/rock4_coefficients.H @@ -3,1746 +3,1748 @@ // Parameters of the finishing procedure -inline AMREX_GPU_MANAGED amrex::Array2D fpa{ - // rows 1-9 - -.149352078672699e+00, 0.629768962985252e+00, -.355201061573650e+00, - 0.146745996307541e-01, -.558517281602565e-01, 0.590312931352706e+00, - -.179313593132677e+00, 0.522354978881996e+00, -.268020263243268e+00, - 0.410644459848542e-01, -.673692676033641e-01, 0.534974252895965e+00, - -.182428104178289e+00, 0.488581974232839e+00, -.243999027372673e+00, - 0.403844469216897e-01, -.621100542563179e-01, 0.510891501054959e+00, - -.177747282156689e+00, 0.475598890858970e+00, -.236544145857569e+00, - 0.357873367680739e-01, -.561802405454197e-01, 0.498502393780149e+00, - -.171097214294784e+00, 0.471021380996139e+00, -.235432301175529e+00, - 0.305165148305403e-01, -.508758913107147e-01, 0.491537536121394e+00, - -.164446145110292e+00, 0.470315341552133e+00, -.237054736024656e+00, - 0.253636332272387e-01, -.462365759807733e-01, 0.487394153808489e+00, - -.158427655171257e+00, 0.471468878620055e+00, -.239853802450812e+00, - 0.205746749952032e-01, -.421744356707249e-01, 0.484829913014008e+00, - -.153293058075572e+00, 0.473282079177035e+00, -.242910850765406e+00, - 0.163722321103915e-01, -.387108095861697e-01, 0.483081034299037e+00, - -.148972804305139e+00, 0.475296959544537e+00, -.245899260153289e+00, - 0.127203010191100e-01, -.357508839759137e-01, 0.481825981739298e+00, - // rows 10-18 - -.145179937599982e+00, 0.477661231491125e+00, -.248988404183759e+00, - 0.930730703798092e-02, -.330359105371527e-01, 0.481074258113903e+00, - -.141803779162182e+00, 0.480294472251598e+00, -.252149638985389e+00, - 0.605980548716020e-02, -.304878190339923e-01, 0.480717680079251e+00, - -.139121943562170e+00, 0.482307569354585e+00, -.254656989245024e+00, - 0.349723479360248e-02, -.284636204606306e-01, 0.480267545886151e+00, - -.136626653539895e+00, 0.484641896383759e+00, -.257332057712838e+00, - 0.915869293860006e-03, -.264509129364182e-01, 0.480154720984400e+00, - -.134486447576714e+00, 0.486757723660692e+00, -.259733624852103e+00, - -.135988997170157e-02, -.246765061257936e-01, 0.480084593714673e+00, - -.132780674018083e+00, 0.488321952587049e+00, -.261588769418801e+00, - -.313701049350723e-02, -.232786280695929e-01, 0.479882004899598e+00, - -.131117609799413e+00, 0.490193639754613e+00, -.263646432339284e+00, - -.502134729674226e-02, -.218133033112692e-01, 0.479929065438669e+00, - -.129737943206222e+00, 0.491700319201409e+00, -.265337954300747e+00, - -.657602712355092e-02, -.205977998576123e-01, 0.479898556782486e+00, - -.128546948141681e+00, 0.493011323225514e+00, -.266816177922376e+00, - -.793004771706004e-02, -.195369613099883e-01, 0.479857299633325e+00, - // rows 19-27 - -.127460377104448e+00, 0.494293149884316e+00, -.268231271325724e+00, - -.920717061172173e-02, -.185386009080156e-01, 0.479869528636923e+00, - -.126496410155342e+00, 0.495458691659965e+00, -.269513232370108e+00, - -.103575442717928e-01, -.176387115527810e-01, 0.479887174404288e+00, - -.124868416118615e+00, 0.497490597051425e+00, -.271737391165211e+00, - -.123394260182449e-01, -.160868868427959e-01, 0.479932724633469e+00, - -.123564405510046e+00, 0.499164732520327e+00, -.273565616640958e+00, - -.139585436258901e-01, -.148169722656038e-01, 0.479973747650230e+00, - -.122505008329286e+00, 0.500555383947992e+00, -.275081797679137e+00, - -.152951780850662e-01, -.137670777523960e-01, 0.480009428375171e+00, - -.121640329449530e+00, 0.501700402349954e+00, -.276333007672789e+00, - -.163961730000813e-01, -.129007107727469e-01, 0.480031673127157e+00, - -.120917917691482e+00, 0.502675119491259e+00, -.277395466055127e+00, - -.173277807640047e-01, -.121670308408281e-01, 0.480054118477096e+00, - -.120710248396632e+00, 0.502361065588637e+00, -.277299180400763e+00, - -.173459597107178e-01, -.121268146405534e-01, 0.479596544727020e+00, - -.120151946726542e+00, 0.503187463625006e+00, -.278173489088946e+00, - -.180998664145073e-01, -.115355117518033e-01, 0.479663327238431e+00, - // rows 28-36 - -.119650804512964e+00, 0.503968844736113e+00, -.278987558251327e+00, - -.187954561730573e-01, -.109907774512063e-01, 0.479748806593835e+00, - -.119231690274109e+00, 0.504610327555198e+00, -.279662019452110e+00, - -.193736976241804e-01, -.105368584242475e-01, 0.479807172254604e+00, - -.118685223311611e+00, 0.505479309944796e+00, -.280566027535941e+00, - -.201436607277488e-01, -.993291024114479e-02, 0.479903135786603e+00, - -.118231796286135e+00, 0.506213890671776e+00, -.281327499307895e+00, - -.207902381330527e-01, -.942553811892237e-02, 0.479988558979737e+00, - -.117860168810132e+00, 0.506813986559461e+00, -.281951733666353e+00, - -.213206692268858e-01, -.900871675159034e-02, 0.480053891764692e+00, - -.117541632407920e+00, 0.507340547092223e+00, -.282496164808253e+00, - -.217814864430309e-01, -.864670120809640e-02, 0.480116952219068e+00, - -.117280791290490e+00, 0.507762024730383e+00, -.282936101835780e+00, - -.221553810871189e-01, -.835235476491614e-02, 0.480159581641243e+00, - -.117020809344219e+00, 0.508234853606851e+00, -.283411245544839e+00, - -.225511383509412e-01, -.804255449961079e-02, 0.480240908974576e+00, - -.116840110106662e+00, 0.508513931927332e+00, -.283708061860511e+00, - -.228054436800931e-01, -.784157438541911e-02, 0.480258758199155e+00, - // rows 37-45 - -.116999141776097e+00, 0.507738965363869e+00, -.283085550597818e+00, - -.223557928014705e-01, -.817646181729438e-02, 0.479839084150866e+00, - -.116787474223622e+00, 0.508124510062097e+00, -.283473179991593e+00, - -.226786360708563e-01, -.792370493215401e-02, 0.479905001144018e+00, - -.116543053242319e+00, 0.508649023059358e+00, -.283975543942050e+00, - -.230858609767789e-01, -.760742817737876e-02, 0.480040247388773e+00, - -.116369877848172e+00, 0.508950670881779e+00, -.284284071372858e+00, - -.233448484372084e-01, -.740387836067644e-02, 0.480081925815726e+00, - -.115981831952477e+00, 0.509942937789055e+00, -.285192892337194e+00, - -.240615204888854e-01, -.685134671736066e-02, 0.480412958109969e+00, - -.115934409239879e+00, 0.509932625794726e+00, -.285214065725890e+00, - -.240929036649298e-01, -.682325905888604e-02, 0.480353282861487e+00, - -.114543930853965e+00, 0.514055666969259e+00, -.288877128663596e+00, - -.269187182378037e-01, -.465261555222027e-02, 0.481928410401348e+00, - -.114338190892959e+00, 0.514568129329710e+00, -.289354467784058e+00, - -.272970253684862e-01, -.435838305221696e-02, 0.482082731512007e+00, - -.113900806706479e+00, 0.515815247278763e+00, -.290479621681517e+00, - -.281706242269155e-01, -.368286974902504e-02, 0.482524745170433e+00, - // rows 46-50 - -.114241230745559e+00, 0.514642605930859e+00, -.289464730587169e+00, - -.274037778296787e-01, -.427016797791793e-02, 0.482029696494976e+00, - -.113830853818569e+00, 0.515834254672657e+00, -.290535565769687e+00, - -.282330735764243e-01, -.362939602828681e-02, 0.482459847410651e+00, - -.113105039346215e+00, 0.518047629039909e+00, -.292508542364670e+00, - -.297505373346793e-01, -.245703714012197e-02, 0.483285747825278e+00, - -.113373695071906e+00, 0.517118156325443e+00, -.291701320745508e+00, - -.291406743553601e-01, -.292560575875699e-02, 0.482899951273987e+00, - -.112938370080633e+00, 0.518440212713205e+00, -.292882869228272e+00, - -.300502325911247e-01, -.222188377341845e-02, 0.483386803334408e+00}; +namespace rock4_coeffs { -inline AMREX_GPU_MANAGED amrex::Array2D fpb{ - // rows 1-12 - 0.934502625489809e+00, -.426556402801135e+00, -.428612609028723e+00, 0.744370090574855e+00, - 0.727428506710284e+00, -.281882500610754e+00, -.366883181811475e+00, 0.684341322628128e+00, - 0.671969568061243e+00, -.247327027296030e+00, -.348410422675722e+00, 0.657516722491004e+00, - 0.655616700297981e+00, -.238808679740035e+00, -.342918097601918e+00, 0.643274312048176e+00, - 0.653766630051757e+00, -.239717659625342e+00, -.342124625373560e+00, 0.634842894408973e+00, - 0.657958401550080e+00, -.244504571310874e+00, -.343125007747822e+00, 0.629452994091047e+00, - 0.664644828327504e+00, -.250836131475691e+00, -.344767760715637e+00, 0.625804292371554e+00, - 0.671778926897883e+00, -.257341094888494e+00, -.346437936729090e+00, 0.623113789954589e+00, - 0.678662206121957e+00, -.263538563990534e+00, -.347971227180309e+00, 0.621040683222628e+00, - 0.685711960310753e+00, -.269724027269246e+00, -.349535907736682e+00, 0.619566456617273e+00, - 0.692884607363355e+00, -.275886628173354e+00, -.351131980732774e+00, 0.618568501341401e+00, - 0.698546656891454e+00, -.280881006247969e+00, -.352285102713857e+00, 0.617571192399056e+00, - // rows 13-24 - 0.704573921792281e+00, -.286045457291729e+00, -.353563979295968e+00, 0.616965030808178e+00, - 0.709971428905986e+00, -.290682008221983e+00, -.354679184547433e+00, 0.616462060289197e+00, - 0.714125178664410e+00, -.294349691347616e+00, -.355464510591820e+00, 0.615888572779772e+00, - 0.718736274563484e+00, -.298288036358834e+00, -.356401512165052e+00, 0.615594896206387e+00, - 0.722517387767685e+00, -.301568462204942e+00, -.357129478686764e+00, 0.615267647826005e+00, - 0.725816343813274e+00, -.304448113195281e+00, -.357746756688570e+00, 0.614963961979991e+00, - 0.728974076820863e+00, -.307182320589777e+00, -.358345483491417e+00, 0.614739362936109e+00, - 0.731832397913825e+00, -.309659464712225e+00, -.358881456195461e+00, 0.614544900863432e+00, - 0.736786729484850e+00, -.313957288328657e+00, -.359797924432667e+00, 0.614228100935116e+00, - 0.740854099130286e+00, -.317495426161459e+00, -.360535121685962e+00, 0.613973796355241e+00, - 0.744223896195403e+00, -.320433632193417e+00, -.361135560093482e+00, 0.613766054898060e+00, - 0.747001832700433e+00, -.322865419691933e+00, -.361620350229670e+00, 0.613586121252665e+00, - // rows 25-36 - 0.749359431920161e+00, -.324930741701897e+00, -.362028107948934e+00, 0.613438378039065e+00, - 0.749100998320598e+00, -.324985993239383e+00, -.361796607662197e+00, 0.612867258144605e+00, - 0.751043873200700e+00, -.326661586308774e+00, -.362147816931696e+00, 0.612807453647952e+00, - 0.752854624396087e+00, -.328210433831008e+00, -.362482431451812e+00, 0.612782100341090e+00, - 0.754353169889782e+00, -.329501139703409e+00, -.362752509396770e+00, 0.612745403519662e+00, - 0.756363017447499e+00, -.331222786188901e+00, -.363119850550614e+00, 0.612719466518580e+00, - 0.758055963580132e+00, -.332671506824595e+00, -.363429198770158e+00, 0.612703916106263e+00, - 0.759443004727975e+00, -.333862330033422e+00, -.363679324780792e+00, 0.612685408765563e+00, - 0.760653160327002e+00, -.334898139570366e+00, -.363899175365336e+00, 0.612677301460611e+00, - 0.761629956010211e+00, -.335739950284413e+00, -.364072376423153e+00, 0.612660139381166e+00, - 0.762688789887627e+00, -.336630474589357e+00, -.364274785126092e+00, 0.612687294013859e+00, - 0.763346400554849e+00, -.337204680067583e+00, -.364385896133756e+00, 0.612661785846953e+00, - // rows 37-48 - 0.761923304846226e+00, -.336206156720779e+00, -.363978603432088e+00, 0.612221699604794e+00, - 0.762786806785331e+00, -.336933071907623e+00, -.364142956905108e+00, 0.612243212238912e+00, - 0.763911644345184e+00, -.337848624997397e+00, -.364378249037553e+00, 0.612335667041690e+00, - 0.764597562248984e+00, -.338433363367646e+00, -.364503441229143e+00, 0.612339040874567e+00, - 0.766642781170500e+00, -.340044276021276e+00, -.364967251951014e+00, 0.612618883157375e+00, - 0.766682555493412e+00, -.340118220148353e+00, -.364946973037536e+00, 0.612538317898983e+00, - 0.774955438746513e+00, -.346489297090328e+00, -.366916081411072e+00, 0.613985554671875e+00, - 0.776027351639685e+00, -.347348043660042e+00, -.367147411126057e+00, 0.614109087783370e+00, - 0.778563137974742e+00, -.349330512988104e+00, -.367727843519890e+00, 0.614502095324990e+00, - 0.776264664166250e+00, -.347594735539935e+00, -.367159451116240e+00, 0.614023148520995e+00, - 0.778679038214519e+00, -.349476481579656e+00, -.367715953710640e+00, 0.614409463784688e+00, - 0.783131247138323e+00, -.352927933064792e+00, -.368752741091226e+00, 0.615166687043411e+00, - // rows 49-50 - 0.781304104495501e+00, -.351541585232233e+00, -.368306700790280e+00, 0.614794688266817e+00, - 0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}; + inline AMREX_GPU_MANAGED amrex::Array2D fpa{ + // rows 1-9 + -.149352078672699e+00, 0.629768962985252e+00, -.355201061573650e+00, + 0.146745996307541e-01, -.558517281602565e-01, 0.590312931352706e+00, + -.179313593132677e+00, 0.522354978881996e+00, -.268020263243268e+00, + 0.410644459848542e-01, -.673692676033641e-01, 0.534974252895965e+00, + -.182428104178289e+00, 0.488581974232839e+00, -.243999027372673e+00, + 0.403844469216897e-01, -.621100542563179e-01, 0.510891501054959e+00, + -.177747282156689e+00, 0.475598890858970e+00, -.236544145857569e+00, + 0.357873367680739e-01, -.561802405454197e-01, 0.498502393780149e+00, + -.171097214294784e+00, 0.471021380996139e+00, -.235432301175529e+00, + 0.305165148305403e-01, -.508758913107147e-01, 0.491537536121394e+00, + -.164446145110292e+00, 0.470315341552133e+00, -.237054736024656e+00, + 0.253636332272387e-01, -.462365759807733e-01, 0.487394153808489e+00, + -.158427655171257e+00, 0.471468878620055e+00, -.239853802450812e+00, + 0.205746749952032e-01, -.421744356707249e-01, 0.484829913014008e+00, + -.153293058075572e+00, 0.473282079177035e+00, -.242910850765406e+00, + 0.163722321103915e-01, -.387108095861697e-01, 0.483081034299037e+00, + -.148972804305139e+00, 0.475296959544537e+00, -.245899260153289e+00, + 0.127203010191100e-01, -.357508839759137e-01, 0.481825981739298e+00, + // rows 10-18 + -.145179937599982e+00, 0.477661231491125e+00, -.248988404183759e+00, + 0.930730703798092e-02, -.330359105371527e-01, 0.481074258113903e+00, + -.141803779162182e+00, 0.480294472251598e+00, -.252149638985389e+00, + 0.605980548716020e-02, -.304878190339923e-01, 0.480717680079251e+00, + -.139121943562170e+00, 0.482307569354585e+00, -.254656989245024e+00, + 0.349723479360248e-02, -.284636204606306e-01, 0.480267545886151e+00, + -.136626653539895e+00, 0.484641896383759e+00, -.257332057712838e+00, + 0.915869293860006e-03, -.264509129364182e-01, 0.480154720984400e+00, + -.134486447576714e+00, 0.486757723660692e+00, -.259733624852103e+00, + -.135988997170157e-02, -.246765061257936e-01, 0.480084593714673e+00, + -.132780674018083e+00, 0.488321952587049e+00, -.261588769418801e+00, + -.313701049350723e-02, -.232786280695929e-01, 0.479882004899598e+00, + -.131117609799413e+00, 0.490193639754613e+00, -.263646432339284e+00, + -.502134729674226e-02, -.218133033112692e-01, 0.479929065438669e+00, + -.129737943206222e+00, 0.491700319201409e+00, -.265337954300747e+00, + -.657602712355092e-02, -.205977998576123e-01, 0.479898556782486e+00, + -.128546948141681e+00, 0.493011323225514e+00, -.266816177922376e+00, + -.793004771706004e-02, -.195369613099883e-01, 0.479857299633325e+00, + // rows 19-27 + -.127460377104448e+00, 0.494293149884316e+00, -.268231271325724e+00, + -.920717061172173e-02, -.185386009080156e-01, 0.479869528636923e+00, + -.126496410155342e+00, 0.495458691659965e+00, -.269513232370108e+00, + -.103575442717928e-01, -.176387115527810e-01, 0.479887174404288e+00, + -.124868416118615e+00, 0.497490597051425e+00, -.271737391165211e+00, + -.123394260182449e-01, -.160868868427959e-01, 0.479932724633469e+00, + -.123564405510046e+00, 0.499164732520327e+00, -.273565616640958e+00, + -.139585436258901e-01, -.148169722656038e-01, 0.479973747650230e+00, + -.122505008329286e+00, 0.500555383947992e+00, -.275081797679137e+00, + -.152951780850662e-01, -.137670777523960e-01, 0.480009428375171e+00, + -.121640329449530e+00, 0.501700402349954e+00, -.276333007672789e+00, + -.163961730000813e-01, -.129007107727469e-01, 0.480031673127157e+00, + -.120917917691482e+00, 0.502675119491259e+00, -.277395466055127e+00, + -.173277807640047e-01, -.121670308408281e-01, 0.480054118477096e+00, + -.120710248396632e+00, 0.502361065588637e+00, -.277299180400763e+00, + -.173459597107178e-01, -.121268146405534e-01, 0.479596544727020e+00, + -.120151946726542e+00, 0.503187463625006e+00, -.278173489088946e+00, + -.180998664145073e-01, -.115355117518033e-01, 0.479663327238431e+00, + // rows 28-36 + -.119650804512964e+00, 0.503968844736113e+00, -.278987558251327e+00, + -.187954561730573e-01, -.109907774512063e-01, 0.479748806593835e+00, + -.119231690274109e+00, 0.504610327555198e+00, -.279662019452110e+00, + -.193736976241804e-01, -.105368584242475e-01, 0.479807172254604e+00, + -.118685223311611e+00, 0.505479309944796e+00, -.280566027535941e+00, + -.201436607277488e-01, -.993291024114479e-02, 0.479903135786603e+00, + -.118231796286135e+00, 0.506213890671776e+00, -.281327499307895e+00, + -.207902381330527e-01, -.942553811892237e-02, 0.479988558979737e+00, + -.117860168810132e+00, 0.506813986559461e+00, -.281951733666353e+00, + -.213206692268858e-01, -.900871675159034e-02, 0.480053891764692e+00, + -.117541632407920e+00, 0.507340547092223e+00, -.282496164808253e+00, + -.217814864430309e-01, -.864670120809640e-02, 0.480116952219068e+00, + -.117280791290490e+00, 0.507762024730383e+00, -.282936101835780e+00, + -.221553810871189e-01, -.835235476491614e-02, 0.480159581641243e+00, + -.117020809344219e+00, 0.508234853606851e+00, -.283411245544839e+00, + -.225511383509412e-01, -.804255449961079e-02, 0.480240908974576e+00, + -.116840110106662e+00, 0.508513931927332e+00, -.283708061860511e+00, + -.228054436800931e-01, -.784157438541911e-02, 0.480258758199155e+00, + // rows 37-45 + -.116999141776097e+00, 0.507738965363869e+00, -.283085550597818e+00, + -.223557928014705e-01, -.817646181729438e-02, 0.479839084150866e+00, + -.116787474223622e+00, 0.508124510062097e+00, -.283473179991593e+00, + -.226786360708563e-01, -.792370493215401e-02, 0.479905001144018e+00, + -.116543053242319e+00, 0.508649023059358e+00, -.283975543942050e+00, + -.230858609767789e-01, -.760742817737876e-02, 0.480040247388773e+00, + -.116369877848172e+00, 0.508950670881779e+00, -.284284071372858e+00, + -.233448484372084e-01, -.740387836067644e-02, 0.480081925815726e+00, + -.115981831952477e+00, 0.509942937789055e+00, -.285192892337194e+00, + -.240615204888854e-01, -.685134671736066e-02, 0.480412958109969e+00, + -.115934409239879e+00, 0.509932625794726e+00, -.285214065725890e+00, + -.240929036649298e-01, -.682325905888604e-02, 0.480353282861487e+00, + -.114543930853965e+00, 0.514055666969259e+00, -.288877128663596e+00, + -.269187182378037e-01, -.465261555222027e-02, 0.481928410401348e+00, + -.114338190892959e+00, 0.514568129329710e+00, -.289354467784058e+00, + -.272970253684862e-01, -.435838305221696e-02, 0.482082731512007e+00, + -.113900806706479e+00, 0.515815247278763e+00, -.290479621681517e+00, + -.281706242269155e-01, -.368286974902504e-02, 0.482524745170433e+00, + // rows 46-50 + -.114241230745559e+00, 0.514642605930859e+00, -.289464730587169e+00, + -.274037778296787e-01, -.427016797791793e-02, 0.482029696494976e+00, + -.113830853818569e+00, 0.515834254672657e+00, -.290535565769687e+00, + -.282330735764243e-01, -.362939602828681e-02, 0.482459847410651e+00, + -.113105039346215e+00, 0.518047629039909e+00, -.292508542364670e+00, + -.297505373346793e-01, -.245703714012197e-02, 0.483285747825278e+00, + -.113373695071906e+00, 0.517118156325443e+00, -.291701320745508e+00, + -.291406743553601e-01, -.292560575875699e-02, 0.482899951273987e+00, + -.112938370080633e+00, 0.518440212713205e+00, -.292882869228272e+00, + -.300502325911247e-01, -.222188377341845e-02, 0.483386803334408e+00}; -inline AMREX_GPU_MANAGED amrex::Array2D fpbe{ - // rows 1-9 - 0.113509972110540e+01, -.584333360989720e+00, -.319172911177732e+00, 0.482853558185876e+00, 0.109256697110981e+00, - 0.100479199674788e+01, -.436644602461537e+00, -.423443966877378e+00, 0.538770645909717e+00, 0.795300735974956e-01, - 0.984907410167693e+00, -.403297625005343e+00, -.485090625106059e+00, 0.576309835350610e+00, 0.609198451735942e-01, - 0.980171201303714e+00, -.394437889689979e+00, -.517381582925487e+00, 0.601142288908999e+00, 0.476702174069568e-01, - 0.974834695776200e+00, -.392308952799017e+00, -.530263724070033e+00, 0.616510618632796e+00, 0.379946019218839e-01, - 0.966668353329992e+00, -.391741144639394e+00, -.531455776704021e+00, 0.625494551194751e+00, 0.308158334011040e-01, - 0.956319747720222e+00, -.391138376736994e+00, -.526142643689543e+00, 0.630404554467362e+00, 0.254019467466823e-01, - 0.943587787064690e+00, -.389377300510789e+00, -.516876350192269e+00, 0.632531861517858e+00, 0.212476873553974e-01, - 0.929868441621807e+00, -.386750527439590e+00, -.505935645060380e+00, 0.633001592986906e+00, 0.180092360649997e-01, - // rows 10-18 - 0.917878947092234e+00, -.384686528119553e+00, -.495511556683115e+00, 0.632891756120139e+00, 0.154458635123923e-01, - 0.907921031017813e+00, -.383354597608536e+00, -.486086276370317e+00, 0.632568615019003e+00, 0.133857277406643e-01, - 0.896388476009400e+00, -.380504535913835e+00, -.476131894672218e+00, 0.631491892380436e+00, 0.117078025249012e-01, - 0.887685870010584e+00, -.378944197433540e+00, -.467828653690999e+00, 0.630692391160778e+00, 0.103241059659401e-01, - 0.879470814062224e+00, -.377245094706344e+00, -.460102121012690e+00, 0.629778007382364e+00, 0.917069070021292e-02, - 0.870530751362587e+00, -.374648589005799e+00, -.452452352164561e+00, 0.628569291738020e+00, 0.820044757449899e-02, - 0.864018892596866e+00, -.373280954775127e+00, -.446202255714937e+00, 0.627730565946685e+00, 0.737537419249938e-02, - 0.857357924295629e+00, -.371485680656218e+00, -.440234425775788e+00, 0.626780133051391e+00, 0.666914378696866e-02, - 0.851096961215784e+00, -.369663988413454e+00, -.434754090977242e+00, 0.625846657124080e+00, 0.605989696024640e-02, - // rows 19-27 - 0.845691163494378e+00, -.368162878390094e+00, -.429905486466339e+00, 0.625032425385260e+00, 0.553041165257352e-02, - 0.840754783321373e+00, -.366754374490097e+00, -.425504080282415e+00, 0.624272520855683e+00, 0.506752846502820e-02, - 0.832129732678031e+00, -.364215201885908e+00, -.417868687835329e+00, 0.622912972095680e+00, 0.430080260616755e-02, - 0.824841358445432e+00, -.361969316759517e+00, -.411506554101034e+00, 0.621735648069777e+00, 0.369621198344728e-02, - 0.818660702021942e+00, -.359997706140366e+00, -.406173910081373e+00, 0.620720634622955e+00, 0.321103838340649e-02, - 0.813343156361523e+00, -.358234931076463e+00, -.401657773073081e+00, 0.619835953653306e+00, 0.281577816620828e-02, - 0.808812551334635e+00, -.356709737514645e+00, -.397829666549206e+00, 0.619076368359449e+00, 0.248944467816156e-02, - 0.802058241484851e+00, -.353305127983149e+00, -.393665858753007e+00, 0.617880189866334e+00, 0.221821094859412e-02, - 0.799023019885202e+00, -.352371068280062e+00, -.390970958156562e+00, 0.617372975124671e+00, 0.198795503493263e-02, - // rows 28-36 - 0.796533707522770e+00, -.351659214274525e+00, -.388680577600314e+00, 0.616958145987822e+00, 0.179179781860265e-02, - 0.794254415802991e+00, -.350955011234794e+00, -.386652430547127e+00, 0.616574541234043e+00, 0.162340905415174e-02, - 0.791451974069317e+00, -.350127723737597e+00, -.384099751306937e+00, 0.616103218945433e+00, 0.141212925634866e-02, - 0.789140296939903e+00, -.349447391105024e+00, -.381986708309451e+00, 0.615713343205178e+00, 0.123963336103694e-02, - 0.787155036742462e+00, -.348839107260454e+00, -.380202863720354e+00, 0.615376708082511e+00, 0.109698483515876e-02, - 0.785509443687073e+00, -.348347728366112e+00, -.378703894403193e+00, 0.615097681507449e+00, 0.977644426693831e-03, - 0.784038223206202e+00, -.347876842227869e+00, -.377407083344177e+00, 0.614846655967241e+00, 0.876815082414696e-03, - 0.783010378301710e+00, -.347648245486129e+00, -.376356876713355e+00, 0.614674780335034e+00, 0.790787748777402e-03, - 0.781833266343420e+00, -.347234482878725e+00, -.375370253527294e+00, 0.614472179428255e+00, 0.716900834807566e-03, - // rows 37-45 - 0.778157258445688e+00, -.345006104027160e+00, -.373629716648469e+00, 0.613804905745683e+00, 0.633900782409020e-03, - 0.777300034873279e+00, -.344806720424309e+00, -.372764739426396e+00, 0.613661241678936e+00, 0.564173510000384e-03, - 0.776985336763925e+00, -.344948310351192e+00, -.372138199888685e+00, 0.613616309802328e+00, 0.505301025547597e-03, - 0.776123576908821e+00, -.344696744011525e+00, -.371340582024658e+00, 0.613469644712914e+00, 0.443902941209962e-03, - 0.776949282583553e+00, -.345654199916775e+00, -.371072531043118e+00, 0.613634699306968e+00, 0.392885424956897e-03, - 0.775876610212432e+00, -.345123309087147e+00, -.370392356339381e+00, 0.613444359409516e+00, 0.350376011087039e-03, - 0.783347589653809e+00, -.351086251339795e+00, -.371860974551612e+00, 0.614828131953302e+00, 0.307119201283797e-03, - 0.783496656673086e+00, -.351443051706240e+00, -.371545102252444e+00, 0.614860564019234e+00, 0.271917903319380e-03, - 0.785178130625954e+00, -.352964147655529e+00, -.371615967722576e+00, 0.615170969674100e+00, 0.237891869788885e-03, - // rows 46-50 - 0.782045229930799e+00, -.350764936286095e+00, -.370561648626977e+00, 0.614604810918108e+00, 0.210170095234033e-03, - 0.783792445229447e+00, -.352285904984906e+00, -.370720709266521e+00, 0.614926468923107e+00, 0.183766807783551e-03, - 0.787664243592327e+00, -.355426631067992e+00, -.371408773264980e+00, 0.615628921926696e+00, 0.159498839664580e-03, - 0.785248632105467e+00, -.353713152595833e+00, -.370620439974436e+00, 0.615195478568662e+00, 0.139988635943928e-03, - 0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}; + inline AMREX_GPU_MANAGED amrex::Array2D fpb{ + // rows 1-12 + 0.934502625489809e+00, -.426556402801135e+00, -.428612609028723e+00, 0.744370090574855e+00, + 0.727428506710284e+00, -.281882500610754e+00, -.366883181811475e+00, 0.684341322628128e+00, + 0.671969568061243e+00, -.247327027296030e+00, -.348410422675722e+00, 0.657516722491004e+00, + 0.655616700297981e+00, -.238808679740035e+00, -.342918097601918e+00, 0.643274312048176e+00, + 0.653766630051757e+00, -.239717659625342e+00, -.342124625373560e+00, 0.634842894408973e+00, + 0.657958401550080e+00, -.244504571310874e+00, -.343125007747822e+00, 0.629452994091047e+00, + 0.664644828327504e+00, -.250836131475691e+00, -.344767760715637e+00, 0.625804292371554e+00, + 0.671778926897883e+00, -.257341094888494e+00, -.346437936729090e+00, 0.623113789954589e+00, + 0.678662206121957e+00, -.263538563990534e+00, -.347971227180309e+00, 0.621040683222628e+00, + 0.685711960310753e+00, -.269724027269246e+00, -.349535907736682e+00, 0.619566456617273e+00, + 0.692884607363355e+00, -.275886628173354e+00, -.351131980732774e+00, 0.618568501341401e+00, + 0.698546656891454e+00, -.280881006247969e+00, -.352285102713857e+00, 0.617571192399056e+00, + // rows 13-24 + 0.704573921792281e+00, -.286045457291729e+00, -.353563979295968e+00, 0.616965030808178e+00, + 0.709971428905986e+00, -.290682008221983e+00, -.354679184547433e+00, 0.616462060289197e+00, + 0.714125178664410e+00, -.294349691347616e+00, -.355464510591820e+00, 0.615888572779772e+00, + 0.718736274563484e+00, -.298288036358834e+00, -.356401512165052e+00, 0.615594896206387e+00, + 0.722517387767685e+00, -.301568462204942e+00, -.357129478686764e+00, 0.615267647826005e+00, + 0.725816343813274e+00, -.304448113195281e+00, -.357746756688570e+00, 0.614963961979991e+00, + 0.728974076820863e+00, -.307182320589777e+00, -.358345483491417e+00, 0.614739362936109e+00, + 0.731832397913825e+00, -.309659464712225e+00, -.358881456195461e+00, 0.614544900863432e+00, + 0.736786729484850e+00, -.313957288328657e+00, -.359797924432667e+00, 0.614228100935116e+00, + 0.740854099130286e+00, -.317495426161459e+00, -.360535121685962e+00, 0.613973796355241e+00, + 0.744223896195403e+00, -.320433632193417e+00, -.361135560093482e+00, 0.613766054898060e+00, + 0.747001832700433e+00, -.322865419691933e+00, -.361620350229670e+00, 0.613586121252665e+00, + // rows 25-36 + 0.749359431920161e+00, -.324930741701897e+00, -.362028107948934e+00, 0.613438378039065e+00, + 0.749100998320598e+00, -.324985993239383e+00, -.361796607662197e+00, 0.612867258144605e+00, + 0.751043873200700e+00, -.326661586308774e+00, -.362147816931696e+00, 0.612807453647952e+00, + 0.752854624396087e+00, -.328210433831008e+00, -.362482431451812e+00, 0.612782100341090e+00, + 0.754353169889782e+00, -.329501139703409e+00, -.362752509396770e+00, 0.612745403519662e+00, + 0.756363017447499e+00, -.331222786188901e+00, -.363119850550614e+00, 0.612719466518580e+00, + 0.758055963580132e+00, -.332671506824595e+00, -.363429198770158e+00, 0.612703916106263e+00, + 0.759443004727975e+00, -.333862330033422e+00, -.363679324780792e+00, 0.612685408765563e+00, + 0.760653160327002e+00, -.334898139570366e+00, -.363899175365336e+00, 0.612677301460611e+00, + 0.761629956010211e+00, -.335739950284413e+00, -.364072376423153e+00, 0.612660139381166e+00, + 0.762688789887627e+00, -.336630474589357e+00, -.364274785126092e+00, 0.612687294013859e+00, + 0.763346400554849e+00, -.337204680067583e+00, -.364385896133756e+00, 0.612661785846953e+00, + // rows 37-48 + 0.761923304846226e+00, -.336206156720779e+00, -.363978603432088e+00, 0.612221699604794e+00, + 0.762786806785331e+00, -.336933071907623e+00, -.364142956905108e+00, 0.612243212238912e+00, + 0.763911644345184e+00, -.337848624997397e+00, -.364378249037553e+00, 0.612335667041690e+00, + 0.764597562248984e+00, -.338433363367646e+00, -.364503441229143e+00, 0.612339040874567e+00, + 0.766642781170500e+00, -.340044276021276e+00, -.364967251951014e+00, 0.612618883157375e+00, + 0.766682555493412e+00, -.340118220148353e+00, -.364946973037536e+00, 0.612538317898983e+00, + 0.774955438746513e+00, -.346489297090328e+00, -.366916081411072e+00, 0.613985554671875e+00, + 0.776027351639685e+00, -.347348043660042e+00, -.367147411126057e+00, 0.614109087783370e+00, + 0.778563137974742e+00, -.349330512988104e+00, -.367727843519890e+00, 0.614502095324990e+00, + 0.776264664166250e+00, -.347594735539935e+00, -.367159451116240e+00, 0.614023148520995e+00, + 0.778679038214519e+00, -.349476481579656e+00, -.367715953710640e+00, 0.614409463784688e+00, + 0.783131247138323e+00, -.352927933064792e+00, -.368752741091226e+00, 0.615166687043411e+00, + // rows 49-50 + 0.781304104495501e+00, -.351541585232233e+00, -.368306700790280e+00, 0.614794688266817e+00, + 0.783969323650751e+00, -.353613571196170e+00, -.368922535023076e+00, 0.615238813023293e+00}; + inline AMREX_GPU_MANAGED amrex::Array2D fpbe{ + // rows 1-9 + 0.113509972110540e+01, -.584333360989720e+00, -.319172911177732e+00, 0.482853558185876e+00, 0.109256697110981e+00, + 0.100479199674788e+01, -.436644602461537e+00, -.423443966877378e+00, 0.538770645909717e+00, 0.795300735974956e-01, + 0.984907410167693e+00, -.403297625005343e+00, -.485090625106059e+00, 0.576309835350610e+00, 0.609198451735942e-01, + 0.980171201303714e+00, -.394437889689979e+00, -.517381582925487e+00, 0.601142288908999e+00, 0.476702174069568e-01, + 0.974834695776200e+00, -.392308952799017e+00, -.530263724070033e+00, 0.616510618632796e+00, 0.379946019218839e-01, + 0.966668353329992e+00, -.391741144639394e+00, -.531455776704021e+00, 0.625494551194751e+00, 0.308158334011040e-01, + 0.956319747720222e+00, -.391138376736994e+00, -.526142643689543e+00, 0.630404554467362e+00, 0.254019467466823e-01, + 0.943587787064690e+00, -.389377300510789e+00, -.516876350192269e+00, 0.632531861517858e+00, 0.212476873553974e-01, + 0.929868441621807e+00, -.386750527439590e+00, -.505935645060380e+00, 0.633001592986906e+00, 0.180092360649997e-01, + // rows 10-18 + 0.917878947092234e+00, -.384686528119553e+00, -.495511556683115e+00, 0.632891756120139e+00, 0.154458635123923e-01, + 0.907921031017813e+00, -.383354597608536e+00, -.486086276370317e+00, 0.632568615019003e+00, 0.133857277406643e-01, + 0.896388476009400e+00, -.380504535913835e+00, -.476131894672218e+00, 0.631491892380436e+00, 0.117078025249012e-01, + 0.887685870010584e+00, -.378944197433540e+00, -.467828653690999e+00, 0.630692391160778e+00, 0.103241059659401e-01, + 0.879470814062224e+00, -.377245094706344e+00, -.460102121012690e+00, 0.629778007382364e+00, 0.917069070021292e-02, + 0.870530751362587e+00, -.374648589005799e+00, -.452452352164561e+00, 0.628569291738020e+00, 0.820044757449899e-02, + 0.864018892596866e+00, -.373280954775127e+00, -.446202255714937e+00, 0.627730565946685e+00, 0.737537419249938e-02, + 0.857357924295629e+00, -.371485680656218e+00, -.440234425775788e+00, 0.626780133051391e+00, 0.666914378696866e-02, + 0.851096961215784e+00, -.369663988413454e+00, -.434754090977242e+00, 0.625846657124080e+00, 0.605989696024640e-02, + // rows 19-27 + 0.845691163494378e+00, -.368162878390094e+00, -.429905486466339e+00, 0.625032425385260e+00, 0.553041165257352e-02, + 0.840754783321373e+00, -.366754374490097e+00, -.425504080282415e+00, 0.624272520855683e+00, 0.506752846502820e-02, + 0.832129732678031e+00, -.364215201885908e+00, -.417868687835329e+00, 0.622912972095680e+00, 0.430080260616755e-02, + 0.824841358445432e+00, -.361969316759517e+00, -.411506554101034e+00, 0.621735648069777e+00, 0.369621198344728e-02, + 0.818660702021942e+00, -.359997706140366e+00, -.406173910081373e+00, 0.620720634622955e+00, 0.321103838340649e-02, + 0.813343156361523e+00, -.358234931076463e+00, -.401657773073081e+00, 0.619835953653306e+00, 0.281577816620828e-02, + 0.808812551334635e+00, -.356709737514645e+00, -.397829666549206e+00, 0.619076368359449e+00, 0.248944467816156e-02, + 0.802058241484851e+00, -.353305127983149e+00, -.393665858753007e+00, 0.617880189866334e+00, 0.221821094859412e-02, + 0.799023019885202e+00, -.352371068280062e+00, -.390970958156562e+00, 0.617372975124671e+00, 0.198795503493263e-02, + // rows 28-36 + 0.796533707522770e+00, -.351659214274525e+00, -.388680577600314e+00, 0.616958145987822e+00, 0.179179781860265e-02, + 0.794254415802991e+00, -.350955011234794e+00, -.386652430547127e+00, 0.616574541234043e+00, 0.162340905415174e-02, + 0.791451974069317e+00, -.350127723737597e+00, -.384099751306937e+00, 0.616103218945433e+00, 0.141212925634866e-02, + 0.789140296939903e+00, -.349447391105024e+00, -.381986708309451e+00, 0.615713343205178e+00, 0.123963336103694e-02, + 0.787155036742462e+00, -.348839107260454e+00, -.380202863720354e+00, 0.615376708082511e+00, 0.109698483515876e-02, + 0.785509443687073e+00, -.348347728366112e+00, -.378703894403193e+00, 0.615097681507449e+00, 0.977644426693831e-03, + 0.784038223206202e+00, -.347876842227869e+00, -.377407083344177e+00, 0.614846655967241e+00, 0.876815082414696e-03, + 0.783010378301710e+00, -.347648245486129e+00, -.376356876713355e+00, 0.614674780335034e+00, 0.790787748777402e-03, + 0.781833266343420e+00, -.347234482878725e+00, -.375370253527294e+00, 0.614472179428255e+00, 0.716900834807566e-03, + // rows 37-45 + 0.778157258445688e+00, -.345006104027160e+00, -.373629716648469e+00, 0.613804905745683e+00, 0.633900782409020e-03, + 0.777300034873279e+00, -.344806720424309e+00, -.372764739426396e+00, 0.613661241678936e+00, 0.564173510000384e-03, + 0.776985336763925e+00, -.344948310351192e+00, -.372138199888685e+00, 0.613616309802328e+00, 0.505301025547597e-03, + 0.776123576908821e+00, -.344696744011525e+00, -.371340582024658e+00, 0.613469644712914e+00, 0.443902941209962e-03, + 0.776949282583553e+00, -.345654199916775e+00, -.371072531043118e+00, 0.613634699306968e+00, 0.392885424956897e-03, + 0.775876610212432e+00, -.345123309087147e+00, -.370392356339381e+00, 0.613444359409516e+00, 0.350376011087039e-03, + 0.783347589653809e+00, -.351086251339795e+00, -.371860974551612e+00, 0.614828131953302e+00, 0.307119201283797e-03, + 0.783496656673086e+00, -.351443051706240e+00, -.371545102252444e+00, 0.614860564019234e+00, 0.271917903319380e-03, + 0.785178130625954e+00, -.352964147655529e+00, -.371615967722576e+00, 0.615170969674100e+00, 0.237891869788885e-03, + // rows 46-50 + 0.782045229930799e+00, -.350764936286095e+00, -.370561648626977e+00, 0.614604810918108e+00, 0.210170095234033e-03, + 0.783792445229447e+00, -.352285904984906e+00, -.370720709266521e+00, 0.614926468923107e+00, 0.183766807783551e-03, + 0.787664243592327e+00, -.355426631067992e+00, -.371408773264980e+00, 0.615628921926696e+00, 0.159498839664580e-03, + 0.785248632105467e+00, -.353713152595833e+00, -.370620439974436e+00, 0.615195478568662e+00, 0.139988635943928e-03, + 0.787452369208138e+00, -.355534844520464e+00, -.370962019539811e+00, 0.615594462312992e+00, 0.122062993942758e-03}; -// Recurrence parameters -AMREX_GPU_MANAGED amrex::Array1D recf{ - .1762962957651941e+00, .1067131485543800e+00, - .1296319693918818e+00, .6097984609869632e-02, .7296375286357569e-01, - .8749824867149327e-01, .6126949805354446e-02, .1026802330400501e+00, - .3026744779900850e-01, .5345766591735225e-01, .6421114488497465e-01, - .6297251335072349e-02, .7361067001944596e-01, .2954244012876854e-01, - .8450213007949955e-01, .6370198138618569e-01, .4102541073974864e-01, - .4936734181284644e-01, .6437548414781547e-02, .5655964819916140e-01, - .3008674068005620e-01, .6301337991392047e-01, .6092514503458917e-01, - .7122116739390528e-01, .1014508394981259e+00, .3256098772501858e-01, - .3923994550846150e-01, .6548791582739922e-02, .4499511886194148e-01, - .3061034821432499e-01, .5000269311882022e-01, .6157339578289546e-01, - .5465516336291797e-01, .9570538881974760e-01, .6104333020232396e-01, - .1406290220864037e+00, .2651417777294218e-01, .3199100352247176e-01, - .6637416338030012e-02, .3671473048471728e-01, .3104646653985547e-01, - .4080808506561111e-01, .6240780397840483e-01, .4441697436286914e-01, - .9608256539833336e-01, .4790790953491602e-01, .1314940925346221e+00, - .5299225195731577e-01, .1795490141555294e+00, .2203688946407306e-01, - .2661454798174795e-01, .6708509073973803e-02, .3056730958573840e-01, - .3140468274131318e-01, .3399153986085689e-01, .6314347647488826e-01, - .3698314358022203e-01, - .9706950916624359e-01, .3966494820191785e-01, .1312524251550016e+00, - .4237605842481057e-01, .1670258610104497e+00, .4651311259978263e-01, - .2174924541420837e+00, .1862250741526137e-01, .2250861576538788e-01, - .6766202022280821e-02, .2586805882924489e-01, .3170042346032810e-01, - .2877953008086195e-01, .6376714023863055e-01, .3131867762450776e-01, - .9801783524123061e-01, .3355864056201850e-01, .1322218594416999e+00, - .3560688231225300e-01, .1658724905539629e+00, .3777371673577270e-01, - .2016177039517425e+00, .4119698781191684e-01, .2539572842035754e+00, - .1595000101933615e-01, .1929098080329146e-01, .6813771091892661e-02, - .2218226060548395e-01, .3194763050768121e-01, .2468951849041972e-01, - .6429708643843554e-01, .2687566748685502e-01, .9885398134767074e-01, - .2879687047315825e-01, .1332911334324939e+00, .3051024265050759e-01, - .1666672556601528e+00, .3211180339134084e-01, .1993212628717513e+00, - .3387840798530223e-01, .2348117800966209e+00, .3672204698847085e-01, - .2881723275817451e+00, .1381614369504127e-01, .1671925338932986e-01, - .6853396714797705e-02, .1923405366588467e-01, .3215586472031486e-01, - .2141625996563439e-01, .6474907548155117e-01, .2331937590115891e-01, - .9958008772514044e-01, .2499024766114432e-01, .1342748583683893e+00, - .2647050763871464e-01, - .1677665086248348e+00, .2780637354179997e-01, .1998070962536277e+00, - .2908398701850636e-01, .2312827828857880e+00, .3054428937166170e-01, - .2663434084812225e+00, .3290759457513454e-01, .3198421010321994e+00, - .1209208337462717e-01, .1463956211973881e-01, .6886319232429428e-02, - .1684821591214353e-01, .3233043835607318e-01, .1876598514920064e-01, - .6513176017688395e-01, .2043905166732186e-01, .1002021458157551e+00, - .2190770330626050e-01, .1351369448238108e+00, .2320633429617816e-01, - .1688220571485906e+00, .2436655982458731e-01, .2008416611727759e+00, - .2542750723914090e-01, .2313613787046680e+00, .2646792773501215e-01, - .2616749611549993e+00, .2769967463189309e-01, .2964076499426887e+00, - .2970440766084731e-01, .3502117812643117e+00, .1067034715302655e-01, - .1292329710584654e-01, .6914320860943588e-02, .1487812037525849e-01, - .3248006428304434e-01, .1657652594868420e-01, .6546254336130322e-01, - .1805880263820550e-01, .1007449363462607e+00, .1936010074490956e-01, - .1358990057232774e+00, .2051007922030995e-01, .1697855056821405e+00, - .2153416689781703e-01, .2019295372474008e+00, .2245709430196045e-01, - .2322718220467692e+00, .2331275056513504e-01, .2612402870437151e+00, - .2417201314765524e-01, .2904095866946978e+00, .2521646587374857e-01, - .3246308095620147e+00, - .2690764435467064e-01, .3778240223542354e+00, .9487431939295813e-02, - .1149440138138981e-01, .6938125808908258e-02, .1323700105262745e-01, - .3260808020167218e-01, .1475188210924817e-01, .6574755356940067e-01, - .1607452560476730e-01, .1012162270929412e+00, .1723591531771676e-01, - .1365667423922086e+00, .1826211676183441e-01, .1706429091716792e+00, - .1917496536345655e-01, .2029443389633356e+00, .1999362278384748e-01, - .2333350798953319e+00, .2073811037471499e-01, .2619641661449880e+00, - .2143841440760416e-01, .2894413776906615e+00, .2215820736295387e-01, - .3175489053704050e+00, .2305270619849904e-01, .3512439576972030e+00, - .2449014264738941e-01, .4036179314586852e+00, .8494564197695063e-02, - .1029439196351078e-01, .6958406921839354e-02, .1185809158880236e-01, - .3271773184277712e-01, .1321815865055247e-01, .6599313162331371e-01, - .1440610601409755e-01, .1016249390468336e+00, .1544947770682643e-01, - .1371499803680846e+00, .1637143556780157e-01, .1713990070155131e+00, - .1719123774995229e-01, .2038574724036485e+00, .1792514377153798e-01, - .2343593316805466e+00, .1858798779956469e-01, .2629560717194659e+00, - .1919659343371288e-01, .2899296316580346e+00, .1977810373828767e-01, - .3160315643000932e+00, .2039024270914711e-01, .3432192271881122e+00, - .2116722465269759e-01, - .3765294846983478e+00, .2240833445471075e-01, .4283514372117345e+00, - .7648100953017721e-02, .9270847111494889e-02, .6976054938079860e-02, - .1068147039692487e-01, .3281359708712486e-01, .1190898600388846e-01, - .6620896361366048e-01, .1298157114442065e-01, .1019862089328133e+00, - .1392387354640439e-01, .1376687444923527e+00, .1475662479151471e-01, - .1720764656800079e+00, .1549702171989481e-01, .2046849615229637e+00, - .1615937354505817e-01, .2353135758405889e+00, .1675598207974404e-01, - .2639750061864973e+00, .1729863164965770e-01, .2908276346191939e+00, - .1780176282268598e-01, .3162404475076796e+00, .1828983612841132e-01, - .3410641528662292e+00, .1881415834433531e-01, .3673520724841440e+00, - .1948852933531380e-01, .4000529139809629e+00, .2055287002810484e-01, - .4505930922691549e+00, .6923848173158734e-02, .8394702950361005e-02, - .6991325631797234e-02, .9673911522111265e-02, .3289687833321025e-01, - .1078755757084805e-01, .6639729788616958e-01, .1176100014874140e-01, - .1023029830546846e+00, .1261643557454879e-01, .1381259991601194e+00, - .1337254080889024e-01, .1726770746288135e+00, .1404479965650065e-01, - .2054241214472704e+00, .1464602837670213e-01, .2361779701904081e+00, - .1518698551280871e-01, .2649344026216049e+00, .1567717541900471e-01, - .2918033340368942e+00, - .1612624123496420e-01, .3170079069341164e+00, .1654688879900881e-01, - .3409811920927984e+00, .1696136666824286e-01, .3646547307991162e+00, - .1741546145080310e-01, .3901537483439419e+00, .1800636597179543e-01, - .4223218228522266e+00, .1892881341268367e-01, .4717326233521751e+00, - .6298588439596636e-02, .7638030626687965e-02, .7004655851265844e-02, - .8803453943265294e-02, .3296982845467406e-01, .9818444950365933e-02, - .6656291057106479e-01, .1070595626475817e-01, .1025827278785117e+00, - .1148608766389635e-01, .1385316612194638e+00, .1217575810897931e-01, - .1732125747484649e+00, .1278899412440368e-01, .2060869881923743e+00, - .1333738432024735e-01, .2369597744170469e+00, .1383056388512692e-01, - .2658180187652428e+00, .1427674437223498e-01, .2927507447256686e+00, - .1468343958863289e-01, .3179214676099940e+00, .1505875998976432e-01, - .3415951393087426e+00, .1541407984395701e-01, .3642544652079210e+00, - .1576969712450036e-01, .3868951368176343e+00, .1616644053575092e-01, - .4116861214445555e+00, .1668748198434585e-01, .4433331570075596e+00, - .1749188724059570e-01, .4916033800451471e+00, .5754360678751824e-02, - .6979206263458857e-02, .7016389205940601e-02, .8045335113843407e-02, - .3303423464885706e-01, .8974185166510452e-02, .6670962735009836e-01, - .9786634336394069e-02, - .1028314890330009e+00, .1050097258572427e-01, .1388938643805943e+00, - .1113260003649783e-01, .1736928024956524e+00, .1169428623074936e-01, - .2066843246414360e+00, .1219657523409050e-01, .2376686083847098e+00, - .1264820000840307e-01, .2666274169278879e+00, .1305648757877945e-01, - .2936397261253015e+00, .1342781257742339e-01, .3188429723296673e+00, - .1376825401666917e-01, .3424305607919373e+00, .1408478812041018e-01, - .3646959159353649e+00, .1438768989133101e-01, .3861600014637602e+00, - .1469542216481714e-01, .4078642344326945e+00, .1504419066763009e-01, - .4319869811400004e+00, .1550494890247615e-01, .4630491704469774e+00, - .1620775053166640e-01, .5100139240423402e+00, .5278040811520425e-02, - .6402421198476983e-02, .7026749310824704e-02, .7381444032562888e-02, - .3309125386700502e-01, .8234685519924101e-02, .6683990648107069e-01, - .8981222939541469e-02, .1030531116670419e+00, .9637773923336657e-02, - .1392177117208699e+00, .1021841796444464e-01, .1741238287384007e+00, - .1073483180895483e-01, .2072226942408981e+00, .1119665624742548e-01, - .2383105498941010e+00, .1161186412382382e-01, .2673653866792523e+00, - .1198709958412187e-01, .2944607083863120e+00, .1232800940556657e-01, - .3197217653056301e+00, .1263963481803662e-01, .3433101656487968e+00, - .1292700918588335e-01, - .3654364911202174e+00, .1319625157476125e-01, .3864151426812009e+00, - .1345671217793918e-01, .4067976665874104e+00, .1372517143690529e-01, - .4276578990766819e+00, .1403368592830970e-01, .4511616717492440e+00, - .1444284729184994e-01, .4816264620225250e+00, .1505946839641039e-01, - .5272614695163532e+00, .4487666665675140e-02, .5444990141910759e-02, - .7044130283096086e-02, .6279049188091140e-02, .3318723192008640e-01, - .7006368632847780e-02, .6706002621750721e-01, .7643068862200888e-02, - .1034291291409337e+00, .8203282681027361e-02, .1397696656221023e+00, - .8698916419500412e-02, .1748620369064401e+00, .9139847522019589e-02, - .2081495587015637e+00, .9534232617493163e-02, .2394220617811718e+00, - .9888812556097355e-02, .2686520584410767e+00, .1020918148777924e-01, - .2959071488424056e+00, .1050001965367601e-01, .3213027967445414e+00, - .1076530680194359e-01, .3449782554868110e+00, .1100855051222504e-01, - .3670882760306343e+00, .1123309242673613e-01, .3878099745344409e+00, - .1144260835071195e-01, .4073711108103572e+00, .1164201330179298e-01, - .4261157327362403e+00, .1183914191832676e-01, .4446387149497601e+00, - .1204780719832178e-01, .4640454326093743e+00, .1229306401377462e-01, - .4864269389633110e+00, .1261927726417314e-01, .5156669165861498e+00, - .1309943489239065e-01, - .5586255185473764e+00, .3862975224403902e-02, .4687945053900655e-02, - .7058035858061096e-02, .5407041834964283e-02, .3326430524210259e-01, - .6034411186094848e-02, .6723753885455682e-01, .6583863333832890e-02, - .1037337930420006e+00, .7067509494777436e-02, .1402191813726617e+00, - .7495554804930935e-02, .1754665679972444e+00, .7876466939414612e-02, - .2089130635289459e+00, .8217239718909702e-02, .2403434536707747e+00, - .8523653399761676e-02, .2697261364777181e+00, .8800501778860810e-02, - .2971251237465357e+00, .9051782217229110e-02, .3226519291781493e+00, - .9280855010852164e-02, .3464394048134897e+00, .9490584189896422e-02, - .3686285665457733e+00, .9683478271871005e-02, .3893644369335397e+00, - .9861860805271805e-02, .4088004145802082e+00, .1002812139311295e-01, - .4271141176574624e+00, .1018513471380169e-01, .4445422442202590e+00, - .1033699621003472e-01, .4614490459910935e+00, .1049031549106710e-01, - .4784539901229190e+00, .1065642152893932e-01, .4966599824214358e+00, - .1085488420737215e-01, .5180410345089337e+00, .1111843432827249e-01, - .5460483341177160e+00, .1149782035140485e-01, .5864065338958527e+00, - .3360562419718235e-02, .4078879630499024e-02, .7069329073407106e-02, - .4705262542208223e-02, .3332708647415080e-01, .5251963413756800e-02, - .6738262760022461e-01, - .5730951315737387e-02, .1039837553534775e+00, .6152725177551053e-02, - .1405895253957461e+00, .6526132611753048e-02, .1759668677811218e+00, - .6858515620324401e-02, .2095479655628776e+00, .7155939019582245e-02, - .2411135586103733e+00, .7423415917481789e-02, .2706287495885053e+00, - .7665103884932816e-02, .2981548371545775e+00, .7884467592308588e-02, - .3238009173107087e+00, .8084411667986876e-02, .3476971265301733e+00, - .8267390411961632e-02, .3699801584879876e+00, .8435502610509800e-02, - .3907862310698117e+00, .8590582044778893e-02, .4102493117101150e+00, - .8734298913651078e-02, .4285042785031379e+00, .8868296093454296e-02, - .4456965009415761e+00, .8994399398069297e-02, .4620016328614911e+00, - .9114966064926033e-02, .4776628155317611e+00, .9233473962579847e-02, - .4930576673885005e+00, .9355505324217098e-02, .5088149715467647e+00, - .9490326792694050e-02, .5260104590494338e+00, .9653243364999375e-02, - .5464780715474396e+00, .9868600991484903e-02, .5732601989067468e+00, - .1017225716053114e-01, .6111363239215825e+00, .2950437825487400e-02, - .3581555112941687e-02, .7078620126622295e-02, .4132082643231012e-02, - .3337886298886408e-01, .4612740002118506e-02, .6750261702445300e-01, - .5034004128539568e-02, .1041911190752577e+00, .5405066674282486e-02, - .1408978061674918e+00, - .5733674167146439e-02, .1763848697593524e+00, .6026255228800488e-02, - .2100805343046851e+00, .6288120524548417e-02, .2417622608971423e+00, - .6523660186046708e-02, .2713924596018528e+00, .6736515451660314e-02, - .2990302271326234e+00, .6929720582831246e-02, .3247828257866806e+00, - .7105817882799941e-02, .3487787217481978e+00, .7266950671260499e-02, - .3711526971215219e+00, .7414939513031372e-02, .3920379717842592e+00, - .7551347241996011e-02, .4115626674210771e+00, .7677539108440712e-02, - .4298493831220752e+00, .7794746313920410e-02, .4470176901244603e+00, - .7904145004284749e-02, .4631903418970273e+00, .8006969465604538e-02, - .4785052149162398e+00, .8104689159161024e-02, .4931367316839517e+00, - .8199295885823026e-02, .5073330960096394e+00, .8293770604485683e-02, - .5214794128662904e+00, .8392826136597125e-02, .5362017345344410e+00, - .8504035938797334e-02, .5525322098044688e+00, .8639408222270374e-02, - .5721561451757253e+00, .8817216208331321e-02, .5977434938944347e+00, - .9063189668758037e-02, .6332939739614603e+00, .2611205692460249e-02, - .3170101091465017e-02, .7086356419628467e-02, .3657766349841741e-02, - .3342206181054271e-01, .4083661809252030e-02, .6760295824860309e-01, - .4457037354538724e-02, .1043649740346678e+00, .4786009222605838e-02, - .1411570048315963e+00, - .5077417957619811e-02, .1767374059456163e+00, .5336940476209487e-02, - .2105311844047106e+00, .5569266597573038e-02, .2423131187370251e+00, - .5778273412183262e-02, .2720433970782992e+00, .5967176862421978e-02, - .2997792878733318e+00, .6138656970674597e-02, .3256265499647623e+00, - .6294959076405515e-02, .3497123813254361e+00, .6437975105563999e-02, - .3721703830438909e+00, .6569309029799851e-02, .3931323996098995e+00, - .6690330403814164e-02, .4127244218331418e+00, .6802219694622686e-02, - .4310650456887266e+00, .6906009314473870e-02, .4482657882348953e+00, - .7002625080460826e-02, .4644331547605672e+00, .7092934548851317e-02, - .4796729107857300e+00, .7177811732959676e-02, .4940976831610963e+00, - .7258232689273568e-02, .5078399409574430e+00, .7335424050171227e-02, - .5210737517163408e+00, .7411097366633641e-02, .5340506436534539e+00, - .7487815663348852e-02, .5471575324915496e+00, .7569550927915151e-02, - .5610077596302204e+00, .7662488506257662e-02, .5765785117760304e+00, - .7776079157718089e-02, .5954049494922431e+00, .7924148666854938e-02, - .6198219542319461e+00, .8125409481841734e-02, .6531839888628567e+00, - .2329161903934607e-02, .2827942346666575e-02, .7092767801324573e-02, - .3263256653829519e-02, .3345792087848227e-01, .3643524065941897e-02, - .6768640663901933e-01, - .3976979208186409e-02, .1045098632090649e+00, .4270848280167040e-02, - .1413735187729310e+00, .4531221910361700e-02, .1770326285691667e+00, - .4763154723278143e-02, .2109095929304028e+00, .4970822485283018e-02, - .2427770065864133e+00, .5157677387973698e-02, .2725932360325259e+00, - .5326583047275474e-02, .3004140385861841e+00, .5479926007282439e-02, - .3263439258620141e+00, .5619705807004115e-02, .3505090634425326e+00, - .5747607114086801e-02, .3730421698484556e+00, .5865057476337201e-02, - .3940742505245702e+00, .5973273864880296e-02, .4137303052977993e+00, - .6073300781079440e-02, .4321274134643955e+00, .6166042448892977e-02, - .4493743356584487e+00, .6252291618234036e-02, .4655722399143190e+00, - .6332757862946729e-02, .4808165109947856e+00, .6408099103723341e-02, - .4951999355274510e+00, .6478961616347051e-02, .5088179499753192e+00, - .6546036269964925e-02, .5217771724376283e+00, .6610142518258857e-02, - .5342092003559118e+00, .6672357066182766e-02, .5462927399000752e+00, - .6734211186973384e-02, .5582886150793852e+00, .6797988292026415e-02, - .5705940457094262e+00, .6867157346618580e-02, .5838243594874886e+00, - .6946966207628190e-02, .5989305413025341e+00, .7045163972244657e-02, - .6173557330297905e+00, .7172668498534273e-02, .6412138054673769e+00, - .7343669551813224e-02, - .6734212283950197e+00, .2088962222558656e-02, .2536501141538391e-02, - .7098312096014856e-02, .2927174164471204e-02, .3348897507192802e-01, - .3268517695916878e-02, .6775879346915350e-01, .3567904939390041e-02, - .1046357814625728e+00, .3831806772332035e-02, .1415620734408565e+00, - .4065677361393518e-02, .1772903102475344e+00, .4274043151934446e-02, - .2112406912998520e+00, .4460643560808929e-02, .2431839618927255e+00, - .4628570053481958e-02, .2730769378663360e+00, .4780387068478273e-02, - .3009740811016449e+00, .4918231891978967e-02, .3269788261694700e+00, - .5043895306797768e-02, .3512164460435231e+00, .5158886125836192e-02, - .3738189139504120e+00, .5264482738771292e-02, .3949165867949340e+00, - .5361774417899160e-02, .4146338301275897e+00, .5451694687903237e-02, - .4330869551935628e+00, .5535048699155984e-02, .4503835468466499e+00, - .5612536310885108e-02, .4666226835980815e+00, .5684772523136652e-02, - .4818958265481784e+00, .5752307033652531e-02, .4962883637349025e+00, - .5815645095778566e-02, .5098819947919942e+00, .5875272604331699e-02, - .5227583713586083e+00, .5931689562795883e-02, .5350047139508995e+00, - .5985457948104635e-02, .5467225528673463e+00, .6037272660724469e-02, - .5580413411348073e+00, .6088067820748090e-02, .5691395094905580e+00, - .6139174903693435e-02, - .5802765872262356e+00, .6192552890264469e-02, .5918411775133858e+00, - .6251110114702117e-02, .6044203697962170e+00, .6319123951993900e-02, - .6188952404877303e+00, .6402719127039078e-02, .6365612063366765e+00, - .6510255774185010e-02, .6592545134576846e+00, .6652267840556133e-02, - .6894261807467007e+00, .1884070525273232e-02, .2287865166522269e-02, - .7103061833161608e-02, .2640414555924009e-02, .3351561092037226e-01, - .2948504867845529e-02, .6782096720073962e-01, .3218776897022670e-02, - .1047441025101927e+00, .3457059211747976e-02, .1417245576749319e+00, - .3668264712145178e-02, .1775127832127863e+00, .3856470649104565e-02, - .2115271336150133e+00, .4025045325158119e-02, .2435368006995073e+00, - .4176773382240289e-02, .2734972927884814e+00, .4313964750721690e-02, - .3014619731636417e+00, .4438544635664399e-02, .3275333564649527e+00, - .4552126174118954e-02, .3518359485899692e+00, .4656068554335920e-02, - .3745010840861863e+00, .4751523397588311e-02, .3956585819539499e+00, - .4839471843717534e-02, .4154323324012205e+00, .4920754357241174e-02, - .4339381722015443e+00, .4996094895419632e-02, .4512831048238278e+00, - .5066120791624743e-02, .4675653273310193e+00, .5131379519337958e-02, - .4828747738428288e+00, .5192353422296487e-02, .4972940502928434e+00, - .5249473538511721e-02, - .5108997625078284e+00, .5303133835275671e-02, .5237643599692746e+00, - .5353707549485549e-02, .5359587556465524e+00, .5401567951803124e-02, - .5475561617516223e+00, .5447116802332092e-02, .5586378279840697e+00, - .5490825128586838e-02, .5693017116602867e+00, .5533292803086976e-02, - .5796755768842047e+00, .5575335692614607e-02, .5899366290511978e+00, - .5618111542531525e-02, .6003405110877628e+00, .5663297103480300e-02, - .6112631579002907e+00, .5713326390293707e-02, .6232591473997167e+00, - .5771686951858539e-02, .6371386281547686e+00, .5843235308872718e-02, - .6540591245646711e+00, .5934415308321717e-02, .6756138475691030e+00, - .6053127455671619e-02, .7038679036965546e+00, .1708003175642380e-02, - .2074181532622547e-02, .7107154835723396e-02, .2393937473496849e-02, - .3353858755734360e-01, .2673414535955727e-02, .6787466315584890e-01, - .2918625868457997e-02, .1048377783441727e+00, .3134849526067874e-02, - .1418652820405583e+00, .3326534476511183e-02, .1777057753498972e+00, - .3497372950002969e-02, .2117760550049606e+00, .3650415148383601e-02, - .2438439995727389e+00, .3788182708532486e-02, .2738640090744446e+00, - .3912767381261045e-02, .3018885114907114e+00, .4025912539016479e-02, - .3280192335266340e+00, .4129078986309924e-02, .3523800195135267e+00, - .4223497595500826e-02, - .3751016505461964e+00, .4310211297602812e-02, .3963134824357808e+00, - .4390108627214284e-02, .4161390116668366e+00, .4463950627129625e-02, - .4346937216368967e+00, .4532392561972495e-02, .4520842562952224e+00, - .4596001602217271e-02, .4684083677796514e+00, .4655271425546727e-02, - .4837553218910148e+00, .4710634539896850e-02, .4982065930947042e+00, - .4762473060977909e-02, .5118367810144925e+00, .4811128680431732e-02, - .5247147588413267e+00, .4856912649796014e-02, .5369051384586530e+00, - .4900116799220620e-02, .5484702216816450e+00, .4941026937249812e-02, - .5594727154468603e+00, .4979940477837468e-02, .5699796357324364e+00, - .5017190859382927e-02, .5800680268418966e+00, .5053182300865962e-02, - .5898333966076153e+00, .5088439691236800e-02, .5994021272105722e+00, - .5123679830879367e-02, .6089495614023648e+00, .5159911463507254e-02, - .6187259309040364e+00, .5198571556852845e-02, .6290926122189227e+00, - .5241701843449486e-02, .6405709220757223e+00, .5292158145073340e-02, - .6539038212088008e+00, .5353817484714892e-02, .6701255576222123e+00, - .5431693560278526e-02, .6906222214439113e+00, .5531783368314496e-02, - .7171434625046844e+00, .1486821222610860e-02, .1805710570607849e-02, - .7112315426865264e-02, .2084226678642758e-02, .3356758851849525e-01, - .2327708403877407e-02, - .6794252207314784e-01, .2541382628281658e-02, .1049563283476954e+00, - .2729837665345000e-02, .1420436509870845e+00, .2896941194350830e-02, - .1779508117794810e+00, .3045903028705765e-02, .2120926886975343e+00, - .3179374802697815e-02, .2442355417695174e+00, .3299548613427395e-02, - .2743324022628396e+00, .3408242823717034e-02, .3024345386679296e+00, - .3506972940214846e-02, .3286426953033458e+00, .3597008842757047e-02, - .3530798855126308e+00, .3679420554768286e-02, .3758761896368122e+00, - .3755114750481509e-02, .3971603743636597e+00, .3824863905497256e-02, - .4170554403005484e+00, .3889329651040080e-02, .4356764468047173e+00, - .3949081575434511e-02, .4531296561693286e+00, .4004612453985609e-02, - .4695124355979618e+00, .4056350682593341e-02, .4849135873526999e+00, - .4104670535603563e-02, .4994139167345992e+00, .4149900758174290e-02, - .5130869342770428e+00, .4192331932996859e-02, .5259996460201358e+00, - .4232223028377952e-02, .5382134282701107e+00, .4269807540393116e-02, - .5497850203277219e+00, .4305299690448572e-02, .5607677074343013e+00, - .4338901239307418e-02, .5712128128876574e+00, .4370809641681970e-02, - .5811716792241682e+00, .4401228508048884e-02, .5906984004679025e+00, - .4430381681233268e-02, .5998536784140458e+00, .4458532691684085e-02, - .6087103236556506e+00, - .4486011931533010e-02, .6173611125584528e+00, .4513254549169507e-02, - .6259299431307766e+00, .4540852685066905e-02, .6345874840856066e+00, - .4569625913830092e-02, .6435727138959286e+00, .4600712887286172e-02, - .6532217324580875e+00, .4635683708228730e-02, .6640046346388578e+00, - .4676663849565939e-02, .6765693546213282e+00, .4726442410018883e-02, - .6917869917669843e+00, .4788505706770704e-02, .7107844374668939e+00, - .4866891449054713e-02, .7349355366345482e+00, .1306017463771605e-02, - .1586222301823758e-02, .7116548254584538e-02, .1830990793066982e-02, - .3359140173567671e-01, .2045006139498853e-02, .6799831246271334e-01, - .2232854278235691e-02, .1050539332243899e+00, .2398561178839865e-02, - .1421907384347976e+00, .2545520579058178e-02, .1781532257250431e+00, - .2676548965485182e-02, .2123547392925449e+00, .2793973015829898e-02, - .2445602455405584e+00, .2899716152387136e-02, .2747216803842120e+00, - .2995373840546507e-02, .3028893817005614e+00, .3082275794427197e-02, - .3291633014860622e+00, .3161536205810221e-02, .3536657782024154e+00, - .3234093916059993e-02, .3765263180987164e+00, .3300744456546394e-02, - .3978732008486888e+00, .3362165629048766e-02, .4178290151302299e+00, - .3418937992980868e-02, .4365084718269216e+00, .3471561346521851e-02, - .4540175351893392e+00, - .3520468055585971e-02, .4704533078136206e+00, .3566033899133432e-02, - .4859043358175601e+00, .3608586955892009e-02, .5004511375120722e+00, - .3648414949109787e-02, .5141668418466542e+00, .3685771386301219e-02, - .5271178746069831e+00, .3720880775408019e-02, .5393646641028532e+00, - .3753943164375919e-02, .5509623620882760e+00, .3785138236518451e-02, - .5619615952404358e+00, .3814629199517684e-02, .5724092815186362e+00, - .3842566733485300e-02, .5823495672538734e+00, .3869093316887355e-02, - .5918249678197956e+00, .3894348333795344e-02, .6008778302882713e+00, - .3918474488962536e-02, .6095522840022940e+00, .3941626226723230e-02, - .6178969082896937e+00, .3963981072925327e-02, .6259684294183701e+00, - .3985755098069792e-02, .6338368642128979e+00, .4007224021775936e-02, - .6415926549632834e+00, .4028751796394626e-02, .6493564801329609e+00, - .4050828701392520e-02, .6572925493481835e+00, .4074120789204574e-02, - .6656262309872097e+00, .4099531432075899e-02, .6746666723127143e+00, - .4128272797582476e-02, .6848343774930394e+00, .4161938830162795e-02, - .6966920189552035e+00, .4202559743668019e-02, .7109733150553114e+00, - .4252599514137185e-02, .7285986885865631e+00, .4314833901724070e-02, - .7506571441023483e+00, .1156343000755387e-02, .1404504257957441e-02, - .7120061440091347e-02, - .1621310545540372e-02, .3361118414788869e-01, .1810903712325119e-02, - .6804470745318069e-01, .1977340288814310e-02, .1051351961493040e+00, - .2124181703071103e-02, .1423133589772792e+00, .2254430165931555e-02, - .1783222117476625e+00, .2370577235911165e-02, .2125738546054181e+00, - .2474681149731246e-02, .2448322054772776e+00, .2568443387429520e-02, - .2750483122588739e+00, .2653275289328116e-02, .3032717571879833e+00, - .2730353093366796e-02, .3296018469202774e+00, .2800662377663822e-02, - .3541603675689819e+00, .2865033605362301e-02, .3770763523850850e+00, - .2924170474532069e-02, .3984776764701321e+00, .2978672551304409e-02, - .4184865833334669e+00, .3029053394756756e-02, .4372174902153924e+00, - .3075755134140899e-02, .4547761117084665e+00, .3119160251996799e-02, - .4712593365381469e+00, .3159601161354295e-02, .4867555224942895e+00, - .3197368036290039e-02, .5013450107382228e+00, .3232715256012342e-02, - .5151007425806035e+00, .3265866747398978e-02, .5280889117936882e+00, - .3297020454653708e-02, .5403696166527656e+00, .3326352123823280e-02, - .5519974959907685e+00, .3354018561785408e-02, .5630223474016425e+00, - .3380160512425799e-02, .5734897364461758e+00, .3404905286403203e-02, - .5834416154573392e+00, .3428369285319778e-02, .5929169809805325e+00, - .3450660577239604e-02, - .6019526114875673e+00, .3471881710106394e-02, .6105839432336187e+00, - .3492132995268978e-02, .6188461635645998e+00, .3511516558294448e-02, - .6267756293962285e+00, .3530141542180836e-02, .6344117559126738e+00, - .3548130962196775e-02, .6417995687010485e+00, .3565630852851213e-02, - .6489931729721409e+00, .3582822510857449e-02, .6560604660107810e+00, - .3599938804777734e-02, .6630894993854867e+00, .3617285646093928e-02, - .6701969730666828e+00, .3635269699036237e-02, .6775393849143700e+00, - .3654433055424882e-02, .6853273049469121e+00, .3675494570182433e-02, - .6938429782822218e+00, .3699395273559710e-02, .7034607793792287e+00, - .3727340922414418e-02, .7146686166221225e+00, .3760827388752240e-02, - .7280857713064263e+00, .3801623782166765e-02, .7444684055765861e+00, - .3851675608889073e-02, .7646881040691488e+00, .1031010001534118e-02, - .1252325311246044e-02, .7123010369617354e-02, .1445699377070109e-02, - .3362780174930066e-01, .1614821702453833e-02, .6808371387504373e-01, - .1763306316297053e-02, .1052035845952689e+00, .1894326321527065e-02, - .1424166653656900e+00, .2010556629704488e-02, .1784647514196653e+00, - .2114217175592618e-02, .2127589198858749e+00, .2207141797804957e-02, - .2450622274788554e+00, .2290846453223580e-02, .2753249929535957e+00, - .2366588574329418e-02, - .3035961777269406e+00, .2435416111636774e-02, .3299745572968218e+00, - .2498207136828419e-02, .3545814616992661e+00, .2555701517785104e-02, - .3775455317600242e+00, .2608526182258946e-02, .3989943047683779e+00, - .2657215287010062e-02, .4190497337604562e+00, .2702226368977643e-02, - .4378259868084232e+00, .2743953334055468e-02, .4554285653702798e+00, - .2782736954335406e-02, .4719541760694932e+00, .2818873396984337e-02, - .4874910203110806e+00, .2852621192436532e-02, .5021193021763500e+00, - .2884206960364913e-02, .5159118365654818e+00, .2913830143454304e-02, - .5289346889752990e+00, .2941666946802540e-02, .5412478085861132e+00, - .2967873641281116e-02, .5529056351590590e+00, .2992589359741792e-02, - .5639576722484762e+00, .3015938493650994e-02, .5744490272864715e+00, - .3038032783280771e-02, .5844209250482745e+00, .3058973186216636e-02, - .5939112061179864e+00, .3078851606347056e-02, .6029548271815797e+00, - .3097752568780461e-02, .6115843860580712e+00, .3115754935792624e-02, - .6198307020754208e+00, .3132933775825234e-02, .6277234924693847e+00, - .3149362522988406e-02, .6352921987752219e+00, .3165115600029473e-02, - .6425670346395947e+00, .3180271725033977e-02, .6495803491305275e+00, - .3194918182718492e-02, .6563684284758635e+00, .3209156415539186e-02, - .6629738949529550e+00, - .3223109375845204e-02, .6694489043071365e+00, .3236931170179888e-02, - .6758593906225592e+00, .3250819601641628e-02, .6822906541085610e+00, - .3265032236292007e-02, .6888546193197504e+00, .3279906508904962e-02, - .6956990815908923e+00, .3295884006098741e-02, .7030191567938097e+00, - .3313538195666039e-02, .7110708644516797e+00, .3333603169205194e-02, - .7201861618009667e+00, .3356997989054186e-02, .7307875953685270e+00, - .3384836571738381e-02, .7433987921789071e+00, .3418406731492194e-02, - .7586440923075351e+00, .3459095390889103e-02, .7772269308571649e+00, - .9250365544833106e-03, .1123642957047639e-02, .7125507954787448e-02, - .1297191729022396e-02, .3364188485222631e-01, .1448990578148682e-02, - .6811679517715986e-01, .1582279947362813e-02, .1052616326176499e+00, - .1699905063056458e-02, .1425044323407192e+00, .1804264479385807e-02, - .1785859728026249e+00, .1897348784865108e-02, .2129164803933608e+00, - .1980802350907045e-02, .2452582966079122e+00, .2055984495008354e-02, - .2755611351402767e+00, .2124022707017878e-02, .3038734422531415e+00, - .2185856628127736e-02, .3302935522984499e+00, .2242273566275012e-02, - .3549424157624133e+00, .2293936902368478e-02, .3779483458160068e+00, - .2341408747104221e-02, .3994385963604223e+00, .2385168029019629e-02, - .4195348752453025e+00, - .2425624979060079e-02, .4383511386477932e+00, .2463132778750725e-02, - .4559927053277270e+00, .2497996973377256e-02, .4725561248235422e+00, - .2530483119020393e-02, .4881294636884907e+00, .2560823028544199e-02, - .5027928098555960e+00, .2589219901343181e-02, .5166188766435952e+00, - .2615852559843530e-02, .5296736371549673e+00, .2640878968300298e-02, - .5420169498193963e+00, .2664439173073012e-02, .5537031542330661e+00, - .2686657775798838e-02, .5647816278134981e+00, .2707646029843779e-02, - .5752973009271112e+00, .2727503634730079e-02, .5852911327970665e+00, - .2746320291944519e-02, .5948005537838443e+00, .2764177077984035e-02, - .6038598823048999e+00, .2781147686318178e-02, .6125007272671443e+00, - .2797299589001256e-02, .6207523898606690e+00, .2812695171020565e-02, - .6286422822922934e+00, .2827392896389240e-02, .6361963859104227e+00, - .2841448574941446e-02, .6434397776056558e+00, .2854916813399088e-02, - .6503972618317222e+00, .2867852754331386e-02, .6570941566018360e+00, - .2880314232961717e-02, .6635572959395679e+00, .2892364515113282e-02, - .6698163290468718e+00, .2904075820167642e-02, .6759054182903871e+00, - .2915533879795195e-02, .6818654639717365e+00, .2926843832981620e-02, - .6877470127613112e+00, .2938137802322835e-02, .6936140357564597e+00, - .2949584518825127e-02, - .6995487849121559e+00, .2961401330692262e-02, .7056579402322907e+00, - .2973868789530239e-02, .7120802208967371e+00, .2987347661611534e-02, - .7189955103325420e+00, .3002297518260188e-02, .7266352712733982e+00, - .3019294818352010e-02, .7352935018498777e+00, .3039046378540213e-02, - .7453365750657752e+00, .3062391179964571e-02, .7572088751614536e+00, - .3090279763155639e-02, .7714291475982730e+00, .3123717004293759e-02, - .7885701646946724e+00, .8345540180276686e-03, .1013764009388037e-02, - .7127645881665573e-02, .1170376416196646e-02, .3365394644507796e-01, - .1307373442880687e-02, .6814514556190448e-01, .1427676957022642e-02, - .1053114143093287e+00, .1533852566639599e-02, .1425797600037836e+00, - .1628063138328361e-02, .1786901034175123e+00, .1712103666468225e-02, - .2130519545476170e+00, .1787456941371129e-02, .2454270534974888e+00, - .1855348698944282e-02, .2757646057348834e+00, .1916795617374952e-02, - .3041126250272165e+00, .1972644976800254e-02, .3305690752776119e+00, - .2023606687518786e-02, .3552545878917464e+00, .2070278907560604e-02, - .3782971999927905e+00, .2113168475544262e-02, .3998239259305988e+00, - .2152707223367783e-02, .4199562653334393e+00, .2189265039122685e-02, - .4388079933534241e+00, .2223160371923681e-02, .4564842715530542e+00, - .2254668720923272e-02, - .4730815132757386e+00, .2284029531207622e-02, .4886876674022503e+00, - .2311451825653930e-02, .5033827203854437e+00, .2337118829323729e-02, - .5172392978550550e+00, .2361191787080918e-02, .5303232962672809e+00, - .2383813132113577e-02, .5426945049786824e+00, .2405109129935129e-02, - .5544071973678512e+00, .2425192096951206e-02, .5655106807683926e+00, - .2444162273064263e-02, .5760498017810869e+00, .2462109412745146e-02, - .5860654077087350e+00, .2479114147565534e-02, .5955947674756841e+00, - .2495249164658244e-02, .6046719571441241e+00, .2510580239462893e-02, - .6133282164799120e+00, .2525167157099261e-02, .6215922842757839e+00, - .2539064554606323e-02, .6294907215579771e+00, .2552322716028421e-02, - .6370482335961646e+00, .2564988353967443e-02, .6442880040095037e+00, - .2577105414898926e-02, .6512320574262512e+00, .2588715951514404e-02, - .6579016713460415e+00, .2599861113932935e-02, .6643178633382018e+00, - .2610582323220381e-02, .6705019867831056e+00, .2620922705689986e-02, - .6764764773431096e+00, .2630928885293276e-02, .6822658035386095e+00, - .2640653254172355e-02, .6878976884216645e+00, .2650156867702621e-02, - .6934046853762110e+00, .2659513138546438e-02, .6988262090327137e+00, - .2668812530675645e-02, .7042111407137301e+00, .2678168471535181e-02, - .7096211435207562e+00, - .2687724694622147e-02, .7151348288632315e+00, .2697664171457851e-02, - .7208529025232651e+00, .2708219651065415e-02, .7269043646867752e+00, - .2719685534125355e-02, .7334537129952923e+00, .2732430278157871e-02, - .7407088522578688e+00, .2746907645451310e-02, .7489289818382320e+00, - .2763663754705104e-02, .7584310317783358e+00, .2783335043530471e-02, - .7695921849731747e+00, .2806630086397274e-02, .7828446706602086e+00, - .2834286424739216e-02, .7986575762535248e+00, .7568003719318281e-03, - .9193373558789463e-03, .7129483255703461e-02, .1061389190056637e-02, - .3366431715745472e-01, .1185658720812506e-02, .6816953450862767e-01, - .1294794350315917e-02, .1053542656584974e+00, .1391121645368222e-02, - .1426446444034435e+00, .1476601139740284e-02, .1787798638427945e+00, - .1552859914551620e-02, .2131688271751633e+00, .1621242048290884e-02, - .2455727658693272e+00, .1682858604168091e-02, .2759404560655418e+00, - .1738631136850422e-02, .3043195464558018e+00, .1789327643414803e-02, - .3308076883028777e+00, .1835591597189766e-02, .3555252435875009e+00, - .1877965170693660e-02, .3786000160301540e+00, .1916907758736738e-02, - .4001588169674569e+00, .1952810766576543e-02, .4203229689645817e+00, - .1986009452068925e-02, .4392060925299616e+00, .2016792448794289e-02, - .4569132141578328e+00, - .2045409461693157e-02, .4735406293653057e+00, .2072077518345742e-02, - .4891761844801786e+00, .2096986074148179e-02, .5038997769424400e+00, - .2120301203878496e-02, .5177839552843484e+00, .2142169061433792e-02, - .5308945491240521e+00, .2162718750455528e-02, .5432912893815535e+00, - .2182064718440740e-02, .5550283971155782e+00, .2200308763672422e-02, - .5661551304354499e+00, .2217541726297687e-02, .5767162856210821e+00, - .2233844920932215e-02, .5867526525797927e+00, .2249291357368938e-02, - .5963014271336025e+00, .2263946787643312e-02, .6053965840290423e+00, - .2277870611359356e-02, .6140692154201157e+00, .2291116666449641e-02, - .6223478401763524e+00, .2303733929177061e-02, .6302586899076299e+00, - .2315767145022433e-02, .6378259782215101e+00, .2327257411049353e-02, - .6450721605572670e+00, .2338242730369626e-02, .6520181930839076e+00, - .2348758560479908e-02, .6586838007193958e+00, .2358838379587591e-02, - .6650877664469207e+00, .2368514298725632e-02, .6712482569089239e+00, - .2377817752650840e-02, .6771832029067319e+00, .2386780309439892e-02, - .6829107580966474e+00, .2395434647564189e-02, .6884498650357838e+00, - .2403815760225585e-02, .6938209649667989e+00, .2411962459936224e-02, - .6990468964641347e+00, .2419919271518965e-02, .7041540382931724e+00, - .2427738818137931e-02, - .7091737632918418e+00, .2435484820891955e-02, .7141442820039481e+00, - .2443235844427740e-02, .7191129655073966e+00, .2451089922557623e-02, - .7241392431779231e+00, .2459170177943326e-02, .7292981672564718e+00, - .2467631490367586e-02, .7346847122783368e+00, .2476668140634181e-02, - .7404188178940524e+00, .2486522120258960e-02, .7466510642206331e+00, - .2497491395393781e-02, .7535686551625321e+00, .2509936783254573e-02, - .7614010329283727e+00, .2524285190189721e-02, .7704239097236394e+00, - .2541025785320841e-02, .7809597539113882e+00, .2560694413103588e-02, - .7933718506147267e+00, .2583840650378180e-02, .8080481691101191e+00, - .6694334606038313e-03, .8132301052210061e-03, .7131535707087396e-02, - .9389134630471259e-03, .3367590696807291e-01, .1048872877008853e-02, - .6819680438492585e-01, .1145449798724469e-02, .1054022066039507e+00, - .1230700342275683e-02, .1427172823544694e+00, .1306357911890783e-02, - .1788804222099017e+00, .1373861096813421e-02, .2132998613259399e+00, - .1434398265869949e-02, .2457362721216975e+00, .1488951760223115e-02, - .2761379595225904e+00, .1538336359526358e-02, .3045521719476219e+00, - .1583231069003380e-02, .3310762180672609e+00, .1624204791259703e-02, - .3558301646036297e+00, .1661736860472097e-02, .3789415592809941e+00, - .1696233421123923e-02, - .4005369903859170e+00, .1728040504318892e-02, .4207375854097784e+00, - .1757454499192354e-02, .4396567938240963e+00, .1784730573761186e-02, - .4573994919708219e+00, .1810089479804955e-02, .4740618435452991e+00, - .1833723080526557e-02, .4897315792782505e+00, .1855798864682184e-02, - .5044884954562696e+00, .1876463652712977e-02, .5184050523373731e+00, - .1895846655550170e-02, .5315470026926565e+00, .1914062012192412e-02, - .5439740105721099e+00, .1931210905475803e-02, .5557402385626821e+00, - .1947383334819745e-02, .5668948928266588e+00, .1962659608717758e-02, - .5774827218315940e+00, .1977111607276341e-02, .5875444685962498e+00, - .1990803855373865e-02, .5971172785245406e+00, .2003794439402125e-02, - .6062350661340985e+00, .2016135794604195e-02, .6149288446198813e+00, - .2027875385387674e-02, .6232270224896007e+00, .2039056297414846e-02, - .6311556716380911e+00, .2049717757561867e-02, .6387387713071162e+00, - .2059895595863033e-02, .6459984324868040e+00, .2069622662222278e-02, - .6529551075171532e+00, .2078929209927277e-02, .6596277899957604e+00, - .2087843257818011e-02, .6660342106414446e+00, .2096390943345113e-02, - .6721910355553485e+00, .2104596879732886e-02, .6781140744196829e+00, - .2112484532090143e-02, .6838185076461196e+00, .2120076629662863e-02, - .6893191434072465e+00, - .2127395634587425e-02, .6946307179415828e+00, .2134464291583733e-02, - .6997682556089891e+00, .2141306288121780e-02, .7047475089834524e+00, - .2147947060772256e-02, .7095855038862377e+00, .2154414790705499e-02, - .7143012197281974e+00, .2160741639474206e-02, .7189164418059094e+00, - .2166965284859545e-02, .7234568290808686e+00, .2173130824735037e-02, - .7279532479715103e+00, .2179293122829263e-02, .7324434288116620e+00, - .2185519670818465e-02, .7369740050569291e+00, .2191894031123936e-02, - .7416029929155098e+00, .2198519895768168e-02, .7464027556828451e+00, - .2205525735899346e-02, .7514634645503588e+00, .2213069905688267e-02, - .7568970038541067e+00, .2221345878507691e-02, .7628411564127120e+00, - .2230587003169685e-02, .7694637214568848e+00, .2241069745958558e-02, - .7769659387231029e+00, .2253113820886843e-02, .7855841979737009e+00, - .2267076946734208e-02, .7955885073370143e+00, .2283341347108146e-02, - .8072756369544127e+00, .2302288836034036e-02, .8209544135936097e+00, - .5959608869219697e-03, .7239930216451945e-03, .7133279984105104e-02, - .8359051841424598e-03, .3368576099913345e-01, .9338233700778646e-03, - .6822000216330427e-01, .1019831142421348e-02, .1054430127732599e+00, - .1095758216195270e-02, .1427791507549994e+00, .1163147152914922e-02, - .1789661337538298e+00, - .1223278163696114e-02, .2134116378937676e+00, .1277208785600386e-02, - .2458758686973440e+00, .1325813205911649e-02, .2763067382696023e+00, - .1369816492784942e-02, .3047511618662466e+00, .1409822883247175e-02, - .3313061633300986e+00, .1446338629616970e-02, .3560915640558304e+00, - .1479790274040400e-02, .3792346990474591e+00, .1510539225034315e-02, - .4008619710852165e+00, .1538893395093506e-02, .4210943451273732e+00, - .1565116520065816e-02, .4400451277298846e+00, .1589435653602577e-02, - .4578190692609130e+00, .1612047223434259e-02, .4745122222302962e+00, - .1633121950929719e-02, .4902122192180130e+00, .1652808868600187e-02, - .5049987699443599e+00, .1671238618449212e-02, .5189442584592429e+00, - .1688526174140261e-02, .5321143706133679e+00, .1704773099175760e-02, - .5445687118458739e+00, .1720069429524861e-02, .5563613934916154e+00, - .1734495250750528e-02, .5675415768232118e+00, .1748122025406067e-02, - .5781539706502275e+00, .1761013715337100e-02, .5882392821853880e+00, - .1773227734809691e-02, .5978346230971775e+00, .1784815763538346e-02, - .6069738738486110e+00, .1795824443291854e-02, .6156880099806808e+00, - .1806295977494385e-02, .6240053941930317e+00, .1816268649874427e-02, - .6319520380671680e+00, .1825777275563891e-02, .6395518371737207e+00, - .1834853595977716e-02, - .6468267831733791e+00, .1843526627209035e-02, .6537971564070679e+00, - .1851822970482422e-02, .6604817024077319e+00, .1859767092366030e-02, - .6668977957794100e+00, .1867381581918830e-02, .6730615950017611e+00, - .1874687391723729e-02, .6789881919521959e+00, .1881704069826390e-02, - .6846917603173716e+00, .1888449989971118e-02, .6901857076183885e+00, - .1894942588218185e-02, .6954828363313554e+00, .1901198615070921e-02, - .7005955205839351e+00, .1907234413674205e-02, .7055359061912127e+00, - .1913066236513566e-02, .7103161434075709e+00, .1918710615393293e-02, - .7149486637645913e+00, .1924184802344570e-02, .7194465147858177e+00, - .1929507302533566e-02, .7238237692546146e+00, .1934698524185406e-02, - .7280960290730413e+00, .1939781574913619e-02, .7322810475484290e+00, - .1944783238404899e-02, .7363994980480986e+00, .1949735169676031e-02, - .7404759210790995e+00, .1954675350226750e-02, .7445398854214426e+00, - .1959649844884542e-02, .7486274009877383e+00, .1964714897577384e-02, - .7527826199581922e+00, .1969939389932244e-02, .7570598558183508e+00, - .1975407658858821e-02, .7615259331570643e+00, .1981222619086292e-02, - .7662628484770114e+00, .1987509053119538e-02, .7713706654164001e+00, - .1994416800895364e-02, .7769704756416124e+00, .2002123390500117e-02, - .7832071162571111e+00, - .2010835389853712e-02, .7902511335384258e+00, .2020787431823991e-02, - .7982992156041412e+00, .2032237508156190e-02, .8075719965967809e+00, - .2045456833973120e-02, .8183078136932541e+00, .2060712530690398e-02, - .8307507916355182e+00, .5338928457208802e-03, .6486041055927330e-03, - .7134757145335637e-02, .7488783022520046e-03, .3369410911427631e-01, - .8366191792139075e-03, .6823966328875076e-01, .9136926200367255e-03, - .1054776147161770e+00, .9817372289705743e-03, .1428316413133060e+00, - .1042134467481678e-02, .1790388973189992e+00, .1096030851195136e-02, - .2135065916571426e+00, .1144373475917349e-02, .2459945403613866e+00, - .1187945232547193e-02, .2764503284138904e+00, .1227395462237520e-02, - .3049205940601908e+00, .1263265290388587e-02, .3315021246228428e+00, - .1296008087702652e-02, .3563145379544189e+00, .1326005836926910e-02, - .3794849926333959e+00, .1353582187798311e-02, .4011397375442878e+00, - .1379012879924876e-02, .4213996026736057e+00, .1402534089465843e-02, - .4403777756781442e+00, .1424349141395722e-02, .4581789018294929e+00, - .1444633933714447e-02, .4748989405223802e+00, .1463541343583908e-02, - .4906254417290438e+00, .1481204825549461e-02, .5054380418632013e+00, - .1497741365648968e-02, .5194090599684319e+00, .1513253919449596e-02, - .5326041243428160e+00, - .1527833434485045e-02, .5450827895910497e+00, .1541560536285142e-02, - .5568991222679660e+00, .1554506940716115e-02, .5681022442899654e+00, - .1566736642551277e-02, .5787368298952323e+00, .1578306920207553e-02, - .5888435558143096e+00, .1589269188760702e-02, .5984595065104622e+00, - .1599669727196656e-02, .6076185375122531e+00, .1609550300992578e-02, - .6163516003945891e+00, .1618948697263611e-02, .6246870331241742e+00, - .1627899186642147e-02, .6326508194315294e+00, .1636432923609736e-02, - .6402668207058439e+00, .1644578295050302e-02, .6475569836949800e+00, - .1652361225240263e-02, .6545415270716049e+00, .1659805444262448e-02, - .6612391097238539e+00, .1666932725870720e-02, .6676669834625878e+00, - .1673763100099416e-02, .6738411327196651e+00, .1680315045376260e-02, - .6797764037527307e+00, .1686605664538830e-02, .6854866258810527e+00, - .1692650848960719e-02, .6909847273635962e+00, .1698465434958682e-02, - .6962828487057689e+00, .1704063356777271e-02, .7013924564580136e+00, - .1709457800739110e-02, .7063244609630222e+00, .1714661365618782e-02, - .7110893420369401e+00, .1719686234962450e-02, .7156972872545727e+00, - .1724544367953908e-02, .7201583483730915e+00, .1729247716543003e-02, - .7244826224989144e+00, .1733808477926433e-02, .7286804659046311e+00, - .1738239393121469e-02, - .7327627499609472e+00, .1742554104306060e-02, .7367411704788124e+00, - .1746767585796486e-02, .7406286238588718e+00, .1750896665936375e-02, - .7444396657879347e+00, .1754960659646605e-02, .7481910707203003e+00, - .1758982133685755e-02, .7519025128611727e+00, .1762987828362212e-02, - .7555973915123057e+00, .1767009759806471e-02, .7593038249053531e+00, - .1771086524820975e-02, .7630558361569231e+00, .1775264824037991e-02, - .7668947513550588e+00, .1779601206067178e-02, .7708708209501843e+00, - .1784164011861242e-02, .7750450585439046e+00, .1789035459753730e-02, - .7794912616154927e+00, .1794313751342973e-02, .7842981311142257e+00, - .1800114989664162e-02, .7895713343902400e+00, .1806574577713146e-02, - .7954352514919308e+00, .1813847605191753e-02, .8020340030828954e+00, - .1822107542131273e-02, .8095311799649906e+00, .1831542366827648e-02, - .8181074940047334e+00, .1842347120393410e-02, .8279553875468303e+00, - .1854711901010908e-02, .8392695503623823e+00, .4691372119147557e-03, - .5699474625461372e-03, .7136296792849224e-02, .6580754336890405e-03, - .3370281338535284e-01, .7351932064547252e-03, .6826017144205968e-01, - .8029397345236971e-03, .1055137237879695e+00, .8627543786402343e-03, - .1428864460309730e+00, .9158506408206921e-03, .1791149115084724e+00, - .9632356479495138e-03, - .2136058483079311e+00, .1005741352235223e-02, .2461186723532833e+00, - .1044055462224991e-02, .2766006332016539e+00, .1078748370226813e-02, - .3050980855476346e+00, .1110295406319466e-02, .3317075749743232e+00, - .1139094812215725e-02, .3565485115490737e+00, .1165482118715345e-02, - .3797478738863422e+00, .1189741614017051e-02, .4014317539275095e+00, - .1212115499934443e-02, .4217208439626945e+00, .1232811224277848e-02, - .4407282102151493e+00, .1252007377470389e-02, .4585583904118685e+00, - .1269858457651580e-02, .4753072483903950e+00, .1286498741428814e-02, - .4910622490186240e+00, .1302045444889013e-02, .5059029528099534e+00, - .1316601318761973e-02, .5199016110853500e+00, .1330256790211312e-02, - .5331237917441728e+00, .1343091739511245e-02, .5456289955944984e+00, - .1355176981171679e-02, .5574712413729396e+00, .1366575504600436e-02, - .5686996086005114e+00, .1377343518145096e-02, .5793587340271479e+00, - .1387531331581560e-02, .5894892612975623e+00, .1397184105238413e-02, - .5991282456659598e+00, .1406342488530390e-02, .6083095167442896e+00, - .1415043166390284e-02, .6170640027934311e+00, .1423319328684793e-02, - .6254200202131955e+00, .1431201074983781e-02, .6334035318149531e+00, - .1438715764876940e-02, .6410383772701038e+00, .1445888322283529e-02, - .6483464788808477e+00, - .1452741500792328e-02, .6553480255553266e+00, .1459296115932730e-02, - .6620616376107076e+00, .1465571249361709e-02, .6685045147893643e+00, - .1471584429214883e-02, .6746925696634154e+00, .1477351790282003e-02, - .6806405484266425e+00, .1482888217204235e-02, .6863621409335069e+00, - .1488207473534721e-02, .6918700817451654e+00, .1493322319242184e-02, - .6971762438844605e+00, .1498244619060822e-02, .7022917269886535e+00, - .1502985443992799e-02, .7072269415837240e+00, .1507555168249840e-02, - .7119916912919050e+00, .1511963563977790e-02, .7165952549304837e+00, - .1516219896245011e-02, .7210464706718194e+00, .1520333020996940e-02, - .7253538247205133e+00, .1524311488991586e-02, .7295255473336399e+00, - .1528163659142506e-02, .7335697194752111e+00, .1531897825216204e-02, - .7374943939689233e+00, .1535522360469415e-02, .7413077357064542e+00, - .1539045885576599e-02, .7450181862940887e+00, .1542477466093639e-02, - .7486346594874230e+00, .1545826846727079e-02, .7521667748753935e+00, - .1549104730812699e-02, .7556251385226099e+00, .1552323114613247e-02, - .7590216806350385e+00, .1555495687246740e-02, .7623700617184821e+00, - .1558638308120671e-02, .7656861600411088e+00, .1561769574454004e-02, - .7689886543012415e+00, .1564911491470015e-02, .7722997159327905e+00, - .1568090256606748e-02, - .7756458249739051e+00, .1571337165828147e-02, .7790587211550291e+00, - .1574689643692269e-02, .7825764967678216e+00, .1578192387667105e-02, - .7862448284470696e+00, .1581898599185298e-02, .7901183291700260e+00, - .1585871246475873e-02, .7942619768635446e+00, .1590184264311382e-02, - .7987525387422443e+00, .1594923540574454e-02, .8036798573342322e+00, - .1600187467232215e-02, .8091477920349469e+00, .1606086745205357e-02, - .8152745179862013e+00, .1612743036112452e-02, .8221917759509073e+00, - .1620285966641179e-02, .8300425555166407e+00, .1628847946012576e-02, - .8389766067695471e+00, .1638556304338204e-02, .8491431596995497e+00, - .4152983993727092e-03, .5045486166497230e-03, .7137584516676377e-02, - .5825747502812775e-03, .3371009582559231e-01, .6508564339714855e-03, - .6827733616228911e-01, .7108440797559780e-03, .1055439591076286e+00, - .7638115008710665e-03, .1429323580617065e+00, .8108326421179146e-03, - .1791786256178479e+00, .8527988118498596e-03, .2136890926697665e+00, - .8904462894848839e-03, .2462228452780043e+00, .9243836974156776e-03, - .2767268570137912e+00, .9551158310881699e-03, .3052472497196298e+00, - .9830633537396637e-03, .3318803708195339e+00, .1008578703487142e-02, - .3567454603219721e+00, .1031958817701520e-02, .3799693497349148e+00, - .1053455282818112e-02, - .4016780028151404e+00, .1073282437929197e-02, .4219919994202545e+00, - .1091623864253886e-02, .4410243065866673e+00, .1108637603920062e-02, - .4588793741064279e+00, .1124460377322258e-02, .4756529875379346e+00, - .1139211008944395e-02, .4914325418394411e+00, .1152993225032100e-02, - .5062975349402129e+00, .1165897950461469e-02, .5203201620487163e+00, - .1178005204347923e-02, .5335659407189512e+00, .1189385672505494e-02, - .5460943265934672e+00, .1200102018320324e-02, .5579592979271204e+00, - .1210209980791963e-02, .5692098980166754e+00, .1219759298541784e-02, - .5798907312704116e+00, .1228794490820103e-02, .5900424125337194e+00, - .1237355520454566e-02, .5997019714820298e+00, .1245478358886877e-02, - .6089032150489527e+00, .1253195469650359e-02, .6176770513802826e+00, - .1260536223624142e-02, .6260517789476357e+00, .1267527256990541e-02, - .6340533443783142e+00, .1274192780889601e-02, .6417055723602077e+00, - .1280554850208162e-02, .6490303707240170e+00, .1286633597682126e-02, - .6560479135277237e+00, .1292447438469551e-02, .6627768046927827e+00, - .1298013249521533e-02, .6692342244811717e+00, .1303346527400884e-02, - .6754360608644642e+00, .1308461527646537e-02, .6813970276241349e+00, - .1313371388331951e-02, .6871307708378881e+00, .1318088240100810e-02, - .6926499652502783e+00, - .1322623304669488e-02, .6979664018971263e+00, .1326986983552337e-02, - .7030910682519399e+00, .1331188938584919e-02, .7080342220886105e+00, - .1335238165685898e-02, .7128054602082953e+00, .1339143063206245e-02, - .7174137831602817e+00, .1342911496162030e-02, .7218676570980016e+00, - .1346550857633121e-02, .7261750739540748e+00, .1350068128634278e-02, - .7303436111948426e+00, .1353469937828520e-02, .7343804925285762e+00, - .1356762622556962e-02, .7382926510963945e+00, .1359952292807390e-02, - .7420867968756576e+00, .1363044899939134e-02, .7457694902776256e+00, - .1366046312228174e-02, .7493472242304510e+00, .1368962399598178e-02, - .7528265174113487e+00, .1371799130263930e-02, .7562140217340938e+00, - .1374562682436201e-02, .7595166477149035e+00, .1377259574721566e-02, - .7627417119340626e+00, .1379896819392827e-02, .7658971114809663e+00, - .1382482103293908e-02, .7689915310079312e+00, .1385024001753947e-02, - .7720346888027838e+00, .1387532231477270e-02, .7750376290830836e+00, - .1390017948880056e-02, .7780130684490018e+00, .1392494100651911e-02, - .7809758049987551e+00, .1394975833264466e-02, .7839431988406547e+00, - .1397480967482131e-02, .7869357323732872e+00, .1400030542294373e-02, - .7899776573739077e+00, .1402649429581176e-02, .7930977330965135e+00, - .1405367015557528e-02, - .7963300544867956e+00, .1408217936717937e-02, .7997149612640727e+00, - .1411242845492577e-02, .8033000057004371e+00, .1414489162825236e-02, - .8071409378596117e+00, .1418011750045248e-02, .8113026400715047e+00, - .1421873399672547e-02, .8158599058260445e+00, .1426145003995468e-02, - .8208979110240450e+00, .1430905213100405e-02, .8265121682023010e+00, - .1436239345537763e-02, .8328076907174900e+00, .1442237275146430e-02, - .8398970330439564e+00, .1448990003811190e-02, .8478968323160648e+00, - .1456584666833031e-02, .8569224819892680e+00, .3704312646343119e-03, - .4500459652486567e-03, .7138650748115411e-02, .5196512293102546e-03, - .3371612727399277e-01, .5805664280060180e-03, .6829155668533947e-01, - .6340849446568049e-03, .1055690170651003e+00, .6813427081724704e-03, - .1429704232383565e+00, .7232974239492588e-03, .1792314731911011e+00, - .7607439326118729e-03, .2137581723047245e+00, .7943388257980795e-03, - .2463093367632228e+00, .8246248539513288e-03, .2768317147355182e+00, - .8520521766292996e-03, .3053712382217758e+00, .8769959255269664e-03, - .3320240933589542e+00, .8997703900142133e-03, .3569093819512950e+00, - .9206403645220593e-03, .3801538161111002e+00, .9398302000432457e-03, - .4018832556603875e+00, .9575310308788060e-03, .4222181893493448e+00, - .9739065619456522e-03, - .4412715038513685e+00, .9890977229041295e-03, .4591475776827830e+00, - .1003226429225417e-02, .4759421328870969e+00, .1016398637371945e-02, - .4917425076000317e+00, .1028706839793818e-02, .5066281487544273e+00, - .1040232113307033e-02, .5206712056814181e+00, .1051045809625145e-02, - .5339371545956020e+00, .1061210957702222e-02, .5464854138565951e+00, - .1070783432788909e-02, .5583699280903157e+00, .1079812935679248e-02, - .5696397102784545e+00, .1088343816748556e-02, .5803393375366302e+00, - .1096415772455089e-02, .5905094001856708e+00, .1104064436547561e-02, - .6001869059172129e+00, .1111321883943327e-02, .6094056420120871e+00, - .1118217061857135e-02, .6181964990928702e+00, .1124776160068879e-02, - .6265877600346048e+00, .1131022930068676e-02, .6346053575793632e+00, - .1136978961092068e-02, .6422731040006305e+00, .1142663919667303e-02, - .6496128959041625e+00, .1148095758170784e-02, .6566448969707471e+00, - .1153290896971796e-02, .6633877011656901e+00, .1158264384001310e-02, - .6698584786727629e+00, .1163030034968892e-02, .6760731065636836e+00, - .1167600556950560e-02, .6820462859911614e+00, .1171987657658222e-02, - .6877916474950851e+00, .1176202142362038e-02, .6933218458373045e+00, - .1180254000157654e-02, .6986486456296808e+00, .1184152481040773e-02, - .7037829988914664e+00, - .1187906165063826e-02, .7087351155643580e+00, .1191523024697338e-02, - .7135145279256490e+00, .1195010481397003e-02, .7181301497708876e+00, - .1198375457282797e-02, .7225903311867283e+00, .1201624422765785e-02, - .7269029097019594e+00, .1204763440909706e-02, .7310752585900764e+00, - .1207798209286642e-02, .7351143331006848e+00, .1210734100078424e-02, - .7390267154202931e+00, .1213576199187821e-02, .7428186592069160e+00, - .1216329345156313e-02, .7464961346090013e+00, .1218998168739366e-02, - .7500648747695434e+00, .1221587134066625e-02, .7535304249333266e+00, - .1224100582415115e-02, .7568981954218305e+00, .1226542779750137e-02, - .7601735199195562e+00, .1228917969342930e-02, .7633617207306558e+00, - .1231230430958390e-02, .7664681829190014e+00, .1233484548321435e-02, - .7694984395410563e+00, .1235684886817594e-02, .7724582705209949e+00, - .1237836283660978e-02, .7753538181016055e+00, .1239943953067019e-02, - .7781917222296842e+00, .1242013609290138e-02, .7809792796931293e+00, - .1244051610712973e-02, .7837246313034256e+00, .1246065128479356e-02, - .7864369818849385e+00, .1248062343408890e-02, .7891268582478557e+00, - .1250052675057249e-02, .7918064106168962e+00, .1252047046705140e-02, - .7944897630608011e+00, .1254058189642781e-02, .7971934181681546e+00, - .1256100989185991e-02, - .7999367203284967e+00, .1258192873167162e-02, .8027423802037812e+00, - .1260354240858018e-02, .8056370599049799e+00, .1262608925972372e-02, - .8086520134810325e+00, .1264984681034516e-02, .8118237698928188e+00, - .1267513661363494e-02, .8151948348470072e+00, .1270232874562430e-02, - .8188143727609828e+00, .1273184545147458e-02, .8227388097836817e+00, - .1276416323542609e-02, .8270322725064919e+00, .1279981244520295e-02, - .8317667447053557e+00, .1283937313921567e-02, .8370217873957335e+00, - .1288346577738765e-02, .8428836291187909e+00, .1293273510746542e-02, - .8494434005718798e+00, .1298782562596834e-02, .8567942719004841e+00, - .1304934730786103e-02, .8650272688993226e+00, .3247324487808653e-03, - .3945315229438140e-03, .7139767532965116e-02, .4555578699667749e-03, - .3372244637254624e-01, .5089677216150194e-03, .6830646000320411e-01, - .5558945983563953e-03, .1055952873791690e+00, .5973340508520150e-03, - .1430103457525390e+00, .6341254407194094e-03, .1792869234600663e+00, - .6669653938797302e-03, .2138306885390802e+00, .6964293711881412e-03, - .2464001780084456e+00, .7229930587138452e-03, .2769419073380583e+00, - .7470509916283250e-03, .3055016129403092e+00, .7689319468807855e-03, - .3321753151236530e+00, .7889113759410096e-03, .3570819738779806e+00, - .8072213501811222e-03, - .3803481790268297e+00, .8240584940970029e-03, .4020996841123463e+00, - .8395903192560990e-03, .4224568848461668e+00, .8539602966613761e-03, - .4415325859147346e+00, .8672919359416600e-03, .4594310931563854e+00, - .8796920818161035e-03, .4762480638503880e+00, .8912535918781442e-03, - .4920707781580621e+00, .9020575233992923e-03, .5069786309167420e+00, - .9121749286872399e-03, .5210437244980383e+00, .9216683368023415e-03, - .5343314926832955e+00, .9305929826843983e-03, .5469013154214589e+00, - .9389978318087510e-03, .5588071025313237e+00, .9469264384779324e-03, - .5700978354396460e+00, .9544176680744464e-03, .5808180626619678e+00, - .9615063075283847e-03, .5910083486194518e+00, .9682235834936652e-03, - .6007056775836025e+00, .9745976039775797e-03, .6099438156993251e+00, - .9806537362012611e-03, .6187536345605122e+00, .9864149311092719e-03, - .6271633999553797e+00, .9919020030614374e-03, .6351990293204530e+00, - .9971338717269585e-03, .6428843212420017e+00, .1002127771980826e-02, - .6502411600835498e+00, .1006899436614548e-02, .6572896985355157e+00, - .1011463255869661e-02, .6640485206005014e+00, .1015832417146389e-02, - .6705347872580487e+00, .1020019027701906e-02, .6767643668025705e+00, - .1024034222710236e-02, .6827519516206730e+00, .1027888260690500e-02, - .6885111629699746e+00, - .1031590608007845e-02, .6940546451402459e+00, .1035150013900340e-02, - .6993941502179868e+00, .1038574577276322e-02, .7045406145358273e+00, - .1041871806352736e-02, .7095042277666803e+00, .1045048672060125e-02, - .7142944955177615e+00, .1048111656019274e-02, .7189202961898697e+00, - .1051066793794383e-02, .7233899327913630e+00, .1053919714044959e-02, - .7277111803329067e+00, .1056675674131018e-02, .7318913293773558e+00, - .1059339592671662e-02, .7359372262783432e+00, .1061916079514346e-02, - .7398553106107196e+00, .1064409463539858e-02, .7436516502756216e+00, - .1066823818705570e-02, .7473319747524817e+00, .1069162988716224e-02, - .7509017069698120e+00, .1071430610707160e-02, .7543659942763458e+00, - .1073630138329335e-02, .7577297390145481e+00, .1075764864638867e-02, - .7609976292302569e+00, .1077837945216411e-02, .7641741700960905e+00, - .1079852421973832e-02, .7672637166832609e+00, .1081811248148003e-02, - .7702705087876981e+00, .1083717315034678e-02, .7731987086032039e+00, - .1085573481080025e-02, .7760524421380459e+00, .1087382604024221e-02, - .7788358453933391e+00, .1089147576881027e-02, .7815531164629429e+00, - .1090871368639801e-02, .7842085748763442e+00, .1092557070691845e-02, - .7868067296884163e+00, .1094207950110233e-02, .7893523580223542e+00, - .1095827511049306e-02, - .7918505959922322e+00, .1097419565672728e-02, .7943070441648366e+00, - .1098988316160812e-02, .7967278899584393e+00, .1100538449478067e-02, - .7991200496055508e+00, .1102075246684770e-02, .8014913325065773e+00, - .1103604708628230e-02, .8038506309404848e+00, .1105133699816469e-02, - .8062081381315597e+00, .1106670112111886e-02, .8085755975333251e+00, - .1108223049519360e-02, .8109665857911905e+00, .1109803034693859e-02, - .8133968310607946e+00, .1111422236740111e-02, .8158845670237690e+00, - .1113094718271409e-02, .8184509208406880e+00, .1114836697350123e-02, - .8211203301382262e+00, .1116666816628120e-02, .8239209796093340e+00, - .1118606407495873e-02, .8268852415235039e+00, .1120679731089786e-02, - .8300500959832002e+00, .1122914170403457e-02, .8334574957353697e+00, - .1125340338439976e-02, .8371546264999228e+00, .1127992056534935e-02, - .8411939971620041e+00, .1130906145334969e-02, .8456332754097852e+00, - .1134121959793832e-02, .8505347650275864e+00, .1137680591275090e-02, - .8559644039843292e+00, .1141623657948933e-02, .8619901524142233e+00, - .1145991613898916e-02, .8686796434054859e+00, .2875557040695001e-03, - .3493682107340224e-03, .7140652840633392e-02, .4034136512140228e-03, - .3372745678580264e-01, .4507156263114678e-03, .6831827979235850e-01, - .4922776751319498e-03, - .1056161282055053e+00, .5289812044432154e-03, .1430420271934089e+00, - .5615693465755460e-03, .1793309426893349e+00, .5906588650957148e-03, - .2138882776015863e+00, .6167592500442515e-03, .2464723498787023e+00, - .6402916548621664e-03, .2770294926804611e+00, .6616053847329528e-03, - .3056052894425374e+00, .6809915244670573e-03, .3322956309926026e+00, - .6986939459404484e-03, .3572193667731841e+00, .7149181133975426e-03, - .3805029914283647e+00, .7298381072985964e-03, .4022721758944257e+00, - .7436022322429452e-03, .4226472436509502e+00, .7563375079342728e-03, - .4417409357850834e+00, .7681532808226864e-03, .4596575017826150e+00, - .7791441427437137e-03, .4764925487070491e+00, .7893923017930954e-03, - .4923333117464571e+00, .7989695184985524e-03, .5072591452826548e+00, - .8079386954131118e-03, .5213421151585618e+00, .8163551890154100e-03, - .5346476220690836e+00, .8242678979707145e-03, .5472350159192663e+00, - .8317201703560293e-03, .5591581791948586e+00, .8387505635876626e-03, - .5704660684234719e+00, .8453934839008121e-03, .5812032094226068e+00, - .8516797268548300e-03, .5914101459193340e+00, .8576369361234619e-03, - .6011238433265917e+00, .8632899945099273e-03, .6103780506208373e+00, - .8686613584996434e-03, .6192036237904337e+00, .8737713455743161e-03, - .6276288144678238e+00, - .8786383818419734e-03, .6356795272806593e+00, .8832792161976796e-03, - .6433795492571826e+00, .8877091061492647e-03, .6507507543610395e+00, - .8919419795673447e-03, .6578132859480015e+00, .8959905759071083e-03, - .6645857196542167e+00, .8998665698679513e-03, .6710852089553721e+00, - .9035806799802425e-03, .6773276153852716e+00, .9071427642160033e-03, - .6833276251737907e+00, .9105619043959713e-03, .6890988538586815e+00, - .9138464808966333e-03, .6946539402426604e+00, .9170042389371524e-03, - .7000046309052734e+00, .9200423475395102e-03, .7051618563365225e+00, - .9229674520990890e-03, .7101357996343394e+00, .9257857213720340e-03, - .7149359585989350e+00, .9285028895757936e-03, .7195712019621512e+00, - .9311242942067709e-03, .7240498204076717e+00, .9336549101012279e-03, - .7283795729669328e+00, .9360993802001778e-03, .7325677293146301e+00, - .9384620434241330e-03, .7366211084358048e+00, .9407469600177421e-03, - .7405461140927553e+00, .9429579346863432e-03, .7443487674837327e+00, - .9450985378153066e-03, .7480347374559778e+00, .9471721250379737e-03, - .7516093686126949e+00, .9491818553984218e-03, .7550777076367228e+00, - .9511307083407467e-03, .7584445281427596e+00, .9530214997467334e-03, - .7617143543649362e+00, .9548568972384669e-03, .7648914839873381e+00, - .9566394349615138e-03, - .7679800104318763e+00, .9583715280677518e-03, .7709838449309258e+00, - .9600554871248025e-03, .7739067387317117e+00, .9616935326914640e-03, - .7767523058059454e+00, .9632878103157287e-03, .7795240464721949e+00, - .9648404062341729e-03, .7822253723804877e+00, .9663533640789765e-03, - .7848596333593397e+00, .9678287029319074e-03, .7874301466854236e+00, - .9692684371035443e-03, .7899402294061247e+00, .9706745980610887e-03, - .7923932344258478e+00, .9720492589794330e-03, .7947925911586078e+00, - .9733945624476692e-03, .7971418516523020e+00, .9747127519265526e-03, - .7994447432038601e+00, .9760062076207416e-03, .8017052286081833e+00, - .9772774875013603e-03, .8039275753153862e+00, .9785293742870215e-03, - .8061164349067315e+00, .9797649292608988e-03, .8082769344340225e+00, - .9809875538617746e-03, .8104147812911904e+00, .9822010600294816e-03, - .8125363833872510e+00, .9834097502974072e-03, .8146489864477286e+00, - .9846185085894264e-03, .8167608302603168e+00, .9858329025720856e-03, - .8188813255629256e+00, .9870592982031829e-03, .8210212529979992e+00, - .9883049867630125e-03, .8231929850588618e+00, .9895783241000432e-03, - .8254107311438275e+00, .9908888810000608e-03, .8276908045991552e+00, - .9922476024127977e-03, .8300519088320196e+00, .9936669716440181e-03, - .8325154370399047e+00, - .9951611734340783e-03, .8351057766377819e+00, .9967462469844777e-03, - .8378506048585280e+00, .9984402163659223e-03, .8407811560526175e+00, - .1000263181294734e-02, .8439324337673380e+00, .1002237346041166e-02, - .8473433317092810e+00, .1004386958434913e-02, .8510566173745598e+00, - .1006738125009853e-02, .8551187210241215e+00, .1009318463085570e-02, - .8595792618934147e+00, .1012156547280817e-02, .8644902349222623e+00, - .1015281108386375e-02, .8699047776816512e+00, .1018719948988823e-02, - .8758754423894201e+00, .2516072353014572e-03, .3056959967091976e-03, - .7141513331248321e-02, .3529898095786411e-03, .3373232773731790e-01, - .3943840897337921e-03, .6832977329356830e-01, .4307567414106005e-03, - .1056363991444212e+00, .4628788405472162e-03, .1430728515532258e+00, - .4914005032824914e-03, .1793737852691615e+00, .5168612968898808e-03, - .2139443476569179e+00, .5397069428251232e-03, .2465426458452338e+00, - .5603058824394920e-03, .2771148378485354e+00, .5789637011504982e-03, - .3057063604036936e+00, .5959350504603019e-03, .3324129804044311e+00, - .6114332776489099e-03, .3573534416826857e+00, .6256381290223384e-03, - .3806541481236008e+00, .6387018947049087e-03, .4024406920346254e+00, - .6507543147370997e-03, .4228333282534617e+00, .6619065080162839e-03, - .4419447375155043e+00, - .6722541319677103e-03, .4598791158936434e+00, .6818799359437668e-03, - .4767320228947860e+00, .6908558354114982e-03, .4925906511342484e+00, - .6992446058387721e-03, .5075343166976332e+00, .7071012733743214e-03, - .5216350508314642e+00, .7144742625858456e-03, .5349582228611499e+00, - .7214063485450536e-03, .5475631541591855e+00, .7279354505312647e-03, - .5595037011924066e+00, .7340952968696949e-03, .5708287967136168e+00, - .7399159843938746e-03, .5815829447836500e+00, .7454244513185431e-03, - .5918066692004921e+00, .7506448786223955e-03, .6015369171138536e+00, - .7555990321360334e-03, .6108074207645846e+00, .7603065552321395e-03, - .6196490208139152e+00, .7647852201872223e-03, .6280899548719071e+00, - .7690511448239667e-03, .6361561147571614e+00, .7731189798710006e-03, - .6438712758203572e+00, .7770020715316172e-03, .6512573014043507e+00, - .7807126029873436e-03, .6583343252310160e+00, .7842617179394069e-03, - .6651209142221997e+00, .7876596287823588e-03, .6716342139918672e+00, - .7909157115868082e-03, .6778900789954702e+00, .7940385897245874e-03, - .6839031890937339e+00, .7970362076856718e-03, .6896871540821554e+00, - .7999158964005718e-03, .6952546075538913e+00, .8026844311858064e-03, - .7006172913010297e+00, .8053480832662807e-03, .7057861313157792e+00, - .8079126656911606e-03, - .7107713063270146e+00, .8103835743445347e-03, .7155823096970855e+00, - .8127658246549895e-03, .7202280054070732e+00, .8150640845261530e-03, - .7247166787741906e+00, .8172827039407797e-03, .7290560824713176e+00, - .8194257416320207e-03, .7332534783544617e+00, .8214969891654706e-03, - .7373156755481164e+00, .8234999927330391e-03, .7412490651900622e+00, - .8254380729235324e-03, .7450596521952805e+00, .8273143427041148e-03, - .7487530843625872e+00, .8291317238207998e-03, .7523346791167432e+00, - .8308929618041609e-03, .7558094481526250e+00, .8326006397480466e-03, - .7591821202261264e+00, .8342571910138194e-03, .7624571623184618e+00, - .8358649110001742e-03, .7656387993861767e+00, .8374259681086725e-03, - .7687310328982383e+00, .8389424140275449e-03, .7717376583539388e+00, - .8404161934509115e-03, .7746622819709052e+00, .8418491533472557e-03, - .7775083367312447e+00, .8432430518896748e-03, .7802790979757885e+00, - .8445995671611185e-03, .7829776987415892e+00, .8459203057504956e-03, - .7856071450464104e+00, .8472068113602371e-03, .7881703313360623e+00, - .8484605735526905e-03, .7906700563263103e+00, .8496830367716911e-03, - .7931090394909276e+00, .8508756097868982e-03, .7954899384715712e+00, - .8520396757221188e-03, .7978153677138051e+00, .8531766028449862e-03, - .8000879186670883e+00, - .8542877563141193e-03, .8023101819251651e+00, .8553745111013562e-03, - .8044847717273021e+00, .8564382663308516e-03, .8066143532903718e+00, - .8574804613037265e-03, .8087016734969329e+00, .8585025935063833e-03, - .8107495955250247e+00, .8595062389322027e-03, .8127611380708978e+00, - .8604930750795124e-03, .8147395198853895e+00, .8614649070224791e-03, - .8166882104165335e+00, .8624236969844256e-03, .8186109874227465e+00, - .8633715978728290e-03, .8205120024888089e+00, .8643109912587642e-03, - .8223958554353771e+00, .8652445302964463e-03, .8242676786542088e+00, - .8661751880747444e-03, .8261332324148928e+00, .8671063118639506e-03, - .8279990121599971e+00, .8680416836568219e-03, .8298723687144858e+00, - .8689855872887505e-03, .8317616421559534e+00, .8699428822395237e-03, - .8336763097907850e+00, .8709190839453324e-03, .8356271482143981e+00, - .8719204500557906e-03, .8376264087468918e+00, .8729540715222103e-03, - .8396880045621392e+00, .8740279666600877e-03, .8418277064895145e+00, - .8751511753462460e-03, .8440633426727417e+00, .8763338492436154e-03, - .8464149949224021e+00, .8775873323529088e-03, .8489051816016571e+00, - .8789242242430914e-03, .8515590131598368e+00, .8803584160127719e-03, - .8544043019385164e+00, .8819050864333951e-03, .8574716026611897e+00, - .8835806429514380e-03, - .8607941542532526e+00, .8854025895229178e-03, .8644076876951290e+00, - .8873893010135113e-03, .8683500591389794e+00, .8895596827024104e-03, - .8726606635323475e+00, .8919326940631082e-03, .8773795829320804e+00, - .8945267194288890e-03, .8825464274388153e+00, .2223192652822833e-03, - .2701145057190040e-03, .7142201961578917e-02, .3119065510375409e-03, - .3373622651253249e-01, .3484864321264339e-03, .6833897467046082e-01, - .3806297364820721e-03, .1056526311462410e+00, .4090176838012951e-03, - .1430975404471804e+00, .4342246342064952e-03, .1794081097583843e+00, - .4567272828059632e-03, .2139892833907438e+00, .4769194148963887e-03, - .2465990011834060e+00, .4951265406555741e-03, .2771832823761325e+00, - .5116186382371054e-03, .3057874476558851e+00, .5266206864730374e-03, - .3325071660393497e+00, .5403211724599088e-03, .3574610980955170e+00, - .5528788972227103e-03, .3807755762784305e+00, .5644284045399661e-03, - .4025761311147353e+00, .5750843154180597e-03, .4229829635932437e+00, - .5849447992701323e-03, .4421087071714556e+00, .5940943654599883e-03, - .4600575161312302e+00, .6026061192146514e-03, .4769249128064807e+00, - .6105435941597527e-03, .4927980565571165e+00, .6179622488629170e-03, - .5077562335628903e+00, .6249106954973403e-03, .5218714480507487e+00, - .6314317138679972e-03, - .5352090448328407e+00, .6375630925795459e-03, .5478283229614227e+00, - .6433383302749551e-03, .5597831185164269e+00, .6487872230220317e-03, - .5711223455807324e+00, .6539363586005573e-03, .5818904910810551e+00, - .6588095342876049e-03, .5921280630645866e+00, .6634281114812186e-03, - .6018719941845592e+00, .6678113179369536e-03, .6111560033299172e+00, - .6719765063612168e-03, .6200109188606474e+00, .6759393764906060e-03, - .6284649670553408e+00, .6797141664962577e-03, .6365440293006893e+00, - .6833138185165486e-03, .6442718713535327e+00, .6867501222863375e-03, - .6516703477465010e+00, .6900338401544602e-03, .6587595841259685e+00, - .6931748162308895e-03, .6655581400283747e+00, .6961820719554190e-03, - .6720831543307668e+00, .6990638900109890e-03, .6783504753604156e+00, - .7018278882011304e-03, .6843747774195197e+00, .7044810846600041e-03, - .6901696652750492e+00, .7070299555552817e-03, .6957477679800600e+00, - .7094804862707378e-03, .7011208232299629e+00, .7118382169105868e-03, - .7062997533135355e+00, .7141082828461975e-03, .7112947335920807e+00, - .7162954509237486e-03, .7161152543292093e+00, .7184041518653100e-03, - .7207701765965301e+00, .7204385093230375e-03, .7252677828954485e+00, - .7224023659844375e-03, .7296158230608452e+00, .7242993070741803e-03, - .7338215559473337e+00, - .7261326815532289e-03, .7378917873419190e+00, .7279056212778734e-03, - .7418329044971879e+00, .7296210583486120e-03, .7456509076357754e+00, - .7312817408508591e-03, .7493514387389932e+00, .7328902471654914e-03, - .7529398078995253e+00, .7344489990066897e-03, .7564210174894084e+00, - .7359602733269230e-03, .7597997843696403e+00, .7374262132138434e-03, - .7630805603462782e+00, .7388488378909974e-03, .7662675510594492e+00, - .7402300519233290e-03, .7693647334760027e+00, .7415716537192339e-03, - .7723758721433454e+00, .7428753434132293e-03, .7753045343511121e+00, - .7441427302069922e-03, .7781541043385911e+00, .7453753392414597e-03, - .7809277966791060e+00, .7465746180687906e-03, .7836286689677923e+00, - .7477419427901918e-03, .7862596339363163e+00, .7488786239238555e-03, - .7888234711170709e+00, .7499859120665148e-03, .7913228381802210e+00, - .7510650034123837e-03, .7937602820697135e+00, .7521170451945067e-03, - .7961382500690559e+00, .7531431411158165e-03, .7984591009343806e+00, - .7541443568405107e-03, .8007251162411515e+00, .7551217256207493e-03, - .8029385121019574e+00, .7560762541391865e-03, .8051014514262963e+00, - .7570089286545360e-03, .8072160569092491e+00, .7579207215452834e-03, - .8092844249546161e+00, .7588125983558522e-03, .8113086407595959e+00, - .7596855254600513e-03, - .8132907948125792e+00, .7605404784685073e-03, .8152330010832001e+00, - .7613784515200193e-03, .8171374172145180e+00, .7622004676113267e-03, - .8190062670610542e+00, .7630075901355534e-03, .8208418659532486e+00, - .7638009358163845e-03, .8226466491084072e+00, .7645816892425407e-03, - .8244232036498043e+00, .7653511192248359e-03, .8261743047383627e+00, - .7661105972153171e-03, .8279029563638637e+00, .7668616180436525e-03, - .8296124373828724e+00, .7676058232385866e-03, .8313063534256175e+00, - .7683450272099249e-03, .8329886953198786e+00, .7690812465664271e-03, - .8346639046910128e+00, .7698167328335732e-03, .8363369473861753e+00, - .7705540088076615e-03, .8380133953277569e+00, .7712959087329680e-03, - .8396995173132502e+00, .7720456224088709e-03, .8414023791296488e+00, - .7728067432140554e-03, .8431299531191393e+00, .7735833198629735e-03, - .8448912369930949e+00, .7743799114709090e-03, .8466963812112370e+00, - .7752016451809944e-03, .8485568235840266e+00, .7760542751796868e-03, - .8504854288745331e+00, .7769442413753351e-03, .8524966300217779e+00, - .7778787253163293e-03, .8546065661289764e+00, .7788657000623884e-03, - .8568332105076614e+00, .7799139696833306e-03, .8591964798032911e+00, - .7810331928461635e-03, .8617183125335791e+00, .7822338835880836e-03, - .8644227022726899e+00, - .7835273809189877e-03, .8673356673041829e+00, .7849257774604757e-03, - .8704851350330805e+00, .7864417960824488e-03, .8739007161188697e+00, - .7880886026971684e-03, .8776133406687649e+00, .7898795433580249e-03, - .8816547276255949e+00, .7918277950171212e-03, .8860566596308294e+00, - .7939459222137213e-03, .8908500402679119e+00, .1944104808172863e-03, - .2362079689279158e-03, .7142870645995927e-02, .2727565493010114e-03, - .3374001298187475e-01, .3047478195749429e-03, .6834791269705135e-01, - .3328598979745383e-03, .1056684019862271e+00, .3576884028469226e-03, - .1431215337265024e+00, .3797355245930193e-03, .1794414760981541e+00, - .3994180621642384e-03, .2140329776183974e+00, .4170803229573239e-03, - .2466538170423533e+00, .4330069180398755e-03, .2772498801896881e+00, - .4474339038008580e-03, .3058663763636773e+00, .4605579911155484e-03, - .3325988808094674e+00, .4725439839337465e-03, .3575659744772789e+00, - .4835307298323497e-03, .3808939216502081e+00, .4936358667461324e-03, - .4027081940104168e+00, .5029596128586884e-03, .4231289413573305e+00, - .5115878016710237e-03, .4422687522901076e+00, .5195943228286058e-03, - .4602317415082190e+00, .5270430946153614e-03, .4771133961932997e+00, - .5339896662637906e-03, .4930008443009192e+00, .5404825264865527e-03, - .5079733438010129e+00, - .5465641777837335e-03, .5221028734536996e+00, .5522720230787040e-03, - .5354547549768437e+00, .5576391012124826e-03, .5480882663954187e+00, - .5626947000884556e-03, .5600572245757691e+00, .5674648702683609e-03, - .5714105259898375e+00, .5719728571649507e-03, .5821926413793687e+00, - .5762394663436609e-03, .5924440638839293e+00, .5802833735974854e-03, - .6022017124008726e+00, .5841213892159104e-03, .6114992931083616e+00, - .5877686840933180e-03, .6203676226097062e+00, .5912389839103901e-03, - .6288349163028890e+00, .5945447364939478e-03, .6369270455027728e+00, - .5976972565551031e-03, .6446677666447656e+00, .6007068512753596e-03, - .6520789256394533e+00, .6035829296188047e-03, .6591806401656133e+00, - .6063340977673600e-03, .6659914624065441e+00, .6089682426829690e-03, - .6725285244645835e+00, .6114926054781716e-03, .6788076684377859e+00, - .6139138460109964e-03, .6848435629139552e+00, .6162380999006194e-03, - .6906498074313085e+00, .6184710289781289e-03, .6962390262713238e+00, - .6206178660351128e-03, .7016229527864589e+00, .6226834546060953e-03, - .7068125053216800e+00, .6246722844146502e-03, .7118178556622645e+00, - .6265885230237052e-03, .7166484908292960e+00, .6284360441552101e-03, - .7213132689469173e+00, .6302184530805945e-03, .7258204698201126e+00, - .6319391094293539e-03, - .7301778407871102e+00, .6336011477170803e-03, .7343926383451021e+00, - .6352074958549976e-03, .7384716659907177e+00, .6367608918694911e-03, - .7424213086665331e+00, .6382638990313429e-03, .7462475641609494e+00, - .6397189195696667e-03, .7499560717702578e+00, .6411282071242605e-03, - .7535521384979339e+00, .6424938780717482e-03, .7570407630365846e+00, - .6438179218450410e-03, .7604266577520003e+00, .6451022103519516e-03, - .7637142688659893e+00, .6463485065869407e-03, .7669077950147200e+00, - .6475584725197199e-03, .7700112043418378e+00, .6487336763355520e-03, - .7730282502703713e+00, .6498755990944187e-03, .7759624860841656e+00, - .6509856408696007e-03, .7788172784380622e+00, .6520651264205267e-03, - .7815958199061201e+00, .6531153104498718e-03, .7843011406686931e+00, - .6541373824907589e-03, .7869361194320170e+00, .6551324714664429e-03, - .7895034936680300e+00, .6561016499619955e-03, .7920058692573547e+00, - .6570459382452019e-03, .7944457296146663e+00, .6579663080720945e-03, - .7968254443729997e+00, .6588636863112547e-03, .7991472777018847e+00, - .6597389584201900e-03, .8014133963335314e+00, .6605929718067311e-03, - .8036258773716017e+00, .6614265391084759e-03, .8057867159584249e+00, - .6622404414238483e-03, .8078978328788472e+00, .6630354315293254e-03, - .8099610821822974e+00, - .6638122371188470e-03, .8119782589091303e+00, .6645715641033481e-03, - .8139511070129370e+00, .6653141000107842e-03, .8158813275773382e+00, - .6660405175299570e-03, .8177705874338766e+00, .6667514782449204e-03, - .8196205282970527e+00, .6674476366107756e-03, .8214327765433879e+00, - .6681296442262653e-03, .8232089537737035e+00, .6687981544637654e-03, - .8249506883116352e+00, .6694538275230569e-03, .8266596278067956e+00, - .6700973359816298e-03, .8283374531279623e+00, .6707293709212047e-03, - .8299858937501699e+00, .6713506487175973e-03, .8316067448595304e+00, - .6719619185889133e-03, .8332018864208099e+00, .6725639710052013e-03, - .8347733044749573e+00, .6731576470708964e-03, .8363231149564427e+00, - .6737438489993667e-03, .8378535903427503e+00, .6743235518061943e-03, - .8393671894697208e+00, .6748978163539151e-03, .8408665908653167e+00, - .6754678038850311e-03, .8423547299689948e+00, .6760347921811532e-03, - .8438348406117731e+00, .6766001934827970e-03, .8453105011300979e+00, - .6771655742948708e-03, .8467856854705638e+00, .6777326771850360e-03, - .8482648196070496e+00, .6783034446530447e-03, .8497528435300649e+00, - .6788800451053436e-03, .8512552789714525e+00, .6794649009063182e-03, - .8527783028853924e+00, .6800607183903050e-03, .8543288265058851e+00, - .6806705196006733e-03, - .8559145795259218e+00, .6812976753667025e-03, .8575441985760543e+00, - .6819459391275817e-03, .8592273186991227e+00, .6826194806570309e-03, - .8609746659004745e+00, .6833229185231614e-03, .8627981480750792e+00, - .6840613497285638e-03, .8647109406514445e+00, .6848403745099397e-03, - .8667275621282101e+00, .6856661137341258e-03, .8688639333027147e+00, - .6865452157148281e-03, .8711374124074637e+00, .6874848486099405e-03, - .8735667966111717e+00, .6884926738773655e-03, .8761722784739423e+00, - .6895767956239815e-03, .8789753440908044e+00, .6907456801615706e-03, - .8819985980014631e+00, .6920080398012621e-03, .8852654987569412e+00, - .6933726750250028e-03, .8887999886800295e+00, .6948482698509175e-03, - .8926260022952612e+00, .6964431366613300e-03, .8967668406721245e+00, - .1687522084062742e-03, .2050350430521891e-03, .7143489225104815e-02, - .2367622652786059e-03, .3374351625166600e-01, .2645340906026387e-03, - .6835618366232366e-01, .2889390544558335e-03, .1056829987008023e+00, - .3104940979691790e-03, .1431437456375445e+00, .3296350786177901e-03, - .1794723727318731e+00, .3467237429868135e-03, .2140734485464243e+00, - .3620589217153205e-03, .2467046039766637e+00, .3758876341573480e-03, - .2773116025546536e+00, .3884147581578293e-03, .3059395516583021e+00, - .3998110227339366e-03, - .3326839408735750e+00, .4102194641152033e-03, .3576632785546656e+00, - .4197605903284232e-03, .3810037669469621e+00, .4285365009823915e-03, - .4028308242884812e+00, .4366341766023805e-03, .4232645539797606e+00, - .4441281128435874e-03, .4424175040394658e+00, .4510824389517647e-03, - .4603937534270471e+00, .4575526297479205e-03, .4772887576403662e+00, - .4635868963219365e-03, .4931896163747717e+00, .4692273217485011e-03, - .5081755622500646e+00, .4745107935135632e-03, .5223185511672184e+00, - .4794697730555439e-03, .5356838841319745e+00, .4841329341264508e-03, - .5483308203204026e+00, .4885256949620448e-03, .5603131593778051e+00, - .4926706640505523e-03, .5716797819868060e+00, .4965880152488166e-03, - .5824751443673352e+00, .5002958048415423e-03, .5927397262665235e+00, - .5038102406673260e-03, .6025104342019820e+00, .5071459114881099e-03, - .6118209628858234e+00, .5103159832377398e-03, .6207021182846412e+00, - .5133323675598979e-03, .6291821059168485e+00, .5162058670665758e-03, - .6372867879128392e+00, .5189463009622880e-03, .6450399121650791e+00, - .5215626140454308e-03, .6524633166362534e+00, .5240629715848113e-03, - .6595771116117261e+00, .5264548421517410e-03, .6663998424002746e+00, - .5287450701469129e-03, .6729486347171443e+00, .5309399394814304e-03, - .6792393247326799e+00, - .5330452296408964e-03, .6852865755411093e+00, .5350662651709710e-03, - .6911039815981985e+00, .5370079594647384e-03, .6967041624928251e+00, - .5388748536006167e-03, .7020988472546843e+00, .5406711508695714e-03, - .7072989502566063e+00, .5424007475382063e-03, .7123146396434907e+00, - .5440672603167729e-03, .7171553991088069e+00, .5456740509357201e-03, - .7218300837422168e+00, .5472242481790601e-03, .7263469705865458e+00, - .5487207676758462e-03, .7307138044675716e+00, .5501663297110800e-03, - .7349378395946277e+00, .5515634752832511e-03, .7390258773726449e+00, - .5529145806065207e-03, .7429843008159668e+00, .5542218702305272e-03, - .7468191059101640e+00, .5554874289292619e-03, .7505359302293567e+00, - .5567132124919160e-03, .7541400790825443e+00, .5579010575325747e-03, - .7576365494325465e+00, .5590526904217706e-03, .7610300518048510e+00, - .5601697354308826e-03, .7643250303805051e+00, .5612537221699207e-03, - .7675256814467769e+00, .5623060923901496e-03, .7706359703613220e+00, - .5633282062150818e-03, .7736596471697186e+00, .5643213478564601e-03, - .7766002610022336e+00, .5652867308658178e-03, .7794611733633313e+00, - .5662255029669265e-03, .7822455704165419e+00, .5671387505098367e-03, - .7849564743577130e+00, .5680275025831865e-03, .7875967539612229e+00, - .5688927348179374e-03, - .7901691343763252e+00, .5697353729126355e-03, .7926762062443136e+00, - .5705562959076292e-03, .7951204342015494e+00, .5713563392333756e-03, - .7975041648285145e+00, .5721362975559819e-03, .7998296341008703e+00, - .5728969274414421e-03, .8020989743949635e+00, .5736389498586027e-03, - .8043142210972835e+00, .5743630525397174e-03, .8064773188650033e+00, - .5750698922165000e-03, .8085901275829018e+00, .5757600967488519e-03, - .8106544280606480e+00, .5764342671629149e-03, .8126719275136132e+00, - .5770929796147660e-03, .8146442648700572e+00, .5777367872959363e-03, - .8165730159477090e+00, .5783662222969873e-03, .8184596985434300e+00, - .5789817974456180e-03, .8203057774808211e+00, .5795840081362118e-03, - .8221126696623233e+00, .5801733341683536e-03, .8238817491745800e+00, - .5807502416126773e-03, .8256143524986065e+00, .5813151847234263e-03, - .8273117838796568e+00, .5818686079183535e-03, .8289753209156332e+00, - .5824109478480398e-03, .8306062204274619e+00, .5829426355783928e-03, - .8322057246800982e+00, .5834640989120021e-03, .8337750680287443e+00, - .5839757648761716e-03, .8353154840714917e+00, .5844780624078450e-03, - .8368282133969516e+00, .5849714252682631e-03, .8383145120235179e+00, - .5854562952230521e-03, .8397756606357110e+00, .5859331255265216e-03, - .8412129747325485e+00, - .5864023847522156e-03, .8426278158130220e+00, .5868645610151844e-03, - .8440216037344282e+00, .5873201666349592e-03, .8453958303903652e+00, - .5877697432917324e-03, .8467520748664289e+00, .5882138677316644e-03, - .8480920202427393e+00, .5886531580803781e-03, .8494174722229419e+00, - .5890882808263732e-03, .8507303797787185e+00, .5895199585379871e-03, - .8520328580063178e+00, .5899489783783064e-03, .8533272133961881e+00, - .5903762014816018e-03, .8546159717171726e+00, .5908025732518324e-03, - .8559019087112308e+00, .5912291346377758e-03, .8571880837811911e+00, - .5916570344294526e-03, .8584778768299521e+00, .5920875426055483e-03, - .8597750283715609e+00, .5925220647400795e-03, .8610836829786467e+00, - .5929621574468788e-03, .8624084360518852e+00, .5934095448005555e-03, - .8637543837896255e+00, .5938661356200435e-03, .8651271760926207e+00, - .5943340414329835e-03, .8665330719519609e+00, .5948155948529893e-03, - .8679789966288171e+00, .5953133679941353e-03, .8694725996326263e+00, - .5958301904145430e-03, .8710223121296252e+00, .5963691659207649e-03, - .8726374019561603e+00, .5969336873744813e-03, .8743280238622816e+00, - .5975274484218217e-03, .8761052619650037e+00, .5981544508145503e-03, - .8779811606467382e+00, .5988190057157910e-03, .8799687393004150e+00, - .5995257270899495e-03, - .8820819854186045e+00, .6002795149823573e-03, .8843358195863941e+00, - .6010855262223838e-03, .8867460250263935e+00, .6019491298677465e-03, - .8893291335470804e+00, .6028758445922773e-03, .8921022591848045e+00, - .6038712552612013e-03, .8950828706648276e+00, .6049409062046725e-03, - .8982884942350033e+00, .6060901692668508e-03, .9017363396754307e+00, - .1481251565099711e-03, .1799742621307956e-03, .7143974934319647e-02, - .2078249765617697e-03, .3374626735466673e-01, .2322040770469374e-03, - .6836267972058510e-01, .2536281024389343e-03, .1056944648470500e+00, - .2725507603509361e-03, .1431611968300346e+00, .2893545952483257e-03, - .1794966519846322e+00, .3043571067937865e-03, .2141052583069300e+00, - .3178205747305427e-03, .2467445313185863e+00, .3299618049127232e-03, - .2773601392459256e+00, .3409606161517330e-03, .3059971101361032e+00, - .3509668551995601e-03, .3327508670011682e+00, .3601060630945735e-03, - .3577398618615326e+00, .3684840080409944e-03, .3810902489006329e+00, - .3761903012944965e-03, .4029274050222500e+00, .3833012841788339e-03, - .4233713978033811e+00, .3898823401138323e-03, .4425347439853034e+00, - .3959897539743794e-03, .4605214950272289e+00, .4016722146902933e-03, - .4774270820870889e+00, .4069720358522181e-03, .4933385831828130e+00, - .4119261525257769e-03, - .5083352115151812e+00, .4165669396400193e-03, .5224889054945915e+00, - .4209228874124991e-03, .5358649502937634e+00, .4250191616382618e-03, - .5485225906897057e+00, .4288780707755034e-03, .5605156131771370e+00, - .4325194571969843e-03, .5718928863819531e+00, .4359610264298928e-03, - .5826988554317172e+00, .4392186254392934e-03, .5929739898366225e+00, - .4423064788406665e-03, .6027551866407443e+00, .4452373902181403e-03, - .6120761317679944e+00, .4480229143725210e-03, .6209676230156103e+00, - .4506735052476993e-03, .6294578582946426e+00, .4531986434246486e-03, - .6375726926413187e+00, .4556069463824008e-03, .6453358673250855e+00, - .4579062641690959e-03, .6527692141203824e+00, .4601037626756183e-03, - .6598928375275065e+00, .4622059963377751e-03, .6667252774457851e+00, - .4642189717935211e-03, .6732836545324753e+00, .4661482037761131e-03, - .6795838002301146e+00, .4679987643218002e-03, .6856403732164480e+00, - .4697753262034514e-03, .6914669638252581e+00, .4714822013627870e-03, - .6970761878028088e+00, .4731233749983658e-03, .7024797706018147e+00, - .4747025358699538e-03, .7076886232711463e+00, .4762231032989864e-03, - .7127129108730295e+00, .4776882512767774e-03, .7175621142484538e+00, - .4791009300347118e-03, .7222450858541227e+00, .4804638853820701e-03, - .7267701003089459e+00, - .4817796760758937e-03, .7311449002133155e+00, .4830506894522046e-03, - .7353767377389203e+00, .4842791555179398e-03, .7394724124294618e+00, - .4854671596773276e-03, .7434383056023196e+00, .4866166542444491e-03, - .7472804116970708e+00, .4877294688748149e-03, .7510043668780048e+00, - .4888073200324911e-03, .7546154751637144e+00, .4898518195952196e-03, - .7581187323268813e+00, .4908644826877864e-03, .7615188477809879e+00, - .4918467348233061e-03, .7648202646474365e+00, .4927999184228891e-03, - .7680271781760355e+00, .4937252987761405e-03, .7711435526736958e+00, - .4946240694979417e-03, .7741731370801548e+00, .4954973575308488e-03, - .7771194793153748e+00, .4963462277370809e-03, .7799859395107068e+00, - .4971716871193750e-03, .7827757022247849e+00, .4979746887058557e-03, - .7854917877352522e+00, .4987561351304407e-03, .7881370624886681e+00, - .4995168819371097e-03, .7907142487831792e+00, .5002577406335545e-03, - .7932259337516524e+00, .5009794815172498e-03, .7956745777068556e+00, - .5016828362948059e-03, .7980625219048639e+00, .5023685005135441e-03, - .8003919957780823e+00, .5030371358225455e-03, .8026651236850512e+00, - .5036893720789472e-03, .8048839312204863e+00, .5043258093139596e-03, - .8070503511257529e+00, .5049470195719527e-03, .8091662288371395e+00, - .5055535486349787e-03, - .8112333277068590e+00, .5061459176442604e-03, .8132533339296184e+00, - .5067246246294598e-03, .8152278612058557e+00, .5072901459559465e-03, - .8171584551713140e+00, .5078429376997978e-03, .8190465976214947e+00, - .5083834369598832e-03, .8208937105586977e+00, .5089120631160979e-03, - .8227011600888023e+00, .5094292190426258e-03, .8244702601946616e+00, - .5099352922850141e-03, .8262022764129838e+00, .5104306562098391e-03, - .8278984294418413e+00, .5109156711358289e-03, .8295598987064962e+00, - .5113906854554846e-03, .8311878259120602e+00, .5118560367565149e-03, - .8327833186126263e+00, .5123120529527563e-03, .8343474538279233e+00, - .5127590534347159e-03, .8358812817402723e+00, .5131973502504269e-03, - .8373858295066677e+00, .5136272493279681e-03, .8388621052231878e+00, - .5140490517517615e-03, .8403111020816669e+00, .5144630551056335e-03, - .8417338027616508e+00, .5148695548966082e-03, .8431311841041218e+00, - .5152688460744951e-03, .8445042221173288e+00, .5156612246635426e-03, - .8458538973693004e+00, .5160469895237514e-03, .8471812008262565e+00, - .5164264442608728e-03,.8484871402011642e+00, .5167998993056541e-03, - .8497727468820885e+00, .5171676741845232e-03, .8510390835157447e+00, - .5175301000056107e-03, .8522872523277160e+00, .5178875221857676e-03, - .8535184042670900e+00, - .5182403034460151e-03, .8547337490696901e+00, .5185888271046153e-03, - .8559345663404898e+00, .5189335006986103e-03, .8571222177620127e+00, - .5192747599661662e-03, .8582981605412726e+00, .5196130732232652e-03, - .8594639622127785e+00, .5199489461690734e-03, .8606213169188581e+00, - .5202829271545004e-03, .8617720632905069e+00, .5206156129478311e-03, - .8629182040514101e+00, .5209476550295670e-03, .8640619274638366e+00, - .5212797664454193e-03, .8652056307266341e+00, .5216127292413131e-03, - .8663519454211874e+00, .5219474024967696e-03, .8675037650792340e+00, - .5222847309624981e-03, .8686642749148173e+00, .5226257542936992e-03, - .8698369837189167e+00, .5229716168515654e-03, .8710257578565097e+00, - .5233235780207398e-03, .8722348572285707e+00, .5236830229588920e-03, - .8734689729618574e+00, .5240514736547882e-03, .8747332664628638e+00, - .5244306001218837e-03, .8760334093141518e+00, .5248222314940908e-03, - .8773756232962860e+00, .5252283667175941e-03, .8787667195815746e+00, - .5256511844461572e-03, .8802141358619505e+00, .5260930516464654e-03, - .8817259698386895e+00, .5265565303044835e-03, .8833110071141399e+00, - .5270443814944088e-03, .8849787410860012e+00, .5275595659308863e-03, - .8867393819581020e+00, .5281052399771031e-03, .8886038514594998e+00, - .5286847459332971e-03, - .8905837593259870e+00, .5293015952926587e-03, .8926913570756628e+00, - .5299594435392922e-03, .8949394641477838e+00, .5306620549953031e-03, - .8973413611324083e+00, .5314132562256762e-03, .8999106446760794e+00, - .5322168766096216e-03, .9026610388027025e+00, .5330766749183085e-03, - .9056061579514983e+00, .5339962511354281e-03, .9087592181279729e+00, - .1291672658807919e-03, .1569411415132314e-03, .7144429374444041e-02, - .1812286696375032e-03, .3374884163870904e-01, .2024891487895646e-03, - .6836875906346668e-01, .2211729609091939e-03, .1057051970576302e+00, - .2376757078934563e-03, .1431775337300160e+00, .2523309440420044e-03, - .1795193851821314e+00, .2654155096114621e-03, .2141350485529856e+00, - .2771580968905830e-03, .2467819320733997e+00, .2877477478365611e-03, - .2774056154477370e+00, .2973412539386665e-03, .3060510531385813e+00, - .3060692727883761e-03, .3328136064982617e+00, .3140412687616450e-03, - .3578116754563008e+00, .3213494654089220e-03, .3811713698313008e+00, - .3280719982928522e-03, .4030180284424702e+00, .3342754323013638e-03, - .4234716859228214e+00, .3400167776073826e-03, .4426448303068433e+00, - .3453451109288780e-03, .4606414878637722e+00, .3503028857160415e-03, - .4775570675004032e+00, .3549269964559184e-03, .4934786274558236e+00, - .3592496478431822e-03, - .5084853632454121e+00, .3632990683734921e-03, .5226491973781846e+00, - .3671000992804959e-03, .5360354006553708e+00, .3706746830802694e-03, - .5487032048025572e+00, .3740422708473267e-03, .5607063844089743e+00, - .3772201633670793e-03, .5720937971957492e+00, .3802237982173855e-03, - .5829098782647340e+00, .3830669924186714e-03, .5931950878770883e+00, - .3857621484003172e-03, .6029863145180096e+00, .3883204295409269e-03, - .6123172361692740e+00, .3907519103608007e-03, .6212186432401899e+00, - .3930657055071256e-03, .6297187267546153e+00, .3952700809230814e-03, - .6378433353164356e+00, .3973725499905643e-03, .6456162041780895e+00, - .3993799569511753e-03, .6530591594781886e+00, .4012985495172340e-03, - .6601923004327613e+00, .4031340422649590e-03, .6670341619826434e+00, - .4048916721408514e-03, .6736018601298540e+00, .4065762471981460e-03, - .6799112219451941e+00, .4081921895038212e-03, .6859769020007800e+00, - .4097435730108617e-03, .6918124867754874e+00, .4112341570695012e-03, - .6974305883977158e+00, .4126674161504436e-03, .7028429289271262e+00, - .4140465662688992e-03, .7080604162333366e+00, .4153745885277149e-03, - .7130932124031323e+00, .4166542501385347e-03, .7179507954967295e+00, - .4178881232298605e-03, .7226420153762622e+00, .4190786017085115e-03, - .7271751442443414e+00, - .4202279164050269e-03, .7315579224557873e+00, .4213381487029441e-03, - .7357976001001488e+00, .4224112428257702e-03, .7399009747952365e+00, - .4234490169331078e-03, .7438744260815747e+00, .4244531731582231e-03, - .7477239467635279e+00, .4254253067028491e-03, .7514551715040853e+00, - .4263669140908001e-03, .7550734029462083e+00, .4272794006696848e-03, - .7585836356036648e+00, .4281640874393643e-03, .7619905777378661e+00, - .4290222172765655e-03, .7652986714139369e+00, .4298549606170237e-03, - .7685121109086968e+00, .4306634206495281e-03, .7716348596250679e+00, - .4314486380701255e-03, .7746706656513523e+00, .4322115954393903e-03, - .7776230760895890e+00, .4329532211809737e-03, .7804954502645794e+00, - .4336743932555310e-03, .7832909719139642e+00, .4343759425404994e-03, - .7860126604497781e+00, .4350586559430094e-03, .7886633813730524e+00, - .4357232792703970e-03, .7912458559151491e+00, .4363705198802944e-03, - .7937626699724827e+00, .4370010491300795e-03, .7962162823950203e+00, - .4376155046435118e-03, .7986090326833559e+00, .4382144924106579e-03, - .8009431481441662e+00, .4387985887356742e-03, .8032207505493939e+00, - .4393683420456565e-03, .8054438623405243e+00, .4399242745725549e-03, - .8076144124157677e+00, .4404668839190812e-03, .8097342415347859e+00, - .4409966445185832e-03, - .8118051073727768e+00, .4415140089980146e-03, .8138286892532131e+00, - .4420194094523807e-03, .8158065925862987e+00, .4425132586383796e-03, - .8177403530382282e+00, .4429959510943727e-03, .8196314404545940e+00, - .4434678641933102e-03, .8214812625597571e+00, .4439293591347870e-03, - .8232911684526717e+00, .4443807818820194e-03, .8250624519185151e+00, - .4448224640492010e-03, .8267963545745015e+00, .4452547237444166e-03, - .8284940688674631e+00, .4456778663730607e-03, .8301567409401316e+00, - .4460921854065215e-03, .8317854733825585e+00, .4464979631207512e-03, - .8333813278847675e+00, .4468954713092401e-03, .8349453278065194e+00, - .4472849719748584e-03, .8364784606800110e+00, .4476667180050050e-03, - .8379816806613994e+00, .4480409538345297e-03, .8394559109472592e+00, - .4484079161009533e-03, .8409020461724398e+00, .4487678342966111e-03, - .8423209548062871e+00, .4491209314224874e-03, .8437134815648469e+00, - .4494674246486925e-03, .8450804498574688e+00, .4498075259867541e-03, - .8464226642871850e+00, .4501414429791688e-03, .8477409132253626e+00, - .4504693794119635e-03, .8490359714824147e+00, .4507915360563808e-03, - .8503086030978187e+00, .4511081114462013e-03, .8515595642743328e+00, - .4514193026976681e-03, .8527896064831288e+00, .4517253063794774e-03, - .8539994797685749e+00, - .4520263194408489e-03, .8551899362836138e+00, .4523225402062811e-03, - .8563617340890786e+00, .4526141694462433e-03, .8575156412528867e+00, - .4529014115337412e-03, .8586524402878235e+00, .4531844756974208e-03, - .8597729329695807e+00, .4534635773826384e-03, .8608779455798124e+00, - .4537389397327130e-03, .8619683346221994e+00, .4540107952033793e-03, - .8630449930628203e+00, .4542793873242631e-03, .8641088571494663e+00, - .4545449726219747e-03, .8651609138678200e+00, .4548078227201481e-03, - .8662022090955665e+00, .4550682266323894e-03, .8672338565183648e+00, - .4553264932646083e-03, .8682570473740338e+00, .4555829541435220e-03, - .8692730610930815e+00, .4558379663881761e-03, .8702832769045586e+00, - .4560919159410250e-03, .8712891864758329e+00, .4563452210743556e-03, - .8722924076528336e+00, .4565983361864682e-03, .8732946993631147e+00, - .4568517558999058e-03, .8742979777371169e+00, .4571060194709263e-03, - .8753043334925269e+00, .4573617155151244e-03, .8763160506117581e+00, - .4576194870483323e-03, .8773356263222484e+00, .4578800368343567e-03, - .8783657923622515e+00, .4581441330213403e-03, .8794095374796469e+00, - .4584126150361641e-03, .8804701310663527e+00, .4586863996908342e-03, - .8815511477743261e+00, .4589664874357118e-03, .8826564928888149e+00, - .4592539686711794e-03, - .8837904281482389e+00, .4595500300013319e-03, .8849575975954920e+00, - .4598559602799827e-03, .8861630529202465e+00, .4601731562602071e-03, - .8874122776038270e+00, .4605031276134677e-03, .8887112090056589e+00, - .4608475010329713e-03, .8900662573321374e+00, .4612080230785231e-03, - .8914843202051330e+00, .4615865613575363e-03, .8929727913000981e+00, - .4619851035704269e-03, .8945395612571059e+00, .4624057538807515e-03, - .8961930087896581e+00, .4628507260045860e-03, .8979419796374420e+00, - .4633223323547168e-03, .8997957507473553e+00, .4638229685297288e-03, - .9017639768452591e+00, .4643550924143431e-03, .9038566164094044e+00, - .4649211971655587e-03, .9060838340132801e+00, .4655237774111018e-03, - .9084558761162183e+00, .4661652880954744e-03, .9109829176962647e+00, - .4668480955879464e-03, .9136748776971255e+00}; + // Recurrence parameters + AMREX_GPU_MANAGED amrex::Array1D recf{ + .1762962957651941e+00, .1067131485543800e+00, + .1296319693918818e+00, .6097984609869632e-02, .7296375286357569e-01, + .8749824867149327e-01, .6126949805354446e-02, .1026802330400501e+00, + .3026744779900850e-01, .5345766591735225e-01, .6421114488497465e-01, + .6297251335072349e-02, .7361067001944596e-01, .2954244012876854e-01, + .8450213007949955e-01, .6370198138618569e-01, .4102541073974864e-01, + .4936734181284644e-01, .6437548414781547e-02, .5655964819916140e-01, + .3008674068005620e-01, .6301337991392047e-01, .6092514503458917e-01, + .7122116739390528e-01, .1014508394981259e+00, .3256098772501858e-01, + .3923994550846150e-01, .6548791582739922e-02, .4499511886194148e-01, + .3061034821432499e-01, .5000269311882022e-01, .6157339578289546e-01, + .5465516336291797e-01, .9570538881974760e-01, .6104333020232396e-01, + .1406290220864037e+00, .2651417777294218e-01, .3199100352247176e-01, + .6637416338030012e-02, .3671473048471728e-01, .3104646653985547e-01, + .4080808506561111e-01, .6240780397840483e-01, .4441697436286914e-01, + .9608256539833336e-01, .4790790953491602e-01, .1314940925346221e+00, + .5299225195731577e-01, .1795490141555294e+00, .2203688946407306e-01, + .2661454798174795e-01, .6708509073973803e-02, .3056730958573840e-01, + .3140468274131318e-01, .3399153986085689e-01, .6314347647488826e-01, + .3698314358022203e-01, + .9706950916624359e-01, .3966494820191785e-01, .1312524251550016e+00, + .4237605842481057e-01, .1670258610104497e+00, .4651311259978263e-01, + .2174924541420837e+00, .1862250741526137e-01, .2250861576538788e-01, + .6766202022280821e-02, .2586805882924489e-01, .3170042346032810e-01, + .2877953008086195e-01, .6376714023863055e-01, .3131867762450776e-01, + .9801783524123061e-01, .3355864056201850e-01, .1322218594416999e+00, + .3560688231225300e-01, .1658724905539629e+00, .3777371673577270e-01, + .2016177039517425e+00, .4119698781191684e-01, .2539572842035754e+00, + .1595000101933615e-01, .1929098080329146e-01, .6813771091892661e-02, + .2218226060548395e-01, .3194763050768121e-01, .2468951849041972e-01, + .6429708643843554e-01, .2687566748685502e-01, .9885398134767074e-01, + .2879687047315825e-01, .1332911334324939e+00, .3051024265050759e-01, + .1666672556601528e+00, .3211180339134084e-01, .1993212628717513e+00, + .3387840798530223e-01, .2348117800966209e+00, .3672204698847085e-01, + .2881723275817451e+00, .1381614369504127e-01, .1671925338932986e-01, + .6853396714797705e-02, .1923405366588467e-01, .3215586472031486e-01, + .2141625996563439e-01, .6474907548155117e-01, .2331937590115891e-01, + .9958008772514044e-01, .2499024766114432e-01, .1342748583683893e+00, + .2647050763871464e-01, + .1677665086248348e+00, .2780637354179997e-01, .1998070962536277e+00, + .2908398701850636e-01, .2312827828857880e+00, .3054428937166170e-01, + .2663434084812225e+00, .3290759457513454e-01, .3198421010321994e+00, + .1209208337462717e-01, .1463956211973881e-01, .6886319232429428e-02, + .1684821591214353e-01, .3233043835607318e-01, .1876598514920064e-01, + .6513176017688395e-01, .2043905166732186e-01, .1002021458157551e+00, + .2190770330626050e-01, .1351369448238108e+00, .2320633429617816e-01, + .1688220571485906e+00, .2436655982458731e-01, .2008416611727759e+00, + .2542750723914090e-01, .2313613787046680e+00, .2646792773501215e-01, + .2616749611549993e+00, .2769967463189309e-01, .2964076499426887e+00, + .2970440766084731e-01, .3502117812643117e+00, .1067034715302655e-01, + .1292329710584654e-01, .6914320860943588e-02, .1487812037525849e-01, + .3248006428304434e-01, .1657652594868420e-01, .6546254336130322e-01, + .1805880263820550e-01, .1007449363462607e+00, .1936010074490956e-01, + .1358990057232774e+00, .2051007922030995e-01, .1697855056821405e+00, + .2153416689781703e-01, .2019295372474008e+00, .2245709430196045e-01, + .2322718220467692e+00, .2331275056513504e-01, .2612402870437151e+00, + .2417201314765524e-01, .2904095866946978e+00, .2521646587374857e-01, + .3246308095620147e+00, + .2690764435467064e-01, .3778240223542354e+00, .9487431939295813e-02, + .1149440138138981e-01, .6938125808908258e-02, .1323700105262745e-01, + .3260808020167218e-01, .1475188210924817e-01, .6574755356940067e-01, + .1607452560476730e-01, .1012162270929412e+00, .1723591531771676e-01, + .1365667423922086e+00, .1826211676183441e-01, .1706429091716792e+00, + .1917496536345655e-01, .2029443389633356e+00, .1999362278384748e-01, + .2333350798953319e+00, .2073811037471499e-01, .2619641661449880e+00, + .2143841440760416e-01, .2894413776906615e+00, .2215820736295387e-01, + .3175489053704050e+00, .2305270619849904e-01, .3512439576972030e+00, + .2449014264738941e-01, .4036179314586852e+00, .8494564197695063e-02, + .1029439196351078e-01, .6958406921839354e-02, .1185809158880236e-01, + .3271773184277712e-01, .1321815865055247e-01, .6599313162331371e-01, + .1440610601409755e-01, .1016249390468336e+00, .1544947770682643e-01, + .1371499803680846e+00, .1637143556780157e-01, .1713990070155131e+00, + .1719123774995229e-01, .2038574724036485e+00, .1792514377153798e-01, + .2343593316805466e+00, .1858798779956469e-01, .2629560717194659e+00, + .1919659343371288e-01, .2899296316580346e+00, .1977810373828767e-01, + .3160315643000932e+00, .2039024270914711e-01, .3432192271881122e+00, + .2116722465269759e-01, + .3765294846983478e+00, .2240833445471075e-01, .4283514372117345e+00, + .7648100953017721e-02, .9270847111494889e-02, .6976054938079860e-02, + .1068147039692487e-01, .3281359708712486e-01, .1190898600388846e-01, + .6620896361366048e-01, .1298157114442065e-01, .1019862089328133e+00, + .1392387354640439e-01, .1376687444923527e+00, .1475662479151471e-01, + .1720764656800079e+00, .1549702171989481e-01, .2046849615229637e+00, + .1615937354505817e-01, .2353135758405889e+00, .1675598207974404e-01, + .2639750061864973e+00, .1729863164965770e-01, .2908276346191939e+00, + .1780176282268598e-01, .3162404475076796e+00, .1828983612841132e-01, + .3410641528662292e+00, .1881415834433531e-01, .3673520724841440e+00, + .1948852933531380e-01, .4000529139809629e+00, .2055287002810484e-01, + .4505930922691549e+00, .6923848173158734e-02, .8394702950361005e-02, + .6991325631797234e-02, .9673911522111265e-02, .3289687833321025e-01, + .1078755757084805e-01, .6639729788616958e-01, .1176100014874140e-01, + .1023029830546846e+00, .1261643557454879e-01, .1381259991601194e+00, + .1337254080889024e-01, .1726770746288135e+00, .1404479965650065e-01, + .2054241214472704e+00, .1464602837670213e-01, .2361779701904081e+00, + .1518698551280871e-01, .2649344026216049e+00, .1567717541900471e-01, + .2918033340368942e+00, + .1612624123496420e-01, .3170079069341164e+00, .1654688879900881e-01, + .3409811920927984e+00, .1696136666824286e-01, .3646547307991162e+00, + .1741546145080310e-01, .3901537483439419e+00, .1800636597179543e-01, + .4223218228522266e+00, .1892881341268367e-01, .4717326233521751e+00, + .6298588439596636e-02, .7638030626687965e-02, .7004655851265844e-02, + .8803453943265294e-02, .3296982845467406e-01, .9818444950365933e-02, + .6656291057106479e-01, .1070595626475817e-01, .1025827278785117e+00, + .1148608766389635e-01, .1385316612194638e+00, .1217575810897931e-01, + .1732125747484649e+00, .1278899412440368e-01, .2060869881923743e+00, + .1333738432024735e-01, .2369597744170469e+00, .1383056388512692e-01, + .2658180187652428e+00, .1427674437223498e-01, .2927507447256686e+00, + .1468343958863289e-01, .3179214676099940e+00, .1505875998976432e-01, + .3415951393087426e+00, .1541407984395701e-01, .3642544652079210e+00, + .1576969712450036e-01, .3868951368176343e+00, .1616644053575092e-01, + .4116861214445555e+00, .1668748198434585e-01, .4433331570075596e+00, + .1749188724059570e-01, .4916033800451471e+00, .5754360678751824e-02, + .6979206263458857e-02, .7016389205940601e-02, .8045335113843407e-02, + .3303423464885706e-01, .8974185166510452e-02, .6670962735009836e-01, + .9786634336394069e-02, + .1028314890330009e+00, .1050097258572427e-01, .1388938643805943e+00, + .1113260003649783e-01, .1736928024956524e+00, .1169428623074936e-01, + .2066843246414360e+00, .1219657523409050e-01, .2376686083847098e+00, + .1264820000840307e-01, .2666274169278879e+00, .1305648757877945e-01, + .2936397261253015e+00, .1342781257742339e-01, .3188429723296673e+00, + .1376825401666917e-01, .3424305607919373e+00, .1408478812041018e-01, + .3646959159353649e+00, .1438768989133101e-01, .3861600014637602e+00, + .1469542216481714e-01, .4078642344326945e+00, .1504419066763009e-01, + .4319869811400004e+00, .1550494890247615e-01, .4630491704469774e+00, + .1620775053166640e-01, .5100139240423402e+00, .5278040811520425e-02, + .6402421198476983e-02, .7026749310824704e-02, .7381444032562888e-02, + .3309125386700502e-01, .8234685519924101e-02, .6683990648107069e-01, + .8981222939541469e-02, .1030531116670419e+00, .9637773923336657e-02, + .1392177117208699e+00, .1021841796444464e-01, .1741238287384007e+00, + .1073483180895483e-01, .2072226942408981e+00, .1119665624742548e-01, + .2383105498941010e+00, .1161186412382382e-01, .2673653866792523e+00, + .1198709958412187e-01, .2944607083863120e+00, .1232800940556657e-01, + .3197217653056301e+00, .1263963481803662e-01, .3433101656487968e+00, + .1292700918588335e-01, + .3654364911202174e+00, .1319625157476125e-01, .3864151426812009e+00, + .1345671217793918e-01, .4067976665874104e+00, .1372517143690529e-01, + .4276578990766819e+00, .1403368592830970e-01, .4511616717492440e+00, + .1444284729184994e-01, .4816264620225250e+00, .1505946839641039e-01, + .5272614695163532e+00, .4487666665675140e-02, .5444990141910759e-02, + .7044130283096086e-02, .6279049188091140e-02, .3318723192008640e-01, + .7006368632847780e-02, .6706002621750721e-01, .7643068862200888e-02, + .1034291291409337e+00, .8203282681027361e-02, .1397696656221023e+00, + .8698916419500412e-02, .1748620369064401e+00, .9139847522019589e-02, + .2081495587015637e+00, .9534232617493163e-02, .2394220617811718e+00, + .9888812556097355e-02, .2686520584410767e+00, .1020918148777924e-01, + .2959071488424056e+00, .1050001965367601e-01, .3213027967445414e+00, + .1076530680194359e-01, .3449782554868110e+00, .1100855051222504e-01, + .3670882760306343e+00, .1123309242673613e-01, .3878099745344409e+00, + .1144260835071195e-01, .4073711108103572e+00, .1164201330179298e-01, + .4261157327362403e+00, .1183914191832676e-01, .4446387149497601e+00, + .1204780719832178e-01, .4640454326093743e+00, .1229306401377462e-01, + .4864269389633110e+00, .1261927726417314e-01, .5156669165861498e+00, + .1309943489239065e-01, + .5586255185473764e+00, .3862975224403902e-02, .4687945053900655e-02, + .7058035858061096e-02, .5407041834964283e-02, .3326430524210259e-01, + .6034411186094848e-02, .6723753885455682e-01, .6583863333832890e-02, + .1037337930420006e+00, .7067509494777436e-02, .1402191813726617e+00, + .7495554804930935e-02, .1754665679972444e+00, .7876466939414612e-02, + .2089130635289459e+00, .8217239718909702e-02, .2403434536707747e+00, + .8523653399761676e-02, .2697261364777181e+00, .8800501778860810e-02, + .2971251237465357e+00, .9051782217229110e-02, .3226519291781493e+00, + .9280855010852164e-02, .3464394048134897e+00, .9490584189896422e-02, + .3686285665457733e+00, .9683478271871005e-02, .3893644369335397e+00, + .9861860805271805e-02, .4088004145802082e+00, .1002812139311295e-01, + .4271141176574624e+00, .1018513471380169e-01, .4445422442202590e+00, + .1033699621003472e-01, .4614490459910935e+00, .1049031549106710e-01, + .4784539901229190e+00, .1065642152893932e-01, .4966599824214358e+00, + .1085488420737215e-01, .5180410345089337e+00, .1111843432827249e-01, + .5460483341177160e+00, .1149782035140485e-01, .5864065338958527e+00, + .3360562419718235e-02, .4078879630499024e-02, .7069329073407106e-02, + .4705262542208223e-02, .3332708647415080e-01, .5251963413756800e-02, + .6738262760022461e-01, + .5730951315737387e-02, .1039837553534775e+00, .6152725177551053e-02, + .1405895253957461e+00, .6526132611753048e-02, .1759668677811218e+00, + .6858515620324401e-02, .2095479655628776e+00, .7155939019582245e-02, + .2411135586103733e+00, .7423415917481789e-02, .2706287495885053e+00, + .7665103884932816e-02, .2981548371545775e+00, .7884467592308588e-02, + .3238009173107087e+00, .8084411667986876e-02, .3476971265301733e+00, + .8267390411961632e-02, .3699801584879876e+00, .8435502610509800e-02, + .3907862310698117e+00, .8590582044778893e-02, .4102493117101150e+00, + .8734298913651078e-02, .4285042785031379e+00, .8868296093454296e-02, + .4456965009415761e+00, .8994399398069297e-02, .4620016328614911e+00, + .9114966064926033e-02, .4776628155317611e+00, .9233473962579847e-02, + .4930576673885005e+00, .9355505324217098e-02, .5088149715467647e+00, + .9490326792694050e-02, .5260104590494338e+00, .9653243364999375e-02, + .5464780715474396e+00, .9868600991484903e-02, .5732601989067468e+00, + .1017225716053114e-01, .6111363239215825e+00, .2950437825487400e-02, + .3581555112941687e-02, .7078620126622295e-02, .4132082643231012e-02, + .3337886298886408e-01, .4612740002118506e-02, .6750261702445300e-01, + .5034004128539568e-02, .1041911190752577e+00, .5405066674282486e-02, + .1408978061674918e+00, + .5733674167146439e-02, .1763848697593524e+00, .6026255228800488e-02, + .2100805343046851e+00, .6288120524548417e-02, .2417622608971423e+00, + .6523660186046708e-02, .2713924596018528e+00, .6736515451660314e-02, + .2990302271326234e+00, .6929720582831246e-02, .3247828257866806e+00, + .7105817882799941e-02, .3487787217481978e+00, .7266950671260499e-02, + .3711526971215219e+00, .7414939513031372e-02, .3920379717842592e+00, + .7551347241996011e-02, .4115626674210771e+00, .7677539108440712e-02, + .4298493831220752e+00, .7794746313920410e-02, .4470176901244603e+00, + .7904145004284749e-02, .4631903418970273e+00, .8006969465604538e-02, + .4785052149162398e+00, .8104689159161024e-02, .4931367316839517e+00, + .8199295885823026e-02, .5073330960096394e+00, .8293770604485683e-02, + .5214794128662904e+00, .8392826136597125e-02, .5362017345344410e+00, + .8504035938797334e-02, .5525322098044688e+00, .8639408222270374e-02, + .5721561451757253e+00, .8817216208331321e-02, .5977434938944347e+00, + .9063189668758037e-02, .6332939739614603e+00, .2611205692460249e-02, + .3170101091465017e-02, .7086356419628467e-02, .3657766349841741e-02, + .3342206181054271e-01, .4083661809252030e-02, .6760295824860309e-01, + .4457037354538724e-02, .1043649740346678e+00, .4786009222605838e-02, + .1411570048315963e+00, + .5077417957619811e-02, .1767374059456163e+00, .5336940476209487e-02, + .2105311844047106e+00, .5569266597573038e-02, .2423131187370251e+00, + .5778273412183262e-02, .2720433970782992e+00, .5967176862421978e-02, + .2997792878733318e+00, .6138656970674597e-02, .3256265499647623e+00, + .6294959076405515e-02, .3497123813254361e+00, .6437975105563999e-02, + .3721703830438909e+00, .6569309029799851e-02, .3931323996098995e+00, + .6690330403814164e-02, .4127244218331418e+00, .6802219694622686e-02, + .4310650456887266e+00, .6906009314473870e-02, .4482657882348953e+00, + .7002625080460826e-02, .4644331547605672e+00, .7092934548851317e-02, + .4796729107857300e+00, .7177811732959676e-02, .4940976831610963e+00, + .7258232689273568e-02, .5078399409574430e+00, .7335424050171227e-02, + .5210737517163408e+00, .7411097366633641e-02, .5340506436534539e+00, + .7487815663348852e-02, .5471575324915496e+00, .7569550927915151e-02, + .5610077596302204e+00, .7662488506257662e-02, .5765785117760304e+00, + .7776079157718089e-02, .5954049494922431e+00, .7924148666854938e-02, + .6198219542319461e+00, .8125409481841734e-02, .6531839888628567e+00, + .2329161903934607e-02, .2827942346666575e-02, .7092767801324573e-02, + .3263256653829519e-02, .3345792087848227e-01, .3643524065941897e-02, + .6768640663901933e-01, + .3976979208186409e-02, .1045098632090649e+00, .4270848280167040e-02, + .1413735187729310e+00, .4531221910361700e-02, .1770326285691667e+00, + .4763154723278143e-02, .2109095929304028e+00, .4970822485283018e-02, + .2427770065864133e+00, .5157677387973698e-02, .2725932360325259e+00, + .5326583047275474e-02, .3004140385861841e+00, .5479926007282439e-02, + .3263439258620141e+00, .5619705807004115e-02, .3505090634425326e+00, + .5747607114086801e-02, .3730421698484556e+00, .5865057476337201e-02, + .3940742505245702e+00, .5973273864880296e-02, .4137303052977993e+00, + .6073300781079440e-02, .4321274134643955e+00, .6166042448892977e-02, + .4493743356584487e+00, .6252291618234036e-02, .4655722399143190e+00, + .6332757862946729e-02, .4808165109947856e+00, .6408099103723341e-02, + .4951999355274510e+00, .6478961616347051e-02, .5088179499753192e+00, + .6546036269964925e-02, .5217771724376283e+00, .6610142518258857e-02, + .5342092003559118e+00, .6672357066182766e-02, .5462927399000752e+00, + .6734211186973384e-02, .5582886150793852e+00, .6797988292026415e-02, + .5705940457094262e+00, .6867157346618580e-02, .5838243594874886e+00, + .6946966207628190e-02, .5989305413025341e+00, .7045163972244657e-02, + .6173557330297905e+00, .7172668498534273e-02, .6412138054673769e+00, + .7343669551813224e-02, + .6734212283950197e+00, .2088962222558656e-02, .2536501141538391e-02, + .7098312096014856e-02, .2927174164471204e-02, .3348897507192802e-01, + .3268517695916878e-02, .6775879346915350e-01, .3567904939390041e-02, + .1046357814625728e+00, .3831806772332035e-02, .1415620734408565e+00, + .4065677361393518e-02, .1772903102475344e+00, .4274043151934446e-02, + .2112406912998520e+00, .4460643560808929e-02, .2431839618927255e+00, + .4628570053481958e-02, .2730769378663360e+00, .4780387068478273e-02, + .3009740811016449e+00, .4918231891978967e-02, .3269788261694700e+00, + .5043895306797768e-02, .3512164460435231e+00, .5158886125836192e-02, + .3738189139504120e+00, .5264482738771292e-02, .3949165867949340e+00, + .5361774417899160e-02, .4146338301275897e+00, .5451694687903237e-02, + .4330869551935628e+00, .5535048699155984e-02, .4503835468466499e+00, + .5612536310885108e-02, .4666226835980815e+00, .5684772523136652e-02, + .4818958265481784e+00, .5752307033652531e-02, .4962883637349025e+00, + .5815645095778566e-02, .5098819947919942e+00, .5875272604331699e-02, + .5227583713586083e+00, .5931689562795883e-02, .5350047139508995e+00, + .5985457948104635e-02, .5467225528673463e+00, .6037272660724469e-02, + .5580413411348073e+00, .6088067820748090e-02, .5691395094905580e+00, + .6139174903693435e-02, + .5802765872262356e+00, .6192552890264469e-02, .5918411775133858e+00, + .6251110114702117e-02, .6044203697962170e+00, .6319123951993900e-02, + .6188952404877303e+00, .6402719127039078e-02, .6365612063366765e+00, + .6510255774185010e-02, .6592545134576846e+00, .6652267840556133e-02, + .6894261807467007e+00, .1884070525273232e-02, .2287865166522269e-02, + .7103061833161608e-02, .2640414555924009e-02, .3351561092037226e-01, + .2948504867845529e-02, .6782096720073962e-01, .3218776897022670e-02, + .1047441025101927e+00, .3457059211747976e-02, .1417245576749319e+00, + .3668264712145178e-02, .1775127832127863e+00, .3856470649104565e-02, + .2115271336150133e+00, .4025045325158119e-02, .2435368006995073e+00, + .4176773382240289e-02, .2734972927884814e+00, .4313964750721690e-02, + .3014619731636417e+00, .4438544635664399e-02, .3275333564649527e+00, + .4552126174118954e-02, .3518359485899692e+00, .4656068554335920e-02, + .3745010840861863e+00, .4751523397588311e-02, .3956585819539499e+00, + .4839471843717534e-02, .4154323324012205e+00, .4920754357241174e-02, + .4339381722015443e+00, .4996094895419632e-02, .4512831048238278e+00, + .5066120791624743e-02, .4675653273310193e+00, .5131379519337958e-02, + .4828747738428288e+00, .5192353422296487e-02, .4972940502928434e+00, + .5249473538511721e-02, + .5108997625078284e+00, .5303133835275671e-02, .5237643599692746e+00, + .5353707549485549e-02, .5359587556465524e+00, .5401567951803124e-02, + .5475561617516223e+00, .5447116802332092e-02, .5586378279840697e+00, + .5490825128586838e-02, .5693017116602867e+00, .5533292803086976e-02, + .5796755768842047e+00, .5575335692614607e-02, .5899366290511978e+00, + .5618111542531525e-02, .6003405110877628e+00, .5663297103480300e-02, + .6112631579002907e+00, .5713326390293707e-02, .6232591473997167e+00, + .5771686951858539e-02, .6371386281547686e+00, .5843235308872718e-02, + .6540591245646711e+00, .5934415308321717e-02, .6756138475691030e+00, + .6053127455671619e-02, .7038679036965546e+00, .1708003175642380e-02, + .2074181532622547e-02, .7107154835723396e-02, .2393937473496849e-02, + .3353858755734360e-01, .2673414535955727e-02, .6787466315584890e-01, + .2918625868457997e-02, .1048377783441727e+00, .3134849526067874e-02, + .1418652820405583e+00, .3326534476511183e-02, .1777057753498972e+00, + .3497372950002969e-02, .2117760550049606e+00, .3650415148383601e-02, + .2438439995727389e+00, .3788182708532486e-02, .2738640090744446e+00, + .3912767381261045e-02, .3018885114907114e+00, .4025912539016479e-02, + .3280192335266340e+00, .4129078986309924e-02, .3523800195135267e+00, + .4223497595500826e-02, + .3751016505461964e+00, .4310211297602812e-02, .3963134824357808e+00, + .4390108627214284e-02, .4161390116668366e+00, .4463950627129625e-02, + .4346937216368967e+00, .4532392561972495e-02, .4520842562952224e+00, + .4596001602217271e-02, .4684083677796514e+00, .4655271425546727e-02, + .4837553218910148e+00, .4710634539896850e-02, .4982065930947042e+00, + .4762473060977909e-02, .5118367810144925e+00, .4811128680431732e-02, + .5247147588413267e+00, .4856912649796014e-02, .5369051384586530e+00, + .4900116799220620e-02, .5484702216816450e+00, .4941026937249812e-02, + .5594727154468603e+00, .4979940477837468e-02, .5699796357324364e+00, + .5017190859382927e-02, .5800680268418966e+00, .5053182300865962e-02, + .5898333966076153e+00, .5088439691236800e-02, .5994021272105722e+00, + .5123679830879367e-02, .6089495614023648e+00, .5159911463507254e-02, + .6187259309040364e+00, .5198571556852845e-02, .6290926122189227e+00, + .5241701843449486e-02, .6405709220757223e+00, .5292158145073340e-02, + .6539038212088008e+00, .5353817484714892e-02, .6701255576222123e+00, + .5431693560278526e-02, .6906222214439113e+00, .5531783368314496e-02, + .7171434625046844e+00, .1486821222610860e-02, .1805710570607849e-02, + .7112315426865264e-02, .2084226678642758e-02, .3356758851849525e-01, + .2327708403877407e-02, + .6794252207314784e-01, .2541382628281658e-02, .1049563283476954e+00, + .2729837665345000e-02, .1420436509870845e+00, .2896941194350830e-02, + .1779508117794810e+00, .3045903028705765e-02, .2120926886975343e+00, + .3179374802697815e-02, .2442355417695174e+00, .3299548613427395e-02, + .2743324022628396e+00, .3408242823717034e-02, .3024345386679296e+00, + .3506972940214846e-02, .3286426953033458e+00, .3597008842757047e-02, + .3530798855126308e+00, .3679420554768286e-02, .3758761896368122e+00, + .3755114750481509e-02, .3971603743636597e+00, .3824863905497256e-02, + .4170554403005484e+00, .3889329651040080e-02, .4356764468047173e+00, + .3949081575434511e-02, .4531296561693286e+00, .4004612453985609e-02, + .4695124355979618e+00, .4056350682593341e-02, .4849135873526999e+00, + .4104670535603563e-02, .4994139167345992e+00, .4149900758174290e-02, + .5130869342770428e+00, .4192331932996859e-02, .5259996460201358e+00, + .4232223028377952e-02, .5382134282701107e+00, .4269807540393116e-02, + .5497850203277219e+00, .4305299690448572e-02, .5607677074343013e+00, + .4338901239307418e-02, .5712128128876574e+00, .4370809641681970e-02, + .5811716792241682e+00, .4401228508048884e-02, .5906984004679025e+00, + .4430381681233268e-02, .5998536784140458e+00, .4458532691684085e-02, + .6087103236556506e+00, + .4486011931533010e-02, .6173611125584528e+00, .4513254549169507e-02, + .6259299431307766e+00, .4540852685066905e-02, .6345874840856066e+00, + .4569625913830092e-02, .6435727138959286e+00, .4600712887286172e-02, + .6532217324580875e+00, .4635683708228730e-02, .6640046346388578e+00, + .4676663849565939e-02, .6765693546213282e+00, .4726442410018883e-02, + .6917869917669843e+00, .4788505706770704e-02, .7107844374668939e+00, + .4866891449054713e-02, .7349355366345482e+00, .1306017463771605e-02, + .1586222301823758e-02, .7116548254584538e-02, .1830990793066982e-02, + .3359140173567671e-01, .2045006139498853e-02, .6799831246271334e-01, + .2232854278235691e-02, .1050539332243899e+00, .2398561178839865e-02, + .1421907384347976e+00, .2545520579058178e-02, .1781532257250431e+00, + .2676548965485182e-02, .2123547392925449e+00, .2793973015829898e-02, + .2445602455405584e+00, .2899716152387136e-02, .2747216803842120e+00, + .2995373840546507e-02, .3028893817005614e+00, .3082275794427197e-02, + .3291633014860622e+00, .3161536205810221e-02, .3536657782024154e+00, + .3234093916059993e-02, .3765263180987164e+00, .3300744456546394e-02, + .3978732008486888e+00, .3362165629048766e-02, .4178290151302299e+00, + .3418937992980868e-02, .4365084718269216e+00, .3471561346521851e-02, + .4540175351893392e+00, + .3520468055585971e-02, .4704533078136206e+00, .3566033899133432e-02, + .4859043358175601e+00, .3608586955892009e-02, .5004511375120722e+00, + .3648414949109787e-02, .5141668418466542e+00, .3685771386301219e-02, + .5271178746069831e+00, .3720880775408019e-02, .5393646641028532e+00, + .3753943164375919e-02, .5509623620882760e+00, .3785138236518451e-02, + .5619615952404358e+00, .3814629199517684e-02, .5724092815186362e+00, + .3842566733485300e-02, .5823495672538734e+00, .3869093316887355e-02, + .5918249678197956e+00, .3894348333795344e-02, .6008778302882713e+00, + .3918474488962536e-02, .6095522840022940e+00, .3941626226723230e-02, + .6178969082896937e+00, .3963981072925327e-02, .6259684294183701e+00, + .3985755098069792e-02, .6338368642128979e+00, .4007224021775936e-02, + .6415926549632834e+00, .4028751796394626e-02, .6493564801329609e+00, + .4050828701392520e-02, .6572925493481835e+00, .4074120789204574e-02, + .6656262309872097e+00, .4099531432075899e-02, .6746666723127143e+00, + .4128272797582476e-02, .6848343774930394e+00, .4161938830162795e-02, + .6966920189552035e+00, .4202559743668019e-02, .7109733150553114e+00, + .4252599514137185e-02, .7285986885865631e+00, .4314833901724070e-02, + .7506571441023483e+00, .1156343000755387e-02, .1404504257957441e-02, + .7120061440091347e-02, + .1621310545540372e-02, .3361118414788869e-01, .1810903712325119e-02, + .6804470745318069e-01, .1977340288814310e-02, .1051351961493040e+00, + .2124181703071103e-02, .1423133589772792e+00, .2254430165931555e-02, + .1783222117476625e+00, .2370577235911165e-02, .2125738546054181e+00, + .2474681149731246e-02, .2448322054772776e+00, .2568443387429520e-02, + .2750483122588739e+00, .2653275289328116e-02, .3032717571879833e+00, + .2730353093366796e-02, .3296018469202774e+00, .2800662377663822e-02, + .3541603675689819e+00, .2865033605362301e-02, .3770763523850850e+00, + .2924170474532069e-02, .3984776764701321e+00, .2978672551304409e-02, + .4184865833334669e+00, .3029053394756756e-02, .4372174902153924e+00, + .3075755134140899e-02, .4547761117084665e+00, .3119160251996799e-02, + .4712593365381469e+00, .3159601161354295e-02, .4867555224942895e+00, + .3197368036290039e-02, .5013450107382228e+00, .3232715256012342e-02, + .5151007425806035e+00, .3265866747398978e-02, .5280889117936882e+00, + .3297020454653708e-02, .5403696166527656e+00, .3326352123823280e-02, + .5519974959907685e+00, .3354018561785408e-02, .5630223474016425e+00, + .3380160512425799e-02, .5734897364461758e+00, .3404905286403203e-02, + .5834416154573392e+00, .3428369285319778e-02, .5929169809805325e+00, + .3450660577239604e-02, + .6019526114875673e+00, .3471881710106394e-02, .6105839432336187e+00, + .3492132995268978e-02, .6188461635645998e+00, .3511516558294448e-02, + .6267756293962285e+00, .3530141542180836e-02, .6344117559126738e+00, + .3548130962196775e-02, .6417995687010485e+00, .3565630852851213e-02, + .6489931729721409e+00, .3582822510857449e-02, .6560604660107810e+00, + .3599938804777734e-02, .6630894993854867e+00, .3617285646093928e-02, + .6701969730666828e+00, .3635269699036237e-02, .6775393849143700e+00, + .3654433055424882e-02, .6853273049469121e+00, .3675494570182433e-02, + .6938429782822218e+00, .3699395273559710e-02, .7034607793792287e+00, + .3727340922414418e-02, .7146686166221225e+00, .3760827388752240e-02, + .7280857713064263e+00, .3801623782166765e-02, .7444684055765861e+00, + .3851675608889073e-02, .7646881040691488e+00, .1031010001534118e-02, + .1252325311246044e-02, .7123010369617354e-02, .1445699377070109e-02, + .3362780174930066e-01, .1614821702453833e-02, .6808371387504373e-01, + .1763306316297053e-02, .1052035845952689e+00, .1894326321527065e-02, + .1424166653656900e+00, .2010556629704488e-02, .1784647514196653e+00, + .2114217175592618e-02, .2127589198858749e+00, .2207141797804957e-02, + .2450622274788554e+00, .2290846453223580e-02, .2753249929535957e+00, + .2366588574329418e-02, + .3035961777269406e+00, .2435416111636774e-02, .3299745572968218e+00, + .2498207136828419e-02, .3545814616992661e+00, .2555701517785104e-02, + .3775455317600242e+00, .2608526182258946e-02, .3989943047683779e+00, + .2657215287010062e-02, .4190497337604562e+00, .2702226368977643e-02, + .4378259868084232e+00, .2743953334055468e-02, .4554285653702798e+00, + .2782736954335406e-02, .4719541760694932e+00, .2818873396984337e-02, + .4874910203110806e+00, .2852621192436532e-02, .5021193021763500e+00, + .2884206960364913e-02, .5159118365654818e+00, .2913830143454304e-02, + .5289346889752990e+00, .2941666946802540e-02, .5412478085861132e+00, + .2967873641281116e-02, .5529056351590590e+00, .2992589359741792e-02, + .5639576722484762e+00, .3015938493650994e-02, .5744490272864715e+00, + .3038032783280771e-02, .5844209250482745e+00, .3058973186216636e-02, + .5939112061179864e+00, .3078851606347056e-02, .6029548271815797e+00, + .3097752568780461e-02, .6115843860580712e+00, .3115754935792624e-02, + .6198307020754208e+00, .3132933775825234e-02, .6277234924693847e+00, + .3149362522988406e-02, .6352921987752219e+00, .3165115600029473e-02, + .6425670346395947e+00, .3180271725033977e-02, .6495803491305275e+00, + .3194918182718492e-02, .6563684284758635e+00, .3209156415539186e-02, + .6629738949529550e+00, + .3223109375845204e-02, .6694489043071365e+00, .3236931170179888e-02, + .6758593906225592e+00, .3250819601641628e-02, .6822906541085610e+00, + .3265032236292007e-02, .6888546193197504e+00, .3279906508904962e-02, + .6956990815908923e+00, .3295884006098741e-02, .7030191567938097e+00, + .3313538195666039e-02, .7110708644516797e+00, .3333603169205194e-02, + .7201861618009667e+00, .3356997989054186e-02, .7307875953685270e+00, + .3384836571738381e-02, .7433987921789071e+00, .3418406731492194e-02, + .7586440923075351e+00, .3459095390889103e-02, .7772269308571649e+00, + .9250365544833106e-03, .1123642957047639e-02, .7125507954787448e-02, + .1297191729022396e-02, .3364188485222631e-01, .1448990578148682e-02, + .6811679517715986e-01, .1582279947362813e-02, .1052616326176499e+00, + .1699905063056458e-02, .1425044323407192e+00, .1804264479385807e-02, + .1785859728026249e+00, .1897348784865108e-02, .2129164803933608e+00, + .1980802350907045e-02, .2452582966079122e+00, .2055984495008354e-02, + .2755611351402767e+00, .2124022707017878e-02, .3038734422531415e+00, + .2185856628127736e-02, .3302935522984499e+00, .2242273566275012e-02, + .3549424157624133e+00, .2293936902368478e-02, .3779483458160068e+00, + .2341408747104221e-02, .3994385963604223e+00, .2385168029019629e-02, + .4195348752453025e+00, + .2425624979060079e-02, .4383511386477932e+00, .2463132778750725e-02, + .4559927053277270e+00, .2497996973377256e-02, .4725561248235422e+00, + .2530483119020393e-02, .4881294636884907e+00, .2560823028544199e-02, + .5027928098555960e+00, .2589219901343181e-02, .5166188766435952e+00, + .2615852559843530e-02, .5296736371549673e+00, .2640878968300298e-02, + .5420169498193963e+00, .2664439173073012e-02, .5537031542330661e+00, + .2686657775798838e-02, .5647816278134981e+00, .2707646029843779e-02, + .5752973009271112e+00, .2727503634730079e-02, .5852911327970665e+00, + .2746320291944519e-02, .5948005537838443e+00, .2764177077984035e-02, + .6038598823048999e+00, .2781147686318178e-02, .6125007272671443e+00, + .2797299589001256e-02, .6207523898606690e+00, .2812695171020565e-02, + .6286422822922934e+00, .2827392896389240e-02, .6361963859104227e+00, + .2841448574941446e-02, .6434397776056558e+00, .2854916813399088e-02, + .6503972618317222e+00, .2867852754331386e-02, .6570941566018360e+00, + .2880314232961717e-02, .6635572959395679e+00, .2892364515113282e-02, + .6698163290468718e+00, .2904075820167642e-02, .6759054182903871e+00, + .2915533879795195e-02, .6818654639717365e+00, .2926843832981620e-02, + .6877470127613112e+00, .2938137802322835e-02, .6936140357564597e+00, + .2949584518825127e-02, + .6995487849121559e+00, .2961401330692262e-02, .7056579402322907e+00, + .2973868789530239e-02, .7120802208967371e+00, .2987347661611534e-02, + .7189955103325420e+00, .3002297518260188e-02, .7266352712733982e+00, + .3019294818352010e-02, .7352935018498777e+00, .3039046378540213e-02, + .7453365750657752e+00, .3062391179964571e-02, .7572088751614536e+00, + .3090279763155639e-02, .7714291475982730e+00, .3123717004293759e-02, + .7885701646946724e+00, .8345540180276686e-03, .1013764009388037e-02, + .7127645881665573e-02, .1170376416196646e-02, .3365394644507796e-01, + .1307373442880687e-02, .6814514556190448e-01, .1427676957022642e-02, + .1053114143093287e+00, .1533852566639599e-02, .1425797600037836e+00, + .1628063138328361e-02, .1786901034175123e+00, .1712103666468225e-02, + .2130519545476170e+00, .1787456941371129e-02, .2454270534974888e+00, + .1855348698944282e-02, .2757646057348834e+00, .1916795617374952e-02, + .3041126250272165e+00, .1972644976800254e-02, .3305690752776119e+00, + .2023606687518786e-02, .3552545878917464e+00, .2070278907560604e-02, + .3782971999927905e+00, .2113168475544262e-02, .3998239259305988e+00, + .2152707223367783e-02, .4199562653334393e+00, .2189265039122685e-02, + .4388079933534241e+00, .2223160371923681e-02, .4564842715530542e+00, + .2254668720923272e-02, + .4730815132757386e+00, .2284029531207622e-02, .4886876674022503e+00, + .2311451825653930e-02, .5033827203854437e+00, .2337118829323729e-02, + .5172392978550550e+00, .2361191787080918e-02, .5303232962672809e+00, + .2383813132113577e-02, .5426945049786824e+00, .2405109129935129e-02, + .5544071973678512e+00, .2425192096951206e-02, .5655106807683926e+00, + .2444162273064263e-02, .5760498017810869e+00, .2462109412745146e-02, + .5860654077087350e+00, .2479114147565534e-02, .5955947674756841e+00, + .2495249164658244e-02, .6046719571441241e+00, .2510580239462893e-02, + .6133282164799120e+00, .2525167157099261e-02, .6215922842757839e+00, + .2539064554606323e-02, .6294907215579771e+00, .2552322716028421e-02, + .6370482335961646e+00, .2564988353967443e-02, .6442880040095037e+00, + .2577105414898926e-02, .6512320574262512e+00, .2588715951514404e-02, + .6579016713460415e+00, .2599861113932935e-02, .6643178633382018e+00, + .2610582323220381e-02, .6705019867831056e+00, .2620922705689986e-02, + .6764764773431096e+00, .2630928885293276e-02, .6822658035386095e+00, + .2640653254172355e-02, .6878976884216645e+00, .2650156867702621e-02, + .6934046853762110e+00, .2659513138546438e-02, .6988262090327137e+00, + .2668812530675645e-02, .7042111407137301e+00, .2678168471535181e-02, + .7096211435207562e+00, + .2687724694622147e-02, .7151348288632315e+00, .2697664171457851e-02, + .7208529025232651e+00, .2708219651065415e-02, .7269043646867752e+00, + .2719685534125355e-02, .7334537129952923e+00, .2732430278157871e-02, + .7407088522578688e+00, .2746907645451310e-02, .7489289818382320e+00, + .2763663754705104e-02, .7584310317783358e+00, .2783335043530471e-02, + .7695921849731747e+00, .2806630086397274e-02, .7828446706602086e+00, + .2834286424739216e-02, .7986575762535248e+00, .7568003719318281e-03, + .9193373558789463e-03, .7129483255703461e-02, .1061389190056637e-02, + .3366431715745472e-01, .1185658720812506e-02, .6816953450862767e-01, + .1294794350315917e-02, .1053542656584974e+00, .1391121645368222e-02, + .1426446444034435e+00, .1476601139740284e-02, .1787798638427945e+00, + .1552859914551620e-02, .2131688271751633e+00, .1621242048290884e-02, + .2455727658693272e+00, .1682858604168091e-02, .2759404560655418e+00, + .1738631136850422e-02, .3043195464558018e+00, .1789327643414803e-02, + .3308076883028777e+00, .1835591597189766e-02, .3555252435875009e+00, + .1877965170693660e-02, .3786000160301540e+00, .1916907758736738e-02, + .4001588169674569e+00, .1952810766576543e-02, .4203229689645817e+00, + .1986009452068925e-02, .4392060925299616e+00, .2016792448794289e-02, + .4569132141578328e+00, + .2045409461693157e-02, .4735406293653057e+00, .2072077518345742e-02, + .4891761844801786e+00, .2096986074148179e-02, .5038997769424400e+00, + .2120301203878496e-02, .5177839552843484e+00, .2142169061433792e-02, + .5308945491240521e+00, .2162718750455528e-02, .5432912893815535e+00, + .2182064718440740e-02, .5550283971155782e+00, .2200308763672422e-02, + .5661551304354499e+00, .2217541726297687e-02, .5767162856210821e+00, + .2233844920932215e-02, .5867526525797927e+00, .2249291357368938e-02, + .5963014271336025e+00, .2263946787643312e-02, .6053965840290423e+00, + .2277870611359356e-02, .6140692154201157e+00, .2291116666449641e-02, + .6223478401763524e+00, .2303733929177061e-02, .6302586899076299e+00, + .2315767145022433e-02, .6378259782215101e+00, .2327257411049353e-02, + .6450721605572670e+00, .2338242730369626e-02, .6520181930839076e+00, + .2348758560479908e-02, .6586838007193958e+00, .2358838379587591e-02, + .6650877664469207e+00, .2368514298725632e-02, .6712482569089239e+00, + .2377817752650840e-02, .6771832029067319e+00, .2386780309439892e-02, + .6829107580966474e+00, .2395434647564189e-02, .6884498650357838e+00, + .2403815760225585e-02, .6938209649667989e+00, .2411962459936224e-02, + .6990468964641347e+00, .2419919271518965e-02, .7041540382931724e+00, + .2427738818137931e-02, + .7091737632918418e+00, .2435484820891955e-02, .7141442820039481e+00, + .2443235844427740e-02, .7191129655073966e+00, .2451089922557623e-02, + .7241392431779231e+00, .2459170177943326e-02, .7292981672564718e+00, + .2467631490367586e-02, .7346847122783368e+00, .2476668140634181e-02, + .7404188178940524e+00, .2486522120258960e-02, .7466510642206331e+00, + .2497491395393781e-02, .7535686551625321e+00, .2509936783254573e-02, + .7614010329283727e+00, .2524285190189721e-02, .7704239097236394e+00, + .2541025785320841e-02, .7809597539113882e+00, .2560694413103588e-02, + .7933718506147267e+00, .2583840650378180e-02, .8080481691101191e+00, + .6694334606038313e-03, .8132301052210061e-03, .7131535707087396e-02, + .9389134630471259e-03, .3367590696807291e-01, .1048872877008853e-02, + .6819680438492585e-01, .1145449798724469e-02, .1054022066039507e+00, + .1230700342275683e-02, .1427172823544694e+00, .1306357911890783e-02, + .1788804222099017e+00, .1373861096813421e-02, .2132998613259399e+00, + .1434398265869949e-02, .2457362721216975e+00, .1488951760223115e-02, + .2761379595225904e+00, .1538336359526358e-02, .3045521719476219e+00, + .1583231069003380e-02, .3310762180672609e+00, .1624204791259703e-02, + .3558301646036297e+00, .1661736860472097e-02, .3789415592809941e+00, + .1696233421123923e-02, + .4005369903859170e+00, .1728040504318892e-02, .4207375854097784e+00, + .1757454499192354e-02, .4396567938240963e+00, .1784730573761186e-02, + .4573994919708219e+00, .1810089479804955e-02, .4740618435452991e+00, + .1833723080526557e-02, .4897315792782505e+00, .1855798864682184e-02, + .5044884954562696e+00, .1876463652712977e-02, .5184050523373731e+00, + .1895846655550170e-02, .5315470026926565e+00, .1914062012192412e-02, + .5439740105721099e+00, .1931210905475803e-02, .5557402385626821e+00, + .1947383334819745e-02, .5668948928266588e+00, .1962659608717758e-02, + .5774827218315940e+00, .1977111607276341e-02, .5875444685962498e+00, + .1990803855373865e-02, .5971172785245406e+00, .2003794439402125e-02, + .6062350661340985e+00, .2016135794604195e-02, .6149288446198813e+00, + .2027875385387674e-02, .6232270224896007e+00, .2039056297414846e-02, + .6311556716380911e+00, .2049717757561867e-02, .6387387713071162e+00, + .2059895595863033e-02, .6459984324868040e+00, .2069622662222278e-02, + .6529551075171532e+00, .2078929209927277e-02, .6596277899957604e+00, + .2087843257818011e-02, .6660342106414446e+00, .2096390943345113e-02, + .6721910355553485e+00, .2104596879732886e-02, .6781140744196829e+00, + .2112484532090143e-02, .6838185076461196e+00, .2120076629662863e-02, + .6893191434072465e+00, + .2127395634587425e-02, .6946307179415828e+00, .2134464291583733e-02, + .6997682556089891e+00, .2141306288121780e-02, .7047475089834524e+00, + .2147947060772256e-02, .7095855038862377e+00, .2154414790705499e-02, + .7143012197281974e+00, .2160741639474206e-02, .7189164418059094e+00, + .2166965284859545e-02, .7234568290808686e+00, .2173130824735037e-02, + .7279532479715103e+00, .2179293122829263e-02, .7324434288116620e+00, + .2185519670818465e-02, .7369740050569291e+00, .2191894031123936e-02, + .7416029929155098e+00, .2198519895768168e-02, .7464027556828451e+00, + .2205525735899346e-02, .7514634645503588e+00, .2213069905688267e-02, + .7568970038541067e+00, .2221345878507691e-02, .7628411564127120e+00, + .2230587003169685e-02, .7694637214568848e+00, .2241069745958558e-02, + .7769659387231029e+00, .2253113820886843e-02, .7855841979737009e+00, + .2267076946734208e-02, .7955885073370143e+00, .2283341347108146e-02, + .8072756369544127e+00, .2302288836034036e-02, .8209544135936097e+00, + .5959608869219697e-03, .7239930216451945e-03, .7133279984105104e-02, + .8359051841424598e-03, .3368576099913345e-01, .9338233700778646e-03, + .6822000216330427e-01, .1019831142421348e-02, .1054430127732599e+00, + .1095758216195270e-02, .1427791507549994e+00, .1163147152914922e-02, + .1789661337538298e+00, + .1223278163696114e-02, .2134116378937676e+00, .1277208785600386e-02, + .2458758686973440e+00, .1325813205911649e-02, .2763067382696023e+00, + .1369816492784942e-02, .3047511618662466e+00, .1409822883247175e-02, + .3313061633300986e+00, .1446338629616970e-02, .3560915640558304e+00, + .1479790274040400e-02, .3792346990474591e+00, .1510539225034315e-02, + .4008619710852165e+00, .1538893395093506e-02, .4210943451273732e+00, + .1565116520065816e-02, .4400451277298846e+00, .1589435653602577e-02, + .4578190692609130e+00, .1612047223434259e-02, .4745122222302962e+00, + .1633121950929719e-02, .4902122192180130e+00, .1652808868600187e-02, + .5049987699443599e+00, .1671238618449212e-02, .5189442584592429e+00, + .1688526174140261e-02, .5321143706133679e+00, .1704773099175760e-02, + .5445687118458739e+00, .1720069429524861e-02, .5563613934916154e+00, + .1734495250750528e-02, .5675415768232118e+00, .1748122025406067e-02, + .5781539706502275e+00, .1761013715337100e-02, .5882392821853880e+00, + .1773227734809691e-02, .5978346230971775e+00, .1784815763538346e-02, + .6069738738486110e+00, .1795824443291854e-02, .6156880099806808e+00, + .1806295977494385e-02, .6240053941930317e+00, .1816268649874427e-02, + .6319520380671680e+00, .1825777275563891e-02, .6395518371737207e+00, + .1834853595977716e-02, + .6468267831733791e+00, .1843526627209035e-02, .6537971564070679e+00, + .1851822970482422e-02, .6604817024077319e+00, .1859767092366030e-02, + .6668977957794100e+00, .1867381581918830e-02, .6730615950017611e+00, + .1874687391723729e-02, .6789881919521959e+00, .1881704069826390e-02, + .6846917603173716e+00, .1888449989971118e-02, .6901857076183885e+00, + .1894942588218185e-02, .6954828363313554e+00, .1901198615070921e-02, + .7005955205839351e+00, .1907234413674205e-02, .7055359061912127e+00, + .1913066236513566e-02, .7103161434075709e+00, .1918710615393293e-02, + .7149486637645913e+00, .1924184802344570e-02, .7194465147858177e+00, + .1929507302533566e-02, .7238237692546146e+00, .1934698524185406e-02, + .7280960290730413e+00, .1939781574913619e-02, .7322810475484290e+00, + .1944783238404899e-02, .7363994980480986e+00, .1949735169676031e-02, + .7404759210790995e+00, .1954675350226750e-02, .7445398854214426e+00, + .1959649844884542e-02, .7486274009877383e+00, .1964714897577384e-02, + .7527826199581922e+00, .1969939389932244e-02, .7570598558183508e+00, + .1975407658858821e-02, .7615259331570643e+00, .1981222619086292e-02, + .7662628484770114e+00, .1987509053119538e-02, .7713706654164001e+00, + .1994416800895364e-02, .7769704756416124e+00, .2002123390500117e-02, + .7832071162571111e+00, + .2010835389853712e-02, .7902511335384258e+00, .2020787431823991e-02, + .7982992156041412e+00, .2032237508156190e-02, .8075719965967809e+00, + .2045456833973120e-02, .8183078136932541e+00, .2060712530690398e-02, + .8307507916355182e+00, .5338928457208802e-03, .6486041055927330e-03, + .7134757145335637e-02, .7488783022520046e-03, .3369410911427631e-01, + .8366191792139075e-03, .6823966328875076e-01, .9136926200367255e-03, + .1054776147161770e+00, .9817372289705743e-03, .1428316413133060e+00, + .1042134467481678e-02, .1790388973189992e+00, .1096030851195136e-02, + .2135065916571426e+00, .1144373475917349e-02, .2459945403613866e+00, + .1187945232547193e-02, .2764503284138904e+00, .1227395462237520e-02, + .3049205940601908e+00, .1263265290388587e-02, .3315021246228428e+00, + .1296008087702652e-02, .3563145379544189e+00, .1326005836926910e-02, + .3794849926333959e+00, .1353582187798311e-02, .4011397375442878e+00, + .1379012879924876e-02, .4213996026736057e+00, .1402534089465843e-02, + .4403777756781442e+00, .1424349141395722e-02, .4581789018294929e+00, + .1444633933714447e-02, .4748989405223802e+00, .1463541343583908e-02, + .4906254417290438e+00, .1481204825549461e-02, .5054380418632013e+00, + .1497741365648968e-02, .5194090599684319e+00, .1513253919449596e-02, + .5326041243428160e+00, + .1527833434485045e-02, .5450827895910497e+00, .1541560536285142e-02, + .5568991222679660e+00, .1554506940716115e-02, .5681022442899654e+00, + .1566736642551277e-02, .5787368298952323e+00, .1578306920207553e-02, + .5888435558143096e+00, .1589269188760702e-02, .5984595065104622e+00, + .1599669727196656e-02, .6076185375122531e+00, .1609550300992578e-02, + .6163516003945891e+00, .1618948697263611e-02, .6246870331241742e+00, + .1627899186642147e-02, .6326508194315294e+00, .1636432923609736e-02, + .6402668207058439e+00, .1644578295050302e-02, .6475569836949800e+00, + .1652361225240263e-02, .6545415270716049e+00, .1659805444262448e-02, + .6612391097238539e+00, .1666932725870720e-02, .6676669834625878e+00, + .1673763100099416e-02, .6738411327196651e+00, .1680315045376260e-02, + .6797764037527307e+00, .1686605664538830e-02, .6854866258810527e+00, + .1692650848960719e-02, .6909847273635962e+00, .1698465434958682e-02, + .6962828487057689e+00, .1704063356777271e-02, .7013924564580136e+00, + .1709457800739110e-02, .7063244609630222e+00, .1714661365618782e-02, + .7110893420369401e+00, .1719686234962450e-02, .7156972872545727e+00, + .1724544367953908e-02, .7201583483730915e+00, .1729247716543003e-02, + .7244826224989144e+00, .1733808477926433e-02, .7286804659046311e+00, + .1738239393121469e-02, + .7327627499609472e+00, .1742554104306060e-02, .7367411704788124e+00, + .1746767585796486e-02, .7406286238588718e+00, .1750896665936375e-02, + .7444396657879347e+00, .1754960659646605e-02, .7481910707203003e+00, + .1758982133685755e-02, .7519025128611727e+00, .1762987828362212e-02, + .7555973915123057e+00, .1767009759806471e-02, .7593038249053531e+00, + .1771086524820975e-02, .7630558361569231e+00, .1775264824037991e-02, + .7668947513550588e+00, .1779601206067178e-02, .7708708209501843e+00, + .1784164011861242e-02, .7750450585439046e+00, .1789035459753730e-02, + .7794912616154927e+00, .1794313751342973e-02, .7842981311142257e+00, + .1800114989664162e-02, .7895713343902400e+00, .1806574577713146e-02, + .7954352514919308e+00, .1813847605191753e-02, .8020340030828954e+00, + .1822107542131273e-02, .8095311799649906e+00, .1831542366827648e-02, + .8181074940047334e+00, .1842347120393410e-02, .8279553875468303e+00, + .1854711901010908e-02, .8392695503623823e+00, .4691372119147557e-03, + .5699474625461372e-03, .7136296792849224e-02, .6580754336890405e-03, + .3370281338535284e-01, .7351932064547252e-03, .6826017144205968e-01, + .8029397345236971e-03, .1055137237879695e+00, .8627543786402343e-03, + .1428864460309730e+00, .9158506408206921e-03, .1791149115084724e+00, + .9632356479495138e-03, + .2136058483079311e+00, .1005741352235223e-02, .2461186723532833e+00, + .1044055462224991e-02, .2766006332016539e+00, .1078748370226813e-02, + .3050980855476346e+00, .1110295406319466e-02, .3317075749743232e+00, + .1139094812215725e-02, .3565485115490737e+00, .1165482118715345e-02, + .3797478738863422e+00, .1189741614017051e-02, .4014317539275095e+00, + .1212115499934443e-02, .4217208439626945e+00, .1232811224277848e-02, + .4407282102151493e+00, .1252007377470389e-02, .4585583904118685e+00, + .1269858457651580e-02, .4753072483903950e+00, .1286498741428814e-02, + .4910622490186240e+00, .1302045444889013e-02, .5059029528099534e+00, + .1316601318761973e-02, .5199016110853500e+00, .1330256790211312e-02, + .5331237917441728e+00, .1343091739511245e-02, .5456289955944984e+00, + .1355176981171679e-02, .5574712413729396e+00, .1366575504600436e-02, + .5686996086005114e+00, .1377343518145096e-02, .5793587340271479e+00, + .1387531331581560e-02, .5894892612975623e+00, .1397184105238413e-02, + .5991282456659598e+00, .1406342488530390e-02, .6083095167442896e+00, + .1415043166390284e-02, .6170640027934311e+00, .1423319328684793e-02, + .6254200202131955e+00, .1431201074983781e-02, .6334035318149531e+00, + .1438715764876940e-02, .6410383772701038e+00, .1445888322283529e-02, + .6483464788808477e+00, + .1452741500792328e-02, .6553480255553266e+00, .1459296115932730e-02, + .6620616376107076e+00, .1465571249361709e-02, .6685045147893643e+00, + .1471584429214883e-02, .6746925696634154e+00, .1477351790282003e-02, + .6806405484266425e+00, .1482888217204235e-02, .6863621409335069e+00, + .1488207473534721e-02, .6918700817451654e+00, .1493322319242184e-02, + .6971762438844605e+00, .1498244619060822e-02, .7022917269886535e+00, + .1502985443992799e-02, .7072269415837240e+00, .1507555168249840e-02, + .7119916912919050e+00, .1511963563977790e-02, .7165952549304837e+00, + .1516219896245011e-02, .7210464706718194e+00, .1520333020996940e-02, + .7253538247205133e+00, .1524311488991586e-02, .7295255473336399e+00, + .1528163659142506e-02, .7335697194752111e+00, .1531897825216204e-02, + .7374943939689233e+00, .1535522360469415e-02, .7413077357064542e+00, + .1539045885576599e-02, .7450181862940887e+00, .1542477466093639e-02, + .7486346594874230e+00, .1545826846727079e-02, .7521667748753935e+00, + .1549104730812699e-02, .7556251385226099e+00, .1552323114613247e-02, + .7590216806350385e+00, .1555495687246740e-02, .7623700617184821e+00, + .1558638308120671e-02, .7656861600411088e+00, .1561769574454004e-02, + .7689886543012415e+00, .1564911491470015e-02, .7722997159327905e+00, + .1568090256606748e-02, + .7756458249739051e+00, .1571337165828147e-02, .7790587211550291e+00, + .1574689643692269e-02, .7825764967678216e+00, .1578192387667105e-02, + .7862448284470696e+00, .1581898599185298e-02, .7901183291700260e+00, + .1585871246475873e-02, .7942619768635446e+00, .1590184264311382e-02, + .7987525387422443e+00, .1594923540574454e-02, .8036798573342322e+00, + .1600187467232215e-02, .8091477920349469e+00, .1606086745205357e-02, + .8152745179862013e+00, .1612743036112452e-02, .8221917759509073e+00, + .1620285966641179e-02, .8300425555166407e+00, .1628847946012576e-02, + .8389766067695471e+00, .1638556304338204e-02, .8491431596995497e+00, + .4152983993727092e-03, .5045486166497230e-03, .7137584516676377e-02, + .5825747502812775e-03, .3371009582559231e-01, .6508564339714855e-03, + .6827733616228911e-01, .7108440797559780e-03, .1055439591076286e+00, + .7638115008710665e-03, .1429323580617065e+00, .8108326421179146e-03, + .1791786256178479e+00, .8527988118498596e-03, .2136890926697665e+00, + .8904462894848839e-03, .2462228452780043e+00, .9243836974156776e-03, + .2767268570137912e+00, .9551158310881699e-03, .3052472497196298e+00, + .9830633537396637e-03, .3318803708195339e+00, .1008578703487142e-02, + .3567454603219721e+00, .1031958817701520e-02, .3799693497349148e+00, + .1053455282818112e-02, + .4016780028151404e+00, .1073282437929197e-02, .4219919994202545e+00, + .1091623864253886e-02, .4410243065866673e+00, .1108637603920062e-02, + .4588793741064279e+00, .1124460377322258e-02, .4756529875379346e+00, + .1139211008944395e-02, .4914325418394411e+00, .1152993225032100e-02, + .5062975349402129e+00, .1165897950461469e-02, .5203201620487163e+00, + .1178005204347923e-02, .5335659407189512e+00, .1189385672505494e-02, + .5460943265934672e+00, .1200102018320324e-02, .5579592979271204e+00, + .1210209980791963e-02, .5692098980166754e+00, .1219759298541784e-02, + .5798907312704116e+00, .1228794490820103e-02, .5900424125337194e+00, + .1237355520454566e-02, .5997019714820298e+00, .1245478358886877e-02, + .6089032150489527e+00, .1253195469650359e-02, .6176770513802826e+00, + .1260536223624142e-02, .6260517789476357e+00, .1267527256990541e-02, + .6340533443783142e+00, .1274192780889601e-02, .6417055723602077e+00, + .1280554850208162e-02, .6490303707240170e+00, .1286633597682126e-02, + .6560479135277237e+00, .1292447438469551e-02, .6627768046927827e+00, + .1298013249521533e-02, .6692342244811717e+00, .1303346527400884e-02, + .6754360608644642e+00, .1308461527646537e-02, .6813970276241349e+00, + .1313371388331951e-02, .6871307708378881e+00, .1318088240100810e-02, + .6926499652502783e+00, + .1322623304669488e-02, .6979664018971263e+00, .1326986983552337e-02, + .7030910682519399e+00, .1331188938584919e-02, .7080342220886105e+00, + .1335238165685898e-02, .7128054602082953e+00, .1339143063206245e-02, + .7174137831602817e+00, .1342911496162030e-02, .7218676570980016e+00, + .1346550857633121e-02, .7261750739540748e+00, .1350068128634278e-02, + .7303436111948426e+00, .1353469937828520e-02, .7343804925285762e+00, + .1356762622556962e-02, .7382926510963945e+00, .1359952292807390e-02, + .7420867968756576e+00, .1363044899939134e-02, .7457694902776256e+00, + .1366046312228174e-02, .7493472242304510e+00, .1368962399598178e-02, + .7528265174113487e+00, .1371799130263930e-02, .7562140217340938e+00, + .1374562682436201e-02, .7595166477149035e+00, .1377259574721566e-02, + .7627417119340626e+00, .1379896819392827e-02, .7658971114809663e+00, + .1382482103293908e-02, .7689915310079312e+00, .1385024001753947e-02, + .7720346888027838e+00, .1387532231477270e-02, .7750376290830836e+00, + .1390017948880056e-02, .7780130684490018e+00, .1392494100651911e-02, + .7809758049987551e+00, .1394975833264466e-02, .7839431988406547e+00, + .1397480967482131e-02, .7869357323732872e+00, .1400030542294373e-02, + .7899776573739077e+00, .1402649429581176e-02, .7930977330965135e+00, + .1405367015557528e-02, + .7963300544867956e+00, .1408217936717937e-02, .7997149612640727e+00, + .1411242845492577e-02, .8033000057004371e+00, .1414489162825236e-02, + .8071409378596117e+00, .1418011750045248e-02, .8113026400715047e+00, + .1421873399672547e-02, .8158599058260445e+00, .1426145003995468e-02, + .8208979110240450e+00, .1430905213100405e-02, .8265121682023010e+00, + .1436239345537763e-02, .8328076907174900e+00, .1442237275146430e-02, + .8398970330439564e+00, .1448990003811190e-02, .8478968323160648e+00, + .1456584666833031e-02, .8569224819892680e+00, .3704312646343119e-03, + .4500459652486567e-03, .7138650748115411e-02, .5196512293102546e-03, + .3371612727399277e-01, .5805664280060180e-03, .6829155668533947e-01, + .6340849446568049e-03, .1055690170651003e+00, .6813427081724704e-03, + .1429704232383565e+00, .7232974239492588e-03, .1792314731911011e+00, + .7607439326118729e-03, .2137581723047245e+00, .7943388257980795e-03, + .2463093367632228e+00, .8246248539513288e-03, .2768317147355182e+00, + .8520521766292996e-03, .3053712382217758e+00, .8769959255269664e-03, + .3320240933589542e+00, .8997703900142133e-03, .3569093819512950e+00, + .9206403645220593e-03, .3801538161111002e+00, .9398302000432457e-03, + .4018832556603875e+00, .9575310308788060e-03, .4222181893493448e+00, + .9739065619456522e-03, + .4412715038513685e+00, .9890977229041295e-03, .4591475776827830e+00, + .1003226429225417e-02, .4759421328870969e+00, .1016398637371945e-02, + .4917425076000317e+00, .1028706839793818e-02, .5066281487544273e+00, + .1040232113307033e-02, .5206712056814181e+00, .1051045809625145e-02, + .5339371545956020e+00, .1061210957702222e-02, .5464854138565951e+00, + .1070783432788909e-02, .5583699280903157e+00, .1079812935679248e-02, + .5696397102784545e+00, .1088343816748556e-02, .5803393375366302e+00, + .1096415772455089e-02, .5905094001856708e+00, .1104064436547561e-02, + .6001869059172129e+00, .1111321883943327e-02, .6094056420120871e+00, + .1118217061857135e-02, .6181964990928702e+00, .1124776160068879e-02, + .6265877600346048e+00, .1131022930068676e-02, .6346053575793632e+00, + .1136978961092068e-02, .6422731040006305e+00, .1142663919667303e-02, + .6496128959041625e+00, .1148095758170784e-02, .6566448969707471e+00, + .1153290896971796e-02, .6633877011656901e+00, .1158264384001310e-02, + .6698584786727629e+00, .1163030034968892e-02, .6760731065636836e+00, + .1167600556950560e-02, .6820462859911614e+00, .1171987657658222e-02, + .6877916474950851e+00, .1176202142362038e-02, .6933218458373045e+00, + .1180254000157654e-02, .6986486456296808e+00, .1184152481040773e-02, + .7037829988914664e+00, + .1187906165063826e-02, .7087351155643580e+00, .1191523024697338e-02, + .7135145279256490e+00, .1195010481397003e-02, .7181301497708876e+00, + .1198375457282797e-02, .7225903311867283e+00, .1201624422765785e-02, + .7269029097019594e+00, .1204763440909706e-02, .7310752585900764e+00, + .1207798209286642e-02, .7351143331006848e+00, .1210734100078424e-02, + .7390267154202931e+00, .1213576199187821e-02, .7428186592069160e+00, + .1216329345156313e-02, .7464961346090013e+00, .1218998168739366e-02, + .7500648747695434e+00, .1221587134066625e-02, .7535304249333266e+00, + .1224100582415115e-02, .7568981954218305e+00, .1226542779750137e-02, + .7601735199195562e+00, .1228917969342930e-02, .7633617207306558e+00, + .1231230430958390e-02, .7664681829190014e+00, .1233484548321435e-02, + .7694984395410563e+00, .1235684886817594e-02, .7724582705209949e+00, + .1237836283660978e-02, .7753538181016055e+00, .1239943953067019e-02, + .7781917222296842e+00, .1242013609290138e-02, .7809792796931293e+00, + .1244051610712973e-02, .7837246313034256e+00, .1246065128479356e-02, + .7864369818849385e+00, .1248062343408890e-02, .7891268582478557e+00, + .1250052675057249e-02, .7918064106168962e+00, .1252047046705140e-02, + .7944897630608011e+00, .1254058189642781e-02, .7971934181681546e+00, + .1256100989185991e-02, + .7999367203284967e+00, .1258192873167162e-02, .8027423802037812e+00, + .1260354240858018e-02, .8056370599049799e+00, .1262608925972372e-02, + .8086520134810325e+00, .1264984681034516e-02, .8118237698928188e+00, + .1267513661363494e-02, .8151948348470072e+00, .1270232874562430e-02, + .8188143727609828e+00, .1273184545147458e-02, .8227388097836817e+00, + .1276416323542609e-02, .8270322725064919e+00, .1279981244520295e-02, + .8317667447053557e+00, .1283937313921567e-02, .8370217873957335e+00, + .1288346577738765e-02, .8428836291187909e+00, .1293273510746542e-02, + .8494434005718798e+00, .1298782562596834e-02, .8567942719004841e+00, + .1304934730786103e-02, .8650272688993226e+00, .3247324487808653e-03, + .3945315229438140e-03, .7139767532965116e-02, .4555578699667749e-03, + .3372244637254624e-01, .5089677216150194e-03, .6830646000320411e-01, + .5558945983563953e-03, .1055952873791690e+00, .5973340508520150e-03, + .1430103457525390e+00, .6341254407194094e-03, .1792869234600663e+00, + .6669653938797302e-03, .2138306885390802e+00, .6964293711881412e-03, + .2464001780084456e+00, .7229930587138452e-03, .2769419073380583e+00, + .7470509916283250e-03, .3055016129403092e+00, .7689319468807855e-03, + .3321753151236530e+00, .7889113759410096e-03, .3570819738779806e+00, + .8072213501811222e-03, + .3803481790268297e+00, .8240584940970029e-03, .4020996841123463e+00, + .8395903192560990e-03, .4224568848461668e+00, .8539602966613761e-03, + .4415325859147346e+00, .8672919359416600e-03, .4594310931563854e+00, + .8796920818161035e-03, .4762480638503880e+00, .8912535918781442e-03, + .4920707781580621e+00, .9020575233992923e-03, .5069786309167420e+00, + .9121749286872399e-03, .5210437244980383e+00, .9216683368023415e-03, + .5343314926832955e+00, .9305929826843983e-03, .5469013154214589e+00, + .9389978318087510e-03, .5588071025313237e+00, .9469264384779324e-03, + .5700978354396460e+00, .9544176680744464e-03, .5808180626619678e+00, + .9615063075283847e-03, .5910083486194518e+00, .9682235834936652e-03, + .6007056775836025e+00, .9745976039775797e-03, .6099438156993251e+00, + .9806537362012611e-03, .6187536345605122e+00, .9864149311092719e-03, + .6271633999553797e+00, .9919020030614374e-03, .6351990293204530e+00, + .9971338717269585e-03, .6428843212420017e+00, .1002127771980826e-02, + .6502411600835498e+00, .1006899436614548e-02, .6572896985355157e+00, + .1011463255869661e-02, .6640485206005014e+00, .1015832417146389e-02, + .6705347872580487e+00, .1020019027701906e-02, .6767643668025705e+00, + .1024034222710236e-02, .6827519516206730e+00, .1027888260690500e-02, + .6885111629699746e+00, + .1031590608007845e-02, .6940546451402459e+00, .1035150013900340e-02, + .6993941502179868e+00, .1038574577276322e-02, .7045406145358273e+00, + .1041871806352736e-02, .7095042277666803e+00, .1045048672060125e-02, + .7142944955177615e+00, .1048111656019274e-02, .7189202961898697e+00, + .1051066793794383e-02, .7233899327913630e+00, .1053919714044959e-02, + .7277111803329067e+00, .1056675674131018e-02, .7318913293773558e+00, + .1059339592671662e-02, .7359372262783432e+00, .1061916079514346e-02, + .7398553106107196e+00, .1064409463539858e-02, .7436516502756216e+00, + .1066823818705570e-02, .7473319747524817e+00, .1069162988716224e-02, + .7509017069698120e+00, .1071430610707160e-02, .7543659942763458e+00, + .1073630138329335e-02, .7577297390145481e+00, .1075764864638867e-02, + .7609976292302569e+00, .1077837945216411e-02, .7641741700960905e+00, + .1079852421973832e-02, .7672637166832609e+00, .1081811248148003e-02, + .7702705087876981e+00, .1083717315034678e-02, .7731987086032039e+00, + .1085573481080025e-02, .7760524421380459e+00, .1087382604024221e-02, + .7788358453933391e+00, .1089147576881027e-02, .7815531164629429e+00, + .1090871368639801e-02, .7842085748763442e+00, .1092557070691845e-02, + .7868067296884163e+00, .1094207950110233e-02, .7893523580223542e+00, + .1095827511049306e-02, + .7918505959922322e+00, .1097419565672728e-02, .7943070441648366e+00, + .1098988316160812e-02, .7967278899584393e+00, .1100538449478067e-02, + .7991200496055508e+00, .1102075246684770e-02, .8014913325065773e+00, + .1103604708628230e-02, .8038506309404848e+00, .1105133699816469e-02, + .8062081381315597e+00, .1106670112111886e-02, .8085755975333251e+00, + .1108223049519360e-02, .8109665857911905e+00, .1109803034693859e-02, + .8133968310607946e+00, .1111422236740111e-02, .8158845670237690e+00, + .1113094718271409e-02, .8184509208406880e+00, .1114836697350123e-02, + .8211203301382262e+00, .1116666816628120e-02, .8239209796093340e+00, + .1118606407495873e-02, .8268852415235039e+00, .1120679731089786e-02, + .8300500959832002e+00, .1122914170403457e-02, .8334574957353697e+00, + .1125340338439976e-02, .8371546264999228e+00, .1127992056534935e-02, + .8411939971620041e+00, .1130906145334969e-02, .8456332754097852e+00, + .1134121959793832e-02, .8505347650275864e+00, .1137680591275090e-02, + .8559644039843292e+00, .1141623657948933e-02, .8619901524142233e+00, + .1145991613898916e-02, .8686796434054859e+00, .2875557040695001e-03, + .3493682107340224e-03, .7140652840633392e-02, .4034136512140228e-03, + .3372745678580264e-01, .4507156263114678e-03, .6831827979235850e-01, + .4922776751319498e-03, + .1056161282055053e+00, .5289812044432154e-03, .1430420271934089e+00, + .5615693465755460e-03, .1793309426893349e+00, .5906588650957148e-03, + .2138882776015863e+00, .6167592500442515e-03, .2464723498787023e+00, + .6402916548621664e-03, .2770294926804611e+00, .6616053847329528e-03, + .3056052894425374e+00, .6809915244670573e-03, .3322956309926026e+00, + .6986939459404484e-03, .3572193667731841e+00, .7149181133975426e-03, + .3805029914283647e+00, .7298381072985964e-03, .4022721758944257e+00, + .7436022322429452e-03, .4226472436509502e+00, .7563375079342728e-03, + .4417409357850834e+00, .7681532808226864e-03, .4596575017826150e+00, + .7791441427437137e-03, .4764925487070491e+00, .7893923017930954e-03, + .4923333117464571e+00, .7989695184985524e-03, .5072591452826548e+00, + .8079386954131118e-03, .5213421151585618e+00, .8163551890154100e-03, + .5346476220690836e+00, .8242678979707145e-03, .5472350159192663e+00, + .8317201703560293e-03, .5591581791948586e+00, .8387505635876626e-03, + .5704660684234719e+00, .8453934839008121e-03, .5812032094226068e+00, + .8516797268548300e-03, .5914101459193340e+00, .8576369361234619e-03, + .6011238433265917e+00, .8632899945099273e-03, .6103780506208373e+00, + .8686613584996434e-03, .6192036237904337e+00, .8737713455743161e-03, + .6276288144678238e+00, + .8786383818419734e-03, .6356795272806593e+00, .8832792161976796e-03, + .6433795492571826e+00, .8877091061492647e-03, .6507507543610395e+00, + .8919419795673447e-03, .6578132859480015e+00, .8959905759071083e-03, + .6645857196542167e+00, .8998665698679513e-03, .6710852089553721e+00, + .9035806799802425e-03, .6773276153852716e+00, .9071427642160033e-03, + .6833276251737907e+00, .9105619043959713e-03, .6890988538586815e+00, + .9138464808966333e-03, .6946539402426604e+00, .9170042389371524e-03, + .7000046309052734e+00, .9200423475395102e-03, .7051618563365225e+00, + .9229674520990890e-03, .7101357996343394e+00, .9257857213720340e-03, + .7149359585989350e+00, .9285028895757936e-03, .7195712019621512e+00, + .9311242942067709e-03, .7240498204076717e+00, .9336549101012279e-03, + .7283795729669328e+00, .9360993802001778e-03, .7325677293146301e+00, + .9384620434241330e-03, .7366211084358048e+00, .9407469600177421e-03, + .7405461140927553e+00, .9429579346863432e-03, .7443487674837327e+00, + .9450985378153066e-03, .7480347374559778e+00, .9471721250379737e-03, + .7516093686126949e+00, .9491818553984218e-03, .7550777076367228e+00, + .9511307083407467e-03, .7584445281427596e+00, .9530214997467334e-03, + .7617143543649362e+00, .9548568972384669e-03, .7648914839873381e+00, + .9566394349615138e-03, + .7679800104318763e+00, .9583715280677518e-03, .7709838449309258e+00, + .9600554871248025e-03, .7739067387317117e+00, .9616935326914640e-03, + .7767523058059454e+00, .9632878103157287e-03, .7795240464721949e+00, + .9648404062341729e-03, .7822253723804877e+00, .9663533640789765e-03, + .7848596333593397e+00, .9678287029319074e-03, .7874301466854236e+00, + .9692684371035443e-03, .7899402294061247e+00, .9706745980610887e-03, + .7923932344258478e+00, .9720492589794330e-03, .7947925911586078e+00, + .9733945624476692e-03, .7971418516523020e+00, .9747127519265526e-03, + .7994447432038601e+00, .9760062076207416e-03, .8017052286081833e+00, + .9772774875013603e-03, .8039275753153862e+00, .9785293742870215e-03, + .8061164349067315e+00, .9797649292608988e-03, .8082769344340225e+00, + .9809875538617746e-03, .8104147812911904e+00, .9822010600294816e-03, + .8125363833872510e+00, .9834097502974072e-03, .8146489864477286e+00, + .9846185085894264e-03, .8167608302603168e+00, .9858329025720856e-03, + .8188813255629256e+00, .9870592982031829e-03, .8210212529979992e+00, + .9883049867630125e-03, .8231929850588618e+00, .9895783241000432e-03, + .8254107311438275e+00, .9908888810000608e-03, .8276908045991552e+00, + .9922476024127977e-03, .8300519088320196e+00, .9936669716440181e-03, + .8325154370399047e+00, + .9951611734340783e-03, .8351057766377819e+00, .9967462469844777e-03, + .8378506048585280e+00, .9984402163659223e-03, .8407811560526175e+00, + .1000263181294734e-02, .8439324337673380e+00, .1002237346041166e-02, + .8473433317092810e+00, .1004386958434913e-02, .8510566173745598e+00, + .1006738125009853e-02, .8551187210241215e+00, .1009318463085570e-02, + .8595792618934147e+00, .1012156547280817e-02, .8644902349222623e+00, + .1015281108386375e-02, .8699047776816512e+00, .1018719948988823e-02, + .8758754423894201e+00, .2516072353014572e-03, .3056959967091976e-03, + .7141513331248321e-02, .3529898095786411e-03, .3373232773731790e-01, + .3943840897337921e-03, .6832977329356830e-01, .4307567414106005e-03, + .1056363991444212e+00, .4628788405472162e-03, .1430728515532258e+00, + .4914005032824914e-03, .1793737852691615e+00, .5168612968898808e-03, + .2139443476569179e+00, .5397069428251232e-03, .2465426458452338e+00, + .5603058824394920e-03, .2771148378485354e+00, .5789637011504982e-03, + .3057063604036936e+00, .5959350504603019e-03, .3324129804044311e+00, + .6114332776489099e-03, .3573534416826857e+00, .6256381290223384e-03, + .3806541481236008e+00, .6387018947049087e-03, .4024406920346254e+00, + .6507543147370997e-03, .4228333282534617e+00, .6619065080162839e-03, + .4419447375155043e+00, + .6722541319677103e-03, .4598791158936434e+00, .6818799359437668e-03, + .4767320228947860e+00, .6908558354114982e-03, .4925906511342484e+00, + .6992446058387721e-03, .5075343166976332e+00, .7071012733743214e-03, + .5216350508314642e+00, .7144742625858456e-03, .5349582228611499e+00, + .7214063485450536e-03, .5475631541591855e+00, .7279354505312647e-03, + .5595037011924066e+00, .7340952968696949e-03, .5708287967136168e+00, + .7399159843938746e-03, .5815829447836500e+00, .7454244513185431e-03, + .5918066692004921e+00, .7506448786223955e-03, .6015369171138536e+00, + .7555990321360334e-03, .6108074207645846e+00, .7603065552321395e-03, + .6196490208139152e+00, .7647852201872223e-03, .6280899548719071e+00, + .7690511448239667e-03, .6361561147571614e+00, .7731189798710006e-03, + .6438712758203572e+00, .7770020715316172e-03, .6512573014043507e+00, + .7807126029873436e-03, .6583343252310160e+00, .7842617179394069e-03, + .6651209142221997e+00, .7876596287823588e-03, .6716342139918672e+00, + .7909157115868082e-03, .6778900789954702e+00, .7940385897245874e-03, + .6839031890937339e+00, .7970362076856718e-03, .6896871540821554e+00, + .7999158964005718e-03, .6952546075538913e+00, .8026844311858064e-03, + .7006172913010297e+00, .8053480832662807e-03, .7057861313157792e+00, + .8079126656911606e-03, + .7107713063270146e+00, .8103835743445347e-03, .7155823096970855e+00, + .8127658246549895e-03, .7202280054070732e+00, .8150640845261530e-03, + .7247166787741906e+00, .8172827039407797e-03, .7290560824713176e+00, + .8194257416320207e-03, .7332534783544617e+00, .8214969891654706e-03, + .7373156755481164e+00, .8234999927330391e-03, .7412490651900622e+00, + .8254380729235324e-03, .7450596521952805e+00, .8273143427041148e-03, + .7487530843625872e+00, .8291317238207998e-03, .7523346791167432e+00, + .8308929618041609e-03, .7558094481526250e+00, .8326006397480466e-03, + .7591821202261264e+00, .8342571910138194e-03, .7624571623184618e+00, + .8358649110001742e-03, .7656387993861767e+00, .8374259681086725e-03, + .7687310328982383e+00, .8389424140275449e-03, .7717376583539388e+00, + .8404161934509115e-03, .7746622819709052e+00, .8418491533472557e-03, + .7775083367312447e+00, .8432430518896748e-03, .7802790979757885e+00, + .8445995671611185e-03, .7829776987415892e+00, .8459203057504956e-03, + .7856071450464104e+00, .8472068113602371e-03, .7881703313360623e+00, + .8484605735526905e-03, .7906700563263103e+00, .8496830367716911e-03, + .7931090394909276e+00, .8508756097868982e-03, .7954899384715712e+00, + .8520396757221188e-03, .7978153677138051e+00, .8531766028449862e-03, + .8000879186670883e+00, + .8542877563141193e-03, .8023101819251651e+00, .8553745111013562e-03, + .8044847717273021e+00, .8564382663308516e-03, .8066143532903718e+00, + .8574804613037265e-03, .8087016734969329e+00, .8585025935063833e-03, + .8107495955250247e+00, .8595062389322027e-03, .8127611380708978e+00, + .8604930750795124e-03, .8147395198853895e+00, .8614649070224791e-03, + .8166882104165335e+00, .8624236969844256e-03, .8186109874227465e+00, + .8633715978728290e-03, .8205120024888089e+00, .8643109912587642e-03, + .8223958554353771e+00, .8652445302964463e-03, .8242676786542088e+00, + .8661751880747444e-03, .8261332324148928e+00, .8671063118639506e-03, + .8279990121599971e+00, .8680416836568219e-03, .8298723687144858e+00, + .8689855872887505e-03, .8317616421559534e+00, .8699428822395237e-03, + .8336763097907850e+00, .8709190839453324e-03, .8356271482143981e+00, + .8719204500557906e-03, .8376264087468918e+00, .8729540715222103e-03, + .8396880045621392e+00, .8740279666600877e-03, .8418277064895145e+00, + .8751511753462460e-03, .8440633426727417e+00, .8763338492436154e-03, + .8464149949224021e+00, .8775873323529088e-03, .8489051816016571e+00, + .8789242242430914e-03, .8515590131598368e+00, .8803584160127719e-03, + .8544043019385164e+00, .8819050864333951e-03, .8574716026611897e+00, + .8835806429514380e-03, + .8607941542532526e+00, .8854025895229178e-03, .8644076876951290e+00, + .8873893010135113e-03, .8683500591389794e+00, .8895596827024104e-03, + .8726606635323475e+00, .8919326940631082e-03, .8773795829320804e+00, + .8945267194288890e-03, .8825464274388153e+00, .2223192652822833e-03, + .2701145057190040e-03, .7142201961578917e-02, .3119065510375409e-03, + .3373622651253249e-01, .3484864321264339e-03, .6833897467046082e-01, + .3806297364820721e-03, .1056526311462410e+00, .4090176838012951e-03, + .1430975404471804e+00, .4342246342064952e-03, .1794081097583843e+00, + .4567272828059632e-03, .2139892833907438e+00, .4769194148963887e-03, + .2465990011834060e+00, .4951265406555741e-03, .2771832823761325e+00, + .5116186382371054e-03, .3057874476558851e+00, .5266206864730374e-03, + .3325071660393497e+00, .5403211724599088e-03, .3574610980955170e+00, + .5528788972227103e-03, .3807755762784305e+00, .5644284045399661e-03, + .4025761311147353e+00, .5750843154180597e-03, .4229829635932437e+00, + .5849447992701323e-03, .4421087071714556e+00, .5940943654599883e-03, + .4600575161312302e+00, .6026061192146514e-03, .4769249128064807e+00, + .6105435941597527e-03, .4927980565571165e+00, .6179622488629170e-03, + .5077562335628903e+00, .6249106954973403e-03, .5218714480507487e+00, + .6314317138679972e-03, + .5352090448328407e+00, .6375630925795459e-03, .5478283229614227e+00, + .6433383302749551e-03, .5597831185164269e+00, .6487872230220317e-03, + .5711223455807324e+00, .6539363586005573e-03, .5818904910810551e+00, + .6588095342876049e-03, .5921280630645866e+00, .6634281114812186e-03, + .6018719941845592e+00, .6678113179369536e-03, .6111560033299172e+00, + .6719765063612168e-03, .6200109188606474e+00, .6759393764906060e-03, + .6284649670553408e+00, .6797141664962577e-03, .6365440293006893e+00, + .6833138185165486e-03, .6442718713535327e+00, .6867501222863375e-03, + .6516703477465010e+00, .6900338401544602e-03, .6587595841259685e+00, + .6931748162308895e-03, .6655581400283747e+00, .6961820719554190e-03, + .6720831543307668e+00, .6990638900109890e-03, .6783504753604156e+00, + .7018278882011304e-03, .6843747774195197e+00, .7044810846600041e-03, + .6901696652750492e+00, .7070299555552817e-03, .6957477679800600e+00, + .7094804862707378e-03, .7011208232299629e+00, .7118382169105868e-03, + .7062997533135355e+00, .7141082828461975e-03, .7112947335920807e+00, + .7162954509237486e-03, .7161152543292093e+00, .7184041518653100e-03, + .7207701765965301e+00, .7204385093230375e-03, .7252677828954485e+00, + .7224023659844375e-03, .7296158230608452e+00, .7242993070741803e-03, + .7338215559473337e+00, + .7261326815532289e-03, .7378917873419190e+00, .7279056212778734e-03, + .7418329044971879e+00, .7296210583486120e-03, .7456509076357754e+00, + .7312817408508591e-03, .7493514387389932e+00, .7328902471654914e-03, + .7529398078995253e+00, .7344489990066897e-03, .7564210174894084e+00, + .7359602733269230e-03, .7597997843696403e+00, .7374262132138434e-03, + .7630805603462782e+00, .7388488378909974e-03, .7662675510594492e+00, + .7402300519233290e-03, .7693647334760027e+00, .7415716537192339e-03, + .7723758721433454e+00, .7428753434132293e-03, .7753045343511121e+00, + .7441427302069922e-03, .7781541043385911e+00, .7453753392414597e-03, + .7809277966791060e+00, .7465746180687906e-03, .7836286689677923e+00, + .7477419427901918e-03, .7862596339363163e+00, .7488786239238555e-03, + .7888234711170709e+00, .7499859120665148e-03, .7913228381802210e+00, + .7510650034123837e-03, .7937602820697135e+00, .7521170451945067e-03, + .7961382500690559e+00, .7531431411158165e-03, .7984591009343806e+00, + .7541443568405107e-03, .8007251162411515e+00, .7551217256207493e-03, + .8029385121019574e+00, .7560762541391865e-03, .8051014514262963e+00, + .7570089286545360e-03, .8072160569092491e+00, .7579207215452834e-03, + .8092844249546161e+00, .7588125983558522e-03, .8113086407595959e+00, + .7596855254600513e-03, + .8132907948125792e+00, .7605404784685073e-03, .8152330010832001e+00, + .7613784515200193e-03, .8171374172145180e+00, .7622004676113267e-03, + .8190062670610542e+00, .7630075901355534e-03, .8208418659532486e+00, + .7638009358163845e-03, .8226466491084072e+00, .7645816892425407e-03, + .8244232036498043e+00, .7653511192248359e-03, .8261743047383627e+00, + .7661105972153171e-03, .8279029563638637e+00, .7668616180436525e-03, + .8296124373828724e+00, .7676058232385866e-03, .8313063534256175e+00, + .7683450272099249e-03, .8329886953198786e+00, .7690812465664271e-03, + .8346639046910128e+00, .7698167328335732e-03, .8363369473861753e+00, + .7705540088076615e-03, .8380133953277569e+00, .7712959087329680e-03, + .8396995173132502e+00, .7720456224088709e-03, .8414023791296488e+00, + .7728067432140554e-03, .8431299531191393e+00, .7735833198629735e-03, + .8448912369930949e+00, .7743799114709090e-03, .8466963812112370e+00, + .7752016451809944e-03, .8485568235840266e+00, .7760542751796868e-03, + .8504854288745331e+00, .7769442413753351e-03, .8524966300217779e+00, + .7778787253163293e-03, .8546065661289764e+00, .7788657000623884e-03, + .8568332105076614e+00, .7799139696833306e-03, .8591964798032911e+00, + .7810331928461635e-03, .8617183125335791e+00, .7822338835880836e-03, + .8644227022726899e+00, + .7835273809189877e-03, .8673356673041829e+00, .7849257774604757e-03, + .8704851350330805e+00, .7864417960824488e-03, .8739007161188697e+00, + .7880886026971684e-03, .8776133406687649e+00, .7898795433580249e-03, + .8816547276255949e+00, .7918277950171212e-03, .8860566596308294e+00, + .7939459222137213e-03, .8908500402679119e+00, .1944104808172863e-03, + .2362079689279158e-03, .7142870645995927e-02, .2727565493010114e-03, + .3374001298187475e-01, .3047478195749429e-03, .6834791269705135e-01, + .3328598979745383e-03, .1056684019862271e+00, .3576884028469226e-03, + .1431215337265024e+00, .3797355245930193e-03, .1794414760981541e+00, + .3994180621642384e-03, .2140329776183974e+00, .4170803229573239e-03, + .2466538170423533e+00, .4330069180398755e-03, .2772498801896881e+00, + .4474339038008580e-03, .3058663763636773e+00, .4605579911155484e-03, + .3325988808094674e+00, .4725439839337465e-03, .3575659744772789e+00, + .4835307298323497e-03, .3808939216502081e+00, .4936358667461324e-03, + .4027081940104168e+00, .5029596128586884e-03, .4231289413573305e+00, + .5115878016710237e-03, .4422687522901076e+00, .5195943228286058e-03, + .4602317415082190e+00, .5270430946153614e-03, .4771133961932997e+00, + .5339896662637906e-03, .4930008443009192e+00, .5404825264865527e-03, + .5079733438010129e+00, + .5465641777837335e-03, .5221028734536996e+00, .5522720230787040e-03, + .5354547549768437e+00, .5576391012124826e-03, .5480882663954187e+00, + .5626947000884556e-03, .5600572245757691e+00, .5674648702683609e-03, + .5714105259898375e+00, .5719728571649507e-03, .5821926413793687e+00, + .5762394663436609e-03, .5924440638839293e+00, .5802833735974854e-03, + .6022017124008726e+00, .5841213892159104e-03, .6114992931083616e+00, + .5877686840933180e-03, .6203676226097062e+00, .5912389839103901e-03, + .6288349163028890e+00, .5945447364939478e-03, .6369270455027728e+00, + .5976972565551031e-03, .6446677666447656e+00, .6007068512753596e-03, + .6520789256394533e+00, .6035829296188047e-03, .6591806401656133e+00, + .6063340977673600e-03, .6659914624065441e+00, .6089682426829690e-03, + .6725285244645835e+00, .6114926054781716e-03, .6788076684377859e+00, + .6139138460109964e-03, .6848435629139552e+00, .6162380999006194e-03, + .6906498074313085e+00, .6184710289781289e-03, .6962390262713238e+00, + .6206178660351128e-03, .7016229527864589e+00, .6226834546060953e-03, + .7068125053216800e+00, .6246722844146502e-03, .7118178556622645e+00, + .6265885230237052e-03, .7166484908292960e+00, .6284360441552101e-03, + .7213132689469173e+00, .6302184530805945e-03, .7258204698201126e+00, + .6319391094293539e-03, + .7301778407871102e+00, .6336011477170803e-03, .7343926383451021e+00, + .6352074958549976e-03, .7384716659907177e+00, .6367608918694911e-03, + .7424213086665331e+00, .6382638990313429e-03, .7462475641609494e+00, + .6397189195696667e-03, .7499560717702578e+00, .6411282071242605e-03, + .7535521384979339e+00, .6424938780717482e-03, .7570407630365846e+00, + .6438179218450410e-03, .7604266577520003e+00, .6451022103519516e-03, + .7637142688659893e+00, .6463485065869407e-03, .7669077950147200e+00, + .6475584725197199e-03, .7700112043418378e+00, .6487336763355520e-03, + .7730282502703713e+00, .6498755990944187e-03, .7759624860841656e+00, + .6509856408696007e-03, .7788172784380622e+00, .6520651264205267e-03, + .7815958199061201e+00, .6531153104498718e-03, .7843011406686931e+00, + .6541373824907589e-03, .7869361194320170e+00, .6551324714664429e-03, + .7895034936680300e+00, .6561016499619955e-03, .7920058692573547e+00, + .6570459382452019e-03, .7944457296146663e+00, .6579663080720945e-03, + .7968254443729997e+00, .6588636863112547e-03, .7991472777018847e+00, + .6597389584201900e-03, .8014133963335314e+00, .6605929718067311e-03, + .8036258773716017e+00, .6614265391084759e-03, .8057867159584249e+00, + .6622404414238483e-03, .8078978328788472e+00, .6630354315293254e-03, + .8099610821822974e+00, + .6638122371188470e-03, .8119782589091303e+00, .6645715641033481e-03, + .8139511070129370e+00, .6653141000107842e-03, .8158813275773382e+00, + .6660405175299570e-03, .8177705874338766e+00, .6667514782449204e-03, + .8196205282970527e+00, .6674476366107756e-03, .8214327765433879e+00, + .6681296442262653e-03, .8232089537737035e+00, .6687981544637654e-03, + .8249506883116352e+00, .6694538275230569e-03, .8266596278067956e+00, + .6700973359816298e-03, .8283374531279623e+00, .6707293709212047e-03, + .8299858937501699e+00, .6713506487175973e-03, .8316067448595304e+00, + .6719619185889133e-03, .8332018864208099e+00, .6725639710052013e-03, + .8347733044749573e+00, .6731576470708964e-03, .8363231149564427e+00, + .6737438489993667e-03, .8378535903427503e+00, .6743235518061943e-03, + .8393671894697208e+00, .6748978163539151e-03, .8408665908653167e+00, + .6754678038850311e-03, .8423547299689948e+00, .6760347921811532e-03, + .8438348406117731e+00, .6766001934827970e-03, .8453105011300979e+00, + .6771655742948708e-03, .8467856854705638e+00, .6777326771850360e-03, + .8482648196070496e+00, .6783034446530447e-03, .8497528435300649e+00, + .6788800451053436e-03, .8512552789714525e+00, .6794649009063182e-03, + .8527783028853924e+00, .6800607183903050e-03, .8543288265058851e+00, + .6806705196006733e-03, + .8559145795259218e+00, .6812976753667025e-03, .8575441985760543e+00, + .6819459391275817e-03, .8592273186991227e+00, .6826194806570309e-03, + .8609746659004745e+00, .6833229185231614e-03, .8627981480750792e+00, + .6840613497285638e-03, .8647109406514445e+00, .6848403745099397e-03, + .8667275621282101e+00, .6856661137341258e-03, .8688639333027147e+00, + .6865452157148281e-03, .8711374124074637e+00, .6874848486099405e-03, + .8735667966111717e+00, .6884926738773655e-03, .8761722784739423e+00, + .6895767956239815e-03, .8789753440908044e+00, .6907456801615706e-03, + .8819985980014631e+00, .6920080398012621e-03, .8852654987569412e+00, + .6933726750250028e-03, .8887999886800295e+00, .6948482698509175e-03, + .8926260022952612e+00, .6964431366613300e-03, .8967668406721245e+00, + .1687522084062742e-03, .2050350430521891e-03, .7143489225104815e-02, + .2367622652786059e-03, .3374351625166600e-01, .2645340906026387e-03, + .6835618366232366e-01, .2889390544558335e-03, .1056829987008023e+00, + .3104940979691790e-03, .1431437456375445e+00, .3296350786177901e-03, + .1794723727318731e+00, .3467237429868135e-03, .2140734485464243e+00, + .3620589217153205e-03, .2467046039766637e+00, .3758876341573480e-03, + .2773116025546536e+00, .3884147581578293e-03, .3059395516583021e+00, + .3998110227339366e-03, + .3326839408735750e+00, .4102194641152033e-03, .3576632785546656e+00, + .4197605903284232e-03, .3810037669469621e+00, .4285365009823915e-03, + .4028308242884812e+00, .4366341766023805e-03, .4232645539797606e+00, + .4441281128435874e-03, .4424175040394658e+00, .4510824389517647e-03, + .4603937534270471e+00, .4575526297479205e-03, .4772887576403662e+00, + .4635868963219365e-03, .4931896163747717e+00, .4692273217485011e-03, + .5081755622500646e+00, .4745107935135632e-03, .5223185511672184e+00, + .4794697730555439e-03, .5356838841319745e+00, .4841329341264508e-03, + .5483308203204026e+00, .4885256949620448e-03, .5603131593778051e+00, + .4926706640505523e-03, .5716797819868060e+00, .4965880152488166e-03, + .5824751443673352e+00, .5002958048415423e-03, .5927397262665235e+00, + .5038102406673260e-03, .6025104342019820e+00, .5071459114881099e-03, + .6118209628858234e+00, .5103159832377398e-03, .6207021182846412e+00, + .5133323675598979e-03, .6291821059168485e+00, .5162058670665758e-03, + .6372867879128392e+00, .5189463009622880e-03, .6450399121650791e+00, + .5215626140454308e-03, .6524633166362534e+00, .5240629715848113e-03, + .6595771116117261e+00, .5264548421517410e-03, .6663998424002746e+00, + .5287450701469129e-03, .6729486347171443e+00, .5309399394814304e-03, + .6792393247326799e+00, + .5330452296408964e-03, .6852865755411093e+00, .5350662651709710e-03, + .6911039815981985e+00, .5370079594647384e-03, .6967041624928251e+00, + .5388748536006167e-03, .7020988472546843e+00, .5406711508695714e-03, + .7072989502566063e+00, .5424007475382063e-03, .7123146396434907e+00, + .5440672603167729e-03, .7171553991088069e+00, .5456740509357201e-03, + .7218300837422168e+00, .5472242481790601e-03, .7263469705865458e+00, + .5487207676758462e-03, .7307138044675716e+00, .5501663297110800e-03, + .7349378395946277e+00, .5515634752832511e-03, .7390258773726449e+00, + .5529145806065207e-03, .7429843008159668e+00, .5542218702305272e-03, + .7468191059101640e+00, .5554874289292619e-03, .7505359302293567e+00, + .5567132124919160e-03, .7541400790825443e+00, .5579010575325747e-03, + .7576365494325465e+00, .5590526904217706e-03, .7610300518048510e+00, + .5601697354308826e-03, .7643250303805051e+00, .5612537221699207e-03, + .7675256814467769e+00, .5623060923901496e-03, .7706359703613220e+00, + .5633282062150818e-03, .7736596471697186e+00, .5643213478564601e-03, + .7766002610022336e+00, .5652867308658178e-03, .7794611733633313e+00, + .5662255029669265e-03, .7822455704165419e+00, .5671387505098367e-03, + .7849564743577130e+00, .5680275025831865e-03, .7875967539612229e+00, + .5688927348179374e-03, + .7901691343763252e+00, .5697353729126355e-03, .7926762062443136e+00, + .5705562959076292e-03, .7951204342015494e+00, .5713563392333756e-03, + .7975041648285145e+00, .5721362975559819e-03, .7998296341008703e+00, + .5728969274414421e-03, .8020989743949635e+00, .5736389498586027e-03, + .8043142210972835e+00, .5743630525397174e-03, .8064773188650033e+00, + .5750698922165000e-03, .8085901275829018e+00, .5757600967488519e-03, + .8106544280606480e+00, .5764342671629149e-03, .8126719275136132e+00, + .5770929796147660e-03, .8146442648700572e+00, .5777367872959363e-03, + .8165730159477090e+00, .5783662222969873e-03, .8184596985434300e+00, + .5789817974456180e-03, .8203057774808211e+00, .5795840081362118e-03, + .8221126696623233e+00, .5801733341683536e-03, .8238817491745800e+00, + .5807502416126773e-03, .8256143524986065e+00, .5813151847234263e-03, + .8273117838796568e+00, .5818686079183535e-03, .8289753209156332e+00, + .5824109478480398e-03, .8306062204274619e+00, .5829426355783928e-03, + .8322057246800982e+00, .5834640989120021e-03, .8337750680287443e+00, + .5839757648761716e-03, .8353154840714917e+00, .5844780624078450e-03, + .8368282133969516e+00, .5849714252682631e-03, .8383145120235179e+00, + .5854562952230521e-03, .8397756606357110e+00, .5859331255265216e-03, + .8412129747325485e+00, + .5864023847522156e-03, .8426278158130220e+00, .5868645610151844e-03, + .8440216037344282e+00, .5873201666349592e-03, .8453958303903652e+00, + .5877697432917324e-03, .8467520748664289e+00, .5882138677316644e-03, + .8480920202427393e+00, .5886531580803781e-03, .8494174722229419e+00, + .5890882808263732e-03, .8507303797787185e+00, .5895199585379871e-03, + .8520328580063178e+00, .5899489783783064e-03, .8533272133961881e+00, + .5903762014816018e-03, .8546159717171726e+00, .5908025732518324e-03, + .8559019087112308e+00, .5912291346377758e-03, .8571880837811911e+00, + .5916570344294526e-03, .8584778768299521e+00, .5920875426055483e-03, + .8597750283715609e+00, .5925220647400795e-03, .8610836829786467e+00, + .5929621574468788e-03, .8624084360518852e+00, .5934095448005555e-03, + .8637543837896255e+00, .5938661356200435e-03, .8651271760926207e+00, + .5943340414329835e-03, .8665330719519609e+00, .5948155948529893e-03, + .8679789966288171e+00, .5953133679941353e-03, .8694725996326263e+00, + .5958301904145430e-03, .8710223121296252e+00, .5963691659207649e-03, + .8726374019561603e+00, .5969336873744813e-03, .8743280238622816e+00, + .5975274484218217e-03, .8761052619650037e+00, .5981544508145503e-03, + .8779811606467382e+00, .5988190057157910e-03, .8799687393004150e+00, + .5995257270899495e-03, + .8820819854186045e+00, .6002795149823573e-03, .8843358195863941e+00, + .6010855262223838e-03, .8867460250263935e+00, .6019491298677465e-03, + .8893291335470804e+00, .6028758445922773e-03, .8921022591848045e+00, + .6038712552612013e-03, .8950828706648276e+00, .6049409062046725e-03, + .8982884942350033e+00, .6060901692668508e-03, .9017363396754307e+00, + .1481251565099711e-03, .1799742621307956e-03, .7143974934319647e-02, + .2078249765617697e-03, .3374626735466673e-01, .2322040770469374e-03, + .6836267972058510e-01, .2536281024389343e-03, .1056944648470500e+00, + .2725507603509361e-03, .1431611968300346e+00, .2893545952483257e-03, + .1794966519846322e+00, .3043571067937865e-03, .2141052583069300e+00, + .3178205747305427e-03, .2467445313185863e+00, .3299618049127232e-03, + .2773601392459256e+00, .3409606161517330e-03, .3059971101361032e+00, + .3509668551995601e-03, .3327508670011682e+00, .3601060630945735e-03, + .3577398618615326e+00, .3684840080409944e-03, .3810902489006329e+00, + .3761903012944965e-03, .4029274050222500e+00, .3833012841788339e-03, + .4233713978033811e+00, .3898823401138323e-03, .4425347439853034e+00, + .3959897539743794e-03, .4605214950272289e+00, .4016722146902933e-03, + .4774270820870889e+00, .4069720358522181e-03, .4933385831828130e+00, + .4119261525257769e-03, + .5083352115151812e+00, .4165669396400193e-03, .5224889054945915e+00, + .4209228874124991e-03, .5358649502937634e+00, .4250191616382618e-03, + .5485225906897057e+00, .4288780707755034e-03, .5605156131771370e+00, + .4325194571969843e-03, .5718928863819531e+00, .4359610264298928e-03, + .5826988554317172e+00, .4392186254392934e-03, .5929739898366225e+00, + .4423064788406665e-03, .6027551866407443e+00, .4452373902181403e-03, + .6120761317679944e+00, .4480229143725210e-03, .6209676230156103e+00, + .4506735052476993e-03, .6294578582946426e+00, .4531986434246486e-03, + .6375726926413187e+00, .4556069463824008e-03, .6453358673250855e+00, + .4579062641690959e-03, .6527692141203824e+00, .4601037626756183e-03, + .6598928375275065e+00, .4622059963377751e-03, .6667252774457851e+00, + .4642189717935211e-03, .6732836545324753e+00, .4661482037761131e-03, + .6795838002301146e+00, .4679987643218002e-03, .6856403732164480e+00, + .4697753262034514e-03, .6914669638252581e+00, .4714822013627870e-03, + .6970761878028088e+00, .4731233749983658e-03, .7024797706018147e+00, + .4747025358699538e-03, .7076886232711463e+00, .4762231032989864e-03, + .7127129108730295e+00, .4776882512767774e-03, .7175621142484538e+00, + .4791009300347118e-03, .7222450858541227e+00, .4804638853820701e-03, + .7267701003089459e+00, + .4817796760758937e-03, .7311449002133155e+00, .4830506894522046e-03, + .7353767377389203e+00, .4842791555179398e-03, .7394724124294618e+00, + .4854671596773276e-03, .7434383056023196e+00, .4866166542444491e-03, + .7472804116970708e+00, .4877294688748149e-03, .7510043668780048e+00, + .4888073200324911e-03, .7546154751637144e+00, .4898518195952196e-03, + .7581187323268813e+00, .4908644826877864e-03, .7615188477809879e+00, + .4918467348233061e-03, .7648202646474365e+00, .4927999184228891e-03, + .7680271781760355e+00, .4937252987761405e-03, .7711435526736958e+00, + .4946240694979417e-03, .7741731370801548e+00, .4954973575308488e-03, + .7771194793153748e+00, .4963462277370809e-03, .7799859395107068e+00, + .4971716871193750e-03, .7827757022247849e+00, .4979746887058557e-03, + .7854917877352522e+00, .4987561351304407e-03, .7881370624886681e+00, + .4995168819371097e-03, .7907142487831792e+00, .5002577406335545e-03, + .7932259337516524e+00, .5009794815172498e-03, .7956745777068556e+00, + .5016828362948059e-03, .7980625219048639e+00, .5023685005135441e-03, + .8003919957780823e+00, .5030371358225455e-03, .8026651236850512e+00, + .5036893720789472e-03, .8048839312204863e+00, .5043258093139596e-03, + .8070503511257529e+00, .5049470195719527e-03, .8091662288371395e+00, + .5055535486349787e-03, + .8112333277068590e+00, .5061459176442604e-03, .8132533339296184e+00, + .5067246246294598e-03, .8152278612058557e+00, .5072901459559465e-03, + .8171584551713140e+00, .5078429376997978e-03, .8190465976214947e+00, + .5083834369598832e-03, .8208937105586977e+00, .5089120631160979e-03, + .8227011600888023e+00, .5094292190426258e-03, .8244702601946616e+00, + .5099352922850141e-03, .8262022764129838e+00, .5104306562098391e-03, + .8278984294418413e+00, .5109156711358289e-03, .8295598987064962e+00, + .5113906854554846e-03, .8311878259120602e+00, .5118560367565149e-03, + .8327833186126263e+00, .5123120529527563e-03, .8343474538279233e+00, + .5127590534347159e-03, .8358812817402723e+00, .5131973502504269e-03, + .8373858295066677e+00, .5136272493279681e-03, .8388621052231878e+00, + .5140490517517615e-03, .8403111020816669e+00, .5144630551056335e-03, + .8417338027616508e+00, .5148695548966082e-03, .8431311841041218e+00, + .5152688460744951e-03, .8445042221173288e+00, .5156612246635426e-03, + .8458538973693004e+00, .5160469895237514e-03, .8471812008262565e+00, + .5164264442608728e-03,.8484871402011642e+00, .5167998993056541e-03, + .8497727468820885e+00, .5171676741845232e-03, .8510390835157447e+00, + .5175301000056107e-03, .8522872523277160e+00, .5178875221857676e-03, + .8535184042670900e+00, + .5182403034460151e-03, .8547337490696901e+00, .5185888271046153e-03, + .8559345663404898e+00, .5189335006986103e-03, .8571222177620127e+00, + .5192747599661662e-03, .8582981605412726e+00, .5196130732232652e-03, + .8594639622127785e+00, .5199489461690734e-03, .8606213169188581e+00, + .5202829271545004e-03, .8617720632905069e+00, .5206156129478311e-03, + .8629182040514101e+00, .5209476550295670e-03, .8640619274638366e+00, + .5212797664454193e-03, .8652056307266341e+00, .5216127292413131e-03, + .8663519454211874e+00, .5219474024967696e-03, .8675037650792340e+00, + .5222847309624981e-03, .8686642749148173e+00, .5226257542936992e-03, + .8698369837189167e+00, .5229716168515654e-03, .8710257578565097e+00, + .5233235780207398e-03, .8722348572285707e+00, .5236830229588920e-03, + .8734689729618574e+00, .5240514736547882e-03, .8747332664628638e+00, + .5244306001218837e-03, .8760334093141518e+00, .5248222314940908e-03, + .8773756232962860e+00, .5252283667175941e-03, .8787667195815746e+00, + .5256511844461572e-03, .8802141358619505e+00, .5260930516464654e-03, + .8817259698386895e+00, .5265565303044835e-03, .8833110071141399e+00, + .5270443814944088e-03, .8849787410860012e+00, .5275595659308863e-03, + .8867393819581020e+00, .5281052399771031e-03, .8886038514594998e+00, + .5286847459332971e-03, + .8905837593259870e+00, .5293015952926587e-03, .8926913570756628e+00, + .5299594435392922e-03, .8949394641477838e+00, .5306620549953031e-03, + .8973413611324083e+00, .5314132562256762e-03, .8999106446760794e+00, + .5322168766096216e-03, .9026610388027025e+00, .5330766749183085e-03, + .9056061579514983e+00, .5339962511354281e-03, .9087592181279729e+00, + .1291672658807919e-03, .1569411415132314e-03, .7144429374444041e-02, + .1812286696375032e-03, .3374884163870904e-01, .2024891487895646e-03, + .6836875906346668e-01, .2211729609091939e-03, .1057051970576302e+00, + .2376757078934563e-03, .1431775337300160e+00, .2523309440420044e-03, + .1795193851821314e+00, .2654155096114621e-03, .2141350485529856e+00, + .2771580968905830e-03, .2467819320733997e+00, .2877477478365611e-03, + .2774056154477370e+00, .2973412539386665e-03, .3060510531385813e+00, + .3060692727883761e-03, .3328136064982617e+00, .3140412687616450e-03, + .3578116754563008e+00, .3213494654089220e-03, .3811713698313008e+00, + .3280719982928522e-03, .4030180284424702e+00, .3342754323013638e-03, + .4234716859228214e+00, .3400167776073826e-03, .4426448303068433e+00, + .3453451109288780e-03, .4606414878637722e+00, .3503028857160415e-03, + .4775570675004032e+00, .3549269964559184e-03, .4934786274558236e+00, + .3592496478431822e-03, + .5084853632454121e+00, .3632990683734921e-03, .5226491973781846e+00, + .3671000992804959e-03, .5360354006553708e+00, .3706746830802694e-03, + .5487032048025572e+00, .3740422708473267e-03, .5607063844089743e+00, + .3772201633670793e-03, .5720937971957492e+00, .3802237982173855e-03, + .5829098782647340e+00, .3830669924186714e-03, .5931950878770883e+00, + .3857621484003172e-03, .6029863145180096e+00, .3883204295409269e-03, + .6123172361692740e+00, .3907519103608007e-03, .6212186432401899e+00, + .3930657055071256e-03, .6297187267546153e+00, .3952700809230814e-03, + .6378433353164356e+00, .3973725499905643e-03, .6456162041780895e+00, + .3993799569511753e-03, .6530591594781886e+00, .4012985495172340e-03, + .6601923004327613e+00, .4031340422649590e-03, .6670341619826434e+00, + .4048916721408514e-03, .6736018601298540e+00, .4065762471981460e-03, + .6799112219451941e+00, .4081921895038212e-03, .6859769020007800e+00, + .4097435730108617e-03, .6918124867754874e+00, .4112341570695012e-03, + .6974305883977158e+00, .4126674161504436e-03, .7028429289271262e+00, + .4140465662688992e-03, .7080604162333366e+00, .4153745885277149e-03, + .7130932124031323e+00, .4166542501385347e-03, .7179507954967295e+00, + .4178881232298605e-03, .7226420153762622e+00, .4190786017085115e-03, + .7271751442443414e+00, + .4202279164050269e-03, .7315579224557873e+00, .4213381487029441e-03, + .7357976001001488e+00, .4224112428257702e-03, .7399009747952365e+00, + .4234490169331078e-03, .7438744260815747e+00, .4244531731582231e-03, + .7477239467635279e+00, .4254253067028491e-03, .7514551715040853e+00, + .4263669140908001e-03, .7550734029462083e+00, .4272794006696848e-03, + .7585836356036648e+00, .4281640874393643e-03, .7619905777378661e+00, + .4290222172765655e-03, .7652986714139369e+00, .4298549606170237e-03, + .7685121109086968e+00, .4306634206495281e-03, .7716348596250679e+00, + .4314486380701255e-03, .7746706656513523e+00, .4322115954393903e-03, + .7776230760895890e+00, .4329532211809737e-03, .7804954502645794e+00, + .4336743932555310e-03, .7832909719139642e+00, .4343759425404994e-03, + .7860126604497781e+00, .4350586559430094e-03, .7886633813730524e+00, + .4357232792703970e-03, .7912458559151491e+00, .4363705198802944e-03, + .7937626699724827e+00, .4370010491300795e-03, .7962162823950203e+00, + .4376155046435118e-03, .7986090326833559e+00, .4382144924106579e-03, + .8009431481441662e+00, .4387985887356742e-03, .8032207505493939e+00, + .4393683420456565e-03, .8054438623405243e+00, .4399242745725549e-03, + .8076144124157677e+00, .4404668839190812e-03, .8097342415347859e+00, + .4409966445185832e-03, + .8118051073727768e+00, .4415140089980146e-03, .8138286892532131e+00, + .4420194094523807e-03, .8158065925862987e+00, .4425132586383796e-03, + .8177403530382282e+00, .4429959510943727e-03, .8196314404545940e+00, + .4434678641933102e-03, .8214812625597571e+00, .4439293591347870e-03, + .8232911684526717e+00, .4443807818820194e-03, .8250624519185151e+00, + .4448224640492010e-03, .8267963545745015e+00, .4452547237444166e-03, + .8284940688674631e+00, .4456778663730607e-03, .8301567409401316e+00, + .4460921854065215e-03, .8317854733825585e+00, .4464979631207512e-03, + .8333813278847675e+00, .4468954713092401e-03, .8349453278065194e+00, + .4472849719748584e-03, .8364784606800110e+00, .4476667180050050e-03, + .8379816806613994e+00, .4480409538345297e-03, .8394559109472592e+00, + .4484079161009533e-03, .8409020461724398e+00, .4487678342966111e-03, + .8423209548062871e+00, .4491209314224874e-03, .8437134815648469e+00, + .4494674246486925e-03, .8450804498574688e+00, .4498075259867541e-03, + .8464226642871850e+00, .4501414429791688e-03, .8477409132253626e+00, + .4504693794119635e-03, .8490359714824147e+00, .4507915360563808e-03, + .8503086030978187e+00, .4511081114462013e-03, .8515595642743328e+00, + .4514193026976681e-03, .8527896064831288e+00, .4517253063794774e-03, + .8539994797685749e+00, + .4520263194408489e-03, .8551899362836138e+00, .4523225402062811e-03, + .8563617340890786e+00, .4526141694462433e-03, .8575156412528867e+00, + .4529014115337412e-03, .8586524402878235e+00, .4531844756974208e-03, + .8597729329695807e+00, .4534635773826384e-03, .8608779455798124e+00, + .4537389397327130e-03, .8619683346221994e+00, .4540107952033793e-03, + .8630449930628203e+00, .4542793873242631e-03, .8641088571494663e+00, + .4545449726219747e-03, .8651609138678200e+00, .4548078227201481e-03, + .8662022090955665e+00, .4550682266323894e-03, .8672338565183648e+00, + .4553264932646083e-03, .8682570473740338e+00, .4555829541435220e-03, + .8692730610930815e+00, .4558379663881761e-03, .8702832769045586e+00, + .4560919159410250e-03, .8712891864758329e+00, .4563452210743556e-03, + .8722924076528336e+00, .4565983361864682e-03, .8732946993631147e+00, + .4568517558999058e-03, .8742979777371169e+00, .4571060194709263e-03, + .8753043334925269e+00, .4573617155151244e-03, .8763160506117581e+00, + .4576194870483323e-03, .8773356263222484e+00, .4578800368343567e-03, + .8783657923622515e+00, .4581441330213403e-03, .8794095374796469e+00, + .4584126150361641e-03, .8804701310663527e+00, .4586863996908342e-03, + .8815511477743261e+00, .4589664874357118e-03, .8826564928888149e+00, + .4592539686711794e-03, + .8837904281482389e+00, .4595500300013319e-03, .8849575975954920e+00, + .4598559602799827e-03, .8861630529202465e+00, .4601731562602071e-03, + .8874122776038270e+00, .4605031276134677e-03, .8887112090056589e+00, + .4608475010329713e-03, .8900662573321374e+00, .4612080230785231e-03, + .8914843202051330e+00, .4615865613575363e-03, .8929727913000981e+00, + .4619851035704269e-03, .8945395612571059e+00, .4624057538807515e-03, + .8961930087896581e+00, .4628507260045860e-03, .8979419796374420e+00, + .4633223323547168e-03, .8997957507473553e+00, .4638229685297288e-03, + .9017639768452591e+00, .4643550924143431e-03, .9038566164094044e+00, + .4649211971655587e-03, .9060838340132801e+00, .4655237774111018e-03, + .9084558761162183e+00, .4661652880954744e-03, .9109829176962647e+00, + .4668480955879464e-03, .9136748776971255e+00}; +} #endif diff --git a/integration/ROCK/rock4_type.H b/integration/ROCK/rock_type.H similarity index 90% rename from integration/ROCK/rock4_type.H rename to integration/ROCK/rock_type.H index 81551505e6..abac4e3009 100644 --- a/integration/ROCK/rock4_type.H +++ b/integration/ROCK/rock_type.H @@ -1,5 +1,5 @@ -#ifndef ROCK4_TYPE_H -#define ROCK4_TYPE_H +#ifndef ROCK_TYPE_H +#define ROCK_TYPE_H #include #include @@ -16,10 +16,10 @@ const amrex::Real UROUND = std::numeric_limits::epsilon(); // We will use this parameter to determine if a given species abundance // is unreasonably small or large (each X must satisfy // -failure_tolerance <= X <= 1.0 + failure_tolerance). -const Real rock4_failure_tolerance = 1.e-2_rt; +const Real rock_failure_tolerance = 1.e-2_rt; -struct rock4_t { +struct rock_t { // The initial point of the integration. amrex::Real t; @@ -64,11 +64,15 @@ struct rock4_t { RArray1D fnt; RArray1D yjm1; RArray1D yjm2; + + // these 2 arrays are only needed for ROCK4 RArray1D yjm3; RArray1D yjm4; + + // this is used by the spectral radius power method RArray1D sprad; - // because our rhs wrapper requires that rock4_t rstate.y() hold the state + // because our rhs wrapper requires that rock_t rstate.y() hold the state // that is used for evaluating the RHS, we need to create an additional // temporary to backup the contents of y RArray1D y_backup; From 0edf6fe8954ea76c56aa87132d634276e682b031 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 09:53:32 -0400 Subject: [PATCH 27/45] more work on getting ROCK2 installed --- integration/ROCK/Make.package | 1 + integration/ROCK/_parameters | 2 + integration/ROCK/actual_integrator.H | 3 + integration/ROCK/{rock4.H => rock.H} | 98 +- integration/ROCK/rock2_coefficients.H | 1597 +++++++++++++++++++++++++ integration/ROCK/rock_type.H | 4 +- 6 files changed, 1677 insertions(+), 28 deletions(-) rename integration/ROCK/{rock4.H => rock.H} (86%) create mode 100644 integration/ROCK/rock2_coefficients.H diff --git a/integration/ROCK/Make.package b/integration/ROCK/Make.package index 3bf79365c3..f91f99fd7b 100644 --- a/integration/ROCK/Make.package +++ b/integration/ROCK/Make.package @@ -7,5 +7,6 @@ else endif CEXE_headers += rock_type.H +CEXE_headers += rock2_coefficients.H CEXE_headers += rock4_coefficients.H CEXE_headers += rock4.H diff --git a/integration/ROCK/_parameters b/integration/ROCK/_parameters index 81ef30d75a..dfa8c1c3b0 100644 --- a/integration/ROCK/_parameters +++ b/integration/ROCK/_parameters @@ -1 +1,3 @@ @namespace: integrator + +rock_order integer 2 diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index ea2271e017..b93867e695 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -15,6 +15,9 @@ template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void actual_integrator (BurnT& state, Real dt) { + + using namespace integrator_rp; + rock_t rock_state{}; // Set the tolerances. diff --git a/integration/ROCK/rock4.H b/integration/ROCK/rock.H similarity index 86% rename from integration/ROCK/rock4.H rename to integration/ROCK/rock.H index 8f8abed83f..47975e845b 100644 --- a/integration/ROCK/rock4.H +++ b/integration/ROCK/rock.H @@ -1,5 +1,5 @@ -#ifndef ROCK4_H -#define ROCK4_H +#ifndef ROCK_H +#define ROCK_H #include #include @@ -12,13 +12,16 @@ #include #endif #include +#include #include #include AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mdegre(rock_t& rstate) +void mdegre4(rock_t& rstate) { + // this is the ROCK4 version + constexpr amrex::Array1D ms = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 41, 44, 47, 50, 53, 56, 59, 63, 67, 71, @@ -49,7 +52,7 @@ void mdegre(rock_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rfstep (BurnT& state, rock_t& rstate) +Real r4step (BurnT& state, rock_t& rstate) { // Solut. at t+h by an explicit (mdeg+4)-stages formula. @@ -368,7 +371,7 @@ Real rockfrho (BurnT& state, rock_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rockfcore (BurnT& state, rock_t& rstate) +int rock4core (BurnT& state, rock_t& rstate) { // Core integrator for ROCK4. @@ -439,41 +442,77 @@ int rockfcore (BurnT& state, rock_t& rstate) rstate.min_rho = std::min(rstate.min_rho, static_cast(std::round(eigmax))); } - // The number of stages. + // The number of stages + if (rock_order == 2) { + rstate.mdeg = static_cast(std::sqrt((1.5_rt + rstate.h * eigmax) / 0.811_rt)) + 1; - rstate.mdeg = static_cast(std::sqrt((3.0_rt + rstate.h * eigmax) / 0.353_rt)) + 1; + if (rstate.mdeg > 200) { + rstate.h = 0.8_rt * (std::pow(200.0_rt, 2) * 0.811_rt - 1.5_rt) / eigmax; + rstate.mdeg = 200; + last = false; + } - if (rstate.mdeg > 152) { - rstate.h = 0.8_rt * (std::pow(152.0_rt, 2) * 0.353_rt - 3.0_rt) / eigmax; - rstate.mdeg = 152; - last = false; - } + rstate.mdeg = std::max(rstate.mdeg, 3) - 2; - rstate.mdeg = std::max(rstate.mdeg, 5) - 4; + if (rstate.mdeg != mdego) { + mdegre2(rstate); + } - if (rstate.mdeg != mdego) { - mdegre(rstate); - } + if (rstate.mdeg + 2 > rstate.max_stages) { + rstate.max_stages = rstate.mdeg + 2; + } + + } else { + rstate.mdeg = static_cast(std::sqrt((3.0_rt + rstate.h * eigmax) / 0.353_rt)) + 1; + + if (rstate.mdeg > 152) { + rstate.h = 0.8_rt * (std::pow(152.0_rt, 2) * 0.353_rt - 3.0_rt) / eigmax; + rstate.mdeg = 152; + last = false; + } + + rstate.mdeg = std::max(rstate.mdeg, 5) - 4; + + if (rstate.mdeg != mdego) { + mdegre4(rstate); + } - if (rstate.mdeg + 4 > rstate.max_stages) { - rstate.max_stages = rstate.mdeg + 4; + if (rstate.mdeg + 4 > rstate.max_stages) { + rstate.max_stages = rstate.mdeg + 4; + } } // Computation of an integration step. - err = rfstep(state, rstate); + if (rock_order == 2) { + err = r2step(state, rstate); + rstate.nfe += rstate.mdeg + 1; + } else { + err = r4step(state, rstate); + rstate.nfe += rstate.mdeg + 4; + } mdego = rstate.mdeg; rstate.nsteps++; - rstate.nfe += rstate.mdeg + 4; // Error control procedure. - Real fac = std::pow(1.0_rt / err, 0.25_rt); + Real fac; + if (rock_order == 2) { + fac = std::pow(1.0_rt / err, 0.5_rt); + + if (errp != 0.0_rt && ! reject) { + Real facp = std::pow(errp, 0.5_rt) * fac * fac * (rstate.h / hp); + fac = std::min(fac, facp); + } + + } else { + fac = std::pow(1.0_rt / err, 0.25_rt); - if (errp != 0.0_rt && ! reject) { - Real facp = std::pow(errp, 0.25_rt) * fac * fac * (rstate.h / hp); - fac = std::min(fac, facp); + if (errp != 0.0_rt && ! reject) { + Real facp = std::pow(errp, 0.25_rt) * fac * fac * (rstate.h / hp); + fac = std::min(fac, facp); + } } if (reject) { @@ -499,7 +538,8 @@ int rockfcore (BurnT& state, rock_t& rstate) hp = rstate.h; rstate.h = hnew; nrho++; - nrho = nrho+1 % 10; + Real rho_cycle = rock_order == 2 ? 25 : 10; + nrho = nrho+1 % rho_cycle; if (last) { return rstate.idid; } else { @@ -544,6 +584,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int rock4 (BurnT& state, rock_t& rstate) { + using namespace integrator_rp; + const Real rmax = 0.1_rt; const Real rmin = 10.0_rt * UROUND; @@ -590,7 +632,11 @@ int rock4 (BurnT& state, rock_t& rstate) // call the integrator - rockfcore(state, rstate); + if (rock_order == 2) { + rock2core(state, rstate); + } else { + rock4core(state, rstate); + } return rstate.idid; } diff --git a/integration/ROCK/rock2_coefficients.H b/integration/ROCK/rock2_coefficients.H new file mode 100644 index 0000000000..8a4f4dc1e8 --- /dev/null +++ b/integration/ROCK/rock2_coefficients.H @@ -0,0 +1,1597 @@ +#ifndef ROCK2_COEFFICIENTS_H +#define ROCK2_COEFFICIENTS_H + +// The parameters of the finishing procedure + +namespace rock2_coeffs { + + inline AMREX_GPU_MANAGED amrex::Array1D fp1{ + .4102693550421609e+00,.3889624104727243e+00,.3804692420283886e+00, + .3760815680865637e+00,.3735177579729938e+00,.3719340231904236e+00, + .3708571145968057e+00,.3700947006022557e+00,.3695328931459086e+00, + .3691085831661758e+00,.3687813249652330e+00,.3685244707068931e+00, + .3683185599507446e+00,.3681542178682514e+00,.3680181997765286e+00, + .3679084456991284e+00,.3678181571053212e+00,.3678314333608541e+00, + .3677897070402892e+00,.3681800192470787e+00,.3681272993461229e+00, + .3680840569645587e+00,.3680522380648169e+00,.3680263578626069e+00, + .3680061275157194e+00,.3679837719607466e+00,.3679668653311732e+00, + .3679542340323301e+00,.3679429332584250e+00,.3679349432021754e+00, + .3679290943359695e+00,.3679242023884676e+00,.3679207541681089e+00, + .3679185472223537e+00,.3679168690130640e+00,.3679158588043139e+00, + .3679154592969145e+00,.3679154025286917e+00,.3679157536198652e+00, + .3679163676763697e+00,.3679171904021983e+00,.3679181786833088e+00, + .3679192462983425e+00,.3679204323079710e+00,.3679216942157868e+00, + .3679229127010114e+00}; + + inline AMREX_GPU_MANAGED amrex::Array1D fp2{ + .4495196112243335e+00,.4219428123056774e+00,.4084335547255627e+00, + .4009301129475925e+00,.3963598727888637e+00,.3934034185789226e+00, + .3913676516238603e+00,.3899091428928617e+00,.3888276962996660e+00, + .3880048656683555e+00,.3873650613539532e+00,.3868583585730354e+00, + .3864499054795832e+00,.3861178821587815e+00,.3858426294881124e+00, + .3856144554520791e+00,.3854228843194507e+00,.3853156085078759e+00, + .3851902798680153e+00,.3853705093720269e+00,.3851957294861824e+00, + .3850587241670235e+00,.3849515900397918e+00,.3848648995575697e+00, + .3847945082231300e+00,.3847117224407400e+00,.3846478726309070e+00, + .3845979020112835e+00,.3845472492329918e+00,.3845088319509754e+00, + .3844789634065264e+00,.3844504092359686e+00,.3844285235163634e+00, + .3844115660464609e+00,.3843957877945634e+00,.3843835767106759e+00, + .3843727001444428e+00,.3843632394180673e+00,.3843553120908175e+00, + .3843487746818896e+00,.3843434800804404e+00,.3843392605995229e+00, + .3843359163858929e+00,.3843331309176606e+00,.3843309056586355e+00, + .3843292556220249e+00}; + + // The recurrence parameters. + + inline AMREX_GPU_MANAGED amrex::Array1D recf{ + .1794612899156781e+00,.9326607661089206e-01, + .1268473641290642e+00,.2103378190528467e-01,.5786627125519110e-01, + .7776456841673992e-01,.2157791817707098e-01,.9528922876588625e-01, + .8723622960881585e-01,.3957407527591189e-01,.5338681630900877e-01, + .2247986572029358e-01,.6393794866013653e-01,.8616759602466630e-01, + .7433164225960258e-01,.1608966052260327e+00,.2881884349012583e-01, + .3903194468364506e-01,.2315538732440072e-01,.4666180548151659e-01, + .8821448969005685e-01,.5288869100008489e-01,.1558852247558841e+00, + .5955157767537859e-01,.2309801425356076e+00,.2193602641069006e-01, + .2980001095383432e-01,.2364036352805737e-01,.3566742298660092e-01, + .9017696352896830e-01,.4023410528284037e-01,.1575736612169138e+00, + .4421100494822930e-01,.2217430621508580e+00,.4869809870617736e-01, + .2940499060453847e+00,.1726461340854506e-01,.2350655101084081e-01, + .2399195202240830e-01,.2817607209777294e-01,.9173675182820953e-01, + .3176838133583184e-01,.1600219376374877e+00,.3469194451695863e-01, + .2221486436776174e+00,.3738763501161190e-01,.2814712676591709e+00, + .4053195010515956e-01,.3498597719348680e+00,.1394572558988917e-01, + .1901965402711647e-01,.2425291169233543e-01,.2282720812165174e-01, + .9294575674653435e-01,.2575013323611407e-01,.1622227426315588e+00, + .2807705415789230e-01, + .2243919049772138e+00,.3005377306193452e-01,.2802435651401261e+00, + .3196472247412495e-01,.3348331353768858e+00,.3423680369928859e-01, + .3989016641565190e+00,.1150212461258425e-01,.1570710434739234e-01, + .2445103607680476e-01,.1887147450684578e-01,.9388711032641100e-01, + .2130209293934879e-01,.1640457400037581e+00,.2322314183593871e-01, + .2267657098371261e+00,.2480419563989607e-01,.2818605427391582e+00, + .2620108024481186e-01,.3319747646481704e+00,.2760343567567814e-01, + .3822711818317003e+00,.2928725018247521e-01,.4419889482818066e+00, + .9650189035331108e-02,.1319127118048348e-01,.2460463437251803e-01, + .1586242507387037e-01,.9462914691841271e-01,.1791697874611395e-01, + .1655306545097223e+00,.1953741662819831e-01,.2288845437800309e+00, + .2085448736610660e-01,.2840687821706643e+00,.2197276738303543e-01, + .3327621634208670e+00,.2299581340430604e-01,.3779528907207973e+00, + .2405334751606276e-01,.4244163000944219e+00,.2532773055505536e-01, + .4799238174596328e+00,.8212831461177801e-02,.1123533801931148e-01, + .2472592539190680e-01,.1351988263110243e-01,.9522208667469109e-01, + .1527968649293853e-01,.1667413647253854e+00,.1666740304836073e-01, + .2306916351605186e+00,.1778972104750926e-01,.2862271893660237e+00, + .1872598244401872e-01, + .3345934460509904e+00,.1954407472805166e-01,.3778520013827246e+00, + .2031544030249000e-01,.4188775043096391e+00,.2113066217102199e-01, + .4619185110779211e+00,.2211266742157054e-01,.5134449754977242e+00, + .7074719613815112e-02,.9684509591053977e-02,.2482326781574381e-01, + .1166040318768419e-01,.9570219065303219e-01,.1318459890146430e-01, + .1677351729038757e+00,.1438717215812115e-01,.2322139970245483e+00, + .1535795943897448e-01,.2881631572191675e+00,.1616136143489047e-01, + .3366119552764601e+00,.1684787625840699e-01,.3791920530521655e+00, + .1746359793359561e-01,.4179163657739238e+00,.1805925334195525e-01, + .4554086296687285e+00,.1869919690078058e-01,.4953803203133830e+00, + .1946782991114719e-01,.5431953913817005e+00,.6158116280205625e-02, + .8434133870779752e-02,.2490250308471492e-01,.1015973796908432e-01, + .9609568511780181e-01,.1149255448537381e-01,.1685578212579456e+00, + .1254496388900155e-01,.2334953976202505e+00,.1339412026724050e-01, + .2898496927042313e+00,.1409430683259744e-01,.3385311597112782e+00, + .1468607650095395e-01,.3809553853632720e+00,.1520306181269769e-01, + .4187183922578105e+00,.1567773486210682e-01,.4536627812581018e+00, + .1614693417033556e-01,.4881324072137513e+00,.1665708022899876e-01, + .5253402953586265e+00, + .1726712768780420e-01,.5697310475495430e+00,.5408899288459016e-02, + .7411165652735432e-02,.2496784203339785e-01,.8931010375660927e-02, + .9642194989632852e-01,.1010622203571924e-01,.1692450860120974e+00, + .1103497280658699e-01,.2345784420179126e+00,.1178444954979593e-01, + .2913056300783272e+00,.1240145878830343e-01,.3402656182942943e+00, + .1292005530031986e-01,.3827567779382510e+00,.1336687811001040e-01, + .4201602339064523e+00,.1376523513966666e-01,.4539235794662016e+00, + .1413868046925951e-01,.4856954694207845e+00,.1451444200099929e-01, + .5175484724211766e+00,.1492644572980292e-01,.5522503690808819e+00, + .1541651122328756e-01,.5934874290489524e+00,.4788707289765767e-02, + .6563722805402352e-02,.2502230585699310e-01,.7912416503013329e-02, + .9669512238638367e-01,.8956313102014822e-02,.1698239427218661e+00, + .9781969024648538e-02,.2354985079518828e+00,.1044851744036037e-01, + .2925601105800896e+00,.1099693219507985e-01,.3418012690877302e+00, + .1145659208699840e-01,.3844521174650939e+00,.1184970544276362e-01, + .4217763245489749e+00,.1219446847463953e-01,.4550117593290032e+00, + .1250758855429112e-01,.4854408050495134e+00,.1280655793511545e-01, + .5145268041703330e+00,.1311180392585363e-01,.5440941264902900e+00, + .1344843304771755e-01, + .5765229845165943e+00,.1384655622092475e-01,.6148795064211108e+00, + .4269409473142479e-02,.5853691221954542e-02,.2506818803768801e-01, + .7058488452666192e-02,.9692609816181726e-01,.7991811416685026e-02, + .1703157380843560e+00,.8730579305889177e-02,.2362853743226745e+00, + .9327287399213484e-02,.2936438651173445e+00,.9818197983040463e-02, + .3431514772416978e+00,.1022909697576184e-01,.3859958359229893e+00, + .1057909230023007e-01,.4233725763238417e+00,.1088320687501712e-01, + .4564025740290915e+00,.1115430586715170e-01,.4861671131891395e+00, + .1140470198717317e-01,.5137949407970326e+00,.1164762828827466e-01, + .5405812657784165e+00,.1189859698528282e-01,.5681279106485080e+00, + .1217639078124160e-01,.5984802463148428e+00,.1250297795297910e-01, + .6341959825388761e+00,.3830262680422776e-02,.5252924239469980e-02, + .2510718258012232e-01,.6335607341496969e-02,.9712300411103620e-01, + .7174964200736387e-02,.1707366515477548e+00,.7839821469171156e-02, + .2369623770049865e+00,.8377122084280812e-02,.2945833847967025e+00, + .8819233466500510e-02,.3443363340392364e+00,.9189060633588098e-02, + .3873807210303031e+00,.9503378800566590e-02,.4248706039873364e+00, + .9775047051845269e-02,.4578585641947919e+00,.1001457306569686e-01, + .4873111192988822e+00, + .1023132837651919e-01,.5141675256404127e+00,.1043459649534057e-01, + .5394214279393358e+00,.1063454146082206e-01,.5642188354052674e+00, + .1084307018096031e-01,.5899649430016252e+00,.1107438039614643e-01, + .6184184090843611e+00,.1134470195438803e-01,.6517206797990772e+00, + .3454097785831183e-02,.4738087690909603e-02,.2514098616718916e-01, + .5715864568881495e-02,.9729414530950285e-01,.6474399737140852e-02, + .1711037123670141e+00,.7075625560198937e-02,.2375553213635903e+00, + .7561765789488958e-02,.2954111541648083e+00,.7961900378019848e-02, + .3453896252983967e+00,.8296546652001753e-02,.3886303020948080e+00, + .8580623356383655e-02,.4262600339398994e+00,.8825386359541219e-02, + .4592889162561250e+00,.9039751450513938e-02,.4886139630455138e+00, + .9231266796183848e-02,.5150610315193943e+00,.9406897826583457e-02, + .5394434170928742e+00,.9573720059444631e-02,.5626311157802961e+00, + .9739556257960886e-02,.5856281920506604e+00,.9913518363761172e-02, + .6096518917386764e+00,.1010629643624125e-01,.6361953557375821e+00, + .1032986385558493e-01,.6670333276830246e+00,.3131660281084644e-02, + .4296601495430642e-02,.2516987418923732e-01,.5184210888756367e-02, + .9744072529384443e-01,.5873198129887241e-02,.1714189769006723e+00, + .6419613566950146e-02, + .2380664100570842e+00,.6861660893085171e-02,.2961280333876439e+00, + .7225632384805198e-02,.3463080420218410e+00,.7530044942257158e-02, + .3897316580976775e+00,.7788304877568383e-02,.4275077537500284e+00, + .8010430934156830e-02,.4606200718057599e+00,.8204207591967734e-02, + .4899241115804965e+00,.8376002129523446e-02,.5161793704075401e+00, + .8531389917004647e-02,.5400945718660145e+00,.8675676859844067e-02, + .5623795630774431e+00,.8814368379677447e-02,.5838024839647016e+00, + .8953595816500299e-02,.6052506199023559e+00,.9100459154569437e-02, + .6277890216584121e+00,.9263166205736671e-02,.6527013571399886e+00, + .9450740555370751e-02,.6814810379908328e+00,.2843902743022214e-02, + .3902467368190393e-02,.2519598783827689e-01,.4709429895823432e-02, + .9757348323445656e-01,.5336152661315786e-02,.1717052034351406e+00, + .5833455676281756e-02,.2385318286257855e+00,.6235971415149352e-02, + .2967834040784211e+00,.6567522559559145e-02,.3471521575495951e+00, + .6844866528765064e-02,.3907519751170857e+00,.7080101687099548e-02, + .4286785748173565e+00,.7282213357366904e-02,.4618976089399920e+00, + .7458094741776693e-02,.4912372216070018e+00,.7613251892383208e-02, + .5174141871126332e+00,.7752321382046524e-02,.5410706897885087e+00, + .7879480568321315e-02, + .5628149979263304e+00,.7998799282231232e-02,.5832647350414633e+00, + .8114557939046675e-02,.6030926481771959e+00,.8231531848213922e-02, + .6230734887604330e+00,.8355206753895567e-02,.6441267697250795e+00, + .8491839744291131e-02,.6673428282976036e+00,.8648214015485162e-02, + .6939680907913989e+00,.2388386682754135e-02,.3278278227000989e-02, + .2523707236937346e-01,.3957198838737114e-02,.9778285117940603e-01, + .4484932501394734e-02,.1721579526332683e+00,.4904057483051761e-02, + .2392707453970052e+00,.5243583901636578e-02,.2978287368553751e+00, + .5523456007427060e-02,.3485067686781220e+00,.5757685183723855e-02, + .3924033610212076e+00,.5956358204781419e-02,.4305980352749587e+00, + .6126919713095007e-02,.4640361265644109e+00,.6275007901630985e-02, + .4935170207127558e+00,.6405016526854853e-02,.5197143572851120e+00, + .6520488779186820e-02,.5432046533152863e+00,.6624408123666273e-02, + .5644970257796814e+00,.6719427053538581e-02,.5840623664365776e+00, + .6808059512718916e-02,.6023621974962409e+00,.6892851836922015e-02, + .6198777517486085e+00,.6976537015760206e-02,.6371392310474401e+00, + .7062164945929763e-02,.6547536993606798e+00,.7153184521396811e-02, + .6734273362784953e+00,.7253430606435754e-02,.6939734212185117e+00, + .7366943161281851e-02, + .7172914790760468e+00,.2034217998243191e-02,.2792734020582961e-02, + .2526908982706098e-01,.3371787305020115e-02,.9794643062684199e-01, + .3822201062511950e-02,.1725128108619325e+00,.4180174912236582e-02, + .2398521447789659e+00,.4470370456915701e-02,.2986551495007976e+00, + .4709737539597480e-02,.3495841277608567e+00,.4910176531706057e-02, + .3937272155460690e+00,.5080243210917943e-02,.4321540636611387e+00, + .5226234784652425e-02,.4657990145921906e+00,.5352893648837146e-02, + .4954473934553277e+00,.5463875356202293e-02,.5217531788617480e+00, + .5562069670587001e-02,.5452642338468077e+00,.5649829175907964e-02, + .5664474938420431e+00,.5729139522573558e-02,.5857122023051498e+00, + .5801753106324432e-02,.6034312542567038e+00,.5869300229750696e-02, + .6199612865321288e+00,.5933386406539511e-02,.6356621535317655e+00, + .5995679940966749e-02,.6509160921778130e+00,.6057989063542723e-02, + .6661462081376089e+00,.6122321685397079e-02,.6818327797828450e+00, + .6190912476732130e-02,.6985240974244095e+00,.6266191569573649e-02, + .7168360261395987e+00,.6350658968555684e-02,.7374314365934664e+00, + .1753390300533029e-02,.2407592405123618e-02,.2529453985226700e-01, + .2907262330175829e-02,.9807671703676038e-01,.3296143053353250e-02, + .1727961462451250e+00, + .3605393786629613e-02,.2403177529025610e+00,.3856241133152162e-02, + .2993193629853389e+00,.4063271707574896e-02,.3504538499243808e+00, + .4236723270781009e-02,.3948018542411614e+00,.4383951358482999e-02, + .4334263916612830e+00,.4510362519918408e-02,.4672550951343391e+00, + .4620017586359210e-02,.4970655128750277e+00,.4716030788908096e-02, + .5235015776135139e+00,.4800840911719355e-02,.5470972903869747e+00, + .4876401000932111e-02,.5682998788764699e+00,.4944315587632199e-02, + .5874903820382004e+00,.5005943872710219e-02,.6050015924522462e+00, + .5062480886612362e-02,.6211339094140743e+00,.5115024538196171e-02, + .6361697673414449e+00,.5164633649628788e-02,.6503872077614197e+00, + .5212379842880342e-02,.6640729475349860e+00,.5259393975018879e-02, + .6775349550821846e+00,.5306905271212799e-02,.6911140242391297e+00, + .5356268008877997e-02,.7051930501274516e+00,.5408966392479879e-02, + .7202015894622125e+00,.5466583459521371e-02,.7366118374462400e+00, + .5530715851949468e-02,.7549206082556241e+00,.1526985597447617e-02, + .2096996473761840e-02,.2531509673360445e-01,.2532539440756325e-02, + .9818212210216928e-01,.2871665019548934e-02,.1730258242612469e+00, + .3141479576178890e-02,.2406960805778798e+00,.3360448272795954e-02, + .2998605891705305e+00, + .3541258850863859e-02,.3511649206182530e+00,.3692814597959592e-02, + .3956840637564039e+00,.3821509918296340e-02,.4344762665775814e+00, + .3932041593754749e-02,.4684646795111045e+00,.4027932600409154e-02, + .4984220865031195e+00,.4111877834418150e-02,.5249867454711314e+00, + .4185977901331621e-02,.5486853051737176e+00,.4251901290680174e-02, + .5699549871771356e+00,.4310999960360177e-02,.5891629130044663e+00, + .4364394207792517e-02,.6066224358437886e+00,.4413037135908646e-02, + .6226069634301489e+00,.4457765549253931e-02,.6373618910220726e+00, + .4499341872619412e-02,.6511152177198366e+00,.4538490146036315e-02, + .6640873078294923e+00,.4575927973865173e-02,.6765001110571239e+00, + .4612395244609121e-02,.6885859633887566e+00,.4648679290544145e-02, + .7005958269983906e+00,.4685634750981115e-02,.7128064532627977e+00, + .4724194620734037e-02,.7255254273702650e+00,.4765366815800576e-02, + .7390923556807402e+00,.4810208361466176e-02,.7538736313498631e+00, + .4859767798035730e-02,.7702474410767316e+00,.1341778429126211e-02, + .1842856050972565e-02,.2533193854590164e-01,.2225855496752996e-02, + .9826859006407132e-01,.2524180832845478e-02,.1732145392603280e+00, + .2761629971248482e-02,.2410075282122661e+00,.2954414092304398e-02, + .3003071440620802e+00, + .3113671483601745e-02,.3517531700231469e+00,.3247217194092525e-02, + .3964161974860505e+00,.3360662822142730e-02,.4353508843394245e+00, + .3458128531982532e-02,.4694771791546352e+00,.3542702530515273e-02, + .4995646943102908e+00,.3616743969933074e-02,.5262481851213445e+00, + .3682087306007793e-02,.5500500545141821e+00,.3740183451080423e-02, + .5714020312900166e+00,.3792199619292558e-02,.5906638632386166e+00, + .3839091722399387e-02,.6081388453953844e+00,.3881658284331042e-02, + .6240866310409383e+00,.3920581807177477e-02,.6387339085746301e+00, + .3956461592009382e-02,.6522834922619609e+00,.3989840752967416e-02, + .6649222876852415e+00,.4021229291927125e-02,.6768284931080795e+00, + .4051124448454234e-02,.6881782931898644e+00,.4080028981647300e-02, + .6991521843388895e+00,.4108467479283411e-02,.7099409264259735e+00, + .4137000143073717e-02,.7207509236661780e+00,.4166232701476242e-02, + .7318085765567045e+00,.4196820124371787e-02,.7433628001322098e+00, + .4229460707743591e-02,.7556844737332599e+00,.4264876064174216e-02, + .7690611204503529e+00,.4303772042593957e-02,.7837847386079905e+00, + .1121314683543782e-02,.1540263996358294e-02,.2535201582246297e-01, + .1860616782749459e-02,.9837180081070001e-01,.2110257847461394e-02, + .1734401492675452e+00, + .2309054725495130e-02,.2413805649139678e+00,.2470541128098822e-02, + .3008431837086572e+00,.2604015187479208e-02,.3524611103987945e+00, + .2716000109093522e-02,.3972999402435936e+00,.2811178999641960e-02, + .4364103598053284e+00,.2892989192294541e-02,.4707089285552096e+00, + .2964005631609554e-02,.5009621096861159e+00,.3026193412069002e-02, + .5278014394899639e+00,.3081077890619739e-02,.5517457095527168e+00, + .3129861843706196e-02,.5732222749918362e+00,.3173507910562157e-02, + .5925852995229407e+00,.3212797846468413e-02,.6101307283827272e+00, + .3248376022424070e-02,.6261084073494506e+00,.3280782072682338e-02, + .6407319017471913e+00,.3310475987498136e-02,.6541865362303725e+00, + .3337857911967330e-02,.6666360953708608e+00,.3363284226199348e-02, + .6782285398626227e+00,.3387081014309363e-02,.6891010163282705e+00, + .3409555695216232e-02,.6993843710724037e+00,.3431007330102873e-02, + .7092073156356478e+00,.3451735898380667e-02,.7187003283870178e+00, + .3472050613465582e-02,.7279993040305766e+00,.3492277104239913e-02, + .7372488732478574e+00,.3512762995683089e-02,.7466051990304045e+00, + .3533881070388274e-02,.7562379075535515e+00,.3556028788751684e-02, + .7663306282943305e+00,.3579622533335547e-02,.7770794116956159e+00, + .3605084625764653e-02, + .7886880974410957e+00,.3632821128406038e-02,.8013595930224617e+00, + .9510596127542824e-03,.1306530384822369e-02,.2536754145655561e-01, + .1578428318009605e-02,.9845171104183325e-01,.1790384464545768e-02, + .1736150904003335e+00,.1959236797520781e-02,.2416703438788951e+00, + .2096455322227467e-02,.3012604613663233e+00,.2209920074417597e-02, + .3530135437139923e+00,.2305159021830049e-02,.3979914926982783e+00, + .2386140355447109e-02,.4372421218440167e+00,.2455776174573485e-02, + .4716796241323911e+00,.2516247355295036e-02,.5020683797660233e+00, + .2569217475366734e-02,.5290379452961959e+00,.2615976824974766e-02, + .5531050686294569e+00,.2657541470416690e-02,.5746948225947125e+00, + .2694722818617351e-02,.5941586518170510e+00,.2728177434091533e-02, + .6117891098846177e+00,.2758443393525188e-02,.6278316916720729e+00, + .2785967312803683e-02,.6424943013679313e+00,.2811124820961013e-02, + .6559548636293389e+00,.2834236378150614e-02,.6683675049794192e+00, + .2855579757979202e-02,.6798676490616872e+00,.2875400127857228e-02, + .6905762965442401e+00,.2893918395849096e-02,.7006037006910071e+00, + .2911338305155523e-02,.7100526010841707e+00,.2927852618951001e-02, + .7190211375279999e+00,.2943648628770056e-02,.7276055302511653e+00, + .2958913124102285e-02, + .7359025774945679e+00,.2973836867449520e-02,.7440119836573593e+00, + .2988618517881438e-02,.7520384865047949e+00,.3003467829003067e-02, + .7600936967329708e+00,.3018607809042993e-02,.7682974943112553e+00, + .3034275371809675e-02,.7767787422315526e+00,.3050719837809893e-02, + .7856749823571740e+00,.3068198491381527e-02,.7951306800776951e+00, + .3086968312155531e-02,.8052935061547398e+00,.3107273055760290e-02, + .8163081231039382e+00,.8168405299925574e-03,.1122235164426433e-02, + .2537979319269659e-01,.1355887567479481e-02,.9851483086228864e-01, + .1538080541563495e-02,.1737534362414166e+00,.1683267147792567e-02, + .2418998259562802e+00,.1801292850812278e-02,.3015914511597799e+00, + .1898921476480742e-02,.3534525616677698e+00,.1980897763334222e-02, + .3985422441814719e+00,.2050627450222160e-02,.4379061538920372e+00, + .2110609627253456e-02,.4724567457971343e+00,.2162715579344156e-02, + .5029569229728563e+00,.2208372378885260e-02,.5300349067999921e+00, + .2248686443403842e-02,.5542061521610998e+00,.2284528486070424e-02, + .5758943864439198e+00,.2316593115008434e-02,.5954495572468082e+00, + .2345441446771229e-02,.6131624579583983e+00,.2371532122833287e-02, + .6292764292152166e+00,.2395244271202193e-02,.6439966702794445e+00, + .2416894786788224e-02, + .6574976613071741e+00,.2436751550587987e-02,.6699291171394233e+00, + .2455043712749272e-02,.6814208098492533e+00,.2471969833678045e-02, + .6920865249452547e+00,.2487704452255031e-02,.7020273575786585e+00, + .2502403494283208e-02,.7113345090150194e+00,.2516208823898241e-02, + .7200917075437527e+00,.2529252160257252e-02,.7283773493344920e+00, + .2541658520726186e-02,.7362664311381890e+00,.2553549302394987e-02, + .7438323260356781e+00,.2565045070295341e-02,.7511484336838515e+00, + .2576268078538789e-02,.7582897158118264e+00,.2587344505847411e-02, + .7653341042347025e+00,.2598406336420720e-02,.7723637406308460e+00, + .2609592758562768e-02,.7794659733020046e+00,.2621050886496552e-02, + .7867339953288847e+00,.2632935537833889e-02,.7942669615898086e+00, + .2645407727623461e-02,.8021693721981406e+00,.2658631484279102e-02, + .8105494642340256e+00,.2672768576741324e-02,.8195163250963701e+00, + .2687970799566830e-02,.8291754492311013e+00,.6779619032019482e-03, + .9315109162316307e-03,.2539248163813982e-01,.1125546650705646e-02, + .9858025661395591e-01,.1276892135791717e-02,.1738969874989156e+00, + .1397535825902466e-02,.2421382412064102e+00,.1495644371531161e-02, + .3019358267641449e+00,.1576828175558173e-02,.3539100964089328e+00, + .1645022736116236e-02, + .3991173116956755e+00,.1703052777188943e-02,.4386009869035954e+00, + .1752990885928625e-02,.4732718824089663e+00,.1796388809395077e-02, + .5038914977622926e+00,.1834429731186084e-02,.5310868327976426e+00, + .1868030737964622e-02,.5553722186397624e+00,.1897913248880432e-02, + .5771702844407484e+00,.1924652401977583e-02,.5968298361224380e+00, + .1948712334483372e-02,.6146404100545767e+00,.1970471824369135e-02, + .6308438946964407e+00,.1990243228225435e-02,.6456437499005518e+00, + .2008286680798674e-02,.6592123207734590e+00,.2024820896049421e-02, + .6716966627198852e+00,.2040031498715453e-02,.6832232108862492e+00, + .2054077540780530e-02,.6939015548982263e+00,.2067096670752565e-02, + .7038275213823140e+00,.2079209295013150e-02,.7130857211033993e+00, + .2090521980414542e-02,.7217516823653617e+00,.2101130283221459e-02, + .7298936653027928e+00,.2111121143106236e-02,.7375742308368269e+00, + .2120574946574002e-02,.7448516217331510e+00,.2129567338002603e-02, + .7517810000528958e+00,.2138170835613056e-02,.7584155742314791e+00, + .2146456292026427e-02,.7648076391248480e+00,.2154494222946041e-02, + .7710095427995872e+00,.2162356011555635e-02,.7770745838488886e+00, + .2170114979286494e-02,.7830578318730199e+00,.2177847294739602e-02, + .7890168508176265e+00, + .2185632671118797e-02,.7950122895929717e+00,.2193554778405604e-02, + .8011082865424130e+00,.2201701270375675e-02,.8073726141153927e+00, + .2210163300386258e-02,.8138764685711868e+00,.2219034377453016e-02, + .8206937889887615e+00,.2228408401671311e-02,.8278999743285053e+00, + .2238376724427438e-02,.8355698630075664e+00,.2249024115421597e-02, + .8437748549346639e+00,.5717171765067005e-03,.7855819755678591e-03, + .2540219552841172e-01,.9492803029534314e-03,.9863038311884588e-01, + .1076991591417719e-02,.1740070746137774e+00,.1178820912278011e-02, + .2423212835361945e+00,.1261652009696089e-02,.3022005646620261e+00, + .1330213911048136e-02,.3542623490383656e+00,.1387823796651901e-02, + .3995607968545022e+00,.1436862514566579e-02,.4391378457027524e+00, + .1479076886266864e-02,.4739030248719332e+00,.1515774672793500e-02, + .5046168340722528e+00,.1547952929687645e-02,.5319054272436042e+00, + .1576384371750672e-02,.5562823875920914e+00,.1601676728454795e-02, + .5781696502895681e+00,.1624314356699193e-02,.5979153431712045e+00, + .1644687957566232e-02,.6158083043507766e+00,.1663116161966728e-02, + .6320896668598296e+00,.1679861458243818e-02,.6469620376959935e+00, + .1695142117261203e-02,.6605967661879515e+00,.1709141243106296e-02, + .6731397164733577e+00, + .1722013731055875e-02,.6847158755342791e+00,.1733891682879084e-02, + .6954330559199739e+00,.1744888672268816e-02,.7053848938737558e+00, + .1755103144742999e-02,.7146532979347533e+00,.1764621160512043e-02, + .7233104679728801e+00,.1773518635044922e-02,.7314205777797613e+00, + .1781863193450182e-02,.7390411938444027e+00,.1789715726676655e-02, + .7462244872361469e+00,.1797131716770826e-02,.7530182833863068e+00, + .1804162382812431e-02,.7594669850655551e+00,.1810855687135456e-02, + .7656123962667175e+00,.1817257231900906e-02,.7714944684438817e+00, + .1823411068174413e-02,.7771519851570839e+00,.1829360432715894e-02, + .7826231962275617e+00,.1835148421173907e-02,.7879464076688663e+00, + .1840818599844342e-02,.7931605286026111e+00,.1846415551221751e-02, + .7983055707993119e+00,.1851985340937259e-02,.8034230901440029e+00, + .1857575885138658e-02,.8085565520117598e+00,.1863237187886467e-02, + .8137515941551513e+00,.1869021407926604e-02,.8190561513413812e+00, + .1874982703844713e-02,.8245203960095123e+00,.1881176797227895e-02, + .8301964394574721e+00,.1887660186864975e-02,.8361377299185951e+00, + .1894488945824785e-02,.8423980794999191e+00,.1901717040890795e-02, + .8490302543125971e+00,.1909394134299323e-02,.8560840749607826e+00, + .4886273679748824e-03, + .6714437954649780e-03,.2540979640585205e-01,.8113983041306847e-03, + .9866962915608751e-01,.9206047809355559e-03,.1740933291741878e+00, + .1007696615844565e-02,.2424648238198073e+00,.1078555077304152e-02, + .3024083787838030e+00,.1137220495111209e-02,.3545391775646764e+00, + .1186526928471642e-02,.3999097732746233e+00,.1228508433020824e-02, + .4395609067610286e+00,.1264657346363223e-02,.4744011819765317e+00, + .1296090864949680e-02,.5051903569581037e+00,.1323660708324793e-02, + .5325539695623672e+00,.1348026906055910e-02,.5570050719753680e+00, + .1369708506508536e-02,.5789651232823036e+00,.1389119124621932e-02, + .5987818060211025e+00,.1406592323781286e-02,.6167435227777786e+00, + .1422400048200691e-02,.6330909609625438e+00,.1436766218460017e-02, + .6480262517065541e+00,.1449876904280157e-02,.6617202166442876e+00, + .1461888037961801e-02,.6743181164063009e+00,.1472931335824075e-02, + .6859442313853145e+00,.1483118897071317e-02,.6967055330639804e+00, + .1492546815085222e-02,.7066946457906411e+00,.1501298043441827e-02, + .7159922532405723e+00,.1509444694127518e-02,.7246690686840157e+00, + .1517049899494373e-02,.7327874613555573e+00,.1524169336541220e-02, + .7404028107621932e+00,.1530852488184009e-02,.7475646451451914e+00, + .1537143698611175e-02, + .7543176083360913e+00,.1543083066767105e-02,.7607022900146448e+00, + .1548707212186899e-02,.7667559471993193e+00,.1554049939909855e-02, + .7725131391565733e+00,.1559142825373070e-02,.7780062934020589e+00, + .1564015735548671e-02,.7832662167717693e+00,.1568697298775154e-02, + .7883225624132202e+00,.1573215332462839e-02,.7932042607791593e+00, + .1577597234898074e-02,.7979399201221365e+00,.1581870344542036e-02, + .8025581994310868e+00,.1586062267357487e-02,.8070881540792818e+00, + .1590201169665478e-02,.8115595515386726e+00,.1594316030726550e-02, + .8160031512482756e+00,.1598436845587962e-02,.8204509390209540e+00, + .1602594764727253e-02,.8249363021965111e+00,.1606822152724702e-02, + .8294941271358440e+00,.1611152543807615e-02,.8341607957498925e+00, + .1615620467991531e-02,.8389740528796195e+00,.1620261118280227e-02, + .8439727120207893e+00,.1625109827821845e-02,.8491961639288420e+00, + .1630201327174513e-02,.8546836521716283e+00,.1635568757273152e-02, + .8604732831634605e+00,.1641242424784281e-02,.8666007472872529e+00, + .4079721290191449e-03,.5606390646000299e-03,.2541717774246925e-01, + .6775302011759068e-03,.9870776119617667e-01,.7687559860220674e-03, + .1741771883435951e+00,.8415222726271052e-03,.2426044825025154e+00, + .9007379123407699e-03, + .3026107489587744e+00,.9497751982407300e-03,.3548090209828054e+00, + .9909995793709382e-03,.4002503224647114e+00,.1026108754684635e-02, + .4399742629913482e+00,.1056348256439421e-02,.4748885789654610e+00, + .1082650488031221e-02,.5057523403210778e+00,.1105726258156915e-02, + .5331905211809378e+00,.1126126368448291e-02,.5577156967903346e+00, + .1144283937532252e-02,.5797489091761477e+00,.1160544069671673e-02, + .5996374632935472e+00,.1175185037186027e-02,.6176694070801912e+00, + .1188433661215005e-02,.6340850818085325e+00,.1200476654074482e-02, + .6490862674574624e+00,.1211469103358439e-02,.6628434159685319e+00, + .1221540901759423e-02,.6755013855037041e+00,.1230801679415364e-02, + .6871840056733981e+00,.1239344630375328e-02,.6979977314932807e+00, + .1247249512545108e-02,.7080345854591738e+00,.1254585023077141e-02, + .7173745414939689e+00,.1261410697040181e-02,.7260874694062653e+00, + .1267778438847666e-02,.7342347316708526e+00,.1273733768408534e-02, + .7418705038821782e+00,.1279316843997812e-02,.7490428746151535e+00, + .1284563309197927e-02,.7557947684726961e+00,.1289505000406732e-02, + .7621647269098429e+00,.1294170543282941e-02,.7681875743244604e+00, + .1298585860357731e-02,.7738949913863433e+00,.1302774607351322e-02, + .7793160132569095e+00, + .1306758552112867e-02,.7844774669407445e+00,.1310557907271291e-02, + .7894043592864977e+00,.1314191625436819e-02,.7941202249469652e+00, + .1317677663971441e-02,.7986474417822638e+00,.1321033224831176e-02, + .8030075196380616e+00,.1324274973678666e-02,.8072213670641986e+00, + .1327419241294216e-02,.8113095392825265e+00,.1330482209212664e-02, + .8152924695008139e+00,.1333480080427699e-02,.8191906844434980e+00, + .1336429234887632e-02,.8230250036771799e+00,.1339346368318267e-02, + .8268167209024656e+00,.1342248611619848e-02,.8305877638256554e+00, + .1345153626679458e-02,.8343608274878259e+00,.1348079672919514e-02, + .8381594740079385e+00,.1351045637295423e-02,.8420081896122813e+00, + .1354071018825960e-02,.8459323876377299e+00,.1357175857202399e-02, + .8499583440311814e+00,.1360380593752449e-02,.8541130499173916e+00, + .1363705852281417e-02,.8584239643605064e+00,.1367172127403134e-02, + .8629186498951948e+00,.1370799369307807e-02,.8676242742545543e+00, + .1374606456942832e-02,.8725669645681554e+00,.1378610556753209e-02, + .8777710057814074e+00,.3457584334322357e-03,.4751621453940012e-03, + .2542287327621289e-01,.5742529802903852e-03,.9873719754448177e-01, + .6515970827455522e-03,.1742419598034706e+00,.7132998513406398e-03, + .2427124231693788e+00, + .7635205129753468e-03,.3027672771691929e+00,.8051163841037499e-03, + .3550179179580828e+00,.8400916805185935e-03,.4005142108161735e+00, + .8698848276663640e-03,.4402949133244795e+00,.8955511242402197e-03, + .4752671131865228e+00,.9178805496049455e-03,.5061893703422927e+00, + .9374753213346000e-03,.5336862457066851e+00,.9548020787478288e-03, + .5582699698916923e+00,.9702277440292999e-03,.5803612891309488e+00, + .9840446600062942e-03,.6003072470093884e+00,.9964885371329648e-03, + .6183956534407280e+00,.1007751484296832e-02,.6348666260010463e+00, + .1017991617422186e-02,.6499217274752063e+00,.1027340245776507e-02, + .6637311918729225e+00,.1035907317136567e-02,.6764396515818053e+00, + .1043785593537480e-02,.6881706952754520e+00,.1051053889330778e-02, + .6990305140455065e+00,.1057779608173888e-02,.7091108348943870e+00, + .1064020749985821e-02,.7184912951109098e+00,.1069827513031319e-02, + .7272413759474827e+00,.1075243583787733e-02,.7354219871919199e+00, + .1080307183927825e-02,.7430867737680106e+00,.1085051926828077e-02, + .7502831998805611e+00,.1089507523598374e-02,.7570534542643864e+00, + .1093700369430917e-02,.7634352109083323e+00,.1097654034185638e-02, + .7694622725315966e+00,.1101389675935647e-02,.7751651185850800e+00, + .1104926392241615e-02, + .7805713752558724e+00,.1108281520887288e-02,.7857062215827314e+00, + .1111470899456480e-02,.7905927431287384e+00,.1114509091294428e-02, + .7952522425401743e+00,.1117409583946746e-02,.7997045146224264e+00, + .1120184965012693e-02,.8039680921873576e+00,.1122847079414237e-02, + .8080604677961332e+00,.1125407171312882e-02,.8119982955768120e+00, + .1127876013259072e-02,.8157975764884198e+00,.1130264024599364e-02, + .8194738296925913e+00,.1132581380665879e-02,.8230422520462021e+00, + .1134838113807109e-02,.8265178671142719e+00,.1137044206868379e-02, + .8299156644956935e+00,.1139209679276770e-02,.8332507296316362e+00, + .1141344665414018e-02,.8365383636069283e+00,.1143459484459602e-02, + .8397941917404019e+00,.1145564700346352e-02,.8430342589770379e+00, + .1147671169888255e-02,.8462751092344150e+00,.1149790076517388e-02, + .8495338449183082e+00,.1151932946415512e-02,.8528281618190179e+00, + .1154111643169411e-02,.8561763535592529e+00,.1156338336456831e-02, + .8595972787361906e+00,.1158625439740416e-02,.8631102829627566e+00, + .1160985511591647e-02,.8667350672783336e+00,.1163431115191409e-02, + .8704914940179440e+00,.1165974630888303e-02,.8743993213928760e+00, + .1168628017588916e-02,.8784778589727296e+00,.1171402520361833e-02, + .8827455382208639e+00, + .1174308324102304e-02,.8872193954732928e+00,.2967633115387107e-03, + .4078420646640203e-03,.2542735980046100e-01,.4929083178239419e-03, + .9876039342539503e-01,.5593126751285800e-03,.1742930216852869e+00, + .6122943067439731e-03,.2427975603509948e+00,.6554223612098552e-03, + .3028908101007459e+00,.6911487848386306e-03,.3551828911240184e+00, + .7211934487136871e-03,.4007227692617545e+00,.7467906965300383e-03, + .4405485438561624e+00,.7688460941907184e-03,.4755668043199200e+00, + .7880375248105768e-03,.5065357215285611e+00,.8048817439819273e-03, + .5340795437694515e+00,.8197791606092136e-03,.5587102435529917e+00, + .8330446107364092e-03,.5808483484024387e+00,.8449289291109885e-03, + .6008407117558368e+00,.8556343498905160e-03,.6189749738875788e+00, + .8653256884173914e-03,.6354910969728228e+00,.8741385860890042e-03, + .6505904974988862e+00,.8821856763681789e-03,.6644432678330569e+00, + .8895612564439208e-03,.6771938992957999e+00,.8963448693257790e-03, + .6889658361211737e+00,.9026040810144197e-03,.6998651175897177e+00, + .9083966557751288e-03,.7099833073204581e+00,.9137722762541778e-03, + .7193998631153847e+00,.9187739158093501e-03,.7281840656590849e+00, + .9234389425261854e-03,.7363965975579181e+00,.9278000143753827e-03, + .7440908437477774e+00, + .9318858104408874e-03,.7513139686822109e+00,.9357216324926973e-03, + .7581078137561323e+00,.9393299032829178e-03,.7645096492310164e+00, + .9427305820375386e-03,.7705528078328676e+00,.9459415131589371e-03, + .7762672216898303e+00,.9489787207614479e-03,.7816798799835950e+00, + .9518566590593747e-03,.7868152213232364e+00,.9545884266143449e-03, + .7916954721972490e+00,.9571859508813780e-03,.7963409407568194e+00, + .9596601482630737e-03,.8007702735070883e+00,.9620210639090244e-03, + .8050006811385999e+00,.9642779947228965e-03,.8090481386453148e+00, + .9664395984170945e-03,.8129275639917815e+00,.9685139909496511e-03, + .8166529788658923e+00,.9705088342629528e-03,.8202376544499068e+00, + .9724314158979084e-03,.8236942446328719e+00,.9742887217632853e-03, + .8270349086491756e+00,.9760875030844708e-03,.8302714247416513e+00, + .9778343383275471e-03,.8334152960971942e+00,.9795356906837479e-03, + .8364778499742661e+00,.9811979614979323e-03,.8394703306225847e+00, + .9828275398255846e-03,.8424039862746810e+00,.9844308480999043e-03, + .8452901501569875e+00,.9860143836786285e-03,.8481403151159906e+00, + .9875847558152446e-03,.8509662010755018e+00,.9891487173585097e-03, + .8537798141289355e+00,.9907131902268242e-03,.8565934956229708e+00, + .9922852834316175e-03, + .8594199591072303e+00,.9938723021413952e-03,.8622723125149068e+00, + .9954817459946895e-03,.8651640624148244e+00,.9971212946004986e-03, + .8681090966584658e+00,.9987987779301984e-03,.8711216412695179e+00, + .1000522129134342e-02,.8742161870354788e+00,.1002299317248640e-02, + .8774073810231204e+00,.1004138257331534e-02,.8807098782305657e+00, + .1006046695854091e-02,.8841381489021722e+00,.1008032069698879e-02, + .8877062377737649e+00,.1010101337974326e-02,.8914274727949142e+00, + .1012260787062656e-02,.8953141227940432e+00,.2505764977838404e-03, + .3443770249124342e-03,.2543158995016821e-01,.4162174537078318e-03, + .9878227034153308e-01,.4723030362070807e-03,.1743411977575627e+00, + .5170566942884504e-03,.2428779209209343e+00,.5534915375556028e-03, + .3030074710503266e+00,.5836775268839070e-03,.3553387763770640e+00, + .6090665945021940e-03,.4009199654813231e+00,.6307007808156645e-03, + .4407885275977928e+00,.6493445644344517e-03,.4758505926393938e+00, + .6655702083843857e-03,.5068639748553351e+00,.6798139474548506e-03, + .5344526379872747e+00,.6924137931820147e-03,.5591283215877272e+00, + .7036355137975163e-03,.5813113577588189e+00,.7136908453729490e-03, + .6013484321270596e+00,.7227504933228287e-03,.6195270375256310e+00, + .7309535721159746e-03, + .6360870035914407e+00,.7384145655048229e-03,.6512296248800408e+00, + .7452285316469442e-03,.6651248789020748e+00,.7514750465678792e-03, + .6779171461479578e+00,.7572212276838003e-03,.6897297612797826e+00, + .7625240776755495e-03,.7006686526246470e+00,.7674323201021287e-03, + .7108252688389807e+00,.7719878506216157e-03,.7202789460425201e+00, + .7762268944500497e-03,.7290988336445309e+00,.7801809371337034e-03, + .7373454702759427e+00,.7838774788105678e-03,.7450720807914899e+00, + .7873406498722635e-03,.7523256496919639e+00,.7905917169405165e-03, + .7591478143617146e+00,.7936495014053848e-03,.7655756123276436e+00, + .7965307277851307e-03,.7716421096510724e+00,.7992503154034614e-03, + .7773769320588682e+00,.8018216240149106e-03,.7828067161269425e+00, + .8042566618112444e-03,.7879554944635353e+00,.8065662625429530e-03, + .7928450261873953e+00,.8087602371674192e-03,.7974950818949961e+00, + .8108475043988473e-03,.8019236906381128e+00,.8128362037173276e-03, + .8061473550943380e+00,.8147337937451987e-03,.8101812400362133e+00, + .8165471383802039e-03,.8140393383338362e+00,.8182825826579203e-03, + .8177346180177749e+00,.8199460199784433e-03,.8212791533500792e+00, + .8215429520572276e-03,.8246842423744935e+00,.8230785427339746e-03, + .8279605130215852e+00, + .8245576665860399e-03,.8311180195135344e+00,.8259849531356726e-03, + .8341663305331678e+00,.8273648273067869e-03,.8371146103813345e+00, + .8287015466714560e-03,.8399716941366764e+00,.8299992359243829e-03, + .8427461576444749e+00,.8312619189314546e-03,.8454463829899002e+00, + .8324935486128937e-03,.8480806199498299e+00,.8336980348396690e-03, + .8506570437613245e+00,.8348792704412902e-03,.8531838093892227e+00, + .8360411553417403e-03,.8556691023160556e+00,.8371876187562825e-03, + .8581211857109087e+00,.8383226392937222e-03,.8605484436569011e+00, + .8394502627153142e-03,.8629594199271572e+00,.8405746170023279e-03, + .8653628515950123e+00,.8416999242793960e-03,.8677676965453935e+00, + .8428305090311761e-03,.8701831537222023e+00,.8439708019376514e-03, + .8726186747045624e+00,.8451253385421383e-03,.8750839649592925e+00, + .8462987518610647e-03,.8775889728776909e+00,.8474957579532225e-03, + .8801438644857288e+00,.8487211333982720e-03,.8827589815370717e+00, + .8499796836021254e-03,.8854447805825755e+00,.8512762008654021e-03, + .8882117505884698e+00,.8526154112376473e-03,.8910703067843766e+00, + .8540019093532560e-03,.8940306587022231e+00,.8554400807241641e-03, + .8971026508610441e+00,.8569340113668948e-03,.9002955753026496e+00, + .8584873851806726e-03, + .9036179562250074e+00,.2143902298924797e-03,.2946512237154931e-03, + .2543490463324859e-01,.3561260688438285e-03,.9879941719514369e-01, + .4041230092741482e-03,.1743789695511629e+00,.4424256774627034e-03, + .2429409502831179e+00,.4736116853150793e-03,.3030990118950347e+00, + .4994518169910726e-03,.3554611561972349e+00,.5211881524129952e-03, + .4010748630839990e+00,.5397121201514141e-03,.4409771509224894e+00, + .5556777014490634e-03,.4760737966263269e+00,.5695744414699151e-03, + .5071223419498457e+00,.5817755161210044e-03,.5347465345706520e+00, + .5925700732976313e-03,.5594579384248554e+00,.6021854581155787e-03, + .5816767395342153e+00,.6108027921070821e-03,.6017494993293330e+00, + .6185680956696988e-03,.6199636028202163e+00,.6256003634582641e-03, + .6365587841093024e+00,.6319975186065948e-03,.6517362513852718e+00, + .6378408654613904e-03,.6656659024902249e+00,.6431984629598351e-03, + .6784920429133774e+00,.6481277109801403e-03,.6903379352397969e+00, + .6526773552254315e-03,.7013094370793644e+00,.6568890572555564e-03, + .7114979262641195e+00,.6607986356285067e-03,.7209826665497649e+00, + .6644370556787454e-03,.7298327319935689e+00,.6678312253083076e-03, + .7381085813804109e+00,.6710046397087699e-03,.7458633536247841e+00, + .6739779074395309e-03, + .7531439394662658e+00,.6767691825904827e-03,.7599918728233108e+00, + .6793945220531763e-03,.7664440759826728e+00,.6818681826575195e-03, + .7725334857075471e+00,.6842028697103579e-03,.7782895818427216e+00, + .6864099460208997e-03,.7837388357016260e+00,.6884996086172708e-03, + .7889050921541919e+00,.6904810389048264e-03,.7938098966818099e+00, + .6923625308852660e-03,.7984727765644702e+00,.6941516011688034e-03, + .8029114836923505e+00,.6958550838122305e-03,.8071422051557240e+00, + .6974792124607250e-03,.8111797466910577e+00,.6990296918282764e-03, + .8150376931919887e+00,.7005117601960532e-03,.8187285497884573e+00, + .7019302443210675e-03,.8222638664221132e+00,.7032896079146326e-03, + .8256543483749294e+00,.7045939946601219e-03,.8289099548200989e+00, + .7058472665836456e-03,.8320399871433695e+00,.7070530384625938e-03, + .8350531685159762e+00,.7082147088500877e-03,.8379577159767848e+00, + .7093354882038982e-03,.8407614060927453e+00,.7104184245328271e-03, + .8434716351063775e+00,.7114664269090819e-03,.8460954743411380e+00, + .7124822871394600e-03,.8486397215154378e+00,.7134686998392874e-03, + .8511109485098599e+00,.7144282811093860e-03,.8535155460363737e+00, + .7153635859765056e-03,.8558597655701624e+00,.7162771247204472e-03, + .8581497588214944e+00, + .7171713781754927e-03,.8603916149446070e+00,.7180488120588147e-03, + .8625913956007934e+00,.7189118903434776e-03,.8647551679119477e+00, + .7197630876577540e-03,.8668890352571068e+00,.7206049006551845e-03, + .8689991657766132e+00,.7214398582606628e-03,.8710918183552704e+00, + .7222705306565306e-03,.8731733657564531e+00,.7230995368291464e-03, + .8752503144732032e+00,.7239295504508160e-03,.8773293207500719e+00, + .7247633038248635e-03,.8794172021118196e+00,.7256035895739055e-03, + .8815209436139331e+00,.7264532597045066e-03,.8836476979083573e+00, + .7273152216374242e-03,.8858047781004107e+00,.7281924307543494e-03, + .8879996422658111e+00,.7290878789830281e-03,.8902398684083558e+00, + .7300045789273423e-03,.8925331185794968e+00,.7309455430526645e-03, + .8948870908635684e+00,.7319137574656844e-03,.8973094579716888e+00, + .7329121498886438e-03,.8998077913001904e+00,.7339435515274697e-03, + .9023894695138696e+00,.7350106526783481e-03,.9050615710285062e+00, + .7361159521134971e-03,.9078307502075817e+00,.7372617005379830e-03, + .9107030976677650e+00,.1812712131805553e-03,.2491384321187703e-03, + .2543793868003920e-01,.3011236389389571e-03,.9881511572468257e-01, + .3417143692905089e-03,.1744135601545568e+00,.3741093236630491e-03, + .2429986895349530e+00, + .4004876411801612e-03,.3031829004247381e+00,.4223463640195241e-03, + .3555733525259414e+00,.4407355613198239e-03,.4012169377011952e+00, + .4564088559640470e-03,.4411502489205138e+00,.4699191284978094e-03, + .4762787454763390e+00,.4816802419109510e-03,.5073597250977332e+00, + .4920076781544193e-03,.5350167430251173e+00,.5011458800384139e-03, + .5597612077529058e+00,.5092870408844213e-03,.5820131769183957e+00, + .5165842754910700e-03,.6021191036853046e+00,.5231610232704372e-03, + .6203662799505060e+00,.5291178753295886e-03,.6369943582199482e+00, + .5345376082578074e-03,.6522044738696901e+00,.5394889485099423e-03, + .6661664586032026e+00,.5440294242631437e-03,.6790245567662842e+00, + .5482075518868509e-03,.6909019734144254e+00,.5520645308096385e-03, + .7019045110624699e+00,.5556355707323485e-03,.7121234938350971e+00, + .5589509407679369e-03,.7216381322017054e+00,.5620368060492128e-03, + .7305174464276960e+00,.5649159003089793e-03,.7388218400819079e+00, + .5676080707139590e-03,.7466043945017325e+00,.5701307223629278e-03, + .7539119395110627e+00,.5724991833517420e-03,.7607859437362659e+00, + .5747270064854298e-03,.7672632586796091e+00,.5768262201098143e-03, + .7733767436165075e+00,.5788075378120540e-03,.7791557928788411e+00, + .5806805346667902e-03, + .7846267827935451e+00,.5824537961143980e-03,.7898134521798050e+00, + .5841350443286614e-03,.7947372276555162e+00,.5857312459743304e-03, + .7994175029023208e+00,.5872487045051270e-03,.8038718793655162e+00, + .5886931395613308e-03,.8081163745265718e+00,.5900697555567861e-03, + .8121656028098705e+00,.5913833011706530e-03,.8160329333161330e+00, + .5926381211586964e-03,.8197306278697833e+00,.5938382016564763e-03, + .8232699622928324e+00,.5949872099502598e-03,.8266613333475188e+00, + .5960885295313444e-03,.8299143534033866e+00,.5971452911184121e-03, + .8330379345654622e+00,.5981604002247400e-03,.8360403637358284e+00, + .5991365617580406e-03,.8389293698608987e+00,.6000763020667812e-03, + .8417121844328502e+00,.6009819887851800e-03,.8443955961593316e+00, + .6018558487773787e-03,.8469860005853584e+00,.6026999844377125e-03, + .8494894453408740e+00,.6035163885670166e-03,.8519116715931933e+00, + .6043069580133006e-03,.8542581522025076e+00,.6050735062378763e-03, + .8565341270083502e+00,.6058177749442889e-03,.8587446356133339e+00, + .6065414448864817e-03,.8608945479758220e+00,.6072461459539104e-03, + .8629885930739860e+00,.6079334666143073e-03,.8650313858586231e+00, + .6086049627790323e-03,.8670274526700236e+00,.6092621661410419e-03, + .8689812552540616e+00, + .6099065920211252e-03,.8708972134736309e+00,.6105397467438793e-03, + .8727797267727406e+00,.6111631345506714e-03,.8746331944112725e+00, + .6117782640423093e-03,.8764620344479443e+00,.6123866541291380e-03, + .8782707014068333e+00,.6129898394506246e-03,.8800637025184370e+00, + .6135893752100950e-03,.8818456123793366e+00,.6141868413530916e-03, + .8836210858249036e+00,.6147838459998774e-03,.8853948687571734e+00, + .6153820280240385e-03,.8871718066152805e+00,.6159830586501987e-03, + .8889568501193103e+00,.6165886419249452e-03,.8907550578610847e+00, + .6172005138967517e-03,.8925715952587398e+00,.6178204403237505e-03, + .8944117293380552e+00,.6184502127136527e-03,.8962808187550784e+00, + .6190916424892084e-03,.8981842984351409e+00,.6197465530668733e-03, + .9001276581771762e+00,.6204167696375895e-03,.9021164145644403e+00, + .6211041064488501e-03,.9041560755392406e+00,.6218103514087190e-03, + .9062520970467020e+00,.6225372478675618e-03,.9084098312380427e+00, + .6232864734841831e-03,.9106344658545083e+00,.6240596161519326e-03, + .9129309545958600e+00,.6248581470486960e-03,.9153039385179171e+00, + .6256833909833134e-03,.9177576588059725e+00,.1520214237712800e-03, + .2089413039628107e-03,.2544061844919076e-01,.2525434029450244e-03, + .9882898388671699e-01, + .2865906408583821e-03,.1744441250170073e+00,.3137652564915279e-03, + .2430497235076716e+00,.3358945562695622e-03,.3032570714471141e+00, + .3542338804453592e-03,.3556725894600452e+00,.3696637616173895e-03, + .4013426546343276e+00,.3828161474542172e-03,.4413034887132714e+00, + .3941546527609132e-03,.4764602748670496e+00,.4040263187063507e-03, + .5075700996286871e+00,.4126956886076392e-03,.5352563525449359e+00, + .4203677355440847e-03,.5600303090493647e+00,.4272036184847955e-03, + .5823119175989039e+00,.4333317268557089e-03,.6024475399611718e+00, + .4388555655790971e-03,.6207243900791431e+00,.4438594799484181e-03, + .6373820527872740e+00,.4484128767232627e-03,.6526216037234880e+00, + .4525733807537433e-03,.6666128210012832e+00,.4563892263945745e-03, + .6794999001357331e+00,.4599010909485004e-03,.6914060010021446e+00, + .4631435158655601e-03,.7024368836752101e+00,.4661460196359733e-03, + .7126838318080794e+00,.4689339774940904e-03,.7222260166914516e+00, + .4715293228925426e-03,.7311324200920038e+00,.4739511114194688e-03, + .7394634071847610e+00,.4762159775818406e-03,.7472720204610868e+00, + .4783385074390325e-03,.7546050498913561e+00,.4803315446135938e-03, + .7615039226740586e+00,.4822064431621426e-03,.7680054467191980e+00, + .4839732777639475e-03, + .7741424349221077e+00,.4856410194012131e-03,.7799442317805824e+00, + .4872176829669196e-03,.7854371596157800e+00,.4887104519025023e-03, + .7906448982918555e+00,.4901257839368306e-03,.7955888096768238e+00, + .4914695011954675e-03,.8002882159858926e+00,.4927468673202736e-03, + .8047606394754871e+00,.4939626537433801e-03,.8090220096175752e+00, + .4951211968659503e-03,.8130868428076891e+00,.4962264475780244e-03, + .8169683987907728e+00,.4972820143036731e-03,.8206788172836932e+00, + .4982912005523597e-03,.8242292376985011e+00,.4992570377925784e-03, + .8276299044001774e+00,.5001823143295755e-03,.8308902595461131e+00, + .5010696007591026e-03,.8340190252357240e+00,.5019212724788590e-03, + .8370242764345617e+00,.5027395296647642e-03,.8399135059177911e+00, + .5035264150574445e-03,.8426936822947919e+00,.5042838298529326e-03, + .8453713020233193e+00,.5050135479486603e-03,.8479524361928227e+00, + .5057172287598274e-03,.8504427727478738e+00,.5063964287909282e-03, + .8528476547306911e+00,.5070526121216016e-03,.8551721150436168e+00, + .5076871599442239e-03,.8574209081657413e+00,.5083013792721207e-03, + .8595985392007632e+00,.5088965109213798e-03,.8617092905839876e+00, + .5094737368555486e-03,.8637572467337869e+00,.5100341869706155e-03, + .8657463168957334e+00, + .5105789453872895e-03,.8676802563950228e+00,.5111090563084296e-03, + .8695626864839279e+00,.5116255294913210e-03,.8713971129451628e+00, + .5121293453771310e-03,.8731869435885925e+00,.5126214599131585e-03, + .8749355047571672e+00,.5131028090972410e-03,.8766460569378331e+00, + .5135743132677963e-03,.8783218095540483e+00,.5140368811573158e-03, + .8799659349980495e+00,.5144914137215976e-03,.8815815819428285e+00, + .5149388077515203e-03,.8831718879555870e+00,.5153799592686180e-03, + .8847399914159621e+00,.5158157667000665e-03,.8862890427233201e+00, + .5162471338228604e-03,.8878222147576811e+00,.5166749724609052e-03, + .8893427125382002e+00,.5171002049124420e-03,.8908537820014690e+00, + .5175237660786470e-03,.8923587177991490e+00,.5179466052574159e-03, + .8938608699906167e+00,.5183696875592966e-03,.8953636494814934e+00, + .5187939948953462e-03,.8968705320333607e+00,.5192205264794681e-03, + .8983850606439769e+00,.5196502987807066e-03,.8999108460714149e+00, + .5200843448542496e-03,.9014515652504507e+00,.5205237129738048e-03, + .9030109573261521e+00,.5209694644829235e-03,.9045928170091283e+00, + .5214226707791797e-03,.9062009849407291e+00,.5218844093433793e-03, + .9078393347463627e+00,.5223557587267653e-03,.9095117564530361e+00, + .5228377924131475e-03, + .9112221359554993e+00,.5233315714807396e-03,.9129743302365174e+00, + .5238381360009637e-03,.9147721380834732e+00,.5243584951293212e-03, + .9166192660984713e+00,.5248936158673047e-03,.9185192898749830e+00, + .5254444105047963e-03,.9204756103131890e+00,.5260117227898333e-03, + .9224914051702910e+00,.5265963129170898e-03,.9245695760920818e+00, + .1268446182127322e-03,.1743404286829759e-03,.2544292517172434e-01, + .2107251564740404e-03,.9884092351738187e-01,.2391381657362996e-03, + .1744704449940017e+00,.2618172499590152e-03,.2430936807628649e+00, + .2802869400172751e-03,.3033209758285258e+00,.2955945748575447e-03, + .3557581181745550e+00,.3084747892467032e-03,.4014510452519073e+00, + .3194548214120799e-03,.4414356626653468e+00,.3289214677172303e-03, + .4766169192502833e+00,.3371642657758759e-03,.5077517230370061e+00, + .3444039242024864e-03,.5354633241883532e+00,.3508114513703712e-03, + .5602628868037311e+00,.3565213009364801e-03,.5825702685336475e+00, + .3616405864628345e-03,.6027317556351184e+00,.3662556600075083e-03, + .6210344981187767e+00,.3704368884625953e-03,.6377180257702407e+00, + .3742421752675708e-03,.6529833660710770e+00,.3777195940186037e-03, + .6670002543718940e+00,.3809093836500495e-03,.6799128476679434e+00, + .3838454780905802e-03, + .6918442706570039e+00,.3865566919752524e-03,.7029002508578049e+00, + .3890676491299710e-03,.7131720413986303e+00,.3913995164996082e-03, + .7227387845799725e+00,.3935705893726759e-03,.7316694342837096e+00, + .3955967618362022e-03,.7400243285231667e+00,.3974919078428414e-03, + .7478564830001711e+00,.3992681920658595e-03,.7552126609359470e+00, + .4009363251645967e-03,.7621342624977909e+00,.4025057747089784e-03, + .7686580679613385e+00,.4039849404875170e-03,.7748168616577529e+00, + .4053813010180153e-03,.7806399582528606e+00,.4067015366299700e-03, + .7861536486134770e+00,.4079516333750262e-03,.7913815791511374e+00, + .4091369711617666e-03,.7963450758813084e+00,.4102623988415600e-03, + .8010634223351132e+00,.4113322984474455e-03,.8055540987877207e+00, + .4123506403741368e-03,.8098329889290022e+00,.4133210309588080e-03, + .8139145590258739e+00,.4142467536602034e-03,.8178120137564664e+00, + .4151308048232806e-03,.8215374321909360e+00,.4159759248469224e-03, + .8251018868189340e+00,.4167846254347061e-03,.8285155480533462e+00, + .4175592134966781e-03,.8317877762533697e+00,.4183018121784048e-03, + .8349272029911109e+00,.4190143794182329e-03,.8379418030218164e+00, + .4196987243715124e-03,.8408389581983645e+00,.4203565219890266e-03, + .8436255143875690e+00, + .4209893259940189e-03,.8463078322926154e+00,.4215985804664407e-03, + .8488918329572650e+00,.4221856302130706e-03,.8513830386190436e+00, + .4227517300769591e-03,.8537866094869954e+00,.4232980533183947e-03, + .8561073769418921e+00,.4238256991815968e-03,.8583498735907137e+00, + .4243356997460570e-03,.8605183605508547e+00,.4248290261484384e-03, + .8626168522912827e+00,.4253065942498067e-03,.8646491393164755e+00, + .4257692698134273e-03,.8666188089433132e+00,.4262178732501410e-03, + .8685292643902939e+00,.4266531839812305e-03,.8703837423717154e+00, + .4270759444625287e-03,.8721853293661955e+00,.4274868639081453e-03, + .8739369767085355e+00,.4278866217474832e-03,.8756415146360238e+00, + .4282758708450621e-03,.8773016654044247e+00,.4286552405089854e-03, + .8789200555747797e+00,.4290253393105878e-03,.8804992275594572e+00, + .4293867577348235e-03,.8820416505043871e+00,.4297400706782409e-03, + .8835497305738722e+00,.4300858398088763e-03,.8850258206945885e+00, + .4304246158000579e-03,.8864722298061936e+00,.4307569404478835e-03, + .8878912316572020e+00,.4310833486799939e-03,.8892850731763069e+00, + .4314043704611773e-03,.8906559824410115e+00,.4317205325992682e-03, + .8920061762571498e+00,.4320323604527339e-03,.8933378673545269e+00, + .4323403795392380e-03, + .8946532711953979e+00,.4326451170423202e-03,.8959546123837375e+00, + .4329471032111149e-03,.8972441306541727e+00,.4332468726457380e-03, + .8985240864099954e+00,.4335449654585917e-03,.8997967657697997e+00, + .4338419282993692e-03,.9010644850719940e+00,.4341383152289965e-03, + .9023295947757297e+00,.4344346884251275e-03,.9035944826856999e+00, + .4347316186991527e-03,.9048615764168997e+00,.4350296858020064e-03, + .9061333450039083e+00,.4353294784934289e-03,.9074122995477561e+00, + .4356315943468108e-03,.9087009927822184e+00,.4359366392594052e-03, + .9100020174307473e+00,.4362452266356344e-03,.9113180032156295e+00, + .4365579762095740e-03,.9126516123728104e+00,.4368755124715989e-03, + .9140055335197583e+00,.4371984626638003e-03,.9153824737204230e+00, + .4375274543093129e-03,.9167851485915539e+00,.4378631122423307e-03, + .9182162702992493e+00,.4382060551085620e-03,.9196785333045526e+00, + .4385568913104083e-03,.9211745977331760e+00,.4389162143774648e-03, + .9227070702680383e+00,.4392845977512571e-03,.9242784824952105e+00, + .4396625889836182e-03,.9258912666749617e+00,.4400507033609156e-03, + .9275477289606028e+00,.4404494169815118e-03,.9292500201491721e+00, + .4408591593313590e-03,.9310001041198086e+00,.1055644989267907e-03, + .1450940149574984e-03, + .2544487491553157e-01,.1753772719352769e-03,.9885101688865597e-01, + .1990267012200822e-03,.1744926990200333e+00,.2179045108524649e-03, + .2431308553318966e+00,.2332793641731550e-03,.3033750329426410e+00, + .2460228232089687e-03,.3558304876736915e+00,.2567462279756849e-03, + .4015427879008645e+00,.2658883294937232e-03,.4415475744961243e+00, + .2737710071803561e-03,.4767496006654743e+00,.2806352044648509e-03, + .5079056259634127e+00,.2866645871705139e-03,.5356387851068741e+00, + .2920014619138971e-03,.5604601504270702e+00,.2967577154420555e-03, + .5827895051312843e+00,.3010224827883186e-03,.6029730739429139e+00, + .3048676217987417e-03,.6212979551152507e+00,.3083516878734000e-03, + .6380036341864078e+00,.3115228646427098e-03,.6532911002313850e+00, + .3144211555866268e-03,.6673300547852067e+00,.3170800443702226e-03, + .6802646246666912e+00,.3195277677802438e-03,.6922179072993687e+00, + .3217883024392515e-03,.7032956052494281e+00,.3238821374603807e-03, + .7135889485487379e+00,.3258268851960003e-03,.7231770578766950e+00, + .3276377682377606e-03,.7321288666512480e+00,.3293280109066263e-03, + .7405046933069390e+00,.3309091563550510e-03,.7483575346135667e+00, + .3323913252386479e-03,.7557341352926834e+00,.3337834281257755e-03, + .7626758772463315e+00, + .3350933410056701e-03,.7692195225318236e+00,.3363280511552274e-03, + .7753978371270195e+00,.3374937790390407e-03,.7812401170290845e+00, + .3385960807104609e-03,.7867726339385476e+00,.3396399342555158e-03, + .7920190144159111e+00,.3406298131057851e-03,.7970005637462622e+00, + .3415697484891286e-03,.8017365436465392e+00,.3424633828504657e-03, + .8062444112774049e+00,.3433140157303645e-03,.8105400256832551e+00, + .3441246433158771e-03,.8146378267077895e+00,.3448979926599179e-03, + .8185509905633486e+00,.3456365513904324e-03,.8222915655269199e+00, + .3463425935893944e-03,.8258705906609294e+00,.3470182024071915e-03, + .8292981999865211e+00,.3476652898847084e-03,.8325837141504723e+00, + .3482856143791181e-03,.8357357213079810e+00,.3488807959266790e-03, + .8387621486794669e+00,.3494523298240878e-03,.8416703260200142e+00, + .3500015986670602e-03,.8444670420569842e+00,.3505298830491450e-03, + .8471585947980716e+00,.3510383710940082e-03,.8497508364833812e+00, + .3515281669694799e-03,.8522492138466825e+00,.3520002985106894e-03, + .8546588042593751e+00,.3524557240619330e-03,.8569843482530394e+00, + .3528953386319557e-03,.8592302788504310e+00,.3533199794446321e-03, + .8614007480784993e+00,.3537304309562248e-03,.8634996509889043e+00, + .3541274294011706e-03, + .8655306474702691e+00,.3545116669204490e-03,.8674971821009717e+00, + .3548837953198046e-03,.8694025022607404e+00,.3552444294992589e-03, + .8712496746929433e+00,.3555941505903093e-03,.8730416006866108e+00, + .3559335088328495e-03,.8747810300273897e+00,.3562630262200606e-03, + .8764705738493466e+00,.3565831989362264e-03,.8781127165044531e+00, + .3568944996095447e-03,.8797098265533606e+00,.3571973793994888e-03, + .8812641669694672e+00,.3574922699360495e-03,.8827779046380256e+00, + .3577795851262342e-03,.8842531192229806e+00,.3580597228414603e-03, + .8856918114661521e+00,.3583330664979325e-03,.8870959109761732e+00, + .3585999865407079e-03,.8884672835581080e+00,.3588608418408972e-03, + .8898077381288096e+00,.3591159810143158e-03,.8911190332577230e+00, + .3593657436688535e-03,.8924028833679230e+00,.3596104615868662e-03, + .8936609646275998e+00,.3598504598479910e-03,.8948949205579224e+00, + .3600860578969333e-03,.8961063673791346e+00,.3603175705599569e-03, + .8972968991128310e+00,.3605453090130204e-03,.8984680924545586e+00, + .3607695817037281e-03,.8996215114271492e+00,.3609906952284962e-03, + .9007587118214661e+00,.3612089551655714e-03,.9018812454275019e+00, + .3614246668637566e-03,.9029906640549621e+00,.3616381361859153e-03, + .9040885233385761e+00, + .3618496702055102e-03,.9051763863193673e+00,.3620595778536006e-03, + .9062558267889668e+00,.3622681705128622e-03,.9073284323797515e+00, + .3624757625543019e-03,.9083958073791226e+00,.3626826718114261e-03, + .9094595752416100e+00,.3628892199856792e-03,.9105213807677069e+00, + .3630957329760065e-03,.9115828919134202e+00,.3633025411244249e-03, + .9126458011895109e+00,.3635099793685103e-03,.9137118266043415e+00, + .3637183872907533e-03,.9147827120992093e+00,.3639281090538103e-03, + .9158602274201335e+00,.3641394932098118e-03,.9169461673653735e+00, + .3643528923711136e-03,.9180423503436506e+00,.3645686627292243e-03, + .9191506161742795e+00,.3647871634081525e-03,.9202728230574016e+00, + .3650087556381453e-03,.9214108436404823e+00,.3652338017357785e-03, + .9225665601064491e+00,.3654626638766759e-03,.9237418582096152e+00, + .3656957026478399e-03,.9249386201881679e+00,.3659332753677379e-03, + .9261587164868569e+00,.3661757341639742e-03,.9274039962309573e+00, + .3664234238006590e-03,.9286762764029628e+00,.3666766792505202e-03, + .9299773296871511e+00,.3669358230104597e-03,.9313088709644671e+00, + .3672011621636608e-03,.9326725424613703e+00,.3674729851965463e-03, + .9340698975815723e+00,.3677515585848630e-03,.9355023834790327e+00, + .3680371231699034e-03, + .9369713224641266e+00,.8780076664716276e-04,.1206797894237555e-03, + .2544650247967021e-01,.1458689907141319e-03,.9885944344034912e-01, + .1655410204684315e-03,.1745112808102761e+00,.1812446142239127e-03, + .2431619011038030e+00,.1940348805295792e-03,.3034201872483507e+00, + .2046366722127249e-03,.3558909526523158e+00,.2135584233839305e-03, + .4016194593852736e+00,.2211650307991108e-03,.4416411290854953e+00, + .2277241922738999e-03,.4768605533838495e+00,.2334362932843276e-03, + .5080343695969284e+00,.2384540829843639e-03,.5357856177524436e+00, + .2428959131113313e-03,.5606252952358727e+00,.2468548359474569e-03, + .5829731247513873e+00,.2504049817295676e-03,.6031752812789858e+00, + .2536061116756343e-03,.6215188214764482e+00,.2565069236788439e-03, + .6382431955471400e+00,.2591474896792285e-03,.6535493621049741e+00, + .2615610783797454e-03,.6676069960615446e+00,.2637755361065909e-03, + .6805602006643017e+00,.2658143454788651e-03,.6925320522129640e+00, + .2676974460335837e-03,.7036282341255100e+00,.2694418768222108e-03, + .7139399588872692e+00,.2710622843532818e-03,.7235463309319510e+00, + .2725713276157303e-03,.7325162684867130e+00,.2739800036682437e-03, + .7409100756455830e+00,.2752979113613955e-03,.7487807355146596e+00, + .2765334664638627e-03, + .7561749796785543e+00,.2776940783128682e-03,.7631341772964979e+00, + .2787862957738123e-03,.7696950779572316e+00,.2798159285470986e-03, + .7758904353334187e+00,.2807881485415345e-03,.7817495331755640e+00, + .2817075750299807e-03,.7872986308948055e+00,.2825783465328497e-03, + .7925613426197803e+00,.2834041817797840e-03,.7975589609612814e+00, + .2841884316364275e-03,.8023107346178518e+00,.2849341235200138e-03, + .8068341072829448e+00,.2856439995410211e-03,.8111449239759836e+00, + .2863205493808272e-03,.8152576098436540e+00,.2869660387338721e-03, + .8191853256086143e+00,.2875825339972447e-03,.8229401031375546e+00, + .2881719237731651e-03,.8265329640257898e+00,.2887359376546216e-03, + .8299740236251799e+00,.2892761626868619e-03,.8332725825556256e+00, + .2897940578339750e-03,.8364372074214862e+00,.2902909667276428e-03, + .8394758021901656e+00,.2907681289320944e-03,.8423956714705967e+00, + .2912266899236334e-03,.8452035767462418e+00,.2916677099534407e-03, + .8479057864639630e+00,.2920921719375913e-03,.8505081207514051e+00, + .2925009884974771e-03,.8530159914271018e+00,.2928950082563857e-03, + .8554344378758767e+00,.2932750214832763e-03,.8577681592844462e+00, + .2936417651623478e-03,.8600215436661002e+00,.2939959275564363e-03, + .8621986940470617e+00, + .2943381523232877e-03,.8643034521390155e+00,.2946690422360806e-03, + .8663394197810720e+00,.2949891625530086e-03,.8683099783990099e+00, + .2952990440750963e-03,.8702183066991327e+00,.2955991859265754e-03, + .8720673967877357e+00,.2958900580879658e-03,.8738600688843806e+00, + .2961721037083923e-03,.8755989847774060e+00,.2964457412205325e-03, + .8772866601529093e+00,.2967113662788715e-03,.8789254759134587e+00, + .2969693535395673e-03,.8805176885897160e+00,.2972200582981628e-03, + .8820654399367039e+00,.2974638179995708e-03,.8835707657964145e+00, + .2977009536331723e-03,.8850356042996281e+00,.2979317710244726e-03, + .8864618034720409e+00,.2981565620335326e-03,.8878511283029286e+00, + .2983756056693069e-03,.8892052673284969e+00,.2985891691280583e-03, + .8905258387766696e+00,.2987975087631656e-03,.8918143963152597e+00, + .2990008709928799e-03,.8930724344411763e+00,.2991994931519033e-03, + .8943013935444719e+00,.2993936042920544e-03,.8955026646775683e+00, + .2995834259367309e-03,.8966775940568730e+00,.2997691727933844e-03, + .8978274873211489e+00,.2999510534277608e-03,.8989536135684026e+00, + .3001292709032479e-03,.9000572091906636e+00,.3003040233882832e-03, + .9011394815238150e+00,.3004755047344127e-03,.9022016123275653e+00, + .3006439050272616e-03, + .9032447611087047e+00,.3008094111123485e-03,.9042700682989381e+00, + .3009722070973778e-03,.9052786582968102e+00,.3011324748323426e-03, + .9062716423815145e+00,.3012903943684867e-03,.9072501215046918e+00, + .3014461443968870e-03,.9082151889646557e+00,.3015999026671373e-03, + .9091679329658161e+00,.3017518463863298e-03,.9101094390643967e+00, + .3019021525982453e-03,.9110407924998413e+00,.3020509985423700e-03, + .9119630804095697e+00,.3021985619920632e-03,.9128773939229608e+00, + .3023450215708908e-03,.9137848301286094e+00,.3024905570458278e-03, + .9146864939070101e+00,.3026353495957124e-03,.9155834996188661e+00, + .3027795820529983e-03,.9164769726372038e+00,.3029234391165164e-03, + .9173680507093950e+00,.3030671075326073e-03,.9182578851330556e+00, + .3032107762416357e-03,.9191476417276118e+00,.3033546364865421e-03, + .9200385015811228e+00,.3034988818797365e-03,.9209316615497335e+00, + .3036437084242899e-03,.9218283344849421e+00,.3037893144850508e-03, + .9227297491617354e+00,.3039359007049947e-03,.9236371498786060e+00, + .3040836698618365e-03,.9245517956985898e+00,.3042328266596891e-03, + .9254749592987897e+00,.3043835774503590e-03,.9264079253944743e+00, + .3045361298787459e-03,.9273519887028263e+00,.3046906924467665e-03, + .9283084514108677e+00, + .3048474739902782e-03,.9292786201121033e+00,.3050066830636484e-03, + .9302638021771222e+00,.3051685272269233e-03,.9312653015248920e+00, + .3053332122310158e-03,.9322844137639074e+00,.3055009410969733e-03, + .9333224206758433e+00,.3056719130862303e-03,.9343805840190375e+00, + .3058463225598092e-03,.9354601386351341e+00,.3060243577257252e-03, + .9365622848496463e+00,.3062061992753964e-03,.9376881801661726e+00, + .3063920189116574e-03,.9388389302645763e+00,.3065819777730374e-03, + .9400155793256640e+00,.3067762247612739e-03,.9412190997187711e+00, + .3069748947815949e-03,.9424503811041136e+00,.7309194121921337e-04, + .1004637913909749e-03,.2544785012683798e-01,.1214344266344417e-03, + .9886642145889684e-01,.1378124012607418e-03,.1745266702959460e+00, + .1508869219533374e-03,.2431876171096405e+00,.1615362906618204e-03, + .3034575961449956e+00,.1703638961634086e-03,.3559410557392941e+00, + .1777929742443069e-03,.4016830055695095e+00,.1841272759437895e-03, + .4417186869611078e+00,.1895896409160979e-03,.4769525589580654e+00, + .1943468759030283e-03,.5081411588464865e+00,.1985261336437941e-03, + .5359074494195392e+00,.2022259333499051e-03,.5607623671619424e+00, + .2055237341359384e-03,.5831255858225246e+00,.2084812437801258e-03, + .6033432403229687e+00, + .2111482088116174e-03,.6217023539986306e+00,.2135651662786688e-03, + .6384423489057279e+00,.2157654726972967e-03,.6537641595402491e+00, + .2177768213406241e-03,.6678374398703551e+00,.2196223917129092e-03, + .6808062747278515e+00,.2213217308213229e-03,.6927937240286020e+00, + .2228914362913128e-03,.7039054564531154e+00,.2243456912849616e-03, + .7142326710923299e+00,.2256966873287446e-03,.7238544600868844e+00, + .2269549614676161e-03,.7328397302769779e+00,.2281296672953758e-03, + .7412487751160227e+00,.2292287944844476e-03,.7491345676832047e+00, + .2302593478625398e-03,.7565438300381136e+00,.2312274944605136e-03, + .7635179222210341e+00,.2321386850119108e-03,.7700935850242779e+00, + .2329977549303630e-03,.7763035635723555e+00,.2338090086934327e-03, + .7821771332486441e+00,.2345762907259228e-03,.7877405452160454e+00, + .2353030452346481e-03,.7930174054153139e+00,.2359923669511411e-03, + .7980289982735111e+00,.2366470443530013e-03,.8027945642546851e+00, + .2372695966322588e-03,.8073315387125080e+00,.2378623054406560e-03, + .8116557581664309e+00,.2384272422525216e-03,.8157816390470166e+00, + .2389662920348844e-03,.8197223330870221e+00,.2394811737932779e-03, + .8234898628296190e+00,.2399734584639214e-03,.8270952401504242e+00, + .2404445845437014e-03, + .8305485702196599e+00,.2408958717848132e-03,.8338591429442381e+00, + .2413285332280931e-03,.8370355136106796e+00,.2417436858056495e-03, + .8400855741856878e+00,.2421423597075709e-03,.8430166165116897e+00, + .2425255066777939e-03,.8458353884515460e+00,.2428940073795231e-03, + .8485481438833696e+00,.2432486779499734e-03,.8511606873176778e+00, + .2435902758469355e-03,.8536784138006696e+00,.2439195050751448e-03, + .8561063446757747e+00,.2442370208681859e-03,.8584491596979498e+00, + .2445434338913074e-03,.8607112259291628e+00,.2448393140217253e-03, + .8628966237872216e+00,.2451251937555122e-03,.8650091705719897e+00, + .2454015712837818e-03,.8670524417517986e+00,.2456689132754098e-03, + .8690297902574413e+00,.2459276573988435e-03,.8709443640006192e+00, + .2461782146115141e-03,.8727991218073733e+00,.2464209712418874e-03, + .8745968479342314e+00,.2466562908861773e-03,.8763401653150385e+00, + .2468845161391411e-03,.8780315476692500e+00,.2471059701761088e-03, + .8796733305874988e+00,.2473209582014312e-03,.8812677216971869e+00, + .2475297687768076e-03,.8828168099994235e+00,.2477326750414573e-03, + .8843225744586169e+00,.2479299358347776e-03,.8857868919172412e+00, + .2481217967309792e-03,.8872115444005592e+00,.2483084909941748e-03, + .8885982258692703e+00, + .2484902404615005e-03,.8899485484720331e+00,.2486672563610595e-03, + .8912640483444853e+00,.2488397400707827e-03,.8925461909966710e+00, + .2490078838236775e-03,.8937963763265875e+00,.2491718713643894e-03, + .8950159432938443e+00,.2493318785615123e-03,.8962061742840980e+00, + .2494880739796445e-03,.8973682991919632e+00,.2496406194148037e-03, + .8985034992474405e+00,.2497896703964584e-03,.8996129106085194e+00, + .2499353766591264e-03,.9006976277404708e+00,.2500778825862051e-03, + .9017587066004092e+00,.2502173276284460e-03,.9027971676439548e+00, + .2503538466992535e-03,.9038139986692414e+00,.2504875705487804e-03, + .9048101575120641e+00,.2506186261185988e-03,.9057865746046461e+00, + .2507471368785526e-03,.9067441554092800e+00,.2508732231472320e-03, + .9076837827369850e+00,.2509970023973650e-03,.9086063189602724e+00, + .2511185895472782e-03,.9095126081281425e+00,.2512380972394480e-03, + .9104034779905169e+00,.2513556361070412e-03,.9112797419384428e+00, + .2514713150292236e-03,.9121422008655769e+00,.2515852413759041e-03, + .9129916449556555e+00,.2516975212424692e-03,.9138288553998849e+00, + .2518082596749575e-03,.9146546060474243e+00,.2519175608860183e-03, + .9154696649913860e+00,.2520255284618921e-03,.9162747960920304e+00, + .2521322655605479e-03, + .9170707604380880e+00,.2522378751010061e-03,.9178583177463857e+00, + .2523424599437699e-03,.9186382276991902e+00,.2524461230621790e-03, + .9194112512179023e+00,.2525489677043914e-03,.9201781516709387e+00, + .2526510975455835e-03,.9209396960128159e+00,.2527526168298444e-03, + .9216966558506134e+00,.2528536305011233e-03,.9224498084331230e+00, + .2529542443224635e-03,.9231999375571040e+00,.2530545649826379e-03, + .9239478343841470e+00,.2531547001891691e-03,.9246942981607159e+00, + .2532547587465925e-03,.9254401368329844e+00,.2533548506186903e-03, + .9261861675471153e+00,.2534550869732947e-03,.9269332170246625e+00, + .2535555802081323e-03,.9276821218018076e+00,.2536564439560544e-03, + .9284337283201880e+00,.2537577930678808e-03,.9291888928561548e+00, + .2538597435709706e-03,.9299484812744167e+00,.2539624126015323e-03, + .9307133685912200e+00,.2540659183085976e-03,.9314844383314877e+00, + .2541703797275094e-03,.9322625816637383e+00,.2542759166207297e-03, + .9330486962961403e+00,.2543826492837433e-03,.9338436851167795e+00, + .2544906983138460e-03,.9346484545611477e+00,.2546001843396463e-03, + .9354639126900528e+00,.2547112277091971e-03,.9362909669616406e+00, + .2548239481348102e-03,.9371305216820521e+00,.2549384642927942e-03, + .9379834751204702e+00, + .2550548933766077e-03,.9388507162759753e+00,.2551733506022396e-03, + .9397331212857866e+00,.2552939486650164e-03,.9406315494671578e+00, + .2554167971475084e-03,.9415468389884580e+00,.2555420018787558e-03, + .9424798021688484e+00,.2556696642456735e-03,.9434312204104797e+00, + .2557998804582168e-03,.9444018387723074e+00,.2559327407706962e-03, + .9453923602004483e+00,.2560683286625224e-03,.9464034394364762e+00, + .2562067199826295e-03,.9474356766321346e+00,.6097078489116776e-04, + .8380405076108355e-04,.2544896065932850e-01,.1012978969826672e-03, + .9887217219781226e-01,.1149608733516808e-03,.1745393544210289e+00, + .1258683390053939e-03,.2432088150280462e+00,.1347529092969161e-03, + .3034884369920806e+00,.1421178877684437e-03,.3559823686685004e+00, + .1483163075228666e-03,.4017354125928528e+00,.1536015360676195e-03, + .4417826623358451e+00,.1581594503691672e-03,.4770284685054013e+00, + .1621291886747866e-03,.5082292867703224e+00,.1656168126296357e-03, + .5360080170824175e+00,.1687044997776278e-03,.5608755465361002e+00, + .1714568607858636e-03,.5832515093250096e+00,.1739253676423436e-03, + .6034820081391302e+00,.1761515150836057e-03,.6218540396252812e+00, + .1781691159294222e-03,.6386070034090316e+00,.1800059934918693e-03, + .6539418148701861e+00, + .1816852471937282e-03,.6680281114720945e+00,.1832262113807821e-03, + .6810099636217561e+00,.1846451904182646e-03,.6930104184833876e+00, + .1859560284988198e-03,.7041351333436702e+00,.1871705558346453e-03, + .7144752970102477e+00,.1882989413512779e-03,.7241099922548785e+00, + .1893499739181992e-03,.7331081173060140e+00,.1903312884234792e-03, + .7415299576349032e+00,.1912495488900670e-03,.7494284788635305e+00, + .1921105978487627e-03,.7568503960324043e+00,.1929195789948627e-03, + .7638370625278608e+00,.1936810385340217e-03,.7704252127912312e+00, + .1943990094098548e-03,.7766475858453091e+00,.1950770816902051e-03, + .7825334511739168e+00,.1957184616920660e-03,.7881090542005848e+00, + .1963260218904405e-03,.7933979952488399e+00,.1969023432430833e-03, + .7984215532155936e+00,.1974497512412977e-03,.8031989630889407e+00, + .1979703467447663e-03,.8077476547694436e+00,.1984660324594830e-03, + .8120834593159135e+00,.1989385357600094e-03,.8162207876608769e+00, + .1993894284313026e-03,.8201727859718991e+00,.1998201438042677e-03, + .8239514711297960e+00,.2002319916776369e-03,.8275678492200949e+00, + .2006261713526632e-03,.8310320194637810e+00,.2010037830532616e-03, + .8343532656268659e+00,.2013658379601603e-03,.8375401366294502e+00, + .2017132670514090e-03, + .8406005178108765e+00,.2020469289116992e-03,.8435416940880705e+00, + .2023676166481832e-03,.8463704060610680e+00,.2026760640298827e-03, + .8490928999664670e+00,.2029729509505747e-03,.8517149722508350e+00, + .2032589083006388e-03,.8542420094276686e+00,.2035345223212339e-03, + .8566790237898599e+00,.2038003385039595e-03,.8590306854719521e+00, + .2040568650905127e-03,.8613013512904316e+00,.2043045762195164e-03, + .8634950907340174e+00,.2045439147614532e-03,.8656157094277920e+00, + .2047752948773090e-03,.8676667703537839e+00,.2049991043319707e-03, + .8696516130751836e+00,.2052157065895086e-03,.8715733711808579e+00, + .2054254427141078e-03,.8734349881404843e+00,.2056286330975070e-03, + .8752392317378276e+00,.2058255790312958e-03,.8769887072299080e+00, + .2060165641402434e-03,.8786858693626248e+00,.2062018556909442e-03, + .8803330333584298e+00,.2063817057884218e-03,.8819323849785773e+00, + .2065563524718971e-03,.8834859897510554e+00,.2067260207196752e-03, + .8849958014452854e+00,.2068909233720063e-03,.8864636698658907e+00, + .2070512619798147e-03,.8878913480301039e+00,.2072072275863421e-03, + .8892804987865693e+00,.2073590014480071e-03,.8906327009272852e+00, + .2075067557001234e-03,.8919494548391176e+00,.2076506539725411e-03, + .8932321877366053e+00, + .2077908519597573e-03,.8944822585136047e+00,.2079274979495885e-03, + .8957009622476075e+00,.2080607333140918e-03,.8968895343872672e+00, + .2081906929660589e-03,.8980491546507244e+00,.2083175057840894e-03, + .8991809506596934e+00,.2084412950089600e-03,.9002860013319247e+00, + .2085621786137507e-03,.9013653400525538e+00,.2086802696499600e-03, + .9024199576429591e+00,.2087956765716353e-03,.9034508051440569e+00, + .2089085035393573e-03,.9044587964294366e+00,.2090188507057549e-03, + .9054448106623624e+00,.2091268144840720e-03,.9064096946094280e+00, + .2092324878011760e-03,.9073542648225251e+00,.2093359603362731e-03, + .9082793096997696e+00,.2094373187464826e-03,.9091855914351026e+00, + .2095366468803258e-03,.9100738478654410e+00,.2096340259800857e-03, + .9109447942234819e+00,.2097295348739169e-03,.9117991248035615e+00, + .2098232501585007e-03,.9126375145473211e+00,.2099152463729734e-03, + .9134606205553340e+00,.2100055961647897e-03,.9142690835302997e+00, + .2100943704481180e-03,.9150635291568929e+00,.2101816385553131e-03, + .9158445694228796e+00,.2102674683819544e-03,.9166128038856619e+00, + .2103519265258884e-03,.9173688208879894e+00,.2104350784206675e-03, + .9181131987261704e+00,.2105169884637311e-03,.9188465067737359e+00, + .2105977201396311e-03, + .9195693065631350e+00,.2106773361385627e-03,.9202821528276868e+00, + .2107558984704203e-03,.9209855945056615e+00,.2108334685745573e-03, + .9216801757080246e+00,.2109101074253908e-03,.9223664366510376e+00, + .2109858756339512e-03,.9230449145545729e+00,.2110608335454401e-03, + .9237161445066656e+00,.2111350413328171e-03,.9243806602944845e+00, + .2112085590864012e-03,.9250389952015636e+00,.2112814468994273e-03, + .9256916827707871e+00,.2113537649494626e-03,.9263392575322679e+00, + .2114255735755424e-03,.9269822556948962e+00,.2114969333508442e-03, + .9276212157999659e+00,.2115679051506757e-03,.9282566793349052e+00, + .2116385502155082e-03,.9288891913047499e+00,.2117089302087404e-03, + .9295193007585984e+00,.2117791072688329e-03,.9301475612678799e+00, + .2118491440554076e-03,.9307745313528513e+00,.2119191037888559e-03, + .9314007748533154e+00,.2119890502829553e-03,.9320268612391253e+00, + .2120590479699442e-03,.9326533658556098e+00,.2121291619174575e-03, + .9332808700986251e+00,.2121994578366795e-03,.9339099615135131e+00, + .2122700020810254e-03,.9345412338118337e+00,.2123408616346198e-03, + .9351752867993358e+00,.2124121040897991e-03,.9358127262082568e+00, + .2124837976128301e-03,.9364541634266928e+00,.2125560108970050e-03, + .9371002151174706e+00, + .2126288131022461e-03,.9377515027186954e+00,.2127022737803375e-03, + .9384086518179469e+00,.2127764627848895e-03,.9390722913919686e+00, + .2128514501651432e-03,.9397430529036528e+00,.2129273060427348e-03, + .9404215692481872e+00,.2130041004705666e-03,.9411084735403966e+00, + .2130819032729711e-03,.9418043977356298e+00,.2131607838664165e-03, + .9425099710769944e+00,.2132408110600791e-03,.9432258183623697e+00, + .2133220528357081e-03,.9439525580254419e+00,.2134045761063316e-03, + .9446908000260153e+00,.2134884464535012e-03,.9454411435460905e+00, + .2135737278429450e-03,.9462041744896647e+00,.2136604823187037e-03, + .9469804627859271e+00,.2137487696760521e-03,.9477705594974885e+00, + .2138386471137701e-03,.9485749937375257e+00,.2139301688666145e-03, + .9493942694022146e+00,.2140233858191606e-03,.9502288617275928e+00, + .2141183451025241e-03,.9510792136830037e+00,.2142150896758442e-03, + .9519457322165201e+00,.5038843819242724e-04,.6925910573206593e-04, + .2544993017457056e-01,.8371726902993700e-04,.9887719305509405e-01, + .9500958703765661e-04,.1745504296500425e+00,.1040247370141086e-03, + .2432273260547244e+00,.1113681540690559e-03,.3035153719186541e+00, + .1174557699843303e-03,.3560184543414467e+00,.1225793327188225e-03, + .4017811956457096e+00, + .1269482262440711e-03,.4418385610275083e+00,.1307160600652860e-03, + .4770948070394370e+00,.1339978185876816e-03,.5083063187019734e+00, + .1368811515412669e-03,.5360959417043054e+00,.1394339707035654e-03, + .5609745206153379e+00,.1417096704842709e-03,.5833616556836523e+00, + .1437507874107348e-03,.6036034220420834e+00,.1455916127490372e-03, + .6219867936141575e+00,.1472600893816645e-03,.6387511510142359e+00, + .1487792104243456e-03,.6540973934997754e+00,.1501680651407632e-03, + .6681951446873501e+00,.1514426313109642e-03,.6811884629495294e+00, + .1526163827196775e-03,.6932003848740875e+00,.1537007600492208e-03, + .7043365583549521e+00,.1547055396155196e-03,.7146881637760102e+00, + .1556391248364784e-03,.7243342762844463e+00,.1565087786427017e-03, + .7333437871476419e+00,.1573208103069447e-03,.7417769754298066e+00, + .1580807267724731e-03,.7496868008107239e+00,.1587933560956882e-03, + .7571199727801611e+00,.1594629488101686e-03,.7641178395042019e+00, + .1600932616793006e-03,.7707171304832252e+00,.1606876273022243e-03, + .7769505800349328e+00,.1612490122811637e-03,.7828474531366270e+00, + .1617800660822615e-03,.7884339908714920e+00,.1622831622801481e-03, + .7937337893603658e+00,.1627604335348945e-03,.7987681234096885e+00, + .1632138013840797e-03, + .8035562240062770e+00,.1636450017242930e-03,.8081155171174660e+00, + .1640556066920045e-03,.8124618299171829e+00,.1644470435232973e-03, + .8166095694827731e+00,.1648206108678467e-03,.8205718781384362e+00, + .1651774929489843e-03,.8243607689160389e+00,.1655187718942932e-03, + .8279872440294369e+00,.1658454385065429e-03,.8314613987881412e+00, + .1661584017002631e-03,.8347925129896938e+00,.1664584967928401e-03, + .8379891315112622e+00,.1667464928090865e-03,.8410591355569131e+00, + .1670230989335329e-03,.8440098057975293e+00,.1672889702242240e-03, + .8468478784572497e+00,.1675447126847760e-03,.8495795952470572e+00, + .1677908877772391e-03,.8522107479174399e+00,.1680280164464030e-03, + .8547467180936171e+00,.1682565827161736e-03,.8571925129651890e+00, + .1684770369102029e-03,.8595527973243928e+00,.1686897985418176e-03, + .8618319223811186e+00,.1688952589122240e-03,.8640339517265517e+00, + .1690937834508111e-03,.8661626847691907e+00,.1692857138269685e-03, + .8682216779257585e+00,.1694713698590671e-03,.8702142638140924e+00, + .1696510512430158e-03,.8721435686645843e+00,.1698250391200247e-03, + .8740125281403963e+00,.1699935975008061e-03,.8758239017338748e+00, + .1701569745613678e-03,.8775802858868165e+00,.1703154038237586e-03, + .8792841259650484e+00, + .1704691052335605e-03,.8809377272028146e+00,.1706182861445670e-03, + .8825432647193950e+00,.1707631422198987e-03,.8841027926989548e+00, + .1709038582577726e-03,.8856182528146059e+00,.1710406089492363e-03, + .8870914819688771e+00,.1711735595743775e-03,.8885242194150492e+00, + .1713028666428259e-03,.8899181133170080e+00,.1714286784837430e-03, + .8912747267992473e+00,.1715511357899551e-03,.8925955435333450e+00, + .1716703721204033e-03,.8938819729025228e+00,.1717865143646592e-03, + .8951353547817279e+00,.1718996831728790e-03,.8963569639669645e+00, + .1720099933542312e-03,.8975480142843037e+00,.1721175542465397e-03, + .8987096624060582e+00,.1722224700596145e-03,.8998430113989865e+00, + .1723248401945090e-03,.9009491140270437e+00,.1724247595407294e-03, + .9020289758291009e+00,.1725223187532327e-03,.9030835579901713e+00, + .1726176045108827e-03,.9041137800229966e+00,.1727106997578779e-03, + .9051205222753303e+00,.1728016839295312e-03,.9061046282768895e+00, + .1728906331636581e-03,.9070669069387198e+00,.1729776204987175e-03, + .9080081346166083e+00,.1730627160597527e-03,.9089290570491782e+00, + .1731459872330869e-03,.9098303911803945e+00,.1732274988306475e-03, + .9107128268753881e+00,.1733073132447196e-03,.9115770285377644e+00, + .1733854905938624e-03, + .9124236366358845e+00,.1734620888606598e-03,.9132532691449957e+00, + .1735371640219225e-03,.9140665229115264e+00,.1736107701719091e-03, + .9148639749453516e+00,.1736829596390858e-03,.9156461836453693e+00, + .1737537830969034e-03,.9164136899633000e+00,.1738232896690321e-03, + .9171670185102322e+00,.1738915270294578e-03,.9179066786100761e+00, + .1739585414978131e-03,.9186331653037572e+00,.1740243781302842e-03, + .9193469603076764e+00,.1740890808064089e-03,.9200485329296795e+00, + .1741526923120535e-03,.9207383409455176e+00,.1742152544188343e-03, + .9214168314385361e+00,.1742768079602262e-03,.9220844416050994e+00, + .1743373929045788e-03,.9227415995280490e+00,.1743970484252448e-03, + .9233887249202853e+00,.1744558129680012e-03,.9240262298403793e+00, + .1745137243159310e-03,.9246545193819353e+00,.1745708196519153e-03, + .9252739923382533e+00,.1746271356188670e-03,.9258850418436779e+00, + .1746827083778257e-03,.9264880559928549e+00,.1747375736640159e-03, + .9270834184389665e+00,.1747917668409568e-03,.9276715089718623e+00, + .1748453229526972e-03,.9282527040768544e+00,.1748982767742368e-03, + .9288273774748004e+00,.1749506628601784e-03,.9293959006439499e+00, + .1750025155916436e-03,.9299586433238869e+00,.1750538692214704e-03, + .9305159740017549e+00, + .1751047579176975e-03,.9310682603808031e+00,.1751552158053241e-03, + .9316158698311472e+00,.1752052770063228e-03,.9321591698224861e+00, + .1752549756778664e-03,.9326985283383640e+00,.1753043460487161e-03, + .9332343142714111e+00,.1753534224537021e-03,.9337668977988398e+00, + .1754022393662154e-03,.9342966507373076e+00,.1754508314286094e-03, + .9348239468760963e+00,.1754992334803999e-03,.9353491622873846e+00, + .1755474805841303e-03,.9358726756122197e+00,.1755956080487566e-03, + .9363948683206198e+00,.1756436514503888e-03,.9369161249440563e+00, + .1756916466502072e-03,.9374368332783890e+00,.1757396298093589e-03, + .9379573845551401e+00,.1757876374006189e-03,.9384781735788145e+00, + .1758357062165868e-03,.9389995988277885e+00,.1758838733741719e-03, + .9395220625161108e+00,.1759321763151046e-03,.9400459706133823e+00, + .1759806528021968e-03,.9405717328197126e+00,.1760293409110582e-03, + .9410997624925852e+00,.1760782790169647e-03,.9416304765223171e+00, + .1761275057765599e-03,.9421642951526550e+00,.1761770601040649e-03, + .9427016417429337e+00,.1762269811416588e-03,.9432429424681213e+00, + .1762773082236904e-03,.9437886259529981e+00,.1763280808343769e-03, + .9443391228366760e+00,.1763793385586478e-03,.9448948652636468e+00, + .1764311210257938e-03, + .9454562862975816e+00,.1764834678455926e-03,.9460238192541732e+00, + .1765364185365951e-03,.9465978969494375e+00,.1765900124462755e-03, + .9471789508600694e+00,.1766442886627730e-03,.9477674101926942e+00, + .1766992859179855e-03,.9483637008591625e+00,.1767550424818139e-03, + .9489682443554301e+00,.1768115960474016e-03,.9495814565420250e+00, + .1768689836072686e-03,.9502037463246646e+00,.1769272413203024e-03, + .9508355142342285e+00,.1769864043696395e-03,.9514771509060350e+00, + .1770465068115518e-03,.9521290354592114e+00,.1771075814155438e-03, + .9527915337778898e+00,.1771696594959625e-03,.9534649966970047e+00, + .1772327707355348e-03,.9541497580966158e+00,.1772969430013587e-03, + .9548461329099190e+00,.1773622021540052e-03,.9555544150514501e+00, + .1774285718505145e-03,.9562748752734012e+00,.4141439367791228e-04, + .5692455280094251e-04,.2545075230958515e-01,.6880819048293672e-04, + .9888145093055719e-01,.7808989690617372e-04,.1745598225673840e+00, + .8550005185877480e-04,.2432430266865816e+00,.9153624710259941e-04, + .3035382198764821e+00,.9654032678652594e-04,.3560490681596453e+00, + .1007520715550410e-03,.4018200414988670e+00,.1043435691172141e-03, + .4418859966836131e+00,.1074410674826558e-03,.4771511109577878e+00, + .1101390695970056e-03, + .5083717098779069e+00,.1125096126676353e-03,.5361705935601133e+00, + .1146085117292486e-03,.5610585709493248e+00,.1164796503201761e-03, + .5834552139424401e+00,.1181579881289340e-03,.6037065747337148e+00, + .1196717082477531e-03,.6220996084034542e+00,.1210437761733641e-03, + .6388736798670074e+00,.1222930892987222e-03,.6542296751290908e+00, + .1234353365269360e-03,.6683372064799513e+00,.1244836495012513e-03, + .6813403224997011e+00,.1254491018862550e-03,.6933620512173756e+00, + .1263410963843689e-03,.7045080329697024e+00,.1271676677918698e-03, + .7148694414033631e+00,.1279357225503386e-03,.7245253456049399e+00, + .1286512297599230e-03,.7335446313434784e+00,.1293193747303500e-03, + .7419875726551162e+00,.1299446833543593e-03,.7499071245871521e+00, + .1305311235624521e-03,.7573499923313203e+00,.1310821886317202e-03, + .7643575200396533e+00,.1316009660202284e-03,.7709664334404412e+00, + .1320901945745293e-03,.7772094632859758e+00,.1325523123360135e-03, + .7831158711649373e+00,.1329894966984371e-03,.7887118949231211e+00, + .1334036983057875e-03,.7940211275731494e+00,.1337966697989137e-03, + .7990648409231811e+00,.1341699903007926e-03,.8038622630547293e+00, + .1345250863590139e-03,.8084308171076828e+00,.1348632499289629e-03, + .8127863274927396e+00, + .1351856538739728e-03,.8169431985757714e+00,.1354933653731529e-03, + .8209145700097322e+00,.1357873575589372e-03,.8247124521846697e+00, + .1360685196510050e-03,.8283478446917955e+00,.1363376658083228e-03, + .8318308402273038e+00,.1365955428844750e-03,.8351707159751699e+00, + .1368428372415219e-03,.8383760141893339e+00,.1370801807530195e-03, + .8414546134316254e+00,.1373081561065382e-03,.8444137917023124e+00, + .1375273014991923e-03,.8472602825170738e+00,.1377381148057014e-03, + .8500003248309528e+00,.1379410572868236e-03,.8526397075811507e+00, + .1381365568962136e-03,.8551838095120960e+00,.1383250112355325e-03, + .8576376348545903e+00,.1385067902006957e-03,.8600058453531640e+00, + .1386822383562781e-03,.8622927890697443e+00,.1388516770701086e-03, + .8645025263354547e+00,.1390154064358504e-03,.8666388531742509e+00, + .1391737070077414e-03,.8687053224808631e+00,.1393268413685703e-03, + .8707052632000881e+00,.1394750555493091e-03,.8726417977239585e+00, + .1396185803165322e-03,.8745178576969695e+00,.1397576323417808e-03, + .8763361983967452e+00,.1398924152653265e-03,.8780994118377522e+00, + .1400231206653106e-03,.8798099387284804e+00,.1401499289419495e-03, + .8814700793975387e+00,.1402730101253844e-03,.8830820037910464e+00, + .1403925246147742e-03, + .8846477606322743e+00,.1405086238553824e-03,.8861692858244719e+00, + .1406214509596627e-03,.8876484101690279e+00,.1407311412776921e-03, + .8890868664633782e+00,.1408378229217274e-03,.8904862960362619e+00, + .1409416172491532e-03,.8918482547719127e+00,.1410426393076430e-03, + .8931742186694573e+00,.1411409982459610e-03,.8944655889790835e+00, + .1412367976934811e-03,.8957236969523653e+00,.1413301361111912e-03, + .8969498082404222e+00,.1414211071166758e-03,.8981451269702901e+00, + .1415097997853232e-03,.8993107995269396e+00,.1415962989297887e-03, + .9004479180657531e+00,.1416806853595467e-03,.9015575237779278e+00, + .1417630361221969e-03,.9026406099291728e+00,.1418434247280258e-03, + .9036981246901897e+00,.1419219213591954e-03,.9047309737757363e+00, + .1419985930647974e-03,.9057400229075616e+00,.1420735039429043e-03, + .9067261001151347e+00,.1421467153106468e-03,.9076899978868622e+00, + .1422182858632548e-03,.9086324751833850e+00,.1422882718229183e-03, + .9095542593235423e+00,.1423567270782516e-03,.9104560477526908e+00, + .1424237033150753e-03,.9113385097022479e+00,.1424892501391719e-03, + .9122022877485889e+00,.1425534151916154e-03,.9130479992787559e+00, + .1426162442572255e-03,.9138762378698273e+00,.1426777813666525e-03, + .9146875745882436e+00, + .1427380688925579e-03,.9154825592148789e+00,.1427971476403172e-03, + .9162617214011930e+00,.1428550569336404e-03,.9170255717613750e+00, + .1429118346954711e-03,.9177746029050118e+00,.1429675175245004e-03, + .9185092904144644e+00,.1430221407676021e-03,.9192300937708136e+00, + .1430757385884771e-03,.9199374572319491e+00,.1431283440327680e-03, + .9206318106661012e+00,.1431799890898880e-03,.9213135703438758e+00, + .1432307047517914e-03,.9219831396916189e+00,.1432805210688911e-03, + .9226409100087367e+00,.1433294672033191e-03,.9232872611513990e+00, + .1433775714797077e-03,.9239225621848796e+00,.1434248614336570e-03, + .9245471720066236e+00,.1434713638580431e-03,.9251614399419788e+00, + .1435171048473090e-03,.9257657063143877e+00,.1435621098398706e-03, + .9263603029917071e+00,.1436064036587590e-03,.9269455539101992e+00, + .1436500105506133e-03,.9275217755776247e+00,.1436929542231280e-03, + .9280892775567625e+00,.1437352578810521e-03,.9286483629305795e+00, + .1437769442608283e-03,.9291993287501823e+00,.1438180356639552e-03, + .9297424664665897e+00,.1438585539891476e-03,.9302780623472868e+00, + .1438985207633644e-03,.9308063978784351e+00,.1439379571717663e-03, + .9313277501535416e+00,.1439768840866617e-03,.9318423922493136e+00, + .1440153220954916e-03, + .9323505935893585e+00,.1440532915279006e-03,.9328526202963160e+00, + .1440908124819338e-03,.9333487355329478e+00,.1441279048493981e-03, + .9338391998326430e+00,.1441645883404158e-03,.9343242714197350e+00, + .1442008825071996e-03,.9348042065199632e+00,.1442368067670687e-03, + .9352792596613518e+00,.1442723804247230e-03,.9357496839657160e+00, + .1443076226937871e-03,.9362157314309450e+00,.1443425527176319e-03, + .9366776532041510e+00,.1443771895894746e-03,.9371356998457099e+00, + .1444115523717566e-03,.9375901215841609e+00,.1444456601147895e-03, + .9380411685618638e+00,.1444795318746588e-03,.9384890910712563e+00, + .1445131867303672e-03,.9389341397814829e+00,.1445466438001951e-03, + .9393765659551052e+00,.1445799222572509e-03,.9398166216545342e+00, + .1446130413441780e-03,.9402545599377586e+00,.1446460203869812e-03, + .9406906350428731e+00,.1446788788079280e-03,.9411251025608388e+00, + .1447116361374763e-03,.9415582195958393e+00,.1447443120251743e-03, + .9419902449125173e+00,.1447769262494714e-03,.9424214390693087e+00, + .1448094987263750e-03,.9428520645370120e+00,.1448420495168817e-03, + .9432823858016560e+00,.1448745988331048e-03,.9437126694506553e+00, + .1449071670430162e-03,.9441431842411634e+00,.1449397746737126e-03, + .9445742011494633e+00, + .1449724424131142e-03,.9450059934001559e+00,.1450051911099938e-03, + .9454388364738392e+00,.1450380417722341e-03,.9458730080918976e+00, + .1450710155632024e-03,.9463087881769580e+00,.1451041337961289e-03, + .9467464587875015e+00,.1451374179263711e-03,.9471863040250684e+00, + .1451708895414430e-03,.9476286099124387e+00,.1452045703486834e-03, + .9480736642411287e+00,.1452384821604381e-03,.9485217563865096e+00, + .1452726468766264e-03,.9489731770888300e+00,.1453070864645653e-03, + .9494282181984106e+00,.1453418229359214e-03,.9498871723832843e+00, + .1453768783206665e-03,.9503503327975676e+00,.1454122746379124e-03, + .9508179927088858e+00,.1454480338635091e-03,.9512904450832298e+00, + .1454841778942922e-03,.9517679821256925e+00,.1455207285088794e-03, + .9522508947756375e+00,.1455577073249200e-03,.9527394721549711e+00, + .1455951357527194e-03,.9532340009683443e+00,.1456330349451717e-03, + .9537347648542913e+00,.1456714257439507e-03,.9542420436865237e+00, + .1457103286219321e-03,.9547561128248467e+00,.1457497636218381e-03, + .9552772423154445e+00,.1457897502911246e-03,.9558056960406009e+00, + .1458303076131549e-03,.9563417308182725e+00,.1458714539347385e-03, + .9568855954523308e+00,.1459132068901443e-03,.9574375297347150e+00, + .1459555833217350e-03, + .9579977634012095e+00,.1459985991974088e-03,.9585665150430652e+00, + .1460422695250747e-03,.9591439909772242e+00,.1460866082644329e-03, + .9597303840784822e+00,.1461316282363772e-03,.9603258725775255e+00, + .3429496445563442e-04,.4713901805892190e-04,.2545140450924156e-01, + .5698005902228804e-04,.9888482887297308e-01,.6466651548721230e-04, + .1745672748051217e+00,.7080319239456011e-04,.2432554843126429e+00, + .7580213079430914e-04,.3035563500747286e+00,.7994640198168629e-04, + .3560733630370389e+00,.8343456150015368e-04,.4018508725952348e+00, + .8640911033247278e-04,.4419236498367694e+00,.8897459090834537e-04, + .4771958093843240e+00,.9120925845958284e-04,.5084236299136395e+00, + .9317276496329196e-04,.5362298756774806e+00,.9491132926180562e-04, + .5611253276477577e+00,.9646129005158931e-04,.5835295355152852e+00, + .9785159643187923e-04,.6037885335602648e+00,.9910558598615794e-04, + .6221892621956204e+00,.1002422757479970e-03,.6389710741614672e+00, + .1012773140638229e-03,.6543348452257979e+00,.1022236924158808e-03, + .6684501789683020e+00,.1030922846881736e-03,.6814611164733789e+00, + .1038922606077670e-03,.6934906792512014e+00,.1046314062227422e-03, + .7046445019124451e+00,.1053163748547551e-03,.7150137530267155e+00, + .1059528854651743e-03, + .7246774971389701e+00,.1065458808280527e-03,.7337046159216464e+00, + .1070996546816144e-03,.7421553796866258e+00,.1076179547185671e-03, + .7500827400704289e+00,.1081040665980620e-03,.7575333991194183e+00, + .1085608829314993e-03,.7645486980661065e+00,.1089909602824242e-03, + .7711653599123298e+00,.1093965665385209e-03,.7774161128496167e+00, + .1097797204987463e-03,.7833302160485503e+00,.1101422251266719e-03, + .7889339050599856e+00,.1104856956203599e-03,.7942507707081078e+00, + .1108115832166325e-03,.7993020827048136e+00,.1111211954666116e-03, + .8041070671151008e+00,.1114157135775683e-03,.8086831451312193e+00, + .1116962073042465e-03,.8130461392755103e+00,.1119636477840458e-03, + .8172104520762232e+00,.1122189186395992e-03,.8211892213917328e+00, + .1124628256154204e-03,.8249944558535597e+00,.1126961049694284e-03, + .8286371533240165e+00,.1129194308029721e-03,.8321274047940588e+00, + .1131334214826889e-03,.8354744857604805e+00,.1133386452827434e-03, + .8386869368027751e+00,.1135356253556231e-03,.8417726348159536e+00, + .1137248441228562e-03,.8447388561361401e+00,.1139067471630854e-03, + .8475923326126939e+00,.1140817466633488e-03,.8503393015273689e+00, + .1142502244897405e-03,.8529855501323292e+00,.1144125349255261e-03, + .8555364554704203e+00, + .1145690071179690e-03,.8579970200494635e+00,.1147199472693837e-03, + .8603719038646763e+00,.1148656406030670e-03,.8626654531972963e+00, + .1150063531306337e-03,.8648817265611982e+00,.1151423332437714e-03, + .8670245181211878e+00,.1152738131504335e-03,.8690973788654197e+00, + .1154010101729216e-03,.8711036357789597e+00,.1155241279231094e-03, + .8730464092349987e+00,.1156433573681646e-03,.8749286287938791e+00, + .1157588777984930e-03,.8767530475772949e+00,.1158708577082165e-03, + .8785222553652559e+00,.1159794555972724e-03,.8802386905462134e+00, + .1160848207031594e-03,.8819046510357806e+00,.1161870936694311e-03, + .8835223042664072e+00,.1162864071572288e-03,.8850936963389428e+00, + .1163828864054445e-03,.8866207604170093e+00,.1164766497444822e-03, + .8881053244363083e+00,.1165678090680486e-03,.8895491181932601e+00, + .1166564702669258e-03,.8909537798705543e+00,.1167427336282587e-03, + .8923208620511820e+00,.1168266942035215e-03,.8936518372671990e+00, + .1169084421479998e-03,.8949481031247646e+00,.1169880630343355e-03, + .8962109870428230e+00,.1170656381424237e-03,.8974417506390828e+00, + .1171412447277278e-03,.8986415937936533e+00,.1172149562698677e-03, + .8998116584177496e+00,.1172868427031662e-03,.9009530319522595e+00, + .1173569706306669e-03, + .9020667506186153e+00,.1174254035230018e-03,.9031538024423191e+00, + .1174922019033529e-03,.9042151300675857e+00,.1175574235196376e-03, + .9052516333798847e+00,.1176211235049476e-03,.9062641719516429e+00, + .1176833545271722e-03,.9072535673250101e+00,.1177441669286597e-03, + .9082206051443592e+00,.1178036088566899e-03,.9091660371500875e+00, + .1178617263854677e-03,.9100905830442862e+00,.1179185636302828e-03, + .9109949322379410e+00,.1179741628544263e-03,.9118797454885111e+00, + .1180285645694077e-03,.9127456564359945e+00,.1180818076289649e-03, + .9135932730449129e+00,.1181339293173255e-03,.9144231789590457e+00, + .1181849654321338e-03,.9152359347751857e+00,.1182349503624295e-03, + .9160320792416857e+00,.1182839171620296e-03,.9168121303871106e+00, + .1183318976186388e-03,.9175765865838867e+00,.1183789223189884e-03, + .9183259275514641e+00,.1184250207102780e-03,.9190606153031572e+00, + .1184702211581763e-03,.9197810950405108e+00,.1185145510016160e-03, + .9204877959987503e+00,.1185580366045994e-03,.9211811322466059e+00, + .1186007034052168e-03,.9218615034435585e+00,.1186425759620638e-03, + .9225292955573307e+00,.1186836779982295e-03,.9231848815442406e+00, + .1187240324430169e-03,.9238286219948466e+00,.1187636614715423e-03, + .9244608657471405e+00, + .1188025865423529e-03,.9250819504693824e+00,.1188408284331903e-03, + .9256922032145273e+00,.1188784072750181e-03,.9262919409480546e+00, + .1189153425844261e-03,.9268814710508878e+00,.1189516532945120e-03, + .9274610917989764e+00,.1189873577843384e-03,.9280310928210021e+00, + .1190224739070536e-03,.9285917555355758e+00,.1190570190167592e-03, + .9291433535691963e+00,.1190910099942032e-03,.9296861531561591e+00, + .1191244632713702e-03,.9302204135215227e+00,.1191573948550362e-03, + .9307463872481658e+00,.1191898203493515e-03,.9312643206289019e+00, + .1192217549775109e-03,.9317744540045509e+00,.1192532136025640e-03, + .9322770220888102e+00,.1192842107474197e-03,.9327722542807087e+00, + .1193147606140906e-03,.9332603749653780e+00,.1193448771022213e-03, + .9337416038038212e+00,.1193745738269449e-03,.9342161560123183e+00, + .1194038641361023e-03,.9346842426320593e+00,.1194327611268635e-03, + .9351460707895552e+00,.1194612776617823e-03,.9356018439483411e+00, + .1194894263843151e-03,.9360517621524420e+00,.1195172197338335e-03, + .9364960222620436e+00,.1195446699601559e-03,.9369348181817692e+00, + .1195717891376224e-03,.9373683410819361e+00,.1195985891787351e-03, + .9377967796131314e+00,.1196250818473841e-03,.9382203201144163e+00, + .1196512787716769e-03, + .9386391468154388e+00,.1196771914563876e-03,.9390534420327067e+00, + .1197028312950406e-03,.9394633863602434e+00,.1197282095816411e-03, + .9398691588548227e+00,.1197533375220634e-03,.9402709372159495e+00, + .1197782262451063e-03,.9406688979607300e+00,.1198028868132232e-03, + .9410632165937440e+00,.1198273302329317e-03,.9414540677720091e+00, + .1198515674649078e-03,.9418416254650982e+00,.1198756094337670e-03, + .9422260631104450e+00,.1198994670375319e-03,.9426075537638465e+00, + .1199231511567857e-03,.9429862702451438e+00,.1199466726635097e-03, + .9433623852790360e+00,.1199700424295984e-03,.9437360716309537e+00, + .1199932713350474e-03,.9441075022378914e+00,.1200163702758047e-03, + .9444768503340695e+00,.1200393501712764e-03,.9448442895712680e+00, + .1200622219714742e-03,.9452099941336445e+00,.1200849966637913e-03, + .9455741388468206e+00,.1201076852793909e-03,.9459368992809881e+00, + .1201302988991895e-03,.9462984518477588e+00,.1201528486594163e-03, + .9466589738904483e+00,.1201753457567260e-03,.9470186437674542e+00, + .1201978014528419e-03,.9473776409283557e+00,.1202202270787045e-03, + .9477361459823309e+00,.1202426340380965e-03,.9480943407584549e+00, + .1202650338107162e-03,.9484524083574091e+00,.1202874379546662e-03, + .9488105331941014e+00, + .1203098581083251e-03,.9491689010306607e+00,.1203323059915656e-03, + .9495276989992437e+00,.1203547934062821e-03,.9498871156140531e+00, + .1203773322361880e-03,.9502473407719423e+00,.1203999344458418e-03, + .9506085657409490e+00,.1204226120788594e-03,.9509709831360716e+00, + .1204453772552672e-03,.9513347868815795e+00,.1204682421679518e-03, + .9517001721591189e+00,.1204912190781571e-03,.9520673353408602e+00, + .1205143203099825e-03,.9524364739069084e+00,.1205375582438321e-03, + .9528077863461864e+00,.1205609453087660e-03,.9531814720399889e+00, + .1205844939737027e-03,.9535577311273962e+00,.1206082167374240e-03, + .9539367643517374e+00,.1206321261173331e-03,.9543187728872938e+00, + .1206562346369151e-03,.9547039581454467e+00,.1206805548118562e-03, + .9550925215594878e+00,.1207050991347726e-03,.9554846643473366e+00, + .1207298800585086e-03,.9558805872514442e+00,.1207549099779616e-03, + .9562804902552012e+00,.1207802012103997e-03,.9566845722752253e+00, + .1208057659742362e-03,.9570930308289628e+00,.1208316163662374e-03, + .9575060616771147e+00,.1208577643371385e-03,.9579238584404855e+00, + .1208842216656548e-03,.9583466121909501e+00,.1209109999308791e-03, + .9587745110163490e+00,.1209381104830662e-03,.9592077395592462e+00, + .1209655644128141e-03, + .9596464785296278e+00,.1209933725186615e-03,.9600909041917725e+00, + .1210215452731320e-03,.9605411878256951e+00,.1210500927872672e-03, + .9609974951637526e+00,.1210790247737047e-03,.9614599858031973e+00, + .1211083505083695e-03,.9619288125956789e+00,.1211380787908609e-03, + .9624041210149244e+00,.1211682179036361e-03,.9628860485040654e+00, + .1211987755701019e-03,.9633747238043349e+00,.1212297589117476e-03, + .9638702662671197e+00}; + +} + +#endif diff --git a/integration/ROCK/rock_type.H b/integration/ROCK/rock_type.H index abac4e3009..279b22cd8e 100644 --- a/integration/ROCK/rock_type.H +++ b/integration/ROCK/rock_type.H @@ -61,11 +61,11 @@ struct rock_t { RArray1D yn; RArray1D fn; - RArray1D fnt; RArray1D yjm1; RArray1D yjm2; - // these 2 arrays are only needed for ROCK4 + // these 3 arrays are only needed for ROCK4 + RArray1D fnt; RArray1D yjm3; RArray1D yjm4; From dc9c3ba2cf8d2be6d8498c8fd1719d0981af114e Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 10:22:42 -0400 Subject: [PATCH 28/45] finish adding ROCK2 --- integration/ROCK/actual_integrator.H | 2 +- .../ROCK/actual_integrator_simplified_sdc.H | 2 +- integration/ROCK/rock.H | 143 ++++++++++++++++-- 3 files changed, 136 insertions(+), 11 deletions(-) diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index b93867e695..b379646d23 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -9,7 +9,7 @@ #include #include #include -#include +#include template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE diff --git a/integration/ROCK/actual_integrator_simplified_sdc.H b/integration/ROCK/actual_integrator_simplified_sdc.H index f3c3646b60..f6daf0feac 100644 --- a/integration/ROCK/actual_integrator_simplified_sdc.H +++ b/integration/ROCK/actual_integrator_simplified_sdc.H @@ -12,7 +12,7 @@ #include #include #include -#include +#include using namespace integrator_rp; diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index 47975e845b..b83b4de769 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -16,6 +16,38 @@ #include #include +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +void mdegre2(rock_t& rstate) +{ + + // this is the ROCK2 version + + constexpr amrex::Array1D ms = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 22, 24, 26, 28, 30, 33, 36, 39, 43, 47, 51, 56, 61, 66, 72, 78, 85, 93, + 102, 112, 123, 135, 148, 163, 180, 198}; + + // Find the optimal degree. + // MP(1): pointer which select the degree in ms(i)\1,2,.. + // such that mdeg<=ms(i). + // MP(2): pointer which gives the corresponding position + // of a_1 in the data recf for the selected degree. + + rstate.mp(2) = 1; + + // Find the degree + + for (int i = 1; i <= 46; ++i) { + if ((ms(i) / rstate.mdeg) >= 1) { + rstate.mdeg = ms(i); + rstate.mp(1) = i; + return; + } + rstate.mp(2) += ms(i)*2 - 1; + } + return; +} + AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mdegre4(rock_t& rstate) { @@ -50,6 +82,103 @@ void mdegre4(rock_t& rstate) } +template +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE +Real r2step (BurnT& state, rock_t& rstate) +{ + + // Solut. at t+h by an explicit (mdeg+2)-stages formula. + + int mz = rstate.mp(1); + int mr = rstate.mp(2); + + // First stage + + Real temp1 = rstate.h * rock2_coeffs::recf(mr); + Real ci1 = rstate.t + temp1; + Real ci2 = rstate.t + temp1; + Real ci3 = rstate.t; + + Real temp2, temp3; + + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.yjm2(i) = rstate.yn(i); + rstate.yjm1(i) = rstate.yn(i) + temp1 * rstate.fn(i); + if (rstate.mdeg < 2) { + rstate.y(i) = rstate.yjm1(i); + } + } + + // Stage for j=2..mdeg. + + for (int i = 2; i <= rstate.mdeg; ++i) { + temp1 = rstate.h * rock2_coeffs::recf(mr+2*(i-2)+1); + temp3 = -rock2_coeffs::recf(mr+2*(i-2)+2); + temp2 = 1.0_rt - temp3; + // we want to use rstate.yjm1 as input and store ydot in the original y + // so we simply need to copy rstate.yjm1 to y here and use y_backup + // to store the RHS and then copy it after the call + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.y(j) = rstate.yjm1(j); + } + rhs(ci1, state, rstate, rstate.y_backup); + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.y(j) = rstate.y_backup(j); + } + ci1 = temp1 + temp2 * ci2 + temp3 * ci3; + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.y(j) = temp1 * rstate.y(j) + temp2 * rstate.yjm1(j) + temp3 * rstate.yjm2(j); + + // Shift the value "y" for the next stage. + if (i < rstate.mdeg) { + rstate.yjm2(j) = rstate.yjm1(j); + rstate.yjm1(j) = rstate.y(j); + } + } + ci3 = ci2; + ci2 = ci1; + } + + // The finishing procedure + + temp1 = rstate.h * rock2_coeffs::fp1(mz); + temp2 = rstate.h * rock2_coeffs::fp2(mz); + rhs(ci1, state, rstate, rstate.yjm2); + for (int j = 1; j <= INT_NEQS; ++j) { + rstate.yjm1(j) = rstate.y(j) + temp1 * rstate.yjm2(j); + } + + ci1 += temp1; + + // call the RHS with yjm1 as the input and store the output in y + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.yjm1(i); + } + rhs(ci1, state, rstate, rstate.y_backup); + for (int i = 1; i <= INT_NEQS; ++i) { + rstate.y(i) = rstate.y_backup(i); + } + + Real err{}; + + for (int j = 1; j <= INT_NEQS; ++j) { + temp3 = temp2 * (rstate.y(j) - rstate.yjm2(j)); + rstate.y(j) = rstate.yjm1(j) + temp1 * rstate.y(j) + temp3; + Real wt{}; + if (j <= NumSpec) { + wt = rstate.rtol_spec * std::abs(rstate.y(j)) + rstate.atol_spec; + } else { + wt = rstate.rtol_enuc * std::abs(rstate.y(j)) + rstate.atol_enuc; + } + + err += std::pow(temp3 / wt, 2); + } + + err = std::sqrt(err / static_cast(INT_NEQS)); + + return err; +} + template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real r4step (BurnT& state, rock_t& rstate) @@ -212,7 +341,7 @@ Real r4step (BurnT& state, rock_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rockfrho (BurnT& state, rock_t& rstate) +Real rockrho (BurnT& state, rock_t& rstate) { @@ -371,7 +500,7 @@ Real rockfrho (BurnT& state, rock_t& rstate) template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rock4core (BurnT& state, rock_t& rstate) +int rockcore (BurnT& state, rock_t& rstate) { // Core integrator for ROCK4. @@ -434,7 +563,7 @@ int rock4core (BurnT& state, rock_t& rstate) if (nrho == 0) { // Computed internally by rockfrho - eigmax = rockfrho(state, rstate); + eigmax = rockrho(state, rstate); if (rstate.idid == -3) { return rstate.idid; } @@ -538,7 +667,7 @@ int rock4core (BurnT& state, rock_t& rstate) hp = rstate.h; rstate.h = hnew; nrho++; - Real rho_cycle = rock_order == 2 ? 25 : 10; + int rho_cycle = rock_order == 2 ? 25 : 10; nrho = nrho+1 % rho_cycle; if (last) { return rstate.idid; @@ -632,11 +761,7 @@ int rock4 (BurnT& state, rock_t& rstate) // call the integrator - if (rock_order == 2) { - rock2core(state, rstate); - } else { - rock4core(state, rstate); - } + rockcore(state, rstate); return rstate.idid; } From a742d63395070717d552cf204261e3465bed6e99 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 11:49:15 -0400 Subject: [PATCH 29/45] some more updates --- integration/ROCK/README.md | 273 ++++++++++++++++++++++++++++++++++++- integration/ROCK/rock.H | 162 +--------------------- 2 files changed, 273 insertions(+), 162 deletions(-) diff --git a/integration/ROCK/README.md b/integration/ROCK/README.md index 3c03a6c6f5..7164a33acc 100644 --- a/integration/ROCK/README.md +++ b/integration/ROCK/README.md @@ -1,4 +1,275 @@ -# ROCK4 Integrator +# ROCK Integrators + +This is an implementation of the 2nd and 4th order ROCK integrators +(ROCK2 and ROCK4 respectively). + +ROCK2 was originally described in Abdulle & Medovikov, 2001, +Numerische Mathematik, 90, 1 +(https://link.springer.com/article/10.1007/s002110100292) + +ROCK4 was originally described in + + +The original sources for these integrators were provided by the +authors in Fortran. Here they've been ported to C++ with a few +changes: + +* There was no initial dt estimation in the original implementations, + so we use the initial dt function from the RKC integrator. + +* The power method for estimating the spectral radius in the ROCK2/4 + Fortran source did not seem to work very well, so we instead use the + version from RKC. + +* The two sources have been merged and we select the order of integration + at runtime via: + + ``` + integrator.rock_order = 2 + ``` + + or `4` for the 4th order version. + +The Fortran implementations were originally downloaded from: +http://www.unige.ch/~hairer/software.html + + + +## ROCK2 original Fortran comments + +``` + Numerical solution of a (mildly) stiff system + of first order differential equations. ROCK2 is + based on a family of second order explicit Runge- + Kutta methods with nearly optimal stability domain + on the negative real axis. The numerical method is + based on a three-term recursion relation. + The size (along the negative axis) of the stability + domains increases quadratically with the stage number. + + Intended for problems of large dimensions with + eigenvalues of the Jacobian close to the negative + real axis. Typically for problems originating from + parabolic PDEs. + + + + + Author: A. Abdulle + Universite de Geneve, Dept. de mathematiques + Ch-1211 Geneve 24, Switzerland + e-mail: assyr.abdulle@math.unige.ch + + Version of April 2002 minor bug corrected + + The analysis of the ROCK2 method is described in: + + [ ] A. Abdulle & A.A. Medovikov + Second order Chebyshev methods based on + orthogonal polynomials + To appear in Numer. Math. + http://www.unige.ch/math/biblio/preprint/liste.html + + Input parameters + ---------------- + NEQN: Number of differential equations of the system + (integer). + + T: Initial point of integration (double precision). + + TEND: End of the interval of integration, + may be less than t (double precision). + + H: Initial step size guess + (usually between 1d-4 and 1d-6). + + Y(NEQN): Initial value of the solution + (double precision array of length neqn). + + F: Name (external) of subroutine computing the value + of f(x,y). Must have the form + + subroutine f(neqn,t,y,dy) + double precision y(neqn),dy(neqn) + integer neqn + dy(1)=... + ... + dy(neqn)=... + return + end + + Implementation: + for stability issues when the problem + is originating from parabolic PDEs, transforming + inhomogeneous boundary conditions in homogeneous ones + (by adding the appropriate function to the right-hand side) + may increase the performance of the code. + + + ATOL(*) : Absolute and relative error tolerances + RTOL(*) can be both scalar (double precision) + or vectors of length neqn (double precision). + + RHO: Name (external) of a function (double precision) + giving the spectral radius of the Jacobian + matrix of f at (t,y). Must have the form + + double precision function rho(neqn,t,y) + double precision y(neqn),t + integer neqn + ... + rho=... + return + end + + N.b. Gerschgorin's theorem can be helpful. If the + Jacobian is known to be constant it should be + specified by setting iwork(2)=1 (see below). + + ROCK2 can also compute this estimate. In that + case, provide a dummy function rho(neqn,t,y) and + set iwork(1)=0 (see below). +c + If it is possible to give an estimate of + the spectral radius, it should be preferred to + the estimate computed internally by ROCK2. + + IWORK(*): Integer array of length 12 that gives information + on how the problem is to be solved and communicates + statistics about the integration process. + + IWORK(1): =0 ROCK2 attempts to compute the spectral radius + internally. Define a dummy function +c + double precision function rho(neqn,t,y) + double precision y(neqn),t + integer neqn + rho=0.d0 + return + end + + =1 RHO returns an upper bound of the spectral + radius of the Jacobian matrix of f at (t,y). + + IWORK(2): =0 The Jacobian is not constant. + =1 The Jacobian is constant, + the function rho is called only once. + + IWORK(3): =0 Return and solution at tend + =1 the code returns after each step t_i chosen + automatically between [t,tend] (solution + at t_i is in y(*) ). + To continue call ROCK2 again without changing + any arguments. + + IWORK(4): =0 Atol and rtol are scalar. + =1 Atol and rtol are array of length neqn. + + WORK(*) : Workspace of length 5*neqn if iwork(1)=0, + otherwise of length 4*neqn. + Work(1),..,work(4*neqn) serve as + working space for the solution of + the ode. + Work(4*neqn+1),..,work(5*neqn) + serve as working space for the + internal computation of the + spectral radius of the Jacobian. + + IDID: Report on successfulness upon return + (integer). + + + Output parameters + ----------------- + T: T-value for which the solution has been computed + (after successful return t=tend). + + Y(NEQN): Numerical solution at tend. + + IDID: Reports what happened upon return + + IDID =1 Successful computation t=tend. + =2 Successful computation of one step + to continue call ROCK2 again without + altering any arguments. + =-1 Invalid input parameters. + =-2 Stepsize becomes to small. + =-3 The method used in ROCK2 to estimate + the spectral radius did not converge. + + IWORK(5) =Number of function evaluations. + IWORK(6) =Number of steps. + IWORK(7) =Number of accepted steps. + IWORK(8) =Number of rejected steps. + IWORK(9) =Number of evaluations of f used + to estimate the spectral radius + (equal to zero if iwork(1)=1). + IWORK(10) =Maximum number of stages used. + IWORK(11) =Maximum value of the estimated + bound for the spectral radius + (rounded to the nearest integer). + IWORK(12) =Minimum value of the estimated + bound for the spectral radius + (rounded to the nearest integer). + + + Caution: The variable UROUND (the rounding unit) is set to + ------- 1.0d-16 and may depends on the machines. + + *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + Numerical method + *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + The nearly optimal stability polynomial is computed + as a product: R_s(z)=P_{s-2}(z)*w(z). + We realize this polynomial as a Runge-Kutta method + with a three-term recurrence formula for the first + s-2 stages (with P_{s-2}(z) as stability polynomial) + and a 2-stage finishing procedure (with w(z) as + stability polynomial). + + *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + Stability functions and three-term recurrence relation. + *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + + The stability functions: R_j(z)=P_{j-2}(z) (internal j<=ms-2) + R_{ms}=P_{s-2}(z)*w(z) ( absolute) + w(z)=1+sigma*z+tau*z^2 + + P_j(z) orthogonal with respect to w(z)^2/sqrt{1-x^2} + + Recurrence formula: + + P_j(z)=(a_j*z-b_j)*P_{j-1}(z)-c_j*P_{j-2}(z) + j=1..ms-2 b_1=-1,c_1=0 + + Normalization: P_(0)=1 =>b_{j}=-(1+c_{j}) + + Runge-Kutta formula: + + g_j(z)=a_{j}*f(g_{j-1})-b_{j}*g_{j-1}-c_{j}*g_{j-2} j=1..ms-2 + + Data (rec. param.): rec(i)= a_1,a_2,c_2,a_3,c_3,.,a_(ms-2), + c_(ms-2) for ms=1,3,5,.. + + The two-stage finishing procedure: + + g_{s-1}=g_{s-2} + h*sigma*f(g_{s-2} + ge_{s}=g_{s-1} + h*sigma*f(g_{s-1} + g_{s}=ge_{s} -h*sigma*(1-(sigma/tau)*(f(g_{s-1}-f(g_{s-2}) + + Embedded method: ge_{s} + + Datas (finish. proced.): fp1(ms) =sigma + fp2(ms) =-sigma(1-(sigma/tau) + ms=1,3,5,.. + + Chosen degrees: s=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, + 20,21,22,24,26,28,30,32,35,38,41,45,49,53,58,63,68,74,80,87,95, + 104,114,125,137,150,165,182,200 ms=s-2 +``` + + +## ROCK4 original Fortran comments Here are the original comments from the `rock4.f` source code: diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index b83b4de769..290a301d5d 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -339,165 +339,6 @@ Real r4step (BurnT& state, rock_t& rstate) } -template -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rockrho (BurnT& state, rock_t& rstate) -{ - - - // Rockfrho compute eigmax, a close upper bound of the spectral - // radius of the Jacobian matrix using a power method - // (J.N. Franklin (matrix theory). The algorithm used is a small - // change (initial vector and stopping criteria) of that of - // Sommeijer-Shampine-Verwer, implemented in RKC. - - // note: in the original code, the following names were used: - // z = yjm1 - // fz = yjm2 - - constexpr int maxiter{50}; - constexpr Real safe{1.2_rt}; - - const Real sqrtu = std::sqrt(UROUND); - - // The initial vectors for the power method are yn and - // yn+c*f(v_n), where vn=f(yn) a perturbation of yn (if first - // step) or a perturbation of the last computed eigenvector - // (otherwise) - - if (rstate.nsteps == 0) { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm2(i) = rstate.fn(i); - } - // call the RHS with yjm2 as input and yjm1 as output - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.y_backup(i) = rstate.y(i); - rstate.y(i) = rstate.yjm2(i); - } - rhs(rstate.t, state, rstate, rstate.yjm1); - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.y(i) = rstate.y_backup(i); - } - rstate.nfesig++; - } else { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.sprad(i); - } - } - - // Perturbation. - - Real ynor{}; - Real znor{}; - - for (int i = 1; i <= INT_NEQS; ++i) { - ynor += std::pow(rstate.yn(i), 2); - znor += std::pow(rstate.yjm1(i), 2); - } - ynor = std::sqrt(ynor); - znor = std::sqrt(znor); - - // Normalization of the vector z so that the difference z-yn lie - // in a circle around yn (i.e has a constant modulus). - - Real dzyn{}; - - if (ynor != 0.0_rt && znor != 0.0_rt) { - dzyn = ynor * sqrtu; - Real quot = dzyn / znor; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * quot; - } - } else if (ynor != 0.0_rt) { - dzyn = ynor * sqrtu; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * sqrtu; - } - } else if (znor != 0.0_rt) { - dzyn = UROUND; - Real quot = dzyn / znor; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yjm1(i) * quot; - } - } else { - dzyn = UROUND; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = dzyn; - } - } - - // Start the power method. - - Real eigmax{}; - - int ntest{}; - int nind{}; - int ind{}; - - for (int iter = 0; iter < maxiter; ++iter) { - // call RHS with yjm1 as input and store the output as yjm2 - - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.y_backup(i) = rstate.y(i); - rstate.y(i) = rstate.yjm1(i); - } - rhs(rstate.t, state, rstate, rstate.yjm2); - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.y(i) = rstate.y_backup(i); - } - - rstate.nfesig++; - - Real dfzfn{}; - for (int i = 1; i <= INT_NEQS; ++i) { - dfzfn += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); - } - dfzfn = std::sqrt(dfzfn); - - Real eigmaxo = eigmax; - eigmax = dfzfn / dzyn; - eigmax = safe * eigmax; - - // The stopping criteria is based on a relative error between - // two successive estimation ``eigmax'' of the spectral radius. - - if (iter >= 1 && std::abs(eigmax-eigmaxo) <= (eigmax*0.05_rt)) { - // The last eigenvector is stored. - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); - } - return eigmax; - } - - // The next z is defined by z_new=yn+coef*(fz-fn) where coef - // is chosen so that norm(z_new-yn)=norm(z_old-yn) - - if (dfzfn != 0.0_rt) { - Real quot = dzyn / dfzfn; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + (rstate.yjm2(i) - rstate.fn(i)) * quot; - } - } else { - // The new z is defined by an arbitrary perturbation of - // the current approximation of the eigenvector. - ntest = 0; - nind = INT_NEQS; - ind = 1 + iter+1 % nind; - if (rstate.yjm1(ind) != rstate.yn(ind) || ntest == 10) { - rstate.yjm1(ind) = rstate.yn(ind) - (rstate.yjm1(ind) - rstate.yn(ind)); - } else { - nind = INT_NEQS + ind; - ntest++; - } - } - } - - // if we made it here, we failed, and the caller will abort - rstate.idid = -3; - return 0.0_rt; -} - - template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int rockcore (BurnT& state, rock_t& rstate) @@ -562,8 +403,7 @@ int rockcore (BurnT& state, rock_t& rstate) // Spectral radius. if (nrho == 0) { - // Computed internally by rockfrho - eigmax = rockrho(state, rstate); + eigmax = rkcrho(state, rstate, rstate.tout); if (rstate.idid == -3) { return rstate.idid; } From 3d415557804876509d78e8aa8fc725385e4a383c Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 11:58:41 -0400 Subject: [PATCH 30/45] add more ignore words --- .codespell-ignore-words | 1 + integration/ROCK/README.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.codespell-ignore-words b/.codespell-ignore-words index 3fcbaeabae..7f2a4307b2 100644 --- a/.codespell-ignore-words +++ b/.codespell-ignore-words @@ -14,3 +14,4 @@ dum crate vie rock4 +rock2 diff --git a/integration/ROCK/README.md b/integration/ROCK/README.md index 7164a33acc..93938566fa 100644 --- a/integration/ROCK/README.md +++ b/integration/ROCK/README.md @@ -259,9 +259,9 @@ c Embedded method: ge_{s} - Datas (finish. proced.): fp1(ms) =sigma - fp2(ms) =-sigma(1-(sigma/tau) - ms=1,3,5,.. + Data (finish. proced.): fp1(ms) =sigma + fp2(ms) =-sigma(1-(sigma/tau) + ms=1,3,5,.. Chosen degrees: s=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,24,26,28,30,32,35,38,41,45,49,53,58,63,68,74,80,87,95, From 7dab5fda065e284dff75ed45357aab3756f696c6 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 12:46:47 -0400 Subject: [PATCH 31/45] update docs --- integration/ROCK/README.md | 7 ++++++- sphinx_docs/source/integrators.rst | 24 +++++++++++++++++++----- sphinx_docs/source/refs.bib | 23 +++++++++++++++++++++++ 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/integration/ROCK/README.md b/integration/ROCK/README.md index 93938566fa..c960c0c288 100644 --- a/integration/ROCK/README.md +++ b/integration/ROCK/README.md @@ -7,7 +7,9 @@ ROCK2 was originally described in Abdulle & Medovikov, 2001, Numerische Mathematik, 90, 1 (https://link.springer.com/article/10.1007/s002110100292) -ROCK4 was originally described in +ROCK4 was originally described in Abdulle, 2002, SIAM Journal +of Scientific Computing, 23, 6, 2041 +(https://epubs.siam.org/doi/abs/10.1137/S1064827500379549) The original sources for these integrators were provided by the @@ -30,6 +32,9 @@ changes: or `4` for the 4th order version. +* There is a single derived type that works for both integrators. + Note that some of the scratch memory is not used for ROCK2. + The Fortran implementations were originally downloaded from: http://www.unige.ch/~hairer/software.html diff --git a/sphinx_docs/source/integrators.rst b/sphinx_docs/source/integrators.rst index cf94f27b14..03b7136bc0 100644 --- a/sphinx_docs/source/integrators.rst +++ b/sphinx_docs/source/integrators.rst @@ -22,7 +22,7 @@ The equations we integrate to do a nuclear burn are: Here, :math:`X_k` is the mass fraction of species :math:`k`, :math:`e` is the specific nuclear energy created through reactions. Also needed are density :math:`\rho`, -temperature :math:`T`, and the specific heat. The function :math:`f` provides the energy release from reactions and can often be expressed in terms of the +temperature :math:`T`, and the specific heat. The function :math:`f` provides the energy release from reactions and can often be expressed in terms of the instantaneous reaction terms, :math:`\dot{X}_k`. As noted in the previous section, this is implemented in a network-specific manner. @@ -63,14 +63,14 @@ The interfaces to all of the networks and integrators are written in C++. The main entry point for C++ is ``burner()`` in ``interfaces/burner.H``. This simply calls the ``integrator()`` -routine (at the moment this can be ``VODE``, ``BackwardEuler``, ``ForwardEuler``, ``QSS``, or ``RKC``). +routine (at the moment this can be ``VODE``, ``BackwardEuler``, ``ForwardEuler``, ``QSS``, ``RKC``, or ``ROCK``). .. code-block:: c++ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void burner (burn_t& state, Real dt) -The input is a ``burn_t``. +The input is a ``burn_t``. .. note:: @@ -365,6 +365,21 @@ the allowed options are: does need to estimate the spectral radius of the system, which is done internally. This works for moderately stiff problems. +* ``ROCK``: a stabilized explicit integrator. Two variants, a second + order method (:cite:`rock2`) and a fourth order method (:cite:`rock4`) are + implemented based on the original Fortran source code. The order + is selected via the runtime parameter: + + :: + + integrator.rock_order = 2 + + (e.g. for 2nd order). This does not require a Jacobian, but does + need to estimate the spectral radius of the system, which is done + internally. This works for moderately stiff problems. Our + implementation uses the timestep estimator and spectral radius power + method from the ``RKC`` integrator. + * ``VODE``: the VODE :cite:`vode` integration package. We ported this integrator to C++ and removed the non-stiff integration code paths. @@ -374,7 +389,7 @@ robust. .. important:: The integrator will not abort if it encounters trouble. Instead it will - set ``burn_t burn_state.success = false`` on exit. It is up to the + set ``burn_t burn_state.success = false`` on exit. It is up to the application code to handle the failure. Tolerances @@ -436,4 +451,3 @@ encountered by the scripts writing the runtime parameter header files, the value of the parameter with the highest priority is used. So picking a large integer value for the priority in a network’s ``_parameter`` file will ensure that it takes precedence. - diff --git a/sphinx_docs/source/refs.bib b/sphinx_docs/source/refs.bib index 015e4d2b08..3dcfdeb17d 100644 --- a/sphinx_docs/source/refs.bib +++ b/sphinx_docs/source/refs.bib @@ -620,3 +620,26 @@ @article{sommeijer_rkc_1998 year = {1998}, pages = {315--326} } + +@article{rock4, +author = {Abdulle, Assyr}, +title = {Fourth Order Chebyshev Methods with Recurrence Relation}, +journal = {SIAM Journal on Scientific Computing}, +volume = {23}, +number = {6}, +pages = {2041-2054}, +year = {2002}, +doi = {10.1137/S1064827500379549}, +URL = {https://doi.org/10.1137/S1064827500379549}, +eprint = {https://doi.org/10.1137/S1064827500379549} +} + +@article{rock2, +author = {{Abdulle}, A and {Medovikov}, A. A.}, +title = {Second order Chebyshev methods based on orthogonal polynomials}, +journal = {Numerische Mathematik}, +year = {2001}, +volume = {90}, +pages = {1-18}, +URL = {https://doi.org/10.1007/s002110100292} +} From 9f3d6c15545c378b74dc1f2a94da8977e8573834 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 13:22:57 -0400 Subject: [PATCH 32/45] more cleaning --- integration/ROCK/README.md | 13 +++++++++++++ integration/ROCK/rock.H | 14 ++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/integration/ROCK/README.md b/integration/ROCK/README.md index c960c0c288..09ed28bf1d 100644 --- a/integration/ROCK/README.md +++ b/integration/ROCK/README.md @@ -32,6 +32,9 @@ changes: or `4` for the 4th order version. +* We don't abort if the timestep is smaller than UROUND, since t is often + quite small itself. Instead we check if t + dt = t + * There is a single derived type that works for both integrators. Note that some of the scratch memory is not used for ROCK2. @@ -39,6 +42,16 @@ The Fortran implementations were originally downloaded from: http://www.unige.ch/~hairer/software.html +## Return codes + +The return code from the integrator has the following meanings: + + * 1: successful computation + * -1: Invalid input parameters. + * -2: Stepsize becomes to small. + * -3: Failure estimating spectral radius + + ## ROCK2 original Fortran comments diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index 290a301d5d..bf7168a6b8 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -393,12 +393,12 @@ int rockcore (BurnT& state, rock_t& rstate) last = true; } -#if 0 - if (rstate.h < 10.0_rt * UROUND) { + // did we underflow? + + if (rstate.t + rstate.h == rstate.t) { rstate.idid = -2; return rstate.idid; } -#endif // Spectral radius. @@ -568,7 +568,7 @@ int rock4 (BurnT& state, rock_t& rstate) rhs(rstate.t, state, rstate, rstate.fn); Real sprad = rkcrho(state, rstate, rstate.tout); - + //rstate.h = initial_dt(state, rstate, rstate.fn); rstate.h = rkc_init_dt(state, rstate, rstate.tout, sprad); @@ -576,12 +576,6 @@ int rock4 (BurnT& state, rock_t& rstate) // Test the initial step size and tolerances. -#if 0 - if (rstate.h < 10.0_rt * UROUND) { - rstate.idid = -1; - return rstate.idid; - } -#endif bool valid = true; From ee5c74d1780c983007db2cf61fa48926ee5eaf3c Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 13:37:25 -0400 Subject: [PATCH 33/45] move rkc_util.H into integrator/utils this can then be used by other integrators more easily --- integration/RKC/Make.package | 1 - integration/utils/Make.package | 1 + integration/{RKC => utils}/rkc_util.H | 2 -- 3 files changed, 1 insertion(+), 3 deletions(-) rename integration/{RKC => utils}/rkc_util.H (99%) diff --git a/integration/RKC/Make.package b/integration/RKC/Make.package index 0a52d88c33..1d50a75d21 100644 --- a/integration/RKC/Make.package +++ b/integration/RKC/Make.package @@ -7,5 +7,4 @@ else endif CEXE_headers += rkc_type.H -CEXE_headers += rkc_util.H CEXE_headers += rkc.H diff --git a/integration/utils/Make.package b/integration/utils/Make.package index a327aaac75..82892b8aa0 100644 --- a/integration/utils/Make.package +++ b/integration/utils/Make.package @@ -4,3 +4,4 @@ endif CEXE_headers += jacobian_utilities.H CEXE_headers += numerical_jacobian.H CEXE_headers += initial_timestep.H +CEXE_headers += rkc_util.H \ No newline at end of file diff --git a/integration/RKC/rkc_util.H b/integration/utils/rkc_util.H similarity index 99% rename from integration/RKC/rkc_util.H rename to integration/utils/rkc_util.H index 8b3909b8e3..dd9fc3e626 100644 --- a/integration/RKC/rkc_util.H +++ b/integration/utils/rkc_util.H @@ -1,8 +1,6 @@ #ifndef RKC_UTIL_H #define RKC_UTIL_H -#include - template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real sprad) From 171e0d100615a4aa6f450cb06929e2cfed1f45e9 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 13:49:12 -0400 Subject: [PATCH 34/45] remove dupe --- integration/ROCK/rkc_util.H | 218 ------------------------------------ 1 file changed, 218 deletions(-) delete mode 100644 integration/ROCK/rkc_util.H diff --git a/integration/ROCK/rkc_util.H b/integration/ROCK/rkc_util.H deleted file mode 100644 index dd9fc3e626..0000000000 --- a/integration/ROCK/rkc_util.H +++ /dev/null @@ -1,218 +0,0 @@ -#ifndef RKC_UTIL_H -#define RKC_UTIL_H - -template -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real sprad) -{ - - // estimate the initial timestep - // - // this requires that yn hold the initial state and fn the corresponding RHS - // it also requires temporary space yjm1 and yjm2 - // finally, we require the initial spectral radius, sprad, and the maximum - // timestep (tout - tstart), max_dt. - - Real hmin = 10.0_rt * UROUND * std::max(std::abs(rstate.t), max_dt); - - Real absh = max_dt; - - if (sprad * absh > 1.0_rt) { - absh = 1.0_rt / sprad; - } - absh = std::max(absh, hmin); - - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + absh * rstate.fn(i); - } - - // we want to call with yjm1 as the input, so we need to stash the - // current y - RArray1D ysav; - for (int i = 1; i <= INT_NEQS; ++i) { - ysav(i) = rstate.y(i); - rstate.y(i) = rstate.yjm1(i); - } - rhs(rstate.t+absh, state, rstate, rstate.yjm2); - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.y(i) = ysav(i); - } - - rstate.nfe++; - Real est{}; - - // compute the weights using the tolerances - for (int i = 1; i <= INT_NEQS; ++i) { - Real wt{}; - if (i <= NumSpec) { - wt = rstate.rtol_spec * std::abs(rstate.yn(i)) + rstate.atol_spec; - } else { - wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; - } - if (wt == 0.0_rt) { - rstate.idid = 3; - return rstate.idid; - } - est += std::pow((rstate.yjm2(i) - rstate.fn(i)) / wt, 2); - } - est = absh * std::sqrt(est / INT_NEQS); - - if (0.1_rt * absh < max_dt * std::sqrt(est)) { - absh = std::max(0.1_rt * absh / std::sqrt(est), hmin); - } else { - absh = max_dt; - } - - return absh; - -} - -template -AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) -{ - - // RKCRHO attempts to compute a close upper bound, SPRAD, on - // the spectral radius of the Jacobian matrix using a nonlinear - // power method. A convergence failure is reported by IDID = 6. - - // for the start (nsteps == 0), this works off of the initial - // function evaluation, rstate.fn(i), which has units of dy/dt - // - // for other steps, with works off of rstate.sprad, which is the - // eigenvector from the previous solve. It also has units of - // y - // - // this means that the caller needs to initialize - // - // rstate.yn to the old-timesolution - // rstate.fn to the RHS called with yn for nsteps == 0 - // rstate.sprad to the previous eigenvector for nsteps > 0 - // - // max_dt is the maximum timestep, typically tout - tbegin - // - // we use rstate.yjm1 and rstate.yjm2 as internal storage - - constexpr int itmax{50}; - - // sprad smaller than small = 1/hmax are not - // interesting because they do not constrain the step size. - - Real small = 1.0_rt / max_dt; - - // The initial slope is used as guess when nsteps = 0 and - // thereafter the last computed eigenvector. Some care - // is needed to deal with special cases. Approximations to - // the eigenvector are normalized so that their Euclidean - // norm has the constant value dynrm. - - if (rstate.nsteps == 0) { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.fn(i); - } - } else { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.sprad(i); - } - } - - Real ynrm{}; - Real vnrm{}; - for (int i = 1; i <= INT_NEQS; ++i) { - ynrm += std::pow(rstate.yn(i), 2); - vnrm += std::pow(rstate.yjm1(i), 2); - } - ynrm = std::sqrt(ynrm); - vnrm = std::sqrt(vnrm); - - Real dynrm{}; - if (ynrm != 0.0_rt && vnrm != 0.0_rt) { - dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + rstate.yjm1(i) * (dynrm / vnrm); - } - } else if (ynrm != 0.0_rt) { - dynrm = ynrm * std::sqrt(UROUND); - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + rstate.yn(i) * std::sqrt(UROUND); - } - } else if (vnrm != 0.0_rt) { - dynrm = UROUND; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yjm1(i) * (dynrm / vnrm); - } - } else { - dynrm = UROUND; - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = dynrm; - } - } - - // Now iterate with a nonlinear power method. - - Real sigma{}; - Real sprad{}; - - for (int iter = 0; iter < itmax; ++iter) { - - // we want to call the RHS with yjm1() as the input, so we need to copy - // this temporarily into vstate.y() - RArray1D ysav; - for (int i = 1; i <= INT_NEQS; ++i) { - ysav(i) = rstate.y(i); - rstate.y(i) = rstate.yjm1(i); - } - rhs(rstate.t, state, rstate, rstate.yjm2); - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.y(i) = ysav(i); - } - rstate.nfesig++; - Real dfnrm{}; - for (int i = 1; i <= INT_NEQS; ++i) { - dfnrm += std::pow(rstate.yjm2(i) - rstate.fn(i), 2); - } - dfnrm = std::sqrt(dfnrm); - Real sigmal = sigma; - sigma = dfnrm / dynrm; - - // sprad is a little bigger than the estimate sigma of the - // spectral radius, so is more likely to be an upper bound. - - sprad = 1.2_rt * sigma; - - if (iter >= 1 && - std::abs(sigma - sigmal) <= std::max(sigma, small) * 0.01_rt) { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); - } - return sprad; - } - - // The next yjm1(*) is the change in f - // scaled so that norm(v - yn) = dynrm. - - if (dfnrm != 0.0_rt) { - for (int i = 1; i <= INT_NEQS; ++i) { - rstate.yjm1(i) = rstate.yn(i) + - (rstate.yjm2(i) - rstate.fn(i)) * (dynrm / dfnrm); - } - } else { - - // The new v(*) degenerated to yn(*)--"randomly" perturb - // current approximation to the eigenvector by changing - // the sign of one component. - - int index = 1 + (iter + 1) % INT_NEQS; - rstate.yjm1(index) = rstate.yn(index) - - (rstate.yjm1(index) - rstate.yn(index)); - } - } - - // Set flag to report a convergence failure. - - rstate.idid = 6; - return sprad; -} - - -#endif From 99ec9a430c0889c4ade5d484fd4e275da6c70e2f Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 14:00:08 -0400 Subject: [PATCH 35/45] silence print --- integration/ROCK/rock.H | 2 -- 1 file changed, 2 deletions(-) diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index bf7168a6b8..58b0c05316 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -572,8 +572,6 @@ int rock4 (BurnT& state, rock_t& rstate) //rstate.h = initial_dt(state, rstate, rstate.fn); rstate.h = rkc_init_dt(state, rstate, rstate.tout, sprad); - std::cout << "initial timestep = " << rstate.h << std::endl; - // Test the initial step size and tolerances. From d52755b1de8200f13865f6daa3ce2aec147dfe44 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 14:02:12 -0400 Subject: [PATCH 36/45] fix return coes --- integration/RKC/rkc.H | 5 +++-- integration/utils/rkc_util.H | 15 ++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/integration/RKC/rkc.H b/integration/RKC/rkc.H index 75e1e11805..3754ea8842 100644 --- a/integration/RKC/rkc.H +++ b/integration/RKC/rkc.H @@ -154,8 +154,9 @@ int rkclow (BurnT& state, rkc_t& rstate) // in rkcrho is reported by idid = 6. if (newspc) { - sprad = rkcrho(state, rstate, rstate.hmax); - if (rstate.idid == 6) { + int ierr = rkcrho(state, rstate, rstate.hmax, sprad); + if (ierr != 0) { + rstate.idid == 6; return rstate.idid; } diff --git a/integration/utils/rkc_util.H b/integration/utils/rkc_util.H index dd9fc3e626..572628c203 100644 --- a/integration/utils/rkc_util.H +++ b/integration/utils/rkc_util.H @@ -49,10 +49,6 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra } else { wt = rstate.rtol_enuc * std::abs(rstate.yn(i)) + rstate.atol_enuc; } - if (wt == 0.0_rt) { - rstate.idid = 3; - return rstate.idid; - } est += std::pow((rstate.yjm2(i) - rstate.fn(i)) / wt, 2); } est = absh * std::sqrt(est / INT_NEQS); @@ -69,12 +65,12 @@ Real rkc_init_dt (BurnT& state, IntT& rstate, const Real max_dt, const Real spra template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) +int rkcrho (BurnT& state, IntT& rstate, const Real max_dt, Real& sprad) { // RKCRHO attempts to compute a close upper bound, SPRAD, on // the spectral radius of the Jacobian matrix using a nonlinear - // power method. A convergence failure is reported by IDID = 6. + // power method. A convergence failure is reported by ierr != 0 // for the start (nsteps == 0), this works off of the initial // function evaluation, rstate.fn(i), which has units of dy/dt @@ -151,7 +147,6 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) // Now iterate with a nonlinear power method. Real sigma{}; - Real sprad{}; for (int iter = 0; iter < itmax; ++iter) { @@ -185,7 +180,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) for (int i = 1; i <= INT_NEQS; ++i) { rstate.sprad(i) = rstate.yjm1(i) - rstate.yn(i); } - return sprad; + return 0; } // The next yjm1(*) is the change in f @@ -209,9 +204,7 @@ Real rkcrho (BurnT& state, IntT& rstate, const Real max_dt) } // Set flag to report a convergence failure. - - rstate.idid = 6; - return sprad; + return -1; } From b9f6c501123ced742f879e1b3db18996e8f3bf70 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sat, 17 Jun 2023 14:22:54 -0400 Subject: [PATCH 37/45] implement better error messages --- integration/ROCK/actual_integrator.H | 6 ++-- .../ROCK/actual_integrator_simplified_sdc.H | 8 ++--- integration/ROCK/rock.H | 33 +++++++++---------- integration/ROCK/rock_type.H | 9 +++-- 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index b379646d23..23bb52ede7 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -59,7 +59,7 @@ void actual_integrator (BurnT& state, Real dt) // Call the integration routine. - int ierr = rock4(state, rock_state); + int ierr = rock(state, rock_state); // Copy the integration data back to the burn state. @@ -88,8 +88,8 @@ void actual_integrator (BurnT& state, Real dt) state.success = false; } - // ROCK4 does not always fail even though it can lead to unphysical states. - // Add some checks that indicate a burn fail even if ROCK4 thinks the + // ROCK does not always fail even though it can lead to unphysical states. + // Add some checks that indicate a burn fail even if ROCK thinks the // integration was successful. for (int n = 1; n <= NumSpec; ++n) { diff --git a/integration/ROCK/actual_integrator_simplified_sdc.H b/integration/ROCK/actual_integrator_simplified_sdc.H index f6daf0feac..0ebfb33c31 100644 --- a/integration/ROCK/actual_integrator_simplified_sdc.H +++ b/integration/ROCK/actual_integrator_simplified_sdc.H @@ -64,7 +64,7 @@ void actual_integrator (BurnT& state, Real dt) Real sdc_tol_fac = std::pow(sdc_burn_tol_factor, state.num_sdc_iters - state.sdc_iter - 1); - // we use 1-based indexing inside of ROCK4, so we need to shift the + // we use 1-based indexing inside of ROCK, so we need to shift the // indices SRHO, SFS, etc by 1 Real sdc_min_density = amrex::min(state.rho, state.rho_orig + state.ydot_a[SRHO] * dt); @@ -81,7 +81,7 @@ void actual_integrator (BurnT& state, Real dt) // Call the integration routine. - int ierr = rock4(state, rock_state); + int ierr = rock(state, rock_state); // Get the number of RHS and Jacobian evaluations. @@ -116,8 +116,8 @@ void actual_integrator (BurnT& state, Real dt) normalize_abundances_sdc_burn(state); - // ROCK4 does not always fail even though it can lead to unphysical states. - // Add some checks that indicate a burn fail even if ROCK4 thinks the + // ROCK does not always fail even though it can lead to unphysical states. + // Add some checks that indicate a burn fail even if ROCK thinks the // integration was successful. if (ierr != 1) { diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index 58b0c05316..6162628fe8 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -357,9 +357,6 @@ int rockcore (BurnT& state, rock_t& rstate) rstate.max_rho = 0; rstate.min_rho = std::numeric_limits::max(); - rstate.idid = 1; - - Real facmax{5.0_rt}; Real told{0.0_rt}; Real err{0.0_rt}; @@ -384,7 +381,7 @@ int rockcore (BurnT& state, rock_t& rstate) Real errp = err; Real eigmax{}; - while (true) { + while (rstate.nsteps < integrator_rp::ode_max_steps) { // Step-size is adjusted. @@ -396,16 +393,15 @@ int rockcore (BurnT& state, rock_t& rstate) // did we underflow? if (rstate.t + rstate.h == rstate.t) { - rstate.idid = -2; - return rstate.idid; + return IERR_DT_UNDERFLOW; } // Spectral radius. if (nrho == 0) { - eigmax = rkcrho(state, rstate, rstate.tout); - if (rstate.idid == -3) { - return rstate.idid; + int ierr = rkcrho(state, rstate, rstate.tout, eigmax); + if (ierr != 0) { + return IERR_SPRAD_CONVERGENCE; } rstate.max_rho = std::max(rstate.max_rho, static_cast(std::round(eigmax))); rstate.min_rho = std::min(rstate.min_rho, static_cast(std::round(eigmax))); @@ -510,7 +506,7 @@ int rockcore (BurnT& state, rock_t& rstate) int rho_cycle = rock_order == 2 ? 25 : 10; nrho = nrho+1 % rho_cycle; if (last) { - return rstate.idid; + return IERR_SUCCESS; } else { for (int i = 1; i <= INT_NEQS; ++i) { rstate.yn(i) = rstate.y(i); @@ -544,13 +540,13 @@ int rockcore (BurnT& state, rock_t& rstate) continue; } - return rstate.idid; + return IERR_TOO_MANY_STEPS; } template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rock4 (BurnT& state, rock_t& rstate) +int rock (BurnT& state, rock_t& rstate) { using namespace integrator_rp; @@ -567,7 +563,11 @@ int rock4 (BurnT& state, rock_t& rstate) rhs(rstate.t, state, rstate, rstate.fn); - Real sprad = rkcrho(state, rstate, rstate.tout); + Real sprad{}; + int ierr = rkcrho(state, rstate, rstate.tout, sprad); + if (ierr != 0) { + return IERR_SPRAD_CONVERGENCE; + } //rstate.h = initial_dt(state, rstate, rstate.fn); rstate.h = rkc_init_dt(state, rstate, rstate.tout, sprad); @@ -587,15 +587,14 @@ int rock4 (BurnT& state, rock_t& rstate) } if (! valid) { - rstate.idid = -1; // TODO: remove idid from rstate - return rstate.idid; + return IERR_BAD_INPUTS; } // call the integrator - rockcore(state, rstate); + ierr = rockcore(state, rstate); - return rstate.idid; + return ierr; } #endif diff --git a/integration/ROCK/rock_type.H b/integration/ROCK/rock_type.H index 279b22cd8e..83a03d89c6 100644 --- a/integration/ROCK/rock_type.H +++ b/integration/ROCK/rock_type.H @@ -18,6 +18,12 @@ const amrex::Real UROUND = std::numeric_limits::epsilon(); // -failure_tolerance <= X <= 1.0 + failure_tolerance). const Real rock_failure_tolerance = 1.e-2_rt; +enum rock_errors { + IERR_SUCCESS = 1, + IERR_BAD_INPUTS = -1, + IERR_DT_UNDERFLOW = -2, + IERR_SPRAD_CONVERGENCE = -3, + IERR_TOO_MANY_STEPS = -4}; struct rock_t { @@ -81,9 +87,6 @@ struct rock_t { amrex::Array1D mp; - // set IDID = 0 for initialization - short idid; - // the following a variables that were in the RKCDID common // block From a8b50e73c53898c29e17c74ff819388a67b0afac Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sun, 18 Jun 2023 15:52:15 -0400 Subject: [PATCH 38/45] some syncing --- integration/ROCK/actual_integrator.H | 11 ++++++++++- integration/ROCK/actual_integrator_simplified_sdc.H | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index 23bb52ede7..80dfa8987b 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -42,6 +42,15 @@ void actual_integrator (BurnT& state, Real dt) eos(eos_input_rt, state); + // set the scaling for energy if we integrate it dimensionlessly + state.e_scale = state.e; + + if (scale_system) { + // the absolute tol for energy needs to reflect the scaled + // energy the integrator sees + rock_state.atol_enuc /= state.e_scale; + } + // Fill in the initial integration state. burn_to_integrator(state, rock_state); @@ -84,7 +93,7 @@ void actual_integrator (BurnT& state, Real dt) state.n_jac = 0; state.n_step = rock_state.nsteps; - if (ierr != 1) { + if (ierr != IERR_SUCCESS) { state.success = false; } diff --git a/integration/ROCK/actual_integrator_simplified_sdc.H b/integration/ROCK/actual_integrator_simplified_sdc.H index 0ebfb33c31..07ce7c1e96 100644 --- a/integration/ROCK/actual_integrator_simplified_sdc.H +++ b/integration/ROCK/actual_integrator_simplified_sdc.H @@ -120,7 +120,7 @@ void actual_integrator (BurnT& state, Real dt) // Add some checks that indicate a burn fail even if ROCK thinks the // integration was successful. - if (ierr != 1) { + if (ierr != IERR_SUCCESS) { state.success = false; } From 1290d5a94d548817cde33321fcbc7ef5c2648b25 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 3 Jul 2023 14:42:39 -0400 Subject: [PATCH 39/45] sync up with latest changes --- integration/ROCK/_parameters | 4 ++ integration/ROCK/actual_integrator.H | 14 ++++-- .../ROCK/actual_integrator_simplified_sdc.H | 28 +++++------ integration/ROCK/rock.H | 47 ++++++++++++------- integration/ROCK/rock_type.H | 35 +++++--------- 5 files changed, 67 insertions(+), 61 deletions(-) diff --git a/integration/ROCK/_parameters b/integration/ROCK/_parameters index dfa8c1c3b0..fbf0baffb5 100644 --- a/integration/ROCK/_parameters +++ b/integration/ROCK/_parameters @@ -1,3 +1,7 @@ @namespace: integrator rock_order integer 2 + +# use the Gershgorin circle theorem to estimate the spectral radius? +# note: requires integrator.scale_system = 1 +use_circle_theorem integer 0 diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index 80dfa8987b..3f9b2c084b 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -18,7 +18,9 @@ void actual_integrator (BurnT& state, Real dt) using namespace integrator_rp; - rock_t rock_state{}; + constexpr int int_neqs = integrator_neqs(); + + rock_t rock_state{}; // Set the tolerances. @@ -37,6 +39,12 @@ void actual_integrator (BurnT& state, Real dt) rock_state.t = 0.0_rt; rock_state.tout = dt; + // Initialize ydot to zero for Strang burn. + + for (int n = 0; n < SVAR; ++n) { + state.ydot_a[n] = 0; + } + // We assume that (rho, T) coming in are valid, do an EOS call // to fill the rest of the thermodynamic variables. @@ -102,14 +110,14 @@ void actual_integrator (BurnT& state, Real dt) // integration was successful. for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(n) < -rock_failure_tolerance) { + if (rock_state.y(n) < -species_failure_tolerance) { state.success = false; } // Don't enforce the condition below // for primordial chem if (!use_number_densities) { - if (rock_state.y(n) > 1.0_rt + rock_failure_tolerance) { + if (rock_state.y(n) > 1.0_rt + species_failure_tolerance) { state.success = false; } } diff --git a/integration/ROCK/actual_integrator_simplified_sdc.H b/integration/ROCK/actual_integrator_simplified_sdc.H index 07ce7c1e96..77f24f4f32 100644 --- a/integration/ROCK/actual_integrator_simplified_sdc.H +++ b/integration/ROCK/actual_integrator_simplified_sdc.H @@ -1,9 +1,6 @@ #ifndef actual_integrator_H #define actual_integrator_H -// Common variables and routines for burners -// that use VODE for their integration. - #include #include @@ -11,6 +8,7 @@ #include #include #include +#include #include #include @@ -20,8 +18,9 @@ template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void actual_integrator (BurnT& state, Real dt) { + constexpr int int_neqs = integrator_neqs(); - rock_t rock_state{}; + rock_t rock_state{}; // Start off by assuming a successful burn. @@ -32,11 +31,6 @@ void actual_integrator (BurnT& state, Real dt) rock_state.t = 0.0_rt; rock_state.tout = dt; - // We assume that (rho, T) coming in are valid, do an EOS call - // to fill the rest of the thermodynamic variables. - - eos(eos_input_rt, state); - // Fill in the initial integration state. burn_to_int(state, rock_state); @@ -99,7 +93,7 @@ void actual_integrator (BurnT& state, Real dt) Real rho_Sdot = 0.0_rt; if (state.time > 0) { - rho_Sdot = (rock_state.y(SEINT+1) - state.rhoe_orig) / state.time - state.ydot_a[SEINT]; + rho_Sdot = (state.y[SEINT] - state.rhoe_orig) / state.time - state.ydot_a[SEINT]; } state.y[SEDEN] += state.time * (state.ydot_a[SEDEN] + rho_Sdot); @@ -124,16 +118,16 @@ void actual_integrator (BurnT& state, Real dt) state.success = false; } - if (rock_state.y(SEINT+1) < 0.0_rt) { + if (state.y[SEINT] < 0.0_rt) { state.success = false; } - for (int n = 1; n <= NumSpec; ++n) { - if (rock_state.y(SFS+n) / state.y[SRHO] < -rock_failure_tolerance) { + for (int n = 0; n < NumSpec; ++n) { + if (state.y[SFS+n] / state.rho < -species_failure_tolerance) { state.success = false; } - if (rock_state.y(SFS+n) / state.y[SRHO] > 1.0_rt + rock_failure_tolerance) { + if (state.y[SFS+n] / state.rho > 1.0_rt + species_failure_tolerance) { state.success = false; } } @@ -145,8 +139,8 @@ void actual_integrator (BurnT& state, Real dt) std::cout << "integration summary: " << std::endl; std::cout << "dens: " << state.rho << " temp: " << state.T << std::endl; std::cout << " energy released: " << state.e << std::endl; - std::cout << "number of steps taken: " << rock_state.nsteps << std::endl; - std::cout << "number of f evaluations: " << rock_state.nfe << std::endl; + std::cout << "number of steps taken: " << state.n_step << std::endl; + std::cout << "number of f evaluations: " << state.n_rhs << std::endl; } #endif @@ -157,7 +151,7 @@ void actual_integrator (BurnT& state, Real dt) std::cout << Font::Bold << FGColor::Red << "[ERROR] integration failed in net" << ResetDisplay << std::endl; std::cout << "ierr = " << ierr << std::endl; std::cout << "zone = (" << state.i << ", " << state.j << ", " << state.k << ")" << std::endl; - std::cout << "time = " << rock_state.t << std::endl; + std::cout << "time = " << state.time << std::endl; std::cout << "dt = " << std::setprecision(16) << dt << std::endl; std::cout << "dens start = " << std::setprecision(16) << state.rho_orig << std::endl; std::cout << "temp start = " << std::setprecision(16) << T_in << std::endl; diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index 6162628fe8..0ce2e045c8 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -15,9 +15,12 @@ #include #include #include +#include +#include +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mdegre2(rock_t& rstate) +void mdegre2(RockT& rstate) { // this is the ROCK2 version @@ -48,8 +51,10 @@ void mdegre2(rock_t& rstate) return; } + +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mdegre4(rock_t& rstate) +void mdegre4(RockT& rstate) { // this is the ROCK4 version @@ -82,9 +87,9 @@ void mdegre4(rock_t& rstate) } -template +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real r2step (BurnT& state, rock_t& rstate) +Real r2step (BurnT& state, RockT& rstate) { // Solut. at t+h by an explicit (mdeg+2)-stages formula. @@ -179,9 +184,9 @@ Real r2step (BurnT& state, rock_t& rstate) return err; } -template +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -Real r4step (BurnT& state, rock_t& rstate) +Real r4step (BurnT& state, RockT& rstate) { // Solut. at t+h by an explicit (mdeg+4)-stages formula. @@ -339,9 +344,9 @@ Real r4step (BurnT& state, rock_t& rstate) } -template +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rockcore (BurnT& state, rock_t& rstate) +int rockcore (BurnT& state, RockT& rstate) { // Core integrator for ROCK4. @@ -399,9 +404,13 @@ int rockcore (BurnT& state, rock_t& rstate) // Spectral radius. if (nrho == 0) { - int ierr = rkcrho(state, rstate, rstate.tout, eigmax); - if (ierr != 0) { - return IERR_SPRAD_CONVERGENCE; + if (integrator_rp::use_circle_theorem) { + circle_theorem_sprad(rstate.t, state, rstate, eigmax); + } else { + int ierr = rkcrho(state, rstate, rstate.tout, eigmax); + if (ierr != 0) { + return IERR_SPRAD_CONVERGENCE; + } } rstate.max_rho = std::max(rstate.max_rho, static_cast(std::round(eigmax))); rstate.min_rho = std::min(rstate.min_rho, static_cast(std::round(eigmax))); @@ -544,9 +553,9 @@ int rockcore (BurnT& state, rock_t& rstate) } -template +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -int rock (BurnT& state, rock_t& rstate) +int rock (BurnT& state, RockT& rstate) { using namespace integrator_rp; @@ -564,9 +573,13 @@ int rock (BurnT& state, rock_t& rstate) rhs(rstate.t, state, rstate, rstate.fn); Real sprad{}; - int ierr = rkcrho(state, rstate, rstate.tout, sprad); - if (ierr != 0) { - return IERR_SPRAD_CONVERGENCE; + if (integrator_rp::use_circle_theorem) { + circle_theorem_sprad(rstate.t, state, rstate, sprad); + } else { + int ierr = rkcrho(state, rstate, rstate.tout, sprad); + if (ierr != 0) { + return IERR_SPRAD_CONVERGENCE; + } } //rstate.h = initial_dt(state, rstate, rstate.fn); @@ -592,7 +605,7 @@ int rock (BurnT& state, rock_t& rstate) // call the integrator - ierr = rockcore(state, rstate); + int ierr = rockcore(state, rstate); return ierr; } diff --git a/integration/ROCK/rock_type.H b/integration/ROCK/rock_type.H index 83a03d89c6..98ca1d56f5 100644 --- a/integration/ROCK/rock_type.H +++ b/integration/ROCK/rock_type.H @@ -9,22 +9,9 @@ #include -typedef amrex::Array1D RArray1D; - const amrex::Real UROUND = std::numeric_limits::epsilon(); -// We will use this parameter to determine if a given species abundance -// is unreasonably small or large (each X must satisfy -// -failure_tolerance <= X <= 1.0 + failure_tolerance). -const Real rock_failure_tolerance = 1.e-2_rt; - -enum rock_errors { - IERR_SUCCESS = 1, - IERR_BAD_INPUTS = -1, - IERR_DT_UNDERFLOW = -2, - IERR_SPRAD_CONVERGENCE = -3, - IERR_TOO_MANY_STEPS = -4}; - +template struct rock_t { // The initial point of the integration. @@ -37,7 +24,7 @@ struct rock_t { amrex::Real tout; // Integration array - RArray1D y; + Array1D y; // Tolerances amrex::Real rtol_spec, atol_spec; @@ -65,23 +52,23 @@ struct rock_t { amrex::Real hmax; - RArray1D yn; - RArray1D fn; - RArray1D yjm1; - RArray1D yjm2; + Array1D yn; + Array1D fn; + Array1D yjm1; + Array1D yjm2; // these 3 arrays are only needed for ROCK4 - RArray1D fnt; - RArray1D yjm3; - RArray1D yjm4; + Array1D fnt; + Array1D yjm3; + Array1D yjm4; // this is used by the spectral radius power method - RArray1D sprad; + Array1D sprad; // because our rhs wrapper requires that rock_t rstate.y() hold the state // that is used for evaluating the RHS, we need to create an additional // temporary to backup the contents of y - RArray1D y_backup; + Array1D y_backup; int mdeg; From 9a13e5c97d8ab3f9914fc6bb053fe858852702ae Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 3 Jul 2023 19:59:39 -0400 Subject: [PATCH 40/45] fix links --- sphinx_docs/source/refs.bib | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sphinx_docs/source/refs.bib b/sphinx_docs/source/refs.bib index 3dcfdeb17d..01d3e387ff 100644 --- a/sphinx_docs/source/refs.bib +++ b/sphinx_docs/source/refs.bib @@ -629,9 +629,6 @@ @article{rock4 number = {6}, pages = {2041-2054}, year = {2002}, -doi = {10.1137/S1064827500379549}, -URL = {https://doi.org/10.1137/S1064827500379549}, -eprint = {https://doi.org/10.1137/S1064827500379549} } @article{rock2, @@ -641,5 +638,4 @@ @article{rock2 year = {2001}, volume = {90}, pages = {1-18}, -URL = {https://doi.org/10.1007/s002110100292} } From b3983f2e1d60d71efa3133a97b5deffa05c0dcc7 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Thu, 6 Jul 2023 08:38:05 -0400 Subject: [PATCH 41/45] default to scaling --- integration/ROCK/_parameters | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/integration/ROCK/_parameters b/integration/ROCK/_parameters index fbf0baffb5..40328c3084 100644 --- a/integration/ROCK/_parameters +++ b/integration/ROCK/_parameters @@ -1,7 +1,12 @@ @namespace: integrator +# do we do the 2nd or 4th order version of the ROCK integrator rock_order integer 2 +# do we scale the ODE system we integrate to make it O(1)? +# for Strang, this simply means scaling e by the initial energy? +scale_system integer 1 100 + # use the Gershgorin circle theorem to estimate the spectral radius? # note: requires integrator.scale_system = 1 -use_circle_theorem integer 0 +use_circle_theorem integer 1 From 658fb04e22b69cc287dad2d5d0cbe964d4291a0b Mon Sep 17 00:00:00 2001 From: "Eric T. Johnson" Date: Tue, 11 Jul 2023 15:42:45 -0400 Subject: [PATCH 42/45] Add missing inline specifier to rock4_coeffs::recf --- integration/ROCK/rock4_coefficients.H | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/ROCK/rock4_coefficients.H b/integration/ROCK/rock4_coefficients.H index 21634961e3..85f7d2d582 100644 --- a/integration/ROCK/rock4_coefficients.H +++ b/integration/ROCK/rock4_coefficients.H @@ -231,7 +231,7 @@ namespace rock4_coeffs { // Recurrence parameters - AMREX_GPU_MANAGED amrex::Array1D recf{ + inline AMREX_GPU_MANAGED amrex::Array1D recf{ .1762962957651941e+00, .1067131485543800e+00, .1296319693918818e+00, .6097984609869632e-02, .7296375286357569e-01, .8749824867149327e-01, .6126949805354446e-02, .1026802330400501e+00, From 36d7abde0b644ab3f69b80a73237f43ac5398d55 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Wed, 12 Jul 2023 10:07:54 -0400 Subject: [PATCH 43/45] remove initial_timestep.H --- integration/ROCK/rock.H | 1 - 1 file changed, 1 deletion(-) diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index 0ce2e045c8..9c2179886b 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -11,7 +11,6 @@ #include #include #endif -#include #include #include #include From fe1874b12454279dbb185c29be3c380b6fdea446 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 5 Feb 2024 13:39:07 -0500 Subject: [PATCH 44/45] use amrex::Math::pow --- integration/ROCK/rock.H | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index 9c2179886b..c72473730a 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -175,7 +175,7 @@ Real r2step (BurnT& state, RockT& rstate) wt = rstate.rtol_enuc * std::abs(rstate.y(j)) + rstate.atol_enuc; } - err += std::pow(temp3 / wt, 2); + err += amrex::Math::powi<2>(temp3 / wt); } err = std::sqrt(err / static_cast(INT_NEQS)); @@ -330,11 +330,11 @@ Real r4step (BurnT& state, RockT& rstate) wt = rstate.rtol_enuc * std::abs(rstate.y(j)) + rstate.atol_enuc; } - err += std::pow((temp1 * rstate.yjm1(j) + - temp2 * rstate.yjm2(j) + - temp3 * rstate.yjm3(j) + - temp4 * rstate.yjm4(j) + - temp5 * rstate.fnt(j)) / wt, 2); + err += amrex::Math::powi<2>((temp1 * rstate.yjm1(j) + + temp2 * rstate.yjm2(j) + + temp3 * rstate.yjm3(j) + + temp4 * rstate.yjm4(j) + + temp5 * rstate.fnt(j)) / wt); } err = std::sqrt(err / static_cast(INT_NEQS)); @@ -420,7 +420,7 @@ int rockcore (BurnT& state, RockT& rstate) rstate.mdeg = static_cast(std::sqrt((1.5_rt + rstate.h * eigmax) / 0.811_rt)) + 1; if (rstate.mdeg > 200) { - rstate.h = 0.8_rt * (std::pow(200.0_rt, 2) * 0.811_rt - 1.5_rt) / eigmax; + rstate.h = 0.8_rt * (amrex::Math::powi<2>(200.0_rt) * 0.811_rt - 1.5_rt) / eigmax; rstate.mdeg = 200; last = false; } @@ -439,7 +439,7 @@ int rockcore (BurnT& state, RockT& rstate) rstate.mdeg = static_cast(std::sqrt((3.0_rt + rstate.h * eigmax) / 0.353_rt)) + 1; if (rstate.mdeg > 152) { - rstate.h = 0.8_rt * (std::pow(152.0_rt, 2) * 0.353_rt - 3.0_rt) / eigmax; + rstate.h = 0.8_rt * (amrex::Math::powi<2>(152.0_rt) * 0.353_rt - 3.0_rt) / eigmax; rstate.mdeg = 152; last = false; } @@ -472,10 +472,10 @@ int rockcore (BurnT& state, RockT& rstate) Real fac; if (rock_order == 2) { - fac = std::pow(1.0_rt / err, 0.5_rt); + fac = std::sqrt(1.0_rt / err); if (errp != 0.0_rt && ! reject) { - Real facp = std::pow(errp, 0.5_rt) * fac * fac * (rstate.h / hp); + Real facp = std::sqrt(errp) * fac * fac * (rstate.h / hp); fac = std::min(fac, facp); } From 74ccea0fd39861cbe7babb7810b5f65845325f4d Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Mon, 12 Feb 2024 13:44:46 -0500 Subject: [PATCH 45/45] some clang-tidy fixes --- integration/ROCK/actual_integrator.H | 10 +++++----- integration/ROCK/rock.H | 6 ++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/integration/ROCK/actual_integrator.H b/integration/ROCK/actual_integrator.H index 3f9b2c084b..98afc2305f 100644 --- a/integration/ROCK/actual_integrator.H +++ b/integration/ROCK/actual_integrator.H @@ -13,7 +13,7 @@ template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void actual_integrator (BurnT& state, Real dt) +void actual_integrator (BurnT& state, Real dt, bool is_retry=false) { using namespace integrator_rp; @@ -145,15 +145,15 @@ void actual_integrator (BurnT& state, Real dt) std::cout << "dt = " << std::setprecision(16) << dt << std::endl; std::cout << "temp start = " << std::setprecision(16) << T_in << std::endl; std::cout << "xn start = "; - for (int n = 0; n < NumSpec; ++n) { - std::cout << std::setprecision(16) << xn_in[n] << " "; + for (auto X : xn_in) { + std::cout << std::setprecision(16) << X << " "; } std::cout << std::endl; std::cout << "dens current = " << std::setprecision(16) << state.rho << std::endl; std::cout << "temp current = " << std::setprecision(16) << state.T << std::endl; std::cout << "xn current = "; - for (int n = 0; n < NumSpec; ++n) { - std::cout << std::setprecision(16) << state.xn[n] << " "; + for (auto X : state.xn) { + std::cout << std::setprecision(16) << X << " "; } std::cout << std::endl; std::cout << "energy generated = " << state.e << std::endl; diff --git a/integration/ROCK/rock.H b/integration/ROCK/rock.H index c72473730a..664376f3be 100644 --- a/integration/ROCK/rock.H +++ b/integration/ROCK/rock.H @@ -47,7 +47,6 @@ void mdegre2(RockT& rstate) } rstate.mp(2) += ms(i)*2 - 1; } - return; } @@ -82,7 +81,6 @@ void mdegre4(RockT& rstate) } rstate.mp(2) += ms(i)*2 - 1; } - return; } @@ -545,7 +543,7 @@ int rockcore (BurnT& state, RockT& rstate) } else { nrho = 1; } - continue; + } return IERR_TOO_MANY_STEPS; @@ -590,7 +588,7 @@ int rock (BurnT& state, RockT& rstate) bool valid = true; if ((rtol_spec > rmax) || (rtol_enuc > rmax) || - (rtol_spec < rmin) || (rtol_spec < rmin)) { + (rtol_spec < rmin) || (rtol_enuc < rmin)) { valid = false; }