Browse Source

Work on TEM module

add-code-of-conduct-1
Trevor Irons 6 years ago
parent
commit
c79829d670

+ 33
- 0
Modules/TEM1D/CMakeLists.txt View File

1
+add_subdirectory("src")
2
+add_library( tem1d ${TEM1DSOURCE} )  
3
+target_include_directories( tem1d PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" )
4
+
5
+set_target_properties(tem1d PROPERTIES 
6
+	VERSION  "${LEMMA_VERSION_NOQUOTES}"
7
+	SOVERSION "${LEMMA_VERSION_MAJOR}.${LEMMA_VERSION_MINOR}"
8
+	PROJECT_LABEL "TEM1D ${LABEL_SUFFIX}"
9
+    CXX_STANDARD 14
10
+    CXX_STANDARD_REQUIRED ON
11
+)
12
+
13
+# Linking
14
+target_link_libraries(tem1d "lemmacore")
15
+target_link_libraries(tem1d "fdem1d")
16
+
17
+# Testing
18
+if (LEMMA_ENABLE_TESTING)
19
+	add_subdirectory(testing)
20
+endif()
21
+
22
+# Install
23
+install ( TARGETS tem1d DESTINATION ${CMAKE_INSTALL_PREFIX}/lib )
24
+install ( FILES include/TEM1D  DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma ) 
25
+install ( DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma  FILES_MATCHING PATTERN "*.h")
26
+
27
+#install ( DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma/  FILES_MATCHING PATTERN "FDEM1D")
28
+#install ( DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma/FDEM1D  FILES_MATCHING PATTERN "*.h")
29
+
30
+# Examples
31
+if (LEMMA_BUILD_EXAMPLES)
32
+	add_subdirectory(examples)
33
+endif()

+ 0
- 0
Modules/TEM1D/examples/CMakeLists.txt View File


+ 30
- 32
Modules/TEM1D/include/TEMReceiver.h View File

10
 /**
10
 /**
11
  * @file
11
  * @file
12
  * @date      10/08/2014 02:36:47 PM
12
  * @date      10/08/2014 02:36:47 PM
13
- * @version   $Id$
14
  * @author    Trevor Irons (ti)
13
  * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2014, XRI Geophysics, LLC
14
+ * @email     Trevor.Irons@Utah.edu
17
  * @copyright Copyright (c) 2014, Trevor Irons
15
  * @copyright Copyright (c) 2014, Trevor Irons
18
  */
16
  */
17
+#pragma once
19
 
18
 
20
 #ifndef  TEMRECEIVER_INC
19
 #ifndef  TEMRECEIVER_INC
21
 #define  TEMRECEIVER_INC
20
 #define  TEMRECEIVER_INC
22
 
21
 
23
-#include "receiverpoints.h"
22
+#include <random>
23
+//#include "yaml-cpp/yaml.h"
24
+#include <LemmaCore>
25
+#include <FDEM1D>
24
 
26
 
25
 //#include <boost/random.hpp>
27
 //#include <boost/random.hpp>
26
 //#include <boost/random/normal_distribution.hpp>
28
 //#include <boost/random/normal_distribution.hpp>
27
-#include <random>
28
 
29
 
29
 namespace Lemma {
30
 namespace Lemma {
30
 
31
 
31
-#ifdef HAVE_YAMLCPP
32
-#include "yaml-cpp/yaml.h"
33
-#endif
34
-
35
-
36
 /**
32
 /**
37
   \brief
33
   \brief
38
   \details
34
   \details
39
  */
35
  */
40
-class TEMReceiver : public ReceiverPoints {
36
+class TEMReceiver : public FieldPoints {
41
 
37
 
42
-    friend std::ostream &operator<<(std::ostream &stream,
43
-            const TEMReceiver &ob);
38
+    friend std::ostream &operator<<(std::ostream &stream, const TEMReceiver &ob);
44
 
39
 
45
     public:
40
     public:
46
 
41
 
47
     // ====================  LIFECYCLE     =======================
42
     // ====================  LIFECYCLE     =======================
48
 
43
 
44
+    /** Default locked constructor. */
45
+    explicit TEMReceiver ( const ctor_key& );
46
+
47
+    /** Locked deserializing constructor. */
48
+    TEMReceiver (const YAML::Node& node, const ctor_key&);
49
+
50
+    /** Default destructor. */
51
+    ~TEMReceiver ();
52
+
49
     /**
53
     /**
50
-     * @copybrief LemmaObject::New()
51
-     * @copydetails LemmaObject::New()
54
+     *  Factory method for generating concrete class.
55
+     *  @return a std::shared_ptr of type TEMReceiver
52
      */
56
      */
53
-    static TEMReceiver* New();
57
+    static std::shared_ptr<TEMReceiver> NewSP();
54
 
58
 
55
     /**
59
     /**
56
-     *   @return a deep copy of this
60
+     *  Uses YAML to serialize this object.
61
+     *  @note The actual calculation results are not serialized, currently.
62
+     *  @return a YAML::Node
57
      */
63
      */
58
-    TEMReceiver* Clone();
64
+    YAML::Node Serialize() const;
59
 
65
 
60
     /**
66
     /**
61
-     *  @copybrief   LemmaObject::Delete()
62
-     *  @copydetails LemmaObject::Delete()
67
+     *   Constructs an object from a YAML::Node.
68
+     *   @param[in] node is a YAML node containing the serialized class information
69
+     *   @return a std::shared_ptr object of TEMReceiver
63
      */
70
      */
64
-    void Delete();
71
+    static std::shared_ptr<TEMReceiver> DeSerialize(const YAML::Node& node);
72
+
65
 
73
 
66
     // ====================  OPERATORS     =======================
74
     // ====================  OPERATORS     =======================
67
 
75
 
141
      *  @return the reference time
149
      *  @return the reference time
142
      */
150
      */
143
     Real    GetReferenceTime();
151
     Real    GetReferenceTime();
152
+
144
     protected:
153
     protected:
145
 
154
 
146
     // ====================  LIFECYCLE     =======================
155
     // ====================  LIFECYCLE     =======================
147
 
156
 
148
-    /** Default protected constructor, use New */
149
-    TEMReceiver (const std::string& name);
150
-
151
-     #ifdef HAVE_YAMLCPP
152
-    /** Default protected de-serializing constructor, use factory DeSerialize */
153
-    TEMReceiver (const YAML::Node& node);
154
-    #endif
155
-
156
-    /** Default protected destructor, use Delete */
157
-    ~TEMReceiver ();
158
-
159
     /**
157
     /**
160
      *  @copybrief   LemmaObject::Release()
158
      *  @copybrief   LemmaObject::Release()
161
      *  @copydetails LemmaObject::Release()
159
      *  @copydetails LemmaObject::Release()

+ 50
- 0
Modules/TEM1D/src/CMakeLists.txt View File

1
+set (TEM1DSOURCE
2
+	${TEM1DSOURCE}
3
+
4
+
5
+	${CMAKE_CURRENT_SOURCE_DIR}/TEMReceiver.cpp
6
+#	${CMAKE_CURRENT_SOURCE_DIR}/LayeredEarthEMReader.cpp
7
+	
8
+	# Calculation points
9
+#	${CMAKE_CURRENT_SOURCE_DIR}/FieldPoints.cpp
10
+
11
+	# Sources	
12
+#	${CMAKE_CURRENT_SOURCE_DIR}/CompactSupportEMSource.cpp
13
+#	${CMAKE_CURRENT_SOURCE_DIR}/CircularLoop.cpp
14
+
15
+#	${CMAKE_CURRENT_SOURCE_DIR}/DipoleSource.cpp
16
+#	${CMAKE_CURRENT_SOURCE_DIR}/WireAntenna.cpp
17
+#	${CMAKE_CURRENT_SOURCE_DIR}/PolygonalWireAntenna.cpp
18
+
19
+	# Kernel management	
20
+#	${CMAKE_CURRENT_SOURCE_DIR}/KernelEM1DManager.cpp
21
+#	${CMAKE_CURRENT_SOURCE_DIR}/KernelEM1DSpec.cpp
22
+#	${CMAKE_CURRENT_SOURCE_DIR}/KernelEM1DReflSpec.cpp
23
+
24
+	#####################
25
+	# Hankel transforms #
26
+	#####################
27
+	# FHT
28
+#	${CMAKE_CURRENT_SOURCE_DIR}/HankelTransform.cpp
29
+#	${CMAKE_CURRENT_SOURCE_DIR}/FHTAnderson801.cpp
30
+#	${CMAKE_CURRENT_SOURCE_DIR}/FHTKey201.cpp
31
+#	${CMAKE_CURRENT_SOURCE_DIR}/FHTKey101.cpp
32
+#	${CMAKE_CURRENT_SOURCE_DIR}/FHTKey51.cpp
33
+
34
+	# Templated FHT
35
+#	${CMAKE_CURRENT_SOURCE_DIR}/FHT.cpp
36
+
37
+	# Gaussian Quadrature
38
+#	${CMAKE_CURRENT_SOURCE_DIR}/GQChave.cpp
39
+#	${CMAKE_CURRENT_SOURCE_DIR}/QWEKey.cpp
40
+	
41
+	# Calculation
42
+#	${CMAKE_CURRENT_SOURCE_DIR}/EMEarth1D.cpp
43
+
44
+	# AEM 
45
+#	${CMAKE_CURRENT_SOURCE_DIR}/AEMSurvey.cpp
46
+#	${CMAKE_CURRENT_SOURCE_DIR}/AEMSurveyReader.cpp
47
+	
48
+	#${CMAKE_CURRENT_SOURCE_DIR}/UngroundedElectricDipole.cpp
49
+	PARENT_SCOPE
50
+)

+ 22
- 54
Modules/TEM1D/src/TEMReceiver.cpp View File

10
 /**
10
 /**
11
  * @file
11
  * @file
12
  * @date      10/08/2014 03:04:56 PM
12
  * @date      10/08/2014 03:04:56 PM
13
- * @version   $Id$
14
  * @author    Trevor Irons (ti)
13
  * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2014, XRI Geophysics, LLC
17
- * @copyright Copyright (c) 2014, Trevor Irons
14
+ * @email     Trevor.Irons@utah.edu
15
+ * @copyright Copyright (c) 2014, 2018 Trevor Irons
18
  */
16
  */
19
 
17
 
20
 #include "TEMReceiver.h"
18
 #include "TEMReceiver.h"
23
 
21
 
24
 
22
 
25
     // ====================  FRIEND METHODS  =====================
23
     // ====================  FRIEND METHODS  =====================
26
-#ifdef HAVE_YAMLCPP
24
+
27
     std::ostream &operator << (std::ostream &stream, const TEMReceiver &ob) {
25
     std::ostream &operator << (std::ostream &stream, const TEMReceiver &ob) {
28
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
29
-        return stream;
30
-    }
31
-#else
32
-    std::ostream &operator<<(std::ostream &stream, const TEMReceiver& ob) {
33
-        stream << *(ReceiverPoints*)(&ob);
26
+        stream << ob.Serialize()  << "\n";
34
         return stream;
27
         return stream;
35
     }
28
     }
36
-#endif
37
 
29
 
38
     // ====================  LIFECYCLE     =======================
30
     // ====================  LIFECYCLE     =======================
39
 
31
 
40
     //--------------------------------------------------------------------------------------
32
     //--------------------------------------------------------------------------------------
41
     //       Class:  TEMReceiver
33
     //       Class:  TEMReceiver
42
     //      Method:  TEMReceiver
34
     //      Method:  TEMReceiver
43
-    // Description:  constructor (protected)
35
+    // Description:  constructor (locked)
44
     //--------------------------------------------------------------------------------------
36
     //--------------------------------------------------------------------------------------
45
-    TEMReceiver::TEMReceiver (const std::string& name) : ReceiverPoints(name), moment(1), referenceTime(0) {
37
+    TEMReceiver::TEMReceiver ( const ctor_key& key ) : FieldPoints(key), moment(1), referenceTime(0) {
46
 
38
 
47
     }  // -----  end of method TEMReceiver::TEMReceiver  (constructor)  -----
39
     }  // -----  end of method TEMReceiver::TEMReceiver  (constructor)  -----
48
 
40
 
49
-#ifdef HAVE_YAMLCPP
50
     //--------------------------------------------------------------------------------------
41
     //--------------------------------------------------------------------------------------
51
     //       Class:  TEMReceiver
42
     //       Class:  TEMReceiver
52
     //      Method:  TEMReceiver
43
     //      Method:  TEMReceiver
53
     // Description:  constructor (protected)
44
     // Description:  constructor (protected)
54
     //--------------------------------------------------------------------------------------
45
     //--------------------------------------------------------------------------------------
55
-    TEMReceiver::TEMReceiver (const YAML::Node& node) : ReceiverPoints(node) {
46
+    TEMReceiver::TEMReceiver (const YAML::Node& node, const ctor_key& key) : FieldPoints(node, key) {
56
 
47
 
57
         moment = node["moment"].as<Real>();
48
         moment = node["moment"].as<Real>();
58
         referenceTime = node["referenceTime"].as<Real>();
49
         referenceTime = node["referenceTime"].as<Real>();
63
         noiseSTD      = node["noiseSTD"].as<VectorXr>();
54
         noiseSTD      = node["noiseSTD"].as<VectorXr>();
64
         //location = node["location"].as<Vector3r>();
55
         //location = node["location"].as<Vector3r>();
65
     }  // -----  end of method TEMReceiver::TEMReceiver  (constructor)  -----
56
     }  // -----  end of method TEMReceiver::TEMReceiver  (constructor)  -----
66
-#endif
67
 
57
 
68
     //--------------------------------------------------------------------------------------
58
     //--------------------------------------------------------------------------------------
69
     //       Class:  TEMReceiver
59
     //       Class:  TEMReceiver
70
     //      Method:  New()
60
     //      Method:  New()
71
     // Description:  public constructor
61
     // Description:  public constructor
72
     //--------------------------------------------------------------------------------------
62
     //--------------------------------------------------------------------------------------
73
-    TEMReceiver* TEMReceiver::New() {
74
-        TEMReceiver*  Obj = new TEMReceiver("TEMReceiver");
75
-        Obj->AttachTo(Obj);
76
-        return Obj;
63
+    std::shared_ptr<TEMReceiver> TEMReceiver::NewSP() {
64
+        return std::make_shared<TEMReceiver> ( ctor_key() );
77
     }
65
     }
78
 
66
 
79
 
67
 
81
     //       Class:  TEMReceiver
69
     //       Class:  TEMReceiver
82
     //      Method:  Clone
70
     //      Method:  Clone
83
     //--------------------------------------------------------------------------------------
71
     //--------------------------------------------------------------------------------------
72
+/*
84
     TEMReceiver* TEMReceiver::Clone() {
73
     TEMReceiver* TEMReceiver::Clone() {
85
         TEMReceiver* Copy = TEMReceiver::New();
74
         TEMReceiver* Copy = TEMReceiver::New();
86
             Copy->SetNumberOfReceivers( this->NumberOfReceivers );
75
             Copy->SetNumberOfReceivers( this->NumberOfReceivers );
96
             Copy->noiseSTD = this->noiseSTD;
85
             Copy->noiseSTD = this->noiseSTD;
97
         return Copy;
86
         return Copy;
98
     }		// -----  end of method TEMReceiver::Clone  -----
87
     }		// -----  end of method TEMReceiver::Clone  -----
88
+*/
99
 
89
 
100
     //--------------------------------------------------------------------------------------
90
     //--------------------------------------------------------------------------------------
101
     //       Class:  TEMReceiver
91
     //       Class:  TEMReceiver
108
 
98
 
109
     //--------------------------------------------------------------------------------------
99
     //--------------------------------------------------------------------------------------
110
     //       Class:  TEMReceiver
100
     //       Class:  TEMReceiver
111
-    //      Method:  Delete
112
-    // Description:  public destructor
113
-    //--------------------------------------------------------------------------------------
114
-    void TEMReceiver::Delete() {
115
-        this->DetachFrom(this);
116
-    }
117
-
118
-    //--------------------------------------------------------------------------------------
119
-    //       Class:  TEMReceiver
120
-    //      Method:  Release
121
-    // Description:  destructor (protected)
122
-    //--------------------------------------------------------------------------------------
123
-    void TEMReceiver::Release() {
124
-        delete this;
125
-    }
126
-
127
-
128
-    //--------------------------------------------------------------------------------------
129
-    //       Class:  TEMReceiver
130
     //      Method:  SetWindows
101
     //      Method:  SetWindows
131
     //--------------------------------------------------------------------------------------
102
     //--------------------------------------------------------------------------------------
132
     void TEMReceiver::SetWindows ( const VectorXr& centres, const VectorXr& widths, const TIMEUNITS& Units ) {
103
     void TEMReceiver::SetWindows ( const VectorXr& centres, const VectorXr& widths, const TIMEUNITS& Units ) {
185
     //      Method:  SampleNoise
156
     //      Method:  SampleNoise
186
     //--------------------------------------------------------------------------------------
157
     //--------------------------------------------------------------------------------------
187
     VectorXr TEMReceiver::SampleNoise (  ) {
158
     VectorXr TEMReceiver::SampleNoise (  ) {
188
-        
189
-	/* we have C++-11 now! No Boost! 
159
+
160
+	/* we have C++-11 now! No Boost!
190
         boost::mt19937 rng(time(0));
161
         boost::mt19937 rng(time(0));
191
         boost::normal_distribution<> nd(0.0, 1.0);
162
         boost::normal_distribution<> nd(0.0, 1.0);
192
         boost::variate_generator<boost::mt19937&, boost::normal_distribution<> > var_nor(rng, nd);
163
         boost::variate_generator<boost::mt19937&, boost::normal_distribution<> > var_nor(rng, nd);
193
 	*/
164
 	*/
194
 
165
 
195
         std::random_device rd;
166
         std::random_device rd;
196
-        std::mt19937 gen(rd()); 
167
+        std::mt19937 gen(rd());
197
         std::normal_distribution<> d(0.0, 1.00);
168
         std::normal_distribution<> d(0.0, 1.00);
198
 
169
 
199
         VectorXr noise = VectorXr::Zero( windowCentres.size() );
170
         VectorXr noise = VectorXr::Zero( windowCentres.size() );
251
     //      Method:  SetLocation
222
     //      Method:  SetLocation
252
     //--------------------------------------------------------------------------------------
223
     //--------------------------------------------------------------------------------------
253
     void TEMReceiver::SetRxLocation ( const Vector3r& loc ) {
224
     void TEMReceiver::SetRxLocation ( const Vector3r& loc ) {
254
-        this->SetNumberOfReceivers(1); // Valgrind doesn't like??
225
+        this->SetNumberOfPoints(1); // Valgrind doesn't like??
255
         this->SetLocation(0, loc);
226
         this->SetLocation(0, loc);
256
         //location = loc;
227
         //location = loc;
257
         return ;
228
         return ;
296
     }		// -----  end of method TEMReceiver::GetReferenceTime  -----
267
     }		// -----  end of method TEMReceiver::GetReferenceTime  -----
297
 
268
 
298
 
269
 
299
-#ifdef HAVE_YAMLCPP
300
     //--------------------------------------------------------------------------------------
270
     //--------------------------------------------------------------------------------------
301
     //       Class:  TEMReceiver
271
     //       Class:  TEMReceiver
302
     //      Method:  Serialize
272
     //      Method:  Serialize
303
     //--------------------------------------------------------------------------------------
273
     //--------------------------------------------------------------------------------------
304
     YAML::Node  TEMReceiver::Serialize (  ) const {
274
     YAML::Node  TEMReceiver::Serialize (  ) const {
305
-        YAML::Node node = ReceiverPoints::Serialize();
306
-        node.SetTag( this->Name );
275
+        YAML::Node node = FieldPoints::Serialize();
276
+        node.SetTag( GetName() );
307
         node["moment"] = moment;
277
         node["moment"] = moment;
308
         node["referenceTime"] = referenceTime;
278
         node["referenceTime"] = referenceTime;
309
         node["component"] = enum2String(component);
279
         node["component"] = enum2String(component);
320
     //       Class:  TEMReceiver
290
     //       Class:  TEMReceiver
321
     //      Method:  DeSerialize
291
     //      Method:  DeSerialize
322
     //--------------------------------------------------------------------------------------
292
     //--------------------------------------------------------------------------------------
323
-    TEMReceiver* TEMReceiver::DeSerialize ( const YAML::Node& node  ) {
324
-        TEMReceiver* Object = new TEMReceiver(node);
325
-        Object->AttachTo(Object);
326
-        DESERIALIZECHECK( node, Object )
327
-        return Object ;
328
-
293
+    std::shared_ptr<TEMReceiver> TEMReceiver::DeSerialize ( const YAML::Node& node  ) {
294
+        if (node.Tag() != "TEMReceiver") {
295
+            throw  DeSerializeTypeMismatch( "TEMReceiver", node.Tag());
296
+        }
297
+        return std::make_shared<TEMReceiver> ( node, ctor_key() );
329
     }		// -----  end of method TEMReceiver::DeSerialize  -----
298
     }		// -----  end of method TEMReceiver::DeSerialize  -----
330
-#endif
331
 
299
 
332
 }		// -----  end of Lemma  name  -----
300
 }		// -----  end of Lemma  name  -----
333
 
301
 

+ 0
- 0
Modules/TEM1D/testing/CMakeLists.txt View File


Loading…
Cancel
Save