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

HankelTransform.h 3.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 01/28/2010
  9. **/
  10. #ifndef __hankeltransform_h
  11. #define __hankeltransform_h
  12. #include "KernelEM1DSpec.h"
  13. #include "KernelEM1DManager.h"
  14. namespace Lemma {
  15. class KernelEM1DBase;
  16. // ===================================================================
  17. // Class: HankelTransform
  18. /// \brief Abstract class for hankel transforms
  19. /// \details
  20. // ===================================================================
  21. class HankelTransform : public LemmaObject {
  22. public:
  23. /// Prints out basic info about the class
  24. friend std::ostream &operator<<(std::ostream &stream,
  25. const HankelTransform &ob);
  26. // ==================== LIFECYCLE =======================
  27. // ==================== OPERATORS =======================
  28. // ==================== OPERATIONS =======================
  29. /// @todo this is actually a deprecated function. Only Chave
  30. /// uses this.
  31. /// Performs numerical integration using Gaussian quadrature
  32. /// ikk: type of kernel depending on source and receiver couple
  33. /// imode: a switch for TE(0) and TM(1) mode
  34. /// itype: order of Bessel function
  35. /// rho is argument to integral
  36. /// wavef is the propogation constant of free space
  37. /// = omega * sqrt( EP*AMU ) amu = 4 pi e-7 ep = 8.85e-12
  38. /// @note compare performance of passing Kernel, instead consider
  39. /// passing by reference and using Kernel.get() instead.
  40. virtual Complex Zgauss(const int &ikk, const EMMODE &imode,
  41. const int &itype, const Real &rho,
  42. const Real &wavef, KernelEM1DBase* Kernel)=0;
  43. /// Computes related kernels, if applicable, otherwise this is
  44. /// just a dummy function.
  45. virtual void ComputeRelated(const Real& rho, std::shared_ptr<KernelEM1DBase> Kernel);
  46. virtual void ComputeRelated(const Real& rho, std::vector< std::shared_ptr<KernelEM1DBase> > KernelVec);
  47. virtual void ComputeRelated(const Real& rho, std::shared_ptr<KernelEM1DManager> KernelManager);
  48. // ==================== ACCESS =======================
  49. // ==================== INQUIRY =======================
  50. /** Returns the name of the underlying class, similiar to Python's type */
  51. virtual inline std::string GetName() const {
  52. return CName;
  53. }
  54. // ==================== DATA MEMBERS =======================
  55. protected:
  56. // ==================== LIFECYCLE =======================
  57. /// Default protected constructor.
  58. HankelTransform ( );
  59. /// Default protected constructor.
  60. HankelTransform ( const YAML::Node& node );
  61. /// Default protected constructor.
  62. ~HankelTransform ( );
  63. private:
  64. /** ASCII string representation of the class name */
  65. static constexpr auto CName = "HankelTransform";
  66. }; // ----- end of class HankelTransform -----
  67. }
  68. #endif // __hankeltransform_h