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.

inversesolvertem1d.h 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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 M. Andy Kass
  8. @date 03/23/2011
  9. @version $Id: inversesolvertem1d.h 201 2015-01-03 00:07:47Z tirons $
  10. **/
  11. #ifndef _INVERSESOLVERTEM1D__H
  12. #define _INVERSESOLVERTEM1D__H
  13. #include "inversesolver.h"
  14. #include "layeredearthem.h"
  15. #include "WireAntenna.h"
  16. #include "dipolesource.h"
  17. #include "receiverpoints.h"
  18. #include "instrumenttem.h"
  19. #include "cg.h"
  20. namespace Lemma {
  21. // ===================================================================
  22. // Class: InverseSolverTEM1D
  23. /// \brief Inversion for 1D TEM data
  24. /// \details
  25. // ===================================================================
  26. class InverseSolverTEM1D : public InverseSolver {
  27. friend std::ostream &operator<<(std::ostream &stream,
  28. const InverseSolverTEM1D &ob);
  29. public:
  30. // ==================== LIFECYCLE =======================
  31. static InverseSolverTEM1D* New();
  32. void Delete();
  33. // ==================== OPERATORS =======================
  34. // ==================== OPERATIONS =======================
  35. /// Perform the inverse calculation
  36. void Calculate();
  37. // ==================== ACCESS =======================
  38. /// Attach starting model
  39. void AttachStartMod(LayeredEarthEM* inpstartmod);
  40. /// Attach recovered model
  41. void AttachRecMod(LayeredEarthEM* inprecmod);
  42. /// Attach wire antenna source
  43. void AttachWireAntenna(WireAntenna* inpwireantenna);
  44. /// Attach dipole source
  45. void AttachDipoleSource(DipoleSource* inpdipsource);
  46. /// Attach receiver points
  47. void AttachReceiver(ReceiverPoints* inpreceiver);
  48. /// Set the time gates
  49. void SetTimes(VectorXr &inptimes);
  50. /// Show forward modelled data
  51. void ShowSoln();
  52. /// Write recovered model to file
  53. void WriteSoln(const std::string &filename);
  54. /// Set free parameter indices: layer, conductivity
  55. void SetFreeParams(const VectorXi &layers, const VectorXi &cond);
  56. /// Attach measured data for misfit comparison
  57. void AttachMeasuredData(const MatrixXr &data);
  58. // ==================== INQUIRY =======================
  59. /// Report number of iterations
  60. int NumberOfIterations();
  61. /// Report success/failure
  62. bool Success();
  63. /// Return phi m vector
  64. VectorXr GetPhiMVector();
  65. /// Return phi d vector
  66. VectorXr GetPhiDVector();
  67. protected:
  68. /// Some crap trevor uses
  69. void FillInG(const Vector3r& pos, const Vector3r& step);
  70. /// Calculate Jacobian
  71. MatrixXr CalcJac(LayeredEarthEM* m0);
  72. // ==================== LIFECYCLE =======================
  73. /// Default protected constructor.
  74. InverseSolverTEM1D (const std::string &name);
  75. /// Default protected constructor.
  76. ~InverseSolverTEM1D ();
  77. void Release();
  78. // ==================== DATA MEMBERS =========================
  79. WireAntenna* Antenna;
  80. DipoleSource* Dipole;
  81. ReceiverPoints* Receiver;
  82. LayeredEarthEM* StartingMod;
  83. LayeredEarthEM* RecoveredMod;
  84. InstrumentTem *InstrumentFor;
  85. MatrixXr MeasuredData;
  86. VectorXr Times;
  87. /// Vector of indices for which layer conductivities are solved for
  88. VectorXi SCondIndex;
  89. /// Vecor of indices for which layer thicknesses are solved for
  90. VectorXi SThickIndex;
  91. /// Temporary vector for returning linearised step
  92. VectorXr RecModStep;
  93. private:
  94. }; // ----- end of class InverseSolverTEM1D -----
  95. } // End of namespace Lemma
  96. #endif // _INVERSESOLVERTEM1D__H