Main Lemma Repository
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

HankelTransform.h 4.0KB

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