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.

FHTKey201.cpp 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. /* This file is part of Lemma, a geophysical modelling and inversion API.
  2. * More information is available at http://lemmasoftware.org
  3. */
  4. /* This Source Code Form is subject to the terms of the Mozilla Public
  5. * License, v. 2.0. If a copy of the MPL was not distributed with this
  6. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  7. */
  8. /**
  9. * @file
  10. * @date 02/11/2014 03:42:53 PM
  11. * @author Trevor Irons (ti)
  12. * @email Trevor.Irons@lemmasoftware.org
  13. * @copyright Copyright (c) 2014, Trevor Irons
  14. */
  15. #include "FHTKey201.h"
  16. namespace Lemma {
  17. // ==================== FRIEND METHODS =====================
  18. std::ostream &operator<<(std::ostream &stream, const FHTKey201 &ob) {
  19. stream << ob.Serialize() << "\n";
  20. return stream;
  21. }
  22. // ==================== STATIC CONST MEMBERS ============
  23. const Eigen::Matrix<Real, 201, 3> FHTKey201::WT201 =
  24. ( Eigen::Matrix<Real, 201, 3>() <<
  25. // Base J0 J1
  26. 4.1185887075357082e-06, 1.5020099209519960e-03, 4.7827871332506182e-10
  27. , 4.6623077830484039e-06,-1.0381698214761684e-02,-2.9784175503440788e-09
  28. , 5.2778064058937756e-06, 3.6840860097595164e-02, 9.7723832770897220e-09
  29. , 5.9745606155328603e-06,-8.9903380392274704e-02,-2.2382340996085809e-08
  30. , 6.7632974390298035e-06, 1.7082286536833860e-01, 4.0446774329470848e-08
  31. , 7.6561600412698171e-06,-2.7115749656836280e-01,-6.1734815854553919e-08
  32. , 8.6668946776271221e-06, 3.7649328091859574e-01, 8.3293912185608189e-08
  33. , 9.8110623273521872e-06,-4.7220778569122657e-01,-1.0249453502284080e-07
  34. , 1.1106278265924788e-05, 5.4778211089647089e-01, 1.1780779749909977e-07
  35. , 1.2572483264760042e-05,-5.9823516853035097e-01,-1.2870061460834850e-07
  36. , 1.4232250593579901e-05, 6.2345791612185331e-01, 1.3559243438349901e-07
  37. , 1.6111133551969887e-05,-6.2650436648257724e-01,-1.3921010821521872e-07
  38. , 1.8238058880617237e-05, 6.1197225351173345e-01, 1.4065745722769670e-07
  39. , 2.0645772109076137e-05,-5.8470173866140451e-01,-1.4074881908375281e-07
  40. , 2.3371341696506312e-05, 5.4911055789616858e-01, 1.4051720878600928e-07
  41. , 2.6456729726989950e-05,-5.0878861684860843e-01,-1.4040746687777830e-07
  42. , 2.9949437945688260e-05, 4.6652106345430200e-01, 1.4127886061686993e-07
  43. , 3.3903239082024059e-05,-4.2426478870289325e-01,-1.4315595655055356e-07
  44. , 3.8379004719130766e-05, 3.8339538911933357e-01, 1.4689283208027915e-07
  45. , 4.3445642455208216e-05,-3.4472344791723936e-01,-1.5210916706348747e-07
  46. , 4.9181156785051293e-05, 3.0876891466890510e-01, 1.5989801550138741e-07
  47. , 5.5673850034776868e-05,-2.7570439368364807e-01,-1.6940918407911260e-07
  48. , 6.3023681838995322e-05, 2.4562331000974616e-01, 1.8227089415749844e-07
  49. , 7.1343808090545215e-05,-2.1839207265400126e-01,-1.9695856878603369e-07
  50. , 8.0762323056016586e-05, 1.9393194321380827e-01, 2.1603952427106760e-07
  51. , 9.1424231478173270e-05,-1.7198162962644575e-01,-2.3691320619292838e-07
  52. , 1.0349368102719458e-04, 1.5242270280410272e-01, 2.6369843208466607e-07
  53. , 1.1715648947091054e-04,-1.3494945901825492e-01,-2.9202021404039016e-07
  54. , 1.3262300547161834e-04, 1.1946763189654602e-01, 3.2852445086324662e-07
  55. , 1.5013134705348249e-04,-1.0565870880444576e-01,-3.6589094553627693e-07
  56. , 1.6995106759902750e-04, 9.3482355548033913e-02, 4.1487501036863030e-07
  57. , 1.9238730581535294e-04,-8.2612525279836244e-02,-4.6327136995173986e-07
  58. , 2.1778548356175115e-04, 7.3077763526174969e-02, 5.2852697369750518e-07
  59. , 2.4653662386513240e-04,-6.4536481281701225e-02,-5.9034983719954077e-07
  60. , 2.7908337099788406e-04, 5.7096310621587334e-02, 6.7710211611560898e-07
  61. , 3.1592680530155527e-04,-5.0384859605213800e-02,-7.5512942807901028e-07
  62. , 3.5763415767542709e-04, 4.4599557396733047e-02, 8.7062473466409799e-07
  63. , 4.0484754250000483e-04,-3.9316995063444334e-02,-9.6788530918130449e-07
  64. , 4.5829384344501882e-04, 3.4838544754296139e-02, 1.1222658353725904e-06
  65. , 5.1879590436097246e-04,-3.0664946477420088e-02,-1.2417228058919743e-06
  66. , 5.8728519754599128e-04, 2.7221072240291456e-02, 1.4493467036899140e-06
  67. , 6.6481616442494776e-04,-2.3901586108434601e-02,-1.5932456559208080e-06
  68. , 7.5258244942583781e-04, 2.1281566646364738e-02, 1.8747045814274419e-06
  69. , 8.5193527698548301e-04,-1.8612484595521447e-02,-2.0433320340041385e-06
  70. , 9.6440425461164468e-04, 1.6655386303461400e-02, 2.4285695351967146e-06
  71. , 1.0917209222795108e-03,-1.4472420076504743e-02,-2.6179926456520528e-06
  72. , 1.2358454107222641e-03, 1.3057747649606617e-02, 3.1511729661391781e-06
  73. , 1.3989966190390965e-03,-1.1226286001060300e-02,-3.3492412032881268e-06
  74. , 1.5836863762264436e-03, 1.0266818557930830e-02, 4.0964186613549959e-06
  75. , 1.7927581125735061e-03,-8.6738022421653585e-03,-4.2758275751239154e-06
  76. , 2.0294306362957340e-03, 8.1103368670848164e-03, 5.3371197552207799e-06
  77. , 2.2973476893787268e-03,-6.6573628142085938e-03,-5.4435423773626499e-06
  78. , 2.6006340455800008e-03, 6.4551189810889585e-03, 6.9725766921672099e-06
  79. , 2.9439590142573526e-03,-5.0524015117839084e-03,-6.9045562968161745e-06
  80. , 3.3326083277104117e-03, 5.1989014270506263e-03, 9.1397025436977438e-06
  81. , 3.7725655187922052e-03,-3.7597430078747883e-03,-8.7148373033635960e-06
  82. , 4.2706040416570154e-03, 4.2640545165292636e-03, 1.2029590806160379e-05
  83. , 4.8343915539089625e-03,-2.6994965688974474e-03,-1.0927976968519436e-05
  84. , 5.4726079656493079e-03, 3.5928000560587229e-03, 1.5912526719455299e-05
  85. , 6.1950790728715292e-03,-1.8061291289989019e-03,-1.3582559661331659e-05
  86. , 7.0129278325854246e-03, 3.1436470898586703e-03, 2.1176226828087565e-05
  87. , 7.9387456086585442e-03,-1.0244200001620755e-03,-1.6678205993448338e-05
  88. , 8.9867860248264830e-03, 2.8888297674091743e-03, 2.8384979250408712e-05
  89. , 1.0173184409377162e-02,-3.0605070741955765e-04,-2.0132088397797457e-05
  90. , 1.1516206210016314e-02, 2.8125907445050334e-03, 3.8372045311188108e-05
  91. , 1.3036528203437736e-02, 3.9337862066047565e-04,-2.3702184335455945e-05
  92. , 1.4757556829019875e-02, 2.9102041487017727e-03, 5.2385308850007940e-05
  93. , 1.6705788547622769e-02, 1.1170884769911178e-03,-2.6854373943701261e-05
  94. , 1.8911217773465227e-02, 3.1876763415953362e-03, 7.2318581557902158e-05
  95. , 2.1407798659484324e-02, 1.9097806429850762e-03,-2.8535361884516687e-05
  96. , 2.4233967845691123e-02, 3.6621020321465411e-03, 1.0108123118106823e-04
  97. , 2.7433236218606032e-02, 2.8203783587849949e-03,-2.6788477540644352e-05
  98. , 3.1054858792331431e-02, 4.3626885599390430e-03, 1.4319185407094621e-04
  99. , 3.5154593024557458e-02, 3.9050024915686802e-03,-1.8108424211338017e-05
  100. , 3.9795557242315927e-02, 5.3324923486866077e-03, 2.0573561552327273e-04
  101. , 4.5049202393557801e-02, 5.2303399394270488e-03, 3.6361648565843316e-06
  102. , 5.0996412085361466e-02, 6.6309348458396984e-03, 2.9991264692859609e-04
  103. , 5.7728747844643331e-02, 6.8775540687037451e-03, 4.8993332079278846e-05
  104. , 6.5349858773045680e-02, 8.3371689988226087e-03, 4.4354733854670903e-04
  105. , 7.3977077298642363e-02, 8.9468564745410102e-03, 1.3589101811995494e-04
  106. , 8.3743225592195963e-02, 1.0554326601376745e-02, 6.6515823521273764e-04
  107. , 9.4798660459030126e-02, 1.1562765604509096e-02, 2.9451991608624389e-04
  108. , 1.0731358818908403e-01, 1.3414536265660639e-02, 1.0105553806271136e-03
  109. , 1.2148068500391276e-01, 1.4879837399735491e-02, 5.7533964792254050e-04
  110. , 1.3751806344428075e-01, 1.7084241336519569e-02, 1.5535077418254303e-03
  111. , 1.5567263036799733e-01, 1.9088092654441269e-02, 1.0621193133794828e-03
  112. , 1.7622388825676111e-01, 2.1768513715084332e-02, 2.4128970258747457e-03
  113. , 1.9948823835583873e-01, 2.4416120601223806e-02, 1.8929698186109245e-03
  114. , 2.2582385189647586e-01, 2.7711234465350204e-02, 3.7800177772191607e-03
  115. , 2.5563618439697788e-01, 3.1127164234404547e-02, 3.2937343278959356e-03
  116. , 2.8938421793905067e-01, 3.5184140220277452e-02, 5.9612179800391544e-03
  117. , 3.2758752752368947e-01, 3.9497913113638941e-02, 5.6295935320552241e-03
  118. , 3.7083428029819565e-01, 4.4449762157204989e-02, 9.4422526803168080e-03
  119. , 4.1979029080811425e-01, 4.9758433269983887e-02, 9.4810228247137925e-03
  120. , 4.7520927168614446e-01, 5.5667457114992429e-02, 1.4979159139973408e-02
  121. , 5.3794443759467447e-01, 6.1949790434151823e-02, 1.5745093424331037e-02
  122. , 6.0896164107289685e-01, 6.8682064905571841e-02, 2.3708966370000140e-02
  123. , 6.8935424252422239e-01, 7.5616743950118387e-02, 2.5740590762136872e-02
  124. , 7.8035994327803426e-01, 8.2584983563572259e-02, 3.7232782843117498e-02
  125. , 8.8337984088275090e-01, 8.9193635262987042e-02, 4.1225008900614292e-02
  126. , 1.0000000000000000e+00, 9.4874686942005279e-02, 5.7507103212277359e-02
  127. , 1.1320158709991752e+00, 9.8891681869094042e-02, 6.4044642846235691e-02
  128. , 1.2814599321940212e+00, 1.0004294654495730e-01, 8.6091796551857253e-02
  129. , 1.4506329812931589e+00, 9.7016844329802857e-02, 9.4717139804457451e-02
  130. , 1.6421395578187052e+00, 8.7789596149914384e-02, 1.2172497389177185e-01
  131. , 1.8589280418463421e+00, 7.0509767592855419e-02, 1.2853597000398900e-01
  132. , 2.1043360464154781e+00, 4.2778853484849347e-02, 1.5450777327408322e-01
  133. , 2.3821418024579781e+00, 3.5584532926218175e-03, 1.4755964090969320e-01
  134. , 2.6966223273530128e+00,-4.7210453264879347e-02, 1.5621399202016978e-01
  135. , 3.0526192726543444e+00,-1.0489787743225988e-01, 1.1147620703185755e-01
  136. , 3.4556134647626755e+00,-1.6020950407348281e-01, 7.7489831356083380e-02
  137. , 3.9118092861497971e+00,-1.9459781573132096e-01,-2.7628266850147711e-02
  138. , 4.4282301962435247e+00,-1.8490774599542381e-01,-1.0198730178317840e-01
  139. , 5.0128268625854631e+00,-1.0754165020025190e-01,-2.2039889971111640e-01
  140. , 5.6745995670177445e+00, 3.6037727487476613e-02,-2.1185762869925318e-01
  141. , 6.4237367714291338e+00, 1.9759013047489976e-01,-1.6052415083152241e-01
  142. , 7.2717719763787807e+00, 2.6132313321851336e-01, 9.1649025798681089e-02
  143. , 8.2317612875478190e+00, 1.1713996822458939e-01, 2.3792823877700942e-01
  144. , 9.3184844237807365e+00,-1.8758779281301441e-01, 2.6075777853738125e-01
  145. , 1.0548672261378394e+01,-3.0238114997462151e-01,-1.5662188259001042e-01
  146. , 1.1941264417849103e+01, 4.8163135684567732e-02,-2.8932081756330175e-01
  147. , 1.3517700840802913e+01, 3.6399529664885466e-01, 1.3148519116247689e-02
  148. , 1.5302251891207787e+01,-1.4910233461562913e-01, 4.2691302759079564e-01
  149. , 1.7322392002874359e+01,-2.6373490348543854e-01,-4.0005050006489040e-01
  150. , 1.9609222670922968e+01, 4.0362661807718703e-01, 1.1513789407450359e-01
  151. , 2.2197951281441636e+01,-3.1409794650104578e-01, 9.3748244358717620e-02
  152. , 2.5128433154258410e+01, 1.8179369405131079e-01,-1.6037231301955096e-01
  153. , 2.8445785143962375e+01,-9.0738718042631769e-02, 1.5071857939129532e-01
  154. , 3.2201080245997971e+01, 4.2946487545160242e-02,-1.2120369075996129e-01
  155. , 3.6452133901787732e+01,-2.0586135807067835e-02, 9.4110656079982341e-02
  156. , 4.1264394108610787e+01, 1.0392667161913182e-02,-7.3742238434584328e-02
  157. , 4.6711949038112273e+01,-5.6117848068723023e-03, 5.9038567576124905e-02
  158. , 5.2878667676447755e+01, 3.2402025511569896e-03,-4.8288117528475852e-02
  159. , 5.9859491047029913e+01,-1.9858724388273777e-03, 4.0197054299576880e-02
  160. , 6.7761893895170928e+01, 1.2807317326135252e-03,-3.3919787720641081e-02
  161. , 7.6707539338295589e+01,-8.6253791756068252e-04, 2.8918247156763971e-02
  162. , 8.6834151956244213e+01, 6.0296590782143555e-04,-2.4845271759013743e-02
  163. , 9.8297638159222487e+01,-4.3548936996943465e-04, 2.1470449751150148e-02
  164. , 1.1127448647797397e+02, 3.2375891570874245e-04,-1.8635828020057092e-02
  165. , 1.2596448473034971e+02,-2.4698212240059978e-04, 1.6229579362363859e-02
  166. , 1.4259379589698909e+02, 1.9279062274925971e-04,-1.4170085406786529e-02
  167. , 1.6141844006140866e+02,-1.5357911509105972e-04, 1.2396084121011890e-02
  168. , 1.8272823602144376e+02, 1.2453787849367440e-04,-1.0860414401084047e-02
  169. , 2.0685126325595743e+02,-1.0255126402954421e-04, 9.5259444245356633e-03
  170. , 2.3415891294197226e+02, 8.5558482209476271e-05,-8.3628577447233381e-03
  171. , 2.6507160578622688e+02,-7.2170928476334345e-05, 7.3468029551253195e-03
  172. , 3.0006526470124555e+02, 6.1436863283080017e-05,-6.4576043210966359e-03
  173. , 3.3967864197737873e+02,-5.2693349406473615e-05, 5.6783439955994880e-03
  174. , 3.8452161375783919e+02, 4.5471255142623729e-05,-4.9946949167265437e-03
  175. , 4.3528456951608860e+02,-3.9433284158653591e-05, 4.3944258108608806e-03
  176. , 4.9274904109325632e+02, 3.4332971164795619e-05,-3.8670264019660858e-03
  177. , 5.5779973493719069e+02,-2.9987212220165472e-05, 3.4034180355556670e-03
  178. , 6.3143815278803334e+02, 2.6257657435614391e-05,-2.9957260668529964e-03
  179. , 7.1479801051045558e+02,-2.3037978256349448e-05, 2.6370977166248776e-03
  180. , 8.0916269245647072e+02, 2.0245071331016652e-05,-2.3215540117372982e-03
  181. , 9.1598501008114988e+02,-1.7812925644382519e-05, 2.0438677474690805e-03
  182. , 1.0369095690092008e+03, 1.5688305607849465e-05,-1.7994616759226389e-03
  183. , 1.1737980889093292e+03,-1.3827679492110470e-05, 1.5843226896713463e-03
  184. , 1.3287580659938624e+03, 1.2195005442258958e-05,-1.3949288614414647e-03
  185. , 1.5041752194232211e+03,-1.0760110818279243e-05, 1.2281869708886250e-03
  186. , 1.7027502211507524e+03, 9.4974857670959145e-06,-1.0813786997088304e-03
  187. , 1.9275402746900081e+03,-8.3853711343938338e-06, 9.5211407460757294e-04
  188. , 2.1820061829391980e+03, 7.4050612540713192e-06,-8.3829103020448140e-04
  189. , 2.4700656297055034e+03,-6.5403682860228500e-06, 7.3806018220987763e-04
  190. , 2.7961534952362003e+03, 5.7772102413267325e-06,-6.4979406671247244e-04
  191. , 3.1652901343571971e+03,-5.1032933218796731e-06, 5.7206022901230412e-04
  192. , 3.5831586684094545e+03, 4.5078641320869195e-06,-5.0359764543483573e-04
  193. , 4.0561924809477755e+03,-3.9815111951817114e-06, 4.4329604122300101e-04
  194. , 4.5916742642604040e+03, 3.5159993210292339e-06,-3.9017773206623073e-04
  195. , 5.1978481416012310e+03,-3.1041249680128287e-06, 3.4338166974098888e-04
  196. , 5.8840465913361650e+03, 2.7395854235553632e-06,-3.0214941633163506e-04
  197. , 6.6608341270911405e+03,-2.4168587823583312e-06, 2.6581280850704716e-04
  198. , 7.5401699459601114e+03, 2.1310948134441218e-06,-2.3378310479588391e-04
  199. , 8.5355920488578286e+03,-1.8780185742021288e-06, 2.0554143583887405e-04
  200. , 9.6624256676814348e+03, 1.6538488252707735e-06,-1.8063040107732216e-04
  201. , 1.0938019208165191e+04,-1.4552318768651144e-06, 1.5864667598176302e-04
  202. , 1.2382011340936813e+04, 1.2791890865306748e-06,-1.3923451235168759e-04
  203. , 1.4016633352832258e+04,-1.1230741959148155e-06, 1.2208003098625932e-04
  204. , 1.5867051413382505e+04, 9.8453630538596172e-07,-1.0690622166177854e-04
  205. , 1.7961754025908867e+04,-8.6148574493190796e-07, 9.3468580362568137e-05
  206. , 2.0332990628312182e+04, 7.5206242699701732e-07,-8.1551328581234316e-05
  207. , 2.3017268096126892e+04,-6.5460810334682633e-07, 7.0964174631531072e-05
  208. , 2.6055912791858576e+04, 5.6764451596029765e-07,-6.1539592468666665e-05
  209. , 2.9495706813754354e+04,-4.8985884555184997e-07, 5.3130609116145443e-05
  210. , 3.3389608239508460e+04, 4.2009674106879252e-07,-4.5609105983126460e-05
  211. , 3.7797566453568354e+04,-3.5736212641225517e-07, 3.8864648584181207e-05
  212. , 4.2787445110585410e+04, 3.0082215969939671e-07,-3.2803856352344075e-05
  213. , 4.8436066944688770e+04,-2.4981510481639669e-07, 2.7350296775876261e-05
  214. , 5.4830396510166145e+04, 2.0385823466866512e-07,-2.2444816150805301e-05
  215. , 6.2068879062685897e+04,-1.6265189071584773e-07, 1.8046076281584239e-05
  216. , 7.0262956194088882e+04, 1.2607416700611311e-07,-1.4130826937491561e-05
  217. , 7.9538781555028458e+04,-9.4158417913450858e-08, 1.0693106849359383e-05
  218. , 9.0039163080228551e+04, 6.7043911217063425e-08,-7.7412053314530284e-06
  219. , 1.0192576161830177e+05,-4.4891090827293947e-08, 5.2910576443698300e-06
  220. , 1.1538157981559623e+05, 2.7761325666544702e-08,-3.3552268362550323e-06
  221. , 1.3061377957221285e+05,-1.5480404355710375e-08, 1.9282956206367452e-06
  222. , 1.4785687144693290e+05, 7.5327300141098751e-09,-9.7253712572058755e-07
  223. , 1.6737632511421290e+05,-3.0524770418657847e-09, 4.1100807632959352e-07
  224. , 1.8947265645880660e+05, 9.5877856096830783e-10,-1.3553176263207053e-07
  225. , 2.1448605423174356e+05,-2.0575286298055636e-10, 3.0748587523233524e-08
  226. , 2.4280161749832361e+05, 2.2414416956474645e-11,-3.5668195345476294e-09 ).finished();
  227. // ==================== LIFECYCLE =======================
  228. //--------------------------------------------------------------------------------------
  229. // Class: FHTKey201
  230. // Method: FHTKey201
  231. // Description: constructor (locked)
  232. //--------------------------------------------------------------------------------------
  233. FHTKey201::FHTKey201 (const ctor_key& key ) : HankelTransform( key ) {
  234. } // ----- end of method FHTKey201::FHTKey201 (constructor) -----
  235. //--------------------------------------------------------------------------------------
  236. // Class: FHTKey201
  237. // Method: FHTKey201
  238. // Description: constructor (locked)
  239. //--------------------------------------------------------------------------------------
  240. FHTKey201::FHTKey201( const YAML::Node& node, const ctor_key& key) : HankelTransform(node, key) {
  241. }
  242. //--------------------------------------------------------------------------------------
  243. // Class: FHTKey201
  244. // Method: NewSP()
  245. // Description: public constructor
  246. //--------------------------------------------------------------------------------------
  247. std::shared_ptr<FHTKey201> FHTKey201::NewSP() {
  248. return std::make_shared<FHTKey201>( ctor_key() );
  249. }
  250. //--------------------------------------------------------------------------------------
  251. // Class: FHTKey201
  252. // Method: ~FHTKey201
  253. // Description: destructor
  254. //--------------------------------------------------------------------------------------
  255. FHTKey201::~FHTKey201 () {
  256. } // ----- end of method FHTKey201::~FHTKey201 (destructor) -----
  257. //--------------------------------------------------------------------------------------
  258. // Class: FHTKey201
  259. // Method: DeSerialize
  260. // Description: Factory method, converts YAML node into object
  261. //--------------------------------------------------------------------------------------
  262. std::shared_ptr<FHTKey201> FHTKey201::DeSerialize( const YAML::Node& node ) {
  263. if (node.Tag() != "FHTKey201") {
  264. throw DeSerializeTypeMismatch( "FHTKey201", node.Tag());
  265. }
  266. return std::make_shared<FHTKey201> ( node, ctor_key() );
  267. }
  268. //--------------------------------------------------------------------------------------
  269. // Class: FHTKey201
  270. // Method: Serialize
  271. // Description: Converts object into Serialized version
  272. //--------------------------------------------------------------------------------------
  273. YAML::Node FHTKey201::Serialize() const {
  274. YAML::Node node = HankelTransform::Serialize();
  275. node.SetTag( GetName() );
  276. //node["LayerConductivity"] = LayerConductivity;
  277. return node;
  278. }
  279. //--------------------------------------------------------------------------------------
  280. // Class: FHTKey201
  281. // Method: GetName
  282. // Description: Class identifier
  283. //--------------------------------------------------------------------------------------
  284. inline std::string FHTKey201::GetName ( ) const {
  285. return CName;
  286. } // ----- end of method FHTKey201::GetName -----
  287. //--------------------------------------------------------------------------------------
  288. // Class: FHTKey201
  289. // Method: Zgauss
  290. //--------------------------------------------------------------------------------------
  291. Complex FHTKey201::Zgauss ( const int &ikk, const EMMODE &imode,
  292. const int &itype, const Real &rho,
  293. const Real &wavef, KernelEM1DBase* Kernel ) {
  294. return Zans(0, Kernel->GetManagerIndex());
  295. } // ----- end of method FHTKey201::ComputeRelated -----
  296. //--------------------------------------------------------------------------------------
  297. // Class: FHTKey201
  298. // Method: ComputeRelated
  299. //--------------------------------------------------------------------------------------
  300. void FHTKey201::ComputeRelated ( const Real& rho, std::shared_ptr<KernelEM1DBase> Kernel ) {
  301. return ;
  302. } // ----- end of method FHTKey201::ComputeRelated -----
  303. //--------------------------------------------------------------------------------------
  304. // Class: FHTKey201
  305. // Method: ComputeRelated
  306. //--------------------------------------------------------------------------------------
  307. void FHTKey201::ComputeRelated ( const Real& rho, std::vector< std::shared_ptr<KernelEM1DBase> > KernelVec ) {
  308. return ;
  309. } // ----- end of method FHTKey201::ComputeRelated -----
  310. //--------------------------------------------------------------------------------------
  311. // Class: FHTKey201
  312. // Method: ComputeRelated
  313. //--------------------------------------------------------------------------------------
  314. void FHTKey201::ComputeRelated ( const Real& rho, std::shared_ptr<KernelEM1DManager> KernelManager ) {
  315. //kernelVec = KernelManager->GetSTLVector();
  316. int nrel = (int)(KernelManager->GetSTLVector().size());
  317. Eigen::Matrix<Complex, 201, Eigen::Dynamic > Zwork;
  318. Zans= Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic>::Zero(1, nrel);
  319. Zwork.resize(201, nrel);
  320. VectorXr lambda = WT201.col(0).array()/rho;
  321. int NumFun = 0;
  322. int idx = 0;
  323. // Get Kernel values
  324. for (int ir=0; ir<lambda.size(); ++ir) {
  325. // irelated loop
  326. ++NumFun;
  327. KernelManager->ComputeReflectionCoeffs(lambda(ir), idx, rho);
  328. for (int ir2=0; ir2<nrel; ++ir2) {
  329. // Zwork* needed due to sign convention of filter weights
  330. Zwork(ir, ir2) = std::conj(KernelManager->GetSTLVector()[ir2]->RelBesselArg(lambda(ir)));
  331. }
  332. }
  333. // We diverge slightly from Key here, each kernel is evaluated seperately, whereby instead
  334. // they prefer to sum them. The reason is that all those terms have been removed from the kernels
  335. // in the interests of making them as generic and reusable as possible. This approach requires slightly
  336. // more multiplies, but the same number of kernel evaluations, which is the expensive part.
  337. // Inner product and scale
  338. for (int ir2=0; ir2<nrel; ++ir2) {
  339. Zans(0, ir2) = Zwork.col(ir2).dot(WT201.col(KernelManager->GetSTLVector()[ir2]->GetBesselOrder() + 1))/rho;
  340. }
  341. return ;
  342. } // ----- end of method FHTKey201::ComputeRelated -----
  343. //--------------------------------------------------------------------------------------
  344. // Class: FHTKey201
  345. // Method: ComputeLaggedRelated
  346. //--------------------------------------------------------------------------------------
  347. void FHTKey201::ComputeLaggedRelated ( const Real& rho, const int& nlag, std::shared_ptr<KernelEM1DManager> KernelManager ) {
  348. int nrel = (int)(KernelManager->GetSTLVector().size());
  349. Eigen::Matrix< Complex, Eigen::Dynamic, Eigen::Dynamic > Zwork;
  350. Zans= Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic>::Zero(nlag, nrel);
  351. Zwork.resize(201+nlag, nrel); // Zwork needs to be expanded to filter length + nlag
  352. // lambda needs to be expanded to include lagged results
  353. VectorXr lambda = (VectorXr(201+nlag) << WT201.col(0).array()/rho, VectorXr::Zero(nlag)).finished();
  354. for (int ilam =201; ilam< nlag+201; ++ilam) {
  355. lambda(ilam) = lambda(ilam-1)/GetABSER();
  356. }
  357. int NumFun = 0;
  358. int idx = 0;
  359. VectorXr Arg(nlag);
  360. Arg(nlag-1) = rho;
  361. for (int ilag=nlag-2; ilag>=0; --ilag) {
  362. Arg(ilag) = Arg(ilag+1) * GetABSER();
  363. }
  364. // Get Kernel values
  365. for (int ir=0; ir<lambda.size(); ++ir) {
  366. // irelated loop
  367. ++NumFun;
  368. KernelManager->ComputeReflectionCoeffs(lambda(ir), idx, rho);
  369. for (int ir2=0; ir2<nrel; ++ir2) {
  370. Zwork(ir, ir2) = std::conj(KernelManager->GetSTLVector()[ir2]->RelBesselArg(lambda(ir)));
  371. }
  372. }
  373. // We diverge slightly from Key here, each kernel is evaluated seperately, whereby instead
  374. // they prefer to sum them. The reason is that all those terms have been removed from the kernels
  375. // in the interests of making them as generic and reusable as possible. This approach requires slightly
  376. // more multiplies, but the same number of kernel evaluations, which is the expensive part.
  377. // Inner product and scale
  378. int ilagr = nlag-1; // Zwork is in opposite order from Arg
  379. for (int ilag=0; ilag<nlag; ++ilag) {
  380. for (int ir2=0; ir2<nrel; ++ir2) {
  381. Zans(ilagr, ir2) = Zwork.col(ir2).segment(ilag,201).dot( WT201.col(KernelManager->GetSTLVector()[ir2]->GetBesselOrder()+1) ) / Arg(ilagr);
  382. }
  383. ilagr -= 1;
  384. }
  385. // make sure vectors are empty
  386. splineVecReal.clear();
  387. splineVecImag.clear();
  388. // Now do cubic spline
  389. for (int ii=0; ii<Zans.cols(); ++ii) {
  390. auto SplineR = CubicSplineInterpolator::NewSP();
  391. SplineR->SetKnots( Arg, Zans.col(ii).real() );
  392. splineVecReal.push_back(SplineR);
  393. auto SplineI = CubicSplineInterpolator::NewSP();
  394. SplineI->SetKnots( Arg, Zans.col(ii).imag() );
  395. splineVecImag.push_back(SplineI);
  396. }
  397. return ;
  398. } // ----- end of method FHTKey201::ComputeLaggedRelated -----
  399. //--------------------------------------------------------------------------------------
  400. // Class: FHTKey201
  401. // Method: GetABSER
  402. //--------------------------------------------------------------------------------------
  403. Real FHTKey201::GetABSER ( ) {
  404. return WT201(0,0)/WT201(1,0);
  405. } // ----- end of method FHTKey201::GetABSER -----
  406. //--------------------------------------------------------------------------------------
  407. // Class: FHTKey201
  408. // Method: SetLaggedArg
  409. //--------------------------------------------------------------------------------------
  410. void FHTKey201::SetLaggedArg ( const Real& rho ) {
  411. for (int i=0; i<Zans.cols(); ++ i) {
  412. Zans(0, i) = Complex( splineVecReal[i]->Interpolate(rho),
  413. splineVecImag[i]->Interpolate(rho) );
  414. }
  415. return ;
  416. } // ----- end of method FHTKey201::SetLaggedArg -----
  417. } // ----- end of Lemma name -----