Browse Source

Cleaning up the code

enhancement_3
T-bone 7 years ago
parent
commit
116019b55d
76 changed files with 25 additions and 8017 deletions
  1. 3
    1
      Documentation/Doxyfile.in
  2. BIN
      Documentation/lemma.png
  3. 0
    47
      LemmaCore/CMakeLists.txt
  4. 0
    33
      LemmaCore/examples/CMakeLists.txt
  5. 0
    52
      LemmaCore/examples/filter.cpp
  6. 0
    342
      LemmaCore/examples/utORS.cpp
  7. 0
    34
      LemmaCore/examples/utQWEKey.cpp
  8. 0
    86
      LemmaCore/examples/utSerialize.cpp
  9. 0
    31
      LemmaCore/examples/utSkyTEM.cpp
  10. 0
    197
      LemmaCore/examples/utTEMSurvey.cpp
  11. 0
    168
      LemmaCore/examples/utXMLParse.cpp
  12. 0
    67
      LemmaCore/examples/utYAMLconfig.cpp
  13. 0
    84
      LemmaCore/examples/utgaussquad.cpp
  14. 0
    258
      LemmaCore/examples/utgmrprint.cpp
  15. 0
    93
      LemmaCore/examples/uthankel2.cpp
  16. 0
    257
      LemmaCore/examples/uthantenna.cpp
  17. 0
    218
      LemmaCore/examples/utlogbarriercg.cpp
  18. 0
    67
      LemmaCore/examples/utpolygonalantenna.cpp
  19. 0
    68
      LemmaCore/examples/utreadfemubc.cpp
  20. 0
    54
      LemmaCore/examples/utsandbox.cpp
  21. 0
    199
      LemmaCore/examples/uttemforward.cpp
  22. 0
    131
      LemmaCore/examples/utteminv1d.cpp
  23. 0
    84
      LemmaCore/examples/uttemreader.cpp
  24. 0
    207
      LemmaCore/examples/uttemsandbox.cpp
  25. 0
    319
      LemmaCore/examples/wireantenna.cpp
  26. 0
    161
      LemmaCore/include/ASCIIParser.h
  27. 0
    195
      LemmaCore/include/CubicSplineInterpolator.h
  28. 0
    94
      LemmaCore/include/Data.h
  29. 0
    75
      LemmaCore/include/DataReader.h
  30. 0
    149
      LemmaCore/include/EarthModel.h
  31. 0
    71
      LemmaCore/include/Filter.h
  32. 0
    78
      LemmaCore/include/Grid.h
  33. 0
    84
      LemmaCore/include/GridReader.h
  34. 0
    71
      LemmaCore/include/Instrument.h
  35. 0
    174
      LemmaCore/include/LayeredEarth.h
  36. 0
    40
      LemmaCore/include/LemmaCore
  37. 0
    168
      LemmaCore/include/LemmaObject.h
  38. 0
    216
      LemmaCore/include/RectilinearGrid.h
  39. 0
    110
      LemmaCore/include/RectilinearGridReader.h
  40. 0
    124
      LemmaCore/include/RectilinearGridVTKExporter.h
  41. 0
    127
      LemmaCore/include/WindowFilter.h
  42. 0
    24
      LemmaCore/include/banner.h
  43. 0
    288
      LemmaCore/include/helper.h
  44. 0
    333
      LemmaCore/include/lemma.h
  45. 0
    82
      LemmaCore/include/timer.h
  46. 0
    238
      LemmaCore/src/ASCIIParser.cpp
  47. 0
    20
      LemmaCore/src/CMakeLists.txt
  48. 0
    355
      LemmaCore/src/CubicSplineInterpolator.cpp
  49. 0
    30
      LemmaCore/src/Data.cpp
  50. 0
    29
      LemmaCore/src/DataReader.cpp
  51. 0
    129
      LemmaCore/src/EarthModel.cpp
  52. 0
    22
      LemmaCore/src/Filter.cpp
  53. 0
    43
      LemmaCore/src/Grid.cpp
  54. 0
    29
      LemmaCore/src/Instrument.cpp
  55. 0
    130
      LemmaCore/src/LayeredEarth.cpp
  56. 0
    86
      LemmaCore/src/LemmaObject.cpp
  57. 0
    215
      LemmaCore/src/RectilinearGrid.cpp
  58. 0
    113
      LemmaCore/src/RectilinearGridReader.cpp
  59. 0
    147
      LemmaCore/src/RectilinearGridVTKExporter.cpp
  60. 0
    83
      LemmaCore/src/WindowFilter.cpp
  61. 0
    36
      LemmaCore/src/banner.cpp
  62. 0
    201
      LemmaCore/src/helper.cpp
  63. 0
    11
      LemmaCore/testing/CMakeLists.txt
  64. 0
    69
      LemmaCore/testing/GetNameCheck.h
  65. 0
    75
      LemmaCore/testing/SerializeCheck.h
  66. 0
    23
      LemmaCore/testing/testOne.cpp
  67. 0
    23
      LemmaCore/testing/testTwo.cpp
  68. 3
    4
      Modules/FDEM1D/FDEM1D.dox
  69. 0
    1
      Modules/FDEM1D/README
  70. 19
    30
      Modules/LemmaCore/include/lemma.h
  71. 0
    1
      Modules/LemmaCore/src/CMakeLists.txt
  72. 0
    26
      include/LemmaConfig.h.in
  73. 0
    24
      include/modules.h
  74. 0
    33
      src/myTestSuite.h
  75. 0
    29
      src/test.cpp
  76. 0
    1
      test

+ 3
- 1
Documentation/Doxyfile.in View File

@@ -27,6 +27,8 @@ DOXYFILE_ENCODING      = UTF-8
27 27
 
28 28
 PROJECT_NAME           = Lemma
29 29
 
30
+# Copies main logo so that the html and latex can find it
31
+PROJECT_LOGO           = @CMAKE_CURRENT_SOURCE_DIR@/Documentation/lemma.png
30 32
 
31 33
 # The PROJECT_NUMBER tag can be used to enter a project or revision number.
32 34
 # This could be handy for archiving the generated documentation or
@@ -588,7 +590,7 @@ USE_MATHJAX = YES
588 590
 #INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@/LemmaCore/include @CMAKE_CURRENT_SOURCE_DIR@/Modules/FEM4EllipticPDE.git/include
589 591
 INPUT   = @CMAKE_CURRENT_SOURCE_DIR@/Modules/*/include
590 592
 INPUT  += @CMAKE_CURRENT_SOURCE_DIR@/Modules/
591
-INPUT  += @CMAKE_CURRENT_SOURCE_DIR@/Documentation/dox
593
+INPUT  += @CMAKE_CURRENT_SOURCE_DIR@/Documentation/
592 594
 
593 595
 # This tag can be used to specify the character encoding of the source files
594 596
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is

BIN
Documentation/lemma.png View File


+ 0
- 47
LemmaCore/CMakeLists.txt View File

@@ -1,47 +0,0 @@
1
-include_directories(${CMAKE_INSTALL_PREFIX}/include)
2
-
3
-add_subdirectory("src")
4
-
5
-#option (SHARED_LEMMA_LIB off)
6
-#
7
-#if (SHARED_LEMMA_LIB)
8
-#	add_library( lemmacore SHARED ${SOURCE} )  
9
-#else()
10
-#	add_library( lemmacore STATIC ${SOURCE} )  
11
-#endif()
12
-add_library( lemmacore ${SOURCE} )  
13
-
14
-set_target_properties(lemmacore PROPERTIES 
15
-	VERSION  "${LEMMA_VERSION}"
16
-	SOVERSION "${LEMMA_VERSION_MAJOR}.${LEMMA_VERSION_MINOR}"
17
-	PROJECT_LABEL "Lemma ${LABEL_SUFFIX}"
18
-)
19
-
20
-# Linking
21
-add_dependencies(lemmacore YAML-CPP)
22
-if (LEMMA_TINYXML_SUPPORT)
23
-	add_dependencies(lemmacore TINYXML2)
24
-endif()
25
-if (LEMMA_MATIO_SUPPORT)
26
-	add_dependencies(lemmacore MATIO)
27
-endif()
28
-
29
-if ( LEMMA_VTK6_SUPPORT OR LEMMA_VTK7_SUPPORT ) 
30
-	target_link_libraries(lemmacore ${VTK_LIBRARIES})
31
-	target_link_libraries(lemmacore "matplot")
32
-endif()
33
-
34
-target_link_libraries(lemmacore "yaml-cpp")
35
-
36
-# Testing
37
-if (LEMMA_ENABLE_TESTING)
38
-	add_subdirectory(testing)
39
-endif()
40
-
41
-# Install
42
-install ( TARGETS lemmacore DESTINATION ${CMAKE_INSTALL_PREFIX}/lib )
43
-
44
-option( LEMMA_BUILD_EXAMPLES "Compile example Lemma applications" OFF )
45
-if (LEMMA_BUILD_EXAMPLES)
46
-	add_subdirectory(examples)
47
-endif()

+ 0
- 33
LemmaCore/examples/CMakeLists.txt View File

@@ -1,33 +0,0 @@
1
-#FILE(GLOB  examples  "*.cpp")
2
-
3
-#add_executable( datatem datatem.cpp )
4
-#target_link_libraries(datatem "lemmacore")
5
-
6
-#add_executable( wireantenna wireantenna.cpp )
7
-#target_link_libraries(wireantenna "lemmacore")
8
-
9
-#add_executable( DCIPElectrode  DCIPElectrode.cpp )
10
-#target_link_libraries(DCIPElectrode "lemmacore")
11
-
12
-#add_executable( digitalfiltercostrans  digitalfiltercostrans.cpp )
13
-#target_link_libraries(digitalfiltercostrans "lemmacore")
14
-
15
-#add_executable( dipolefreqsweep  dipolefreqsweep.cpp )
16
-#target_link_libraries(dipolefreqsweep "lemmacore")
17
-
18
-#add_executable( dipolesource  dipolesource.cpp )
19
-#target_link_libraries(dipolesource "lemmacore")
20
-
21
-#add_executable( edipole  edipole.cpp )
22
-#target_link_libraries(edipole "lemmacore")
23
-
24
-#add_executable( emdipearth1d  emdipearth1d.cpp )
25
-#target_link_libraries(emdipearth1d "lemmacore")
26
-
27
-#add_executable( femforward  femforward.cpp )
28
-#target_link_libraries(femforward "lemmacore")
29
-
30
-add_executable( filter  filter.cpp )
31
-target_link_libraries(filter "lemmacore")
32
-
33
-

+ 0
- 52
LemmaCore/examples/filter.cpp View File

@@ -1,52 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utfilter.cpp
4
-//
5
-//        Created:  07/20/2010 10:12:07 AM
6
-//       Compiler:  Tested with g++, icpc, and MSVC 2010
7
-//
8
-//         Author:  Trevor Irons (ti)
9
-//
10
-//   Organisation:  Colorado School of Mines (CSM)
11
-//                  United States Geological Survey (USGS)
12
-//
13
-//          Email:  tirons@mines.edu, tirons@usgs.gov
14
-//
15
-//  This program is free software: you can redistribute it and/or modify
16
-//  it under the terms of the GNU General Public License as published by
17
-//  the Free Software Foundation, either version 3 of the License, or
18
-//  (at your option) any later version.
19
-//
20
-//  This program is distributed in the hope that it will be useful,
21
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
22
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
-//  GNU General Public License for more details.
24
-//
25
-//  You should have received a copy of the GNU General Public License
26
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
27
-//
28
-// ===========================================================================
29
-
30
-/**
31
-  @author   Trevor Irons
32
-  @date     07/20/2010
33
-  @version   0.0
34
- **/
35
-
36
-#include "WindowFilter.h"
37
-using namespace Lemma;
38
-
39
-int main() {
40
-
41
-    auto Hamming = WindowFilter::NewSP();
42
-
43
-        Hamming->SetWindowType( HANNING );
44
-        Hamming->SetSamplingInterval(1e-4);
45
-        Hamming->SetBandwidth(300);
46
-        Hamming->SetNumberOfSamples(1./1e-4);
47
-
48
-    std::cout << Hamming->GetFilterCoefficients() //.transpose()
49
-              << std::endl;
50
-
51
-
52
-}

+ 0
- 342
LemmaCore/examples/utORS.cpp View File

@@ -1,342 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utdipolesource.cpp
4
-//
5
-//    Description:
6
-//
7
-//        Version:  0.0
8
-//        Created:  12/02/2009 11:57:14 AM
9
-//       Revision:  none
10
-//       Compiler:  g++ (c++)
11
-//
12
-//         Author:  Trevor Irons (ti)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  United States Geological Survey (USGS)
16
-//
17
-//          Email:  tirons@mines.edu, tirons@usgs.gov
18
-//
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include <iostream>
35
-#include <fstream>
36
-
37
-#include "dipolesource.h"
38
-#include "layeredearth.h"
39
-#include "receiverpoints.h"
40
-#include "emearth1d.h"
41
-#include "WireAntenna.h"
42
-#include "PolygonalWireAntenna.h"
43
-
44
-#if  LEMMAUSEVTK
45
-#include "vtkRenderer.h"
46
-#include "vtkRenderWindow.h"
47
-#include "vtkRenderWindowInteractor.h"
48
-#include "vtkRenderLargeImage.h"
49
-#include "vtkPNGWriter.h"
50
-#include "vtkRectilinearGrid.h"
51
-#include "vtkXMLRectilinearGridWriter.h"
52
-#include "vtkDoubleArray.h"
53
-#include "vtkFieldData.h"
54
-#include "vtkCellData.h"
55
-#endif     // -----  not LEMMA_USE_VTK  -----
56
-
57
-// For testing purposes disable VTK and run scale.sh
58
-//#undef LEMMAUSEVTK
59
-
60
-#include "timer.h"
61
-
62
-using namespace Lemma;
63
-
64
-double randDouble(double low, double high) {
65
-	//srand(time(0));
66
-	double temp;
67
-	/* swap low & high around if the user makes no sense */
68
-	if (low > high)	{
69
-	temp = low;
70
-	low = high;
71
-	high = temp;
72
-	}
73
-	/* calculate the random number & return it */
74
-	temp = (rand() / (static_cast<double>(RAND_MAX) + 1.0))
75
-	* (high - low) + low;
76
-	return temp;
77
-}
78
-
79
-
80
-int main() {
81
-
82
-	// Keep track of time
83
-	jsw_timer timer;
84
-
85
-
86
-	srand(time(0));
87
-
88
-	PolygonalWireAntenna *pa = PolygonalWireAntenna::New();
89
-	pa->SetNumberOfFrequencies(1);
90
-	pa->SetFrequency(0, 540000);
91
-    Real Depth  =   370;  // nominal depth
92
-    Real Width  = 0.14;  // transmitter height
93
-    Real Height = 0.70;//  .14;  //.014;  // transmitter width
94
-
95
-
96
-	pa->SetNumberOfPoints(5);
97
-    /*
98
-    pa->SetPoint(0, Vector3r(       0,       0, Depth));
99
-	pa->SetPoint(1, Vector3r(       0,       0, Depth+Height));
100
-	pa->SetPoint(2, Vector3r(       0,   Width, Depth+Height));
101
-	pa->SetPoint(3, Vector3r(       0,   Width, Depth));
102
-	pa->SetPoint(4, Vector3r(       0,       0, Depth));
103
-    */
104
-
105
-    pa->SetPoint(0, Vector3r(   -Width/2., -Height/2., Depth));
106
-	pa->SetPoint(1, Vector3r(    Width/2., -Height/2., Depth));
107
-	pa->SetPoint(2, Vector3r(    Width/2.,  Height/2., Depth));
108
-	pa->SetPoint(3, Vector3r(   -Width/2.,  Height/2., Depth));
109
-	pa->SetPoint(4, Vector3r(   -Width/2., -Height/2., Depth));
110
-
111
-	pa->SetCurrent(1.);
112
-    pa->SetNumberOfTurns(6);
113
-	//Vector3r rp = Vector3r::Random(3);
114
-	//rp << 150., 10, 0.;
115
-	//rp << -27.1456, 15.2350, -1e-3;
116
-	//rp << randDouble(-35,35), randDouble(-35,35), randDouble(-35,35);
117
-	//rp << 3.22806, -13.1548, 14.9695;
118
-	//rp.setRandom(3);
119
-	//std::cout <<  "rp " << rp.transpose() << std::endl;
120
-	//pa->ApproximateWithElectricDipoles(rp);
121
-
122
-
123
-	// Define model
124
-    Real Sigma = 1.0/20. ; // .05;
125
-	VectorXcr sigma(2);
126
-		sigma << Complex(0.,0), Complex(Sigma,0);
127
-	VectorXr  thick(1);
128
-		thick << 10;
129
-	LayeredEarthEM *earth = LayeredEarthEM::New();
130
-		earth->SetNumberOfLayers(2);
131
-		earth->SetLayerConductivity(sigma);
132
-		//earth->SetLayerThickness(thick);
133
-
134
-	// Receivers
135
-	ReceiverPoints *receivers = ReceiverPoints::New();
136
-		Vector3r loc;
137
-		Real ox    =    -5.*Width - .003373;
138
-		Real oy    =    -3.*Height - .003373;
139
-		Real oz    =    Depth - Height/2. - .003373;
140
-		int nx     =   120; // 60;
141
-		int ny     =   180; //  50;
142
-		int nz     =   100; // 40;
143
-		Real hx    =    11.*Width/nx;
144
-		Real hy    =     7.*Height/ny;
145
-		Real hz    =     1.*Height/nz;
146
-
147
-        receivers->SetNumberOfReceivers(nx*ny*nz);
148
-		int ir = 0;
149
-		for (int iz=0; iz<nz; ++iz) {
150
-		for (int iy=0; iy<ny; ++iy) {
151
-		for (int ix=0; ix<nx; ++ix) {
152
-			loc << ox+ix*hx, oy+iy*hy, oz+iz*hz;
153
-			receivers->SetLocation(ir, loc);
154
-			++ ir;
155
-		}
156
-        }
157
-        }
158
-
159
-	// EmEarth
160
-	EMEarth1D  *EmEarth = EMEarth1D::New();
161
-		//EmEarth->AttachWireAntenna(wire);
162
-		EmEarth->AttachWireAntenna(pa);
163
-		EmEarth->AttachLayeredEarthEM(earth);
164
-		EmEarth->AttachReceiverPoints(receivers);
165
-		EmEarth->SetFieldsToCalculate(E);
166
-        //EmEarth->SetHankelTransformMethod(GAUSSIANQUADRATURE);
167
-        EmEarth->SetHankelTransformMethod(ANDERSON801);
168
-
169
-	// Do calculation
170
-	timer.begin();
171
-	EmEarth->CalculateWireAntennaFields();
172
-	Real paTime = timer.end();
173
-	std::cout << "Polygonal wire antennae time: " << paTime << "\n";
174
-
175
-	//EmEarth->AttachWireAntenna(wire);
176
-	//timer.begin();
177
-	//EmEarth->CalculateWireAntennaFields();
178
-	//Real waTime = timer.end();
179
-	//std::cout << "Fixed wire antennae time: " << waTime << "\n";
180
-/*
181
-	depth = depth2;
182
-	std::fstream real("reale_lay.dat", std::ios::out);
183
-	std::fstream imag("image_lay.dat", std::ios::out);
184
-	for (int iz=0; iz<nz; ++iz) {
185
-		Vector3cr temp = receivers->GetEfield(0,iz);
186
-		real << ox << "\t" << oy << "\t" << depth << "\t"
187
-				<< temp(0).real() << "\t" << temp(1).real()
188
-				<< "\t" << temp(2).real() << std::endl;
189
-		imag << ox << "\t" << oy << "\t" << depth << "\t"
190
-				<< std::imag(temp(0)) << "\t" << std::imag(temp(1))
191
-				<< "\t" << std::imag(temp(2)) << std::endl;
192
-		depth += dx;
193
-	}
194
-	real.close();
195
-	imag.close();
196
-*/
197
-
198
-	//wire->Delete();
199
-#if  LEMMAUSEVTK
200
-
201
-    // Set Coordinates
202
-    vtkDoubleArray *xCoords = vtkDoubleArray::New();
203
-    xCoords->InsertNextValue(ox-hx/2.);
204
-    double xm1 = ox-hx/2.;
205
-    for (int ix=0; ix<nx; ix++) {
206
-        xCoords->InsertNextValue(xm1 + hx);
207
-        xm1 += hx;
208
-    }
209
-
210
-    vtkDoubleArray *yCoords = vtkDoubleArray::New();
211
-    yCoords->InsertNextValue(oy-hy/2.);
212
-    double ym1 = oy-hy/2.;
213
-    for (int iy=0; iy<ny; iy++) {
214
-        yCoords->InsertNextValue(ym1 + hy);
215
-        ym1 += hy;
216
-    }
217
-
218
-    vtkDoubleArray *zCoords = vtkDoubleArray::New();
219
-    zCoords->InsertNextValue(oz-hz/2.);
220
-    double zm1 = oz-hz/2.;
221
-    for (int iz=0; iz<nz; iz++) {
222
-        zCoords->InsertNextValue(zm1 + hz);
223
-        zm1 += hz;
224
-    }
225
-
226
-    vtkDoubleArray *EReal = vtkDoubleArray::New();
227
-    vtkDoubleArray *EImag = vtkDoubleArray::New();
228
-    vtkDoubleArray *Watts = vtkDoubleArray::New();
229
-    EReal->SetNumberOfComponents(3);
230
-    EImag->SetNumberOfComponents(3);
231
-    Watts->SetNumberOfComponents(1);
232
-
233
-    ir = 0;
234
-    Real WattsTotal(0);
235
-    Real WattsInterior(0);
236
-    for (int iz=0; iz<nz; ++iz) {
237
-    for (int iy=0; iy<ny; ++iy) {
238
-    for (int ix=0; ix<nx; ++ix) {
239
-        //sigmaArray->InsertTuple1(i,  sigma[ix][iy][iz] );
240
-		Vector3cr E = receivers->GetEfield(0, ir);
241
-        EReal-> InsertTuple3(ir, real(E(0)), real(E(1)), real(E(2)));
242
-        EImag-> InsertTuple3(ir, imag(E(0)), imag(E(1)), imag(E(2)));
243
-        //std::cout << std::abs(ox+ix*hx) << "\t"  <<  Width/2. << endl; // && std::abs(oy+iy*hy) > Height/2. ) { // && std::abs(oz+iz*hz - Depth) > Width/2. ) {
244
-        //if ( std::abs( ox+ix*hx ) < Width/2. && std::abs(oy+iy*hy) < Height/2. && std::abs(oz+iz*hz - Depth) < Width/2. ) {
245
-        if ( std::sqrt( std::pow(ox+ix*hx,2)  + std::pow(oz+iz*hz - Depth, 2) ) < .085 && std::abs(oy+iy*hy) < Height/2. ) {
246
-            Watts-> InsertTuple1(ir,  1e-20 );
247
-            WattsInterior += .5*  (( pow((std::abs(E(0)) + std::abs(E(1)) + std::abs(E(2))), 2)*Sigma)*hx*hy*hz );
248
-        } else {
249
-            Watts-> InsertTuple1(ir, .5* (pow( (std::abs(E(0)) + std::abs(E(1)) + std::abs(E(2))), 2)*Sigma)*hx*hy*hz );
250
-            //Watts-> InsertTuple1(ir,  1e-20 );
251
-            WattsTotal += .5*  (( pow((std::abs(E(0)) + std::abs(E(1)) + std::abs(E(2))), 2)*Sigma)*hx*hy*hz );
252
-        }
253
-		++ ir;
254
-    }
255
-    }
256
-    }
257
-    std::cout << "Total Power: " << Sigma << "\t" << WattsTotal << "\t" << WattsInterior << endl;
258
-
259
-    EReal->SetName("E_real");
260
-    EImag->SetName("E_imag");
261
-    Watts->SetName("Power");
262
-
263
-    vtkRectilinearGrid *rgrid = vtkRectilinearGrid::New();
264
-        rgrid->SetDimensions(nx+1,ny+1,nz+1);
265
-        rgrid->SetXCoordinates(xCoords);
266
-        rgrid->SetYCoordinates(yCoords);
267
-        rgrid->SetZCoordinates(zCoords);
268
-
269
-        rgrid->GetCellData()->AddArray(EReal);
270
-        rgrid->GetCellData()->AddArray(EImag);
271
-        rgrid->GetCellData()->AddArray(Watts);
272
-        //rgrid->Update();
273
-
274
-    vtkXMLRectilinearGridWriter *gridWrite = vtkXMLRectilinearGridWriter::New();
275
-        gridWrite->SetInputData(rgrid);
276
-        gridWrite->SetFileName("ors.vtr");
277
-        gridWrite->Write();
278
-        //gridWrite->Update();
279
-
280
-#endif
281
-	EmEarth->Delete();
282
-	receivers->Delete();
283
-	earth->Delete();
284
-
285
-#if  LEMMAUSEVTKX
286
-	// Create the usual rendering stuff.
287
-	vtkRenderer           *renderer = vtkRenderer::New();
288
-	vtkRenderWindow         *renWin = vtkRenderWindow::New();
289
-	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
290
-
291
-	std::cout << "wire antennae approximating " << std::endl;
292
-	loc << 0, .5*Width, Depth+.5*Height;
293
-	pa->ApproximateWithElectricDipoles(loc);
294
-    std::cout <<  "Wire approximated with " << pa->GetNumberOfDipoles() << std::endl;
295
-
296
-    vtkActor **pdipActors = new vtkActor*[pa->GetNumberOfDipoles()];
297
-	for (int id=0; id<pa->GetNumberOfDipoles(); ++id) {
298
-		pdipActors[id] = pa->GetVtkActor(id);
299
-		renderer->AddActor(pdipActors[id]);
300
-	}
301
-
302
-    /*
303
-    vtkActor **dipActors = new vtkActor*[wire->GetNumberOfDipoles()];
304
-	for (int id=0; id<wire->GetNumberOfDipoles(); ++id) {
305
-		dipActors[id] = wire->GetVtkActor(id);
306
-		renderer->AddActor(dipActors[id]);
307
-	}
308
-    */
309
-
310
-	renderer->SetBackground(1,1,1);
311
-
312
-	// Render the window
313
-	renWin->AddRenderer(renderer);
314
-	renWin->SetWindowName("Wire antennae");
315
-
316
-	iren->SetRenderWindow(renWin);
317
-	iren->Initialize();
318
-	iren->Start();
319
-	iren->Render();
320
-
321
-    #if 0
322
-	cout << "Enter File name?: ";
323
-	std::string pngName;
324
-	std::cin >> pngName;
325
-	vtkPNGWriter *pngwrite = vtkPNGWriter::New();
326
-	vtkRenderLargeImage *renlarge = vtkRenderLargeImage::New();
327
-	renlarge->SetInput(renderer);
328
-	renlarge->SetMagnification(2);
329
-	pngwrite->SetInputConnection(renlarge->GetOutputPort());
330
-	pngName.append(".png");
331
-	pngwrite->SetFileName(pngName.c_str());
332
-	pngwrite->Write();
333
-    #endif
334
-
335
-#endif     // -----  not LEMMA_USE_VTK  -----
336
-
337
-
338
-	//std::cout << *pa << std::endl;
339
-	//pa->Delete();
340
-
341
-	return 0;
342
-}

+ 0
- 34
LemmaCore/examples/utQWEKey.cpp View File

@@ -1,34 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      02/12/2014 01:01:29 PM
13
- * @version   $Id$
14
- * @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
18
- */
19
-
20
-#include "QWEKey.h"
21
-using namespace Lemma;
22
-
23
-int main() {
24
-
25
-    // TODO chech
26
-
27
-    QWEKey* QWE = QWEKey::New();
28
-    QWE->TestPrivate( 5 );
29
-    QWE->Delete();
30
-
31
-    return 0;
32
-}
33
-
34
-

+ 0
- 86
LemmaCore/examples/utSerialize.cpp View File

@@ -1,86 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      09/29/2014 01:31:26 PM
13
- * @version   $Id$
14
- * @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
18
- */
19
-
20
-#include "Lemma"
21
-
22
-using namespace Lemma;
23
-
24
-#ifdef  HAVE_YAMLCPP
25
-#include "yaml-cpp/yaml.h"
26
-
27
-int main() {
28
-
29
-    std::ofstream ofstr("output.yaml");
30
-    //ofstr << "%YAML 1.2\n" << "---\n";
31
-    //ofstr << "LEMMA_CLASSES:\n";
32
-
33
-    // This works for individual classes or even groups of unrelated classes. But
34
-    // How should references work? One option would be to hack YAML and allow for references
35
-    // across 'Docs'. This is maybe undesireable, as then it's not valid YAML anymore.
36
-    // OR we could have some other kind of IDENTIFIER that could be used and Connections could be
37
-    // made AFTER the whole file is processed?
38
-
39
-    // Alternative is each class is written to it's own file. And then implicit on the Serialize function, the file tags are written
40
-    // into the YAML instead of the pointer. Alternatively, tags could do this too.
41
-
42
-    // Or file could be saved as pointer.yaml
43
-
44
-    // *
45
-    // * Or a file contains all the subclasses it point to. So that it's self-enclosed. This is nice as it's quite
46
-    // * flexible. The only downwside is possible repeat of classes. Basically if the API is careful though, only 1
47
-    // * instance will need to be serialized.
48
-    // *
49
-
50
-
51
-    TEMTransmitter* Seq = TEMTransmitter::New();
52
-        Seq->SetRepFrequency( 20, KHZ );
53
-        VectorXr Times (18);
54
-        VectorXr Amps (18);
55
-        Times << 0.0, 0.03051, 0.10267, 0.19408, 0.19889, 0.21332, 0.74249, 1.3775, 1.83452, 2.52245, \
56
-                3.191132, 3.9031135, 4.0, 4.00484486, 4.123904, 4.200182, 4.20732, 4.212946;
57
-        Amps << 0.0, 14.71872, 62.34372, 114.84372, 117.84372, 118.96872, 118.96872, 118.96872, 118.96872,\
58
-                118.59372, 119.34372, 120.0, 120.0, 117.94176, 47.60364, 0.8905848, 0.1203888, 0.0;
59
-        Seq->SetWaveform(Times, Amps, MILLISEC);
60
-    // OK dump to disk
61
-    ofstr << *Seq ;
62
-    ofstr.close();
63
-    Seq->Delete();
64
-
65
-
66
-    // OK now load
67
-    std::ifstream ifstr("output.yaml");
68
-    std::vector<YAML::Node> nodes = YAML::LoadAll(ifstr);
69
-
70
-    TEMTransmitter* Seq2 = TEMTransmitter::DeSerialize( nodes[0] );
71
-    std::cout << "Loaded\n" << *Seq2;
72
-    Seq2->Delete();
73
-    ifstr.close();
74
-
75
-    //YAML::Node nodes = YAML::LoadFile("output.yaml");
76
-    //std::cout << nodes[0] << std::endl;
77
-    //std::cout << nodes[1] << std::endl;
78
-
79
-    exit(EXIT_SUCCESS);
80
-}
81
-
82
-#else
83
-int main() {
84
-
85
-}
86
-#endif

+ 0
- 31
LemmaCore/examples/utSkyTEM.cpp View File

@@ -1,31 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      02/27/2015 11:02:43 AM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2015, XRI Geophysics, LLC
17
- * @copyright Copyright (c) 2015, Trevor Irons
18
- */
19
-
20
-// SkyTEM forward modelling programme
21
-
22
-#include "TEMSurvey.h"
23
-
24
-int main() {
25
-
26
-    std::cout << "SkyTEM modelling\n";
27
-
28
-
29
-
30
-}
31
-

+ 0
- 197
LemmaCore/examples/utTEMSurvey.cpp View File

@@ -1,197 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      10/06/2014 10:37:30 AM
13
- * @version   $Id$
14
- * @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
18
- */
19
-
20
-#include "Lemma"
21
-using namespace Lemma;
22
-
23
-int main() {
24
-
25
-    // Each pulse sequence functions as an autonomous transmitter. A record may contain multiple transmitters (moments).
26
-    // There is some small overhead for wire loop locations, but generality is retained doing this, as well as monitoring of
27
-    // slight changes in geometry for both pulses.
28
-    TEMTransmitter* TxHM = TEMTransmitter::New();
29
-        TxHM->SetRepFrequency( 20, KHZ );
30
-        VectorXr Times (18);
31
-        VectorXr Amps (18);
32
-        Times << 0.0, 0.03051, 0.10267, 0.19408, 0.19889, 0.21332, 0.74249, 1.3775, 1.83452, 2.52245, \
33
-                3.191132, 3.9031135, 4.0, 4.00484486, 4.123904, 4.200182, 4.20732, 4.212946;
34
-        Amps << 0.0, 14.71872, 62.34372, 114.84372, 117.84372, 118.96872, 118.96872, 118.96872, 118.96872,\
35
-                118.59372, 119.34372, 120.0, 120.0, 117.94176, 47.60364, 0.8905848, 0.1203888, 0.0;
36
-        TxHM->SetWaveform( Times, Amps, MILLISEC );
37
-        // Define wire loop
38
-        TxHM->SetNumberOfPoints(8);
39
-        TxHM->SetPoint(0, Vector3r( -16.10,    2.13,  -34));
40
-        TxHM->SetPoint(1, Vector3r(  -7.51,   10.72,  -34));
41
-        TxHM->SetPoint(2, Vector3r(   7.51,   10.72,  -34));
42
-        TxHM->SetPoint(3, Vector3r(  14.92,    3.31,  -34));
43
-        TxHM->SetPoint(4, Vector3r(  14.92,   -3.31,  -34));
44
-        TxHM->SetPoint(5, Vector3r(   7.51,  -10.72,  -34));
45
-        TxHM->SetPoint(6, Vector3r(  -7.51,  -10.72,  -34));
46
-        TxHM->SetPoint(7, Vector3r( -16.10,   -2.13,  -34));
47
-        TxHM->SetNumberOfTurns(8);
48
-
49
-    // Each Transmitter needs its own `Receiver(s)', the only difference may be the time gates, but that's OK.
50
-    //     It's a minor amount of overhead for greatly improved genearality. As sometimes different gates are
51
-    //     masked.
52
-    TEMInductiveReceiver* RxHM = TEMInductiveReceiver::New();
53
-        RxHM->SetComponent( ZCOMPONENT );      // What about Overloaded to take (X), (X,Y), or (X,Y,Z) or what about tilt?
54
-        RxHM->SetMoment( 1 );                  // Normalized
55
-        RxHM->SetReferenceTime( 4., MILLISEC );
56
-        RxHM->SetRxLocation( (Vector3r() << -16.80, 0, -36.00).finished() );
57
-
58
-        // Gate Centres  ms
59
-        VectorXr centres (37);
60
-        centres << 7.15000000e-04,   2.21500000e-03,   4.21500000e-03,   6.21500000e-03,
61
-                   8.21500000e-03,   1.02150000e-02,   1.22150000e-02,   1.47150000e-02,
62
-                   1.82150000e-02,   2.27150000e-02,   2.82150000e-02,   3.52150000e-02,
63
-                   4.42150000e-02,   5.57150000e-02,   7.02150000e-02,   8.82150000e-02,
64
-                   1.10715000e-01,   1.38715000e-01,   1.74215000e-01,   2.19715000e-01,
65
-                   2.76715000e-01,   3.48715000e-01,   4.39715000e-01,   5.53715000e-01,
66
-                   6.97715000e-01,   8.79215000e-01,   1.10771500e+00,   1.39621500e+00,
67
-                   1.76021500e+00,   2.21871500e+00,   2.79671500e+00,   3.52571500e+00,
68
-                   4.44471500e+00,   5.60321500e+00,   7.06321500e+00,   8.90421500e+00,
69
-                   1.10667200e+01;
70
-        //centres.array() += 4.;
71
-
72
-        // Gate Widths  ms
73
-        VectorXr widths (37);
74
-        widths <<   4.30000000e-04,   1.43000000e-03,   3.43000000e-03,   5.43000000e-03,
75
-                    7.43000000e-03,   9.43000000e-03,   1.14300000e-02,   1.34300000e-02,
76
-                    1.64300000e-02,   2.04300000e-02,   2.54300000e-02,   3.14300000e-02,
77
-                    3.94300000e-02,   4.94300000e-02,   6.24300000e-02,   7.84300000e-02,
78
-                    9.84300000e-02,   1.23430000e-01,   1.54430000e-01,   1.94430000e-01,
79
-                    2.45430000e-01,   3.08430000e-01,   3.89430000e-01,   4.90430000e-01,
80
-                    6.17430000e-01,   7.78430000e-01,   9.80430000e-01,   1.23543000e+00,
81
-                    1.55743000e+00,   1.96343000e+00,   2.47443000e+00,   3.11943000e+00,
82
-                    3.93243000e+00,   4.95743000e+00,   6.24943000e+00,   7.87743000e+00,
83
-                    9.93143000e+00;
84
-
85
-        RxHM->SetWindows(centres, widths, MILLISEC);
86
-
87
-    TEMTransmitter* TxLM = TEMTransmitter::New();
88
-        TxLM->SetRepFrequency( 20, KHZ );
89
-        VectorXr TimesLM (18);
90
-        VectorXr AmpsLM (18);
91
-
92
-        TimesLM << -8.00000E-004, -7.86965E-004, -7.66493E-004, -7.23688E-004,
93
-                   -6.39938E-004, -5.16174E-004, -3.93340E-004, -2.63993E-004,
94
-                   -1.43952E-004, -7.15990E-006, -2.50712E-006,  0.00000E+000,
95
-                    2.19597E-007,  1.47193E-006,  3.34398E-006,  4.68669E-006,
96
-                    5.96484E-006,  7.04934E-006;
97
-        TimesLM.array() = TimesLM.array() + 8e-4;  // Valgrind Hack += yields error. Correct for SkyTEM convention
98
-
99
-
100
-        AmpsLM <<  0.00000E+000,  3.67188E-002,  6.17188E-002,  1.17969E-001,
101
-                   2.14844E-001,  3.28906E-001,	 4.75781E-001,  6.30469E-001,
102
-                   7.82031E-001,  9.92969E-001,	 1.00000E+000,  1.00000E+000,
103
-                   9.63459E-001,  6.01030E-001,  2.29652E-001,  8.64702E-002,
104
-                   2.53196E-002,  0.00000E+000;
105
-        AmpsLM.array() = AmpsLM.array() * 8.;   // Also correct for SkyTEM convention in .geo file
106
-
107
-        TxLM->SetWaveform( TimesLM, AmpsLM, SEC );
108
-        // Define wire loop
109
-        TxLM->SetNumberOfPoints(8);
110
-        TxLM->SetPoint(0, Vector3r( -16.10,    2.13,  -34));
111
-        TxLM->SetPoint(1, Vector3r(  -7.51,   10.72,  -34));
112
-        TxLM->SetPoint(2, Vector3r(   7.51,   10.72,  -34));
113
-        TxLM->SetPoint(3, Vector3r(  14.92,    3.31,  -34));
114
-        TxLM->SetPoint(4, Vector3r(  14.92,   -3.31,  -34));
115
-        TxLM->SetPoint(5, Vector3r(   7.51,  -10.72,  -34));
116
-        TxLM->SetPoint(6, Vector3r(  -7.51,  -10.72,  -34));
117
-        TxLM->SetPoint(7, Vector3r( -16.10,   -2.13,  -34));
118
-        TxLM->SetNumberOfTurns(8);
119
-
120
-
121
-    TEMInductiveReceiver* RxLM = TEMInductiveReceiver::New();
122
-        RxLM->SetComponent( ZCOMPONENT );      // What about Overloaded to take (X), (X,Y), or (X,Y,Z) or what about tilt?
123
-        RxLM->SetMoment( 1 );                  // Normalized
124
-        RxLM->SetReferenceTime( 8e-4, SEC );
125
-        RxLM->SetRxLocation( (Vector3r() << -16.80, 0, -36.00).finished() );
126
-
127
-        // Gate Centres  ms
128
-        VectorXr centresLM (26);
129
-            centresLM << 7.150000E-07, 2.215000E-06, 4.215000E-06, 6.215000E-06, 8.215000E-06,
130
-                         1.021500E-05, 1.221500E-05, 1.471500E-05, 1.821500E-05, 2.271500E-05,
131
-                         2.821500E-05, 3.521500E-05, 4.421500E-05, 5.571500E-05, 7.021500E-05,
132
-                         8.821500E-05, 1.107150E-04, 1.387150E-04, 1.742150E-04, 2.197150E-04,
133
-                         2.767150E-04, 3.487150E-04, 4.397150E-04, 5.537150E-04, 6.977150E-04,
134
-                         8.792150E-04;
135
-
136
-        VectorXr widthsLM (26);
137
-            widthsLM << 5.700000E-07, 1.570000E-06, 1.570000E-06, 1.570000E-06, 1.570000E-06,
138
-                        1.570000E-06, 1.570000E-06, 2.570000E-06, 3.570000E-06, 4.570000E-06,
139
-                        5.570000E-06, 7.570000E-06, 9.570000E-06, 1.257000E-05, 1.557000E-05,
140
-                        1.957000E-05, 2.457000E-05, 3.057000E-05, 3.957000E-05, 5.057000E-05,
141
-                        6.257000E-05, 8.057000E-05, 1.005700E-04, 1.265700E-04, 1.605700E-04,
142
-                        2.015700E-04;
143
-
144
-        RxLM->SetWindows(centresLM, widthsLM, SEC);
145
-
146
-
147
-
148
-    // Specifies survey, this is the Glue Class, the top of the structure, etc.
149
-    TEMSurvey* Survey = TEMSurvey::New();
150
-        Survey->SetNumberOfLines(1);  // Flight lines or
151
-                                      // Internally each line is a class? But that's sort of hidden to the
152
-                                      // end user. Having each line seperate is nice for constrained inversion, where
153
-                                      // each line is a nice thing to deal with.
154
-        Survey->GetLine(0)->SetNumberOfRecords(1);    // Each Record then contains everything needed for modelling response curve(s)
155
-        Survey->GetLine(0)->GetRecord(0)->SetNumberOfPulseSequences( 1 );
156
-        Survey->GetLine(0)->GetRecord(0)->SetTransmitterReceiverPair( 0, TxHM, RxHM );
157
-        //Survey->GetLine(0)->GetRecord(0)->SetTransmitterReceiverPair( 1, TxHM, RxHM );
158
-
159
-
160
-    LayeredEarthEM* Earth = LayeredEarthEM::New();
161
-        Earth->SetNumberOfLayers(31);
162
-        Earth->SetLayerThickness( (VectorXr(29) <<  5.00E+00,  5.40E+00,
163
-             5.80E+00, 6.30E+00, 6.80E+00, 7.30E+00, 7.80E+00, 8.50E+00,
164
-             9.10E+00, 9.80E+00, 1.06E+01, 1.14E+01, 1.23E+01, 1.33E+01,
165
-             1.43E+01, 1.54E+01, 1.66E+01, 1.79E+01, 1.93E+01, 2.08E+01,
166
-             2.25E+01, 2.42E+01, 2.61E+01, 2.81E+01, 3.03E+01, 3.27E+01,
167
-             3.52E+01, 3.80E+01, 4.10E+01).finished() );
168
-
169
-        VectorXcr rho = ( (VectorXcr(31) << 0, 1.54E+01, 4.21E+01,
170
-            9.25E+01, 1.26E+02, 1.17E+02, 7.57E+01, 3.21E+01, 1.40E+01, 1.96E+01,
171
-            2.67E+01, 2.56E+01, 2.00E+01, 1.86E+01, 2.31E+01, 2.97E+01, 3.50E+01,
172
-            3.79E+01, 3.75E+01, 3.32E+01, 2.52E+01, 1.57E+01, 8.38E+00, 5.38E+00,
173
-            5.49E+00, 6.34E+00, 7.07E+00, 7.81E+00, 8.67E+00, 9.59E+00, 1.05E+01
174
-        ).finished() ); // 200 Ohm-m half space
175
-
176
-        Earth->SetLayerConductivity( 1./rho.array() );
177
-        // ALL SET UP
178
-        std::cout << *Survey << std::endl;
179
-
180
-        // OK do your thinc
181
-        //DataTEM* data =
182
-        Survey->ForwardModel( Earth );
183
-
184
-
185
-    // Clean up
186
-
187
-
188
-
189
-//     //Survey->Delete();
190
-//     Earth->Delete();
191
-//
192
-//     TxHM->Delete();
193
-//     RxHM->Delete();
194
-//     TxLM->Delete();
195
-//     RxLM->Delete();
196
-
197
-}

