enumerate.cpp
Go to the documentation of this file.00001 #include <iostream>
00002 #include <fstream>
00003 #include <algorithm>
00004 #include <numeric>
00005 #include <boost/bind.hpp>
00006 #include <boost/shared_ptr.hpp>
00007 #include "Iso1DMTObjective.h"
00008 #include "MTStation.h"
00009 #include "C1DRecObjective.h"
00010 #include "SeismicDataComp.h"
00011 #include "gentypes.h"
00012 #include "convert.h"
00013 #include "NetCDFTools.h"
00014 #include "VecMat.h"
00015 #include "SeisTools.h"
00016 using namespace std;
00017
00018
00019
00020
00021 int main()
00022 {
00023 ofstream outfile;
00024 MTStation MTData;
00025
00026
00027 const int nlayers = 2;
00028 ttranscribed mtvalues(nlayers *2 ),recvalues(nlayers *2);
00029 double mtresult, recresult;
00030
00031 MTData.GetData("nobias.mtt");
00032 boost::shared_ptr<const SeismicDataComp> RecData(new SeismicDataComp("smp.rec", SeismicDataComp::sac));
00033 Normalize(const_cast<SeismicDataComp*>(RecData.get())->GetData());
00034
00035 outfile.open("misfit.2d");
00036 Iso1DMTObjective MTObjective(MTData);
00037 MTObjective.AppendFitParameters(&MTTensor::GetRhoxy, &MTTensor::GetdRhoxy, 0.05);
00038
00039 C1DRecObjective RecObjective(RecData,0, 4.0, 0.001, 0.07);
00040 RecObjective.SetPoisson(sqrt(3.0));
00041 RecObjective.SetTimeWindow(1.0,30.0);
00042 RecObjective.SetErrorLevel(0.02);
00043
00044 mtvalues(0) = 2;
00045 mtvalues(1) = 1.3;
00046 mtvalues(2) = 20;
00047 mtvalues(3) = 10;
00048 recvalues(0) = 20;
00049 recvalues(1) = 0;
00050 recvalues(2) = 3.46;
00051 recvalues(3) = 4.6;
00052 double jbase = 25;
00053 double velbase = 3.0;
00054 double resbase = 1.5;
00055 string filename;
00056 const int thicksteps = 50;
00057 const int velsteps = 100;
00058
00059 gplib::rmat mtfit(thicksteps,velsteps), recfit(thicksteps,velsteps);
00060 gplib::rvec thicknesses(thicksteps), velocities(velsteps), resistivities(velsteps);
00061 ofstream recthick("rec.thick");
00062 for (int j = 0; j < thicksteps; ++j)
00063 {
00064 double currthick =jbase + 0.5*j;
00065
00066 mtvalues(2) = currthick;
00067 recvalues(0) = currthick;
00068 thicknesses(j) =currthick;
00069 cout << "J: " << j << endl;
00070 for (int k = 0; k < velsteps; ++k)
00071 {
00072 double currres = resbase + 0.01*k;
00073 double currvel = velbase + 0.01*k;
00074 velocities(k) = currvel;
00075 resistivities(k) = currres;
00076 mtvalues(0) = currres;
00077 recvalues(2) = currvel;
00078
00079 filename = "out"+stringify(currthick)+stringify(currvel);
00080 recresult = RecObjective.CalcPerformance(recvalues);
00081 mtresult = MTObjective.CalcPerformance(mtvalues);
00082 recfit(j,k) = recresult;
00083 mtfit(j,k) = mtresult;
00084 RecObjective.WriteData(filename+".rec");
00085 RecObjective.WriteModel(filename+".mod");
00086 }
00087 outfile << endl << endl;
00088 }
00089 Write2DDataAsNetCDF("mt.nc",mtfit, thicknesses, resistivities,"Thickness", "Resistivity", "Misfit");
00090 Write2DDataAsNetCDF("rec.nc",recfit, thicknesses, velocities,"Thickness", "Velocity", "Misfit");
00091 outfile.close();
00092 }