Lemma is an Electromagnetics API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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