+ 0
- 168
LemmaCore/examples/utXMLParse.cpp View File

@@ -1,168 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      04/03/2014 01:08:28 PM
13
- * @version   $Id$
14
- * @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
18
- */
19
-
20
-#include "Lemma"
21
-#ifdef TINYXMLSUPPORT
22
-#include "tinyxml2.h"
23
-
24
-#include <ctime>
25
-using namespace tinyxml2;
26
-using namespace Lemma;
27
-
28
-void ParseTEM( XMLElement* element );
29
-
30
-template <typename T>
31
-std::vector<T> ReadLine( const int& nr, const std::string& line ) ;
32
-
33
-int main(int argc, char **argv) {
34
-
35
-    if ( argc > 1 ) {
36
-		XMLDocument* doc = new XMLDocument();
37
-		clock_t startTime = clock();
38
-		doc->LoadFile( argv[1] );
39
-		clock_t loadTime = clock();
40
-		int errorID = doc->ErrorID();
41
-
42
-        // Get some info
43
-        //static const char* xml = "<element/>";
44
-        //doc->Parse( xml );
45
-        //XMLNode* titleElement = doc->FirstChild(); //Element()->FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );
46
-        XMLElement* titleElement = doc->FirstChildElement( ); //->FirstChildElement( "TITLE" );
47
-        //const char* title = titleElement->Value(); //GetText();
48
-        const char* title = titleElement->Value(); //GetText();
49
-
50
-        printf( "Test file '%s' loaded. ErrorID=%d\n", argv[1], errorID );
51
-        printf( "Name of FirstChildElement: %s\n", title );
52
-
53
-        if (strcmp ( titleElement->Value(), "NGXFile" ) != 0) {
54
-            std::cout <<"NGX file was not detected!" << std::endl;
55
-            exit(EXIT_FAILURE);
56
-        } else {
57
-            //std::cout <<
58
-            //titleElement->FirstAttribute() ;//"type");// << std::endl;;
59
-            if (strcmp(  titleElement->FindAttribute("type")->Value(),"tem") == 0) {
60
-                // Parse TEM file
61
-                ParseTEM( titleElement );
62
-            } else {
63
-                std::cout << "No parser for NGX filetype " << titleElement->FindAttribute("type")->Value() << std::endl;
64
-                std::cout << "YOU should write one!\n";
65
-                exit(EXIT_FAILURE);
66
-            }
67
-
68
-        }
69
-
70
-		delete doc; doc = 0;
71
-
72
-        clock_t deleteTime = clock();
73
-		if ( !errorID ) {
74
-			printf( "========================================================\n");
75
-			printf( "Load time=%u\n",   (unsigned)(loadTime - startTime) );
76
-			printf( "Delete time=%u\n", (unsigned)(deleteTime - loadTime) );
77
-			printf( "Total time=%u\n",  (unsigned)(deleteTime - startTime) );
78
-		}
79
-
80
-
81
-		exit(0);
82
-	} else {
83
-        std::cout << "Enter NGX.x file to parse\n";
84
-    }
85
-}
86
-
87
-void ParseTEM( XMLElement* element ) {
88
-
89
-    std::cout << "This is a NGX.t file" << std::endl;
90
-
91
-
92
-    if (strcmp( element->FindAttribute("version")->Value(),"0.1") == 0) {
93
-        std::cout << "Version 0.1 detected" << std::endl;
94
-    } else {
95
-        std::cout << "Unsupported NGX.t version" << std::endl;
96
-    }
97
-
98
-    // system description
99
-    std::cout << "System description" << std::endl;
100
-    std::cout << element->FirstChildElement("system")->FirstChildElement("name")->GetText() << std::endl;
101
-    XMLElement* system = element->FirstChildElement("system");
102
-        int ntx = atoi(system->FirstChildElement("transmitters")->FindAttribute("num")->Value());
103
-        std::cout << "numTx = " << ntx << std::endl;
104
-        // OK Parse Transmitter(s)
105
-        XMLElement* tx = system->FirstChildElement("transmitters")->FirstChildElement("transmitter");
106
-        //    std::cout << "Tx id = " << tx->FindAttribute("id")->Value() << std::endl;
107
-        //std::cout << tx->FirstChildElement("loop.coordinates")->FindAttribute("npoint")->Value();//->FirstChildElement("northingPoints")->Value() << std::endl;
108
-        //std::cout << tx->FirstChildElement("loop.coordinates")->FirstChildElement("northing.points")->GetText();//->FirstChildElement("northingPoints")->Value() << std::endl;
109
-        for (int it=0; it<ntx; ++it) {
110
-            std::cout << "\nTransmitter " << it << std::endl;
111
-            if (it > 0) tx = tx->NextSiblingElement();
112
-            int npoints = atoi(tx->FirstChildElement("loop.coordinates")->FindAttribute("npoint")->Value());
113
-
114
-            std::cout << "points= " << npoints; // tx->FirstChildElement("loop.coordinates")->FindAttribute("npoint")->Value();//->FirstChildElement("northingPoints")->Value() << std::endl;
115
-            std::vector<Real> LP = ReadLine<Real>( npoints, std::string(tx->FirstChildElement("loop.coordinates")->FirstChildElement("northing.points")->GetText()) );
116
-            for (int ii=0; ii<npoints; ++ii) std::cout << "\t"<< LP[ii] ;
117
-            //std::cout << tx->FirstChildElement("loop.coordinates")->FirstChildElement("northing.points")->GetText();//->FirstChildElement("northingPoints")->Value() << std::endl;
118
-            //std::cout << tx->FirstChildElement("loop.coordinates")->FirstChildElement("easting.points")->GetText();//->FirstChildElement("northingPoints")->Value() << std::endl;
119
-        }
120
-    std::cout << "\nEND system description\n";
121
-
122
-}
123
-
124
-
125
-template <typename T>
126
-std::vector<T> ReadLine( const int& nr, const std::string& line ) {
127
-
128
-    std::vector<T>   lineData;
129
-    std::stringstream  lineStream(line);
130
-
131
-    T value;
132
-    while(lineStream >> value) {
133
-        lineData.push_back(value);
134
-    }
135
-    return lineData;
136
-}
137
-#else
138
-
139
-int main() {
140
-    std::cout << "you have to compile lemma with external tinyxml library to use this" << std::endl;
141
-}
142
-
143
-#endif
144
-
145
-    //--------------------------------------------------------------------------------------
146
-    //       Class:  ASCIIParser
147
-    //      Method:  ReadInts
148
-    //--------------------------------------------------------------------------------------
149
-//     std::vector<int> ReadInts ( const int& nr ) {
150
-//         std::string buf;
151
-//         char *dump = new char[BufferSize];
152
-//         std::vector<int> vals(0);
153
-//         while (input >> buf) {
154
-//             if (buf.substr(0, CommentString.size()) == CommentString) {
155
-//                 input.getline(dump, BufferSize);
156
-//             } else {
157
-//                 vals.push_back( atoi(buf.c_str() ));
158
-//             }
159
-//             if (static_cast<int>(vals.size()) == nr) {
160
-//                 delete [] dump;
161
-//                 return vals;
162
-//             }
163
-//
164
-//         }
165
-//         delete [] dump;
166
-//         return vals;
167
-//     }		// -----  end of method ASCIIParser::ReadInts  -----
168
-

+ 0
- 67
LemmaCore/examples/utYAMLconfig.cpp View File

@@ -1,67 +0,0 @@
1
-#ifdef HAVE_YAMLCPP
2
-
3
-#include "yaml-cpp/yaml.h"
4
-#include "yaml-cpp/eventhandler.h"
5
-#include <fstream>
6
-#include <iostream>
7
-#include <vector>
8
-
9
-struct Params {
10
-	bool hasFile;
11
-	std::string fileName;
12
-};
13
-
14
-Params ParseArgs(int argc, char **argv) {
15
-	Params p;
16
-
17
-	std::vector<std::string> args(argv + 1, argv + argc);
18
-
19
-	return p;
20
-}
21
-
22
-class NullEventHandler: public YAML::EventHandler
23
-{
24
-public:
25
-	virtual void OnDocumentStart(const YAML::Mark&) {}
26
-	virtual void OnDocumentEnd() {}
27
-
28
-	virtual void OnNull(const YAML::Mark&, YAML::anchor_t) {}
29
-	virtual void OnAlias(const YAML::Mark&, YAML::anchor_t) {}
30
-	virtual void OnScalar(const YAML::Mark&, const std::string&, YAML::anchor_t, const std::string&) {}
31
-
32
-	virtual void OnSequenceStart(const YAML::Mark&, const std::string&, YAML::anchor_t) {}
33
-	virtual void OnSequenceEnd() {}
34
-
35
-	virtual void OnMapStart(const YAML::Mark&, const std::string&, YAML::anchor_t) {}
36
-	virtual void OnMapEnd() {}
37
-};
38
-
39
-void parse(std::istream& input)
40
-{
41
-	try {
42
-		YAML::Node doc = YAML::Load(input);
43
-		std::cout << doc << "\n";
44
-	} catch(const YAML::Exception& e) {
45
-		std::cerr << e.what() << "\n";
46
-	}
47
-}
48
-
49
-int main(int argc, char **argv)
50
-{
51
-	Params p = ParseArgs(argc, argv);
52
-
53
-	if(argc > 1) {
54
-		std::ifstream fin;
55
-		fin.open(argv[1]);
56
-		parse(fin);
57
-	} else {
58
-		parse(std::cin);
59
-	}
60
-
61
-	return 0;
62
-}
63
-#else
64
-int main() {
65
-}
66
-#endif
67
-

+ 0
- 84
LemmaCore/examples/utgaussquad.cpp View File

@@ -1,84 +0,0 @@
1
-// ===========================================================================
2
-// 
3
-//       Filename:  utqaussquad.cpp
4
-// 
5
-//    Description:  Test for gaussian quadrature algorithm
6
-// 
7
-//        Version:  0.0
8
-//        Created:  10/05/2010 08:54:26 AM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++
11
-// 
12
-//         Author:  M. Andy Kass (MAK)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  Broken Spoke Development, LLC
16
-//
17
-//          Email:  mkass@numericalgeo.com
18
-// 
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include "Lemma"
35
-using namespace Lemma;
36
-using namespace std;
37
-
38
-#ifdef LEMMAUSEVTK
39
-#include "matplot.h"
40
-using namespace matplot;
41
-#endif
42
-
43
-int main() {
44
-
45
-	int N = 600;
46
-	int upb = 5;
47
-	int lowb = -1;
48
-	VectorXr func(N);
49
-	VectorXr wx(N);
50
-	Real integrationres,actres;
51
-
52
-	gaussianquadrature *lgqw = gaussianquadrature::New();
53
-	lgqw->SetFreqs(N,upb,lowb);
54
-	lgqw->CalcAW();
55
-
56
-	wx=lgqw->GetAbscissae();
57
-	func=cos(wx.array());
58
-//	for (int ii=0;ii<N;++ii) {
59
-//		cout << wx(ii) << "  " << func(ii) << endl;
60
-//	}
61
-
62
-	lgqw->SetFunc(func);
63
-	lgqw->Integrate();
64
-	integrationres=lgqw->GetResult();
65
-
66
-	actres = -sin((Real)upb)+sin((Real)lowb);
67
-	
68
-	cout << "Gaussian Quadrature Result: " << integrationres << endl;
69
-	cout << "Actual Result: " << actres << endl;
70
-	
71
-		
72
-	//Plot things
73
-	#ifdef LEMMAUSEVTK
74
-	double colour1[3] = {0.0,0.0,1.0};
75
-
76
-	Plot2D_VTK p1("X", "Y", 800,600);
77
-	p1.plot(wx,func,colour1,".-");
78
-	p1.show();
79
-
80
-	#endif
81
-
82
-	return EXIT_SUCCESS;
83
-}
84
-

+ 0
- 258
LemmaCore/examples/utgmrprint.cpp View File

@@ -1,258 +0,0 @@
1
-// ===========================================================================
2
-//   This file is distributed with Lemma,
3
-//
4
-//       Filename:  utsnmrinversion1d.cpp
5
-//
6
-//        Created:  10/07/2010 08:57:04 AM
7
-//       Compiler:  Tested with g++, icpc, and MSVC 2010
8
-//
9
-//         Author:  Trevor Irons (ti)
10
-//
11
-//   Organisation:  Colorado School of Mines (CSM)
12
-//                  United States Geological Survey (USGS)
13
-//
14
-//          Email:  tirons@mines.edu, tirons@usgs.gov
15
-//
16
-//  This program is free software: you can redistribute it and/or modify
17
-//  it under the terms of the GNU General Public License as published by
18
-//  the Free Software Foundation, either version 3 of the License, or
19
-//  (at your option) any later version.
20
-//
21
-//  This program is distributed in the hope that it will be useful,
22
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
23
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
-//  GNU General Public License for more details.
25
-//
26
-//  You should have received a copy of the GNU General Public License
27
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
28
-//
29
-// ===========================================================================
30
-
31
-/**
32
-  @file
33
-  @author   Trevor Irons
34
-  @date     10/07/2010
35
-  @version   0.0
36
- **/
37
-
38
-#ifdef LEMMAUSEVTK
39
-#include "vtkRenderer.h"
40
-#include "vtkRenderWindow.h"
41
-#include "vtkRenderWindowInteractor.h"
42
-#include "vtkPNGWriter.h"
43
-#include "vtkRenderLargeImage.h"
44
-#endif
45
-
46
-#include "receiverpoints.h"
47
-#include "emearth1d.h"
48
-#include "PolygonalWireAntenna.h"
49
-
50
-using namespace Lemma;
51
-
52
-std::vector<Real>  readinpfile(const std::string& fname);
53
-
54
-int main(int argc, char** argv) {
55
-
56
-    std::cout <<
57
-    "\n"
58
-    << "hantenna - a programme for computing the h field from polygonal wire\n"
59
-    << "loop sources \n\n"
60
-    << "The following copyrights apply to this application:\n"
61
-    << "Copyright (C) 2009, 2010, 2011, 2012 Colorado School of Mines\n"
62
-    << "Copyright (C) 2009, 2010, 2011, 2012 Trevor Irons\n"
63
-    << "Copyright (C) 2011 Broken Spoke Development, LLC\n\n"
64
-    << "hantenna was built using Lemma (Lemma is an Electromagnetics Modelling API)\n"
65
-    << "More information may be found at https://lemmasoftware.org\n\n"
66
-    << "This program is free software: you can redistribute it and/or modify\n"
67
-    << "it under the terms of the GNU General Public License as published by\n"
68
-    << "the Free Software Foundation, either version 3 of the License, or\n"
69
-    << "(at your option) any later version.\n\n"
70
-
71
-    << "This program is distributed in the hope that it will be useful,\n"
72
-    << "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
73
-    << "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
74
-    << "GNU General Public License for more details.\n\n"
75
-
76
-    << "You should have received a copy of the GNU General Public License\n"
77
-    << "along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\n";
78
-
79
-    if (argc < 4) {
80
-        std::cout << "usage: hantenna.exe  trans.inp cond.inp points.inp \n";
81
-        exit(0);
82
-    }
83
-
84
-    std::vector<Real> Trans   = readinpfile(std::string(argv[1]));
85
-    std::vector<Real> CondMod = readinpfile(std::string(argv[2]));
86
-    std::vector<Real> Points  = readinpfile(std::string(argv[3]));
87
-
88
-    //////////////////////////////////////
89
-    // Define transmitter
90
-    PolygonalWireAntenna* trans = PolygonalWireAntenna::New();
91
-        trans->SetNumberOfPoints((int)(Trans[0]));
92
-        int ip=1;
93
-        for ( ; ip<=(int)(Trans[0])*2; ip+=2) {
94
-            trans->SetPoint(ip/2, Vector3r (Trans[ip], Trans[ip+1], -1e-3));
95
-        }
96
- 	    trans->SetNumberOfFrequencies(1);
97
- 	    trans->SetFrequency(0, Trans[ip]);
98
-        trans->SetCurrent(Trans[ip+1]);
99
-
100
-	// Receivers
101
- 	ReceiverPoints *receivers = ReceiverPoints::New();
102
-        int nx = (int)Points[0];
103
-        int ny = (int)Points[1];
104
-        int nz = (int)Points[2];
105
-        Real ox = Points[3];
106
-        Real oy = Points[4];
107
-        Real oz = Points[5];
108
-     	Vector3r loc;
109
-        VectorXr dx(nx-1); // TODO map the dx, dy, dz vectors
110
-        VectorXr dy(ny-1);
111
-        VectorXr dz(nz-1);
112
-        ip = 6;
113
-        int ir = 0;
114
-        for ( ; ip <6+nx-1; ++ip) {
115
-            dx[ir] = Points[ip];
116
-            ++ir;
117
-        }
118
-        ir = 0;
119
-        for ( ; ip <6+ny-1+nx-1; ++ip) {
120
-            dy[ir] = Points[ip];
121
-            ++ir;
122
-        }
123
-        ir = 0;
124
-        for ( ; ip <6+nz-1+ny-1+nx-1; ++ip) {
125
-            dz[ir] = Points[ip];
126
-            ++ir;
127
-        }
128
- 		receivers->SetNumberOfReceivers(nx*ny*nz);
129
- 		ir = 0;
130
-        Real pz  = oz;
131
- 		for (int iz=0; iz<nz; ++iz) {
132
- 		    Real py    =  oy;
133
- 		    for (int iy=0; iy<ny; ++iy) {
134
- 		        Real px    =  ox;
135
- 		        for (int ix=0; ix<nx; ++ix) {
136
- 			        loc << px, py, pz;
137
- 			        receivers->SetLocation(ir, loc);
138
- 			        if (ix < nx-1) px += dx[ix];
139
- 			        ++ ir;
140
-     	        }
141
-                if (iy<ny-1) py += dy[iy];
142
-            }
143
-            if (iz<nz-1) pz += dz[iz];
144
-        }
145
-
146
-    ////////////////////////////////////
147
-    // Define model
148
-    LayeredEarthEM *earth = LayeredEarthEM::New();
149
-    VectorXcr sigma;
150
-    VectorXr  thick;
151
- 	earth->SetNumberOfLayers(CondMod[0]+1);
152
- 	sigma.resize(CondMod[0]+1); sigma(0) = 0; // airlayer
153
-    thick.resize(CondMod[0]-1);
154
-    int ilay=1;
155
-    for ( ; ilay/2<CondMod[0]-1; ilay+=2) {
156
-        sigma(ilay/2+1) =  1./CondMod[ilay];
157
-        thick(ilay/2) =  CondMod[ilay+1];
158
-    }
159
-    sigma(ilay/2+1) = 1./ CondMod[ilay];
160
-	earth->SetLayerConductivity(sigma);
161
-    if (thick.size() > 0) earth->SetLayerThickness(thick);
162
-
163
-	EMEarth1D  *EmEarth = EMEarth1D::New();
164
-		EmEarth->AttachWireAntenna(trans);
165
-		EmEarth->AttachLayeredEarthEM(earth);
166
-		EmEarth->AttachReceiverPoints(receivers);
167
-		EmEarth->SetFieldsToCalculate(H);
168
-        EmEarth->CalculateWireAntennaFields();
169
-
170
-    #ifdef LEMMAUSEVTK
171
-	vtkRenderer           *renderer = vtkRenderer::New();
172
-	vtkRenderWindow         *renWin = vtkRenderWindow::New();
173
-	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
174
-    trans->ApproximateWithElectricDipoles( (VectorXr (3) << 0,0,0).finished() );
175
-	vtkActor **dipActors = new vtkActor*[trans->GetNumberOfDipoles()];
176
-	for (int id=0; id<trans->GetNumberOfDipoles(); ++id) {
177
-		dipActors[id] = trans->GetVtkActor(id);
178
-		renderer->AddActor(dipActors[id]);
179
-	}
180
-    vtkActor *hfield  = receivers->GetVtkGlyphActor (HFIELDREAL, 3, 1e2, 0);
181
- 	vtkActor *hfieldi = receivers->GetVtkGlyphActor (HFIELDIMAG, 3, 1e2, 0);
182
-    hfieldi->GetProperty()->SetColor(1,0,1);
183
- 	hfield->GetProperty()->SetColor(0,1,0);
184
- 	renderer->AddActor(hfield);
185
- 	renderer->AddActor(hfieldi);
186
-	renderer->SetBackground(0,0,0);
187
-	// Render the window
188
-	renWin->AddRenderer(renderer);
189
-	iren->SetRenderWindow(renWin);
190
-	iren->Initialize();
191
-	iren->Start();
192
-	iren->Render();
193
-	cout << "Enter File name?: ";
194
-	std::string pngName;
195
-	std::cin >> pngName;
196
-	vtkPNGWriter *pngwrite = vtkPNGWriter::New();
197
-	vtkRenderLargeImage *renlarge = vtkRenderLargeImage::New();
198
-	renlarge->SetInput(renderer);
199
-	renlarge->SetMagnification(2);
200
-	pngwrite->SetInputConnection(renlarge->GetOutputPort());
201
-	pngName.append(".png");
202
-	pngwrite->SetFileName(pngName.c_str());
203
-	pngwrite->Write();
204
-	iren->Delete();
205
-	renWin->Delete();
206
-	renderer->Delete();
207
-    #endif
208
-
209
-    ////////////////////////////////////
210
-    // Report
211
- 	std::fstream hreal("hfield.dat", std::ios::out);
212
-    hreal << *trans << std::endl;
213
-    hreal << *earth << std::endl;
214
-    hreal << "Right hand coordinate system, z is positive down\n";
215
-    hreal << "x[m]\ty[m]\tz[m]\tHx[A/m]\tHy[A/m]\tHz[A/m]\n";
216
-    hreal.precision(8);
217
-    int i=0;
218
-	for (int iz=0; iz<nz; ++iz) {
219
-	for (int iy=0; iy<ny; ++iy) {
220
-	for (int ix=0; ix<nx; ++ix) {
221
-        hreal << receivers->GetLocation(i).transpose() << "\t";
222
- 		hreal << std::real(receivers->GetHfield(0, i).transpose()[0]) << "\t";
223
- 		hreal << std::imag(receivers->GetHfield(0, i).transpose()[0]) << "\t";
224
- 		hreal << std::real(receivers->GetHfield(0, i).transpose()[1]) << "\t";
225
- 		hreal << std::imag(receivers->GetHfield(0, i).transpose()[1]) << "\t";
226
- 		hreal << std::real(receivers->GetHfield(0, i).transpose()[2]) << "\t";
227
- 		hreal << std::imag(receivers->GetHfield(0, i).transpose()[2]) << "\n";
228
-        ++i;
229
-    }
230
-    }
231
-    }
232
-    hreal.close();
233
-
234
-    // Clean up
235
-    EmEarth->Delete();
236
-    earth->Delete();
237
-    receivers->Delete();
238
-    trans->Delete();
239
-}
240
-
241
-std::vector<Real>  readinpfile(const std::string& fname) {
242
-    std::string buf;
243
-    char dump[255];
244
-    std::vector<Real> vals;
245
-    std::fstream input(fname.c_str(), std::ios::in);
246
-    if (input.fail()) {
247
-        std::cerr << "Input file " << fname << " failed to open\n";
248
-        exit(EXIT_FAILURE);
249
-    }
250
-    while (input >> buf) {
251
-        if (buf.substr(0,2) == "//") {
252
-            input.getline(dump, 255);
253
-        } else {
254
-            vals.push_back( atof(buf.c_str() ));
255
-        }
256
-    }
257
-    return vals;
258
-}

+ 0
- 93
LemmaCore/examples/uthankel2.cpp View File

@@ -1,93 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  uthankel2.cpp
4
-//
5
-//    Description:
6
-//
7
-//        Version:  0.0
8
-//        Created:  05/14/2010 10:26:59 AM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++, icpc, and MSVC 2000
11
-//
12
-//         Author:  Trevor Irons (ti)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  United States Geological Survey (USGS)
16
-//
17
-//          Email:  tirons@mines.edu, tirons@usgs.gov
18
-//
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include "hankeltransformhankel2.h"
35
-#include "hankeltransformgaussianquadrature.h"
36
-#include "kernelem1d.h"
37
-#include "layeredearthem.h"
38
-
39
-using namespace Lemma;
40
-
41
-int main() {
42
-
43
-	// Define model
44
-	LayeredEarthEM *Earth = LayeredEarthEM::New();
45
-		VectorXcr sigma(3);
46
-		sigma << 0., .1, 0.01;
47
-		VectorXr  thick(1);
48
-		thick << 10;
49
-		Earth->SetNumberOfLayers(3);
50
-		Earth->SetLayerConductivity(sigma);
51
-		Earth->SetLayerThickness(thick);
52
-
53
-	// Source
54
-	// Test with a single dipole
55
-	DipoleSource *dipole = DipoleSource::New();
56
-		dipole->SetMoment(2);
57
-		dipole->SetType(MAGNETICDIPOLE);
58
-		dipole->SetPolarisation(ZPOLARISATION);
59
-		dipole->SetLocation(0,0,0);
60
-		dipole->SetNumberOfFrequencies(1);
61
-		dipole->SetFrequency(0,1000);
62
-		dipole->SetPhase(0);
63
-
64
-	KernelEm1D *Kernel = KernelEm1D::New();
65
-		Kernel->Initialise(Earth);
66
-		Kernel->SetUpSource(dipole, 0);
67
-		Kernel->SetUpReceiver(-0.4);
68
-    //std::vector< KernelEm1DBase* > KernelVec;
69
-    //    KernelVec.push_back( )
70
-
71
-	std::cout.precision(10);
72
-
73
-	Hankel2 *dig = Hankel2::New();
74
-//         dig->ComputeRelated(.23 , Kernel);
75
-//  		std::cout << "  dig->Zgauss "
76
-//  				  << dig->Zgauss(0, TE, 0, 100.,
77
-//  								  1000.*std::sqrt(MU0*EPSILON0), Kernel)
78
-//  			      << std::endl;
79
-
80
-// 	HankelTransformGaussianQuadrature *gauss =
81
-// 			HankelTransformGaussianQuadrature::New();
82
-// 		std::cout << "gauss->Zgauss "
83
-// 				  << gauss->Zgauss(0, TE, 0, 100.,
84
-// 								  1000.*std::sqrt(MU0*EPSILON0), Kernel)
85
-// 			      << std::endl;
86
-
87
-	Earth->Delete();
88
-	dig->Delete();
89
-	//gauss->Delete();
90
-    dipole->Delete();
91
-	Kernel->Delete();
92
-	return EXIT_SUCCESS;
93
-}

+ 0
- 257
LemmaCore/examples/uthantenna.cpp View File

@@ -1,257 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  hantenna.cpp
4
-//
5
-//        Created:  10/07/2010 08:57:04 AM
6
-//       Modified:  14 Aug 2012
7
-//       Compiler:  Tested with g++, icpc, and MSVC 2010
8
-//
9
-//         Author:  Trevor Irons (ti)
10
-//
11
-//       Copyright (C) 2011    Broken Spoke Development, LLC
12
-//       Copyright (C) 2012    Trevor Irons
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//
16
-//          Email:  tirons@mines.edu
17
-//
18
-//  This program is free software: you can redistribute it and/or modify
19
-//  it under the terms of the GNU General Public License as published by
20
-//  the Free Software Foundation, either version 3 of the License, or
21
-//  (at your option) any later version.
22
-//
23
-//  This program is distributed in the hope that it will be useful,
24
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
25
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
-//  GNU General Public License for more details.
27
-//
28
-//  You should have received a copy of the GNU General Public License
29
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
-//
31
-// ===========================================================================
32
-
33
-/**
34
-  @file
35
-  @author   Trevor Irons
36
-  @date     10/07/2010
37
-  @version  $Revision: 208 $
38
-  $Id$
39
- **/
40
-
41
-#include "receiverpoints.h"
42
-#include "emearth1d.h"
43
-#include "PolygonalWireAntenna.h"
44
-#ifdef LEMMAUSEOMP
45
-#include "omp.h"
46
-#endif
47
-
48
-#include "timer.h"
49
-
50
-using namespace Lemma;
51
-
52
-std::vector<Real>  readinpfile(const std::string& fname);
53
-
54
-std::vector<std::string>  readinpfile2(const std::string& fname);
55
-
56
-int main(int argc, char** argv) {
57
-
58
-    std::cout <<
59
-    "\n"
60
-    << "hantenna- $Date: 2015-01-26 10:11:24 -0700 (Mon, 26 Jan 2015) $ $Revision: 208 $\n\n"
61
-    << "hantenna is a programme for computing the h field from polygonal wire\n"
62
-    << "loop sources \n\n"
63
-    << "hantenna was built using Lemma (Lemma is an Electromagnetics Modelling API)\n"
64
-    << "Lemma is Free and Open Source Software (FOSS) and is released under\n"
65
-    << "the MPL, it is covered by the following copyrights:\n"
66
-    << "Copyright (C) 2009, 2010, 2011, 2012      Colorado School of Mines\n"
67
-    << "Copyright (C) 2009, 2010, 2011, 2012      Trevor P. Irons\n"
68
-    << "Copyright (C) 2011, 2012                  M. Andy Kass\n\n"
69
-    << "More information may be found at: https://lemmasoftware.org\n"
70
-    << "                                  info@lemmasoftware.org\n\n"
71
-    << "=====================================================================\n"
72
-    << "This programme is part of Lemma, a geophysical modelling and inversion API \n"
73
-    << "This Source Code Form is subject to the terms of the Mozilla Public\n"
74
-    << "License, v. 2.0. If a copy of the MPL was not distributed with this\n"
75
-    << "file, You can obtain one at http://mozilla.org/MPL/2.0/. \n"
76
-    << "=====================================================================\n\n\n";
77
-
78
-    if (argc < 5) {
79
-        std::cout << "usage: hantenna.exe  trans.inp cond.inp points.inp config.inp \n";
80
-        exit(0);
81
-    }
82
-
83
-    #ifdef LEMMAUSEOMP
84
-    std::cout << "OpenMP is using " << omp_get_max_threads() << " threads" << std::endl;
85
-    #endif
86
-
87
-    std::vector<Real> Trans   = readinpfile(std::string(argv[1]));
88
-    std::vector<Real> CondMod = readinpfile(std::string(argv[2]));
89
-    std::vector<Real> Points  = readinpfile(std::string(argv[3]));
90
-    std::vector<std::string> config  = readinpfile2(std::string(argv[4]));
91
-
92
-    //////////////////////////////////////
93
-    // Define transmitter
94
-    PolygonalWireAntenna* trans = PolygonalWireAntenna::New();
95
-        trans->SetNumberOfPoints((int)(Trans[0]));
96
-        int ip=1;
97
-        for ( ; ip<=(int)(Trans[0])*2; ip+=2) {
98
-            trans->SetPoint(ip/2, Vector3r (Trans[ip], Trans[ip+1], -1e-3));
99
-        }
100
- 	    trans->SetNumberOfFrequencies(1);
101
- 	    trans->SetFrequency(0, Trans[ip]);
102
-        trans->SetCurrent(Trans[ip+1]);
103
-        trans->SetMinDipoleRatio(atof(config[1].c_str()));
104
-        trans->SetMinDipoleMoment(atof(config[2].c_str()));
105
-        trans->SetMaxDipoleMoment(atof(config[3].c_str()));
106
-
107
-	// Receivers
108
- 	ReceiverPoints *receivers = ReceiverPoints::New();
109
-        int nx = (int)Points[0];
110
-        int ny = (int)Points[1];
111
-        int nz = (int)Points[2];
112
-        Real ox = Points[3];
113
-        Real oy = Points[4];
114
-        Real oz = Points[5];
115
-     	Vector3r loc;
116
-        VectorXr dx(nx-1);
117
-        VectorXr dy(ny-1);
118
-        VectorXr dz(nz-1);
119
-        ip = 6;
120
-        int ir = 0;
121
-        for ( ; ip <6+nx-1; ++ip) {
122
-            dx[ir] = Points[ip];
123
-            ++ir;
124
-        }
125
-        ir = 0;
126
-        for ( ; ip <6+ny-1+nx-1; ++ip) {
127
-            dy[ir] = Points[ip];
128
-            ++ir;
129
-        }
130
-        ir = 0;
131
-        for ( ; ip <6+nz-1+ny-1+nx-1; ++ip) {
132
-            dz[ir] = Points[ip];
133
-            ++ir;
134
-        }
135
- 		receivers->SetNumberOfReceivers(nx*ny*nz);
136
- 		ir = 0;
137
-        Real pz  = oz;
138
- 		for (int iz=0; iz<nz; ++iz) {
139
- 		    Real py    =  oy;
140
- 		    for (int iy=0; iy<ny; ++iy) {
141
- 		        Real px    =  ox;
142
- 		        for (int ix=0; ix<nx; ++ix) {
143
- 			        loc << px, py, pz;
144
- 			        receivers->SetLocation(ir, loc);
145
- 			        if (ix < nx-1) px += dx[ix];
146
- 			        ++ ir;
147
-     	        }
148
-                if (iy<ny-1) py += dy[iy];
149
-            }
150
-            if (iz<nz-1) pz += dz[iz];
151
-        }
152
-
153
-    ////////////////////////////////////
154
-    // Define model
155
-    LayeredEarthEM *earth = LayeredEarthEM::New();
156
-    VectorXcr sigma;
157
-    VectorXr  thick;
158
- 	earth->SetNumberOfLayers(CondMod[0]+1);
159
- 	sigma.resize(CondMod[0]+1); sigma(0) = 0; // airlayer
160
-    thick.resize(CondMod[0]-1);
161
-    int ilay=1;
162
-    for ( ; ilay/2<CondMod[0]-1; ilay+=2) {
163
-        sigma(ilay/2+1) =  1./CondMod[ilay];
164
-        thick(ilay/2) =  CondMod[ilay+1];
165
-    }
166
-    sigma(ilay/2+1) = 1./ CondMod[ilay];
167
-	earth->SetLayerConductivity(sigma);
168
-    if (thick.size() > 0) earth->SetLayerThickness(thick);
169
-
170
-	EMEarth1D  *EmEarth = EMEarth1D::New();
171
-		EmEarth->AttachWireAntenna(trans);
172
-		EmEarth->AttachLayeredEarthEM(earth);
173
-		EmEarth->AttachReceiverPoints(receivers);
174
-		EmEarth->SetFieldsToCalculate(H);
175
-        EmEarth->SetHankelTransformMethod(string2Enum<HANKELTRANSFORMTYPE>(config[0]));
176
-        EmEarth->SetHankelTransformMethod(FHTKEY201);
177
-
178
-	// Keep track of time
179
-	jsw_timer timer;
180
-  	timer.begin();
181
-    clock_t launch = clock();
182
-    EmEarth->CalculateWireAntennaFields(true);    // true=status bar
183
-	Real paTime = timer.end();
184
-
185
-    std::cout << "\n\n===========================================\ncalc. real time: " << paTime/60. << "\t[m]\n";
186
-
187
-    std::cout << "calc. user time: " <<  (clock()-launch)/CLOCKS_PER_SEC/60.   << "\t[CPU m]"
188
-		 << std::endl;
189
-
190
-    ////////////////////////////////////
191
-    // Report
192
- 	std::fstream hrep("hfield.yaml", std::ios::out);
193
-    std::fstream hreal("hfield.dat", std::ios::out);
194
-
195
-    hrep << *EmEarth << std::endl;
196
-    hrep.close();
197
-    //hreal << *trans << std::endl;
198
-    //hreal << *earth << std::endl;
199
-
200
-    hreal << "// Right hand coordinate system, z is positive down\n";
201
-    hreal << "// x[m]\ty[m]\tz[m]\tHx[A/m]\tHy[A/m]\tHz[A/m]\n";
202
-    hreal.precision(8);
203
-    int i=0;
204
-	for (int iz=0; iz<nz; ++iz) {
205
-	for (int iy=0; iy<ny; ++iy) {
206
-	for (int ix=0; ix<nx; ++ix) {
207
-        hreal << receivers->GetLocation(i).transpose() << "\t";
208
- 		hreal << receivers->GetHfield(0, i).transpose() << "\n";
209
-        ++i;
210
-    }
211
-    }
212
-    }
213
-    hreal.close();
214
-    // Clean up
215
-    EmEarth->Delete();
216
-    earth->Delete();
217
-    receivers->Delete();
218
-    trans->Delete();
219
-}
220
-
221
-std::vector<Real>  readinpfile(const std::string& fname) {
222
-    std::string buf;
223
-    char dump[255];
224
-    std::vector<Real> vals;
225
-    std::fstream input(fname.c_str(), std::ios::in);
226
-    if (input.fail()) {
227
-        std::cerr << "Input file " << fname << " failed to open\n";
228
-        exit(EXIT_FAILURE);
229
-    }
230
-    while (input >> buf) {
231
-        if (buf.substr(0,2) == "//") {
232
-            input.getline(dump, 255);
233
-        } else {
234
-            vals.push_back( atof(buf.c_str() ));
235
-        }
236
-    }
237
-    return vals;
238
-}
239
-
240
-std::vector<std::string>  readinpfile2(const std::string& fname) {
241
-    std::string buf;
242
-    char dump[255];
243
-    std::vector<std::string> vals;
244
-    std::fstream input(fname.c_str(), std::ios::in);
245
-    if (input.fail()) {
246
-        std::cerr << "Input file " << fname << " failed to open\n";
247
-        exit(EXIT_FAILURE);
248
-    }
249
-    while (input >> buf) {
250
-        if (buf.substr(0,2) == "//") {
251
-            input.getline(dump, 255);
252
-        } else {
253
-            vals.push_back( std::string(buf.c_str() ));
254
-        }
255
-    }
256
-    return vals;
257
-}

