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.

instrumentfem.h 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 01/14/2013
  9. @version $Id$
  10. **/
  11. #ifndef __INSTRUMENTFEM_H
  12. #define __INSTRUMENTFEM_H
  13. #include "instrument.h"
  14. #include "emearth1d.h"
  15. #include "WireAntenna.h"
  16. #include "PolygonalWireAntenna.h"
  17. #include "receiverpoints.h"
  18. #include "dipolesource.h"
  19. #include "layeredearthem.h"
  20. #include "datafem.h"
  21. namespace Lemma {
  22. // ===================================================================
  23. // Class: InstrumentFem
  24. /// \brief
  25. /// \details
  26. // ===================================================================
  27. class InstrumentFem : public Instrument {
  28. friend std::ostream &operator<<(std::ostream &stream,
  29. const InstrumentFem &ob);
  30. public:
  31. // ==================== LIFECYCLE =======================
  32. static InstrumentFem* New();
  33. void Delete();
  34. // ==================== OPERATORS =======================
  35. // ==================== OPERATIONS =======================
  36. /// Make the forward model calculation
  37. void MakeCalculation();
  38. /// Forward model from a vector of inputs
  39. void ForwardModelProfile();
  40. // ==================== ACCESS =======================
  41. //
  42. /// Set layered earth model
  43. void EMEarthModel(LayeredEarthEM* Earth);
  44. /// Set dipole source
  45. void SetDipoleSource(DipoleSource* dipolesource);
  46. /// Set Field Points
  47. void SetReceiverPoints(ReceiverPoints* receiver);
  48. /// Copy parameters from data object
  49. void AlignWithData(DataFEM* inpdata);
  50. /// Set a data object for output
  51. void SetOutputData(DataFEM* outputdata);
  52. // ==================== INQUIRY =======================
  53. protected:
  54. // ==================== LIFECYCLE =======================
  55. /// Default protected constructor.
  56. InstrumentFem (const std::string &name);
  57. /// Default protected constructor.
  58. ~InstrumentFem ();
  59. void Release();
  60. // ==================== DATA MEMBERS =========================
  61. LayeredEarthEM* EarthModel;
  62. DipoleSource* Dipole;
  63. ReceiverPoints* Receiver;
  64. DataFEM* InputData;
  65. DataFEM* OutputData;
  66. /// Vector of dipole sources - may be superceded by boost
  67. std::vector<DipoleSource*> Transmitters;
  68. /// Vector of receivers - may be superceded by boost
  69. /// not necessary--one set of receivers for all dipoles,
  70. /// except the number of frequencies is built into the receiver
  71. std::vector<ReceiverPoints*> Receivers;
  72. /// Vector of Earth Models - may be superceded by boost
  73. //std::vector<LayeredEarthEM*> EarthModels;
  74. /// Number of frequencies
  75. int nFreq;
  76. /// Number of observation locations
  77. int nObs;
  78. /// Array of frequencies
  79. VectorXr freq;
  80. /// Position vector, with z as height above the ground surface (pos)
  81. Vector3Xr xyz;
  82. /// Array of Tx orientations (x,y,z) for each freq
  83. Eigen::Matrix<ORIENTATION,Eigen::Dynamic,1> TxOrientation;
  84. /// Array of Rx orientations (x,y,z) for each freq
  85. Eigen::Matrix<ORIENTATION,Eigen::Dynamic,1> RxOrientation;
  86. /// Transmitter moments, one for each frequency
  87. VectorXr TxMom;
  88. /// Tx/Rx Separation in local, right hand system with x aligned with flight
  89. Vector3Xr TxRxSep;
  90. /// Scale factor as described in EM1DFM manual
  91. VectorXr ScaleFac;
  92. private:
  93. }; // ----- end of class InstrumentFem -----
  94. } // end of namespace Lemma
  95. #endif