Lemma is an Electromagnetics API
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

KernelEM1DBase.h 2.9KB

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 05/18/2012
  9. **/
  10. #ifndef KERNELEM1DBASE_INC
  11. #define KERNELEM1DBASE_INC
  12. #include "LemmaObject.h"
  13. namespace Lemma {
  14. // Transverse electric or magnetic mode
  15. enum EMMODE {TM, TE, NONE};
  16. // ===================================================================
  17. // Class: KernelEM1DBase
  18. /**
  19. @class
  20. \brief Pure virtual base class of KernelEm1D
  21. \details Defines interface for HankelTransform classes
  22. */
  23. // ===================================================================
  24. class KernelEM1DBase : public LemmaObject {
  25. friend class KernelEM1DManager;
  26. public:
  27. // ==================== LIFECYCLE =======================
  28. /// Default protected constructor.
  29. KernelEM1DBase ( ) : LemmaObject( ) {
  30. }
  31. /// Default protected constructor.
  32. ~KernelEM1DBase () {
  33. }
  34. // ==================== OPERATORS =======================
  35. // ==================== OPERATIONS =======================
  36. /** Returns the Complex bessel argument to be evaluated for a given
  37. * lambda value
  38. */
  39. virtual Complex BesselArg(const Real& lambda)=0;
  40. /** Returns the complex bessel argument. Same as above, but does not
  41. * call reflection coefficient calculation in KernelEM1DReflBase.
  42. * @param[in] lambda is the hankel wave value.
  43. */
  44. virtual Complex RelBesselArg(const Real& lambda)=0;
  45. // ==================== ACCESS =======================
  46. virtual void SetIk(const int& ik)=0;
  47. virtual void SetMode(const EMMODE& mode)=0;
  48. int GetManagerIndex() const {
  49. return this->managerIdx;
  50. }
  51. // ==================== INQUIRY =======================
  52. virtual int GetNumRel()=0;
  53. virtual int GetBesselOrder()=0;
  54. virtual Complex GetZm()=0;
  55. virtual Complex GetYm()=0;
  56. virtual Complex GetZs()=0;
  57. virtual Complex GetKs()=0;
  58. virtual std::string GetName() const = 0;
  59. protected:
  60. // ==================== DATA MEMBERS =========================
  61. /** Where does this kernel live on the vector managed by the manager */
  62. int managerIdx;
  63. private:
  64. /** ASCII string representation of the class name */
  65. static constexpr auto CName = "KernelEM1DBase";
  66. }; // ----- end of class KernelEM1DBase -----
  67. } // namespace Lemma
  68. #endif // ----- #ifndef KERNELEM1DBASE_INC -----