+ 0
- 218
LemmaCore/examples/utlogbarriercg.cpp View File

@@ -1,218 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utlogbarriercg.cpp
4
-//
5
-//        Created:  12/29/2010 09:40:23 AM
6
-//       Compiler:  Tested with g++, icpc, and MSVC 2010
7
-//
8
-//         Author:  Trevor Irons (ti)
9
-//
10
-//   Organisation:  Colorado School of Mines (CSM)
11
-//                  United States Geological Survey (USGS)
12
-//
13
-//          Email:  tirons@mines.edu, tirons@usgs.gov
14
-//
15
-//  This program is free software: you can redistribute it and/or modify
16
-//  it under the terms of the GNU General Public License as published by
17
-//  the Free Software Foundation, either version 3 of the License, or
18
-//  (at your option) any later version.
19
-//
20
-//  This program is distributed in the hope that it will be useful,
21
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
22
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
-//  GNU General Public License for more details.
24
-//
25
-//  You should have received a copy of the GNU General Public License
26
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
27
-//
28
-// ===========================================================================
29
-
30
-/**
31
-  @file
32
-  @author   Trevor Irons
33
-  @date     12/29/2010
34
-  @version   0.0
35
- **/
36
-
37
-#include "LemmaObject.h"
38
-//#include "logbarriercg.h"
39
-//#include "datasnmr.h"
40
-#include <ctime>
41
-
42
-#ifdef HAVEBOOSTRANDOM
43
-#include <boost/random.hpp>
44
-#include <boost/random/normal_distribution.hpp>
45
-#endif
46
-
47
-using namespace std;
48
-using namespace Lemma;
49
-
50
-MatrixXr BuildG(const Real& T2, const Real& Larmor, const Real& T,
51
-        const Real& dt, const VectorXr& nT2Bins, const Real& scale);
52
-
53
-MatrixXr BuildGw(const Real& T2, const Real& Larmor, const Real& T,
54
-        const Real& dt, const VectorXr& nT2Bins, const Real& scale,
55
-        const VectorXr& freqs);
56
-
57
-/// test driver program for log-barrier optimization algorithm
58
-int main() {
59
-    return 0;
60
-}
61
-
62
-#ifdef AA
63
-    // Parameters
64
-    Real T2(.200);
65
-    Real Larmor(2000); // Hz
66
-    Real wL = 2.*PI * Larmor;
67
-    Real T(.6);
68
-    Real dt(1e-4);
69
-    int  nT2(20);
70
-    Real T2Low(.020);
71
-    Real T2Hi(.220);
72
-
73
-    // T2 bins
74
-    VectorXr T2Bins = VectorXr::LinSpaced(nT2, T2Low, T2Hi);
75
-
76
-    // Build true model
77
-    VectorXr m = VectorXr::Zero(T2Bins.size());
78
-    //m[4]  = .15;
79
-    //m[5]  = .15;
80
-    //m[6]  = .15;
81
-    m[7]  = .15;
82
-    m[8]  = .15;
83
-    m[11] = .15;
84
-    m[12] = .15;
85
-    m[13] = .15;
86
-    m[14] = .15;
87
-
88
-    // Build G
89
-    srand ( std::time(NULL) );
90
-    Real scale = 1e-4*std::abs(VectorXr::Random(1)[0]);
91
-    MatrixXr G = BuildG(T2, wL, T, dt, T2Bins, scale);
92
-
93
-    #ifdef HAVEBOOSTRANDOM
94
-    Real mean = 0;
95
-    Real variance = scale*.05*(.5+.15);
96
-    boost::mt19937 randgen(static_cast<unsigned int> (std::time(0)));
97
-    boost::normal_distribution<Real> noise(mean, variance);
98
-    boost::variate_generator<boost::mt19937, boost::normal_distribution<Real> > nD(randgen, noise);
99
-    VectorXr noisy = G*m;
100
-//     for (int i=0; i < noisy.size(); ++i) {
101
-//        noisy(i) += nD();
102
-//     }
103
-    #else
104
-    VectorXr d = G * m;
105
-    VectorXr noisy = d.array();// + .05*( .5 + .15 ) *Eigen::ArrayXd::Random(d.size());
106
-    #endif
107
-
108
-    // Clean Data, and 10% random noise data
109
-    VectorXr RefMod = VectorXr::Zero(m.size());
110
-
111
-    // todo let alpha's be set.
112
-    Real alpha_s  =  .0;
113
-    Real alpha_t2 = 1.0;
114
-    Eigen::SparseMatrix<Real> Wd (G.rows(), G.rows());
115
-    Eigen::SparseMatrix<Real> Wm (G.cols(), G.cols());
116
-
117
-    /////////////////
118
-    // Model objective function
119
-    int ii = 0;
120
-    for (int iT2=0; iT2<nT2; ++iT2) {
121
-        Wm.coeffRef(ii, ii) += alpha_s - alpha_t2;
122
-        if (iT2 < nT2-1) {
123
-            Wm.coeffRef(ii, ii+1) += alpha_t2;
124
-        }
125
-        ++ii;
126
-    }
127
-    Wm.finalize();
128
-    std::fstream  WmOut( "wmMatrix.dat" , std::ios::out);
129
-    WmOut << Wm << std::endl;
130
-    WmOut.close();
131
-
132
-    // Data objective function
133
-    /// @todo add measure of suspected std dev to this.
134
-    for (int id=0; id<G.rows(); ++id) {
135
-        Wd.coeffRef(id, id) = 1.; // 1/sigma(i);
136
-    }
137
-    Wd.finalize();
138
-
139
-    // invert time-domain sinusoid exponent
140
-    //LogBarrierCG(G, RefMod, noisy, (Real)0., (Real)1e5, nT2, Wd, Wm, scale*1e1);
141
-    return EXIT_SUCCESS;
142
-
143
-//     #if 0
144
-//     // invert FD
145
-//     Eigen::FFT<Real> fft;
146
-//     fft.SetFlag(fft.HalfSpectrum);
147
-//     VectorXcr dw;
148
-//     fft.fwd(dw, noisy);
149
-//
150
-//     // Compute freqs Hz
151
-//     VectorXr freqs = DataSNMR::GetNMRSampledFrequencies(T/dt, dt);
152
-//     Real df = freqs[1];
153
-//     Real window = 300; // Hz
154
-//     int iL = (int)(Larmor/df);
155
-//     MatrixXr Gw = BuildGw(T2, wL, T, dt, T2Bins, scale, freqs.segment(iL-window/2, window));
156
-//
157
-//     VectorXr dwu = VectorXr::Zero(2.*window);
158
-//     dwu.head(window) = dw.segment(iL-window/2, window).real();
159
-//     dwu.tail(window) = dw.segment(iL-window/2, window).imag();
160
-//
161
-//     Eigen::DynamicSparseMatrix<Real> Wdw (Gw.rows(), Gw.rows());
162
-//     for (int id=0; id<Gw.rows(); ++id) {
163
-//         Wdw.coeffRef(id, id) = 1.; // 1/sigma(i);
164
-//     }
165
-//     Wdw.finalize();
166
-//     std::cout << "psize " << (Gw*RefMod).size() << std::endl;
167
-//     VectorXr dw2 = Gw*m;
168
-//     //std::cout << dw2 << std::endl;
169
-//     std::cout << "Gw " << Gw.rows() << "\t" << Gw.cols() << std::endl;
170
-//     std::cout << "dwu " << dwu.size() << std::endl;
171
-//     //RefMod.array() += .1;
172
-//     VectorXr mod = LogBarrierCG(Gw, RefMod, dwu, 0., 3., nT2, Wdw, Wm,scale*1e5);
173
-//     //VectorXr mod = LogBarrierCG(Gw, dwu, 0., 1e5);
174
-//
175
-//     std::fstream Gws("gw.out", std::ios::out);
176
-//     Gws << Gw << std::endl;
177
-//     Gws.close();
178
-//     #endif
179
-}
180
-
181
-#endif
182
-
183
-MatrixXr BuildG(const Real& T2, const Real& wL, const Real& T,
184
-            const Real& dt, const VectorXr& T2Bins, const Real& scale) {
185
-    std::cout << "scale " << scale << std::endl;
186
-    int nt = T/dt;
187
-    int nT2 = T2Bins.size();
188
-    MatrixXr G = MatrixXr::Zero(nt,nT2);
189
-    for (int iT2=0; iT2<nT2; ++iT2) {
190
-        Real t=0;
191
-        for (int it=0; it<nt; ++it) {
192
-            G(it, iT2) = scale * exp(-t/T2Bins(iT2)) * sin(wL * t);
193
-            t += dt;
194
-        }
195
-    }
196
-    return G;
197
-}
198
-
199
-
200
-MatrixXr BuildGw(const Real& T2, const Real& wL, const Real& T,
201
-            const Real& dt, const VectorXr& T2Bins, const Real& scale,
202
-            const VectorXr &freqs) {
203
-    VectorXr omegas = freqs.array() * 2.*PI;
204
-    std::cout << "scale " << scale << std::endl;
205
-    int nT2 = T2Bins.size();
206
-    MatrixXr Gw = MatrixXr::Zero(2*freqs.size(), nT2);
207
-    int nW = freqs.size();
208
-    Real sc = 1./dt;
209
-    for (int iT2=0; iT2<nT2; ++iT2) {
210
-        for (int iw=0; iw<freqs.size(); ++iw) {
211
-            Real a = 1./T2Bins(iT2);
212
-            Complex T = wL / ( wL*wL + (a+Complex(0, omegas[iw]))*(a+Complex(0,omegas[iw])) ) ;
213
-            Gw(iw, iT2)     = sc * scale * std::real(T);
214
-            Gw(iw+nW, iT2) = sc * scale * std::imag(T);
215
-        }
216
-    }
217
-    return Gw;
218
-}

+ 0
- 67
LemmaCore/examples/utpolygonalantenna.cpp View File

@@ -1,67 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utpolygonalantennae.cpp
4
-//
5
-//    Description:  Unit test of PolygonalAntenna
6
-//
7
-//        Version:  0.0
8
-//        Created:  05/26/2010 04:30:56 PM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++, icpc, and MSVC 2000
11
-//
12
-//         Author:  Trevor Irons (ti)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  United States Geological Survey (USGS)
16
-//
17
-//          Email:  tirons@mines.edu, tirons@usgs.gov
18
-//
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include "Lemma"
35
-
36
-using namespace Lemma;
37
-
38
-int main() {
39
-
40
-    PolygonalWireAntenna *pa = PolygonalWireAntenna::New();
41
-        pa->SetNumberOfPoints(5);
42
-        pa->SetPoint(0, Vector3r(  0,  0, -1e-3));
43
-        pa->SetPoint(1, Vector3r( 10,  0, -1e-3));
44
-        pa->SetPoint(2, Vector3r( 10, 10, -1e-3));
45
-        pa->SetPoint(3, Vector3r(  0, 10, -1e-3));
46
-        pa->SetPoint(4, Vector3r(  0,  0, -1e-3));
47
-        pa->SetNumberOfFrequencies(1);
48
-        pa->SetFrequency(0,1000.);
49
-        pa->SetCurrent(10.);
50
-        pa->SetNumberOfTurns(1);
51
-
52
-    Vector3r pos;
53
-    pos << 23,23,23;
54
-    pa->ApproximateWithElectricDipoles(pos);
55
-    std::cout << "pos "<< pos.transpose() << "  ndipoles="
56
-              << pa->GetNumberOfDipoles() << std::endl;
57
-    pos << 2,2,2;
58
-    pa->ApproximateWithElectricDipoles(pos);
59
-    std::cout << "pos "<< pos.transpose() << "  ndipoles="
60
-              << pa->GetNumberOfDipoles() << std::endl;
61
-    pos << 1,1,1;
62
-    pa->ApproximateWithElectricDipoles(pos);
63
-    std::cout << "pos "<< pos.transpose() << "  ndipoles="
64
-              << pa->GetNumberOfDipoles() << std::endl;
65
-
66
-    pa->Delete();
67
-}

+ 0
- 68
LemmaCore/examples/utreadfemubc.cpp View File

@@ -1,68 +0,0 @@
1
-// ===========================================================================
2
-// 
3
-//       Filename:  utreadfemubc.cpp
4
-// 
5
-//    Description:  
6
-// 
7
-//        Version:  0.0
8
-//        Created:  01/03/2013 02:47:24 PM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++ 
11
-// 
12
-//         Author:  M. Andy Kass (MAK)
13
-//
14
-//   Organisation:  Broken Spoke Development, LLC
15
-//                  
16
-//
17
-//          Email:  mkass@numericalgeo.com
18
-// 
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include "Lemma"
35
-
36
-using namespace Lemma;
37
-
38
-#ifdef LEMMAUSEVTK
39
-#include "matplot.h"
40
-using namespace matplot;
41
-#endif
42
-
43
-int main() {
44
-
45
-	std::string datfile;
46
-
47
-	datfile = "126.obs";
48
-	
49
-	DataReaderFemUBC* Reader = DataReaderFemUBC::New();
50
-	DataFEM* thedata = DataFEM::New();
51
-
52
-	Reader->SetDataFEM(thedata);
53
-
54
-	try {
55
-	Reader->ReadData(datfile,1);
56
-	} catch(std::exception& e) {
57
-		exit(EXIT_FAILURE);
58
-	}
59
-
60
-	std::cout << *Reader << std::endl;
61
-	std::cout << *thedata << std::endl;
62
-
63
-
64
-	thedata->Delete();
65
-	Reader->Delete();
66
-
67
-	return EXIT_SUCCESS;
68
-}

+ 0
- 54
LemmaCore/examples/utsandbox.cpp View File

@@ -1,54 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utsandbox.cpp
4
-//
5
-//        Created:  07/29/2010 10:34:23 AM
6
-//       Compiler:  Tested with g++, icpc, and MSVC 2010
7
-//
8
-//         Author:  Trevor Irons (ti)
9
-//
10
-//   Organisation:  Colorado School of Mines (CSM)
11
-//                  United States Geological Survey (USGS)
12
-//
13
-//          Email:  tirons@mines.edu, tirons@usgs.gov
14
-//
15
-//  This program is free software: you can redistribute it and/or modify
16
-//  it under the terms of the GNU General Public License as published by
17
-//  the Free Software Foundation, either version 3 of the License, or
18
-//  (at your option) any later version.
19
-//
20
-//  This program is distributed in the hope that it will be useful,
21
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
22
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
-//  GNU General Public License for more details.
24
-//
25
-//  You should have received a copy of the GNU General Public License
26
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
27
-//
28
-// ===========================================================================
29
-
30
-/**
31
-  @file test sandbox helm1rameters
32
-  @author   Trevor Irons
33
-  @date     07/29/2010
34
-  @version   0.0
35
- **/
36
-
37
-#include "Lemma"
38
-
39
-using namespace Lemma;
40
-
41
-int main() {
42
-
43
-    PolygonalWireAntenna *helm1 = PolygonalWireAntenna::New();
44
-	helm1->SetNumberOfFrequencies(1);
45
-	helm1->SetFrequency(0, 1000);
46
-	helm1->SetNumberOfPoints(5);
47
-	helm1->SetPoint(0, Vector3r(   0,   0, 0));
48
-	helm1->SetPoint(1, Vector3r(   0,   0, 0));
49
-	helm1->SetPoint(2, Vector3r(   0,   0, 0));
50
-	helm1->SetPoint(3, Vector3r(   0,   0, 0));
51
-	helm1->SetPoint(4, Vector3r(   0,   0, 0));
52
-	helm1->SetCurrent(1.);
53
-    helm1->Delete();
54
-}

+ 0
- 199
LemmaCore/examples/uttemforward.cpp View File

@@ -1,199 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  uttemforward.cpp
4
-//
5
-//    Description:  TEM Forward Modeller
6
-//
7
-//        Version:  0.0
8
-//        Created:  02/10/2011 03:32:18 PM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++, icpc, and MSVC 2000
11
-//
12
-//         Author:  M. Andy Kass (MAK)
13
-//
14
-//		Copyright:  2011 Trevor Irons and M. Andy Kass
15
-//
16
-//   Organisation:  Colorado School of Mines (CSM)
17
-//                  Broken Spoke Development, LLC
18
-//
19
-//          Email:  mkass@numericalgeo.com
20
-//
21
-//  This program is free software: you can redistribute it and/or modify
22
-//  it under the terms of the GNU General Public License as published by
23
-//  the Free Software Foundation, either version 3 of the License, or
24
-//  (at your option) any later version.
25
-//
26
-//  This program is distributed in the hope that it will be useful,
27
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
28
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29
-//  GNU General Public License for more details.
30
-//
31
-//  You should have received a copy of the GNU General Public License
32
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
33
-//
34
-// ===========================================================================
35
-
36
-#include <time.h>
37
-#include "Lemma"
38
-#include "banner.h"
39
-
40
-using namespace Lemma;
41
-
42
-#ifdef LEMMAUSEVTK
43
-#include "matplot.h"
44
-using namespace matplot;
45
-#endif
46
-
47
-int main(int argv, char** argc) {
48
-
49
-	// Just for timing
50
-	clock_t launch =clock();
51
-
52
-	// Banner display
53
-	std::string name;
54
-	std::string version;
55
-	std::string usage;
56
-	name = "TEM Forward Modeller - 1D";
57
-	version = "1.0beta";
58
-	usage = "temforward1d [inputfile]";
59
-	banner(name,version,usage);
60
-    if ( argv < 2 ) {
61
-        std::cout << "No input file specified, should be of format\n";
62
-        std::cout <<
63
-"origparabk.obsy        ! Observations-style file.\n\
64
-origpara.con           ! Starting model.\n\
65
-100                    ! Number of Hankel kernel evaluations.\n\
66
-100 1. 1.0E+10         ! Number of Fourier kernel evaluations, & min & max freq.\n\
67
-N                      ! Is noise to be added?\n\
68
-5.  1.0E-08  30        ! Noise to be added: percentage, threshold, seed.\n\
69
-" << std::endl;
70
-
71
-        exit(0);
72
-    }
73
-
74
-	time_t curr=time(0);
75
-	std::cout << std::endl;
76
-	std::cout << "  Start time: " << ctime(&curr) << std::endl;
77
-
78
-	// Define objects
79
-	PolygonalWireAntenna* Trans = PolygonalWireAntenna::New();
80
-//     PolygonalWireAntenna* pa = PolygonalWireAntenna::New();
81
-//         pa->SetNumberOfPoints(5);
82
-// 	    pa->SetPoint(0, Vector3r(   0,   0, -30.001));
83
-// 	    pa->SetPoint(1, Vector3r(   0,  20, -35.001));
84
-// 	    pa->SetPoint(2, Vector3r(  20 , 20, -35.001));
85
-// 	    pa->SetPoint(3, Vector3r(  20,   0, -30.001));
86
-// 	    pa->SetPoint(4, Vector3r(   0,   0, -30.001));
87
-// 	    pa->SetCurrent(100.);
88
-//         pa->SetNumberOfTurns(1);
89
-
90
-
91
-	//DipoleSource* Trans = DipoleSource::New();
92
-	ReceiverPoints *Receivers = ReceiverPoints::New();
93
-	LayeredEarthEM *Earth = LayeredEarthEM::New();
94
-	VectorXr maintimes;
95
-
96
-    /////////////////////////////////////
97
-	// Using model reader
98
-	ModelReaderTem1DUBC* Reader = ModelReaderTem1DUBC::New();
99
-	    Reader->SetEMEarth1D(Earth);
100
-	    Reader->SetTransmitter(Trans);
101
-	    Reader->SetReceiver(Receivers);
102
-	    Reader->ReadParameters( argc[1] );
103
-	    maintimes = Reader->GetTimes();
104
-
105
-	// Attach it to instrumentTEM
106
-	InstrumentTem *instrument = InstrumentTem::New();
107
-	    instrument->EMEarthModel(Earth);
108
-	    instrument->SetTransmitLoop(Trans);
109
-	    //instrument->SetTransmitLoop(pa);
110
-	    //instrument->SetDipoleSource(Trans);
111
-	    instrument->SetReceiver(Receivers);
112
-
113
-
114
-
115
-        // TODO need to input these
116
-        VectorXr widths = VectorXr::Ones(maintimes.size()); // * 1e-5;
117
-        /*
118
-        widths.segment(0,5).array()  *= 5e-6;
119
-        widths.segment(5,5).array()  *= 1e-5;
120
-        widths.segment(10,5).array() *= 5e-5;
121
-        widths.segment(15,5).array() *= 2e-4;
122
-        widths.segment(20,5).array() *= 4e-4;
123
-        //widths.segment(25,5).array() *= 4e-4;
124
-        */
125
-        /*
126
-        widths << .48,4.,8.,8.,8.,8.,8.,12.,12.,12.,16.,16.,16.,20.,24.,24.,28.,32.,32.,36.,40.,44.,52.,
127
-  				56.,64.,68.,76.,88.,96.,104.,120.,132.,144.,160.,180.,200.,220.,248.,272.,304.,336.,376.,
128
-  				416.,464.,516.,572.,636.,708.,784.,872.,968.,1076.,1196.,1328.,1476.,1640.,1824.,2024.,
129
-  				2248.,2500. ;
130
-        */
131
-        widths *= 1e-6;
132
-        std::cout << widths.transpose() << std::endl;
133
-
134
-        instrument->SetReferenceTime(.025);
135
-        //instrument->SetReferenceTime(.025);
136
-	    instrument->SetTimeGates(maintimes, widths);
137
-
138
-        //instrument->SetReceiverType(MAGNETOMETER);
139
-        instrument->SetReceiverType(INDUCTIVE);
140
-        // Set the pulse
141
-        VectorXr Amp(4); Amp << 0,1,1,0;
142
-        VectorXr Times(4); Times << 0., .0005, .02497, .025;
143
-
144
-        //VectorXr Amp(4); Amp << 0,1,1,0;
145
-        //VectorXr Times(4); Times << -0.025, -0.0245, -0.00003, 0.0;
146
-        //instrument->SetPulse(Amp, Times);
147
-
148
-        //VectorXr Amp(3); Amp << 0,1,0;
149
-        //VectorXr Times(3); Times << 0, .015, .030;
150
-        //instrument->SetPulse(Amp, Times);
151
-
152
-        //VectorXr Amp(3); Amp << 0,1,0;
153
-        //VectorXr Times(3); Times << 0, .01, .020;
154
-        instrument->SetPulse(Amp, Times);
155
-
156
-    std::cout << *Earth << "\n" << *Trans << "\n" << *Receivers << std::endl;
157
-
158
-	// Perform the forward model
159
-	//instrument->MakeDirectCalculation( FHTKEY201  );
160
-	//instrument->MakeLaggedCalculation( ANDERSON801 );
161
-	//instrument->MakeLaggedCalculation( QWEKEY );
162
-	//instrument->MakeLaggedCalculation( CHAVE );
163
-	instrument->MakeLaggedCalculation( FHTKEY201 );
164
-	//instrument->MakeLaggedCalculation( FHTKEY101 );
165
-
166
-    int nlag = instrument->GetMeasurements().rows();
167
-	// Output results to screen
168
-	for (int ii=0; ii<nlag; ii++) {
169
-		std::cout<<"  "<<instrument->GetMeasurements()(ii,0)<<"  "<<instrument->GetMeasurements()(ii,1)<<std::endl;
170
-	}
171
-
172
-	// Output results to file
173
-	std::ofstream outfile1;
174
-	outfile1.open("solution.out");
175
-    //outfile1 << "//timegate [ms]\t dB/dt [nT/s]" << std::endl;
176
-    outfile1 << "//timegate [s]\t dB/dt [T/s]" << std::endl;
177
-	for (int ii=0; ii<nlag; ii++) {
178
-		//outfile1 << 1e3*instrument->GetMeasurements()(ii,0)<< "\t" << (MU0*1e9)*instrument->GetMeasurements()(ii,1)<<std::endl;
179
-		outfile1 << instrument->GetMeasurements()(ii,0)<< "\t" << MU0*instrument->GetMeasurements()(ii,1) << std::endl;
180
-		//outfile1 << instrument->GetMeasurements()(ii,0)<< "\t" << instrument->GetMeasurements()(ii,1)<<std::endl;
181
-	}
182
-	outfile1.close();
183
-
184
-
185
-	// Timing stuff
186
-	std::cout << "  Time for execution: " <<  (clock()-launch)/CLOCKS_PER_SEC   << " [CPU] seconds."
187
-		 << std::endl;
188
-
189
-
190
-	instrument->Delete();
191
-	Trans->Delete();
192
-	Earth->Delete();
193
-	Receivers->Delete();
194
-	Reader->Delete();
195
-
196
-	return EXIT_SUCCESS;
197
-}
198
-
199
-

+ 0
- 131
LemmaCore/examples/utteminv1d.cpp View File

@@ -1,131 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utteminv1d.cpp
4
-//
5
-//    Description:  Invert for the difference in water table
6
-//
7
-//        Version:  0.0
8
-//        Created:  03/23/2011 02:07:19 PM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++, icpc, and MSVC 2000
11
-//
12
-//         Author:  M. Andy Kass (MAK)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  Broken Spoke Development, LLC
16
-//
17
-//          Email:  mkass@numericalgeo.com
18
-//
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include "Lemma"
35
-#include "banner.h"
36
-
37
-using namespace Lemma;
38
-
39
-int main () {
40
-
41
-	VectorXr maintimes;
42
-	int ntimes;
43
-
44
-	//Banner
45
-	std::string name;
46
-	std::string version;
47
-	std::string usage;
48
-	name = "TEM Inversion - 1D";
49
-	version = "1.0beta";
50
-	usage = "teminv1d [inputfile]";
51
-	banner(name,version,usage);
52
-
53
-	PolygonalWireAntenna* Trans = PolygonalWireAntenna::New();
54
-	ReceiverPoints* Receivers = ReceiverPoints::New();
55
-	LayeredEarthEM* StartingMod = LayeredEarthEM::New();
56
-	//LayeredEarthEM* RecoveredMod = LayeredEarthEM::New();
57
-	InverseSolverTEM1D* Inverse = InverseSolverTEM1D::New();
58
-
59
-
60
-	Trans->SetNumberOfPoints(5);
61
-    Trans->SetPoint(0, Vector3r(   0,   0, -1e-3));
62
-    Trans->SetPoint(1, Vector3r( 100,   0, -1e-3));
63
-    Trans->SetPoint(2, Vector3r( 100, 100, -1e-3));
64
-    Trans->SetPoint(3, Vector3r(   0, 100, -1e-3));
65
-    Trans->SetPoint(4, Vector3r(   0,   0, -1e-3));
66
-	Trans->SetCurrent(1);
67
-	Trans->SetNumberOfTurns(1);
68
-    Trans->SetMinDipoleRatio(1/2.);
69
-
70
-	Vector3r loc;
71
-	Real ox = 50.;
72
-	Real oy = 50.;
73
-	Real depth = -1.e-3;
74
-	Receivers->SetNumberOfReceivers(1);
75
-	loc << ox,oy,depth;
76
-	Receivers->SetLocation(0,loc);
77
-
78
-	StartingMod->SetNumberOfLayers(22);
79
-	StartingMod->SetLayerConductivity( (VectorXcr(22) << 0.,1.e-3,
80
-		1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,
81
-		1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3,1.e-3).finished() );
82
-	StartingMod->SetLayerThickness((VectorXr(20)<<4,4,4,4,4,4,4,4,4,4,4,4,4,
83
-		4,4,4,4,4,4,4).finished());
84
-	//EM-47 gate times
85
-	ntimes = 30;
86
-	maintimes.resize(ntimes);
87
-	maintimes << 36.,45.25,57.,72.25,92.,117.,148.,186.5,234.,290.,
88
-		352.5,427.5,525.,647.5,802.5,1002.5,1257.5,1582.5,1997.5,2525.,
89
-		3197.5,4055.,5147.5,6542.5,8322.5,10592.,13490.,17187.,21902.,
90
-		27915.;
91
-	maintimes = maintimes.array() /1000000;
92
-
93
-	Inverse->AttachStartMod(StartingMod);
94
-	Inverse->AttachWireAntenna(Trans);
95
-	Inverse->AttachReceiver(Receivers);
96
-	Inverse->SetTimes(maintimes);
97
-	LayeredEarthEM* RecoveredMod = StartingMod->Clone();
98
-	Inverse->AttachRecMod(RecoveredMod);
99
-
100
-	//Read input data - temp for SEG!
101
-	/// TODO write a TEM data reader class.  and a functional TEM data class
102
-	std::fstream infile("rotateddat.dat",std::ios::in);
103
-	if (infile.fail()) {
104
-		std::cout << "Shit!" << std::endl;
105
-	}
106
-	MatrixXr rotinpdata;
107
-	rotinpdata.resize(30,1);
108
-	for (int ii=0;ii<30;ii++) {
109
-		infile >> rotinpdata(ii);
110
-	}
111
-	infile.close();
112
-
113
-
114
-	Inverse->AttachMeasuredData(rotinpdata);
115
-	//Inverse->SetFreeParams( (VectorXi(2)<<0,1).finished(),
116
-	//	(VectorXi(3)<<1,2,3).finished());
117
-
118
-	std::cout << *Inverse << std::endl;
119
-
120
-	Inverse->Calculate();
121
-	//Inverse->ShowSoln();
122
-	//Inverse->WriteSoln("temp.dat");
123
-
124
-	Inverse->Delete();
125
-	RecoveredMod->Delete();
126
-	StartingMod->Delete();
127
-	Receivers->Delete();
128
-	Trans->Delete();
129
-
130
-	return EXIT_SUCCESS;
131
-}

+ 0
- 84
LemmaCore/examples/uttemreader.cpp View File

@@ -1,84 +0,0 @@
1
-// ===========================================================================
2
-// 
3
-//       Filename:  uttemreader.cpp
4
-// 
5
-//    Description:  
6
-// 
7
-//        Version:  0.0
8
-//        Created:  02/19/2011 12:30:59 PM
9
-//       Revision:  none
10
-//       Compiler:  Tested with g++, icpc, and MSVC 2000 
11
-// 
12
-//         Author:  M. Andy Kass (MAK)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  Broken Spoke Brewery, LLC
16
-//
17
-//          Email:  mkass@numericalgeo.com
18
-// 
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include "Lemma"
35
-
36
-using namespace Lemma;
37
-
38
-
39
-int main() {
40
-
41
-	/*
42
-	ModelReaderTem1DUBC* Reader = ModelReaderTem1DUBC::New();
43
-	PolygonalWireAntenna* Trans = PolygonalWireAntenna::New();
44
-	ReceiverPoints *Receivers = ReceiverPoints::New();
45
-	LayeredEarthEM *Earth = LayeredEarthEM::New();
46
-	Reader->SetEMEarth1D(Earth);
47
-	Reader->SetTransmitter(Trans);
48
-	Reader->SetReceiver(Receivers);
49
-	Reader->ReadParameters("em1dtmfwd.in");
50
-
51
-	Reader->Delete();
52
-	Earth->Delete();
53
-	Receivers->Delete();
54
-	Trans->Delete();
55
-	*/
56
-
57
-	int rnObs;
58
-	int rnGates;
59
-	std::string inputfile;
60
-	MatrixXr somedata;
61
-	Vector3Xr somepositions;
62
-
63
-	DataTEM* TheData = DataTEM::New();
64
-	DataReaderTem* Reader = DataReaderTem::New();
65
-
66
-	inputfile = "temreadertest.txt";
67
-
68
-	Reader->SetDataTEM(TheData);
69
-	Reader->ReadData(inputfile);
70
-
71
-	rnObs = TheData->GetnObs();
72
-	rnGates = TheData->GetnGates();
73
-	somedata = TheData->GetData();
74
-	somepositions = TheData->GetPositions();
75
-
76
-	std::cout << rnObs << " " << rnGates << std::endl;
77
-	std::cout << somedata << std::endl;
78
-	std::cout << somepositions << std::endl;
79
-
80
-	Reader->Delete();
81
-	TheData->Delete();
82
-
83
-	return EXIT_SUCCESS;
84
-}

+ 0
- 207
LemmaCore/examples/uttemsandbox.cpp View File

@@ -1,207 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  uttemsandbox.cpp
4
-//
5
-//        Created:  09/29/2010 07:38:26 AM
6
-//       Compiler:  Tested with g++, icpc, and MSVC 2010
7
-//
8
-//         Author:  Trevor Irons (ti), M. Andy Kass
9
-//
10
-//
11
-//   Organisation:  Colorado School of Mines (CSM)
12
-//                  United States Geological Survey (USGS)
13
-//					Broken Spoke Development, LLC
14
-//
15
-//          Email:  tirons@mines.edu, tirons@usgs.gov
16
-//					mkass@numericalgeo.com
17
-//
18
-//  This program is free software: you can redistribute it and/or modify
19
-//  it under the terms of the GNU General Public License as published by
20
-//  the Free Software Foundation, either version 3 of the License, or
21
-//  (at your option) any later version.
22
-//
23
-//  This program is distributed in the hope that it will be useful,
24
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
25
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
-//  GNU General Public License for more details.
27
-//
28
-//  You should have received a copy of the GNU General Public License
29
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
-//
31
-// ===========================================================================
32
-
33
-/**
34
-  @file
35
-  @author   Trevor Irons
36
-  @date     09/29/2010
37
-  @version   0.0
38
- **/
39
-
40
-#include "Lemma"
41
-using namespace Lemma;
42
-
43
-#ifdef LEMMAUSEVTK
44
-#include "matplot.h"
45
-using namespace matplot;
46
-#endif
47
-
48
-int main() {
49
-
50
-
51
-    int nfreq  =    6000;  // Number of frequencies
52
-
53
-	// Specify receiver times
54
-	int ntimes	=	30;
55
-	VectorXr times(ntimes);
56
-	times <<
57
-	36.0, 45.25, 57.0, 72.25, 92.0,
58
-	117.0, 148.0, 186.5, 234.0, 290.0,
59
-	352.5, 427.5, 525.0, 647.5, 802.5,
60
-	1002.5, 1257.5, 1582.5, 1997.5, 2525.0,
61
-	3197.5, 4055.0, 5147.5, 6542.5, 8322.5,
62
-	10592.0, 13490.0, 17187.0, 21902.0, 27915.0;
63
-
64
-	times = times.array()*1.0e-6;
65
-
66
-	//CALCULATE ABSCISSA
67
-	//define bounds
68
-
69
-	gaussianquadrature *lgqw = gaussianquadrature::New();
70
-
71
-	Real lowb;
72
-	Real upb;
73
-	lowb = 1.0;
74
-	upb = 6000000.0;
75
-	lgqw->SetFreqs(nfreq,upb,lowb);
76
-	lgqw->CalcAW();
77
-
78
-	VectorXr xu(nfreq);
79
-	xu=lgqw->GetAbscissae();
80
-	DipoleSource* Trans=DipoleSource::New();
81
-	Trans->SetType(MAGNETICDIPOLE);
82
-	Trans->SetPolarisation(ZPOLARISATION);
83
-	Trans->SetLocation(0.0,0.0,-1e-4);
84
-
85
-
86
-    // Specify Transmitter
87
-    //PolygonalWireAntenna* Trans  = PolygonalWireAntenna::New();
88
-    //Trans->SetNumberOfPoints(5);
89
-    //Trans->SetPoint(0, Vector3r(   0,   0, -1e-3));
90
-    //Trans->SetPoint(1, Vector3r( 100,   0, -1e-3));
91
-    //Trans->SetPoint(2, Vector3r( 100, 100, -1e-3));
92
-    //Trans->SetPoint(3, Vector3r(   0, 100, -1e-3));
93
-    //Trans->SetPoint(4, Vector3r(   0,   0, -1e-3));
94
-    Trans->SetNumberOfFrequencies(nfreq);
95
-    VectorXr  f(nfreq);
96
-    for (int ifreq=0; ifreq<nfreq; ++ifreq) {
97
-    //    Trans->SetFrequency(ifreq, 1e-3 + dfreq*(Real)(ifreq));
98
-		Trans->SetFrequency(ifreq,xu(ifreq));
99
-        f(ifreq) = xu(ifreq);
100
-    }
101
-	//cout << Trans->GetFrequencies();
102
-    //Trans->SetCurrent(1);
103
-    //Trans->SetNumberOfTurns(1);
104
-
105
-    // Earth properties, top layer is air layer 0 conductivity is fine
106
-    LayeredEarthEM *Earth = LayeredEarthEM::New();
107
-        Earth->SetNumberOfLayers(4);
108
-        Earth->SetLayerConductivity( (VectorXcr(4) << 0.,1.e-6,1.e-2,1.e-6 ).finished() );
109
-        Earth->SetLayerThickness( (VectorXr(2) << 50, 20).finished() );
110
-
111
-    // Receivers, just 1 in the centre for now
112
-   	ReceiverPoints *Receivers = ReceiverPoints::New();
113
-		Vector3r loc;
114
-		Real ox     =    50.;
115
-		Real oy     =    50.;
116
-		Real depth  =  -1e-2;
117
-		Receivers->SetNumberOfReceivers(1);
118
-		loc << ox, oy, depth;
119
-		Receivers->SetLocation(0, loc);
120
-
121
-	// EmEarth
122
-	EMEarth1D  *EmEarth = EMEarth1D::New();
123
-		//EmEarth->AttachWireAntenna(Trans);
124
-		EmEarth->AttachDipoleSource(Trans);
125
-		EmEarth->AttachLayeredEarthEM(Earth);
126
-		EmEarth->AttachReceiverPoints(Receivers);
127
-		EmEarth->SetFieldsToCalculate(H);
128
-        // slower but may be more accurate, depending on frequencies
129
-        EmEarth->SetHankelTransformMethod(CHAVE);
130
-        //EmEarth->SetHankelTransformMethod(DIGITALFILTERING);
131
-
132
-    // Do calculation
133
-   	//EmEarth->CalculateWireAntennaFields();
134
-	//EmEarth->MakeCalc();
135
-	EmEarth->MakeCalc3();
136
-
137
-    // Grab Z component
138
-    // A little painful, I'll try to clean up the API
139
-    VectorXcr Hw(nfreq);
140
-    VectorXr  e(nfreq);
141
-    Hw(0) = 0.; // DC component
142
-    for (int ifreq=0; ifreq<nfreq; ++ifreq) {
143
-        Hw(ifreq) = (Receivers->GetHfield(ifreq, 0))(2);
144
-        e(ifreq) = ifreq;
145
-    }
146
-
147
-    VectorXr Ht(ntimes);                   // Time domain H field
148
-
149
-	//Sine transform
150
-	VectorXr func(nfreq);
151
-	for (int ii=0;ii<ntimes;++ii) {
152
-		func = (Hw.imag().array()*((f.array()*times(ii)).sin()));
153
-		lgqw->SetFunc(func);
154
-		lgqw->Integrate();
155
-		Ht(ii)=lgqw->GetResult();
156
-	}
157
-	Ht = Ht.array()*(-2.0/PI);
158
-
159
-	std::ofstream myfile1;
160
-	myfile1.open("solution.txt");
161
-	for (int ii=0;ii<ntimes;++ii) {
162
-		myfile1 << times(ii) << "   " << Ht(ii) << std::endl;
163
-	}
164
-	myfile1.close();
165
-
166
-	std::ofstream myfile2;
167
-	myfile2.open("freq_domain.txt");
168
-	for (int ii=0;ii<nfreq;++ii) {
169
-		myfile2 << f(ii) << "  " << Hw(ii).real() << "  " << Hw(ii).imag()
170
-			<< std::endl;
171
-	}
172
-	myfile2.close();
173
-
174
-    //std::cout << Ht << std::endl;
175
-    //std::cout << Hw.real() << std::endl;
176
-
177
-    // Quick and dirty plot
178
-    #ifdef  LEMMAUSEVTK
179
-    double colour1[3] = {0.0,0.0,1.0};
180
-    double colour2[3] = {1.0,0.0,0.0};
181
-
182
-    Plot2D_VTK p1("Hz", "Re(Hw)", 800, 600);
183
-    p1.plot(f, Hw.real().eval(), colour1, ".-");
184
-    p1.show();
185
-
186
-    Plot2D_VTK p2("Hz", "Im(Hw)", 800, 600);
187
-    p2.plot(f, Hw.imag().eval(), colour2, ".-");
188
-    p2.show();
189
-
190
-    Plot2D_VTK p3("Time (seconds)", "Ht", 800, 600);
191
-    p3.plot(times, Ht, colour2, ".-");
192
-    p3.show();
193
-
194
-	//Plot2D_VTK p4("index", "frequency",800,600);
195
-	//p4.plot(e,f,colour1,".-");
196
-	//p4.show();
197
-
198
-    #endif
199
-
200
-    // Clean up
201
-    Trans->Delete();
202
-    Earth->Delete();
203
-    Receivers->Delete();
204
-    EmEarth->Delete();
205
-
206
-    return EXIT_SUCCESS;
207
-}

