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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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 05/02/2018 09:46:38 PM
  11. * @version $Id$
  12. * @author Trevor Irons (ti)
  13. * @email tirons@egi.utah.edu
  14. * @copyright Copyright (c) 2018, University of Utah
  15. * @copyright Copyright (c) 2018, Trevor Irons & Lemma Software, LLC
  16. */
  17. #pragma once
  18. #include "HankelTransform.h"
  19. namespace Lemma {
  20. /**
  21. \ingroup FDEM1D
  22. \brief Impliments lagged and related fast Hankel transform through
  23. digital filtering.
  24. \details A general Fast Hankel Transform routine which uses the digital
  25. filter apporach. Both lagged and related kernels are supported in
  26. order to minimize kernel function calls.
  27. This approach performs a complete sweep of the
  28. coefficients , for a variant that uses a longer filter which may
  29. be truncated, see FHTAnderson801.
  30. @see FHTAnderson801
  31. @see GQChave
  32. @see QWEKey
  33. */
  34. class FHT : public HankelTransform {
  35. friend std::ostream &operator<<(std::ostream &stream, const FHT &ob);
  36. public:
  37. // ==================== LIFECYCLE =======================
  38. /**
  39. * Default protected constructor, use NewSP methods to construct
  40. * @see FHT::NewSP
  41. */
  42. FHT (const ctor_key& key ) : HankelTransform( key ) {
  43. }
  44. /**
  45. * Protected DeDerializing constructor, use factory DeSerialize method.
  46. * @see FHT::DeSerialize
  47. */
  48. FHT (const YAML::Node& node, const ctor_key& key) : HankelTransform(node, key) {
  49. }
  50. /** Default protected destructor, use smart pointers (std::shared_ptr) */
  51. ~FHT () {
  52. }
  53. /**
  54. * Factory method for generating concrete class.
  55. * @return a std::shared_ptr of type FHT
  56. */
  57. static std::shared_ptr< FHT > NewSP() {
  58. return std::make_shared< FHT >( ctor_key() );
  59. }
  60. /**
  61. * Uses YAML to serialize this object.
  62. * @return a YAML::Node
  63. * @see FHT::DeSerialize
  64. */
  65. YAML::Node Serialize() const;
  66. /**
  67. * Constructs an FHT object from a YAML::Node.
  68. * @see FHT::Serialize
  69. */
  70. static std::shared_ptr<FHT> DeSerialize(const YAML::Node& node);
  71. // ==================== OPERATORS =======================
  72. // ==================== OPERATIONS =======================
  73. Complex Zgauss(const int&, const Lemma::EMMODE&, const int&, const Real&, const Real&, Lemma::KernelEM1DBase*) {
  74. return 0;
  75. }
  76. // ==================== ACCESS =======================
  77. // ==================== INQUIRY =======================
  78. /** Returns the name of the underlying class, similiar to Python's type */
  79. virtual std::string GetName() const {
  80. return this->CName;
  81. }
  82. protected:
  83. // ==================== LIFECYCLE =======================
  84. // ==================== DATA MEMBERS =========================
  85. private:
  86. static constexpr auto CName = "FHT";
  87. }; // ----- end of class FHT -----
  88. } // ----- end of namespace Lemma ----
  89. /* vim: set tabstop=4 expandtab: */
  90. /* vim: set filetype=cpp: */