Lemma is an Electromagnetics API
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

FHTKey.h 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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:33:08 PM
  11. * @version $Id$
  12. * @author Trevor Irons (ti)
  13. * @email Trevor.Irons@xri-geo.com
  14. * @copyright Copyright (c) 2014, XRI Geophysics, LLC
  15. * @copyright Copyright (c) 2014, Trevor Irons
  16. */
  17. #ifndef FHTKEY_INC
  18. #define FHTKEY_INC
  19. #include "hankeltransform.h"
  20. namespace Lemma {
  21. /**
  22. \brief Impliments the fast Hankel transform as outlines by Key 2011
  23. \details This filter uses 61, 121, or 201 filter points and supports both lagged and related
  24. kernel arguments. This algorithm is a port of code carrying the following copyright and
  25. restriction:
  26. %------------------------------------------------------------------%
  27. % Copyright (c) 2012 by the Society of Exploration Geophysicists. %
  28. % For more information, go to http://software.seg.org/2012/0003 . %
  29. % You must read and accept usage terms at: %
  30. % http://software.seg.org/disclaimer.txt before use. %
  31. %------------------------------------------------------------------%
  32. */
  33. class FHTKey : public HankelTransform {
  34. friend std::ostream &operator<<(std::ostream &stream,
  35. const FHTKey &ob);
  36. public:
  37. // ==================== LIFECYCLE =======================
  38. /**
  39. * @copybrief LemmaObject::New()
  40. * @copydetails LemmaObject::New()
  41. */
  42. static FHTKey* New();
  43. /**
  44. * @copybrief LemmaObject::Delete()
  45. * @copydetails LemmaObject::Delete()
  46. */
  47. void Delete();
  48. // ==================== OPERATORS =======================
  49. // ==================== OPERATIONS =======================
  50. Complex Zgauss(const int &ikk, const EMMODE &imode,
  51. const int &itype, const Real &rho,
  52. const Real &wavef, KernelEm1DBase *Kernel);
  53. /// Computes related kernels, if applicable, otherwise this is
  54. /// just a dummy function.
  55. void ComputeRelated(const Real& rho, KernelEm1DBase* Kernel);
  56. void ComputeRelated(const Real& rho, std::vector< KernelEm1DBase* > KernelVec);
  57. void ComputeRelated(const Real& rho, KernelEM1DManager* KernelManager);
  58. // ==================== ACCESS =======================
  59. // ==================== INQUIRY =======================
  60. protected:
  61. // ==================== LIFECYCLE =======================
  62. /** Default protected constructor, use New */
  63. FHTKey (const std::string& name);
  64. /** Default protected destructor, use Delete */
  65. ~FHTKey ();
  66. /**
  67. * @copybrief LemmaObject::Release()
  68. * @copydetails LemmaObject::Release()
  69. */
  70. void Release();
  71. private:
  72. // ==================== DATA MEMBERS =========================
  73. // Shared Filter Weights
  74. static const Eigen::Matrix<Real, 201, 3> WT201;
  75. /// Holds answer, dimensions are NumConv, and NumberRelated.
  76. Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic> Zans;
  77. }; // ----- end of class FHTKey -----
  78. } // ----- end of Lemma name -----
  79. #endif // ----- #ifndef FHTKEY_INC -----