+ 0
- 319
LemmaCore/examples/wireantenna.cpp View File

@@ -1,319 +0,0 @@
1
-// ===========================================================================
2
-//
3
-//       Filename:  utdipolesource.cpp
4
-//
5
-//    Description:
6
-//
7
-//        Version:  0.0
8
-//        Created:  12/02/2009 11:57:14 AM
9
-//       Revision:  none
10
-//       Compiler:  g++ (c++)
11
-//
12
-//         Author:  Trevor Irons (ti)
13
-//
14
-//   Organisation:  Colorado School of Mines (CSM)
15
-//                  United States Geological Survey (USGS)
16
-//
17
-//          Email:  tirons@mines.edu, tirons@usgs.gov
18
-//
19
-//  This program is free software: you can redistribute it and/or modify
20
-//  it under the terms of the GNU General Public License as published by
21
-//  the Free Software Foundation, either version 3 of the License, or
22
-//  (at your option) any later version.
23
-//
24
-//  This program is distributed in the hope that it will be useful,
25
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-//  GNU General Public License for more details.
28
-//
29
-//  You should have received a copy of the GNU General Public License
30
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-//
32
-// ===========================================================================
33
-
34
-#include <iostream>
35
-#include <fstream>
36
-
37
-#include "dipolesource.h"
38
-#include "layeredearth.h"
39
-#include "receiverpoints.h"
40
-#include "emearth1d.h"
41
-#include "WireAntenna.h"
42
-#include "PolygonalWireAntenna.h"
43
-
44
-#if  LEMMAUSEVTK
45
-#include "vtkRenderer.h"
46
-#include "vtkRenderWindow.h"
47
-#include "vtkRenderWindowInteractor.h"
48
-#include "vtkRenderLargeImage.h"
49
-#include "vtkPNGWriter.h"
50
-#endif     // -----  not LEMMA_USE_VTK  -----
51
-
52
-// For testing purposes disable VTK and run scale.sh
53
-//#undef LEMMAUSEVTK
54
-
55
-#include "timer.h"
56
-
57
-using namespace Lemma;
58
-
59
-double randDouble(double low, double high) {
60
-	//srand(time(0));
61
-	double temp;
62
-	/* swap low & high around if the user makes no sense */
63
-	if (low > high)	{
64
-	temp = low;
65
-	low = high;
66
-	high = temp;
67
-	}
68
-	/* calculate the random number & return it */
69
-	temp = (rand() / (static_cast<double>(RAND_MAX) + 1.0))
70
-	* (high - low) + low;
71
-	return temp;
72
-}
73
-
74
-
75
-int main() {
76
-
77
-	// Keep track of time
78
-	jsw_timer timer;
79
-
80
-
81
-	srand(time(0));
82
-
83
-	PolygonalWireAntenna *pa = PolygonalWireAntenna::New();
84
-	pa->SetNumberOfFrequencies(1);
85
-	pa->SetFrequency(0, 1000);
86
-	pa->SetNumberOfPoints(5);
87
-	pa->SetPoint(0, Vector3r(   0,   0, -.001));
88
-	pa->SetPoint(1, Vector3r( 100,   0, -.001));
89
-	pa->SetPoint(2, Vector3r( 100, 100, -.001));
90
-	pa->SetPoint(3, Vector3r(   0, 100, -.001));
91
-	pa->SetPoint(4, Vector3r(   0,   0, -.001));
92
-	pa->SetCurrent(1.);
93
-    pa->SetNumberOfTurns(1);
94
-	//Vector3r rp = Vector3r::Random(3);
95
-	//rp << 150., 10, 0.;
96
-	//rp << -27.1456, 15.2350, -1e-3;
97
-	//rp << randDouble(-35,35), randDouble(-35,35), randDouble(-35,35);
98
-	//rp << 3.22806, -13.1548, 14.9695;
99
-	//rp.setRandom(3);
100
-	//std::cout <<  "rp " << rp.transpose() << std::endl;
101
-	//pa->ApproximateWithElectricDipoles(rp);
102
-
103
-	WireAntenna *wire = WireAntenna::New();
104
-		wire->SetNumberOfPoints(5);
105
-		wire->SetPoint(0, Vector3r(   0,   0, -1e-3));
106
-		wire->SetPoint(1, Vector3r( 10,   0, -1e-3));
107
-		wire->SetPoint(2, Vector3r( 10, 10, -1e-3));
108
-		wire->SetPoint(3, Vector3r(   0, 10, -1e-3));
109
-		wire->SetPoint(4, Vector3r(   0,   0, -1e-3));
110
-		// TODO change wire antennae to use my class
111
-		//wire->SetNumberOfFrequencies(1);
112
-		wire->SetCurrent(1.);
113
-		wire->SetNumberOfFrequencies(1);
114
-		wire->SetFrequency(0, 1000);
115
-        wire->SetNumberOfTurns(1);
116
-		//wire->ApproximateWithElectricDipoles(5);
117
-
118
-	// Define model
119
-	VectorXcr sigma(2);
120
-		sigma << Complex(0.,0), Complex(.1,0);
121
-	VectorXr  thick(1);
122
-		thick << 10;
123
-	LayeredEarthEM *earth = LayeredEarthEM::New();
124
-		earth->SetNumberOfLayers(2);
125
-		earth->SetLayerConductivity(sigma);
126
-		//earth->SetLayerThickness(thick);
127
-
128
-	// Receivers
129
-	ReceiverPoints *receivers = ReceiverPoints::New();
130
-		Vector3r loc;
131
-		Real ox    =    50.561 ;
132
-		Real oy    =   105.235 ;
133
-		Real depth =    -3.75e1;
134
-		Real depth2 =   depth;
135
-		Real dx    =    1.;
136
-		int nz     =    1;
137
-		receivers->SetNumberOfReceivers(nz);
138
-		int ir = 0;
139
-		for (int iz=0; iz<nz; ++iz) {
140
-			loc << ox, oy, depth;
141
-			receivers->SetLocation(ir, loc);
142
-			depth += dx;
143
-			++ ir;
144
-		}
145
-
146
-	// EmEarth
147
-	EMEarth1D  *EmEarth = EMEarth1D::New();
148
-		//EmEarth->AttachWireAntenna(wire);
149
-		EmEarth->AttachWireAntenna(pa);
150
-		EmEarth->AttachLayeredEarthEM(earth);
151
-		EmEarth->AttachReceiverPoints(receivers);
152
-		EmEarth->SetFieldsToCalculate(H);
153
-        //EmEarth->SetHankelTransformMethod(GAUSSIANQUADRATURE);
154
-
155
-	// Do calculation
156
-	timer.begin();
157
-	EmEarth->CalculateWireAntennaFields();
158
-	Real paTime = timer.end();
159
-	std::cout << "Polygonal wire antennae time: " << paTime << "\n";
160
-
161
-	//EmEarth->AttachWireAntenna(wire);
162
-	//timer.begin();
163
-	//EmEarth->CalculateWireAntennaFields();
164
-	//Real waTime = timer.end();
165
-	//std::cout << "Fixed wire antennae time: " << waTime << "\n";
166
-
167
-	depth = depth2;
168
-	std::fstream real("reale_lay.dat", std::ios::out);
169
-	std::fstream imag("image_lay.dat", std::ios::out);
170
-	std::fstream hreal("real_lay.dat", std::ios::out);
171
-	std::fstream himag("imag_lay.dat", std::ios::out);
172
-	for (int iz=0; iz<nz; ++iz) {
173
-		Vector3cr temp = receivers->GetEfield(0,iz);
174
-		real << ox << "\t" << oy << "\t" << depth << "\t"
175
-				<< temp(0).real() << "\t" << temp(1).real()
176
-				<< "\t" << temp(2).real() << std::endl;
177
-		imag << ox << "\t" << oy << "\t" << depth << "\t"
178
-				<< std::imag(temp(0)) << "\t" << std::imag(temp(1))
179
-				<< "\t" << std::imag(temp(2)) << std::endl;
180
-		temp = receivers->GetHfield(0, iz);
181
-		hreal << ox << "\t" << oy << "\t" << depth << "\t"
182
-				<< std::real(temp(0)) << "\t" << std::real(temp(1))
183
-				<< "\t" << std::real(temp(2)) << std::endl;
184
-		himag << ox << "\t" << oy << "\t" << depth << "\t"
185
-				<< std::imag(temp(0)) << "\t" << std::imag(temp(1))
186
-				<< "\t" << std::imag(temp(2)) << std::endl;
187
-		depth += dx;
188
-	}
189
-	real.close();
190
-	imag.close();
191
-	hreal.close();
192
-	himag.close();
193
-	EmEarth->Delete();
194
-	receivers->Delete();
195
-	earth->Delete();
196
-	//wire->Delete();
197
-
198
-#if  LEMMAUSEVTK
199
-	// Create the usual rendering stuff.
200
-	vtkRenderer           *renderer = vtkRenderer::New();
201
-	vtkRenderWindow         *renWin = vtkRenderWindow::New();
202
-	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
203
-
204
-	// Line of tx
205
-	vtkLineSource       *vline = vtkLineSource::New();
206
-	vtkTubeFilter       *vTube = vtkTubeFilter::New();
207
- 	vtkPolyDataMapper   *vMapper = vtkPolyDataMapper::New();
208
-	vtkActor             *vActor = vtkActor::New();
209
-	vline->SetPoint1(0,0,0);
210
-	vline->SetPoint2(10,0,0);
211
-
212
-	vTube->SetInputConnection(vline->GetOutputPort());
213
-	vTube->SetRadius(.2);
214
-	vTube->SetNumberOfSides(6);
215
-	vMapper->SetInputConnection(vTube->GetOutputPort());
216
-	vActor->SetMapper(vMapper);
217
-	vActor->GetProperty()->SetColor(0.0, .0, 1.0);
218
-	vActor->GetProperty()->SetOpacity(.15);
219
-	renderer->AddActor(vActor);
220
-
221
-	vtkLineSource       *vline2 = vtkLineSource::New();
222
-	vtkTubeFilter       *vTube2 = vtkTubeFilter::New();
223
- 	vtkPolyDataMapper   *vMapper2 = vtkPolyDataMapper::New();
224
-	vtkActor             *vActor2 = vtkActor::New();
225
-	vline2->SetPoint1(10,0,0);
226
-	vline2->SetPoint2(10,10,0);
227
-
228
-	vTube2->SetInputConnection(vline2->GetOutputPort());
229
-	vTube2->SetRadius(.2);
230
-	vTube2->SetNumberOfSides(6);
231
-	vMapper2->SetInputConnection(vTube2->GetOutputPort());
232
-	vActor2->SetMapper(vMapper2);
233
-	vActor2->GetProperty()->SetColor(0.0, .0, 1.0);
234
-	vActor2->GetProperty()->SetOpacity(.15);
235
-	renderer->AddActor(vActor2);
236
-
237
-	vtkLineSource       *vline3 = vtkLineSource::New();
238
-	vtkTubeFilter       *vTube3 = vtkTubeFilter::New();
239
- 	vtkPolyDataMapper   *vMapper3 = vtkPolyDataMapper::New();
240
-	vtkActor             *vActor3 = vtkActor::New();
241
-	vline3->SetPoint1(10,10,0);
242
-	vline3->SetPoint2(0,10,0);
243
-
244
-	vTube3->SetInputConnection(vline3->GetOutputPort());
245
-	vTube3->SetRadius(.2);
246
-	vTube3->SetNumberOfSides(6);
247
-	vMapper3->SetInputConnection(vTube3->GetOutputPort());
248
-	vActor3->SetMapper(vMapper3);
249
-	vActor3->GetProperty()->SetColor(0.0, .0, 1.0);
250
-	vActor3->GetProperty()->SetOpacity(.15);
251
-	renderer->AddActor(vActor3);
252
-
253
-	vtkLineSource       *vline4 = vtkLineSource::New();
254
-	vtkTubeFilter       *vTube4 = vtkTubeFilter::New();
255
- 	vtkPolyDataMapper   *vMapper4 = vtkPolyDataMapper::New();
256
-	vtkActor             *vActor4 = vtkActor::New();
257
-	vline4->SetPoint1(0,10,0);
258
-	vline4->SetPoint2(0,0,0);
259
-
260
-	vTube4->SetInputConnection(vline4->GetOutputPort());
261
-	vTube4->SetRadius(.2);
262
-	vTube4->SetNumberOfSides(6);
263
-	vMapper4->SetInputConnection(vTube4->GetOutputPort());
264
-	vActor4->SetMapper(vMapper4);
265
-	vActor4->GetProperty()->SetColor(0.0, .0, 1.0);
266
-	vActor4->GetProperty()->SetOpacity(.15);
267
-	renderer->AddActor(vActor4);
268
-
269
-    loc << 50, 50, -1e-3;
270
-	pa->ApproximateWithElectricDipoles(loc);
271
-
272
-    vtkActor **pdipActors = new vtkActor*[pa->GetNumberOfDipoles()];
273
-    std::cout <<  "Wire approximated with " << pa->GetNumberOfDipoles() << std::endl;
274
-	for (int id=0; id<pa->GetNumberOfDipoles(); ++id) {
275
-		pdipActors[id] = pa->GetVtkActor(id);
276
-		renderer->AddActor(pdipActors[id]);
277
-	}
278
-
279
-    /*
280
-    vtkActor **dipActors = new vtkActor*[wire->GetNumberOfDipoles()];
281
-	for (int id=0; id<wire->GetNumberOfDipoles(); ++id) {
282
-		dipActors[id] = wire->GetVtkActor(id);
283
-		renderer->AddActor(dipActors[id]);
284
-	}
285
-    */
286
-
287
-	renderer->SetBackground(1,1,1);
288
-
289
-	// Render the window
290
-	renWin->AddRenderer(renderer);
291
-	renWin->SetWindowName("Wire antennae");
292
-
293
-	iren->SetRenderWindow(renWin);
294
-	iren->Initialize();
295
-	iren->Start();
296
-	iren->Render();
297
-
298
-    #if 0
299
-	cout << "Enter File name?: ";
300
-	std::string pngName;
301
-	std::cin >> pngName;
302
-	vtkPNGWriter *pngwrite = vtkPNGWriter::New();
303
-	vtkRenderLargeImage *renlarge = vtkRenderLargeImage::New();
304
-	renlarge->SetInput(renderer);
305
-	renlarge->SetMagnification(2);
306
-	pngwrite->SetInputConnection(renlarge->GetOutputPort());
307
-	pngName.append(".png");
308
-	pngwrite->SetFileName(pngName.c_str());
309
-	pngwrite->Write();
310
-    #endif
311
-
312
-#endif     // -----  not LEMMA_USE_VTK  -----
313
-
314
-
315
-	//std::cout << *pa << std::endl;
316
-	//pa->Delete();
317
-
318
-	return 0;
319
-}

+ 0
- 161
LemmaCore/include/ASCIIParser.h View File

@@ -1,161 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      09/23/2013 02:31:24 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2013, Trevor Irons
17
- */
18
-
19
-#ifndef  ASCIIPARSER_INC
20
-#define  ASCIIPARSER_INC
21
-
22
-#include "LemmaObject.h"
23
-#include <fstream>
24
-
25
-namespace Lemma {
26
-
27
-/**
28
- * \ingroup LemmaCore
29
- * \brief   Provides ASCII input file parsing
30
- * \details Able to accomodate various inputs and comment styles
31
- */
32
-class ASCIIParser : public LemmaObject {
33
-
34
-    friend std::ostream &operator<<(std::ostream &stream,
35
-            const ASCIIParser &ob);
36
-
37
-    public:
38
-
39
-    // ====================  LIFECYCLE     =======================
40
-
41
-    /**
42
-     *  Factory method for generating concrete class.
43
-     *  @return a std::shared_ptr of type ASCIIParser
44
-     */
45
-    static std::shared_ptr< ASCIIParser >  NewSP();
46
-
47
-    /**
48
-     *  Constructs an object from a YAML serialization
49
-     *  @return a std::shared_ptr of type ASCIIParser
50
-     */
51
-    static std::shared_ptr< ASCIIParser >  DeSerialize( const YAML::Node& node );
52
-
53
-    /**
54
-     *  Uses YAML to serialize this object.
55
-     *  @return a YAML::Node
56
-     */
57
-    YAML::Node Serialize() const;
58
-
59
-    // ====================  OPERATORS     =======================
60
-
61
-    // ====================  OPERATIONS    =======================
62
-
63
-    /** Opens the file up for reading. Throws an exception if something bad happens.
64
-        @param[in] fname is the filename to be parsed.
65
-     */
66
-    void Open (const std::string& fname);
67
-
68
-
69
-    /** Closes the file. Throws an exception if something bad happens.
70
-     */
71
-    void Close ( );
72
-
73
-    /** Reads a series of Reals.
74
-     *  @param[in] nr is the number of reals to read. Enter -1 for the entire file
75
-     *  @todo throw exception if no file is open
76
-     */
77
-    std::vector<Real> ReadReals( const int& nr);
78
-
79
-    /** Reads a series of Reals.
80
-     *  @param[in] nr is the number of ints to read. Enter -1 for the entire file
81
-     *  @todo throw exception if no file is open
82
-     */
83
-    std::vector<int> ReadInts( const int& nr);
84
-
85
-    /** Reads a series of space delimited strings
86
-     *  @param[in] nr is the number of strings to read. Enter -1 for the entire file
87
-     *  @todo throw exception if no file is open
88
-     */
89
-    std::vector< std::string > ReadStrings( const int& nr);
90
-
91
-    /**
92
-     * @param[in] loc is the point in the file to jump to. Uses seekg
93
-     */
94
-    void JumpToLocation(const int& loc);
95
-
96
-    // ====================  ACCESS        =======================
97
-
98
-    /** Sets the comment identifier key.
99
-     * @param[in] key is a string identifying comments. All text after the key will be
100
-     *  ignored by the parser. Default is //
101
-     */
102
-    void SetCommentString( const std::string& key );
103
-
104
-    /** Sets the buffer size. This affects the maximum number of column in a line. Defaults
105
-     *  is 255.
106
-     *  @param[in] BufferSize is the size of the buffer to use
107
-     */
108
-    void SetBufferSize( const int& BufferSize);
109
-
110
-    /**
111
-     * @return the current position in the file, as reported by istream::tellg
112
-     */
113
-    int GetFileLocation();
114
-
115
-    /** Returns the name of the underlying class, similiar to Python's type */
116
-    virtual inline std::string GetName() const {
117
-        return CName;
118
-    }
119
-
120
-    // ====================  INQUIRY       =======================
121
-
122
-    protected:
123
-
124
-    // ====================  LIFECYCLE     =======================
125
-
126
-    /** Default protected constructor, use New */
127
-    ASCIIParser ( );
128
-
129
-    /** Constructor using YAML::Node */
130
-    ASCIIParser ( const YAML::Node& node );
131
-
132
-    /** Default protected destructor, use Delete */
133
-    ~ASCIIParser ();
134
-
135
-    /**
136
-     *  @copybrief   LemmaObject::Release()
137
-     *  @copydetails LemmaObject::Release()
138
-     */
139
-    void Release();
140
-
141
-    private:
142
-
143
-    // ====================  DATA MEMBERS  =========================
144
-
145
-    /** ASCII string representation of the class name */
146
-    static constexpr auto CName = "ASCIIParser";
147
-
148
-    /** c++ style file IO */
149
-    std::fstream input;
150
-
151
-    /** comment string, defaults to c++ style // */
152
-    std::string  CommentString;
153
-
154
-    /** Buffer size, max line width supported, defaults to 255 */
155
-    int BufferSize;
156
-
157
-}; // -----  end of class  ASCIIParser  -----
158
-
159
-}		// -----  end of Lemma  name  -----
160
-
161
-#endif   // ----- #ifndef ASCIIPARSER_INC  -----

+ 0
- 195
LemmaCore/include/CubicSplineInterpolator.h View File

@@ -1,195 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      09/25/2013 08:20:14 AM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2013, XRI Geophysics, LLC
17
- * @copyright Copyright (c) 2013, Trevor Irons
18
- */
19
-
20
-#ifndef  CUBICSPLINEINTERPOLATOR_INC
21
-#define  CUBICSPLINEINTERPOLATOR_INC
22
-
23
-#include "LemmaObject.h"
24
-
25
-namespace Lemma {
26
-
27
-// Simple struct to hold spline terms
28
-struct SplineSet{
29
-    VectorXr a;
30
-    VectorXr b;
31
-    VectorXr c;
32
-    VectorXr d;
33
-    VectorXr x;
34
-
35
-    SplineSet( ) {
36
-    }
37
-
38
-    SplineSet(const int&n) {
39
-        a = VectorXr::Zero(n+1);
40
-        b = VectorXr::Zero(n);
41
-        c = VectorXr::Zero(n+1);
42
-        d = VectorXr::Zero(n);
43
-        x = VectorXr::Zero(n+1);
44
-    }
45
-};
46
-
47
-/**
48
- * \ingroup LemmaCore
49
- * \brief   Real 1D Natural cubic spline interpolator.
50
- * \details Splines are fit between knots \f$j\f$ according to the forulae
51
- *          \f[ S_j(x) =  a_j + b_j(x - x_j) + c_j(x-x_j)^2 + d_j(x-x_y)^3  \f]
52
- *          The spline must satisfy the following conditions
53
- *           \f{eqnarray} {
54
- *               S_i(x_i) & = & y_i = S_{i-1}(x_i), i = 1,..., n-1 \\
55
- *               S'_i(x_i) & = &  S'_{i-1}(x_i), i = 1,..., n-1 \\
56
- *               S''_i(x_i) & = & S''_{i-1}(x_i), i = 1,..., n-1 \\
57
- *               S''_0(x_0) & = & S''_{n-1}(x_n) = 0
58
- *           \f}
59
- */
60
-class CubicSplineInterpolator : public LemmaObject {
61
-
62
-    friend std::ostream &operator<<(std::ostream &stream,
63
-            const CubicSplineInterpolator &ob);
64
-
65
-    public:
66
-
67
-    // ====================  LIFECYCLE     =======================
68
-
69
-    /**
70
-     *  Factory method for generating concrete class.
71
-     *  @return a std::shared_ptr of type CubicSplineInterpolator
72
-     */
73
-    static std::shared_ptr<CubicSplineInterpolator> NewSP();
74
-
75
-    /**
76
-     *  Uses YAML to serialize this object.
77
-     *  @return a YAML::Node
78
-     */
79
-    YAML::Node Serialize() const;
80
-
81
-    /**
82
-     *   Constructs an object from a YAML::Node.
83
-     */
84
-    static std::shared_ptr< CubicSplineInterpolator > DeSerialize(const YAML::Node& node);
85
-
86
-    // ====================  OPERATORS     =======================
87
-
88
-    // ====================  OPERATIONS    =======================
89
-
90
-    /** Sets the knots to use for interpolation.
91
-        @param[in] x are the absissa values
92
-        @param[in] y are the ordinate values
93
-     */
94
-    void SetKnots(const VectorXr& x, const VectorXr& y);
95
-
96
-    /** Resets the knots to use for interpolation, when abscissa values haven't changed.
97
-        @param[in] y are the ordinate values
98
-     */
99
-    void ResetKnotOrdinate( const VectorXr& y );
100
-
101
-    /** Interpolate a monotonically increasing ordered set.
102
-        @param[in] x are the interpolation abscissa points
103
-        @return the ordinate values at x
104
-     */
105
-    VectorXr InterpolateOrderedSet(const VectorXr& x);
106
-
107
-    /** integrates the spline from x0 to x1. Uses composite Simpson's rule and n is the number of segments
108
-     *  @param[in] x0 is left argument
109
-     *  @param[in] x1 is right argument
110
-     *  @param[in] n is the number of points, must be even
111
-     */
112
-    Real Integrate(const Real& x0, const Real& x1, const int& n);
113
-
114
-    /** integrates using cubic spline values. Taken from AMRIRA P223F project code Leroi, which in turn was based on
115
-        This is a modification of the FUNCTION PPVALU in the book
116
-        "A PRACTICAL GUIDE TO SPLINES"  by C. DE BOOR
117
-     */
118
-    Real Integrate(const Real& x0, const Real& x1);
119
-
120
-    /** @returns the know abscissa values
121
-     */
122
-    VectorXr GetKnotAbscissa();
123
-
124
-    /** @returns the know abscissa values
125
-     */
126
-    VectorXr GetKnotOrdinate();
127
-
128
-    /** Interpolation at a single point.
129
-        @param[in] x is the interpolation abscissa point
130
-        @param[in] i is an optional index to start searching at. Defaults to zero
131
-        @return the ordinate value at x
132
-     */
133
-    Real Interpolate(const Real& x, int& i);
134
-
135
-    /** Interpolation at a single point.
136
-        @param[in] x is the interpolation abscissa point
137
-        @return the ordinate value at x
138
-     */
139
-    Real Interpolate(const Real& x);
140
-
141
-    // ====================  ACCESS        =======================
142
-
143
-    // ====================  INQUIRY       =======================
144
-
145
-    /** Returns the name of the underlying class, similiar to Python's type */
146
-    virtual inline std::string GetName() const {
147
-        return CName;
148
-    }
149
-
150
-    protected:
151
-
152
-    // ====================  LIFECYCLE     =======================
153
-
154
-    /** Default protected constructor, use New */
155
-    CubicSplineInterpolator ( );
156
-
157
-    /** Protected DeDerializing constructor, use factory DeSerialize  method*/
158
-    CubicSplineInterpolator (const YAML::Node& node);
159
-
160
-    /** Default protected destructor, smart pointers auto delete */
161
-    ~CubicSplineInterpolator ();
162
-
163
-    /**
164
-     *  @copybrief   LemmaObject::Release()
165
-     *  @copydetails LemmaObject::Release()
166
-     */
167
-    void Release();
168
-
169
-    // ====================  OPERATIONS    =======================
170
-
171
-    /** Finds the interval of knots in spline to use for integration.
172
-     */
173
-    int Interval(const Real& x);
174
-
175
-    private:
176
-
177
-    /** ASCII string representation of the class name */
178
-    static constexpr auto CName = "CubicSplineInterpolator";
179
-
180
-    SplineSet Spline;
181
-
182
-    int ilo;
183
-
184
-    int mflag;
185
-
186
-    // ====================  DATA MEMBERS  =========================
187
-
188
-}; // -----  end of class  CubicSplineInterpolator  -----
189
-
190
-}		// -----  end of Lemma  name  -----
191
-
192
-#endif   // ----- #ifndef CUBICSPLINEINTERPOLATOR_INC  -----
193
-
194
-/* vim: set tabstop=4 expandtab: */
195
-/* vim: set filetype=cpp: */

+ 0
- 94
LemmaCore/include/Data.h View File

@@ -1,94 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     03/01/2010
11
-  @version  $Id: data.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#ifndef  _DATA_H_INC
15
-#define  _DATA_H_INC
16
-
17
-#include "LemmaObject.h"
18
-
19
-namespace Lemma {
20
-
21
-    // ===================================================================
22
-    //        Class:  Data
23
-    /**
24
-     *  \ingroup LemmaCore
25
-     *  \brief Abstract class for data from an instrument
26
-     *  \details Currently provides no functionality, but this will likely
27
-     *          change in the near future.
28
-     */
29
-    // ===================================================================
30
-    class Data : public LemmaObject {
31
-
32
-        friend std::ostream &operator<<(std::ostream &stream,
33
-                const Data &ob);
34
-
35
-        public:
36
-
37
-            // ====================  LIFECYCLE     =======================
38
-
39
-            /** Copies the *structure* of this class to a new object and
40
-             * returns a pointer to this object. Memory management is
41
-             * the responsibility of the receiver!. The data values are
42
-             * not copied.
43
-             */
44
-            virtual Data* Clone()=0;
45
-
46
-            // ====================  OPERATORS     =======================
47
-
48
-            // ====================  OPERATIONS    =======================
49
-
50
-            /** Clears all data arrays and containers
51
-             */
52
-            virtual void Zero()=0;
53
-
54
-            /** Data2 needs to be compatible with the calling class. Data2 will
55
-             * be cast into the calling class type. Most of the time this
56
-             * cast will not perform anything, as Data2 *is* the same type
57
-             * as the calling class.
58
-             */
59
-            virtual Real Norm(Data* Data2)=0;
60
-
61
-            // ====================  ACCESS        =======================
62
-
63
-            // ====================  INQUIRY       =======================
64
-
65
-            /** Returns the name of the underlying class, similiar to Python's type */
66
-            virtual inline std::string GetName() const {
67
-                return CName;
68
-            }
69
-
70
-        protected:
71
-
72
-            // ====================  LIFECYCLE     =======================
73
-
74
-            /** Default protected constructor. */
75
-            Data (  );
76
-
77
-            /** Default protected constructor. */
78
-            ~Data ();
79
-
80
-            // ====================  DATA MEMBERS  =========================
81
-
82
-        private:
83
-
84
-            /** ASCII string representation of the class name */
85
-            static constexpr auto CName = "Data";
86
-
87
-    }; // -----  end of class  Data  -----
88
-
89
-}       // -----  end of Lemma  name  -----
90
-
91
-#endif   // ----- #ifndef _DATA_H_INC  -----
92
-
93
-/* vim: set tabstop=4 expandtab: */
94
-/* vim: set filetype=cpp: */

+ 0
- 75
LemmaCore/include/DataReader.h View File

@@ -1,75 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     03/01/2010
11
-  @version  $Id: datareader.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#ifndef  DATAREADER_H_INC
15
-#define  DATAREADER_H_INC
16
-
17
-#include "LemmaObject.h"
18
-#include "Data.h"
19
-
20
-namespace Lemma {
21
-
22
-// ===================================================================
23
-//        Class:  DataReader
24
-/// \ingroup LemmaCore
25
-/// \brief  Abstract class whose derived members read data files and
26
-/// converts them to Data Classes
27
-/// \details
28
-// ===================================================================
29
-class DataReader : public LemmaObject {
30
-
31
-    friend std::ostream &operator<<(std::ostream &stream,
32
-            const DataReader &ob);
33
-
34
-    public:
35
-
36
-        // ====================  LIFECYCLE     =======================
37
-
38
-        // ====================  OPERATORS     =======================
39
-
40
-        // ====================  OPERATIONS    =======================
41
-
42
-        // ====================  ACCESS        =======================
43
-        virtual Data* GetData()=0;
44
-
45
-        // ====================  INQUIRY       =======================
46
-        /** Returns the name of the underlying class, similiar to Python's type */
47
-        virtual inline std::string GetName() const {
48
-            return CName;
49
-        }
50
-
51
-    protected:
52
-
53
-        // ====================  LIFECYCLE     =======================
54
-
55
-        /// Default protected constructor.
56
-        DataReader ( );
57
-
58
-        /// Default protected constructor.
59
-        ~DataReader ( );
60
-
61
-        // ====================  DATA MEMBERS  =========================
62
-
63
-    private:
64
-
65
-        /** ASCII string representation of the class name */
66
-        static constexpr auto CName = "DataReader";
67
-
68
-}; // -----  end of class  DataReader  -----
69
-
70
-}       // -----  end of Lemma  name  -----
71
-
72
-#endif   // ----- #ifndef DATAREADER_H_INC  -----
73
-
74
-/* vim: set tabstop=4 expandtab: */
75
-/* vim: set filetype=cpp: */

+ 0
- 149
LemmaCore/include/EarthModel.h View File

@@ -1,149 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     03/23/2010
11
-  @version  $Id: earthmodel.h 198 2014-12-27 06:14:05Z tirons $
12
- **/
13
-
14
-#ifndef  EARTHMODEL_INC
15
-#define  EARTHMODEL_INC
16
-
17
-#include "LemmaObject.h"
18
-
19
-namespace Lemma {
20
-
21
-    // ===================================================================
22
-    //        Class:  EarthModel
23
-    /// \ingroup LemmaGroup
24
-    /// \brief abstract class for Earth models
25
-    /// \details
26
-    // ===================================================================
27
-    class EarthModel : public LemmaObject {
28
-
29
-        // ====================    FRIENDS     ===========================
30
-        friend std::ostream &operator<<(std::ostream &stream,
31
-                        const EarthModel &ob);
32
-
33
-        public:
34
-
35
-            // ====================  LIFECYCLE     =======================
36
-            /** YAML Serializing method
37
-             */
38
-            YAML::Node Serialize() const;
39
-            //static LayeredEarth* DeSerialize(const YAML::Node& node);
40
-
41
-            // ====================  OPERATORS     =======================
42
-
43
-            // ====================  OPERATIONS    =======================
44
-
45
-            // ====================  ACCESS        =======================
46
-
47
-            /** Sets the earth's magnetic field, in Tesla
48
-                @param[in] bfield contains the x,y, and z components of
49
-                the field. EarthModel::Inc, EarthModel::Dec, and
50
-                EarthModel::BMag are computed:
51
-                \f{eqnarray*}{ \mathrm{Inc} = &
52
-                \cos^{-1}( \mathbf{B} \cdot \hat{\mathbf{z}} / B )
53
-                \\ \mathrm{Dec} =& \cos^{-1}
54
-                         (\mathbf{B} \cdot \hat{\mathbf{x}} / B )
55
-                   \\           \mathrm{Mag} =& \Vert \mathbf{B} \Vert  \f}
56
-               @param[in] unit specifies the units of bfield.
57
-              */
58
-            void SetMagneticFieldComponents(const Vector3r &bfield,
59
-                            const MAGUNITS &unit);
60
-
61
-            /// Sets the magnetic field using inclination, declination,
62
-            /// and magnitude, units of Tesla
63
-            /// @param[in] inc is the field's inclination
64
-            /// @param[in] dec is the field's declination
65
-            /// @param[in] Mag is the field's magnitude
66
-            /// @param[in] unit specifies the the units used.
67
-            /// The components are set according to
68
-            /// \f{eqnarray*} { B_x =& B \cos(inc (\pi/180)) \cos(dec (\pi/180))
69
-            ///            \\   B_y =& B \cos(inc (\pi/180)) \sin(dec (\pi/180))
70
-            ///            \\   B_z =& B \sin(inc (\pi/180))
71
-            /// \f}
72
-            void SetMagneticFieldIncDecMag(const Real& inc, const Real&dec,
73
-                            const Real& Mag, const MAGUNITS &unit);
74
-
75
-            // ====================  INQUIRY       =======================
76
-
77
-            /// Gets the magnetic field of the earth, in T
78
-            Vector3r GetMagneticField( );
79
-
80
-            /// Gets the magnetic field of the earth, in T
81
-            Vector3r GetMagneticFieldInGauss(  );
82
-
83
-            /// Gets the magnetic field unit vector of the earth
84
-            Vector3r GetMagneticFieldUnitVector( );
85
-
86
-            /// Returns the magnitude of the magnetic field \f$ \Vert
87
-            /// \mathbf{B}_0 \Vert \f$
88
-            Real GetMagneticFieldMagnitude();
89
-
90
-            /// Returns the magnitude of the magnetic field \f$ \Vert
91
-            /// \mathbf{B}_0 \Vert \f$ in Gauss units
92
-            Real GetMagneticFieldMagnitudeInGauss( );
93
-
94
-            /** Returns the name of the underlying class, similiar to Python's type */
95
-            virtual inline std::string GetName() const {
96
-                return this->CName;
97
-            }
98
-
99
-        protected:
100
-
101
-            // ====================  LIFECYCLE     =======================
102
-
103
-            /// Default protected constructor.
104
-            EarthModel ( );
105
-
106
-            /** Deserialize constructor */
107
-            EarthModel (const YAML::Node& node);
108
-
109
-            /// Default protected constructor.
110
-            ~EarthModel ();
111
-
112
-            // ====================  DATA MEMBERS  =========================
113
-
114
-        private:
115
-
116
-            /** ASCII string representation of the class name */
117
-            static constexpr auto CName = "EarthModel";
118
-
119
-            /// Magnetic field, in units of nT
120
-            Vector3r          BField;
121
-
122
-            /// Magnetic field unit vector \f$  \hat{\mathbf{B}_0} \f$
123
-            Vector3r          BFieldUnit;
124
-
125
-            /// Inclination of the magnetic field
126
-            Real              BInc;
127
-
128
-            /// Declination of the magnetic field
129
-            Real              BDec;
130
-
131
-            /// Declination of the magnetic field
132
-            Real              BMag;
133
-
134
-    }; // -----  end of class  EarthModel  -----
135
-
136
-    //////////////////////////////////////////////////////////////
137
-    // Error Classes
138
-
139
-    /** If the Earth class is NULL valued, throw this
140
-     */
141
-    class NullEarth : public std::runtime_error {
142
-            /** Thrown when an Earth pointer is NULL
143
-             */
144
-            public: NullEarth ();
145
-    };
146
-
147
-}       // -----  end of Lemma  name  -----
148
-
149
-#endif   // ----- #ifndef EARTHMODEL_INC  -----

