/* This file is part of Lemma, a geophysical modelling and inversion API */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** @file @author Trevor Irons @date 06/26/2009 @version $Id: hankeltransformhankel2.cpp 202 2015-01-06 20:53:21Z tirons $ **/ #include "FHTAnderson801.h" namespace Lemma { std::ostream &operator << (std::ostream &stream, const FHTAnderson801 &ob) { stream << ob.Serialize() << "\n"; return stream; } // Initialise static const members, this could be done by preprocessor in // slightly higher precision? const Eigen::Matrix FHTAnderson801::FilterWeights = ( Eigen::Matrix() << 2.103562053838982e-29, -1.264469361608894e-14, 4.615731256788567e-14, -2.798703374257668e-14, 5.465764965410841e-14, -2.652933109928729e-14, 5.674913434067321e-14, -2.157276828977208e-14, 5.831846086773976e-14, -1.546589284868783e-14, 6.057302455652974e-14, -8.502531259083065e-15, 6.388018061147645e-14, -5.659657635010288e-16, 6.848500604791407e-14, 8.572897732168277e-15, 7.465068154681814e-14, 1.920837293261338e-14, 8.269345428975771e-14, 3.170116562922900e-14, 9.300004039695208e-14, 4.649069639417992e-14, 1.060441944490564e-13, 6.411216589597457e-14, 1.224060834001701e-13, 8.521776751507022e-14, 1.427957940487172e-13, 1.106026606968463e-13, 1.680820203098405e-13, 1.412367028159546e-13, 1.993271011776308e-13, 1.783032042964119e-13, 2.378298196799422e-13, 2.232462602765097e-13, 2.851776817107034e-13, 2.778285575785995e-13, 3.433107735233557e-13, 3.442019764139949e-13, 4.145997612327839e-13, 4.249938198224969e-13, 5.019411631949951e-13, 5.234121310773422e-13, 6.088737193247560e-13, 6.433743253810275e-13, 7.397205280796933e-13, 7.896642978865920e-13, 8.997626559623209e-13, 9.681243129571424e-13, 1.095451187471558e-12, 1.185889375491455e-12, 1.334666226164323e-12, 1.451673490118585e-12, 1.627033241780647e-12, 1.776119296526221e-12, 1.984309459865773e-12, 2.172225112712636e-12, 2.420855801356264e-12, 2.655866524621122e-12, 2.954213313000758e-12, 3.246433455110429e-12, 3.605807223054322e-12, 3.967608279821300e-12, 4.401806878720721e-12, 4.848316218220904e-12, 5.374176077884770e-12, 5.923886142128417e-12, 6.561955948855011e-12, 7.237468388830243e-12, 8.012831864792648e-12, 8.841766480402105e-12, 9.785047278800097e-12, 1.080115224902499e-11, 1.194974128877562e-11, 1.319424925552153e-11, 1.459380374689331e-11, 1.611708818260074e-11, 1.782336249944076e-11, 1.968696083966218e-11, 2.176804271234846e-11, 2.404712745375440e-11, 2.658616922424555e-11, 2.937256616666064e-11, 3.247112071587450e-11, 3.587699548548411e-11, 3.965909071112399e-11, 4.382145152220635e-11, 4.843856688602439e-11, 5.352476425684008e-11, 5.916190912377549e-11, 6.537635327328955e-11, 7.225949098391667e-11, 7.985185650562155e-11, 8.825697213255412e-11, 9.753221923111176e-11, 1.077963949370144e-10, 1.191270094182892e-10, 1.316619519054340e-10, 1.455028951566729e-10, 1.608114581091983e-10, 1.777184270673645e-10, 1.964147916871289e-10, 2.170665216346822e-10, 2.399008451839042e-10, 2.651263504640323e-10, 2.930148720448538e-10, 3.238267179640594e-10, 3.578885297833856e-10, 3.955234710219298e-10, 4.371254308993604e-10, 4.830940473937580e-10, 5.339056350072159e-10, 5.900529573690070e-10, 6.521132758098962e-10, 7.206928333934838e-10, 7.964924450372341e-10, 8.802567084675067e-10, 9.728375895186283e-10, 1.075148437456224e-09, 1.188226062693121e-09, 1.313189706258061e-09, 1.451302163665563e-09, 1.603933943511600e-09, 1.772624063293560e-09, 1.959049733219870e-09, 2.165087540667258e-09, 2.392789115986871e-09, 2.644443536014764e-09, 2.922559573439235e-09, 3.229930291248597e-09, 3.569622651576204e-09, 3.945045448172924e-09, 4.359947261255963e-09, 4.818489091363688e-09, 5.325251901762953e-09, 5.885315583343685e-09, 6.504277635547376e-09, 7.188340419242570e-09, 7.944342903082902e-09, 8.779858562959109e-09, 9.703242578022093e-09, 1.072374322768940e-08, 1.185156747840095e-08, 1.309800933225301e-08, 1.447553742402158e-08, 1.599794451372024e-08, 1.768046154055318e-08, 1.953993335487118e-08, 2.159496468450500e-08, 2.386612830616206e-08, 2.637614961034523e-08, 2.915015476269831e-08, 3.221590205565798e-08, 3.560407926098509e-08, 3.934859178954436e-08, 4.348692045365787e-08, 4.806047869438007e-08, 5.311504443749314e-08, 5.870120138001748e-08, 6.487486163571268e-08, 7.169780940885934e-08, 7.923833480505012e-08, 8.757190229426675e-08, 9.678192055835553e-08, 1.069605631204864e-07, 1.182097045925483e-07, 1.306419269237675e-07, 1.443816591198488e-07, 1.595664099835792e-07, 1.763481565722233e-07, 1.948948533650376e-07, 2.153921247351847e-07, 2.380451115468297e-07, 2.630805351444854e-07, 2.907489558998551e-07, 3.213272911558462e-07, 3.551215767529809e-07, 3.924700396067688e-07, 4.337464734078393e-07, 4.793639887921159e-07, 5.297791390370199e-07, 5.854964979982190e-07, 6.470737017046583e-07, 7.151270374758372e-07, 7.903376040582035e-07, 8.734581359370587e-07, 9.653205295304359e-07, 1.066844176299330e-06, 1.179045157323447e-06, 1.303046419382764e-06, 1.440089007182073e-06, 1.591544490556806e-06, 1.758928685376697e-06, 1.943916830388476e-06, 2.148360347694608e-06, 2.374305378111399e-06, 2.624013254094558e-06, 2.899983137292810e-06, 3.204977025773239e-06, 3.542047402097807e-06, 3.914567778667102e-06, // 200 4.326266465748067e-06, 4.781263881007758e-06, 5.284113792545945e-06, 5.839848890150422e-06, 6.454031158395685e-06, 7.132807538712648e-06, 7.882971454044484e-06, 8.712030795792633e-06, 9.628283069078871e-06, 1.064089843325841e-05, 1.176001148348469e-05, 1.299682267761921e-05, 1.436371043746991e-05, 1.587435503282041e-05, 1.754387550120777e-05, 1.938898096105121e-05, 2.142813784487508e-05, 2.368175471430264e-05, 2.617238651818130e-05, 2.892496032668667e-05, 3.196702481167932e-05, 3.532902595927333e-05, 3.904461178455365e-05, 4.315096908756330e-05, 4.768919563102351e-05, 5.270471145419851e-05, 5.824771344935570e-05, 6.437367773954276e-05, 7.114391489568718e-05, 7.862618353777022e-05, 8.689536847209423e-05, 9.603423013681158e-05, 1.061342328695059e-04, 1.172964602657162e-04, 1.296326268075215e-04, 1.432661958546299e-04, 1.583336152150400e-04, 1.749856826064412e-04, 1.933890547221590e-04, 2.137279149064782e-04, 2.362058162174614e-04, 2.610477181410775e-04, 2.885022375064333e-04, 3.188441357870562e-04, 3.523770680013592e-04, 3.894366200728159e-04, 4.303936656695837e-04, 4.756580748770003e-04, 5.256828130316798e-04, 5.809684683619367e-04, 6.420682561143772e-04, 7.095935446942389e-04, 7.842199637491256e-04, 8.666941465924691e-04, 9.578411834759010e-04, 1.058572843543458e-03, 1.169896665384001e-03, 1.292925974983324e-03, 1.428890965739396e-03, 1.579150889627630e-03, 1.745207548623177e-03, 1.928720102656342e-03, 2.131521473093367e-03, 2.355636277673631e-03, 2.603300731229735e-03, 2.876984272542283e-03, 3.179413630050106e-03, 3.513598723334281e-03, 3.882861625673649e-03, 4.290867254031690e-03, 4.741657973486860e-03, 5.239689338467119e-03, 5.789870985188969e-03, 6.397607072000340e-03, 7.068843783102744e-03, 7.810112796625723e-03, 8.628584975720666e-03, 9.532112534855741e-03, 1.052928697105230e-02, 1.162947042684567e-02, 1.284285301027502e-02, 1.418045400408490e-02, 1.565416842684913e-02, 1.727670025860997e-02, 1.906157878467033e-02, 2.102295173845023e-02, 2.317553622087861e-02, 2.553413681316817e-02, 2.811347056705691e-02, 3.092716134472897e-02, 3.398734108220733e-02, 3.730266904318316e-02, 4.087756584601726e-02, 4.470845458227711e-02, 4.878245655564208e-02, 5.307046388837388e-02, 5.752521479656082e-02, 6.206888924914453e-02, 6.659098690582325e-02, 7.092687097703928e-02, 7.485762155329997e-02, 7.807466421172765e-02, 8.018887211338042e-02, 8.067640670918657e-02, 7.891767306422777e-02, 7.412406301630496e-02, 6.545864753141331e-02, 5.195771725733346e-02, 3.284797274184859e-02, 7.497076325831270e-03, -2.386612869894549e-02, -6.017494378476118e-02, -9.817899798850670e-02, -1.328147797272611e-01, -1.554628569772562e-01, -1.563982157987450e-01, -1.243049866529050e-01, -5.486815986343697e-02, 4.686255899170307e-02, 1.511218295806206e-01, 2.119315534410599e-01, 1.695134135887796e-01, 1.386197420331480e-02, -1.869350451838135e-01, -2.455889606925336e-01, -5.309269401899814e-02, 2.519998415798595e-01, 1.968224876057428e-01, -2.014333618969160e-01, -2.458450827258603e-01, 3.433559314076636e-01, -4.770066510626292e-02, -2.096628473507452e-01, 2.509085123794248e-01, -1.676412661335192e-01, 7.495199786896762e-02, -1.695135102751146e-02, -8.828524201374996e-03, 1.616787356183550e-02, -1.556411755992529e-02, 1.251311125216370e-02, -9.299315246978098e-03, 6.650525996779493e-03, -4.667707408671884e-03, 3.248885545556855e-03, -2.255529108544675e-03, 1.566875211100915e-03, -1.091132486368091e-03, 7.625383049040949e-04, -5.352540577820408e-04, 3.777104567214670e-04, -2.682528211535297e-04, 1.920265274996755e-04, -1.388213723208944e-04, 1.015998917810005e-04, -7.549725062631259e-05, 5.714172920052936e-05, -4.419160967680634e-05, 3.501776199578583e-05, -2.848496954139990e-05, 2.380104817324115e-05, -2.041274924032166e-05, 1.793363489791860e-05, -1.609367780777977e-05, 1.470394692017765e-05, -1.363208540087839e-05, 1.278540851480116e-05, -1.209910323276592e-05, 1.152780746372085e-05, -1.103964249967709e-05, 1.061214724478712e-05, -1.022954672255804e-05, 9.880801917269063e-06, -9.558136268373164e-06, 9.255989462874843e-06, -8.970368039834961e-06, 8.698439226217636e-06, -8.438199899378174e-06, 8.188185039708096e-06, -7.947275976752668e-06, 7.714620489277084e-06, -7.489590334670121e-06, 7.271712845563131e-06, -7.060595202720040e-06, 6.855890958634290e-06, -6.657307826365352e-06, 6.464610635947412e-06, -6.277596705248834e-06, 6.096069004564178e-06, -5.919835014912806e-06, 5.748721389173238e-06, -5.582576428368341e-06, 5.421255729073172e-06, -5.264611483233620e-06, 5.112497827757443e-06, -4.964780650195476e-06, 4.821336526159266e-06, -4.682043530422997e-06, 4.546777587820041e-06, -4.415418000076004e-06, // 400 4.287852503112911e-06, -4.163974668109847e-06, 4.043678407829827e-06, -3.926857526517075e-06, 3.813409851360361e-06, -3.703239239834851e-06, 3.596252927182967e-06, -3.492358600906126e-06, 3.391465179914198e-06, -3.293485431241940e-06, 3.198336356446399e-06, -3.105937110348406e-06, 3.016207679069661e-06, -2.929069911562291e-06, 2.844448954094881e-06, -2.762272935820411e-06, 2.682471568415877e-06, -2.604975709140556e-06, 2.529718233664062e-06, -2.456634690985054e-06, 2.385662793855871e-06, -2.316741584624232e-06, 2.249811415880699e-06, -2.184814552602377e-06, 2.121695378987067e-06, -2.060399926949900e-06, 2.000875435893980e-06, -1.943070483347481e-06, 1.886935339579619e-06, -1.832421953831803e-06, 1.779483599068986e-06, -1.728074671861562e-06, 1.678150840818710e-06, -1.629669220867866e-06, 1.582588274939725e-06, -1.536867577717458e-06, 1.492467744182388e-06, -1.449350544031671e-06, 1.407478963215944e-06, -1.366817091697906e-06, 1.327329980403758e-06, -1.288983628354532e-06, 1.251745052743577e-06, -1.215582289623042e-06, 1.180464297731392e-06, -1.146360878232118e-06, 1.113242681755176e-06, -1.081081241360643e-06, 1.049848946307979e-06, -1.019518969919736e-06, 9.900652269648073e-07, -9.614623823829486e-07, 9.336858590396268e-07, -9.067118039187765e-07, 8.805170379415897e-07, -8.550790335506564e-07, 8.303759185665738e-07, -8.063864695073603e-07, 7.830900795968434e-07, -7.604667251660013e-07, 7.384969528074763e-07, -7.171618775580271e-07, 6.964431695613518e-07, -6.763230273695452e-07, 6.567841555251206e-07, -6.378097555683096e-07, 6.193835199757372e-07, -6.014896169720738e-07, 5.841126695566173e-07, -5.672377400509635e-07, 5.508503223216395e-07, -5.349363333399711e-07, 5.194820986824491e-07, -5.044743364413132e-07, 4.899001458890472e-07, -4.757469999761242e-07, 4.620027360551677e-07, -4.486555431391317e-07, 4.356939495368206e-07, -4.231068139067277e-07, 4.108833178901058e-07, -3.990129570237777e-07, 3.874855299952715e-07, -3.762911289578004e-07, 3.654201320223786e-07, -3.548631961765860e-07, 3.446112489455190e-07, -3.346554794873414e-07, 3.249873307934947e-07, -3.155984931421240e-07, 3.064808974928670e-07, -2.976267081233949e-07, 2.890283152696976e-07, -2.806783286653362e-07, 2.725695717362821e-07, -2.646950756050221e-07, 2.570480727284082e-07, -2.496219907786807e-07, 2.424104471687142e-07, -2.354072438896643e-07, 2.286063621819694e-07, -2.220019570969968e-07, 2.155883523600859e-07, -2.093600356601861e-07, 2.033116540781646e-07, -1.974380094205501e-07, 1.917340535876188e-07, -1.861948842172547e-07, 1.808157405985162e-07, -1.755919996494557e-07, 1.705191718700136e-07, -1.655928973946416e-07, 1.608089422670497e-07, -1.561631948835526e-07, 1.516516624771349e-07, -1.472704676262496e-07, 1.430158448819191e-07, -1.388841375627619e-07, 1.348717946589134e-07, -1.309753677747614e-07, 1.271915081246862e-07, -1.235169636417206e-07, 1.199485762099940e-07, -1.164832789732080e-07, 1.131180936862105e-07, -1.098501281312535e-07, 1.066765736321394e-07, -1.035947026599537e-07, 1.006018664975167e-07, -9.769549295058651e-08, 9.487308412474974e-08, -9.213221428331440e-08, 8.947052777472484e-08, -8.688573700943115e-08, 8.437562048443172e-08, -8.193802086874367e-08, 7.957084315467929e-08, -7.727205286392824e-08, 7.503967429747869e-08, -7.287178883148888e-08, 7.076653326692979e-08, -6.872209823264986e-08, 6.673672663335082e-08, -6.480871213716780e-08, 6.293639770567428e-08, -6.111817417008917e-08, 5.935247885127626e-08, -5.763779421770836e-08, 5.597264657919956e-08, -5.435560481863042e-08, 5.278527916288309e-08, -5.126031999018991e-08, 4.977941667022704e-08, -4.834129643623350e-08, 4.694472329047102e-08, -4.558849694284832e-08, 4.427145178025873e-08, -4.299245586445184e-08, 4.175040995827635e-08, -4.054424658081963e-08, 3.937292909065092e-08, -3.823545079527342e-08, 3.713083408552377e-08, -3.605812959486601e-08, 3.501641538356351e-08, -3.400479614676831e-08, 3.302240244515663e-08, -3.206838995736202e-08, 3.114193875409117e-08, -3.024225259359901e-08, 2.936855823761587e-08, -2.852010478676213e-08, 2.769616303496246e-08, -2.689602484264953e-08, 2.611900252829978e-08, -2.536442827753140e-08, 2.463165356908288e-08, -2.392004861730570e-08, 2.322900183088905e-08, -2.255791928733344e-08, 2.190622422255186e-08, -2.127335653510145e-08, 2.065877230473273e-08, -2.006194332493974e-08, 1.948235664905881e-08, -1.891951414942437e-08, 1.837293208920017e-08, -1.784214070660012e-08, 1.732668381117887e-08, -1.682611839179446e-08, 1.634001423585344e-08, -1.586795355952947e-08, 1.540953064868929e-08, -1.496435151022419e-08, 1.453203353344868e-08, -1.411220516125227e-08, 1.370450557074419e-08, -1.330858436314438e-08, 1.292410126264865e-08, -1.255072582398340e-08, // 600 1.218813714839246e-08, -1.183602360782992e-08, 1.149408257713515e-08, -1.116202017395058e-08, 1.083955100614394e-08, -1.052639792651900e-08, 1.022229179461678e-08, -9.926971245406734e-09, 9.640182464660921e-09, -9.361678970810806e-09, 9.091221403102823e-09, -8.828577315878212e-09, 8.573520978800615e-09, -8.325833182853652e-09, 8.085301051938885e-09, -7.851717859915976e-09, 7.624882852931747e-09, -7.404601076884107e-09, 7.190683209868762e-09, -6.982945399464102e-09, 6.781209104717332e-09, -6.585300942697731e-09, 6.395052539483568e-09, -6.210300385452473e-09, 6.030885694751333e-09, -5.856654268826800e-09, 5.687456363899640e-09, -5.523146562267662e-09, 5.363583647325650e-09, -5.208630482195534e-09, 5.058153891863612e-09, -4.912024548723426e-09, 4.770116861425010e-09, -4.632308866934630e-09, 4.498482125712853e-09, -4.368521619921419e-09, 4.242315654571151e-09, -4.119755761525383e-09, 4.000736606276379e-09, -3.885155897415073e-09, 3.772914298716528e-09, -3.663915343765296e-09, 3.558065353046999e-09, -3.455273353434971e-09, 3.355451000003056e-09, -3.258512500097394e-09, 3.164374539601736e-09, -3.072956211332787e-09, 2.984178945504153e-09, -2.897966442199276e-09, 2.814244605795313e-09, -2.732941481281439e-09, 2.653987192416816e-09, -2.577313881675167e-09, 2.502855651924429e-09, -2.430548509791296e-09, 2.360330310661908e-09, -2.292140705271406e-09, 2.225921087836540e-09, -2.161614545686758e-09, 2.099165810350450e-09, -2.038521210054267e-09, 1.979628623594711e-09, -1.922437435542387e-09, 1.866898492740427e-09, -1.812964062059653e-09, 1.760587789374176e-09, -1.709724659722168e-09, 1.660330958617607e-09, -1.612364234479730e-09, 1.565783262147887e-09, -1.520548007450427e-09, 1.476619592797189e-09, -1.433960263766035e-09, 1.392533356654690e-09, -1.352303266970005e-09, 1.313235418827548e-09, -1.275296235235242e-09, 1.238453109235514e-09, -1.202674375881138e-09, 1.167929285020692e-09, -1.134187974870230e-09, 1.101421446348478e-09, -1.069601538153474e-09, 1.038700902559248e-09, -1.008692981911727e-09, 9.795519858036667e-10, -9.512528689090021e-10, 9.237713094575600e-10, -8.970836883316330e-10, 8.711670687664494e-10, -8.459991766370928e-10, 8.215583813149323e-10, -7.978236770771082e-10, 7.747746650530930e-10, -7.523915356928136e-10, 7.306550517412669e-10, -7.095465317049981e-10, 6.890478337962292e-10, -6.691413403408390e-10, 6.498099426367938e-10, -6.310370262500165e-10, 6.128064567350563e-10, -5.951025657682865e-10, 5.779101376817111e-10, -5.612143963858077e-10, 5.450009926701687e-10, -5.292559918710250e-10, 5.139658618950525e-10, -4.991174615891697e-10, 4.846980294463296e-10, -4.706951726376001e-10, 4.570968563611062e-10, -4.438913934986793e-10, 4.310674345713248e-10, -4.186139579848742e-10, 4.065202605574395e-10, -3.947759483205284e-10, 3.833709275859127e-10, -3.722953962705749e-10, 3.615398354722752e-10, -3.510950012884991e-10, 3.409519168717552e-10, -3.311018647143929e-10, 3.215363791563124e-10, -3.122472391091240e-10, 3.032264609905071e-10, -2.944662918626933e-10, 2.859592027691788e-10, -2.776978822639370e-10, 2.696752301275724e-10, -2.618843512650130e-10, 2.543185497794985e-10, -2.469713232177689e-10, 2.398363569815098e-10, -2.329075189002498e-10, 2.261788539610461e-10, -2.196445791904288e-10, 2.132990786842053e-10, -2.071368987808525e-10, 2.011527433743496e-10, -1.953414693624216e-10, 1.896980822262837e-10, -1.842177317380848e-10, 1.788957077923634e-10, -1.737274363579317e-10, 1.687084755467094e-10, -1.638345117961281e-10, 1.591013561618254e-10, -1.545049407174433e-10, 1.500413150584345e-10, -1.457066429068751e-10, 1.414971988143619e-10, -1.374093649601637e-10, 1.334396280418735e-10, -1.295845762558885e-10, 1.258408963651246e-10, -1.222053708514437e-10, 1.186748751503467e-10, -1.152463749655566e-10, 1.119169236611821e-10, -1.086836597292220e-10, 1.055438043302322e-10, -1.024946589050432e-10, 9.953360285547502e-11, -9.665809129205519e-11, 9.386565284680683e-11, -9.115388754922578e-11, 8.852046476362457e-11, -8.596312118607507e-11, 8.347965889923978e-11, -8.106794348344660e-11, 7.872590218244558e-11, -7.645152212241484e-11, 7.424284858301879e-11, -7.209798331980772e-11, 7.001508293831718e-11, -6.799235732265070e-11, 6.602806812690510e-11, -6.412052735069306e-11, 6.226809604991307e-11, -6.046918330329692e-11, 5.872224571634798e-11, -5.702578811834639e-11, 5.537836697680089e-11, -5.377860007122251e-11, 5.222519065363231e-11, -5.071698520520750e-11, 4.925310917157278e-11, -4.783328375532226e-11, 4.645856316442775e-11, -4.513304831495452e-11, 4.386786828115582e-11, -4.269042848860555e-11, 4.166589074066043e-11, -4.094706131972530e-11, 4.089025606285087e-11, -4.232439520086882e-11, 4.717597028661840e-11, -5.992051472297203e-11, // 800 9.095360729014628e-11, // J1 filter coeffs -2.377900110058238e-29, 7.972119293423644e-28, 3.832566186338494e-28, 8.493403321392027e-28, 8.232164371695149e-28, 1.100368717019849e-27, 1.325428732821688e-27, 1.592246428628784e-27, 1.998601965098251e-27, 2.368546581454427e-27, 2.979879339217500e-27, 3.543101964370716e-27, 4.425741130789444e-27, 5.318079447058835e-27, 6.555619006665152e-27, 7.994776219905923e-27, 9.707158322300619e-27, 1.200497993577129e-26, 1.440665350963159e-26, 1.797046711269925e-26, 2.145390397713542e-26, 2.681614737113612e-26, 3.203783629081399e-26, 3.992219752668547e-26, 4.793780377063212e-26, 5.935124745092138e-26, 7.177334354418767e-26, 8.825226769587027e-26, 1.073646008000832e-25, 1.313923424181352e-25, 1.603838995307793e-25, 1.958633055912045e-25, 2.393489595056268e-25, 2.921690713642289e-25, 3.570455561097498e-25, 4.359157800465477e-25, 5.325840709133780e-25, 6.503774912184682e-25, 7.944611784834684e-25, 9.702980761516990e-25, 1.185162186264197e-24, 1.447534903673577e-24, 1.768047044621983e-24, 2.159464672432506e-24, 2.637627922624120e-24, 3.221525590342443e-24, 3.934898912364447e-24, 4.805930563105760e-24, 5.870195744781909e-24, 7.169601400607034e-24, 8.757287433857846e-24, 1.069583032926807e-23, 1.306426797568440e-23, 1.595639689868334e-23, 1.948949017485241e-23, 2.380425857645875e-23, 2.907479573699533e-23, 3.551187751264232e-23, 4.337441481530691e-23, 5.297756660121858e-23, 6.470696377141974e-23, 7.903329008477021e-23, 9.653141660115531e-23, 1.179038165380973e-22, 1.440079827014168e-22, 1.758917653247009e-22, 2.148347376559587e-22, 2.623996157283884e-22, 3.204958075285148e-22, 3.914542160210567e-22, 4.781235486108842e-22, 5.839810952393910e-22, 7.132764830587759e-22, 8.711974589175415e-22, 1.064083434862305e-21, 1.299673924385260e-21, 1.587425911126261e-21, 1.938885693339251e-21, 2.368161151141687e-21, 2.892477586360832e-21, 3.532881273577120e-21, 4.315069519949315e-21, 5.270439518682773e-21, 6.437327295395713e-21, 7.862571844418139e-21, 9.603363814287760e-21, 1.172957893208765e-20, 1.432653521781635e-20, 1.749847566646075e-20, 2.137267893871469e-20, 2.610465830070486e-20, 3.188429016442547e-20, 3.894357412134842e-20, 4.756577134959383e-20, 5.809698595129943e-20, 7.095979207053098e-20, 8.667051908059619e-20, 1.058595695124327e-19, 1.292972220966051e-19, 1.579239186764568e-19, 1.928887914036691e-19, 2.355947994119052e-19, 2.877562665708650e-19, 3.514661357021616e-19, 4.292819113549590e-19, 5.243258540458620e-19, 6.404133671732880e-19, 7.822022466379286e-19, 9.553844929891425e-19, 1.166908611051965e-18, 1.425266206309626e-18, 1.740823055783105e-18, 2.126247365091890e-18, 2.597002781312310e-18, 3.171988392298073e-18, 3.874272813855638e-18, 4.732050718776532e-18, 5.779735750225090e-18, 7.059390282316958e-18, 8.622352349869446e-18, 1.053137301019041e-17, 1.286303788941302e-17, 1.571096273151045e-17, 1.918939713846172e-17, 2.343800282007509e-17, 2.862721583723883e-17, 3.496539240998871e-17, 4.270678642844850e-17, 5.216223744747131e-17, 6.371103687921334e-17, 7.781691646330707e-17, 9.504569536565720e-17, 1.160892016025935e-16, 1.417915110596655e-16, 1.731847439832610e-16, 2.115280706868521e-16, 2.583612876753947e-16, 3.155627883343085e-16, 3.854297646671823e-16, 4.707643426724462e-16, 5.749936655677889e-16, 7.022978436839158e-16, 8.577897883808816e-16, 1.047705221625211e-15, 1.279672050432180e-15, 1.562992451553929e-15, 1.909046462722709e-15, 2.331710624424154e-15, 2.847962809294981e-15, 3.478503311969800e-15, 4.248661490032314e-15, 5.189316858234294e-15, 6.338258511920505e-15, 7.741550588468052e-15, 9.455571172640662e-15, 1.154903563040828e-14, 1.410605553114248e-14, 1.722913542283047e-14, 2.104376349301754e-14, 2.570284789891445e-14, 3.139360843035402e-14, 3.834414037586157e-14, 4.683376407804295e-14, 5.720273100006960e-14, 6.986777175159004e-14, 8.533643955954289e-14, 1.042304766775628e-13, 1.273069965554705e-13, 1.554936139359936e-13, 1.899197032959808e-13, 2.319692366825060e-13, 2.833268748946759e-13, 3.460574729307441e-13, 4.226739834760657e-13, 5.162571427996572e-13, 6.305554147709428e-13, 7.701652476024983e-13, 9.406780256740293e-13, 1.148951682734905e-12, 1.403326528650366e-12, 1.714034726435434e-12, 2.093516885212530e-12, 2.557039701256063e-12, 3.123159736572392e-12, 3.814655555107956e-12, 4.659206104975550e-12, 5.690798281976283e-12, 6.950717591317659e-12, 8.489674870123959e-12, 1.036925035218241e-11, 1.266510893213373e-11, 1.546910089464080e-11, 1.889412592258518e-11, 2.307718220992490e-11, 2.818672942203327e-11, 3.442710316037366e-11, 4.204966817018048e-11, 5.135919134271227e-11, 6.273074786797763e-11, 7.661889201263122e-11, // 200 9.358330171196327e-11, 1.143019267753882e-10, 1.396099167826153e-10, 1.705183920059801e-10, 2.082735788845278e-10, 2.543834767842491e-10, 3.107077590612055e-10, 3.794954396016648e-10, 4.635216515055463e-10, 5.661404892806104e-10, 6.914932735763221e-10, 8.445820788220271e-10, 1.031587101304291e-09, 1.259967952077770e-09, 1.538947681019300e-09, 1.879650592174711e-09, 2.295841053082368e-09, 2.804108039269473e-09, 3.424993797807946e-09, 4.183235823312564e-09, 5.109492567813164e-09, 6.240651650854630e-09, 7.622470723630660e-09, 9.309953703014609e-09, 1.137139562283767e-08, 1.388881160360346e-08, 1.696413754044688e-08, 2.071966056701105e-08, 2.530753298545001e-08, 3.091008276019684e-08, 3.775442398336976e-08, 4.611239491146397e-08, 5.632301501798812e-08, 6.879156104001002e-08, 8.402411522137500e-08, 1.026248703632157e-07, 1.253493263032310e-07, 1.530981849317344e-07, 1.869993328577540e-07, 2.283954331971998e-07, 2.789703820965002e-07, 3.407255717347445e-07, 4.161751163160901e-07, 5.083021657140526e-07, 6.208605585127383e-07, 7.582965471628845e-07, 9.262152932479593e-07, 1.131243348429578e-06, 1.381750677989317e-06, 1.687612654971312e-06, 2.061328504830195e-06, 2.517614221705925e-06, 3.075136493715169e-06, 3.755823026355034e-06, 4.587552788474290e-06, 5.602996673366901e-06, 6.843794758360242e-06, 8.358620144706847e-06, 1.020967008292656e-05, 1.246945025422475e-05, 1.523086887102219e-05, 1.860192083272764e-05, 2.272139580071132e-05, 2.775012613215501e-05, 3.389544779882663e-05, 4.139684113647092e-05, 5.056404631634212e-05, 6.175357572143610e-05, 7.542814171915086e-05, 9.211833800758343e-05, 1.125153468149895e-04, 1.374085645976000e-04, 1.678302935465055e-04, 2.049544027080777e-04, 2.503222397064943e-04, 3.056782429102864e-04, 3.733227575027256e-04, 4.558456931739724e-04, 5.566775872841220e-04, 6.796584276296773e-04, 8.298982533418059e-04, 1.013079388381259e-03, 1.236799879071809e-03, 1.509444128879166e-03, 1.842278291863989e-03, 2.247620855799141e-03, 2.742106207595588e-03, 3.343716405309918e-03, 4.076852784788600e-03, 4.967507347193811e-03, 6.051117627655160e-03, 7.364681573940744e-03, 8.958863753805689e-03, 1.088505212285743e-02, 1.321388763870185e-02, 1.601387913655473e-02, 1.937949548174205e-02, 2.339556612555552e-02, 2.817934173583488e-02, 3.382079060619734e-02, 4.044464120111045e-02, 4.810974644754662e-02, 5.689934182811928e-02, 6.675168423575902e-02, 7.759114407311523e-02, 8.904761297446566e-02, 1.006540591855666e-01, 1.114010542073269e-01, 1.200693293287907e-01, 1.245859746888521e-01, 1.226876554954843e-01, 1.111594205067191e-01, 8.731995478664586e-02, 4.846500030224664e-02, -4.956156637375708e-03, -6.947108182097863e-02, -1.335126953345830e-01, -1.795750728565332e-01, -1.819110629504884e-01, -1.209847646201776e-01, 5.791427226916448e-03, 1.534812881363312e-01, 2.352209731069856e-01, 1.515040026640386e-01, -8.279085782145131e-02, -2.711543104015952e-01, -1.331279806376289e-01, 2.242058279665979e-01, 2.304292248782090e-01, -2.572813803130152e-01, -1.475549438192476e-01, 3.611935526731244e-01, -2.435371552288723e-01, 3.811454725614711e-02, 8.273650321459338e-02, -1.091467781119748e-01, 8.964328522861212e-02, -6.097788815932206e-02, 3.780123181837066e-02, -2.243862121105374e-02, 1.315627818991557e-02, -7.789693311677149e-03, 4.737032461705975e-03, -2.996529369596568e-03, 1.987854486046977e-03, -1.386982713556120e-03, 1.015740041573320e-03, -7.763183089745113e-04, 6.146040263274792e-04, -5.002069052247894e-04, 4.157061680153099e-04, -3.508644775971589e-04, 2.994936403367197e-04, -2.577357341490762e-04, 2.231048844827660e-04, -1.939428674265101e-04, 1.691035669098717e-04, -1.477663053511028e-04, 1.293230643516167e-04, -1.133088634015300e-04, 9.935787087369453e-05, -8.717517169548774e-05, 7.651820346514748e-05, -6.718422692060818e-05, 5.900162548547053e-05, -5.182370043717230e-05, 4.552413144789780e-05, -3.999355821930881e-05, 3.513692405823457e-05, -3.087135626461035e-05, 2.712444449271282e-05, -2.383282162264958e-05, 2.094097402272335e-05, -1.840022834334601e-05, 1.616788131114735e-05, -1.420645034584182e-05, 1.248302592309649e-05, -1.096870811434504e-05, 9.638113747637144e-06, -8.468945120923146e-06, 7.441613142631071e-06, -6.538907689594796e-06, 5.745708304710312e-06, -5.048729864716120e-06, 4.436299286415519e-06, -3.898159774165185e-06, 3.425299055300640e-06, -3.009798361246221e-06, 2.644699605727544e-06, -2.323888735130234e-06, 2.041993364758909e-06, -1.794292864274530e-06, 1.576639283761010e-06, -1.385387831873578e-06, 1.217335820899756e-06, -1.069669061011715e-06, 9.399147533431300e-07, -8.259000682217990e-07, 7.257157398665060e-07, -6.376840939530841e-07, // 400 5.603309658957991e-07, -4.923610193285461e-07, 4.326360479415582e-07, -3.801559094539231e-07, 3.340417795380239e-07, -2.935214398955969e-07, 2.579163472426386e-07, -2.266302675538730e-07, 1.991392901933410e-07, -1.749830560542944e-07, 1.537570500204901e-07, -1.351058266793548e-07, 1.187170569339987e-07, -1.043162975874935e-07, 9.166239627647569e-08, -8.054345360702865e-08, 7.077327442848185e-08, -6.218824944698919e-08, 5.464461550533503e-08, -4.801604844364623e-08, 4.219154778426137e-08, -3.707357778095240e-08, 3.257643398813585e-08, -2.862480813390940e-08, 2.515252712714758e-08, -2.210144493659511e-08, 1.942046882050334e-08, -1.706470371165871e-08, 1.499470045020363e-08, -1.317579520863365e-08, 1.157752900730261e-08, -1.017313762883149e-08, 8.939103427741988e-09, -7.854761525494339e-09, 6.901953769038680e-09, -6.064724650448546e-09, 5.329054110861765e-09, -4.682622765482983e-09, 4.114605612289784e-09, -3.615490760147216e-09, 3.176920140880805e-09, -2.791549544501460e-09, 2.452925636291220e-09, -2.155377892876758e-09, 1.893923644634260e-09, -1.664184635389759e-09, 1.462313704613378e-09, -1.284930364574083e-09, 1.129064192077534e-09, -9.921050860675488e-10, 8.717595588633507e-10, -7.660123299045589e-10, 6.730925786777026e-10, -5.914442910883912e-10, 5.197002025874266e-10, -4.566589020735369e-10, 4.012647133825055e-10, -3.525900173049568e-10, 3.098197178898629e-10, -2.722375929324441e-10, 2.392143002251476e-10, -2.101968387708856e-10, 1.846992883946521e-10, -1.622946726187645e-10, 1.426078085707891e-10, -1.253090242443995e-10, 1.101086379038488e-10, -9.675210714907983e-11, 8.501576639446501e-11, -7.470308140061063e-11, 6.564135815534322e-11, -5.767885098561786e-11, 5.068222145975428e-11, -4.453430552590912e-11, 3.913215150436401e-11, -3.438529608259476e-11, 3.021424943923932e-11, -2.654916412468056e-11, 2.332866540856460e-11, -2.049882351089608e-11, 1.801225050660065e-11, -1.582730677850963e-11, 1.390740372895185e-11, -1.222039107416370e-11, 1.073801846245205e-11, -9.435462400371624e-12, 8.290910564095319e-12, -7.285196534694753e-12, 6.401478841143664e-12, -5.624958936714699e-12, 4.942633385892820e-12, -4.343076111680976e-12, 3.816247056854583e-12, -3.353324055246731e-12, 2.946555097697522e-12, -2.589128518642891e-12, 2.275058929421262e-12, -1.999086988193079e-12, 1.756591328117270e-12, -1.543511168961402e-12, 1.356278316168970e-12, -1.191757408630524e-12, 1.047193414582761e-12, -9.201654964381461e-13, 8.085464719703853e-13, -7.104671929827940e-13, 6.242852449483966e-13, -5.485574434836370e-13, 4.820156670945356e-13, -4.235456214910329e-13, 3.721681798548054e-13, -3.270229865892332e-13, 2.873540499880031e-13, -2.524970825616983e-13, 2.218683770237039e-13, -1.949550316531413e-13, 1.713063613517743e-13, -1.505263505679493e-13, 1.322670217058939e-13, -1.162226079680830e-13, 1.021244330498886e-13, -8.973641194353509e-14, 7.885109750931469e-14, -6.928620661062564e-14, 6.088156763982168e-14, -5.349643831874401e-14, 4.700714885865928e-14, -4.130503101260246e-14, 3.629459834036019e-14, -3.189194721306437e-14, 2.802335178098858e-14, -2.462402937628328e-14, 2.163705567637205e-14, -1.901241146150821e-14, 1.670614500365970e-14, -1.467963606029139e-14, 1.289894914807883e-14, -1.133426526661138e-14, 9.959382555826870e-15, -8.751277525286314e-15, 7.689719507742115e-15, -6.756931880732829e-15, 5.937294383089198e-15, -5.217081541398457e-15, 4.584232826172386e-15, -4.028150688809716e-15, 3.539523097325829e-15, -3.110167599068186e-15, 2.732894299122300e-15, -2.401385459874979e-15, 2.110089705537303e-15, -1.854129059999304e-15, 1.629217261290832e-15, -1.431587984759346e-15, 1.257931773006046e-15, -1.105340616423372e-15, 9.712592562913251e-16, -8.534423949641643e-16, 7.499170965983152e-16, -6.589497487925016e-16, 5.790170318870357e-16, -5.087804097802586e-16, 4.470637150906226e-16, -3.928334533103688e-16, 3.451814961285280e-16, -3.033098741093958e-16, 2.665174140678718e-16, -2.341879973739602e-16, 2.057802425625493e-16, -1.808184394757190e-16, 1.588845831226758e-16, -1.396113738580090e-16, 1.226760666607451e-16, -1.077950665155628e-16, 9.471917939160380e-17, -8.322943929278698e-17, 7.313344150029316e-17, -6.426212060448496e-17, 5.646691937188211e-17, -4.961730103765172e-17, 4.359856336499476e-17, -3.830991786613391e-17, 3.366280201995165e-17, -2.957939622304163e-17, 2.599132063935437e-17, -2.283849012615860e-17, 2.006810806115271e-17, -1.763378222157133e-17, 1.549474790998944e-17, -1.361518531745643e-17, 1.196361969267083e-17, -1.051239427255871e-17, 9.237207148064648e-18, -8.116704309607398e-18, 7.132122057424711e-18, -6.266972788687375e-18, 5.506768899643017e-18, -4.838780179316216e-18, 4.251820632131413e-18, -3.736061159634172e-18, // 600 3.282864964518770e-18, -2.884642920675208e-18, 2.534726487315339e-18, -2.227256039024718e-18, 1.957082741736910e-18, -1.719682331465223e-18, 1.511079351949921e-18, -1.327780582522198e-18, 1.166716541382233e-18, -1.025190084716866e-18, 9.008312409083032e-19, -7.915575234972099e-19, 6.955390583093758e-19, -6.111679407722684e-19, 5.370313102870695e-19, -4.718876907676534e-19, 4.146462011511975e-19, -3.643482877427443e-19, 3.201516724850009e-19, -2.813162483527929e-19, 2.471916856791182e-19, -2.172065418717432e-19, 1.908586921555019e-19, -1.677069210972190e-19, 1.473635341074691e-19, -1.294878651921690e-19, 1.137805722345515e-19, -9.997862427642855e-20, 8.785089685693581e-20, -7.719430165048124e-20, 6.783038559324186e-20, -5.960234254861157e-20, 5.237238746867620e-20, -4.601944907799879e-20, 4.043714244041481e-20, -3.553198745789200e-20, 3.122184346997662e-20, -2.743453374142427e-20, 2.410663680492846e-20, -2.118242441910240e-20, 1.861292835641397e-20, -1.635512039302220e-20, 1.437119176831859e-20, -1.262792004764438e-20, 1.109611278531706e-20, -9.750118671903616e-21, 8.567397980805881e-21, -7.528145122423124e-21, 6.614956985587211e-21, -5.812541511365789e-21, 5.107461617652140e-21, -4.487910185482492e-21, 3.943512339081440e-21, -3.465151709308229e-21, 3.044817771736880e-21, -2.675471703023044e-21, 2.350928509369901e-21, -2.065753454081455e-21, 1.815171050414263e-21, -1.594985094847466e-21, 1.401508399670877e-21, -1.231501046949432e-21, 1.082116130537259e-21, -9.508520796066248e-22, 8.355107675059663e-22, -7.341607053512435e-22, 6.451047024956878e-22, -5.668514489455267e-22, 4.980905412312518e-22, -4.376705343564336e-22, 3.845796559678223e-22, -3.379288625754182e-22, 2.969369534739024e-22, -2.609174906141295e-22, 2.292673041856001e-22, -2.014563919875952e-22, 1.770190438740656e-22, -1.555460422525817e-22, 1.366778079672955e-22, -1.200983777985825e-22, 1.055301137906078e-22, -9.272905558580399e-23, 8.148083664639517e-23, -7.159709489187570e-23, 6.291231754727859e-23, -5.528106802589832e-23, 4.857554932085610e-23, -4.268346388064600e-23, 3.750613425528731e-23, -3.295685226039235e-23, 2.895942787876105e-23, -2.544691315369192e-23, 2.236048039475426e-23, -1.964843688844607e-23, 1.726535979915737e-23, -1.517133602902566e-23, 1.333129356639782e-23, -1.171441336528463e-23, 1.029361299133160e-23, -9.045094266181886e-24, 7.947947207266389e-24, -6.983802597398395e-24, 6.136526075969871e-24, -5.391947793289710e-24, 4.737623457434066e-24, -4.162624052945447e-24, 3.657351341563861e-24, -3.213375054547230e-24, 2.823287629843971e-24, -2.480574676640252e-24, 2.179502108849238e-24, -1.915020796639139e-24, 1.682686753114865e-24, -1.478592609598710e-24, 1.299306570857684e-24, -1.141816901768704e-24, 1.003481245022785e-24, -8.819804660957208e-25, 7.752768477813106e-25, -6.815767858002522e-25, 5.992985900665248e-25, -5.270459063734392e-25, 4.635862411179793e-25, -4.078328923510551e-25, 3.588287019442058e-25, -3.157312905756895e-25, 2.778003181153750e-25, -2.443872105993099e-25, 2.149270912330287e-25, -1.889318548953116e-25, 1.659828344765530e-25, -1.457219798327836e-25, 1.278418979568063e-25, -1.120761165538443e-25, 9.819063583398694e-26, -8.597706957547351e-26, 7.524761802539771e-26, -6.583229692872437e-26, 5.757815308418353e-26, -5.034908817517119e-26, 4.402475606598968e-26, -3.849819197101101e-26, 3.367329111558304e-26, -2.946341179122434e-26, 2.579121784723996e-26, -2.258873118181162e-26, 1.979667076757990e-26, -1.736329567227616e-26, 1.524356928842631e-26, -1.339878795333426e-26, 1.179604582048012e-26, -1.040714749090827e-26, 9.207194488904074e-27, -8.173124929559144e-27, 7.282515970348745e-27, -6.513100644712918e-27, 5.843030126248539e-27, -5.251393008101120e-27, 4.718791967930222e-27, -4.228406914229241e-27, 3.767695474750273e-27, -3.329913400113583e-27, 2.914300433863011e-27, -2.524366823406565e-27, 2.164690315762398e-27, -1.837673402805216e-27, 1.542301736687901e-27, -1.275894419058812e-27, 1.037166283039543e-27, -8.274817350070647e-28, 6.490942784063843e-28, -5.023466637656253e-28, 3.845211097313078e-28, -2.909163620505845e-28, 2.167800946716682e-28, -1.587457861911164e-28, 1.153739423502031e-28, -8.690036418978894e-29, 7.435572366263697e-29, -7.847142831542739e-29, 9.894985212873060e-29, -1.342720280592225e-28, 1.817424273402145e-28, -2.376361960950870e-28, 2.977819810711053e-28, -3.586836968065507e-28, 4.184476666502118e-28, -4.766085106688037e-28, 5.328777445258146e-28, -5.858824985834212e-28, 6.329409859706737e-28, -6.709268971860476e-28, 6.975416172179417e-28, -7.122929261229363e-28, 7.167821355397955e-28, -7.142209321177599e-28, 7.084785743816030e-28, -7.032486471839363e-28, 7.017650479151096e-28, -7.069608472164614e-28, // 800 7.214920505613761e-28).finished(); const Real FHTAnderson801::ABSCISSA = 0.7059431685223780; // const Real FHTAnderson801::ABSE = 1.10517091807564762; // exp(.1) const Real FHTAnderson801::ABSER = 0.904837418035959573; // 1/exp(.1) // ==================== LIFECYCLE ============================== FHTAnderson801::FHTAnderson801(const ctor_key& key ) : HankelTransform( key ), Lambda(0), NumFun(0), NumConv(0), NumRel(0), BesselOrder(-1), Manager(nullptr) { } FHTAnderson801::FHTAnderson801( const YAML::Node& node, const ctor_key& key ) : HankelTransform( key ) { Lambda = node["Lambda"].as(); NumFun = node["NumFun"].as(); NumConv = node["NumConv"].as(); NumRel = node["NumRel"].as( ); BesselOrder = node["BesselOrder"].as( ); //Manager = KernelEM1DManager::DeSerialize(node["Manager"]); } FHTAnderson801::~FHTAnderson801() { } std::shared_ptr FHTAnderson801::NewSP() { return std::make_shared( ctor_key() ); } std::unique_ptr FHTAnderson801::NewUP() { return std::make_unique( ctor_key() ); } std::shared_ptr FHTAnderson801::DeSerialize( const YAML::Node& node ) { if (node.Tag() != "FHTAnderson801") { throw DeSerializeTypeMismatch( "FHTAnderson801", node.Tag()); } return std::make_shared ( node, ctor_key() ); } YAML::Node FHTAnderson801::Serialize() const { YAML::Node node = HankelTransform::Serialize(); node.SetTag( GetName() ); node["Lambda"] = Lambda; node["NumFun"] = NumFun; node["NumConv"] = NumConv; node["NumRel"] = NumRel; node["BesselOrder"] = BesselOrder; node["Manager"] = Manager->Serialize(); return node; } void FHTAnderson801::DeleteSplines() { splineVecReal.clear(); splineVecImag.clear(); } //-------------------------------------------------------------------------------------- // Class: FHTAnderson801 // Method: GetName // Description: Class identifier //-------------------------------------------------------------------------------------- inline std::string FHTAnderson801::GetName ( ) const { return CName; } // ----- end of method FHTAnderson801::GetName ----- // ==================== OPERATIONS ============================== void FHTAnderson801::ComputeRelated(const Real& rho, std::shared_ptr Kernel) { //this->AttachKernel(Kernel); this->SetNumConv(1); icount = 0; #ifdef LEMMA_SINGLE_PRECISION Compute(rho, 1, 1e-8); #else Compute(rho, 1, 1e-14); #endif } void FHTAnderson801::ComputeRelated(const Real& rho, std::vector< std::shared_ptr > KernelVecIn ) { icount = 0; this->kernelVec = KernelVecIn; this->SetNumConv(1); #ifdef LEMMA_SINGLE_PRECISION Compute(rho, 1, 1e-8); #else Compute(rho, 1, 1e-14); #endif } void FHTAnderson801::ComputeRelated(const Real& rho, std::shared_ptr KernelManager) { icount = 0; Manager = KernelManager; this->kernelVec = KernelManager->GetSTLVector(); this->SetNumConv(1); #ifdef LEMMA_SINGLE_PRECISION Compute(rho, 1, 1e-8); #else Compute(rho, 1, 1e-14); #endif } void FHTAnderson801::ComputeLaggedRelated(const Real& rho, const int& nlag, std::shared_ptr KernelManager) { icount = 0; Manager = KernelManager; this->kernelVec = KernelManager->GetSTLVector(); this->SetNumConv(nlag+1); #ifdef LEMMA_SINGLE_PRECISION Compute(rho, 1, 1e-8); #else Compute(rho, 1, 1e-14); #endif DeleteSplines(); // Now do cubic spline for (int ii=0; iiSetKnots( Arg, Zans.col(ii).real() ); splineVecReal.push_back(Spline); auto SplineI = CubicSplineInterpolator::NewSP(); SplineI->SetKnots( Arg, Zans.col(ii).imag() ); splineVecImag.push_back(SplineI); } } void FHTAnderson801::SetLaggedArg(const Real& rho) { for (int i=0; iInterpolate(rho), splineVecImag[i]->Interpolate(rho) ); } } Complex FHTAnderson801::Zgauss(const int &ikk, const EMMODE &imode, const int &itype, const Real &rho, const Real &wavef, KernelEM1DBase* Kernel) { // TODO, right here we want to return the splined solution instead in the // case of lagged convolution! return Zans(0, Kernel->GetManagerIndex()); //Complex(0,0); } void FHTAnderson801::SetNumConv(const int &i) { this->NumConv = i; } Eigen::Matrix FHTAnderson801::GetAnswer() { return this->Zans; } /////////////////////////////////////////// // Computes the transform void FHTAnderson801::Compute(const Real &rho, const int& ntol, const Real &tol) { Real y1 = this->ABSCISSA/rho; //this->Key.setZero(801); this->Key.setZero( ); //std::memset(Key, 0, 801*sizeof(int)); // Check to make sure everything is set, we call this a lot though, so disable checks // in release. #ifndef NDEBUG if (rho<=0) { throw std::runtime_error("In Hankel 2 Argument rho <= 0; rho=" + to_string(rho) ); } if (this->NumConv<1) { throw std::runtime_error("In FHTAnderson801 NumConv is less than 1."); } if (this->kernelVec.empty()) { throw std::runtime_error("In FHTAnderson801 Unset Kernel Calculator"); } #endif //if (rho<=1e-5) { // std::cout << "Extremely small rho argument" << std::endl; //} // only marginally faster even for best case //if (cacheResults) Manager->FindCache(rho); Arg = VectorXr::Zero(this->NumConv); Lambda = std::pow(rho*ABSER, this->NumConv-1); #ifndef NDEBUG if (Lambda <= 0) { std::cerr << "Exponent Underflow Error"; throw std::underflow_error("Exponent underflow"); } #endif int itol = 0; int none = 0; this->NumFun = 0; int idx = 0; int istore = 0; Complex Zsum(0.); Complex Cmax(0.); Complex C(0.); // Curiously critical piece of code //this->Zwork.resize(801, (int)(this->kernelVec.size())); this->Zwork.resize(Eigen::NoChange, (int)(this->kernelVec.size())); //Zans.resize(this->NumConv, (int)(this->kernelVec.size())); //Zans.setZero(); //Zwork = Eigen::Matrix::Zero(801, (int)(this->kernelVec.size())); Zans = Eigen::Matrix::Zero(this->NumConv, (int)(this->kernelVec.size())); // 1010 Loop for (int ilag=0; ilag < this->NumConv; ++ilag) { istore = this->NumConv - 1 - ilag; if (ilag > 0) y1 *= ABSE; Arg(istore) = ABSCISSA/y1; // 1000 Loop for (unsigned int irel=0; irel < this->kernelVec.size(); ++irel) { // fiter weight switch here this->BesselOrder = this->kernelVec[irel]->GetBesselOrder(); none = 0; itol = ntol; Zsum = Complex(0,0); Cmax = Complex(0,0); Lambda = y1; // Begin right side convolution at weight 298 // counting from 0 idx = 298; Lambda *= ABSE; // Code Block 20 in Anderson do { this->StoreRetreive(idx, ilag, Zsum, irel, C, rho); Cmax = Complex(std::max(std::abs(real(C)), std::real(Cmax)), std::max(std::abs(imag(C)), std::imag(Cmax)) ); ++idx; Lambda *= ABSE; } while (idx < 339); if (real(Cmax) == 0 && imag(Cmax) == 0) none = 1; Cmax *= tol; // Code Block 30 in Anderson do { this->StoreRetreive(idx, ilag, Zsum, irel, C, rho); if ( std::abs(real(C)) <= real(Cmax) && std::abs(imag(C)) <= imag(Cmax) ) { --itol; if (itol < 0 || idx > 800) break; } else { itol = ntol; } ++idx; Lambda *= ABSE; } while (idx < 801); itol = ntol; Lambda = y1; // Code Block 60 in Anderson idx = 297; do { this->StoreRetreive(idx, ilag, Zsum, irel, C, rho); if ( std::abs(real(C)) <= real(Cmax) && std::abs(imag(C)) <= imag(Cmax) && none == 0 ) { --itol; if (itol < 0 || idx < 0) break; } else { itol = ntol; } --idx; Lambda *= ABSER; } while (idx>=0); Zans(istore, irel) = Zsum/Arg(istore); } // End of 1000 loop } // End of 1010 loop } }