Lemma is an Electromagnetics API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FHTAnderson801.cpp 51KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119
  1. /* This file is part of Lemma, a geophysical modelling and inversion API */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this
  4. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. /**
  6. @file
  7. @author Trevor Irons
  8. @date 06/26/2009
  9. @version $Id: hankeltransformhankel2.cpp 202 2015-01-06 20:53:21Z tirons $
  10. **/
  11. #include "FHTAnderson801.h"
  12. namespace Lemma {
  13. std::ostream &operator << (std::ostream &stream, const FHTAnderson801 &ob) {
  14. stream << ob.Serialize() << "\n";
  15. return stream;
  16. }
  17. // Initialise static const members, this could be done by preprocessor in
  18. // slightly higher precision?
  19. const Eigen::Matrix<Real, 2, 801> FHTAnderson801::FilterWeights =
  20. ( Eigen::Matrix<Real, 2, 801>() <<
  21. 2.103562053838982e-29, -1.264469361608894e-14,
  22. 4.615731256788567e-14, -2.798703374257668e-14,
  23. 5.465764965410841e-14, -2.652933109928729e-14,
  24. 5.674913434067321e-14, -2.157276828977208e-14,
  25. 5.831846086773976e-14, -1.546589284868783e-14,
  26. 6.057302455652974e-14, -8.502531259083065e-15,
  27. 6.388018061147645e-14, -5.659657635010288e-16,
  28. 6.848500604791407e-14, 8.572897732168277e-15,
  29. 7.465068154681814e-14, 1.920837293261338e-14,
  30. 8.269345428975771e-14, 3.170116562922900e-14,
  31. 9.300004039695208e-14, 4.649069639417992e-14,
  32. 1.060441944490564e-13, 6.411216589597457e-14,
  33. 1.224060834001701e-13, 8.521776751507022e-14,
  34. 1.427957940487172e-13, 1.106026606968463e-13,
  35. 1.680820203098405e-13, 1.412367028159546e-13,
  36. 1.993271011776308e-13, 1.783032042964119e-13,
  37. 2.378298196799422e-13, 2.232462602765097e-13,
  38. 2.851776817107034e-13, 2.778285575785995e-13,
  39. 3.433107735233557e-13, 3.442019764139949e-13,
  40. 4.145997612327839e-13, 4.249938198224969e-13,
  41. 5.019411631949951e-13, 5.234121310773422e-13,
  42. 6.088737193247560e-13, 6.433743253810275e-13,
  43. 7.397205280796933e-13, 7.896642978865920e-13,
  44. 8.997626559623209e-13, 9.681243129571424e-13,
  45. 1.095451187471558e-12, 1.185889375491455e-12,
  46. 1.334666226164323e-12, 1.451673490118585e-12,
  47. 1.627033241780647e-12, 1.776119296526221e-12,
  48. 1.984309459865773e-12, 2.172225112712636e-12,
  49. 2.420855801356264e-12, 2.655866524621122e-12,
  50. 2.954213313000758e-12, 3.246433455110429e-12,
  51. 3.605807223054322e-12, 3.967608279821300e-12,
  52. 4.401806878720721e-12, 4.848316218220904e-12,
  53. 5.374176077884770e-12, 5.923886142128417e-12,
  54. 6.561955948855011e-12, 7.237468388830243e-12,
  55. 8.012831864792648e-12, 8.841766480402105e-12,
  56. 9.785047278800097e-12, 1.080115224902499e-11,
  57. 1.194974128877562e-11, 1.319424925552153e-11,
  58. 1.459380374689331e-11, 1.611708818260074e-11,
  59. 1.782336249944076e-11, 1.968696083966218e-11,
  60. 2.176804271234846e-11, 2.404712745375440e-11,
  61. 2.658616922424555e-11, 2.937256616666064e-11,
  62. 3.247112071587450e-11, 3.587699548548411e-11,
  63. 3.965909071112399e-11, 4.382145152220635e-11,
  64. 4.843856688602439e-11, 5.352476425684008e-11,
  65. 5.916190912377549e-11, 6.537635327328955e-11,
  66. 7.225949098391667e-11, 7.985185650562155e-11,
  67. 8.825697213255412e-11, 9.753221923111176e-11,
  68. 1.077963949370144e-10, 1.191270094182892e-10,
  69. 1.316619519054340e-10, 1.455028951566729e-10,
  70. 1.608114581091983e-10, 1.777184270673645e-10,
  71. 1.964147916871289e-10, 2.170665216346822e-10,
  72. 2.399008451839042e-10, 2.651263504640323e-10,
  73. 2.930148720448538e-10, 3.238267179640594e-10,
  74. 3.578885297833856e-10, 3.955234710219298e-10,
  75. 4.371254308993604e-10, 4.830940473937580e-10,
  76. 5.339056350072159e-10, 5.900529573690070e-10,
  77. 6.521132758098962e-10, 7.206928333934838e-10,
  78. 7.964924450372341e-10, 8.802567084675067e-10,
  79. 9.728375895186283e-10, 1.075148437456224e-09,
  80. 1.188226062693121e-09, 1.313189706258061e-09,
  81. 1.451302163665563e-09, 1.603933943511600e-09,
  82. 1.772624063293560e-09, 1.959049733219870e-09,
  83. 2.165087540667258e-09, 2.392789115986871e-09,
  84. 2.644443536014764e-09, 2.922559573439235e-09,
  85. 3.229930291248597e-09, 3.569622651576204e-09,
  86. 3.945045448172924e-09, 4.359947261255963e-09,
  87. 4.818489091363688e-09, 5.325251901762953e-09,
  88. 5.885315583343685e-09, 6.504277635547376e-09,
  89. 7.188340419242570e-09, 7.944342903082902e-09,
  90. 8.779858562959109e-09, 9.703242578022093e-09,
  91. 1.072374322768940e-08, 1.185156747840095e-08,
  92. 1.309800933225301e-08, 1.447553742402158e-08,
  93. 1.599794451372024e-08, 1.768046154055318e-08,
  94. 1.953993335487118e-08, 2.159496468450500e-08,
  95. 2.386612830616206e-08, 2.637614961034523e-08,
  96. 2.915015476269831e-08, 3.221590205565798e-08,
  97. 3.560407926098509e-08, 3.934859178954436e-08,
  98. 4.348692045365787e-08, 4.806047869438007e-08,
  99. 5.311504443749314e-08, 5.870120138001748e-08,
  100. 6.487486163571268e-08, 7.169780940885934e-08,
  101. 7.923833480505012e-08, 8.757190229426675e-08,
  102. 9.678192055835553e-08, 1.069605631204864e-07,
  103. 1.182097045925483e-07, 1.306419269237675e-07,
  104. 1.443816591198488e-07, 1.595664099835792e-07,
  105. 1.763481565722233e-07, 1.948948533650376e-07,
  106. 2.153921247351847e-07, 2.380451115468297e-07,
  107. 2.630805351444854e-07, 2.907489558998551e-07,
  108. 3.213272911558462e-07, 3.551215767529809e-07,
  109. 3.924700396067688e-07, 4.337464734078393e-07,
  110. 4.793639887921159e-07, 5.297791390370199e-07,
  111. 5.854964979982190e-07, 6.470737017046583e-07,
  112. 7.151270374758372e-07, 7.903376040582035e-07,
  113. 8.734581359370587e-07, 9.653205295304359e-07,
  114. 1.066844176299330e-06, 1.179045157323447e-06,
  115. 1.303046419382764e-06, 1.440089007182073e-06,
  116. 1.591544490556806e-06, 1.758928685376697e-06,
  117. 1.943916830388476e-06, 2.148360347694608e-06,
  118. 2.374305378111399e-06, 2.624013254094558e-06,
  119. 2.899983137292810e-06, 3.204977025773239e-06,
  120. 3.542047402097807e-06, 3.914567778667102e-06,
  121. // 200
  122. 4.326266465748067e-06, 4.781263881007758e-06,
  123. 5.284113792545945e-06, 5.839848890150422e-06,
  124. 6.454031158395685e-06, 7.132807538712648e-06,
  125. 7.882971454044484e-06, 8.712030795792633e-06,
  126. 9.628283069078871e-06, 1.064089843325841e-05,
  127. 1.176001148348469e-05, 1.299682267761921e-05,
  128. 1.436371043746991e-05, 1.587435503282041e-05,
  129. 1.754387550120777e-05, 1.938898096105121e-05,
  130. 2.142813784487508e-05, 2.368175471430264e-05,
  131. 2.617238651818130e-05, 2.892496032668667e-05,
  132. 3.196702481167932e-05, 3.532902595927333e-05,
  133. 3.904461178455365e-05, 4.315096908756330e-05,
  134. 4.768919563102351e-05, 5.270471145419851e-05,
  135. 5.824771344935570e-05, 6.437367773954276e-05,
  136. 7.114391489568718e-05, 7.862618353777022e-05,
  137. 8.689536847209423e-05, 9.603423013681158e-05,
  138. 1.061342328695059e-04, 1.172964602657162e-04,
  139. 1.296326268075215e-04, 1.432661958546299e-04,
  140. 1.583336152150400e-04, 1.749856826064412e-04,
  141. 1.933890547221590e-04, 2.137279149064782e-04,
  142. 2.362058162174614e-04, 2.610477181410775e-04,
  143. 2.885022375064333e-04, 3.188441357870562e-04,
  144. 3.523770680013592e-04, 3.894366200728159e-04,
  145. 4.303936656695837e-04, 4.756580748770003e-04,
  146. 5.256828130316798e-04, 5.809684683619367e-04,
  147. 6.420682561143772e-04, 7.095935446942389e-04,
  148. 7.842199637491256e-04, 8.666941465924691e-04,
  149. 9.578411834759010e-04, 1.058572843543458e-03,
  150. 1.169896665384001e-03, 1.292925974983324e-03,
  151. 1.428890965739396e-03, 1.579150889627630e-03,
  152. 1.745207548623177e-03, 1.928720102656342e-03,
  153. 2.131521473093367e-03, 2.355636277673631e-03,
  154. 2.603300731229735e-03, 2.876984272542283e-03,
  155. 3.179413630050106e-03, 3.513598723334281e-03,
  156. 3.882861625673649e-03, 4.290867254031690e-03,
  157. 4.741657973486860e-03, 5.239689338467119e-03,
  158. 5.789870985188969e-03, 6.397607072000340e-03,
  159. 7.068843783102744e-03, 7.810112796625723e-03,
  160. 8.628584975720666e-03, 9.532112534855741e-03,
  161. 1.052928697105230e-02, 1.162947042684567e-02,
  162. 1.284285301027502e-02, 1.418045400408490e-02,
  163. 1.565416842684913e-02, 1.727670025860997e-02,
  164. 1.906157878467033e-02, 2.102295173845023e-02,
  165. 2.317553622087861e-02, 2.553413681316817e-02,
  166. 2.811347056705691e-02, 3.092716134472897e-02,
  167. 3.398734108220733e-02, 3.730266904318316e-02,
  168. 4.087756584601726e-02, 4.470845458227711e-02,
  169. 4.878245655564208e-02, 5.307046388837388e-02,
  170. 5.752521479656082e-02, 6.206888924914453e-02,
  171. 6.659098690582325e-02, 7.092687097703928e-02,
  172. 7.485762155329997e-02, 7.807466421172765e-02,
  173. 8.018887211338042e-02, 8.067640670918657e-02,
  174. 7.891767306422777e-02, 7.412406301630496e-02,
  175. 6.545864753141331e-02, 5.195771725733346e-02,
  176. 3.284797274184859e-02, 7.497076325831270e-03,
  177. -2.386612869894549e-02, -6.017494378476118e-02,
  178. -9.817899798850670e-02, -1.328147797272611e-01,
  179. -1.554628569772562e-01, -1.563982157987450e-01,
  180. -1.243049866529050e-01, -5.486815986343697e-02,
  181. 4.686255899170307e-02, 1.511218295806206e-01,
  182. 2.119315534410599e-01, 1.695134135887796e-01,
  183. 1.386197420331480e-02, -1.869350451838135e-01,
  184. -2.455889606925336e-01, -5.309269401899814e-02,
  185. 2.519998415798595e-01, 1.968224876057428e-01,
  186. -2.014333618969160e-01, -2.458450827258603e-01,
  187. 3.433559314076636e-01, -4.770066510626292e-02,
  188. -2.096628473507452e-01, 2.509085123794248e-01,
  189. -1.676412661335192e-01, 7.495199786896762e-02,
  190. -1.695135102751146e-02, -8.828524201374996e-03,
  191. 1.616787356183550e-02, -1.556411755992529e-02,
  192. 1.251311125216370e-02, -9.299315246978098e-03,
  193. 6.650525996779493e-03, -4.667707408671884e-03,
  194. 3.248885545556855e-03, -2.255529108544675e-03,
  195. 1.566875211100915e-03, -1.091132486368091e-03,
  196. 7.625383049040949e-04, -5.352540577820408e-04,
  197. 3.777104567214670e-04, -2.682528211535297e-04,
  198. 1.920265274996755e-04, -1.388213723208944e-04,
  199. 1.015998917810005e-04, -7.549725062631259e-05,
  200. 5.714172920052936e-05, -4.419160967680634e-05,
  201. 3.501776199578583e-05, -2.848496954139990e-05,
  202. 2.380104817324115e-05, -2.041274924032166e-05,
  203. 1.793363489791860e-05, -1.609367780777977e-05,
  204. 1.470394692017765e-05, -1.363208540087839e-05,
  205. 1.278540851480116e-05, -1.209910323276592e-05,
  206. 1.152780746372085e-05, -1.103964249967709e-05,
  207. 1.061214724478712e-05, -1.022954672255804e-05,
  208. 9.880801917269063e-06, -9.558136268373164e-06,
  209. 9.255989462874843e-06, -8.970368039834961e-06,
  210. 8.698439226217636e-06, -8.438199899378174e-06,
  211. 8.188185039708096e-06, -7.947275976752668e-06,
  212. 7.714620489277084e-06, -7.489590334670121e-06,
  213. 7.271712845563131e-06, -7.060595202720040e-06,
  214. 6.855890958634290e-06, -6.657307826365352e-06,
  215. 6.464610635947412e-06, -6.277596705248834e-06,
  216. 6.096069004564178e-06, -5.919835014912806e-06,
  217. 5.748721389173238e-06, -5.582576428368341e-06,
  218. 5.421255729073172e-06, -5.264611483233620e-06,
  219. 5.112497827757443e-06, -4.964780650195476e-06,
  220. 4.821336526159266e-06, -4.682043530422997e-06,
  221. 4.546777587820041e-06, -4.415418000076004e-06,
  222. // 400
  223. 4.287852503112911e-06, -4.163974668109847e-06,
  224. 4.043678407829827e-06, -3.926857526517075e-06,
  225. 3.813409851360361e-06, -3.703239239834851e-06,
  226. 3.596252927182967e-06, -3.492358600906126e-06,
  227. 3.391465179914198e-06, -3.293485431241940e-06,
  228. 3.198336356446399e-06, -3.105937110348406e-06,
  229. 3.016207679069661e-06, -2.929069911562291e-06,
  230. 2.844448954094881e-06, -2.762272935820411e-06,
  231. 2.682471568415877e-06, -2.604975709140556e-06,
  232. 2.529718233664062e-06, -2.456634690985054e-06,
  233. 2.385662793855871e-06, -2.316741584624232e-06,
  234. 2.249811415880699e-06, -2.184814552602377e-06,
  235. 2.121695378987067e-06, -2.060399926949900e-06,
  236. 2.000875435893980e-06, -1.943070483347481e-06,
  237. 1.886935339579619e-06, -1.832421953831803e-06,
  238. 1.779483599068986e-06, -1.728074671861562e-06,
  239. 1.678150840818710e-06, -1.629669220867866e-06,
  240. 1.582588274939725e-06, -1.536867577717458e-06,
  241. 1.492467744182388e-06, -1.449350544031671e-06,
  242. 1.407478963215944e-06, -1.366817091697906e-06,
  243. 1.327329980403758e-06, -1.288983628354532e-06,
  244. 1.251745052743577e-06, -1.215582289623042e-06,
  245. 1.180464297731392e-06, -1.146360878232118e-06,
  246. 1.113242681755176e-06, -1.081081241360643e-06,
  247. 1.049848946307979e-06, -1.019518969919736e-06,
  248. 9.900652269648073e-07, -9.614623823829486e-07,
  249. 9.336858590396268e-07, -9.067118039187765e-07,
  250. 8.805170379415897e-07, -8.550790335506564e-07,
  251. 8.303759185665738e-07, -8.063864695073603e-07,
  252. 7.830900795968434e-07, -7.604667251660013e-07,
  253. 7.384969528074763e-07, -7.171618775580271e-07,
  254. 6.964431695613518e-07, -6.763230273695452e-07,
  255. 6.567841555251206e-07, -6.378097555683096e-07,
  256. 6.193835199757372e-07, -6.014896169720738e-07,
  257. 5.841126695566173e-07, -5.672377400509635e-07,
  258. 5.508503223216395e-07, -5.349363333399711e-07,
  259. 5.194820986824491e-07, -5.044743364413132e-07,
  260. 4.899001458890472e-07, -4.757469999761242e-07,
  261. 4.620027360551677e-07, -4.486555431391317e-07,
  262. 4.356939495368206e-07, -4.231068139067277e-07,
  263. 4.108833178901058e-07, -3.990129570237777e-07,
  264. 3.874855299952715e-07, -3.762911289578004e-07,
  265. 3.654201320223786e-07, -3.548631961765860e-07,
  266. 3.446112489455190e-07, -3.346554794873414e-07,
  267. 3.249873307934947e-07, -3.155984931421240e-07,
  268. 3.064808974928670e-07, -2.976267081233949e-07,
  269. 2.890283152696976e-07, -2.806783286653362e-07,
  270. 2.725695717362821e-07, -2.646950756050221e-07,
  271. 2.570480727284082e-07, -2.496219907786807e-07,
  272. 2.424104471687142e-07, -2.354072438896643e-07,
  273. 2.286063621819694e-07, -2.220019570969968e-07,
  274. 2.155883523600859e-07, -2.093600356601861e-07,
  275. 2.033116540781646e-07, -1.974380094205501e-07,
  276. 1.917340535876188e-07, -1.861948842172547e-07,
  277. 1.808157405985162e-07, -1.755919996494557e-07,
  278. 1.705191718700136e-07, -1.655928973946416e-07,
  279. 1.608089422670497e-07, -1.561631948835526e-07,
  280. 1.516516624771349e-07, -1.472704676262496e-07,
  281. 1.430158448819191e-07, -1.388841375627619e-07,
  282. 1.348717946589134e-07, -1.309753677747614e-07,
  283. 1.271915081246862e-07, -1.235169636417206e-07,
  284. 1.199485762099940e-07, -1.164832789732080e-07,
  285. 1.131180936862105e-07, -1.098501281312535e-07,
  286. 1.066765736321394e-07, -1.035947026599537e-07,
  287. 1.006018664975167e-07, -9.769549295058651e-08,
  288. 9.487308412474974e-08, -9.213221428331440e-08,
  289. 8.947052777472484e-08, -8.688573700943115e-08,
  290. 8.437562048443172e-08, -8.193802086874367e-08,
  291. 7.957084315467929e-08, -7.727205286392824e-08,
  292. 7.503967429747869e-08, -7.287178883148888e-08,
  293. 7.076653326692979e-08, -6.872209823264986e-08,
  294. 6.673672663335082e-08, -6.480871213716780e-08,
  295. 6.293639770567428e-08, -6.111817417008917e-08,
  296. 5.935247885127626e-08, -5.763779421770836e-08,
  297. 5.597264657919956e-08, -5.435560481863042e-08,
  298. 5.278527916288309e-08, -5.126031999018991e-08,
  299. 4.977941667022704e-08, -4.834129643623350e-08,
  300. 4.694472329047102e-08, -4.558849694284832e-08,
  301. 4.427145178025873e-08, -4.299245586445184e-08,
  302. 4.175040995827635e-08, -4.054424658081963e-08,
  303. 3.937292909065092e-08, -3.823545079527342e-08,
  304. 3.713083408552377e-08, -3.605812959486601e-08,
  305. 3.501641538356351e-08, -3.400479614676831e-08,
  306. 3.302240244515663e-08, -3.206838995736202e-08,
  307. 3.114193875409117e-08, -3.024225259359901e-08,
  308. 2.936855823761587e-08, -2.852010478676213e-08,
  309. 2.769616303496246e-08, -2.689602484264953e-08,
  310. 2.611900252829978e-08, -2.536442827753140e-08,
  311. 2.463165356908288e-08, -2.392004861730570e-08,
  312. 2.322900183088905e-08, -2.255791928733344e-08,
  313. 2.190622422255186e-08, -2.127335653510145e-08,
  314. 2.065877230473273e-08, -2.006194332493974e-08,
  315. 1.948235664905881e-08, -1.891951414942437e-08,
  316. 1.837293208920017e-08, -1.784214070660012e-08,
  317. 1.732668381117887e-08, -1.682611839179446e-08,
  318. 1.634001423585344e-08, -1.586795355952947e-08,
  319. 1.540953064868929e-08, -1.496435151022419e-08,
  320. 1.453203353344868e-08, -1.411220516125227e-08,
  321. 1.370450557074419e-08, -1.330858436314438e-08,
  322. 1.292410126264865e-08, -1.255072582398340e-08,
  323. // 600
  324. 1.218813714839246e-08, -1.183602360782992e-08,
  325. 1.149408257713515e-08, -1.116202017395058e-08,
  326. 1.083955100614394e-08, -1.052639792651900e-08,
  327. 1.022229179461678e-08, -9.926971245406734e-09,
  328. 9.640182464660921e-09, -9.361678970810806e-09,
  329. 9.091221403102823e-09, -8.828577315878212e-09,
  330. 8.573520978800615e-09, -8.325833182853652e-09,
  331. 8.085301051938885e-09, -7.851717859915976e-09,
  332. 7.624882852931747e-09, -7.404601076884107e-09,
  333. 7.190683209868762e-09, -6.982945399464102e-09,
  334. 6.781209104717332e-09, -6.585300942697731e-09,
  335. 6.395052539483568e-09, -6.210300385452473e-09,
  336. 6.030885694751333e-09, -5.856654268826800e-09,
  337. 5.687456363899640e-09, -5.523146562267662e-09,
  338. 5.363583647325650e-09, -5.208630482195534e-09,
  339. 5.058153891863612e-09, -4.912024548723426e-09,
  340. 4.770116861425010e-09, -4.632308866934630e-09,
  341. 4.498482125712853e-09, -4.368521619921419e-09,
  342. 4.242315654571151e-09, -4.119755761525383e-09,
  343. 4.000736606276379e-09, -3.885155897415073e-09,
  344. 3.772914298716528e-09, -3.663915343765296e-09,
  345. 3.558065353046999e-09, -3.455273353434971e-09,
  346. 3.355451000003056e-09, -3.258512500097394e-09,
  347. 3.164374539601736e-09, -3.072956211332787e-09,
  348. 2.984178945504153e-09, -2.897966442199276e-09,
  349. 2.814244605795313e-09, -2.732941481281439e-09,
  350. 2.653987192416816e-09, -2.577313881675167e-09,
  351. 2.502855651924429e-09, -2.430548509791296e-09,
  352. 2.360330310661908e-09, -2.292140705271406e-09,
  353. 2.225921087836540e-09, -2.161614545686758e-09,
  354. 2.099165810350450e-09, -2.038521210054267e-09,
  355. 1.979628623594711e-09, -1.922437435542387e-09,
  356. 1.866898492740427e-09, -1.812964062059653e-09,
  357. 1.760587789374176e-09, -1.709724659722168e-09,
  358. 1.660330958617607e-09, -1.612364234479730e-09,
  359. 1.565783262147887e-09, -1.520548007450427e-09,
  360. 1.476619592797189e-09, -1.433960263766035e-09,
  361. 1.392533356654690e-09, -1.352303266970005e-09,
  362. 1.313235418827548e-09, -1.275296235235242e-09,
  363. 1.238453109235514e-09, -1.202674375881138e-09,
  364. 1.167929285020692e-09, -1.134187974870230e-09,
  365. 1.101421446348478e-09, -1.069601538153474e-09,
  366. 1.038700902559248e-09, -1.008692981911727e-09,
  367. 9.795519858036667e-10, -9.512528689090021e-10,
  368. 9.237713094575600e-10, -8.970836883316330e-10,
  369. 8.711670687664494e-10, -8.459991766370928e-10,
  370. 8.215583813149323e-10, -7.978236770771082e-10,
  371. 7.747746650530930e-10, -7.523915356928136e-10,
  372. 7.306550517412669e-10, -7.095465317049981e-10,
  373. 6.890478337962292e-10, -6.691413403408390e-10,
  374. 6.498099426367938e-10, -6.310370262500165e-10,
  375. 6.128064567350563e-10, -5.951025657682865e-10,
  376. 5.779101376817111e-10, -5.612143963858077e-10,
  377. 5.450009926701687e-10, -5.292559918710250e-10,
  378. 5.139658618950525e-10, -4.991174615891697e-10,
  379. 4.846980294463296e-10, -4.706951726376001e-10,
  380. 4.570968563611062e-10, -4.438913934986793e-10,
  381. 4.310674345713248e-10, -4.186139579848742e-10,
  382. 4.065202605574395e-10, -3.947759483205284e-10,
  383. 3.833709275859127e-10, -3.722953962705749e-10,
  384. 3.615398354722752e-10, -3.510950012884991e-10,
  385. 3.409519168717552e-10, -3.311018647143929e-10,
  386. 3.215363791563124e-10, -3.122472391091240e-10,
  387. 3.032264609905071e-10, -2.944662918626933e-10,
  388. 2.859592027691788e-10, -2.776978822639370e-10,
  389. 2.696752301275724e-10, -2.618843512650130e-10,
  390. 2.543185497794985e-10, -2.469713232177689e-10,
  391. 2.398363569815098e-10, -2.329075189002498e-10,
  392. 2.261788539610461e-10, -2.196445791904288e-10,
  393. 2.132990786842053e-10, -2.071368987808525e-10,
  394. 2.011527433743496e-10, -1.953414693624216e-10,
  395. 1.896980822262837e-10, -1.842177317380848e-10,
  396. 1.788957077923634e-10, -1.737274363579317e-10,
  397. 1.687084755467094e-10, -1.638345117961281e-10,
  398. 1.591013561618254e-10, -1.545049407174433e-10,
  399. 1.500413150584345e-10, -1.457066429068751e-10,
  400. 1.414971988143619e-10, -1.374093649601637e-10,
  401. 1.334396280418735e-10, -1.295845762558885e-10,
  402. 1.258408963651246e-10, -1.222053708514437e-10,
  403. 1.186748751503467e-10, -1.152463749655566e-10,
  404. 1.119169236611821e-10, -1.086836597292220e-10,
  405. 1.055438043302322e-10, -1.024946589050432e-10,
  406. 9.953360285547502e-11, -9.665809129205519e-11,
  407. 9.386565284680683e-11, -9.115388754922578e-11,
  408. 8.852046476362457e-11, -8.596312118607507e-11,
  409. 8.347965889923978e-11, -8.106794348344660e-11,
  410. 7.872590218244558e-11, -7.645152212241484e-11,
  411. 7.424284858301879e-11, -7.209798331980772e-11,
  412. 7.001508293831718e-11, -6.799235732265070e-11,
  413. 6.602806812690510e-11, -6.412052735069306e-11,
  414. 6.226809604991307e-11, -6.046918330329692e-11,
  415. 5.872224571634798e-11, -5.702578811834639e-11,
  416. 5.537836697680089e-11, -5.377860007122251e-11,
  417. 5.222519065363231e-11, -5.071698520520750e-11,
  418. 4.925310917157278e-11, -4.783328375532226e-11,
  419. 4.645856316442775e-11, -4.513304831495452e-11,
  420. 4.386786828115582e-11, -4.269042848860555e-11,
  421. 4.166589074066043e-11, -4.094706131972530e-11,
  422. 4.089025606285087e-11, -4.232439520086882e-11,
  423. 4.717597028661840e-11, -5.992051472297203e-11,
  424. // 800
  425. 9.095360729014628e-11,
  426. // J1 filter coeffs
  427. -2.377900110058238e-29, 7.972119293423644e-28,
  428. 3.832566186338494e-28, 8.493403321392027e-28,
  429. 8.232164371695149e-28, 1.100368717019849e-27,
  430. 1.325428732821688e-27, 1.592246428628784e-27,
  431. 1.998601965098251e-27, 2.368546581454427e-27,
  432. 2.979879339217500e-27, 3.543101964370716e-27,
  433. 4.425741130789444e-27, 5.318079447058835e-27,
  434. 6.555619006665152e-27, 7.994776219905923e-27,
  435. 9.707158322300619e-27, 1.200497993577129e-26,
  436. 1.440665350963159e-26, 1.797046711269925e-26,
  437. 2.145390397713542e-26, 2.681614737113612e-26,
  438. 3.203783629081399e-26, 3.992219752668547e-26,
  439. 4.793780377063212e-26, 5.935124745092138e-26,
  440. 7.177334354418767e-26, 8.825226769587027e-26,
  441. 1.073646008000832e-25, 1.313923424181352e-25,
  442. 1.603838995307793e-25, 1.958633055912045e-25,
  443. 2.393489595056268e-25, 2.921690713642289e-25,
  444. 3.570455561097498e-25, 4.359157800465477e-25,
  445. 5.325840709133780e-25, 6.503774912184682e-25,
  446. 7.944611784834684e-25, 9.702980761516990e-25,
  447. 1.185162186264197e-24, 1.447534903673577e-24,
  448. 1.768047044621983e-24, 2.159464672432506e-24,
  449. 2.637627922624120e-24, 3.221525590342443e-24,
  450. 3.934898912364447e-24, 4.805930563105760e-24,
  451. 5.870195744781909e-24, 7.169601400607034e-24,
  452. 8.757287433857846e-24, 1.069583032926807e-23,
  453. 1.306426797568440e-23, 1.595639689868334e-23,
  454. 1.948949017485241e-23, 2.380425857645875e-23,
  455. 2.907479573699533e-23, 3.551187751264232e-23,
  456. 4.337441481530691e-23, 5.297756660121858e-23,
  457. 6.470696377141974e-23, 7.903329008477021e-23,
  458. 9.653141660115531e-23, 1.179038165380973e-22,
  459. 1.440079827014168e-22, 1.758917653247009e-22,
  460. 2.148347376559587e-22, 2.623996157283884e-22,
  461. 3.204958075285148e-22, 3.914542160210567e-22,
  462. 4.781235486108842e-22, 5.839810952393910e-22,
  463. 7.132764830587759e-22, 8.711974589175415e-22,
  464. 1.064083434862305e-21, 1.299673924385260e-21,
  465. 1.587425911126261e-21, 1.938885693339251e-21,
  466. 2.368161151141687e-21, 2.892477586360832e-21,
  467. 3.532881273577120e-21, 4.315069519949315e-21,
  468. 5.270439518682773e-21, 6.437327295395713e-21,
  469. 7.862571844418139e-21, 9.603363814287760e-21,
  470. 1.172957893208765e-20, 1.432653521781635e-20,
  471. 1.749847566646075e-20, 2.137267893871469e-20,
  472. 2.610465830070486e-20, 3.188429016442547e-20,
  473. 3.894357412134842e-20, 4.756577134959383e-20,
  474. 5.809698595129943e-20, 7.095979207053098e-20,
  475. 8.667051908059619e-20, 1.058595695124327e-19,
  476. 1.292972220966051e-19, 1.579239186764568e-19,
  477. 1.928887914036691e-19, 2.355947994119052e-19,
  478. 2.877562665708650e-19, 3.514661357021616e-19,
  479. 4.292819113549590e-19, 5.243258540458620e-19,
  480. 6.404133671732880e-19, 7.822022466379286e-19,
  481. 9.553844929891425e-19, 1.166908611051965e-18,
  482. 1.425266206309626e-18, 1.740823055783105e-18,
  483. 2.126247365091890e-18, 2.597002781312310e-18,
  484. 3.171988392298073e-18, 3.874272813855638e-18,
  485. 4.732050718776532e-18, 5.779735750225090e-18,
  486. 7.059390282316958e-18, 8.622352349869446e-18,
  487. 1.053137301019041e-17, 1.286303788941302e-17,
  488. 1.571096273151045e-17, 1.918939713846172e-17,
  489. 2.343800282007509e-17, 2.862721583723883e-17,
  490. 3.496539240998871e-17, 4.270678642844850e-17,
  491. 5.216223744747131e-17, 6.371103687921334e-17,
  492. 7.781691646330707e-17, 9.504569536565720e-17,
  493. 1.160892016025935e-16, 1.417915110596655e-16,
  494. 1.731847439832610e-16, 2.115280706868521e-16,
  495. 2.583612876753947e-16, 3.155627883343085e-16,
  496. 3.854297646671823e-16, 4.707643426724462e-16,
  497. 5.749936655677889e-16, 7.022978436839158e-16,
  498. 8.577897883808816e-16, 1.047705221625211e-15,
  499. 1.279672050432180e-15, 1.562992451553929e-15,
  500. 1.909046462722709e-15, 2.331710624424154e-15,
  501. 2.847962809294981e-15, 3.478503311969800e-15,
  502. 4.248661490032314e-15, 5.189316858234294e-15,
  503. 6.338258511920505e-15, 7.741550588468052e-15,
  504. 9.455571172640662e-15, 1.154903563040828e-14,
  505. 1.410605553114248e-14, 1.722913542283047e-14,
  506. 2.104376349301754e-14, 2.570284789891445e-14,
  507. 3.139360843035402e-14, 3.834414037586157e-14,
  508. 4.683376407804295e-14, 5.720273100006960e-14,
  509. 6.986777175159004e-14, 8.533643955954289e-14,
  510. 1.042304766775628e-13, 1.273069965554705e-13,
  511. 1.554936139359936e-13, 1.899197032959808e-13,
  512. 2.319692366825060e-13, 2.833268748946759e-13,
  513. 3.460574729307441e-13, 4.226739834760657e-13,
  514. 5.162571427996572e-13, 6.305554147709428e-13,
  515. 7.701652476024983e-13, 9.406780256740293e-13,
  516. 1.148951682734905e-12, 1.403326528650366e-12,
  517. 1.714034726435434e-12, 2.093516885212530e-12,
  518. 2.557039701256063e-12, 3.123159736572392e-12,
  519. 3.814655555107956e-12, 4.659206104975550e-12,
  520. 5.690798281976283e-12, 6.950717591317659e-12,
  521. 8.489674870123959e-12, 1.036925035218241e-11,
  522. 1.266510893213373e-11, 1.546910089464080e-11,
  523. 1.889412592258518e-11, 2.307718220992490e-11,
  524. 2.818672942203327e-11, 3.442710316037366e-11,
  525. 4.204966817018048e-11, 5.135919134271227e-11,
  526. 6.273074786797763e-11, 7.661889201263122e-11,
  527. // 200
  528. 9.358330171196327e-11, 1.143019267753882e-10,
  529. 1.396099167826153e-10, 1.705183920059801e-10,
  530. 2.082735788845278e-10, 2.543834767842491e-10,
  531. 3.107077590612055e-10, 3.794954396016648e-10,
  532. 4.635216515055463e-10, 5.661404892806104e-10,
  533. 6.914932735763221e-10, 8.445820788220271e-10,
  534. 1.031587101304291e-09, 1.259967952077770e-09,
  535. 1.538947681019300e-09, 1.879650592174711e-09,
  536. 2.295841053082368e-09, 2.804108039269473e-09,
  537. 3.424993797807946e-09, 4.183235823312564e-09,
  538. 5.109492567813164e-09, 6.240651650854630e-09,
  539. 7.622470723630660e-09, 9.309953703014609e-09,
  540. 1.137139562283767e-08, 1.388881160360346e-08,
  541. 1.696413754044688e-08, 2.071966056701105e-08,
  542. 2.530753298545001e-08, 3.091008276019684e-08,
  543. 3.775442398336976e-08, 4.611239491146397e-08,
  544. 5.632301501798812e-08, 6.879156104001002e-08,
  545. 8.402411522137500e-08, 1.026248703632157e-07,
  546. 1.253493263032310e-07, 1.530981849317344e-07,
  547. 1.869993328577540e-07, 2.283954331971998e-07,
  548. 2.789703820965002e-07, 3.407255717347445e-07,
  549. 4.161751163160901e-07, 5.083021657140526e-07,
  550. 6.208605585127383e-07, 7.582965471628845e-07,
  551. 9.262152932479593e-07, 1.131243348429578e-06,
  552. 1.381750677989317e-06, 1.687612654971312e-06,
  553. 2.061328504830195e-06, 2.517614221705925e-06,
  554. 3.075136493715169e-06, 3.755823026355034e-06,
  555. 4.587552788474290e-06, 5.602996673366901e-06,
  556. 6.843794758360242e-06, 8.358620144706847e-06,
  557. 1.020967008292656e-05, 1.246945025422475e-05,
  558. 1.523086887102219e-05, 1.860192083272764e-05,
  559. 2.272139580071132e-05, 2.775012613215501e-05,
  560. 3.389544779882663e-05, 4.139684113647092e-05,
  561. 5.056404631634212e-05, 6.175357572143610e-05,
  562. 7.542814171915086e-05, 9.211833800758343e-05,
  563. 1.125153468149895e-04, 1.374085645976000e-04,
  564. 1.678302935465055e-04, 2.049544027080777e-04,
  565. 2.503222397064943e-04, 3.056782429102864e-04,
  566. 3.733227575027256e-04, 4.558456931739724e-04,
  567. 5.566775872841220e-04, 6.796584276296773e-04,
  568. 8.298982533418059e-04, 1.013079388381259e-03,
  569. 1.236799879071809e-03, 1.509444128879166e-03,
  570. 1.842278291863989e-03, 2.247620855799141e-03,
  571. 2.742106207595588e-03, 3.343716405309918e-03,
  572. 4.076852784788600e-03, 4.967507347193811e-03,
  573. 6.051117627655160e-03, 7.364681573940744e-03,
  574. 8.958863753805689e-03, 1.088505212285743e-02,
  575. 1.321388763870185e-02, 1.601387913655473e-02,
  576. 1.937949548174205e-02, 2.339556612555552e-02,
  577. 2.817934173583488e-02, 3.382079060619734e-02,
  578. 4.044464120111045e-02, 4.810974644754662e-02,
  579. 5.689934182811928e-02, 6.675168423575902e-02,
  580. 7.759114407311523e-02, 8.904761297446566e-02,
  581. 1.006540591855666e-01, 1.114010542073269e-01,
  582. 1.200693293287907e-01, 1.245859746888521e-01,
  583. 1.226876554954843e-01, 1.111594205067191e-01,
  584. 8.731995478664586e-02, 4.846500030224664e-02,
  585. -4.956156637375708e-03, -6.947108182097863e-02,
  586. -1.335126953345830e-01, -1.795750728565332e-01,
  587. -1.819110629504884e-01, -1.209847646201776e-01,
  588. 5.791427226916448e-03, 1.534812881363312e-01,
  589. 2.352209731069856e-01, 1.515040026640386e-01,
  590. -8.279085782145131e-02, -2.711543104015952e-01,
  591. -1.331279806376289e-01, 2.242058279665979e-01,
  592. 2.304292248782090e-01, -2.572813803130152e-01,
  593. -1.475549438192476e-01, 3.611935526731244e-01,
  594. -2.435371552288723e-01, 3.811454725614711e-02,
  595. 8.273650321459338e-02, -1.091467781119748e-01,
  596. 8.964328522861212e-02, -6.097788815932206e-02,
  597. 3.780123181837066e-02, -2.243862121105374e-02,
  598. 1.315627818991557e-02, -7.789693311677149e-03,
  599. 4.737032461705975e-03, -2.996529369596568e-03,
  600. 1.987854486046977e-03, -1.386982713556120e-03,
  601. 1.015740041573320e-03, -7.763183089745113e-04,
  602. 6.146040263274792e-04, -5.002069052247894e-04,
  603. 4.157061680153099e-04, -3.508644775971589e-04,
  604. 2.994936403367197e-04, -2.577357341490762e-04,
  605. 2.231048844827660e-04, -1.939428674265101e-04,
  606. 1.691035669098717e-04, -1.477663053511028e-04,
  607. 1.293230643516167e-04, -1.133088634015300e-04,
  608. 9.935787087369453e-05, -8.717517169548774e-05,
  609. 7.651820346514748e-05, -6.718422692060818e-05,
  610. 5.900162548547053e-05, -5.182370043717230e-05,
  611. 4.552413144789780e-05, -3.999355821930881e-05,
  612. 3.513692405823457e-05, -3.087135626461035e-05,
  613. 2.712444449271282e-05, -2.383282162264958e-05,
  614. 2.094097402272335e-05, -1.840022834334601e-05,
  615. 1.616788131114735e-05, -1.420645034584182e-05,
  616. 1.248302592309649e-05, -1.096870811434504e-05,
  617. 9.638113747637144e-06, -8.468945120923146e-06,
  618. 7.441613142631071e-06, -6.538907689594796e-06,
  619. 5.745708304710312e-06, -5.048729864716120e-06,
  620. 4.436299286415519e-06, -3.898159774165185e-06,
  621. 3.425299055300640e-06, -3.009798361246221e-06,
  622. 2.644699605727544e-06, -2.323888735130234e-06,
  623. 2.041993364758909e-06, -1.794292864274530e-06,
  624. 1.576639283761010e-06, -1.385387831873578e-06,
  625. 1.217335820899756e-06, -1.069669061011715e-06,
  626. 9.399147533431300e-07, -8.259000682217990e-07,
  627. 7.257157398665060e-07, -6.376840939530841e-07,
  628. // 400
  629. 5.603309658957991e-07, -4.923610193285461e-07,
  630. 4.326360479415582e-07, -3.801559094539231e-07,
  631. 3.340417795380239e-07, -2.935214398955969e-07,
  632. 2.579163472426386e-07, -2.266302675538730e-07,
  633. 1.991392901933410e-07, -1.749830560542944e-07,
  634. 1.537570500204901e-07, -1.351058266793548e-07,
  635. 1.187170569339987e-07, -1.043162975874935e-07,
  636. 9.166239627647569e-08, -8.054345360702865e-08,
  637. 7.077327442848185e-08, -6.218824944698919e-08,
  638. 5.464461550533503e-08, -4.801604844364623e-08,
  639. 4.219154778426137e-08, -3.707357778095240e-08,
  640. 3.257643398813585e-08, -2.862480813390940e-08,
  641. 2.515252712714758e-08, -2.210144493659511e-08,
  642. 1.942046882050334e-08, -1.706470371165871e-08,
  643. 1.499470045020363e-08, -1.317579520863365e-08,
  644. 1.157752900730261e-08, -1.017313762883149e-08,
  645. 8.939103427741988e-09, -7.854761525494339e-09,
  646. 6.901953769038680e-09, -6.064724650448546e-09,
  647. 5.329054110861765e-09, -4.682622765482983e-09,
  648. 4.114605612289784e-09, -3.615490760147216e-09,
  649. 3.176920140880805e-09, -2.791549544501460e-09,
  650. 2.452925636291220e-09, -2.155377892876758e-09,
  651. 1.893923644634260e-09, -1.664184635389759e-09,
  652. 1.462313704613378e-09, -1.284930364574083e-09,
  653. 1.129064192077534e-09, -9.921050860675488e-10,
  654. 8.717595588633507e-10, -7.660123299045589e-10,
  655. 6.730925786777026e-10, -5.914442910883912e-10,
  656. 5.197002025874266e-10, -4.566589020735369e-10,
  657. 4.012647133825055e-10, -3.525900173049568e-10,
  658. 3.098197178898629e-10, -2.722375929324441e-10,
  659. 2.392143002251476e-10, -2.101968387708856e-10,
  660. 1.846992883946521e-10, -1.622946726187645e-10,
  661. 1.426078085707891e-10, -1.253090242443995e-10,
  662. 1.101086379038488e-10, -9.675210714907983e-11,
  663. 8.501576639446501e-11, -7.470308140061063e-11,
  664. 6.564135815534322e-11, -5.767885098561786e-11,
  665. 5.068222145975428e-11, -4.453430552590912e-11,
  666. 3.913215150436401e-11, -3.438529608259476e-11,
  667. 3.021424943923932e-11, -2.654916412468056e-11,
  668. 2.332866540856460e-11, -2.049882351089608e-11,
  669. 1.801225050660065e-11, -1.582730677850963e-11,
  670. 1.390740372895185e-11, -1.222039107416370e-11,
  671. 1.073801846245205e-11, -9.435462400371624e-12,
  672. 8.290910564095319e-12, -7.285196534694753e-12,
  673. 6.401478841143664e-12, -5.624958936714699e-12,
  674. 4.942633385892820e-12, -4.343076111680976e-12,
  675. 3.816247056854583e-12, -3.353324055246731e-12,
  676. 2.946555097697522e-12, -2.589128518642891e-12,
  677. 2.275058929421262e-12, -1.999086988193079e-12,
  678. 1.756591328117270e-12, -1.543511168961402e-12,
  679. 1.356278316168970e-12, -1.191757408630524e-12,
  680. 1.047193414582761e-12, -9.201654964381461e-13,
  681. 8.085464719703853e-13, -7.104671929827940e-13,
  682. 6.242852449483966e-13, -5.485574434836370e-13,
  683. 4.820156670945356e-13, -4.235456214910329e-13,
  684. 3.721681798548054e-13, -3.270229865892332e-13,
  685. 2.873540499880031e-13, -2.524970825616983e-13,
  686. 2.218683770237039e-13, -1.949550316531413e-13,
  687. 1.713063613517743e-13, -1.505263505679493e-13,
  688. 1.322670217058939e-13, -1.162226079680830e-13,
  689. 1.021244330498886e-13, -8.973641194353509e-14,
  690. 7.885109750931469e-14, -6.928620661062564e-14,
  691. 6.088156763982168e-14, -5.349643831874401e-14,
  692. 4.700714885865928e-14, -4.130503101260246e-14,
  693. 3.629459834036019e-14, -3.189194721306437e-14,
  694. 2.802335178098858e-14, -2.462402937628328e-14,
  695. 2.163705567637205e-14, -1.901241146150821e-14,
  696. 1.670614500365970e-14, -1.467963606029139e-14,
  697. 1.289894914807883e-14, -1.133426526661138e-14,
  698. 9.959382555826870e-15, -8.751277525286314e-15,
  699. 7.689719507742115e-15, -6.756931880732829e-15,
  700. 5.937294383089198e-15, -5.217081541398457e-15,
  701. 4.584232826172386e-15, -4.028150688809716e-15,
  702. 3.539523097325829e-15, -3.110167599068186e-15,
  703. 2.732894299122300e-15, -2.401385459874979e-15,
  704. 2.110089705537303e-15, -1.854129059999304e-15,
  705. 1.629217261290832e-15, -1.431587984759346e-15,
  706. 1.257931773006046e-15, -1.105340616423372e-15,
  707. 9.712592562913251e-16, -8.534423949641643e-16,
  708. 7.499170965983152e-16, -6.589497487925016e-16,
  709. 5.790170318870357e-16, -5.087804097802586e-16,
  710. 4.470637150906226e-16, -3.928334533103688e-16,
  711. 3.451814961285280e-16, -3.033098741093958e-16,
  712. 2.665174140678718e-16, -2.341879973739602e-16,
  713. 2.057802425625493e-16, -1.808184394757190e-16,
  714. 1.588845831226758e-16, -1.396113738580090e-16,
  715. 1.226760666607451e-16, -1.077950665155628e-16,
  716. 9.471917939160380e-17, -8.322943929278698e-17,
  717. 7.313344150029316e-17, -6.426212060448496e-17,
  718. 5.646691937188211e-17, -4.961730103765172e-17,
  719. 4.359856336499476e-17, -3.830991786613391e-17,
  720. 3.366280201995165e-17, -2.957939622304163e-17,
  721. 2.599132063935437e-17, -2.283849012615860e-17,
  722. 2.006810806115271e-17, -1.763378222157133e-17,
  723. 1.549474790998944e-17, -1.361518531745643e-17,
  724. 1.196361969267083e-17, -1.051239427255871e-17,
  725. 9.237207148064648e-18, -8.116704309607398e-18,
  726. 7.132122057424711e-18, -6.266972788687375e-18,
  727. 5.506768899643017e-18, -4.838780179316216e-18,
  728. 4.251820632131413e-18, -3.736061159634172e-18,
  729. // 600
  730. 3.282864964518770e-18, -2.884642920675208e-18,
  731. 2.534726487315339e-18, -2.227256039024718e-18,
  732. 1.957082741736910e-18, -1.719682331465223e-18,
  733. 1.511079351949921e-18, -1.327780582522198e-18,
  734. 1.166716541382233e-18, -1.025190084716866e-18,
  735. 9.008312409083032e-19, -7.915575234972099e-19,
  736. 6.955390583093758e-19, -6.111679407722684e-19,
  737. 5.370313102870695e-19, -4.718876907676534e-19,
  738. 4.146462011511975e-19, -3.643482877427443e-19,
  739. 3.201516724850009e-19, -2.813162483527929e-19,
  740. 2.471916856791182e-19, -2.172065418717432e-19,
  741. 1.908586921555019e-19, -1.677069210972190e-19,
  742. 1.473635341074691e-19, -1.294878651921690e-19,
  743. 1.137805722345515e-19, -9.997862427642855e-20,
  744. 8.785089685693581e-20, -7.719430165048124e-20,
  745. 6.783038559324186e-20, -5.960234254861157e-20,
  746. 5.237238746867620e-20, -4.601944907799879e-20,
  747. 4.043714244041481e-20, -3.553198745789200e-20,
  748. 3.122184346997662e-20, -2.743453374142427e-20,
  749. 2.410663680492846e-20, -2.118242441910240e-20,
  750. 1.861292835641397e-20, -1.635512039302220e-20,
  751. 1.437119176831859e-20, -1.262792004764438e-20,
  752. 1.109611278531706e-20, -9.750118671903616e-21,
  753. 8.567397980805881e-21, -7.528145122423124e-21,
  754. 6.614956985587211e-21, -5.812541511365789e-21,
  755. 5.107461617652140e-21, -4.487910185482492e-21,
  756. 3.943512339081440e-21, -3.465151709308229e-21,
  757. 3.044817771736880e-21, -2.675471703023044e-21,
  758. 2.350928509369901e-21, -2.065753454081455e-21,
  759. 1.815171050414263e-21, -1.594985094847466e-21,
  760. 1.401508399670877e-21, -1.231501046949432e-21,
  761. 1.082116130537259e-21, -9.508520796066248e-22,
  762. 8.355107675059663e-22, -7.341607053512435e-22,
  763. 6.451047024956878e-22, -5.668514489455267e-22,
  764. 4.980905412312518e-22, -4.376705343564336e-22,
  765. 3.845796559678223e-22, -3.379288625754182e-22,
  766. 2.969369534739024e-22, -2.609174906141295e-22,
  767. 2.292673041856001e-22, -2.014563919875952e-22,
  768. 1.770190438740656e-22, -1.555460422525817e-22,
  769. 1.366778079672955e-22, -1.200983777985825e-22,
  770. 1.055301137906078e-22, -9.272905558580399e-23,
  771. 8.148083664639517e-23, -7.159709489187570e-23,
  772. 6.291231754727859e-23, -5.528106802589832e-23,
  773. 4.857554932085610e-23, -4.268346388064600e-23,
  774. 3.750613425528731e-23, -3.295685226039235e-23,
  775. 2.895942787876105e-23, -2.544691315369192e-23,
  776. 2.236048039475426e-23, -1.964843688844607e-23,
  777. 1.726535979915737e-23, -1.517133602902566e-23,
  778. 1.333129356639782e-23, -1.171441336528463e-23,
  779. 1.029361299133160e-23, -9.045094266181886e-24,
  780. 7.947947207266389e-24, -6.983802597398395e-24,
  781. 6.136526075969871e-24, -5.391947793289710e-24,
  782. 4.737623457434066e-24, -4.162624052945447e-24,
  783. 3.657351341563861e-24, -3.213375054547230e-24,
  784. 2.823287629843971e-24, -2.480574676640252e-24,
  785. 2.179502108849238e-24, -1.915020796639139e-24,
  786. 1.682686753114865e-24, -1.478592609598710e-24,
  787. 1.299306570857684e-24, -1.141816901768704e-24,
  788. 1.003481245022785e-24, -8.819804660957208e-25,
  789. 7.752768477813106e-25, -6.815767858002522e-25,
  790. 5.992985900665248e-25, -5.270459063734392e-25,
  791. 4.635862411179793e-25, -4.078328923510551e-25,
  792. 3.588287019442058e-25, -3.157312905756895e-25,
  793. 2.778003181153750e-25, -2.443872105993099e-25,
  794. 2.149270912330287e-25, -1.889318548953116e-25,
  795. 1.659828344765530e-25, -1.457219798327836e-25,
  796. 1.278418979568063e-25, -1.120761165538443e-25,
  797. 9.819063583398694e-26, -8.597706957547351e-26,
  798. 7.524761802539771e-26, -6.583229692872437e-26,
  799. 5.757815308418353e-26, -5.034908817517119e-26,
  800. 4.402475606598968e-26, -3.849819197101101e-26,
  801. 3.367329111558304e-26, -2.946341179122434e-26,
  802. 2.579121784723996e-26, -2.258873118181162e-26,
  803. 1.979667076757990e-26, -1.736329567227616e-26,
  804. 1.524356928842631e-26, -1.339878795333426e-26,
  805. 1.179604582048012e-26, -1.040714749090827e-26,
  806. 9.207194488904074e-27, -8.173124929559144e-27,
  807. 7.282515970348745e-27, -6.513100644712918e-27,
  808. 5.843030126248539e-27, -5.251393008101120e-27,
  809. 4.718791967930222e-27, -4.228406914229241e-27,
  810. 3.767695474750273e-27, -3.329913400113583e-27,
  811. 2.914300433863011e-27, -2.524366823406565e-27,
  812. 2.164690315762398e-27, -1.837673402805216e-27,
  813. 1.542301736687901e-27, -1.275894419058812e-27,
  814. 1.037166283039543e-27, -8.274817350070647e-28,
  815. 6.490942784063843e-28, -5.023466637656253e-28,
  816. 3.845211097313078e-28, -2.909163620505845e-28,
  817. 2.167800946716682e-28, -1.587457861911164e-28,
  818. 1.153739423502031e-28, -8.690036418978894e-29,
  819. 7.435572366263697e-29, -7.847142831542739e-29,
  820. 9.894985212873060e-29, -1.342720280592225e-28,
  821. 1.817424273402145e-28, -2.376361960950870e-28,
  822. 2.977819810711053e-28, -3.586836968065507e-28,
  823. 4.184476666502118e-28, -4.766085106688037e-28,
  824. 5.328777445258146e-28, -5.858824985834212e-28,
  825. 6.329409859706737e-28, -6.709268971860476e-28,
  826. 6.975416172179417e-28, -7.122929261229363e-28,
  827. 7.167821355397955e-28, -7.142209321177599e-28,
  828. 7.084785743816030e-28, -7.032486471839363e-28,
  829. 7.017650479151096e-28, -7.069608472164614e-28,
  830. // 800
  831. 7.214920505613761e-28).finished();
  832. const Real FHTAnderson801::ABSCISSA = 0.7059431685223780; //
  833. const Real FHTAnderson801::ABSE = 1.10517091807564762; // exp(.1)
  834. const Real FHTAnderson801::ABSER = 0.904837418035959573; // 1/exp(.1)
  835. // ==================== LIFECYCLE ==============================
  836. FHTAnderson801::FHTAnderson801(const ctor_key& key ) : HankelTransform( key ),
  837. Lambda(0), NumFun(0),
  838. NumConv(0), NumRel(0),
  839. BesselOrder(-1), Manager(nullptr) {
  840. }
  841. FHTAnderson801::FHTAnderson801( const YAML::Node& node, const ctor_key& key ) : HankelTransform( key ) {
  842. Lambda = node["Lambda"].as<Real>();
  843. NumFun = node["NumFun"].as<int>();
  844. NumConv = node["NumConv"].as<int>();
  845. NumRel = node["NumRel"].as<int>( );
  846. BesselOrder = node["BesselOrder"].as<int>( );
  847. //Manager = KernelEM1DManager::DeSerialize(node["Manager"]);
  848. }
  849. FHTAnderson801::~FHTAnderson801() {
  850. }
  851. std::shared_ptr<FHTAnderson801> FHTAnderson801::NewSP() {
  852. return std::make_shared<FHTAnderson801>( ctor_key() );
  853. }
  854. std::unique_ptr<FHTAnderson801> FHTAnderson801::NewUP() {
  855. return std::make_unique<FHTAnderson801>( ctor_key() );
  856. }
  857. std::shared_ptr<FHTAnderson801> FHTAnderson801::DeSerialize( const YAML::Node& node ) {
  858. if (node.Tag() != "FHTAnderson801") {
  859. throw DeSerializeTypeMismatch( "FHTAnderson801", node.Tag());
  860. }
  861. return std::make_shared<FHTAnderson801> ( node, ctor_key() );
  862. }
  863. YAML::Node FHTAnderson801::Serialize() const {
  864. YAML::Node node = HankelTransform::Serialize();
  865. node.SetTag( GetName() );
  866. node["Lambda"] = Lambda;
  867. node["NumFun"] = NumFun;
  868. node["NumConv"] = NumConv;
  869. node["NumRel"] = NumRel;
  870. node["BesselOrder"] = BesselOrder;
  871. node["Manager"] = Manager->Serialize();
  872. return node;
  873. }
  874. void FHTAnderson801::DeleteSplines() {
  875. splineVecReal.clear();
  876. splineVecImag.clear();
  877. }
  878. //--------------------------------------------------------------------------------------
  879. // Class: FHTAnderson801
  880. // Method: GetName
  881. // Description: Class identifier
  882. //--------------------------------------------------------------------------------------
  883. inline std::string FHTAnderson801::GetName ( ) const {
  884. return CName;
  885. } // ----- end of method FHTAnderson801::GetName -----
  886. // ==================== OPERATIONS ==============================
  887. void FHTAnderson801::ComputeRelated(const Real& rho, std::shared_ptr<KernelEM1DBase> Kernel) {
  888. //this->AttachKernel(Kernel);
  889. this->SetNumConv(1);
  890. icount = 0;
  891. #ifdef LEMMA_SINGLE_PRECISION
  892. Compute(rho, 1, 1e-8);
  893. #else
  894. Compute(rho, 1, 1e-14);
  895. #endif
  896. }
  897. void FHTAnderson801::ComputeRelated(const Real& rho, std::vector< std::shared_ptr<KernelEM1DBase> > KernelVecIn ) {
  898. icount = 0;
  899. this->kernelVec = KernelVecIn;
  900. this->SetNumConv(1);
  901. #ifdef LEMMA_SINGLE_PRECISION
  902. Compute(rho, 1, 1e-8);
  903. #else
  904. Compute(rho, 1, 1e-14);
  905. #endif
  906. }
  907. void FHTAnderson801::ComputeRelated(const Real& rho, std::shared_ptr<KernelEM1DManager> KernelManager) {
  908. icount = 0;
  909. Manager = KernelManager;
  910. this->kernelVec = KernelManager->GetSTLVector();
  911. this->SetNumConv(1);
  912. #ifdef LEMMA_SINGLE_PRECISION
  913. Compute(rho, 1, 1e-8);
  914. #else
  915. Compute(rho, 1, 1e-14);
  916. #endif
  917. }
  918. void FHTAnderson801::ComputeLaggedRelated(const Real& rho, const int& nlag, std::shared_ptr<KernelEM1DManager> KernelManager) {
  919. icount = 0;
  920. Manager = KernelManager;
  921. this->kernelVec = KernelManager->GetSTLVector();
  922. this->SetNumConv(nlag);
  923. #ifdef LEMMA_SINGLE_PRECISION
  924. Compute(rho, 1, 1e-8);
  925. #else
  926. Compute(rho, 1, 1e-14);
  927. #endif
  928. DeleteSplines();
  929. // Now do cubic spline
  930. // TODO Check that knots are set in right order, Eigen has reverse()
  931. //std::cout << "Arg\n" << Arg << std::endl;
  932. //std::cout << "Zans\n" << Zans.col(0) << std::endl;
  933. for (int ii=0; ii<Zans.cols(); ++ii) {
  934. auto Spline = CubicSplineInterpolator::NewSP();
  935. Spline->SetKnots( Arg, Zans.col(ii).real() );
  936. splineVecReal.push_back(Spline);
  937. auto SplineI = CubicSplineInterpolator::NewSP();
  938. SplineI->SetKnots( Arg, Zans.col(ii).imag() );
  939. splineVecImag.push_back(SplineI);
  940. }
  941. }
  942. void FHTAnderson801::SetLaggedArg(const Real& rho) {
  943. for (int i=0; i<Zans.cols(); ++ i) {
  944. Zans(0, i) = Complex( splineVecReal[i]->Interpolate(rho),
  945. splineVecImag[i]->Interpolate(rho) );
  946. }
  947. }
  948. Complex FHTAnderson801::Zgauss(const int &ikk, const EMMODE &imode,
  949. const int &itype, const Real &rho,
  950. const Real &wavef, KernelEM1DBase* Kernel) {
  951. // TODO, right here we want to return the splined solution instead in the
  952. // case of lagged convolution!
  953. return Zans(0, Kernel->GetManagerIndex()); //Complex(0,0);
  954. }
  955. void FHTAnderson801::SetNumConv(const int &i) {
  956. this->NumConv = i;
  957. }
  958. Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic> FHTAnderson801::GetAnswer() {
  959. return this->Zans;
  960. }
  961. ///////////////////////////////////////////
  962. // Computes the transform
  963. void FHTAnderson801::Compute(const Real &rho, const int& ntol, const Real &tol) {
  964. Real y1 = this->ABSCISSA/rho;
  965. //this->Key.setZero(801);
  966. this->Key.setZero( );
  967. //std::memset(Key, 0, 801*sizeof(int));
  968. // Check to make sure everything is set
  969. #ifndef NDEBUG
  970. if (rho<=0) {
  971. throw std::runtime_error("In Hankel 2 Argument rho < 0.");
  972. }
  973. if (this->NumConv<1) {
  974. throw std::runtime_error("In FHTAnderson801 NumConv is less than 1.");
  975. }
  976. if (this->kernelVec.empty()) {
  977. throw std::runtime_error("In FHTAnderson801 Unset Kernel Calculator");
  978. }
  979. #endif
  980. //if (rho<=1e-5) {
  981. // std::cout << "Extremely small rho argument" << std::endl;
  982. //}
  983. // only marginally faster even for best case
  984. //if (cacheResults) Manager->FindCache(rho);
  985. Arg = VectorXr::Zero(this->NumConv);
  986. Lambda = std::pow(rho*ABSER, this->NumConv-1);
  987. #ifndef NDEBUG
  988. if (Lambda <= 0) {
  989. std::cerr << "Exponent Underflow Error";
  990. throw std::underflow_error("Exponent underflow");
  991. }
  992. #endif
  993. int itol = 0;
  994. int none = 0;
  995. this->NumFun = 0;
  996. int idx = 0;
  997. int istore = 0;
  998. Complex Zsum(0.);
  999. Complex Cmax(0.);
  1000. Complex C(0.);
  1001. // Curiously critical piece of code
  1002. //this->Zwork.resize(801, (int)(this->kernelVec.size()));
  1003. this->Zwork.resize(Eigen::NoChange, (int)(this->kernelVec.size()));
  1004. //Zans.resize(this->NumConv, (int)(this->kernelVec.size()));
  1005. //Zans.setZero();
  1006. //Zwork = Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic>::Zero(801, (int)(this->kernelVec.size()));
  1007. Zans = Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic>::Zero(this->NumConv, (int)(this->kernelVec.size()));
  1008. // 1010 Loop
  1009. for (int ilag=0; ilag < this->NumConv; ++ilag) {
  1010. istore = this->NumConv - 1 - ilag;
  1011. if (ilag > 0) y1 *= ABSE;
  1012. Arg(istore) = ABSCISSA/y1;
  1013. // 1000 Loop
  1014. for (unsigned int irel=0; irel < this->kernelVec.size(); ++irel) {
  1015. // fiter weight switch here
  1016. this->BesselOrder = this->kernelVec[irel]->GetBesselOrder();
  1017. none = 0;
  1018. itol = ntol;
  1019. Zsum = Complex(0,0);
  1020. Cmax = Complex(0,0);
  1021. Lambda = y1;
  1022. // Begin right side convolution at weight 298
  1023. // counting from 0
  1024. idx = 298;
  1025. Lambda *= ABSE;
  1026. // Code Block 20 in Anderson
  1027. do {
  1028. this->StoreRetreive(idx, ilag, Zsum, irel, C, rho);
  1029. Cmax = Complex(std::max(std::abs(real(C)), std::real(Cmax)),
  1030. std::max(std::abs(imag(C)), std::imag(Cmax)) );
  1031. ++idx;
  1032. Lambda *= ABSE;
  1033. } while (idx < 339);
  1034. if (real(Cmax) == 0 && imag(Cmax) == 0) none = 1;
  1035. Cmax *= tol;
  1036. // Code Block 30 in Anderson
  1037. do {
  1038. this->StoreRetreive(idx, ilag, Zsum, irel, C, rho);
  1039. if ( std::abs(real(C)) <= real(Cmax) &&
  1040. std::abs(imag(C)) <= imag(Cmax) ) {
  1041. --itol;
  1042. if (itol < 0 || idx > 800) break;
  1043. } else {
  1044. itol = ntol;
  1045. }
  1046. ++idx;
  1047. Lambda *= ABSE;
  1048. } while (idx < 801);
  1049. itol = ntol;
  1050. Lambda = y1;
  1051. // Code Block 60 in Anderson
  1052. idx = 297;
  1053. do {
  1054. this->StoreRetreive(idx, ilag, Zsum, irel, C, rho);
  1055. if ( std::abs(real(C)) <= real(Cmax) &&
  1056. std::abs(imag(C)) <= imag(Cmax) &&
  1057. none == 0 ) {
  1058. --itol;
  1059. if (itol < 0 || idx < 0) break;
  1060. } else {
  1061. itol = ntol;
  1062. }
  1063. --idx;
  1064. Lambda *= ABSER;
  1065. } while (idx>=0);
  1066. Zans(istore, irel) = Zsum/Arg(istore);
  1067. } // End of 1000 loop
  1068. } // End of 1010 loop
  1069. }
  1070. }