+ 0
- 71
LemmaCore/include/Filter.h View File

@@ -1,71 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     07/20/2010
11
-  @version  $Id: filter.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "LemmaObject.h"
15
-
16
-namespace Lemma {
17
-
18
-
19
-    // ===================================================================
20
-    //  Class:  Filter
21
-    /**
22
-      @class  Filter
23
-      \ingroup LemmaCore
24
-      \brief  Abstract class for filtering.
25
-      \details Derived classes include fourier domain and time domain filters.
26
-     */
27
-    // ===================================================================
28
-
29
-    class Filter : public LemmaObject {
30
-
31
-        public:
32
-
33
-            // ====================  LIFECYCLE     =======================
34
-
35
-            // ====================  OPERATORS     =======================
36
-
37
-            // ====================  OPERATIONS    =======================
38
-
39
-            // ====================  ACCESS        =======================
40
-
41
-            // ====================  INQUIRY       =======================
42
-
43
-            /** Returns the name of the underlying class, similiar to Python's type */
44
-            virtual inline std::string GetName() const {
45
-                return this->CName;
46
-            }
47
-
48
-        protected:
49
-
50
-            // ====================  LIFECYCLE     =======================
51
-
52
-            /// Default protected constructor.
53
-            Filter ( );
54
-
55
-            /// Default protected constructor.
56
-            ~Filter ();
57
-
58
-            // ====================  DATA MEMBERS  =========================
59
-
60
-        private:
61
-
62
-            /** ASCII string representation of the class name */
63
-            static constexpr auto CName = "Filter";
64
-
65
-    }; // -----  end of class  Filter  -----
66
-
67
-
68
-}		// -----  end of Lemma  name  -----
69
-
70
-/* vim: set tabstop=4 expandtab: */
71
-/* vim: set filetype=cpp: */

+ 0
- 78
LemmaCore/include/Grid.h View File

@@ -1,78 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     10/25/2009
11
-  @version  $Id: grid.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#ifndef __GRID_H
15
-#define __GRID_H
16
-
17
-#include "LemmaObject.h"
18
-
19
-namespace Lemma {
20
-
21
-// ===============================================================================
22
-//        Class:  Grid
23
-/// \ingroup LemmaCore
24
-/// \brief Abstract base class for grids.
25
-/// \details Grids define values in space, they may either be an integral part
26
-/// of models, or simply the output of a forward modelling procedure.
27
-// ===============================================================================
28
-
29
-class Grid : public LemmaObject {
30
-
31
-    friend std::ostream &operator<<(std::ostream &stream,
32
-            const Grid &ob);
33
-
34
-    public:
35
-
36
-        // ====================  LIFECYCLE     ===================================
37
-
38
-        YAML::Node Serialize() const;
39
-
40
-        // ====================  OPERATORS     ===================================
41
-
42
-        // ====================  OPERATIONS    ===================================
43
-
44
-        // ====================  ACCESS        ===================================
45
-
46
-        // ====================  INQUIRY       ===================================
47
-
48
-        /** Returns the name of the underlying class, similiar to Python's type */
49
-        virtual inline std::string GetName() const {
50
-            return this->CName;
51
-        }
52
-
53
-    protected:
54
-
55
-        // ====================  LIFECYCLE     ===================================
56
-
57
-        /** Protected DeDerializing constructor, use factory DeSerialize  method on non abstract classes*/
58
-        Grid (const YAML::Node& node);
59
-
60
-        /// Default protected constructor.
61
-        Grid ( );
62
-
63
-        /// Default protected constructor.
64
-        ~Grid ();
65
-
66
-        // ====================  DATA MEMBERS  ===================================
67
-
68
-    private:
69
-
70
-        /** ASCII string representation of the class name */
71
-        static constexpr auto CName = "Grid";
72
-
73
-}; // -----  end of class  Grid  -----
74
-
75
-} // namespace Lemma
76
-
77
-#endif // __GRID_H
78
-

+ 0
- 84
LemmaCore/include/GridReader.h View File

@@ -1,84 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
- */
7
-
8
-/**
9
-  @file
10
-  @date      09/23/2013 11:25:11 AM
11
-  @version   $Id$
12
-  @author    Trevor Irons (ti)
13
-  @email     Trevor.Irons@xri-geo.com
14
-  @copyright Copyright (c) 2013, XRI Geophysics, LLC
15
-  @copyright Copyright (c) 2013, Trevor Irons
16
- **/
17
-
18
-#ifndef  GRIDREADER_INC
19
-#define  GRIDREADER_INC
20
-
21
-#include "LemmaObject.h"
22
-#include "Grid.h"
23
-
24
-namespace Lemma {
25
-
26
-    /**
27
-      @class
28
-      \ingroup LemmaCore
29
-      \brief   Abstract class for grid readers.
30
-      \details Provides a consistent interface for reading grid files in Lemma.
31
-     */
32
-    class GridReader : public LemmaObject {
33
-
34
-        friend std::ostream &operator << (std::ostream &stream, const GridReader &ob) {
35
-            stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
36
-            return stream;
37
-        }
38
-
39
-        public:
40
-
41
-            // ====================  LIFECYCLE     =======================
42
-
43
-            // ====================  OPERATORS     =======================
44
-
45
-            // ====================  OPERATIONS    =======================
46
-
47
-            virtual void ReadASCIIGridFile( const std::string& name )=0;
48
-
49
-            virtual std::shared_ptr< Grid > GetGrid( )=0;
50
-
51
-            // ====================  ACCESS        =======================
52
-
53
-            // ====================  INQUIRY       =======================
54
-
55
-            /** Returns the name of the underlying class, similiar to Python's type */
56
-            virtual inline std::string GetName() const {
57
-                return this->CName;
58
-            }
59
-
60
-        protected:
61
-
62
-            // ====================  LIFECYCLE     =======================
63
-
64
-            /** Default protected constructor, use New */
65
-            GridReader ( ) : LemmaObject( ) {
66
-            }
67
-
68
-            /** Default protected constructor, use Delete */
69
-            ~GridReader () {
70
-            }
71
-
72
-        private:
73
-
74
-            /** ASCII string representation of the class name */
75
-            static constexpr auto CName = "GridReader";
76
-
77
-            // ====================  DATA MEMBERS  =========================
78
-
79
-    }; // -----  end of class  GridReader  -----
80
-
81
-
82
-}		// -----  end of Lemma  name  -----
83
-
84
-#endif   // ----- #ifndef GRIDREADER_INC  -----

+ 0
- 71
LemmaCore/include/Instrument.h View File

@@ -1,71 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     02/05/2010
11
-  @version  $Id: instrument.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#ifndef __INSTRUMENT_H
15
-#define __INSTRUMENT_H
16
-
17
-#include "LemmaObject.h"
18
-
19
-namespace Lemma {
20
-
21
-	// =======================================================================
22
-	//        Class:  Instrument
23
-    /// \ingroup LemmaCore
24
-	/// \brief    Abstract class for instruments
25
-	/// \details
26
-	// =======================================================================
27
-	class Instrument : public LemmaObject {
28
-
29
-		friend std::ostream &operator<<(std::ostream &stream,
30
-			const Instrument &ob);
31
-
32
-		public:
33
-
34
-			// ====================  LIFECYCLE     ===========================
35
-
36
-			// ====================  OPERATORS     ===========================
37
-
38
-			// ====================  OPERATIONS    ===========================
39
-            //virtual void ForwardModelOnOctreeMesh()=0;
40
-
41
-			// ====================  ACCESS        ===========================
42
-
43
-			// ====================  INQUIRY       ===========================
44
-
45
-            /** Returns the name of the underlying class, similiar to Python's type */
46
-            virtual inline std::string GetName() const {
47
-                return this->CName;
48
-            }
49
-
50
-			// ====================  DATA MEMBERS  ===========================
51
-
52
-		protected:
53
-
54
-			// ====================  LIFECYCLE     ===========================
55
-
56
-			/// Default protected constructor.
57
-			Instrument ( );
58
-
59
-			/// Default protected constructor.
60
-			~Instrument ();
61
-
62
-		private:
63
-
64
-            /** ASCII string representation of the class name */
65
-            static constexpr auto CName = "Instrument";
66
-
67
-	}; // -----  end of class  Instrument  -----
68
-
69
-}		// -----  end of Lemma  name  -----
70
-
71
-#endif // __INSTRUMENT_H

+ 0
- 174
LemmaCore/include/LayeredEarth.h View File

@@ -1,174 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     06/24/2009
11
-  @version   0.0
12
- **/
13
-
14
-#ifndef __LAYEREDEARTH_H
15
-#define __LAYEREDEARTH_H
16
-
17
-#include "EarthModel.h"
18
-
19
-namespace Lemma {
20
-
21
-	const int MAXLAYERS	= 10;
22
-
23
-	// =======================================================================
24
-	//        Class:  LayeredEarth
25
-    /// \ingroup LemmaCore
26
-	/// \brief Abstract 1D layered earth.
27
-	// =======================================================================
28
-	class LayeredEarth : public EarthModel {
29
-
30
-        friend class LayeredEarthEM;
31
-
32
-		public:
33
-
34
-			// ====================    FRIENDS     ===========================
35
-			/** Recursively prints out information about this class
36
-             */
37
-            friend std::ostream &operator<<(std::ostream &stream,
38
-						const LayeredEarth &ob);
39
-
40
-			// ====================  LIFECYCLE     ===========================
41
-
42
-			// ====================  OPERATORS     ===========================
43
-
44
-			// ====================  OPERATIONS    ===========================
45
-
46
-			// ====================  ACCESS        ===========================
47
-
48
-			/** Sets the number of layers and resizes all model parameters to
49
-			 *  be the correct size, finally initialises all values to free
50
-			 *  space.
51
-             */
52
-			virtual void SetNumberOfLayers(const int& nlay)=0;
53
-
54
-			/** Sets the thickness of the layers
55
-             */
56
-			void SetLayerThickness(const VectorXr &thick);
57
-
58
-			// ====================  INQUIRY       ===========================
59
-
60
-			/** Returns the number of layers in the model */
61
-			int GetNumberOfLayers( );
62
-
63
-			/** Returns the number of layers in the model, excluding the air
64
-			 * layer
65
-             */
66
-			int GetNumberOfNonAirLayers( );
67
-
68
-			/** Returns the layer that a depth is in.
69
-			 * @param[in] depth is the depth you desire to know the layer of
70
-			 * @return the indice of the layer that depth is in.
71
-             */
72
-			int GetLayerAtThisDepth(const Real& depth);
73
-
74
-			/** Returns the thickness of a layer
75
-             *  @param[in] lay is the layer indice
76
-             *  @return the thickness of a layer
77
-             */
78
-			Real GetLayerThickness(const int & lay);
79
-
80
-			/** Returns the depth of the bottom interface of a layer
81
-             *  @param[in] lay is the layer indice
82
-             *  @return the depth of the bottom interface of a layer
83
-             */
84
-			Real GetLayerDepth(const int & lay);
85
-
86
-            /** YAML Serializing method
87
-             */
88
-            YAML::Node Serialize() const;
89
-            //static LayeredEarth* DeSerialize(const YAML::Node& node);
90
-
91
-            /** Returns the name of the underlying class, similiar to Python's type */
92
-            virtual inline std::string GetName() const {
93
-                return this->CName;
94
-            }
95
-
96
-		protected:
97
-
98
-			// ====================  LIFECYCLE     ===========================
99
-
100
-			/** Default protected constructor. */
101
-			LayeredEarth ( );
102
-
103
-            /** Default protected constructor. */
104
-			LayeredEarth (const YAML::Node& node);
105
-
106
-			/** Default protected constructor. */
107
-			~LayeredEarth ();
108
-
109
-			// ====================  DATA MEMBERS  ===========================
110
-
111
-        private:
112
-            /** ASCII string representation of the class name */
113
-            static constexpr auto CName = "LayeredEarth";
114
-
115
-			/** Number of layers in the model, including the air layer,
116
-			 * and counting from 0
117
-             */
118
-			int               NumberOfLayers;
119
-
120
-			/** Number of interfaces in the model. Equal to NumberOfLayers - 1
121
-			 */
122
-            int               NumberOfInterfaces;
123
-
124
-			/** Vector of layer thicknesses */
125
-			VectorXr          LayerThickness;
126
-
127
-	}; // -----  end of class  LayeredEarth  -----
128
-
129
-
130
-    ///////////////////////////////////////////////////////////////////
131
-    // Error classes
132
-
133
-    /** If a model with less than two layers is specified, throw error. Not set up
134
-     * for whole space solutions.
135
-     */
136
-    class EarthModelWithLessThanTwoLayers : public std::runtime_error {
137
-        public:
138
-            EarthModelWithLessThanTwoLayers( );
139
-    };
140
-
141
-    /** If a solver has a max number of layers, and this is exceeded, throw this
142
-     * error.
143
-     */
144
-    class EarthModelWithMoreThanMaxLayers : public std::runtime_error {
145
-        public:
146
-            /** Thrown when an Earth model with more than the maximum number of
147
-             *  Layers is given
148
-             */
149
-            EarthModelWithMoreThanMaxLayers( );
150
-    };
151
-
152
-    /** If the model parameters have different lengths than the earth model, throw
153
-     * this error.
154
-     */
155
-    class EarthModelParametersDoNotMatchNumberOfLayers : public std::runtime_error {
156
-        public:
157
-            /** Thrown when the parameters do not match the number of Layers
158
-             */
159
-            EarthModelParametersDoNotMatchNumberOfLayers ( );
160
-    };
161
-
162
-    /** If a request if made for a non-valid earth model parameter, throw this
163
-     * error.
164
-     */
165
-    class RequestForNonValidEarthModelParameter : public std::runtime_error {
166
-        public:
167
-            /** Thrown when a request is made for a non-valid earth parameter
168
-             */
169
-            RequestForNonValidEarthModelParameter ( );
170
-    };
171
-
172
-} // namespace Lemma
173
-
174
-#endif // __LAYEREDEARTH_H

+ 0
- 40
LemmaCore/include/LemmaCore View File

@@ -1,40 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* Copyright (C) 2009-2013 Trevor Irons <trevorirons@gmail.com> */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8
-
9
-/**
10
-  @file
11
-  @author   Trevor Irons
12
-  @version  $Id$
13
- **/
14
-
15
-// Convenience include all of LemmaCore
16
-#ifndef  LEMMAINCLUDE_INC
17
-#define  LEMMAINCLUDE_INC
18
-#include "ASCIIParser.h"
19
-#include "CubicSplineInterpolator.h"
20
-//#include "Data.h"
21
-//#include "DataReader.h"
22
-//#include "EarthModel.h"
23
-//#include "Filter.h"
24
-//#include "Grid.h"
25
-//#include "GridReader.h"
26
-//#include "Instrument.h"
27
-//#include "LayeredEarth.h"
28
-//#include "LemmaObject.h"
29
-#include "RectilinearGrid.h"
30
-#include "RectilinearGridReader.h"
31
-#include "RectilinearGridVTKExporter.h"
32
-#include "WindowFilter.h"
33
-// helpers and utilities
34
-#include "banner.h"
35
-#include "helper.h"
36
-#include "timer.h"
37
-#endif   // ----- #ifndef LEMMAINCLUDE_INC  -----
38
-
39
-/* vim: set tabstop=4 expandtab: */
40
-/* vim: set filetype=cpp: */

+ 0
- 168
LemmaCore/include/LemmaObject.h View File

@@ -1,168 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     06-13-2016
11
- **/
12
-
13
-#ifndef __LEMMAOBJECT_H
14
-#define __LEMMAOBJECT_H
15
-
16
-#include "helper.h"
17
-#include "lemma.h"
18
-#include "yaml-cpp/yaml.h"
19
-
20
-#include <chrono>
21
-#include <memory>
22
-
23
-namespace Lemma {
24
-
25
-/**
26
-  * \ingroup  LemmaCore
27
-  * \brief    Abstract class providing common interface for Lemma Objects.
28
-  * \details  Lemma objects can be members of other Lemma, and may be members
29
-  *           of multiple objects. Since updates should be atomic, and objects
30
-  *           can be large, it becomes useful to count the number of
31
-  *           Classes an object is a member of.
32
-  *           Before C++-11, this was done internally in Lemma, with the inclusion of
33
-  *           more sophisticated smart pointers, this logic has been offloaded to the
34
-  *           standard. All Lemma objects should be created as C++-11 Smart pointers, using
35
-  *           the supplied New method. Calls to Delete are no longer necessary or available.
36
-  */
37
-class LemmaObject {
38
-
39
-    /**
40
-     *  Streams class information as YAML::Node
41
-     */
42
-    friend YAML::Emitter& operator << (YAML::Emitter& out, const LemmaObject &ob) ;
43
-
44
-    friend class LemmaObjectDeleter;
45
-
46
-    public:
47
-
48
-        // ====================  LIFECYCLE     ==============================
49
-
50
-        // Needed because many derived classes have Eigen vectors as members,
51
-        // causing alignment issues when vectorisation is enabled.
52
-        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
53
-
54
-        // ====================  OPERATORS     ==============================
55
-
56
-        // ====================  OPERATIONS    ==============================
57
-
58
-        // ====================  ACCESS        ==============================
59
-
60
-        // ====================  INQUIRY       ==============================
61
-
62
-        /** Returns the name of the underlying class; Run-time type information (RTTI). This approach
63
-            Was chosen over typeid due to name mangling among various compilers, and the need for consistency
64
-            in Serialized objects.
65
-         */
66
-        virtual inline std::string GetName() const {
67
-            return this->CName;
68
-        }
69
-
70
-        /**
71
-         *  Uses YAML to serialize this object.
72
-         *  @return a YAML::Node
73
-         *  FOR NOT LemmaObject does not write out any YAML info,
74
-         *      in the future the reference count could be logged? But the utility
75
-         *      of that is minimal.
76
-         *  @note Not every Lemma class needs to be Serializable, for instance HankelTransform
77
-         *        classes will never need to be Serialized. There may be a need to differentiate these
78
-         *        two families in to a LemmaInternalClass without serializing and perhaps this class for
79
-         *        all external classes that might need to be serialized.
80
-         */
81
-        virtual YAML::Node Serialize() const {
82
-            YAML::Node node = YAML::Node();
83
-            node.SetTag( GetName() );
84
-            std::time_t now = std::chrono::system_clock::to_time_t( std::chrono::system_clock::now() );
85
-            node["Serialized"] = std::ctime(&now);
86
-            return node;
87
-        };
88
-
89
-    protected:
90
-
91
-        // ====================  LIFECYCLE     ==============================
92
-
93
-        /** Protected default constructor. This is an abstract class and
94
-         *  cannot be instantiated.
95
-         */
96
-        LemmaObject ( );
97
-
98
-        /** Protected DeDerializing constructor, use factory DeSerialize  method*/
99
-        LemmaObject (const YAML::Node& node);
100
-
101
-        /** Protected default destructor. This is an abstract class and
102
-         *  cannot be instantiated. Virtual is necessary so that if base class destructor is
103
-         *  called, we get the right behaviour.
104
-         */
105
-        virtual ~LemmaObject();
106
-
107
-    private:
108
-
109
-        // ====================  DATA MEMBERS  ==============================
110
-
111
-        /** ASCII string representation of the class name */
112
-        static constexpr auto CName = "LemmaObject";
113
-
114
-}; // -----  end of class  LemmaObject  -----
115
-
116
-class LemmaObjectDeleter
117
-{
118
-    public:
119
-        void operator()(LemmaObject* p) { delete p; }
120
-};
121
-
122
-    /////////////////////////////////////////////////////////////////
123
-    // Error Classes
124
-
125
-    /** Error called when DeSerializing breaks. If the node type is not the expected one
126
-     *  this error is thown.
127
-     */
128
-    class DeSerializeTypeMismatch : public std::runtime_error {
129
-        public:
130
-            DeSerializeTypeMismatch(const std::string& expected, const std::string& got);
131
-
132
-    };
133
-
134
-    /** If an assignment is made that is out of bounts, throw this.
135
-     */
136
-    class AssignmentOutOfBounds : public std::runtime_error {
137
-        public:
138
-            /** Throw when an assignment is out of bounds.
139
-             *  @param[in] ptr is a pointer to the class throwing the exception.
140
-             */
141
-            AssignmentOutOfBounds(LemmaObject *ptr);
142
-    };
143
-
144
-    /** If a pointer to a class is requested, but it is NULL valued, throw this
145
-     */
146
-    class RequestToReturnNullPointer : public std::runtime_error {
147
-        public:
148
-            /** Thrown when the pointer is NULL
149
-             *  @param[in] ptr is a pointer to the class throwing the exception.
150
-             */
151
-            RequestToReturnNullPointer(LemmaObject *ptr);
152
-    };
153
-
154
-    /** If an error in opening a .mat file is encountered, throw this.
155
-     */
156
-    class MatFileCannotBeOpened : public std::runtime_error {
157
-        /** thown when a mat file fails to be opened.
158
-         */
159
-            public: MatFileCannotBeOpened();
160
-    };
161
-
162
-	/** Generic file I/O error. */
163
-	class GenericFileIOError : public std::runtime_error {
164
-			public: GenericFileIOError(LemmaObject *ptr, const std::string &filename);
165
-	};
166
-
167
-}
168
-#endif // __LEMMAOBJECT_H

+ 0
- 216
LemmaCore/include/RectilinearGrid.h View File

@@ -1,216 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     10/28/2010
11
-  @version  $Id: rectilineargrid.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#ifndef  RECTILINEARGRID_INC
15
-#define  RECTILINEARGRID_INC
16
-
17
-#include "Grid.h"
18
-
19
-namespace Lemma {
20
-
21
-    // ===================================================================
22
-    //  Class:  RectilinearGrid
23
-    /**
24
-      @class
25
-      \ingroup LemmaCore
26
-      \brief   Impliments a rectilinear grid.
27
-      \details A rectilinear grid can vary regularily in space but must be
28
-               constant variation across each dimension. In this way three
29
-               vectors can define the entire grid, and each cell is right
30
-               aligned with all its neighbours.
31
-     */
32
-    // ===================================================================
33
-    class RectilinearGrid : public Grid {
34
-
35
-        friend std::ostream &operator<<(std::ostream &stream,
36
-			const RectilinearGrid &ob);
37
-
38
-        public:
39
-
40
-            // ====================  LIFECYCLE     =======================
41
-
42
-            /**
43
-             *  Factory method for generating concrete class.
44
-             *  @return a std::shared_ptr of type RectilinearGrid
45
-             */
46
-            static std::shared_ptr<RectilinearGrid> NewSP();
47
-
48
-
49
-            /**
50
-             *  Uses YAML to serialize this object.
51
-             *  @return a YAML::Node
52
-             */
53
-            YAML::Node Serialize() const;
54
-
55
-            /**
56
-             *   Constructs an object from a YAML::Node.
57
-             */
58
-            static std::shared_ptr< RectilinearGrid > DeSerialize(const YAML::Node& node);
59
-
60
-            // ====================  OPERATORS     =======================
61
-
62
-            // ====================  OPERATIONS    =======================
63
-
64
-            /**
65
-             *  Sets the dimensions in x, y and z
66
-             *  @param[in] nx is the number of cells in x
67
-             *  @param[in] ny is the number of cells in y
68
-             *  @param[in] nz is the number of cells in z
69
-             */
70
-            void SetDimensions (const int &nx, const int &ny, const int &nz);
71
-
72
-            /**
73
-             *  Sets the offset in x, y and z. This sets the corner position of the top SW corner.
74
-             *  @param[in] ox is the number of cells in x
75
-             *  @param[in] oy is the number of cells in y
76
-             *  @param[in] oz is the number of cells in z
77
-             */
78
-            void SetOffset (const Real &ox, const Real &oy, const Real &oz);
79
-
80
-            /**
81
-             *  Sets the spacing in x, y and z
82
-             *  @param[in] dx is a Vector of cell spacing in x, must be same
83
-             *  size ad nx
84
-             *  @param[in] dy is a Vector of cell spacing in x, must be same
85
-             *  size ad ny
86
-             *  @param[in] dz is a Vector of cell spacing in x, must be same
87
-             *  size ad nz
88
-             */
89
-            void SetSpacing (const VectorXr &dx, const VectorXr &dy,
90
-                const VectorXr &dz);
91
-
92
-
93
-            // ====================  ACCESS        =======================
94
-
95
-            /** Returns the number of cells in x
96
-             *  @return number of cells in x
97
-             */
98
-            int GetNx();
99
-
100
-            /** Returns the number of cells in y
101
-             *  @return number of cells in y
102
-             */
103
-            int GetNy();
104
-
105
-            /** Returns the number of cells in z
106
-             *  @return number of cells in z
107
-             */
108
-            int GetNz();
109
-
110
-            /** Returns the offset of cells in x
111
-             *  @return offset of cells in x
112
-             */
113
-            Real GetOx();
114
-
115
-            /** Returns the number of cells in y
116
-             *  @return number of cells in y
117
-             */
118
-            Real GetOy();
119
-
120
-            /** Returns the offset of cells in z
121
-             *  @return offset of cells in z
122
-             */
123
-            Real GetOz();
124
-
125
-            /** Returns Spacing Vector
126
-             *  @return dx
127
-             */
128
-            VectorXr GetDx();
129
-
130
-            /** Returns a spacing
131
-             *  @return dx[ix]
132
-             */
133
-            Real GetDx(const int& ix);
134
-
135
-            /** Returns Spacing Vector
136
-             *  @return dy
137
-             */
138
-            VectorXr GetDy();
139
-
140
-            /** Returns a spacing
141
-             *  @return dy[iy]
142
-             */
143
-            Real GetDy(const int& iy);
144
-
145
-            /** Returns Spacing Vector
146
-             *  @return dz
147
-             */
148
-            VectorXr GetDz();
149
-
150
-            /** Returns Spacing Vector
151
-             *  @return dz[iz]
152
-             */
153
-            Real GetDz(const int& iz);
154
-
155
-            // ====================  INQUIRY       =======================
156
-
157
-            /** Returns the name of the underlying class, similiar to Python's type */
158
-            virtual inline std::string GetName() const {
159
-                return this->CName;
160
-            }
161
-
162
-        protected:
163
-
164
-            // ====================  LIFECYCLE     =======================
165
-
166
-            /** Default protected constructor. */
167
-            RectilinearGrid ( );
168
-
169
-            /** Protected DeDerializing constructor, use factory DeSerialize  method*/
170
-            RectilinearGrid (const YAML::Node& node);
171
-
172
-            /** Default protected constructor. */
173
-            ~RectilinearGrid ();
174
-
175
-            // ====================  DATA MEMBERS  =========================
176
-
177
-            /// Number of cells in the x dimension
178
-            int nx;
179
-
180
-            /// Number of cells in the y dimension
181
-            int ny;
182
-
183
-            /// Number of cells in the z dimension
184
-            int nz;
185
-
186
-            /// Grid offset in x dimension
187
-            Real ox;
188
-
189
-            /// Grid offset in y dimension
190
-            Real oy;
191
-
192
-            /// Grid offset in z dimension
193
-            Real oz;
194
-
195
-            /// Cell spacing in the x dimension
196
-            VectorXr dx;
197
-
198
-            /// Cell spacing in the y dimension
199
-            VectorXr dy;
200
-
201
-            /// Cell spacing in the z dimension
202
-            VectorXr dz;
203
-
204
-        private:
205
-
206
-            /** ASCII string representation of the class name */
207
-            static constexpr auto CName = "RectilinearGrid";
208
-
209
-    }; // -----  end of class  RectilinearGrid  -----
210
-
211
-}		// -----  end of Lemma  name  -----
212
-
213
-#endif   // ----- #ifndef RECTILINEARGRID_INC  -----
214
-
215
-/* vim: set tabstop=4 expandtab: */
216
-/* vim: set filetype=cpp: */

+ 0
- 110
LemmaCore/include/RectilinearGridReader.h View File

@@ -1,110 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
- */
7
-
8
-/**
9
-  @file
10
-  @date      09/23/2013 11:05:11 AM
11
-  @version   $Id$
12
-  @author    Trevor Irons (ti)
13
-  @email     Trevor.Irons@xri-geo.com
14
-  @copyright Copyright (c) 2013, XRI Geophysics, LLC
15
-  @copyright Copyright (c) 2013, Trevor Irons
16
- **/
17
-
18
-#ifndef  RECTILINEARGRIDREADER_INC
19
-#define  RECTILINEARGRIDREADER_INC
20
-
21
-#include "GridReader.h"
22
-#include "RectilinearGrid.h"
23
-#include "ASCIIParser.h"
24
-
25
-namespace Lemma {
26
-
27
-    /**
28
-      @class
29
-      \ingroup LemmaCore
30
-      \brief   Base Class for rectilinear grid reader data files
31
-      \details
32
-     \todo this set of classes is deprecated, use serialize methods!
33
-     */
34
-    class RectilinearGridReader : public GridReader {
35
-
36
-        friend std::ostream &operator<<(std::ostream &stream,
37
-                const RectilinearGridReader &ob);
38
-
39
-        public:
40
-
41
-            // ====================  LIFECYCLE     =======================
42
-
43
-            /**
44
-             *  Factory method for generating concrete class.
45
-             *  @return a std::shared_ptr of type RectilinearGridReader
46
-             */
47
-            static std::shared_ptr< RectilinearGridReader > NewSP();
48
-
49
-            // ====================  OPERATORS     =======================
50
-
51
-            // ====================  OPERATIONS    =======================
52
-
53
-            /**
54
-            Reads a .mod file, a simple representation of the grid. These files
55
-            have the following format:
56
-            @verbatim
57
-            nx ny nz  // number of cells in x, y, and z
58
-            ox oy oz  // grid offset of top SW corner
59
-
60
-            hx[0] hx[1] ... hx[nx-1]  // grid cell spacing in x, from 0 to nx-1
61
-            hy[0] hy[1] ... hy[ny-1]  // grid cell spacing in y, from 0 to ny-1
62
-            hz[0] hz[1] ... hz[nz-1]  // grid cell spacing in z, from 0 to nz-1
63
-
64
-            // c++ style (//) comments are allowed anywhere, c-style are not
65
-            @endverbatim
66
-            */
67
-            void ReadASCIIGridFile( const std::string& name );
68
-
69
-            // ====================  ACCESS        =======================
70
-            /**
71
-             * Accessor method for the underlying RectilinearGrid class constructed
72
-             * from the input file.
73
-             */
74
-            std::shared_ptr<Grid> GetGrid();
75
-
76
-            // ====================  INQUIRY       =======================
77
-
78
-            /** Returns the name of the underlying class, similiar to Python's type */
79
-            virtual inline std::string GetName() const {
80
-                return this->CName;
81
-            }
82
-
83
-        protected:
84
-
85
-            // ====================  LIFECYCLE     =======================
86
-
87
-            /** Default protected constructor, use New */
88
-            RectilinearGridReader ( );
89
-
90
-            /** Default protected constructor, use Delete */
91
-            ~RectilinearGridReader ();
92
-
93
-        private:
94
-
95
-            // ====================  DATA MEMBERS  =========================
96
-
97
-            /** ASCII string representation of the class name */
98
-            static constexpr auto CName = "RectilinearGridReader";
99
-
100
-            /** Object holding constructed Grid */
101
-            std::shared_ptr<RectilinearGrid> rGrid;
102
-
103
-            /** Performs actual file parsing */
104
-            std::shared_ptr<ASCIIParser> Parser;
105
-
106
-    }; // -----  end of class  RectilinearGridReader  -----
107
-
108
-}		// -----  end of Lemma  name  -----
109
-
110
-#endif   // ----- #ifndef RECTILINEARGRIDREADER_INC  -----

+ 0
- 124
LemmaCore/include/RectilinearGridVTKExporter.h View File

@@ -1,124 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      09/25/2013 08:20:01 AM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2013, XRI Geophysics, LLC
17
- * @copyright Copyright (c) 2013, Trevor Irons
18
- */
19
-
20
-
21
-#ifndef  RECTILINEARGRIDVTKEXPORTER_INC
22
-#define  RECTILINEARGRIDVTKEXPORTER_INC
23
-
24
-#ifdef  LEMMAUSEVTK
25
-
26
-#include "LemmaObject.h"
27
-#include "RectilinearGrid.h"
28
-
29
-#include <vtkSmartPointer.h>
30
-#include "vtkXMLRectilinearGridWriter.h"
31
-#include "vtkRectilinearGrid.h"
32
-#include "vtkDoubleArray.h"
33
-#include "vtkFieldData.h"
34
-#include "vtkCellData.h"
35
-
36
-namespace Lemma {
37
-
38
-/**
39
-  \ingroup LemmaCore
40
-  \brief   Exports a LemmaRectilinearGrid into a VTKRectilinearGrid.
41
-  \details Results can then be dumped to a VTK file or used directly.
42
- */
43
-class RectilinearGridVTKExporter : public LemmaObject {
44
-
45
-    friend std::ostream &operator<<(std::ostream &stream,
46
-            const RectilinearGridVTKExporter &ob);
47
-
48
-    public:
49
-
50
-    // ====================  LIFECYCLE     =======================
51
-
52
-    /**
53
-     * @copybrief LemmaObject::New()
54
-     * @copydetails LemmaObject::New()
55
-     */
56
-    static RectilinearGridVTKExporter* New();
57
-
58
-    /**
59
-     *  Factory method for generating concrete class.
60
-     *  @return a std::shared_ptr of type RectilinearGridVTKExporter
61
-     */
62
-    static std::shared_ptr< RectilinearGridVTKExporter > NewSP();
63
-
64
-    // ====================  OPERATORS     =======================
65
-
66
-    // ====================  OPERATIONS    =======================
67
-
68
-    // ====================  ACCESS        =======================
69
-    /**
70
-     * Sets the Grid to be exported
71
-     */
72
-    void SetGrid( std::shared_ptr<RectilinearGrid> Grid);
73
-
74
-    // ====================  INQUIRY       =======================
75
-
76
-    /**
77
-     *  @return Returns a pointer to a vtkRectilinearGrid containing same information as the Lemma Grid.
78
-     */
79
-    vtkSmartPointer<vtkRectilinearGrid>  GetVTKGrid();
80
-
81
-    /**
82
-     *  Writes the exported VTKGrid out to a .vtr XML file
83
-     *  @param[in] name is the filename to write to. The .vtr extension will be added
84
-     */
85
-    void WriteVTKGrid( const std::string& name );
86
-
87
-    /** Returns the name of the underlying class, similiar to Python's type */
88
-    virtual inline std::string GetName() const {
89
-        return this->CName;
90
-    }
91
-
92
-    protected:
93
-
94
-    // ====================  LIFECYCLE     =======================
95
-
96
-    /** Default protected constructor, use New */
97
-    RectilinearGridVTKExporter ( );
98
-
99
-    /** Default protected destructor, use Delete */
100
-    ~RectilinearGridVTKExporter ();
101
-
102
-    private:
103
-
104
-    /** ASCII string representation of the class name */
105
-    static constexpr auto CName = "RectilinearGridVTKExporter";
106
-
107
-    void BuildVTKRectilinearGrid();
108
-
109
-    // ====================  DATA MEMBERS  =========================
110
-
111
-    /** The Grid to convert from */
112
-    std::shared_ptr<RectilinearGrid>    Grid;
113
-
114
-    /** The Grid to convert to */
115
-    vtkSmartPointer<vtkRectilinearGrid> VTKGrid;
116
-
117
-}; // -----  end of class  RectilinearGridVTKExporter  -----
118
-
119
-}		// -----  end of Lemma  name  -----
120
-
121
-#endif     // -----  not LEMMAUSEVTK  -----
122
-
123
-#endif   // ----- #ifndef RECTILINEARGRIDVTKEXPORTER_INC  -----
124
-

+ 0
- 127
LemmaCore/include/WindowFilter.h View File

@@ -1,127 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     07/20/2010
11
-  @version  $Id: windowfilter.h 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#ifndef  WINDOWFILTER_INC
15
-#define  WINDOWFILTER_INC
16
-#include "Filter.h"
17
-
18
-namespace Lemma {
19
-    /** Types of filter window that are supported.
20
-     */
21
-    enum WINDOWTYPE { HAMMING, /*!< A hamming window */
22
-                      HANNING, /*!< A hanning window */
23
-                      RECTANGULAR /*!< Rectangular window */
24
-                    };
25
-
26
-    // ===================================================================
27
-    //  Class:  WindowFilter
28
-    /**
29
-      @class   WindowFilter
30
-      \ingroup LemmaCore
31
-      \brief   Fourier domain window filter.
32
-      \details Current types are Hamming and Hanning. Others to be added.
33
-     */
34
-    // ===================================================================
35
-    class WindowFilter : public Filter {
36
-
37
-        public:
38
-
39
-            // ====================  LIFECYCLE     =======================
40
-
41
-           /**
42
-            *  Factory method for generating concrete class.
43
-            *  @return a std::shared_ptr of type WindowFilter
44
-            */
45
-            static std::shared_ptr< WindowFilter > NewSP();
46
-
47
-            // ====================  OPERATORS     =======================
48
-
49
-            // ====================  OPERATIONS    =======================
50
-
51
-            /// Sets the bandwith of the window.
52
-            /// @param[in] width Bandwidth in Hz
53
-            void SetBandwidth(const Real& width);
54
-
55
-            /// Sets the sampling rate of an input time domain signal.
56
-            /// @param[in] dt is the sampling rate, in seconds.
57
-            void SetSamplingInterval(const Real& dt);
58
-
59
-            /// Specifies the length of the time series to apply filter to.
60
-            void SetNumberOfSamples(const int& nt);
61
-
62
-            /// Sets the type of window to compute.
63
-            void SetWindowType(const WINDOWTYPE& type);
64
-
65
-            /** Returns the number of frequency bins for whole data record.
66
-             *  this is different then the length of the filter. This is
67
-             *  simply the length of the real to complex FFT, or
68
-             *  Nw = Nt%2 ? (Nt-1)/2+1 : (Nt)/2+1;
69
-             *  @return the number of frequency bins.
70
-             */
71
-            int GetNumberOfFrequencyBins();
72
-
73
-            // ====================  ACCESS        =======================
74
-
75
-            // ====================  INQUIRY       =======================
76
-
77
-            /// Returns a Vector of the filter coefficients.
78
-            VectorXr GetFilterCoefficients( );
79
-
80
-            /** Returns the name of the underlying class, similiar to Python's type */
81
-            virtual inline std::string GetName() const {
82
-                return this->CName;
83
-            }
84
-
85
-        protected:
86
-
87
-            // ====================  LIFECYCLE     =======================
88
-
89
-            /// Default protected constructor.
90
-            WindowFilter ( );
91
-
92
-            /// Default protected constructor.
93
-            ~WindowFilter ( );
94
-
95
-            // ====================  DATA MEMBERS  =========================
96
-
97
-            /// Width of the window
98
-            int         Width;
99
-
100
-            /// Length of time series
101
-            int         Nt;
102
-
103
-            /// Length of the frequency series representation
104
-            int         Nw;
105
-
106
-            /// Sampling rate of a time domain signal
107
-            Real        SamplingRate;
108
-
109
-            /// Bandwith of filter
110
-            Real        Bandwidth;
111
-
112
-            /// The filter coefficients
113
-            VectorXr    Coefficients;
114
-
115
-            /// The type of filter to use
116
-            WINDOWTYPE  Type;
117
-
118
-        private:
119
-
120
-        /** ASCII string representation of the class name */
121
-        static constexpr auto CName = "WindowFilter";
122
-
123
-    }; // -----  end of class  WindowFilter  -----
124
-
125
-}       // -----  end of Lemma  name  -----
126
-
127
-#endif   // ----- #ifndef WINDOWFILTER_INC  -----

+ 0
- 24
LemmaCore/include/banner.h View File

@@ -1,24 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API
2
- */
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
-  @author   M. Andy Kass
11
-  @date     05/03/2010
12
-  @version  $Id: banner.h 87 2013-09-05 22:44:05Z tirons $
13
- **/
14
-
15
-#ifndef __BANNER_H
16
-#define __BANNER_H
17
-#include <iostream>
18
-#include <ostream>
19
-void banner(const std::string &name, const std::string &version,
20
-		const std::string &usage);
21
-#endif
22
-
23
-/* vim: set tabstop=4 expandtab: */
24
-/* vim: set filetype=cpp: */

+ 0
- 288
LemmaCore/include/helper.h View File

@@ -1,288 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      10/02/2014 02:49:55 PM
13
- * @version   $Id$
14
- * @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
18
- */
19
-
20
-#pragma once
21
-
22
-#ifndef  HELPER_INC
23
-#define  HELPER_INC
24
-
25
-#include "lemma.h"
26
-#include "yaml-cpp/yaml.h"
27
-
28
-namespace Lemma {
29
-
30
-/** \addtogroup LemmaCore
31
- * @{
32
- */
33
-
34
-    /**
35
-     *  Convenience function for string conversion
36
-     *  @param[in] t input value to be converted to string
37
-     *  @return string representation of input value
38
-     */
39
-    template <class T>
40
-    inline std::string to_string (const T& t) {
41
-        std::stringstream ss;
42
-        ss << t;
43
-        return ss.str();
44
-    }
45
-
46
-    /// convert enums to string saves repeated code useful for YAML serializing
47
-    std::string enum2String(const FREQUENCYUNITS& Units);
48
-    /// convert enums to string saves repeated code useful for YAML serializing
49
-    std::string enum2String(const TIMEUNITS& Units);
50
-    /// convert enums to string saves repeated code useful for YAML serializing
51
-    std::string enum2String(const MAGUNITS& Units);
52
-    /// convert enums to string saves repeated code useful for YAML serializing
53
-    std::string enum2String(const TEMPUNITS& Units);
54
-    /// convert enums to string saves repeated code useful for YAML serializing
55
-    std::string enum2String(const FEMCOILORIENTATION& Units);
56
-    /// convert enums to string saves repeated code useful for YAML serializing
57
-    std::string enum2String(const ORIENTATION& Units);
58
-    /// convert enums to string saves repeated code useful for YAML serializing
59
-    std::string enum2String(const FIELDCOMPONENT& Comp);
60
-    /// convert enums to string saves repeated code useful for YAML serializing
61
-    std::string enum2String(const HANKELTRANSFORMTYPE& Htype);
62
-    /// convert enums to string saves repeated code useful for YAML serializing
63
-    std::string enum2String(const FIELDCALCULATIONS& Htype);
64
-
65
-    // other way around is a template, where template argument lets us know
66
-    // which specialisation to use.
67
-    template <typename T>
68
-    T string2Enum( const std::string& str );
69
-
70
-    // Handy little class that indents a stream.
71
-    // Based on solution provided here, todo may need to add to some managing class which keeps
72
-    // track of nesting levels? But perhaps not. A Lemma class will contain pointers to other Lemma
73
-    // classes. But those are not specifically listed out.
74
-    // http://stackoverflow.com/questions/9599807/how-to-add-indention-to-the-stream-operator
75
-    class IndentingOStreambuf : public std::streambuf {
76
-        std::streambuf*     myDest;
77
-        bool                myIsAtStartOfLine;
78
-        std::string         myIndent;
79
-        std::ostream*       myOwner;
80
-    protected:
81
-        virtual int         overflow( int ch )
82
-        {
83
-            if ( myIsAtStartOfLine && ch != '\n' ) {
84
-                myDest->sputn( myIndent.data(), myIndent.size() );
85
-            }
86
-            myIsAtStartOfLine = ch == '\n';
87
-            return myDest->sputc( ch );
88
-        }
89
-    public:
90
-        explicit            IndentingOStreambuf(
91
-                                std::streambuf* dest, int indent = 4 )
92
-            : myDest( dest )
93
-            , myIsAtStartOfLine( true )
94
-            , myIndent( indent, ' ' )
95
-            , myOwner( NULL )
96
-        {
97
-        }
98
-        explicit            IndentingOStreambuf(
99
-                                std::ostream& dest, int indent = 4 )
100
-            : myDest( dest.rdbuf() )
101
-            , myIsAtStartOfLine( true )
102
-            , myIndent( indent, ' ' )
103
-            , myOwner( &dest )
104
-        {
105
-            myOwner->rdbuf( this );
106
-        }
107
-        virtual             ~IndentingOStreambuf()
108
-        {
109
-            if ( myOwner != NULL ) {
110
-                myOwner->rdbuf( myDest );
111
-            }
112
-        }
113
-    };
114
-
115
-/** @}*/
116
-
117
-} // end namespace Lemma
118
-
119
-///////////////////////////////////////////////////////
120
-// YAML Serializing helper functions. Can we move this into helper.h
121
-namespace YAML {
122
-
123
-template<>
124
-struct convert<Lemma::Complex> {
125
-  static Node encode(const Lemma::Complex& rhs) {
126
-    Node node;
127
-    node["real"] = rhs.real();
128
-    node["imag"] = rhs.imag();
129
-
130
-    // No labels
131
-    //node.push_back(rhs.real());
132
-    //node.push_back(rhs.imag());
133
-
134
-    node.SetTag( "Complex" ); // too verbose?
135
-    return node;
136
-  }
137
-
138
-  static bool decode(const Node& node, Lemma::Complex& rhs) {
139
-    // Disabled due to overly verbose output. Just believe...
140
-    if( node.Tag() != "Complex" ) {
141
-        return false;
142
-    }
143
-    rhs = Lemma::Complex( node["real"].as<Lemma::Real>(), node["imag"].as<Lemma::Real>()  );
144
-    // no label style
145
-    //rhs = Lemma::Complex( node[0].as<Lemma::Real>(), node[1].as<Lemma::Real>()  );
146
-    return true;
147
-  }
148
-
149
-};
150
-
151
-template<>
152
-struct convert<Lemma::Vector3Xr> {
153
-  static Node encode(const Lemma::Vector3Xr& rhs) {
154
-    Node node;
155
-    node["size"] = rhs.cols();
156
-    //node["rows"] = rhs.rows(); // == 3
157
-    for (int ic=0; ic<rhs.cols(); ++ic) {
158
-        node[ic].push_back( rhs(0, ic) );
159
-        node[ic].push_back( rhs(1, ic) );
160
-        node[ic].push_back( rhs(2, ic) );
161
-    }
162
-    node.SetTag( "Vector3Xr" );
163
-    return node;
164
-  }
165
-
166
-  static bool decode(const Node& node, Lemma::Vector3Xr& rhs) {
167
-    if( node.Tag() != "Vector3Xr" ) {
168
-        return false;
169
-    }
170
-    rhs.resize( Eigen::NoChange, node["size"].as<int>() );
171
-    for (unsigned int ic=0; ic<node.size(); ++ic) {
172
-        int ir=0;
173
-        for(YAML::const_iterator it=node[ic].begin();it!=node[ic].end();++it) {
174
-            rhs(ir, ic) = it->as<Lemma::Real>();
175
-            ++ir;
176
-        }
177
-    }
178
-    return true;
179
-  }
180
-};
181
-
182
-template<>
183
-struct convert<Lemma::VectorXr> {
184
-  static Node encode(const Lemma::VectorXr& rhs) {
185
-    Node node;
186
-    node["size"] = rhs.size();
187
-    for (int ic=0; ic<rhs.size(); ++ic) {
188
-        node["data"].push_back( rhs(ic) );
189
-    }
190
-    node.SetTag( "VectorXr" );
191
-    return node;
192
-  }
193
-
194
-  static bool decode(const Node& node, Lemma::VectorXr& rhs) {
195
-    if( node.Tag() != "VectorXr" ) {
196
-        return false;
197
-    }
198
-    rhs.resize( node["size"].as<int>() );
199
-    int ir=0;
200
-    for(YAML::const_iterator it=node["data"].begin(); it!=node["data"].end(); ++it) {
201
-        rhs(ir) = it->as<Lemma::Real>();
202
-        ++ir;
203
-    }
204
-    return true;
205
-  }
206
-};
207
-
208
-template<>
209
-struct convert<Lemma::VectorXcr> {
210
-  static Node encode(const Lemma::VectorXcr& rhs) {
211
-    Node node;
212
-    node["size"] = rhs.size();
213
-    for (int ic=0; ic<rhs.size(); ++ic) {
214
-        node["data"].push_back( rhs(ic) );
215
-    }
216
-    node.SetTag( "VectorXcr" );
217
-    return node;
218
-  }
219
-
220
-  static bool decode(const Node& node, Lemma::VectorXcr& rhs) {
221
-    if( node.Tag() != "VectorXcr" ) {
222
-        return false;
223
-    }
224
-    rhs.resize( node["size"].as<int>() );
225
-    int ir=0;
226
-    for(YAML::const_iterator it=node["data"].begin(); it!=node["data"].end(); ++it) {
227
-        rhs(ir) = it->as<Lemma::Complex>();
228
-        ++ir;
229
-    }
230
-    return true;
231
-  }
232
-};
233
-
234
-
235
-template<>
236
-struct convert<Lemma::VectorXi> {
237
-  static Node encode(const Lemma::VectorXi& rhs) {
238
-    Node node;
239
-    node["size"] = rhs.size();
240
-    for (int ic=0; ic<rhs.size(); ++ic) {
241
-        node["data"].push_back( rhs(ic) );
242
-    }
243
-    node.SetTag( "VectorXi" );
244
-    return node;
245
-  }
246
-
247
-  static bool decode(const Node& node, Lemma::VectorXi& rhs) {
248
-    if( node.Tag() != "VectorXi" ) {
249
-        return false;
250
-    }
251
-    rhs.resize( node["size"].as<int>() );
252
-    int ir=0;
253
-    for(YAML::const_iterator it=node["data"].begin(); it!=node["data"].end(); ++it) {
254
-        rhs(ir) = it->as<int>();
255
-        ++ir;
256
-    }
257
-    return true;
258
-  }
259
-};
260
-
261
-template<>
262
-struct convert<Lemma::Vector3r> {
263
-  static Node encode(const Lemma::Vector3r& rhs) {
264
-    Node node;
265
-    for (int ic=0; ic<rhs.size(); ++ic) {
266
-        node[0].push_back( rhs(ic) );
267
-    }
268
-    node.SetTag( "Vector3r" );
269
-    return node;
270
-  }
271
-
272
-  static bool decode(const Node& node, Lemma::Vector3r& rhs) {
273
-    if( node.Tag() != "Vector3r" ) {
274
-        return false;
275
-    }
276
-    int ir=0;
277
-    for(YAML::const_iterator it=node[0].begin(); it!=node[0].end(); ++it) {
278
-        rhs(ir) = it->as<Lemma::Real>();
279
-        ++ir;
280
-    }
281
-    return true;
282
-  }
283
-};
284
-
285
-}
286
-
287
-#endif   // ----- #ifndef HELPER_INC  -----
288
-

+ 0
- 333
LemmaCore/include/lemma.h View File

@@ -1,333 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     06/19/2009 09:12:20 AM  The Birth of Lemma!
11
-  @version  $Id: lemma.h 203 2015-01-09 21:19:04Z tirons $
12
- **/
13
-
14
-/** \mainpage Lemma is an ElectroMagnetics Modelling API
15
-    \image html lemma.png
16
-
17
-    \authors Trevor Irons and M. Andrew Kass and others
18
-
19
-    Lemma is a recursive acronym that stands for <B>L</B>emma is an
20
-    <B>E</B>lectro<B>M</B>agnetics <B>M</B>odelling <B>A</B>PI.
21
-    Lemma is a cross-platform library delivering an expressive API that
22
-    can be used to easily create versatile programs.
23
-    We are building a powerful, flexible,
24
-    expresive framework that allows for the straightforward creation of
25
-    geophysical EM applications. Lemma is not itself a program, instead
26
-    it is a collection of building blocks to make applications.
27
-    We chose this name because:
28
-
29
-    - In mathematics a Lemma is a proven proposition which is used as a
30
-    stepping stone to a larger result rather than as a statement in-and-of
31
-    itself.
32
-    - In addition to the electromagnetic modelling, some other facilities are
33
-    provided such as numerical optimization and inversion capabilities. These
34
-    tools are also considered stepping stones to final products.
35
-
36
-    We feel that this is a partucularily approprate name, as Lemma's
37
-    API can be leveraged create powerful applications such as forward
38
-    modelling and inverting frequency and time-domain
39
-    surveys of arbitrary survey design, SNMR surveys, CSAMT and more.
40
-
41
-    \section Motivation
42
-    Why another Geophysical EM project? For starters, there
43
-    aren't that many quality open source packages out there. Those that do
44
-    exist are generally specialized to perform a single task and extending
45
-    them is a major undertaking. Lemma's approach is much different, by
46
-    providing a set of general tools users can easily assemble applications
47
-    that suite their needs.
48
-
49
-    While most geophysical EM modeling packages are concerned with forward
50
-    modeling <B>DATA</B> between specific transmitters and receivers located
51
-    on the surface of the earth; Lemma is fundamentally concerned with
52
-    modelling <B>FIELDS</B> due to sources, the field values can be calculated
53
-    everywhere within the domain. This allows for solving multiphysics EM
54
-    problems. Tradional EM data may be forward modelled using the Lemma::Instrument
55
-    classes.
56
-
57
-    \section Capabilities Capabilities
58
-    In the long term, we have many goals for this software project. Due to its
59
-    design, Lemma can be built upon and extended easily. The initial aim is to
60
-    provide flexible 1D and 3D EM modelling in the time and frequency domains.
61
-    The project is still in beta, but we have made a lot of progress already.
62
-    We will release our first non-beta release as soon as the following are
63
-    supported.
64
-
65
-    \subsection FDM Frequency-domain forward modelling
66
-    Lemma was initially called EMMODFD: Electromagnetic Modelling in the Frequency
67
-    Domain. As such this is the most mature area of Lemma.
68
-
69
-    \par 1D
70
-    Frequency domain solutions to electrical and magnetic dipoles can be computed
71
-    quasi-analytically in 1D. Calculations can be made in or above the layered
72
-    media, and complex electrical conductivity and magnetic susceptibility are
73
-    supported according to the Cole-Cole model. Sources may be embdedded in the
74
-    media or in the resisitive air layer. Lemma can also can compute fields due
75
-    to arbitrarily shaped ungrounded wire loops, topography of the loops is also
76
-    supported. Two separate approaches to solving the Hankel transform, one
77
-    based on Anderson's digitial filtering technique, and another based on Gaussian
78
-    quadrature.
79
-
80
-    \par 3D
81
-    A fast 3D solver that can modify the 1D results based
82
-    on arbitrary electrical conductivity model is nearing completion.
83
-
84
-    \par future work
85
-    We are also planning on supporting grounded wires in the near future.
86
-
87
-    \subsection TDM Time-domain forward modelling
88
-	A 1D time-domain solution has been implemented that utilises both a
89
-	dipole source as well as a wire loop.  Currently, only one receiver is
90
-	modelled at a time, but will be generalised.  In addition, utilities
91
-	to read in data files for modelling have been implemented.
92
-    We would like to offer 3D time domain support, but this will not be
93
-    provided before our first stable release.
94
-
95
-    \subsection DataFormats Data Formats
96
-    The EM community is plagued with myriad data formats. Often each equiptment
97
-    manufacturer provides their own data format and interoperability is a
98
-    constant struggle. We are working on a flexible data format based on the XML
99
-    format that can be adapted to many types of data. The template for this
100
-    format will be publically released and we hope it catches on in the community.
101
-    At the least, it will provide a mechanism to compare datasets and datatypes
102
-    within Lemma.
103
-
104
-    \section Modules Modules
105
-    Due to Lemma's design, it is easy to extend the platform. In some cases this
106
-    extension results in adding functionality that is not directly related to
107
-    ElectroMagnetics. The following modules utilise parts of Lemma to provide
108
-    their functionality.
109
-
110
-    \subsection Merlin Merlin.
111
-    This module provides nuclear magnetic resonance functionality.
112
-
113
-
114
-    \section Tutorials
115
-        - \ref Tutorial - Basic intruduction to Lemma, including aquiring and
116
-          compiling the code, class structure, and building your own
117
-          applications.
118
-        - \ref Extending Tutorial on how to extend Lemma.
119
-
120
-
121
-    \section Development Development and design
122
-    Ths package is primarily being developed by the Center for Gravity,
123
-    Electrical, and Magnetic Studies (CGEM) at the Colorado School of Mines (CSM), the United
124
-    States Geological Survey (USGS), and Broken Spoke Development, LLC. It draws on work by
125
-    many others including Ki Ha Lee, and Walt Anderson. All new work and
126
-    interfaces are written entirely in C++. Several small external projects are
127
-    included, which are written in standard C, and FORTRAN 77. We adapt a
128
-    modern, test driven, object oriented, C++ framework.
129
-
130
-    \section Legalities
131
-
132
-    \subsection Copyrights
133
-    The following copyrights apply to the source.
134
-    Most of the code was developed either by Trevor
135
-    Copyright (C) 2008-2010 Trevor Irons <tirons@mines.edu> or
136
-    M. Andrew Kass Copyright (C) 2010 <mkass@numericalgeo.com>.
137
-
138
-    The 1D EM solver was derived (but updated heavily) from a fortran
139
-    programme written by Ki Ha Lee in 1984. We have communicated with Ki Ha,
140
-    and he assured us that this code is in the public domian.
141
-
142
-    A Gaussian quadrature hankel transform originally written by Alan Chave was
143
-    ported to C++. This code is in the public domain, and was published in Geophysics.
144
-
145
-    A digital filtering approach to the Hankel transform written by Walt
146
-    Anderson was also rewritten for Lemma. The origional fortran code is also in
147
-    the public domain. Using this Hankel transform works
148
-    arround the copyright issue mentioned above, but may not produce accurate
149
-    results for high frequencies.
150
-
151
-    Please note that Ki Ha Lee and Walt Anderson had no part in this work, and
152
-    the above should not be interpreted as any sort of endorsement by those
153
-    parties.
154
-
155
-    \subsection License
156
-
157
-    This Source Code Form is subject to the terms of the Mozilla Public
158
-    License, v. 2.0. If a copy of the MPL was not distributed with this
159
-    file, You can obtain one at http://mozilla.org/MPL/2.0/.
160
-
161
-    \section Contributing Suggestions and contributions
162
-        We welcome contributions and suggestions. Feel free to email the development
163
-        team at info@lemmasoftware.org.
164
-        Under the terms of the MPL, if you modify a Lemma file, you are obligated to
165
-        share those contributions back with the community.
166
-
167
-    \section Useful Useful links
168
-        - Home page https://lemmasoftware.org
169
-        - SVN repository https://svn.lemmasoftware.org
170
-        - Broken Spoke Develpment http://numericalgeo.com
171
-        - CGEM at the Coloroado School of Mines http://geophysics.mines.edu/cgem/
172
-**/
173
-
174
-#pragma once
175
-
176
-#ifndef __LEMMA_H
177
-#define __LEMMA_H
178
-
179
-    // Include some basic stuff that will always be needed
180
-    #include <iostream>
181
-    #include <iomanip>
182
-    #include <complex>
183
-    #include <fstream>
184
-    #include <string>
185
-    #include <vector>
186
-    #include <stdexcept>
187
-    #include <sstream>
188
-
189
-    #include <Eigen/Core>
190
-    #include <cstddef>
191
-    #include <Eigen/StdVector>
192
-    #include <Eigen/Sparse>
193
-    #include <unsupported/Eigen/FFT>
194
-    //#include <unsupported/Eigen/SparseExtra>
195
-    #include <Eigen/Geometry>
196
-
197
-    /** \brief The only namespace used by Lemma
198
-     *
199
-     *  \details The rational behind this namespace is that built-in
200
-     *  types should be used wherever possible, but not
201
-     *  not built-in names. This allows for code that is better
202
-     *  enacsulated and easier to modify. The typedefs and constants
203
-     *  specified here are defined so that
204
-     *  precision/inplimentation can easily be changed.
205
-     *  All floating precision types should be typedefed in this file
206
-     *  and should not be used natively within any code.
207
-     *  Lemma uses
208
-     *  the Eigen Matrix/Vector/Linear Algebra library.
209
-     *  <http://eigen.tuxfamily.org> and a lot of the namespece typedefs
210
-     *  are specifying Eigen types.
211
-     */
212
-    namespace Lemma {
213
-
214
-        /// Real defines precision for the whole API, default is double
215
-#ifdef  LEMMA_SINGLE_PRECISION
216
-        typedef float Real;
217
-#else      // -----      LEMMA_SINGLE_PRECISION  -----
218
-        typedef double Real;
219
-#endif     // -----  not LEMMA_SINGLE_PRECISION  -----
220
-
221
-        /// Complex version of Real.
222
-        typedef std::complex<Real> Complex;
223
-
224
-        /// A 3 component Eigen vector of Reals
225
-        typedef Eigen::Matrix<Real, 3, 1> Vector3r;
226
-
227
-        /// A 3 X Dynamic Component Eigen matrix of Reals
228
-        typedef Eigen::Matrix<Real, 3, Eigen::Dynamic> Vector3Xr;
229
-
230
-        /// Variable length Eigen vector of Reals
231
-        typedef Eigen::Matrix<Real, Eigen::Dynamic, 1> VectorXr;
232
-
233
-        /// Variable length Eigen vector of integers (int)
234
-        typedef Eigen::Matrix<int, Eigen::Dynamic, 1> VectorXi;
235
-
236
-        /// Variable length Eigen vector of Complexes
237
-        typedef Eigen::Matrix<Complex, Eigen::Dynamic, 1> VectorXcr;
238
-
239
-        /// A 3 Component Eigen vector of Complexes
240
-        typedef Eigen::Matrix<Complex, 3, 1> Vector3cr;
241
-
242
-        /// A 3 X Dynamic Component Eigen matrix of Complexes
243
-        typedef Eigen::Matrix<Complex, 3, Eigen::Dynamic> Vector3Xcr;
244
-
245
-        /// Variable length Eigen Matrix of Reals
246
-        typedef Eigen::Matrix<Real, Eigen::Dynamic, Eigen::Dynamic> MatrixXr;
247
-
248
-        /// Variable length Eigen Matrix of ints
249
-        typedef Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic> MatrixXi;
250
-
251
-        /// Variable length Eigen vector of Complexes
252
-        typedef Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic> MatrixXcr;
253
-
254
-        ////////////////////////////////////////
255
-        // Constants used across the programmes
256
-
257
-        /// Restating the obvious, this is pi
258
-        const Real PI = 4.0*atan(1.0);
259
-
260
-        /// Permitivity of Free Space
261
-        //const Real EPSILON0 = 8.854187817e-12;
262
-        const Real EPSILON0 = 8.854187817e-12;
263
-
264
-        /// Permeability of free space
265
-        const Real MU0 = 4.*PI*1e-7;
266
-
267
-        /// 1/4 of \f$ \pi\f$
268
-        const Real QPI = .25/PI;
269
-
270
-        /// Some functions will convert units from SI (standard) to Gauss
271
-        /// This is because NMR calculations are much more natural in Gauss
272
-        enum MAGUNITS  {TESLA, NANOTESLA, GAUSS};
273
-
274
-        /// Unit of temperature entered
275
-        enum TEMPUNITS {CELCIUS, KELVIN};
276
-
277
-        /// Unit of time entered
278
-        enum TIMEUNITS {SEC, MILLISEC, MICROSEC, NANOSEC, PICOSEC};
279
-
280
-        /// Unit of time entered
281
-        enum FREQUENCYUNITS {HZ, KHZ, MHZ, GHZ};
282
-
283
-		/// FEM coil relative orientations
284
-		enum FEMCOILORIENTATION {COAXIAL, COPLANAR};
285
-
286
-		/// General orientation relative to coordinate system
287
-		enum ORIENTATION {X, Y, Z, NX, NY, NZ};
288
-
289
-        /// Type of field
290
-        enum FIELDTYPE         {HFIELDREAL, HFIELDIMAG, EFIELDREAL, EFIELDIMAG};
291
-
292
-        /// Compenent of vector field
293
-        enum FIELDCOMPONENT    {XCOMPONENT=0, YCOMPONENT=1, ZCOMPONENT=2};
294
-
295
-        /// Spatial component of vector
296
-        enum SPATIALCOORDINANT  {XCOORD=0, YCOORD=1, ZCOORD=2};
297
-
298
-        /** Evaluation method for Hankel integrals.
299
-         *  ANDERSON801     Walt Anderson's 801 point filter
300
-         *  CHAVE           Alan Chave's gaussian quadrature integration method
301
-         *  FHTKEY201       Key's 201 point filter
302
-         *  FHTKEY201       Key's 101 point filter
303
-         *  FHTKEY51        Key's 51 point filter
304
-         *  QWEKEY          Key's Gaussian quadrature integration method
305
-         */
306
-        enum HANKELTRANSFORMTYPE { ANDERSON801, CHAVE, FHTKEY201, FHTKEY101, FHTKEY51, QWEKEY };
307
-
308
-        /** Enum is OK because these are the only physically possible sources.
309
-         @param NOSOURCETYPE is default.
310
-         @param ELECTRICDIPOLE is an electric dipole
311
-         @param MAGNETICDIPOLE is a magnetic dipole
312
-        */
313
-        enum DipoleSourceType {NOSOURCETYPE, GROUNDEDELECTRICDIPOLE, UNGROUNDEDELECTRICDIPOLE, MAGNETICDIPOLE};
314
-
315
-        /// Only three polarizations are supported. They may be summed to
316
-        /// approximate others
317
-        /// @param NOPOLARISATION is uninitialized, default value
318
-        /// @param XPOLARISATION is a dipole oriented in the x direction
319
-        /// @param YPOLARISATION is a dipole oriented in the y direction
320
-        /// @param ZPOLARISATION is a dipole oriented in the z direction
321
-        enum DipoleSourcePolarisation {NOPOLARISATION, XPOLARISATION,
322
-            YPOLARISATION,  ZPOLARISATION};
323
-
324
-        /// The polarity may be either negative or positinve
325
-        enum DipoleSourcePolarity {NEGATIVE, POSITIVE};
326
-
327
-        /** The fields to make calculations on
328
-        */
329
-        enum FIELDCALCULATIONS {E, H, BOTH};
330
-
331
-    }
332
-
333
-#endif // __Lemma_H

+ 0
- 82
LemmaCore/include/timer.h View File

@@ -1,82 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     01/27/2010
11
-  @version  $Id: timer.h 87 2013-09-05 22:44:05Z tirons $
12
- **/
13
-
14
-#ifndef  TIMER_H_INC
15
-#define  TIMER_H_INC
16
-
17
-#include <iostream>
18
-#include <fstream>
19
-#include <ctime>
20
-#ifdef LEMMAUSEOMP
21
-#include "omp.h"
22
-#endif
23
-
24
-#include "lemma.h"
25
-
26
-namespace Lemma {
27
-
28
-/** \brief Simple timer class.
29
-  * \details Can be used either with multithreaded applications, using
30
-  * OpenMP defined functions, or using system wall time. System wall time
31
-  * is not good for parallel programs as it reports cpu core execution time.
32
-  */
33
-class jsw_timer {
34
-
35
-    public:
36
-
37
-        /**
38
-          * Constructor that automatically starts the timer.
39
-          */
40
-        jsw_timer(): start ( std::clock() ), elapsed ( 0.0 ) {
41
-
42
-        }
43
-
44
-        /** begins the timer.
45
-          */
46
-        void begin() {
47
-            #ifdef LEMMAUSEOMP
48
-            start =  omp_get_wtime();
49
-            #else
50
-            start = std::clock();
51
-            #endif
52
-            elapsed = 0.0;
53
-        }
54
-
55
-        /** Ends the timer.
56
-          * @return the time that the stopwatch ended at.
57
-          */
58
-        Real end() {
59
-
60
-            #ifdef LEMMAUSEOMP
61
-            elapsed = static_cast<Real> (omp_get_wtime()) - start;
62
-            return elapsed;
63
-            #else
64
-            elapsed = static_cast<Real> ( std::clock() ) - start;
65
-            return elapsed /= CLOCKS_PER_SEC;
66
-            #endif
67
-
68
-        }
69
-
70
-        /**
71
-          * @return the elapsed time between start and end.
72
-          */
73
-        Real last() const { return elapsed; }
74
-
75
-    private:
76
-        std::clock_t start;
77
-        Real    elapsed;
78
-};
79
-
80
-}       // -----  end of Lemma  name  -----
81
-
82
-#endif   // ----- #ifndef TIMER_H_INC  -----

+ 0
- 238
LemmaCore/src/ASCIIParser.cpp View File

@@ -1,238 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      09/23/2013 02:33:41 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2013, Trevor Irons
17
- */
18
-
19
-#include "ASCIIParser.h"
20
-
21
-namespace Lemma {
22
-
23
-
24
-    // ====================  FRIEND METHODS  =====================
25
-
26
-    std::ostream &operator << (std::ostream &stream, const ASCIIParser &ob) {
27
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
28
-        return stream;
29
-    }
30
-
31
-    // ====================  LIFECYCLE     =======================
32
-
33
-    //--------------------------------------------------------------------------------------
34
-    //       Class:  ASCIIParser
35
-    //      Method:  ASCIIParser
36
-    // Description:  constructor (protected)
37
-    //--------------------------------------------------------------------------------------
38
-    ASCIIParser::ASCIIParser ( ) : LemmaObject( ),
39
-            CommentString("//"), BufferSize(255) {
40
-
41
-    }  // -----  end of method ASCIIParser::ASCIIParser  (constructor)  -----
42
-
43
-
44
-    //--------------------------------------------------------------------------------------
45
-    //       Class:  ASCIIParser
46
-    //      Method:  NewSP()
47
-    // Description:  public smart pointer factory constructor
48
-    //--------------------------------------------------------------------------------------
49
-    std::shared_ptr< ASCIIParser > ASCIIParser::NewSP() {
50
-        std::shared_ptr<ASCIIParser> sp(new  ASCIIParser( ), LemmaObjectDeleter() );
51
-        return sp;
52
-        //return  std::make_shared<ASCIIParser>();
53
-    }
54
-
55
-    //--------------------------------------------------------------------------------------
56
-    //       Class:  ASCIIParser
57
-    //      Method:  Serialize
58
-    //--------------------------------------------------------------------------------------
59
-    YAML::Node  ASCIIParser::Serialize (  ) const {
60
-        YAML::Node node = LemmaObject::Serialize();;
61
-        node.SetTag( GetName() );
62
-        node["CommentString"] = CommentString;
63
-        node["BufferSize"] = BufferSize;
64
-        return node;
65
-    }		// -----  end of method ASCIIParser::Serialize  -----
66
-
67
-    //--------------------------------------------------------------------------------------
68
-    //       Class:  ASCIIParser
69
-    //      Method:  DeSerialize
70
-    //--------------------------------------------------------------------------------------
71
-    std::shared_ptr<ASCIIParser> ASCIIParser::DeSerialize ( const YAML::Node& node  ) {
72
-        if (node.Tag() != "ASCIIParser") {
73
-            throw  DeSerializeTypeMismatch( "ASCIIParser", node.Tag());
74
-        }
75
-        std::shared_ptr<ASCIIParser> Object(new  ASCIIParser(node), LemmaObjectDeleter() );
76
-        return Object ;
77
-    }		// -----  end of method ASCIIParser::DeSerialize  -----
78
-
79
-    //--------------------------------------------------------------------------------------
80
-    //       Class:  ASCIIParser
81
-    //      Method:  ~ASCIIParser
82
-    // Description:  destructor (protected)
83
-    //--------------------------------------------------------------------------------------
84
-    ASCIIParser::~ASCIIParser () {
85
-
86
-    }  // -----  end of method ASCIIParser::~ASCIIParser  (destructor)  -----
87
-
88
-    //--------------------------------------------------------------------------------------
89
-    //       Class:  ASCIIParser
90
-    //      Method:  ASCIIParser
91
-    // Description:  DeSerializing constructor (protected)
92
-    //--------------------------------------------------------------------------------------
93
-    ASCIIParser::ASCIIParser (const YAML::Node& node) : LemmaObject(node) {
94
-        this->CommentString = node["CommentString"].as<std::string>();
95
-        this->BufferSize = node["BufferSize"].as<int>();
96
-    }  // -----  end of method ASCIIParser::ASCIIParser  (constructor)  -----
97
-
98
-    //--------------------------------------------------------------------------------------
99
-    //       Class:  ASCIIParser
100
-    //      Method:  Release
101
-    // Description:  destructor (protected)
102
-    //--------------------------------------------------------------------------------------
103
-    void ASCIIParser::Release() {
104
-        delete this;
105
-    }
106
-
107
-    //--------------------------------------------------------------------------------------
108
-    //       Class:  ASCIIParser
109
-    //      Method:  Open
110
-    //--------------------------------------------------------------------------------------
111
-    void ASCIIParser::Open ( const std::string& fname ) {
112
-        input.open(fname.c_str(), std::ios::in);
113
-        if (input.fail()) {
114
-           throw  GenericFileIOError(this, fname);
115
-        }
116
-        return ;
117
-    }		// -----  end of method ASCIIParser::Open  -----
118
-
119
-
120
-    //--------------------------------------------------------------------------------------
121
-    //       Class:  ASCIIParser
122
-    //      Method:  Close
123
-    //--------------------------------------------------------------------------------------
124
-    void ASCIIParser::Close (  ) {
125
-        input.close();
126
-        return ;
127
-    }		// -----  end of method ASCIIParser::Close  -----
128
-
129
-
130
-    //--------------------------------------------------------------------------------------
131
-    //       Class:  ASCIIParser
132
-    //      Method:  ReadReals
133
-    //--------------------------------------------------------------------------------------
134
-    std::vector<Real> ASCIIParser::ReadReals ( const int& nr ) {
135
-        std::string buf;
136
-        char *dump = new char[BufferSize];
137
-        std::vector<Real> vals(0);
138
-        while (input >> buf) {
139
-            if (buf.substr(0, CommentString.size()) == CommentString) {
140
-                input.getline(dump, BufferSize);
141
-            } else {
142
-                vals.push_back( atof(buf.c_str() ));
143
-            }
144
-            if (static_cast<int>(vals.size()) == nr) {
145
-                delete [] dump;
146
-                return vals;
147
-            }
148
-        }
149
-        delete [] dump;
150
-        return vals;
151
-    }		// -----  end of method ASCIIParser::ReadReals  -----
152
-
153
-    //--------------------------------------------------------------------------------------
154
-    //       Class:  ASCIIParser
155
-    //      Method:  ReadInts
156
-    //--------------------------------------------------------------------------------------
157
-    std::vector<int> ASCIIParser::ReadInts ( const int& nr ) {
158
-        std::string buf;
159
-        char *dump = new char[BufferSize];
160
-        std::vector<int> vals(0);
161
-        while (input >> buf) {
162
-            if (buf.substr(0, CommentString.size()) == CommentString) {
163
-                input.getline(dump, BufferSize);
164
-            } else {
165
-                vals.push_back( atoi(buf.c_str() ));
166
-            }
167
-            if (static_cast<int>(vals.size()) == nr) {
168
-                delete [] dump;
169
-                return vals;
170
-            }
171
-
172
-        }
173
-        delete [] dump;
174
-        return vals;
175
-    }		// -----  end of method ASCIIParser::ReadInts  -----
176
-
177
-    //--------------------------------------------------------------------------------------
178
-    //       Class:  ASCIIParser
179
-    //      Method:  ReadStings
180
-    //--------------------------------------------------------------------------------------
181
-    std::vector<std::string> ASCIIParser::ReadStrings ( const int& nr ) {
182
-        std::string buf;
183
-        char *dump = new char[BufferSize];
184
-        std::vector<std::string> vals(0);
185
-        while (input >> buf) {
186
-            if (buf.substr(0, CommentString.size()) == CommentString) {
187
-                input.getline(dump, BufferSize);
188
-            } else {
189
-                vals.push_back( buf );
190
-            }
191
-            if (static_cast<int>(vals.size()) == nr) {
192
-                delete [] dump;
193
-                return vals;
194
-            }
195
-
196
-        }
197
-        delete [] dump;
198
-        return vals;
199
-    }		// -----  end of method ASCIIParser::ReadInts  -----
200
-
201
-
202
-    //--------------------------------------------------------------------------------------
203
-    //       Class:  ASCIIParser
204
-    //      Method:  SetCommentString
205
-    //--------------------------------------------------------------------------------------
206
-    void ASCIIParser::SetCommentString ( const std::string& key ) {
207
-        CommentString = key;
208
-    }		// -----  end of method ASCIIParser::SetCommentString  -----
209
-
210
-    //--------------------------------------------------------------------------------------
211
-    //       Class:  ASCIIParser
212
-    //      Method:  SetBufferSize
213
-    //--------------------------------------------------------------------------------------
214
-    void ASCIIParser::SetBufferSize ( const int& size ) {
215
-        BufferSize = size;
216
-    }		// -----  end of method ASCIIParser::SetCommentString  -----
217
-
218
-    //--------------------------------------------------------------------------------------
219
-    //       Class:  ASCIIParser
220
-    //      Method:  GetFileLocation
221
-    //--------------------------------------------------------------------------------------
222
-    int ASCIIParser::GetFileLocation (  ) {
223
-        return input.tellg();
224
-    }		// -----  end of method ASCIIParser::GetFileLocation  -----
225
-
226
-    //--------------------------------------------------------------------------------------
227
-    //       Class:  ASCIIParser
228
-    //      Method:  JumpToLocation
229
-    //--------------------------------------------------------------------------------------
230
-    void ASCIIParser::JumpToLocation ( const int& loc ) {
231
-        input.seekg( loc );
232
-        return ;
233
-    }		// -----  end of method ASCIIParser::JumpToLocation  -----
234
-
235
-
236
-}		// -----  end of Lemma  name  -----
237
-
238
-

+ 0
- 20
LemmaCore/src/CMakeLists.txt View File

@@ -1,20 +0,0 @@
1
-set (SOURCE 
2
-	${SOURCE}
3
-	${CMAKE_CURRENT_SOURCE_DIR}/helper.cpp
4
-	${CMAKE_CURRENT_SOURCE_DIR}/banner.cpp
5
-	${CMAKE_CURRENT_SOURCE_DIR}/ASCIIParser.cpp
6
-	${CMAKE_CURRENT_SOURCE_DIR}/CubicSplineInterpolator.cpp
7
-	${CMAKE_CURRENT_SOURCE_DIR}/Data.cpp
8
-	${CMAKE_CURRENT_SOURCE_DIR}/DataReader.cpp
9
-	${CMAKE_CURRENT_SOURCE_DIR}/EarthModel.cpp
10
-	${CMAKE_CURRENT_SOURCE_DIR}/Instrument.cpp
11
-	${CMAKE_CURRENT_SOURCE_DIR}/LayeredEarth.cpp
12
-	${CMAKE_CURRENT_SOURCE_DIR}/LemmaObject.cpp
13
-	${CMAKE_CURRENT_SOURCE_DIR}/Grid.cpp       
14
-	${CMAKE_CURRENT_SOURCE_DIR}/RectilinearGrid.cpp
15
-	${CMAKE_CURRENT_SOURCE_DIR}/RectilinearGridReader.cpp
16
-	${CMAKE_CURRENT_SOURCE_DIR}/RectilinearGridVTKExporter.cpp
17
-	${CMAKE_CURRENT_SOURCE_DIR}/Filter.cpp
18
-	${CMAKE_CURRENT_SOURCE_DIR}/WindowFilter.cpp
19
-	PARENT_SCOPE
20
-)

+ 0
- 355
LemmaCore/src/CubicSplineInterpolator.cpp View File

@@ -1,355 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      02/07/2014 12:50:52 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2014, Trevor Irons
17
- */
18
-
19
-#include "CubicSplineInterpolator.h"
20
-
21
-#include<iostream>
22
-#include<fstream>
23
-#include<vector>
24
-#include<algorithm>
25
-#include<cmath>
26
-
27
-namespace Lemma {
28
-
29
-    // ====================  FRIEND METHODS  =====================
30
-
31
-    std::ostream &operator << (std::ostream &stream, const CubicSplineInterpolator &ob) {
32
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
33
-        return stream;
34
-    }
35
-
36
-    // ====================  LIFECYCLE     =======================
37
-
38
-    //--------------------------------------------------------------------------------------
39
-    //       Class:  CubicSplineInterpolator
40
-    //      Method:  CubicSplineInterpolator
41
-    // Description:  constructor (protected)
42
-    //--------------------------------------------------------------------------------------
43
-    CubicSplineInterpolator::CubicSplineInterpolator ( ) : LemmaObject( ) {
44
-
45
-    }  // -----  end of method CubicSplineInterpolator::CubicSplineInterpolator  (constructor)  -----
46
-
47
-    //--------------------------------------------------------------------------------------
48
-    //       Class:  CubicSplineInterpolator
49
-    //      Method:  CubicSplineInterpolator
50
-    // Description:  DeSerializing constructor (protected)
51
-    //--------------------------------------------------------------------------------------
52
-    CubicSplineInterpolator::CubicSplineInterpolator (const YAML::Node& node) : LemmaObject(node) {
53
-    }  // -----  end of method CubicSplineInterpolator::CubicSplineInterpolator  (constructor)  -----
54
-
55
-    //--------------------------------------------------------------------------------------
56
-    //       Class:  CubicSplineInterpolator
57
-    //      Method:  NewSP()
58
-    // Description:  public constructor
59
-    //--------------------------------------------------------------------------------------
60
-    std::shared_ptr<CubicSplineInterpolator> CubicSplineInterpolator::NewSP() {
61
-        std::shared_ptr<CubicSplineInterpolator> sp(new  CubicSplineInterpolator( ), LemmaObjectDeleter() );
62
-        return sp;
63
-    }
64
-
65
-    //--------------------------------------------------------------------------------------
66
-    //       Class:  CubicSplineInterpolator
67
-    //      Method:  Serialize
68
-    //--------------------------------------------------------------------------------------
69
-    YAML::Node  CubicSplineInterpolator::Serialize (  ) const {
70
-        YAML::Node node = LemmaObject::Serialize();;
71
-        node.SetTag( GetName() );
72
-        // FILL IN CLASS SPECIFICS HERE
73
-        return node;
74
-    }		// -----  end of method CubicSplineInterpolator::Serialize  -----
75
-
76
-    //--------------------------------------------------------------------------------------
77
-    //       Class:  CubicSplineInterpolator
78
-    //      Method:  DeSerialize
79
-    //--------------------------------------------------------------------------------------
80
-    std::shared_ptr<CubicSplineInterpolator> CubicSplineInterpolator::DeSerialize ( const YAML::Node& node  ) {
81
-        if (node.Tag() != "CubicSplineInterpolator") {
82
-            throw  DeSerializeTypeMismatch( "CubicSplineInterpolator", node.Tag());
83
-        }
84
-        std::shared_ptr<CubicSplineInterpolator> Object(new  CubicSplineInterpolator(node), LemmaObjectDeleter() );
85
-        return Object ;
86
-    }
87
-
88
-    //--------------------------------------------------------------------------------------
89
-    //       Class:  CubicSplineInterpolator
90
-    //      Method:  ~CubicSplineInterpolator
91
-    // Description:  destructor (protected)
92
-    //--------------------------------------------------------------------------------------
93
-    CubicSplineInterpolator::~CubicSplineInterpolator () {
94
-
95
-    }  // -----  end of method CubicSplineInterpolator::~CubicSplineInterpolator  (destructor)  -----
96
-
97
-    //--------------------------------------------------------------------------------------
98
-    //       Class:  CubicSplineInterpolator
99
-    //      Method:  Release
100
-    // Description:  destructor (protected)
101
-    //--------------------------------------------------------------------------------------
102
-    void CubicSplineInterpolator::Release() {
103
-        delete this;
104
-    }
105
-
106
-    // ====================  OPERATIONS    =======================
107
-
108
-    //--------------------------------------------------------------------------------------
109
-    //       Class:  CubicSplineInterpolator
110
-    //      Method:  SetKnots
111
-    //--------------------------------------------------------------------------------------
112
-    void CubicSplineInterpolator::SetKnots ( const VectorXr& x, const VectorXr& y ) {
113
-
114
-        int n = x.size()-1;
115
-
116
-        Spline = SplineSet(n);
117
-
118
-        Spline.a = y;
119
-        Spline.x = x;
120
-        VectorXr h = VectorXr::Zero(n);
121
-        for(int i=0; i<n; ++i)
122
-            h(i) = Spline.x(i+1)-Spline.x(i);
123
-
124
-        VectorXr alpha(n-1);
125
-        for(int i=1; i<n-1; ++i)
126
-            alpha(i) =  3.*(Spline.a[i+1]-Spline.a[i])/h[i] - 3.*(Spline.a[i]-Spline.a[i-1])/h[i-1] ;
127
-
128
-        VectorXr l = VectorXr::Zero(n+1);
129
-        VectorXr mu  = VectorXr::Zero(n+1);
130
-        VectorXr z = VectorXr::Zero(n+1);
131
-        l[0] = 1;
132
-        mu[0] = 0;
133
-        z[0] = 0;
134
-
135
-        for(int i = 1; i < n-1; ++i) {
136
-            l[i] = 2 *(Spline.x[i+1]-Spline.x[i-1])-h[i-1]*mu[i-1];
137
-            mu[i] = h[i]/l[i];
138
-            z[i] = (alpha[i]-h[i-1]*z[i-1])/l[i];
139
-        }
140
-        l[n] = 1;
141
-        z[n] = 0;
142
-
143
-        for(int j = n-1; j >= 0; --j) {
144
-            Spline.c[j] = z[j] - mu[j] * Spline.c[j+1];
145
-            Spline.b[j] = (Spline.a[j+1]-Spline.a[j])/h[j]-h[j]*(Spline.c[j+1]+2*Spline.c[j])/3;
146
-            Spline.d[j] = (Spline.c[j+1]-Spline.c[j])/3/h[j];
147
-        }
148
-        // On OSX, this causes a strange bug 'sometimes', alignment?
149
-        //Spline.c = Spline.c.head(n);
150
-
151
-        return;
152
-    }		// -----  end of method CubicSplineInterpolator::SetKnots  -----
153
-
154
-
155
-    //--------------------------------------------------------------------------------------
156
-    //       Class:  CubicSplineInterplator
157
-    //      Method:  ResetKnotOrdinate
158
-    //--------------------------------------------------------------------------------------
159
-    void CubicSplineInterpolator::ResetKnotOrdinate ( const VectorXr& y ) {
160
-        VectorXr x = Spline.x;
161
-        SetKnots(x, y);
162
-        return ;
163
-    }		// -----  end of method CubicSplineInterplator::ResetKnotOrdinate  -----
164
-
165
-
166
-    //--------------------------------------------------------------------------------------
167
-    //       Class:  CubicSplineInterpolator
168
-    //      Method:  InterpolateOrderedSet
169
-    //--------------------------------------------------------------------------------------
170
-    VectorXr CubicSplineInterpolator::InterpolateOrderedSet ( const VectorXr& x ) {
171
-        VectorXr y = VectorXr::Zero(x.size());
172
-        int ii = 0;
173
-        for (int iy=0; iy<y.size(); ++iy) {
174
-            y[iy] = Interpolate(x[iy], ii);
175
-        }
176
-        return y;
177
-    }		// -----  end of method CubicSplineInterpolator::InterpolateOrderedSet  -----
178
-
179
-
180
-    //--------------------------------------------------------------------------------------
181
-    //       Class:  CubicSplineInterpolator
182
-    //      Method:  Interpolate
183
-    //--------------------------------------------------------------------------------------
184
-    Real CubicSplineInterpolator::Interpolate ( const Real& x, int& i) {
185
-        // O(n) search, could do bisection, but if these are sorted, then this is quick
186
-        while(Spline.x[i] < x && i<Spline.x.size()) {
187
-            ++i;
188
-        }
189
-        --i;
190
-
191
-        //if ( x > Spline.x[i] ) {
192
-        //    throw std::runtime_error("CubicSplineInterpolator::Interpolate ATTEMPT TO INTERPOLATE PAST LAST KNOT");
193
-        //}
194
-
195
-        return Spline.a[i] + Spline.b[i]*(x-Spline.x[i]) + Spline.c[i]*((x-Spline.x[i])*(x-Spline.x[i])) +
196
-               Spline.d[i]*((x-Spline.x[i])*(x-Spline.x[i])*(x-Spline.x[i]) );
197
-    }		// -----  end of method CubicSplineInterpolator::Interpolate  -----
198
-
199
-    //--------------------------------------------------------------------------------------
200
-    //       Class:  CubicSplineInterpolator
201
-    //      Method:  Interpolate
202
-    //--------------------------------------------------------------------------------------
203
-    Real CubicSplineInterpolator::Interpolate ( const Real& x ) {
204
-        int ii(0);
205
-        return Interpolate(x, ii);
206
-    }
207
-
208
-
209
-    //--------------------------------------------------------------------------------------
210
-    //       Class:  CubicSplineInterpolator
211
-    //      Method:  Integrate
212
-    //--------------------------------------------------------------------------------------
213
-    Real CubicSplineInterpolator::Integrate ( const Real& x0, const Real& x1, const int& n ) {
214
-
215
-        assert(n > 0);
216
-        // force n to be even?
217
-        //n += (n % 2);
218
-
219
-        Real S = Interpolate(x0) + Interpolate(x1);
220
-        Real h = (x1 - x0) / Real(n);
221
-
222
-        int ik = 0;
223
-        for (int i=1; i<n; i+=2) {
224
-            S += 4. * Interpolate(x0 + (Real)(i)*h, ik);
225
-        }
226
-
227
-        ik = 0;
228
-        for (int i=2; i<n-1; i+=2) {
229
-            S += 2. * Interpolate(x0 + (Real)(i)*h, ik);
230
-        }
231
-
232
-        return  S * h / 3.;
233
-    }
234
-
235
-
236
-    //--------------------------------------------------------------------------------------
237
-    //       Class:  CubicSplineInterpolator
238
-    //      Method:  Integrate
239
-    //--------------------------------------------------------------------------------------
240
-    Real CubicSplineInterpolator::Integrate ( const Real& x0, const Real& x1 ) {
241
-
242
-
243
-        int i0 = Interval(x0);
244
-        int i1 = Interval(x1);
245
-
246
-        Real h0 = x0 - Spline.x(i0);
247
-        if (mflag == -1) h0 = 0;
248
-        Real h1 = x1 - Spline.x(i1);
249
-
250
-        Real cubint = (((Spline.d(i1)*h1/4.0 + Spline.c(i1) )*h1/3.0 +
251
-                         Spline.b(i1) )*h1/2.0 + Spline.a(i1) )*h1
252
-                    - (((Spline.d(i0)*h0/4.0 + Spline.c(i0) )*h0/3.0 +
253
-                         Spline.b(i0) )*h0/2.0 + Spline.a(i0) )*h0;
254
-
255
-        // Include integrals over intervening intervals.
256
-        if (i1 > i0) {
257
-            for (int i=i0; i<i1-1; ++i) {
258
-                Real h = Spline.x(i+1) - Spline.x(i);
259
-                cubint +=  (((Spline.d(i)*h/4.0 + Spline.c(i) )*h/3.0 +
260
-                              Spline.b(i))*h/2.0 + Spline.a(i) )*h;
261
-            }
262
-        }
263
-        return cubint;
264
-    }		// -----  end of method CubicSplineInterpolator::Integrate  -----
265
-
266
-
267
-
268
-    //--------------------------------------------------------------------------------------
269
-    //       Class:  CubicSplineInterpolator
270
-    //      Method:  Interval
271
-    //--------------------------------------------------------------------------------------
272
-    int CubicSplineInterpolator::Interval ( const Real& x ) {
273
-
274
-        std::cerr << "ENTERING CubicSplineInterpolator::Inverval. Known bugs here"  << std::endl;
275
-        int nx = Spline.x.size() - 2; // TODO check if this is correct or just -1
276
-        // when x not in range
277
-        if (x <= Spline.x(0) || nx <= 1 ) {
278
-            mflag = -1;
279
-            return 1;
280
-        }
281
-
282
-        if (x >= Spline.x(nx)) {
283
-            mflag = 1;
284
-            return nx;
285
-        }
286
-
287
-        mflag = 0;
288
-        if (ilo >= nx) ilo = nx-1;
289
-        int ihi = ilo+1;
290
-
291
-        // if x is already in the interval
292
-        if ( x<Spline.x(ihi) && x >= Spline.x(ilo) ) {
293
-            //std::cout << "TRIVIAL INTERVAL " << Spline.x(ilo) << "\t" << x << "\t" << Spline.x(ihi) << std::endl;
294
-            return ilo;
295
-        }
296
-
297
-        if (x <= Spline.x(ilo)) { // decrease ilo to capture
298
-            int istep = 1;
299
-            for (int ix=1; ix<nx; ++ix) {
300
-                ihi = ilo;
301
-                ilo = ihi - istep;
302
-                ilo = std::max(1, ilo);
303
-                if (x >= Spline.x(ilo) || ilo == 1) break;
304
-                istep *= 2;
305
-            }
306
-        } else if (x >= Spline.x(ihi)) { // increase ihi to capture
307
-            int istep = 1;
308
-            for (int ix=1; ix<nx; ++ix) {
309
-                ilo = ihi;
310
-                ihi = ilo + istep;
311
-                ihi = std::min(ihi, nx);
312
-                if (x <= Spline.x(ihi) || ihi == nx) break;
313
-                istep *= 2;
314
-            }
315
-        }
316
-
317
-        // Now Spline.x(ilo) <= x < Spline.x(ihi) --> Narrow the interval.
318
-        //std::cout << "WIDE INTERVAL " << Spline.x(ilo) << "\t" << x << "\t" << Spline.x(ihi) << std::endl;
319
-        for (int ix=1; ix<nx; ++ix) {
320
-            int middle = (ilo+ihi) / 2;
321
-            if (middle == ilo) break;
322
-            if (x < Spline.x(middle)) {
323
-                ihi = middle;
324
-            } else {
325
-                ilo = middle;
326
-            }
327
-        }
328
-        assert ( Spline.x(ilo) < x && x < Spline.x(ihi) );
329
-        return ilo;
330
-    }		// -----  end of method CubicSplineInterpolator::Inverval  -----
331
-
332
-
333
-
334
-    //--------------------------------------------------------------------------------------
335
-    //       Class:  CubicSplineInterplator
336
-    //      Method:  GetAbscissa
337
-    //--------------------------------------------------------------------------------------
338
-    VectorXr CubicSplineInterpolator::GetKnotAbscissa (  ) {
339
-        return Spline.x;
340
-    }		// -----  end of method CubicSplineInterplator::get_GetAbscissa  -----
341
-
342
-
343
-    //--------------------------------------------------------------------------------------
344
-    //       Class:  CubicSplineInterpolator
345
-    //      Method:  GetKnotOrdinate
346
-    //--------------------------------------------------------------------------------------
347
-    VectorXr CubicSplineInterpolator::GetKnotOrdinate (  ) {
348
-        return Spline.a;
349
-    }		// -----  end of method CubicSplineInterpolator::GetKnotOrdinate  -----
350
-
351
-
352
-}		// -----  end of Lemma  name  -----
353
-
354
-/* vim: set tabstop=4 expandtab: */
355
-/* vim: set filetype=cpp: */

+ 0
- 30
LemmaCore/src/Data.cpp View File

@@ -1,30 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     03/01/2010
11
-  @version  $Id: data.cpp 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "Data.h"
15
-
16
-namespace Lemma {
17
-
18
-    std::ostream &operator << (std::ostream &stream, const Data &ob) {
19
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
20
-        return stream;
21
-    }
22
-
23
-	Data::Data(  ) : LemmaObject( ) {
24
-	}
25
-
26
-
27
-	Data::~Data() {
28
-	}
29
-
30
-}		// -----  end of Lemma  name  -----

+ 0
- 29
LemmaCore/src/DataReader.cpp View File

@@ -1,29 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     03/01/2010
11
-  @version  $Id: datareader.cpp 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "DataReader.h"
15
-
16
-namespace Lemma {
17
-
18
-    std::ostream &operator << (std::ostream &stream, const DataReader &ob) {
19
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
20
-        return stream;
21
-    }
22
-
23
-	DataReader::DataReader( ) : LemmaObject( ) {
24
-	}
25
-
26
-	DataReader::~DataReader() {
27
-	}
28
-
29
-}		// -----  end of Lemma  name  -----

+ 0
- 129
LemmaCore/src/EarthModel.cpp View File

@@ -1,129 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     03/23/2010
11
-  @version  $Id: earthmodel.cpp 210 2015-02-25 02:57:03Z tirons $
12
- **/
13
-
14
-#include "EarthModel.h"
15
-
16
-namespace Lemma {
17
-
18
-    std::ostream &operator << (std::ostream &stream, const EarthModel &ob) {
19
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
20
-        return stream;
21
-    }
22
-
23
-	// ====================  LIFECYCLE     =======================
24
-
25
-	EarthModel::EarthModel() : LemmaObject( ),
26
-        BField(0,0,0), BFieldUnit(0,0,0), BInc(0), BDec(0), BMag(0) {
27
-	}
28
-
29
-    EarthModel::EarthModel(const YAML::Node& node) : LemmaObject(node) {
30
-        BInc = node["BInc"].as<double>();
31
-        BDec = node["BDec"].as<double>();
32
-        BMag = node["BMag"].as<double>();
33
-        BField = node["BField"].as<Vector3r>();
34
-    }
35
-
36
-
37
-    YAML::Node EarthModel::Serialize() const {
38
-        YAML::Node node = LemmaObject::Serialize();
39
-        node.SetTag( this->GetName() );
40
-        node["BField"] = BField;
41
-        node["BInc"] = BInc;
42
-        node["BDec"] = BDec;
43
-        node["BMag"] = BMag;
44
-        return node;
45
-    }
46
-
47
-	EarthModel::~EarthModel() {
48
-	}
49
-
50
- 	// ====================  ACCESS        ===================================
51
-	void EarthModel::SetMagneticFieldComponents(const Vector3r &bfield,
52
-					const MAGUNITS &unit) {
53
-
54
- 		this->BField = bfield;
55
-
56
-		switch (unit) {
57
-			case TESLA:
58
-				break;
59
-			case NANOTESLA:
60
-				BField *= 1e-9;
61
-				break;
62
-		  	case GAUSS:
63
-				BField *= 1e-4;
64
-				break;
65
-			default:
66
-				throw "MAGUNITS UNDEFINED\n";
67
-		}
68
-
69
-		BMag = bfield.norm(  );
70
-	    BInc = std::acos (bfield.dot(Vector3r(0,0,1)) / BMag) ;
71
-	    BDec = std::acos (bfield.dot(Vector3r(1,0,0)) / BMag) ;
72
-		BFieldUnit = BField.array() / BMag;
73
- 	}
74
-
75
-	void EarthModel::SetMagneticFieldIncDecMag(const Real &inc,
76
-			const Real &dec, const Real &mag, const MAGUNITS &unit) {
77
-		BMag = mag;
78
-		BInc = inc;
79
-		BDec = dec;
80
-
81
-		switch (unit) {
82
-			case TESLA:
83
-				break;
84
-			case NANOTESLA:
85
-				BMag *= 1e-9;
86
-				break;
87
-		  	case GAUSS:
88
-				BMag *= 1e-4;
89
-				break;
90
-			default:
91
-				throw "MAGUNITS UNDEFINED\n";
92
-		}
93
-
94
-		BField(0) = BMag * cos(BInc*(PI/180.)) * cos(BDec*(PI/180.));
95
-		BField(1) = BMag * cos(BInc*(PI/180.)) * sin(BDec*(PI/180.));
96
-		BField(2) = BMag * sin(BInc*(PI/180.))  ;
97
-		BFieldUnit = BField.array() / BMag;
98
-	}
99
-
100
-	// ====================  INQUIRY       =======================
101
-
102
-	Vector3r EarthModel::GetMagneticField( ) {
103
-		return this->BField;
104
-	}
105
-
106
-    Vector3r EarthModel::GetMagneticFieldInGauss( ) {
107
-		return this->BField*1e4;
108
-	}
109
-
110
-	Vector3r EarthModel::GetMagneticFieldUnitVector() {
111
-		return this->BFieldUnit;
112
-	}
113
-
114
-	Real  EarthModel::GetMagneticFieldMagnitude() {
115
-		return this->BMag;
116
-	}
117
-
118
-	Real  EarthModel::GetMagneticFieldMagnitudeInGauss() {
119
-		return this->BMag*1e4;
120
-	}
121
-
122
-    ////////////////////////////////////////////////////////
123
-    // Error Classes
124
-
125
-    NullEarth::NullEarth() :
126
-        runtime_error( "NULL VALUED LAYERED EARTH MODEL") {}
127
-
128
-
129
-}		// -----  end of Lemma  name  -----

+ 0
- 22
LemmaCore/src/Filter.cpp View File

@@ -1,22 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     07/20/2010
11
-  @version  $Id: filter.cpp 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "Filter.h"
15
-
16
-namespace Lemma {
17
-
18
-    Filter::Filter( ) : LemmaObject( ) { }
19
-
20
-    Filter::~Filter( ) { }
21
-
22
-}		// -----  end of Lemma  name  -----

+ 0
- 43
LemmaCore/src/Grid.cpp View File

@@ -1,43 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     10/25/2009
11
-  @version  $Id: grid.cpp 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "Grid.h"
15
-
16
-namespace Lemma {
17
-
18
-    std::ostream &operator << (std::ostream &stream, const Grid &ob) {
19
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
20
-        return stream;
21
-    }
22
-
23
-    // ====================  LIFECYCLE     ===================================
24
-
25
-	Grid::Grid( ) : LemmaObject( ) {
26
-	}
27
-
28
-    Grid::Grid( const YAML::Node& node ) : LemmaObject(node) {
29
-
30
-    }
31
-
32
-	Grid::~Grid  ( ) {
33
-	}
34
-
35
-    YAML::Node Grid::Serialize() const {
36
-
37
-        YAML::Node node = LemmaObject::Serialize();
38
-        node.SetTag( this->GetName() );
39
-        return node;
40
-
41
-    }
42
-
43
-}

+ 0
- 29
LemmaCore/src/Instrument.cpp View File

@@ -1,29 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     02/05/2010
11
-  @version  $Id: instrument.cpp 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "Instrument.h"
15
-
16
-namespace Lemma {
17
-
18
-    std::ostream &operator << (std::ostream &stream, const Instrument &ob) {
19
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
20
-        return stream;
21
-    }
22
-
23
-	Instrument::Instrument( ) : LemmaObject() {
24
-	}
25
-
26
-	Instrument::~Instrument() {
27
-	}
28
-
29
-}		// -----  end of Lemma  name  -----

+ 0
- 130
LemmaCore/src/LayeredEarth.cpp View File

@@ -1,130 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     06/24/2009
11
-  @version  $Id: layeredearth.cpp 210 2015-02-25 02:57:03Z tirons $
12
- **/
13
-
14
-#include "LayeredEarth.h"
15
-
16
-namespace Lemma {
17
-
18
-	// ====================    FRIENDS     ======================
19
-
20
-    std::ostream &operator << (std::ostream &stream, const LayeredEarth &ob) {
21
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
22
-        return stream;
23
-    }
24
-
25
-	// ====================  LIFECYCLE     ===================================
26
-
27
-	LayeredEarth::LayeredEarth( ) : EarthModel( ),
28
-		NumberOfLayers(0), 	NumberOfInterfaces(0) {
29
-	}
30
-
31
-
32
-
33
-	LayeredEarth::~LayeredEarth() {
34
-	}
35
-
36
-    LayeredEarth::LayeredEarth(const YAML::Node& node) : EarthModel(node)
37
-    {
38
-        NumberOfLayers = node["NumberOfLayers"].as<int>();
39
-        NumberOfInterfaces = node["NumberOfInterfaces"].as<int>();
40
-        LayerThickness = node["LayerThickness"].as<VectorXr>();
41
-	}
42
-
43
-    YAML::Node LayeredEarth::Serialize() const {
44
-        YAML::Node node = EarthModel::Serialize();
45
-        node["NumberOfLayers"] = NumberOfLayers;
46
-        node["NumberOfInterfaces"] = NumberOfInterfaces;
47
-        node["LayerThickness"] = LayerThickness;
48
-        node.SetTag( this->GetName() );
49
-        return node;
50
-    }
51
-
52
-	// ====================  OPERATIONS    ===================================
53
-
54
-	// ====================  ACCESS        ===================================
55
-
56
-	void LayeredEarth::SetLayerThickness(const VectorXr &thick) {
57
-		if (thick.size() != this->NumberOfLayers - 2)
58
-			throw EarthModelParametersDoNotMatchNumberOfLayers( );
59
-		LayerThickness = thick;
60
-	}
61
-
62
-	// ====================  INQUIRY       ===================================
63
-
64
-	int LayeredEarth::GetNumberOfLayers () {
65
-		return this->NumberOfLayers;
66
-	}
67
-
68
-	int LayeredEarth::GetNumberOfNonAirLayers () {
69
-		return this->NumberOfLayers - 1;
70
-	}
71
-
72
-	Real LayeredEarth::GetLayerThickness(const int &ilay) {
73
-		// Take into account infinite top and bottom layers
74
-		// estimate infinity by 1000 m
75
-		if (ilay < 0 || ilay > NumberOfLayers - 1) {
76
-			throw RequestForNonValidEarthModelParameter( );
77
-		} else if (ilay == 0) {
78
-			return 1000.;
79
-		} else if (ilay == NumberOfLayers - 1) {
80
-			return 1000.;
81
-		} else {
82
-			return this->LayerThickness(ilay-1);
83
-		}
84
-	}
85
-
86
-	Real LayeredEarth::GetLayerDepth(const int &ilay) {
87
-
88
-		Real depth = 0;
89
-
90
-
91
-		if (ilay == 0) {
92
-			return depth;
93
-		} else {
94
-			for (int i=1; i<=ilay; ++i) {
95
-				depth += GetLayerThickness(i);
96
-			}
97
-		}
98
-		return depth;
99
-	}
100
-
101
-	int LayeredEarth::GetLayerAtThisDepth(const Real& depth) {
102
-
103
-		if (depth <= 0 || NumberOfLayers < 2) {
104
-			return 0;
105
-		}
106
-
107
-		Real laydep = 0;
108
-		for (int ilay=0; ilay<NumberOfLayers-2; ++ilay) {
109
-			laydep += LayerThickness[ilay];
110
-			if (laydep >= depth) { return ilay+1; }
111
-		}
112
-
113
-		return NumberOfLayers-1;
114
-	}
115
-
116
-    EarthModelWithLessThanTwoLayers::EarthModelWithLessThanTwoLayers() :
117
-        runtime_error( "EARTH MODEL WITH LESS THAN TWO LAYERS") { }
118
-
119
-    EarthModelWithMoreThanMaxLayers::EarthModelWithMoreThanMaxLayers() :
120
-        runtime_error( "EARTH MODEL WITH MORE THAN MAX LAYERS") { }
121
-
122
-    EarthModelParametersDoNotMatchNumberOfLayers::
123
-        EarthModelParametersDoNotMatchNumberOfLayers( ) :
124
-        runtime_error( "EARTH MODEL PARAMETERS DO NOT MATCH NUMBER OF LAYERS")
125
-        {}
126
-
127
-    RequestForNonValidEarthModelParameter::
128
-        RequestForNonValidEarthModelParameter() :
129
-        runtime_error( "REQUEST FOR NON VALID EARTH MODEL PARAMETER") {}
130
-}

+ 0
- 86
LemmaCore/src/LemmaObject.cpp View File

@@ -1,86 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     06/25/2009
11
-  @version  $Id: LemmaObject.cpp 266 2015-04-01 03:24:00Z tirons $
12
- **/
13
-
14
-#include "LemmaObject.h"
15
-
16
-namespace Lemma {
17
-
18
-    YAML::Emitter& operator << (YAML::Emitter& out, const LemmaObject& ob) {
19
-        out << YAML::BeginMap;
20
-        out << YAML::Key <<"Class Name"    << YAML::Value << ob.GetName();
21
-        return out;
22
-    }
23
-
24
-    // ====================  LIFECYCLE     ==============================
25
-
26
-    // Constructor
27
-    LemmaObject::LemmaObject(  ) {
28
-
29
-    }
30
-
31
-    LemmaObject::LemmaObject(const YAML::Node &node) {
32
-
33
-    }
34
-
35
-    // Destructor
36
-    LemmaObject::~LemmaObject() {
37
-    }
38
-
39
-    // ====================  OPERATIONS    ==============================
40
-
41
-    // ====================  INQUIRY       ==============================
42
-
43
-    // ====================  ACCESS        ==============================
44
-
45
-    // ====================  ACCESS        ==============================
46
-
47
-    // ====================  OPERATORS     ==============================
48
-
49
-    //////////////////////////////////////////////////////////////////////
50
-    //////////////////////////////////////////////////////////////////////
51
-
52
-    DeSerializeTypeMismatch::DeSerializeTypeMismatch(const std::string& expected, const std::string& got) :
53
-        runtime_error("DESERIALIZE TYPE MISMATCH") {
54
-            std::cerr << "Expected " << expected << " got " << got << std::endl;
55
-        }
56
-
57
-    RequestToReturnNullPointer::
58
-        RequestToReturnNullPointer(LemmaObject *ptr) :
59
-        runtime_error("REQUEST TO RETURN NULL POINTER"){
60
-            std::cerr << "Thrown by instance of "
61
-                      << ptr->GetName() << std::endl;
62
-        }
63
-
64
-    MatFileCannotBeOpened::
65
-        MatFileCannotBeOpened() :
66
-        runtime_error("MATFILE CANNOT BE OPENED"){}
67
-
68
-    AssignmentOutOfBounds::
69
-        AssignmentOutOfBounds(LemmaObject *ptr) :
70
-        runtime_error("ASSIGNMENT OUT OF BOUNDS"){
71
-            std::cerr << "Thrown by instance of "
72
-                      << ptr->GetName() << std::endl;
73
-       }
74
-
75
-	GenericFileIOError::
76
-		GenericFileIOError(LemmaObject *ptr, const std::string &filename) : runtime_error("FILE I/O ERROR"){
77
-			std::cerr << std::endl;
78
-			std::cerr << "FILE I/O ERROR" << std::endl;
79
-			std::cerr << std::endl;
80
-			std::cerr << "Thrown by instance of "
81
-				<< ptr->GetName() << std::endl;
82
-			std::cerr << "  while trying to access " << filename << std::endl;
83
-			std::cerr << std::endl;
84
-		}
85
-
86
-} // end of namespace Lemma

+ 0
- 215
LemmaCore/src/RectilinearGrid.cpp View File

@@ -1,215 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     10/28/2010
11
-  @version  $Id: rectilineargrid.cpp 193 2014-11-10 23:51:41Z tirons $
12
- **/
13
-
14
-#include "RectilinearGrid.h"
15
-
16
-namespace Lemma {
17
-
18
-    std::ostream &operator << (std::ostream &stream, const RectilinearGrid &ob) {
19
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
20
-        return stream;
21
-    }
22
-
23
-    // ====================  LIFECYCLE     =======================
24
-
25
-    RectilinearGrid::RectilinearGrid( ) : Grid( ), nx(0), ny(0), nz(0) {
26
-
27
-    }
28
-
29
-    RectilinearGrid::RectilinearGrid( const YAML::Node& node ) : Grid(node) {
30
-
31
-        nx = node["nx"].as<int>( );
32
-        ny = node["ny"].as<int>( );
33
-        nz = node["nz"].as<int>( );
34
-
35
-        ox = node["ox"].as<Real>( );
36
-        oy = node["oy"].as<Real>( );
37
-        oz = node["oz"].as<Real>( );
38
-
39
-        dx = node["dx"].as< VectorXr >();
40
-        dy = node["dy"].as< VectorXr >();
41
-        dz = node["dz"].as< VectorXr >();
42
-
43
-    }
44
-
45
-    RectilinearGrid::~RectilinearGrid() {
46
-
47
-    }
48
-
49
-    std::shared_ptr< RectilinearGrid > RectilinearGrid::NewSP() {
50
-        std::shared_ptr<RectilinearGrid> sp(new  RectilinearGrid( ), LemmaObjectDeleter() );
51
-        return sp;
52
-    }
53
-
54
-    YAML::Node RectilinearGrid::Serialize() const {
55
-        YAML::Node node = Grid::Serialize();
56
-
57
-        node["nx"] = nx;
58
-        node["ny"] = ny;
59
-        node["nz"] = nz;
60
-
61
-        node["ox"] = ox;
62
-        node["oy"] = oy;
63
-        node["oz"] = oz;
64
-
65
-        node["dx"] = dx;
66
-        node["dy"] = dy;
67
-        node["dz"] = dz;
68
-
69
-        node.SetTag( this->GetName() );
70
-        return node;
71
-    }
72
-
73
-
74
-    //--------------------------------------------------------------------------------------
75
-    //       Class:  RectilinearGrid
76
-    //      Method:  DeSerialize
77
-    //--------------------------------------------------------------------------------------
78
-    std::shared_ptr<RectilinearGrid> RectilinearGrid::DeSerialize ( const YAML::Node& node  ) {
79
-        if (node.Tag() != "RectilinearGrid") {
80
-            throw  DeSerializeTypeMismatch( "RectilinearGrid", node.Tag());
81
-        }
82
-        std::shared_ptr<RectilinearGrid> Object(new  RectilinearGrid(node), LemmaObjectDeleter() );
83
-        return Object ;
84
-    }
85
-
86
-
87
-    // ====================  OPERATIONS    =======================
88
-
89
-    void RectilinearGrid::SetDimensions (const int &inx, const int &iny,
90
-            const int &inz) {
91
-        dx.resize(inx);
92
-        dy.resize(iny);
93
-        dz.resize(inz);
94
-        nx = inx;
95
-        ny = iny;
96
-        nz = inz;
97
-    }
98
-
99
-
100
-    void RectilinearGrid::SetOffset (const Real& iox, const Real& ioy, const Real& ioz) {
101
-        ox = iox;
102
-        oy = ioy;
103
-        oz = ioz;
104
-    }
105
-
106
-    void RectilinearGrid::SetSpacing (const VectorXr &idx, const VectorXr &idy,
107
-                const VectorXr &idz) {
108
-        nx = idx.size();
109
-        ny = idy.size();
110
-        nz = idz.size();
111
-        dx = idx;
112
-        dy = idy;
113
-        dz = idz;
114
-    }
115
-
116
-    //--------------------------------------------------------------------------------------
117
-    //       Class:  RectilinearGrid
118
-    //      Method:  GetNx
119
-    //--------------------------------------------------------------------------------------
120
-    int RectilinearGrid::GetNx (  ) {
121
-        return nx;
122
-    }		// -----  end of method RectilinearGrid::GetNx  -----
123
-
124
-    //--------------------------------------------------------------------------------------
125
-    //       Class:  RectilinearGrid
126
-    //      Method:  GetNy
127
-    //--------------------------------------------------------------------------------------
128
-    int RectilinearGrid::GetNy (  ) {
129
-        return ny;
130
-    }		// -----  end of method RectilinearGrid::GetNy  -----
131
-
132
-    //--------------------------------------------------------------------------------------
133
-    //       Class:  RectilinearGrid
134
-    //      Method:  GetNz
135
-    //--------------------------------------------------------------------------------------
136
-    int RectilinearGrid::GetNz (  ) {
137
-        return nz;
138
-    }		// -----  end of method RectilinearGrid::GetNz  -----
139
-
140
-    //--------------------------------------------------------------------------------------
141
-    //       Class:  RectilinearGrid
142
-    //      Method:  GetOx
143
-    //--------------------------------------------------------------------------------------
144
-    Real RectilinearGrid::GetOx (  ) {
145
-        return ox;
146
-    }		// -----  end of method RectilinearGrid::GetOx  -----
147
-
148
-    //--------------------------------------------------------------------------------------
149
-    //       Class:  RectilinearGrid
150
-    //      Method:  GetOy
151
-    //--------------------------------------------------------------------------------------
152
-    Real RectilinearGrid::GetOy (  ) {
153
-        return oy;
154
-    }		// -----  end of method RectilinearGrid::GetOy  -----
155
-
156
-    //--------------------------------------------------------------------------------------
157
-    //       Class:  RectilinearGrid
158
-    //      Method:  GetOz
159
-    //--------------------------------------------------------------------------------------
160
-    Real RectilinearGrid::GetOz (  ) {
161
-        return oz;
162
-    }		// -----  end of method RectilinearGrid::GetOz  -----
163
-
164
-    //--------------------------------------------------------------------------------------
165
-    //       Class:  RectilinearGrid
166
-    //      Method:  GetDx
167
-    //--------------------------------------------------------------------------------------
168
-    VectorXr RectilinearGrid::GetDx (  ) {
169
-        return dx;
170
-    }		// -----  end of method RectilinearGrid::GetDx  -----
171
-
172
-    //--------------------------------------------------------------------------------------
173
-    //       Class:  RectilinearGrid
174
-    //      Method:  GetDx
175
-    //--------------------------------------------------------------------------------------
176
-    Real RectilinearGrid::GetDx ( const int& ix  ) {
177
-        return dx[ix];
178
-    }		// -----  end of method RectilinearGrid::GetDx  -----
179
-
180
-    //--------------------------------------------------------------------------------------
181
-    //       Class:  RectilinearGrid
182
-    //      Method:  GetDy
183
-    //--------------------------------------------------------------------------------------
184
-    VectorXr RectilinearGrid::GetDy (  ) {
185
-        return dy;
186
-    }		// -----  end of method RectilinearGrid::GetDy  -----
187
-
188
-    //--------------------------------------------------------------------------------------
189
-    //       Class:  RectilinearGrid
190
-    //      Method:  GetDy
191
-    //--------------------------------------------------------------------------------------
192
-    Real RectilinearGrid::GetDy ( const int& iy  ) {
193
-        return dy[iy];
194
-    }		// -----  end of method RectilinearGrid::GetDy  -----
195
-
196
-    //--------------------------------------------------------------------------------------
197
-    //       Class:  RectilinearGrid
198
-    //      Method:  GetDz
199
-    //--------------------------------------------------------------------------------------
200
-    VectorXr RectilinearGrid::GetDz (  ) {
201
-        return dz;
202
-    }		// -----  end of method RectilinearGrid::GetDz  -----
203
-
204
-    //--------------------------------------------------------------------------------------
205
-    //       Class:  RectilinearGrid
206
-    //      Method:  GetDz
207
-    //--------------------------------------------------------------------------------------
208
-    Real RectilinearGrid::GetDz ( const int& iz  ) {
209
-        return dz[iz];
210
-    }		// -----  end of method RectilinearGrid::GetDz  -----
211
-
212
-}		// -----  end of Lemma  name  -----
213
-
214
-/* vim: set tabstop=4 expandtab: */
215
-/* vim: set filetype=cpp: */

+ 0
- 113
LemmaCore/src/RectilinearGridReader.cpp View File

@@ -1,113 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
- */
7
-
8
-/**
9
-  @file
10
-  @date      09/23/2013 11:05:48 AM
11
-  @version   $Id$
12
-  @author    Trevor Irons (ti)
13
-  @email     Trevor.Irons@xri-geo.com
14
-  @copyright Copyright (c) 2013, XRI Geophysics, LLC
15
-  @copyright Copyright (c) 2013, Trevor Irons
16
- **/
17
-
18
-#include "RectilinearGridReader.h"
19
-
20
-namespace Lemma {
21
-
22
-    // ====================  FRIEND METHODS  =====================
23
-
24
-    std::ostream &operator << (std::ostream &stream, const RectilinearGridReader &ob) {
25
-        stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
26
-        return stream;
27
-    }
28
-
29
-    // ====================  LIFECYCLE     =======================
30
-
31
-    //--------------------------------------------------------------------------------------
32
-    //       Class:  RectilinearGridReader
33
-    //      Method:  RectilinearGridReader
34
-    // Description:  constructor (protected)
35
-    //--------------------------------------------------------------------------------------
36
-    RectilinearGridReader::RectilinearGridReader ( ) : GridReader( ),
37
-        rGrid( nullptr ), Parser( nullptr ) {
38
-
39
-    }  // -----  end of method RectilinearGridReader::RectilinearGridReader  (constructor)  -----
40
-
41
-
42
-    //--------------------------------------------------------------------------------------
43
-    //       Class:  RectilinearGridReader
44
-    //      Method:  NewSP()
45
-    // Description:  constructor
46
-    //--------------------------------------------------------------------------------------
47
-    std::shared_ptr< RectilinearGridReader > RectilinearGridReader::NewSP() {
48
-        std::shared_ptr<RectilinearGridReader> sp(new  RectilinearGridReader( ), LemmaObjectDeleter() );
49
-        return sp;
50
-    }
51
-
52
-
53
-
54
-    //--------------------------------------------------------------------------------------
55
-    //       Class:  RectilinearGridReader
56
-    //      Method:  ~RectilinearGridReader
57
-    // Description:  destructor (protected)
58
-    //--------------------------------------------------------------------------------------
59
-    RectilinearGridReader::~RectilinearGridReader () {
60
-    }  // -----  end of method RectilinearGridReader::~RectilinearGridReader  (destructor)  -----
61
-
62
-    //--------------------------------------------------------------------------------------
63
-    //       Class:  RectilinearGridReader
64
-    //      Method:  ReadASCIIGridFile
65
-    //--------------------------------------------------------------------------------------
66
-    void RectilinearGridReader::ReadASCIIGridFile ( const std::string& name  ) {
67
-
68
-        rGrid = RectilinearGrid::NewSP();
69
-        Parser = ASCIIParser::NewSP();
70
-
71
-        Parser->SetCommentString("//");
72
-
73
-        Parser->Open(name);
74
-
75
-        std::vector<int> vals = Parser->ReadInts(3);
76
-        rGrid->SetDimensions(vals[0], vals[1], vals[2]);
77
-
78
-        std::vector<Real> rvals = Parser->ReadReals(3);
79
-        rGrid->SetOffset(rvals[0], rvals[1], rvals[2]);
80
-        rvals.clear();
81
-
82
-        rvals = Parser->ReadReals( vals[0] );
83
-        VectorXr temp = VectorXr::Map(&rvals[0], vals[0]);
84
-        VectorXr hx = temp;
85
-
86
-        rvals.clear();
87
-        rvals = Parser->ReadReals( vals[1] );
88
-        VectorXr hy = VectorXr::Map(&rvals[0], vals[1]);
89
-
90
-        rvals.clear();
91
-        rvals = Parser->ReadReals( vals[2] );
92
-        VectorXr hz = VectorXr::Map(&rvals[0], vals[2]);
93
-
94
-        rGrid->SetSpacing(hx, hy, hz);
95
-
96
-        // Read in model(s)/data? Where should this be done?
97
-        Parser->Close();
98
-
99
-        return;
100
-
101
-    }		// -----  end of method RectilinearGridReader::ReadSCIIGridFile  -----
102
-
103
-
104
-    //--------------------------------------------------------------------------------------
105
-    //       Class:  RectilinearGridReader
106
-    //      Method:  GetGrid
107
-    //--------------------------------------------------------------------------------------
108
-    std::shared_ptr<Grid> RectilinearGridReader::GetGrid (  ) {
109
-        return std::static_pointer_cast<Grid> (rGrid);
110
-    }		// -----  end of method RectilinearGridReader::GetGrid  -----
111
-
112
-
113
-}		// -----  end of Lemma  name  -----

+ 0
- 147
LemmaCore/src/RectilinearGridVTKExporter.cpp View File

@@ -1,147 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      09/25/2013 08:20:14 AM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     Trevor.Irons@xri-geo.com
16
- * @copyright Copyright (c) 2013, Trevor Irons
17
- */
18
-
19
-#if  LEMMAUSEVTK
20
-
21
-#include "RectilinearGridVTKExporter.h"
22
-
23
-namespace Lemma {
24
-
25
-// ====================  FRIEND METHODS  =====================
26
-
27
-std::ostream &operator << (std::ostream &stream, const RectilinearGridVTKExporter &ob) {
28
-    stream << ob.Serialize()  << "\n---\n"; // End of doc --- as a direct stream should encapulste thingy
29
-    return stream;
30
-}
31
-
32
-
33
-// ====================  LIFECYCLE     =======================
34
-
35
-//--------------------------------------------------------------------------------------
36
-//       Class:  RectilinearGridVTKExporter
37
-//      Method:  RectilinearGridVTKExporter
38
-// Description:  constructor (protected)
39
-//--------------------------------------------------------------------------------------
40
-RectilinearGridVTKExporter::RectilinearGridVTKExporter ( ) : LemmaObject( ), Grid(nullptr), VTKGrid(nullptr) {
41
-
42
-}  // -----  end of method RectilinearGridVTKExporter::RectilinearGridVTKExporter  (constructor)  -----
43
-
44
-
45
-//--------------------------------------------------------------------------------------
46
-//       Class:  RectilinearGridVTKExporter
47
-//      Method:  NewSP()
48
-// Description:  public constructor
49
-//--------------------------------------------------------------------------------------
50
-std::shared_ptr< RectilinearGridVTKExporter > RectilinearGridVTKExporter::NewSP() {
51
-    std::shared_ptr<RectilinearGridVTKExporter> sp(new  RectilinearGridVTKExporter( ), LemmaObjectDeleter() );
52
-    return sp;
53
-}
54
-
55
-
56
-
57
-//--------------------------------------------------------------------------------------
58
-//       Class:  RectilinearGridVTKExporter
59
-//      Method:  ~RectilinearGridVTKExporter
60
-// Description:  destructor (protected)
61
-//--------------------------------------------------------------------------------------
62
-RectilinearGridVTKExporter::~RectilinearGridVTKExporter () {
63
-}  // -----  end of method RectilinearGridVTKExporter::~RectilinearGridVTKExporter  (destructor)  -----
64
-
65
-//--------------------------------------------------------------------------------------
66
-//       Class:  RectilinearGridVTKExporter
67
-//      Method:  SetGrid
68
-//--------------------------------------------------------------------------------------
69
-void RectilinearGridVTKExporter::SetGrid ( std::shared_ptr<RectilinearGrid> GridIn ) {
70
-    Grid = GridIn;
71
-    // I see no harm in just doing this now.
72
-    BuildVTKRectilinearGrid();
73
-    return ;
74
-}		// -----  end of method RectilinearGridVTKExporter::SetGrid  -----
75
-
76
-//--------------------------------------------------------------------------------------
77
-//       Class:  RectilinearGridVTKExporter
78
-//      Method:  GetVTKRectilinearGrid
79
-//--------------------------------------------------------------------------------------
80
-vtkSmartPointer<vtkRectilinearGrid> RectilinearGridVTKExporter::GetVTKGrid (  ) {
81
-    return VTKGrid;
82
-}		// -----  end of method RectilinearGridVTKExporter::GetVTKRectilinearGrid  -----
83
-
84
-//--------------------------------------------------------------------------------------
85
-//       Class:  RectilinearGridVTKExporter
86
-//      Method:  WriteVTKGrid
87
-//--------------------------------------------------------------------------------------
88
-void RectilinearGridVTKExporter::WriteVTKGrid ( const std::string& fname  ) {
89
-    vtkXMLRectilinearGridWriter *gridWrite = vtkXMLRectilinearGridWriter::New();
90
-        gridWrite->SetInputData(VTKGrid);
91
-        gridWrite->SetFileName( (fname+std::string(".vtr")).c_str() );
92
-        gridWrite->Update();
93
-        gridWrite->Write();
94
-        gridWrite->Delete();
95
-    return ;
96
-}		// -----  end of method RectilinearGridVTKExporter::WriteVTKGrid  -----
97
-
98
-//--------------------------------------------------------------------------------------
99
-//       Class:  RectilinearGridVTKExporter
100
-//      Method:  BuildVTKRectilinearGrid
101
-//--------------------------------------------------------------------------------------
102
-void RectilinearGridVTKExporter::BuildVTKRectilinearGrid (  ) {
103
-
104
-    // Set Coordinate>s
105
-    vtkDoubleArray *xCoords = vtkDoubleArray::New();
106
-    xCoords->InsertNextValue(Grid->GetOx()-Grid->GetDx(0)/2.);
107
-    double xm1 = Grid->GetOx() - Grid->GetDx(0)/2.;
108
-    for (int ix=0; ix<Grid->GetNx(); ix++) {
109
-        xCoords->InsertNextValue(xm1 + Grid->GetDx(ix));
110
-        xm1 += Grid->GetDx(ix);
111
-    }
112
-
113
-    vtkDoubleArray *yCoords = vtkDoubleArray::New();
114
-    yCoords->InsertNextValue(Grid->GetOy()-Grid->GetDy(0)/2.);
115
-    double ym1 = Grid->GetOy()-Grid->GetDy(0)/2.;
116
-    for (int iy=0; iy<Grid->GetNy(); iy++) {
117
-        yCoords->InsertNextValue(ym1 + Grid->GetDy(iy));
118
-        ym1 += Grid->GetDy(iy);
119
-    }
120
-
121
-    vtkDoubleArray *zCoords = vtkDoubleArray::New();
122
-    zCoords->InsertNextValue(Grid->GetOz()-Grid->GetDz(0)/2.);
123
-    double zm1 = Grid->GetOz()-Grid->GetDz(0)/2.;
124
-    for (int iz=0; iz<Grid->GetNz(); iz++) {
125
-        zCoords->InsertNextValue(zm1 + Grid->GetDz(iz));
126
-        zm1 += Grid->GetDz(iz);
127
-    }
128
-
129
-    VTKGrid = vtkSmartPointer<vtkRectilinearGrid>::New();
130
-        VTKGrid->SetDimensions(Grid->GetNx()+1, Grid->GetNy()+1, Grid->GetNz()+1);
131
-        VTKGrid->SetXCoordinates(xCoords);
132
-        VTKGrid->SetYCoordinates(yCoords);
133
-        VTKGrid->SetZCoordinates(zCoords);
134
-
135
-    // Clean up
136
-    xCoords->Delete();
137
-    yCoords->Delete();
138
-    zCoords->Delete();
139
-
140
-    return ;
141
-}		// -----  end of method RectilinearGridVTKExporter::BuildVTKRectilinearGrid  -----
142
-
143
-
144
-
145
-}		// -----  end of Lemma  name  -----
146
-
147
-#endif     // -----  not LEMMAUSEVTK  -----

+ 0
- 83
LemmaCore/src/WindowFilter.cpp View File

@@ -1,83 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     07/20/2010
11
-  @version  $Id: windowfilter.cpp 87 2013-09-05 22:44:05Z tirons $
12
- **/
13
-
14
-#include "WindowFilter.h"
15
-
16
-namespace Lemma {
17
-
18
-    // ====================  LIFECYCLE     =======================
19
-
20
-    WindowFilter::WindowFilter( ) : Filter( ),
21
-        Width(0), SamplingRate(0), Bandwidth(0), Coefficients(),
22
-        Type(RECTANGULAR) {}
23
-
24
-    std::shared_ptr< WindowFilter > WindowFilter::NewSP() {
25
-        std::shared_ptr<WindowFilter> sp(new  WindowFilter( ), LemmaObjectDeleter() );
26
-        return sp;
27
-    }
28
-
29
-    WindowFilter::~WindowFilter() {
30
-    }
31
-
32
-
33
-    // ====================  OPERATIONS    =======================
34
-
35
-    void WindowFilter::SetWindowType(const WINDOWTYPE &type) {
36
-        Type = type;
37
-    }
38
-
39
-    void WindowFilter::SetBandwidth(const Real& width) {
40
-        Bandwidth = width;
41
-    }
42
-
43
-    void WindowFilter::SetSamplingInterval(const Real& rate) {
44
-        SamplingRate = rate;
45
-    }
46
-
47
-    int WindowFilter::GetNumberOfFrequencyBins() {
48
-        return this->Nw;
49
-    }
50
-
51
-    void WindowFilter::SetNumberOfSamples(const int& nt) {
52
-        Nt = nt;
53
-        Nw = Nt%2 ? (Nt-1)/2+1 : (Nt)/2+1;  // odd , even
54
-    }
55
-
56
-    VectorXr WindowFilter::GetFilterCoefficients() {
57
-        Real  Nyquist = .5/SamplingRate;
58
-        std::cout << "Window nyquist " << Nyquist << std::endl;
59
-        std::cout << "Window Nw  " << Nw << std::endl;
60
-        Real  df      = (Nyquist)/((Real)(Nw)); // df Hz per bin
61
-        Width         = Bandwidth/df;
62
-        Coefficients.resize(Width);
63
-        switch (Type) {
64
-            case HAMMING:
65
-           	    for (int n=0; n<Width; ++n) {
66
-		            Coefficients(n) = 0.5 * (1.- std::cos( (2.*PI*(Real)(n)) /
67
-                                       ((Real)(Width)-1.) ) );
68
-	            }
69
-                break;
70
-            case HANNING:
71
-	            for (int n=0; n<Width; ++n) {
72
-		            Coefficients(n) = 0.54 - 0.46 *
73
-                                std::cos( (2.*PI*(Real)(n)) /
74
-                                    ((Real)(Width)-1.) ) ;
75
-	            }
76
-                break;
77
-            case RECTANGULAR:
78
-                Coefficients.setOnes();
79
-                break;
80
-        }
81
-        return Coefficients;
82
-    }
83
-}		// -----  end of Lemma  name  -----

+ 0
- 36
LemmaCore/src/banner.cpp View File

@@ -1,36 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   M. Andy Kass
10
-  @date     05/03/2010
11
-  @version  $Id: banner.cpp 87 2013-09-05 22:44:05Z tirons $
12
- **/
13
-
14
-#include "banner.h"
15
-
16
-///Prints banner information to the screen
17
-void banner(const std::string &name, const std::string &version,
18
-		const std::string &usage) {
19
-
20
-	std::cout << std::endl;
21
-	std::cout << "  " << name.c_str() << version.c_str() << std::endl;
22
-	std::cout << std::endl;
23
-	std::cout << "  A program built from Lemma v 1.0b" << std::endl;
24
-	std::cout << "  Usage: " << usage.c_str() << std::endl;
25
-	std::cout << std::endl;
26
-	std::cout << "  Developed jointly by the Center for Gravity, " <<
27
-		"Electrical, and Magnetic" <<std::endl;
28
-	std::cout << "   Studies (CGEM), the United States Geologic " <<
29
-		"Survey (USGS), and Broken" << std::endl;
30
-	std::cout << "   Spoke Development, LLC." <<std::endl;
31
-	std::cout << std::endl;
32
-	std::cout << "  (C) Copyright 2010, Trevor Irons and M. Andy Kass.  " <<
33
-		"Some rights reserved." << std::endl;
34
-	std::cout << "  Please see license for details." << std::endl;
35
-	std::cout << std::endl;
36
-}

+ 0
- 201
LemmaCore/src/helper.cpp View File

@@ -1,201 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      10/02/2014 03:21:07 PM
13
- * @version   $Id$
14
- * @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
18
- */
19
-
20
-#include "helper.h"
21
-
22
-namespace Lemma {
23
-
24
-std::string enum2String(const FREQUENCYUNITS& FreqUnits) {
25
-    std::string t;
26
-    switch (FreqUnits) {
27
-        case HZ:
28
-            t = std::string("HZ");
29
-            break;
30
-        case KHZ:
31
-            t = std::string("KHZ");
32
-            break;
33
-        case MHZ:
34
-            t = std::string("MHZ");
35
-            break;
36
-        case GHZ:
37
-            t = std::string("GHZ");
38
-            break;
39
-    }
40
-    return t;
41
-}
42
-
43
-std::string enum2String(const TIMEUNITS& Units) {
44
-    std::string t;
45
-    switch (Units) {
46
-        case SEC:
47
-            t = std::string("SEC");
48
-            break;
49
-        case MILLISEC:
50
-            t = std::string("MILLISEC");
51
-            break;
52
-        case MICROSEC:
53
-            t = std::string("MICROSEC");
54
-            break;
55
-        case NANOSEC:
56
-            t = std::string("NANOSEC");
57
-            break;
58
-        case PICOSEC:
59
-            t = std::string("PICOSEC");
60
-            break;
61
-    }
62
-    return t;
63
-}
64
-
65
-
66
-std::string enum2String(const MAGUNITS& Units) {
67
-    std::string t;
68
-    switch (Units) {
69
-        case TESLA:
70
-            t = std::string("TESLA");
71
-            break;
72
-        case NANOTESLA:
73
-            t = std::string("NANOTESLA");
74
-            break;
75
-        case GAUSS:
76
-            t = std::string("GAUSS");
77
-            break;
78
-    }
79
-    return t;
80
-}
81
-
82
-std::string enum2String(const FIELDCALCULATIONS& Field) {
83
-    std::string t;
84
-    switch (Field) {
85
-        case E:
86
-            t = std::string("E");
87
-            break;
88
-        case H:
89
-            t = std::string("H");
90
-            break;
91
-        case BOTH:
92
-            t = std::string("BOTH");
93
-            break;
94
-    }
95
-    return t;
96
-}
97
-
98
-
99
-std::string enum2String(const TEMPUNITS& Units) {
100
-    std::string t;
101
-    switch (Units) {
102
-        case CELCIUS:
103
-            t = std::string("CELCIUS");
104
-            break;
105
-        case KELVIN:
106
-            t = std::string("KELVIN");
107
-            break;
108
-    }
109
-    return t;
110
-}
111
-
112
-std::string enum2String(const FIELDCOMPONENT& Comp) {
113
-    std::string t;
114
-    switch (Comp) {
115
-        case XCOMPONENT:
116
-            t = std::string("XCOMPONENT");
117
-            break;
118
-        case YCOMPONENT:
119
-            t = std::string("YCOMPONENT");
120
-            break;
121
-        case ZCOMPONENT:
122
-            t = std::string("ZCOMPONENT");
123
-            break;
124
-    }
125
-    return t;
126
-}
127
-
128
-std::string enum2String(const HANKELTRANSFORMTYPE& Type) {
129
-    std::string t;
130
-    switch (Type) {
131
-        case ANDERSON801:
132
-            t = std::string("ANDERSON801");
133
-            break;
134
-        case CHAVE:
135
-            t = std::string("CHAVE");
136
-            break;
137
-        case QWEKEY:
138
-            t = std::string("QWEKEY");
139
-            break;
140
-        case FHTKEY201:
141
-            t = std::string("FHTKEY201");
142
-            break;
143
-        case FHTKEY101:
144
-            t = std::string("FHTKEY101");
145
-            break;
146
-        case FHTKEY51:
147
-            t = std::string("FHTKEY51");
148
-            break;
149
-    }
150
-    return t;
151
-}
152
-
153
-template<>
154
-FREQUENCYUNITS string2Enum<FREQUENCYUNITS>( const std::string& str ) {
155
-    if       (str ==  "HZ") return   HZ;
156
-    else if  (str == "KHZ") return  KHZ;
157
-    else if  (str == "MHZ") return  MHZ;
158
-    else if  (str == "GHZ") return  GHZ;
159
-    else {
160
-        throw std::runtime_error("string not recognized as FREUENCYUNIT");
161
-    }
162
-}
163
-
164
-template<>
165
-HANKELTRANSFORMTYPE string2Enum<HANKELTRANSFORMTYPE>( const std::string& str ) {
166
-    if       (str ==  "ANDERSON801") return   ANDERSON801;
167
-    else if  (str == "CHAVE") return  CHAVE;
168
-    else if  (str == "QWEKEY") return  QWEKEY;
169
-    else if  (str == "FHTKEY201") return  FHTKEY201;
170
-    else if  (str == "FHTKEY51") return  FHTKEY51;
171
-    else if  (str == "FHTKEY101") return  FHTKEY101;
172
-    else {
173
-        throw std::runtime_error("string not recognized as HANKELTRANSFORMTYPE");
174
-    }
175
-}
176
-
177
-
178
-template<>
179
-TIMEUNITS string2Enum<TIMEUNITS>( const std::string& str ) {
180
-    if       (str == "SEC")      return      SEC;
181
-    else if  (str == "MILLISEC") return MILLISEC;
182
-    else if  (str == "MICROSEC") return MICROSEC;
183
-    else if  (str == "NANOSEC")  return  NANOSEC;
184
-    else if  (str == "PICOSEC")  return  PICOSEC;
185
-    else {
186
-        throw std::runtime_error("string not recognized as TIMEUNIT");
187
-    }
188
-}
189
-
190
-template<>
191
-FIELDCOMPONENT string2Enum<FIELDCOMPONENT>( const std::string& str) {
192
-    if       (str == "XCOMPONENT")      return XCOMPONENT;
193
-    else if  (str == "YCOMPONENT")      return YCOMPONENT;
194
-    else if  (str == "ZCOMPONENT")      return ZCOMPONENT;
195
-    else {
196
-        throw std::runtime_error("string not recognized as FieldComponent");
197
-    }
198
-}
199
-
200
-}		// -----  end of Lemma  name  -----
201
-

+ 0
- 11
LemmaCore/testing/CMakeLists.txt View File

@@ -1,11 +0,0 @@
1
-#add_executable(testOne testOne.cpp)
2
-#add_executable(testTwo testTwo.cpp)
3
-#add_test( testLemmaCoreOne testOne )
4
-#add_test( testLemmaCoreTwo testTwo )
5
-
6
-CXXTEST_ADD_TEST(unittest_GetNameCheck GetNameCheck.cc ${CMAKE_CURRENT_SOURCE_DIR}/GetNameCheck.h)
7
-target_link_libraries(unittest_GetNameCheck "lemmacore")
8
-
9
-CXXTEST_ADD_TEST(unittest_SerializeCheck SerializeCheck.cc ${CMAKE_CURRENT_SOURCE_DIR}/SerializeCheck.h)
10
-target_link_libraries(unittest_SerializeCheck "lemmacore")
11
- 

+ 0
- 69
LemmaCore/testing/GetNameCheck.h View File

@@ -1,69 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      06/16/2016 09:12:46 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-#include <cxxtest/TestSuite.h>
21
-#include <LemmaCore>
22
-
23
-using namespace Lemma;
24
-
25
-class MyTestSuite : public CxxTest::TestSuite
26
-{
27
-    public:
28
-
29
-    void testASCIIParser( void )
30
-    {
31
-        auto Obj = ASCIIParser::NewSP();
32
-        TS_ASSERT_EQUALS( Obj->GetName(), std::string("ASCIIParser") );
33
-    }
34
-
35
-    void testCubicSplineInterpolator(void)
36
-    {
37
-        auto Obj = CubicSplineInterpolator::NewSP();
38
-        TS_ASSERT_EQUALS( Obj->GetName(), std::string("CubicSplineInterpolator") );
39
-    }
40
-
41
-    void testRectilinearGrid( void )
42
-    {
43
-        auto Obj = RectilinearGrid::NewSP();
44
-        TS_ASSERT_EQUALS( Obj->GetName(), std::string("RectilinearGrid") );
45
-    }
46
-
47
-    void testRectilinearGridReader( void )
48
-    {
49
-        auto Obj = RectilinearGridReader::NewSP();
50
-        TS_ASSERT_EQUALS( Obj->GetName(), std::string("RectilinearGridReader") );
51
-    }
52
-
53
-// INCLUDE GUARDS DON'T WORK WITH CXXTEST, NEED TO MOVE VTK TESTS OUT
54
-// #ifdef LEMMAUSEVTK
55
-//     void testRectilinearGridVTKExporter( void )
56
-//     {
57
-//         auto Obj = RectilinearGridVTKExporter::NewSP();
58
-//         TS_ASSERT_EQUALS( Obj->GetName(), std::string("RectilinearGridVTKExporter") );
59
-//     }
60
-// #endif
61
-
62
-    void testWindowFilter( void )
63
-    {
64
-        auto Obj = WindowFilter::NewSP();
65
-        TS_ASSERT_EQUALS( Obj->GetName(), std::string("WindowFilter") );
66
-    }
67
-
68
-};
69
-

+ 0
- 75
LemmaCore/testing/SerializeCheck.h View File

@@ -1,75 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      06/16/2016 09:12:46 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-#include <cxxtest/TestSuite.h>
21
-#include <LemmaCore>
22
-
23
-using namespace Lemma;
24
-
25
-class MyTestSuite : public CxxTest::TestSuite
26
-{
27
-    public:
28
-
29
-    void testASCIIParser( void )
30
-    {
31
-        auto Obj = ASCIIParser::NewSP();
32
-        YAML::Node node = Obj->Serialize();
33
-        auto Obj2 = ASCIIParser::DeSerialize(node);
34
-        TS_ASSERT_EQUALS( Obj->GetName(), Obj2->GetName() );
35
-    }
36
-
37
-
38
-    void testCubicSplineInterpolator(void)
39
-    {
40
-        auto Obj = CubicSplineInterpolator::NewSP();
41
-        YAML::Node node = Obj->Serialize();
42
-        auto Obj2 = CubicSplineInterpolator::DeSerialize(node);
43
-        TS_ASSERT_EQUALS( Obj->GetName(), Obj2->GetName() );
44
-    }
45
-
46
-    void testRectilinearGrid( void )
47
-    {
48
-        auto Obj = RectilinearGrid::NewSP();
49
-        YAML::Node node = Obj->Serialize();
50
-        auto Obj2 = RectilinearGrid::DeSerialize(node);
51
-        TS_ASSERT_EQUALS( Obj->GetName(), Obj2->GetName() );
52
-    }
53
-
54
-// /*
55
-//     void testRectilinearGridReader( void )
56
-//     {
57
-//         auto Obj = RectilinearGridReader::NewSP();
58
-//         TS_ASSERT_EQUALS( Obj->GetName(), std::string("RectilinearGridReader") );
59
-//     }
60
-//
61
-//     void testRectilinearGridVTKExporter( void )
62
-//     {
63
-//         auto Obj = RectilinearGridVTKExporter::NewSP();
64
-//         TS_ASSERT_EQUALS( Obj->GetName(), std::string("RectilinearGridVTKExporter") );
65
-//     }
66
-//
67
-//     void testWindowFilter( void )
68
-//     {
69
-//         auto Obj = WindowFilter::NewSP();
70
-//         TS_ASSERT_EQUALS( Obj->GetName(), std::string("WindowFilter") );
71
-//     }
72
-// */
73
-
74
-};
75
-

+ 0
- 23
LemmaCore/testing/testOne.cpp View File

@@ -1,23 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      06/14/2016 09:30:38 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-int main() {
21
-    return 0;
22
-}
23
-

+ 0
- 23
LemmaCore/testing/testTwo.cpp View File

@@ -1,23 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      06/14/2016 09:43:43 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-int main() {
21
-    return 0;
22
-}
23
-

LemmaCore/include/LemmaCore.h → Modules/FDEM1D/FDEM1D.dox View File

@@ -10,7 +10,6 @@
10 10
 /**
11 11
  * @file
12 12
  * @date      09/15/2016 04:28:16 PM
13
- * @version   $Id$
14 13
  * @author    Trevor Irons (ti)
15 14
  * @email     tirons@egi.utah.edu
16 15
  * @copyright Copyright (c) 2016, University of Utah
@@ -18,8 +17,8 @@
18 17
  */
19 18
 
20 19
 /**
21
-    \defgroup LemmaCore LemmaCore
22
-    @brief    LemmaCore provides the general framework and skeleton for applications.
23
-    @details  This module is the glue holding Lemma together.
20
+    \defgroup FDEM1D FDEM1D
21
+    @brief    FDEM1D provides 1D frequency-domain EM capabilities.
22
+    @details  FDEM1D provides classes and methods for 1D EM calculations.
24 23
 */
25 24
 

+ 0
- 1
Modules/FDEM1D/README View File

@@ -1 +0,0 @@
1
-Frequency Domain EM in 1D

+ 19
- 30
Modules/LemmaCore/include/lemma.h View File

@@ -20,11 +20,10 @@
20 20
     <B>E</B>lectro<B>M</B>agnetics <B>M</B>odelling <B>A</B>PI.
21 21
     Lemma is a cross-platform library delivering an expressive API that
22 22
     can be used to easily create versatile programs.
23
-    We are building a powerful, flexible,
24
-    expresive framework that allows for the straightforward creation of
25
-    geophysical EM applications. Lemma is not itself a program, instead
26
-    it is a collection of building blocks to make applications.
27
-    We chose this name because:
23
+    We are building a powerful, flexible, expresive framework that allows
24
+    for the straightforward creation of geophysical EM applications.
25
+    Lemma is not itself a program, instead it is a collection of building
26
+    blocks to make applications. We chose this name because:
28 27
 
29 28
     - In mathematics a Lemma is a proven proposition which is used as a
30 29
     stepping stone to a larger result rather than as a statement in-and-of
@@ -46,14 +45,6 @@
46 45
     providing a set of general tools users can easily assemble applications
47 46
     that suite their needs.
48 47
 
49
-    While most geophysical EM modeling packages are concerned with forward
50
-    modeling <B>DATA</B> between specific transmitters and receivers located
51
-    on the surface of the earth; Lemma is fundamentally concerned with
52
-    modelling <B>FIELDS</B> due to sources, the field values can be calculated
53
-    everywhere within the domain. This allows for solving multiphysics EM
54
-    problems. Tradional EM data may be forward modelled using the Lemma::Instrument
55
-    classes.
56
-
57 48
     \section Capabilities Capabilities
58 49
     In the long term, we have many goals for this software project. Due to its
59 50
     design, Lemma can be built upon and extended easily. The initial aim is to
@@ -107,10 +98,6 @@
107 98
     ElectroMagnetics. The following modules utilise parts of Lemma to provide
108 99
     their functionality.
109 100
 
110
-    \subsection Merlin Merlin.
111
-    This module provides nuclear magnetic resonance functionality.
112
-
113
-
114 101
     \section Tutorials
115 102
         - \ref Tutorial - Basic intruduction to Lemma, including aquiring and
116 103
           compiling the code, class structure, and building your own
@@ -119,34 +106,35 @@
119 106
 
120 107
 
121 108
     \section Development Development and design
122
-    Ths package is primarily being developed by the Center for Gravity,
123
-    Electrical, and Magnetic Studies (CGEM) at the Colorado School of Mines (CSM), the United
124
-    States Geological Survey (USGS), and Broken Spoke Development, LLC. It draws on work by
125
-    many others including Ki Ha Lee, and Walt Anderson. All new work and
109
+    Ths package was initially developed by the Center for Gravity, Electrical, and
110
+    Magnetic Studies (CGEM) at the Colorado School of Mines (CSM), the United
111
+    States Geological Survey (USGS), and Broken Spoke Development, LLC. Where it drew
112
+    on work by many others including Ki Ha Lee, and Walt Anderson. All new work and
126 113
     interfaces are written entirely in C++. Several small external projects are
127 114
     included, which are written in standard C, and FORTRAN 77. We adapt a
128 115
     modern, test driven, object oriented, C++ framework.
116
+    More recent development has been undertaken at the University of Utah through the Energy
117
+    and Geoscience Institute.
129 118
 
130 119
     \section Legalities
131 120
 
132 121
     \subsection Copyrights
133 122
     The following copyrights apply to the source.
134 123
     Most of the code was developed either by Trevor
135
-    Copyright (C) 2008-2010 Trevor Irons <tirons@mines.edu> or
136
-    M. Andrew Kass Copyright (C) 2010 <mkass@numericalgeo.com>.
124
+    Copyright (C) 2008-2010 Trevor Irons <trevor.irons@lemmasoftware.org> or
125
+    M. Andrew Kass Copyright (C) 2010 <mkass@usgs.gov>.
137 126
 
138
-    The 1D EM solver was derived (but updated heavily) from a fortran
127
+    The 1D EM solver was derived (but updated heavily) from a Fortran
139 128
     programme written by Ki Ha Lee in 1984. We have communicated with Ki Ha,
140 129
     and he assured us that this code is in the public domian.
141 130
 
142 131
     A Gaussian quadrature hankel transform originally written by Alan Chave was
143
-    ported to C++. This code is in the public domain, and was published in Geophysics.
132
+    ported to C++. This code is in the public domain, and the source code was
133
+    published in Geophysics.
144 134
 
145 135
     A digital filtering approach to the Hankel transform written by Walt
146
-    Anderson was also rewritten for Lemma. The origional fortran code is also in
147
-    the public domain. Using this Hankel transform works
148
-    arround the copyright issue mentioned above, but may not produce accurate
149
-    results for high frequencies.
136
+    Anderson was also rewritten for Lemma. The original Fortran code is also in
137
+    the public domain.
150 138
 
151 139
     Please note that Ki Ha Lee and Walt Anderson had no part in this work, and
152 140
     the above should not be interpreted as any sort of endorsement by those
@@ -166,9 +154,10 @@
166 154
 
167 155
     \section Useful Useful links
168 156
         - Home page https://lemmasoftware.org
169
-        - SVN repository https://svn.lemmasoftware.org
157
+        - Git repository https://git.lemmasoftware.org
170 158
         - Broken Spoke Develpment http://numericalgeo.com
171 159
         - CGEM at the Coloroado School of Mines http://geophysics.mines.edu/cgem/
160
+        - EGI at the Eniversity of Utah http://egi.utah.edu/
172 161
 **/
173 162
 
174 163
 #pragma once

+ 0
- 1
Modules/LemmaCore/src/CMakeLists.txt View File

@@ -1,7 +1,6 @@
1 1
 set (SOURCE 
2 2
 	${SOURCE}
3 3
 	${CMAKE_CURRENT_SOURCE_DIR}/helper.cpp
4
-	${CMAKE_CURRENT_SOURCE_DIR}/banner.cpp
5 4
 	${CMAKE_CURRENT_SOURCE_DIR}/ASCIIParser.cpp
6 5
 	${CMAKE_CURRENT_SOURCE_DIR}/CubicSplineInterpolator.cpp
7 6
 	${CMAKE_CURRENT_SOURCE_DIR}/Data.cpp

+ 0
- 26
include/LemmaConfig.h.in View File

@@ -1,26 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      01/15/2016 09:52:10 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-// the configured options and settings for Tutorial
21
-#define LEMMA_VERSION_MAJOR @LEMMA_VERSION_MAJOR@
22
-#define LEMMA_VERSION_MINOR @LEMMA_VERSION_MINOR@
23
-#define LEMMA_VERSION_PATCH @LEMMA_VERSION_PATCH@
24
-//#define LEMMA_VERSION @LEMMA_VERSION@
25
-
26
-

+ 0
- 24
include/modules.h View File

@@ -1,24 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API */
2
-
3
-/* This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
-
7
-/**
8
-  @file
9
-  @author   Trevor Irons
10
-  @date     11/26/2010
11
-  @version  $Id: modules.h 87 2013-09-05 22:44:05Z tirons $
12
- **/
13
-
14
-/**
15
-      \defgroup Merlin Merlin
16
-      @brief    Merlin is a nuclear magnetic resonance module.
17
-      @details  Much of Merlin focuses on surface, or earth's field NMR (SNMR)
18
-       but many of the algorithms may be extended to general NMR.
19
-
20
-     \defgroup Wavelet Wavelet
21
-      @brief    A wavlet transfer module.
22
-      @details  Provides multidimensional wavelet transforms and solver routines.
23
- */
24
-

+ 0
- 33
src/myTestSuite.h View File

@@ -1,33 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      06/14/2016 10:06:34 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-// MyTestSuite.h
21
-#include <cxxtest/TestSuite.h>
22
-
23
-class MyTestSuite : public CxxTest::TestSuite
24
-{
25
-    public:
26
-    void testAddition( void )
27
-    {
28
-        TS_ASSERT( 1 + 1 > 1 );
29
-        TS_ASSERT( 3 - 1 > 1 );
30
-        TS_ASSERT_EQUALS( 1 + 1, 2 );
31
-    }
32
-};
33
-

+ 0
- 29
src/test.cpp View File

@@ -1,29 +0,0 @@
1
-/* This file is part of Lemma, a geophysical modelling and inversion API.
2
- * More information is available at http://lemmasoftware.org
3
- */
4
-
5
-/* This Source Code Form is subject to the terms of the Mozilla Public
6
- * License, v. 2.0. If a copy of the MPL was not distributed with this
7
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
- */
9
-
10
-/**
11
- * @file
12
- * @date      01/15/2016 09:54:13 PM
13
- * @version   $Id$
14
- * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
16
- * @copyright Copyright (c) 2016, University of Utah
17
- * @copyright Copyright (c) 2016, Trevor Irons & Lemma Software, LLC
18
- */
19
-
20
-#include <iostream>
21
-#include "LemmaConfig.h"
22
-#include "lemma.h"
23
-
24
-using namespace Lemma;
25
-
26
-int main() {
27
-    std::cout << "Hello Lemma " << LEMMA_VERSION_MAJOR << "\t" << LEMMA_VERSION_MINOR << std::endl;
28
-}
29
-

+ 0
- 1
test View File

@@ -1 +0,0 @@
1
-Here is a test

Loading…
Cancel
Save