Merge branch 'FDEMrefactor' of https://github.com/simpeg/simpegmt into FDEMrefactor

This commit is contained in:
Lindsey Heagy committed 2015-07-07 21:16:47 -05:00
commit c72e3f5a80
63 files changed
+121702 -317

No files matched your search

+1
View File
@@ -42,3 +42,4 @@ nosetests.xml
*.sublime-workspace
docs/_build/
*.ipynb_checkpoints
notebooks/scipy2015/001-Inversion_NoStopping.npy
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -31,26 +31,30 @@
},
"outputs": [],
"source": [
"## Setup the modelling\n",
"# Setting up 1D mesh and conductivity models to forward model data.\n",
"\n",
"# Frequency\n",
"nFreq = 31\n",
"freqs = np.logspace(3,-3,nFreq)\n",
"# Set mesh parameters\n",
"ct = 10\n",
"air = simpeg.Utils.meshTensor([(ct,25,1.3)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,5,-1.2)]),np.ones((3,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],25,-1.3)])\n",
"ct = 20\n",
"air = simpeg.Utils.meshTensor([(ct,16,1.4)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,10,-1.3)]),np.ones((5,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],10,-1.4)])\n",
"x0 = -np.array([np.sum(np.concatenate((core,bot)))])\n",
"# Make the model\n",
"m1d = simpeg.Mesh.TensorMesh([np.concatenate((bot,core,air))], x0=x0)\n",
"\n",
"# Setup model varibles\n",
"active = m1d.vectorCCx<0.\n",
"layer1 = (m1d.vectorCCx<-200.) & (m1d.vectorCCx>=-600.)\n",
"layer2 = (m1d.vectorCCx<-2000.) & (m1d.vectorCCx>=-4000.)\n",
"layer1 = (m1d.vectorCCx<-500.) & (m1d.vectorCCx>=-800.)\n",
"layer2 = (m1d.vectorCCx<-3500.) & (m1d.vectorCCx>=-5000.)\n",
"# Set the conductivity values\n",
"sig_half = 2e-3\n",
"sig_air = 1e-8\n",
"sig_layer1 = 1\n",
"sig_layer2 = .1\n",
"sig_layer1 = .2\n",
"sig_layer2 = .2\n",
"# Make the true model\n",
"sigma_true = np.ones(m1d.nCx)*sig_air\n",
"sigma_true[active] = sig_half\n",
@@ -63,8 +67,7 @@
"sigma_0[active] = sig_half\n",
"m_0 = np.log(sigma_0[active])\n",
"\n",
"\n",
"# Set the mapping# Set the mapping\n",
"# Set the mapping\n",
"actMap = simpeg.Maps.ActiveCells(m1d, active, np.log(1e-8), nC=m1d.nCx)\n",
"mappingExpAct = simpeg.Maps.ExpMap(m1d) * actMap"
]
Binary file not shown.
Binary file not shown.
@@ -38,23 +38,23 @@
"nFreq = 31\n",
"freqs = np.logspace(3,-3,nFreq)\n",
"# Set mesh parameters\n",
"ct = 10\n",
"air = simpeg.Utils.meshTensor([(ct,25,1.3)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,5,-1.2)]),np.ones((3,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],25,-1.3)])\n",
"ct = 20\n",
"air = simpeg.Utils.meshTensor([(ct,16,1.4)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,10,-1.3)]),np.ones((5,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],10,-1.4)])\n",
"x0 = -np.array([np.sum(np.concatenate((core,bot)))])\n",
"# Make the model\n",
"m1d = simpeg.Mesh.TensorMesh([np.concatenate((bot,core,air))], x0=x0)\n",
"\n",
"# Setup model varibles\n",
"active = m1d.vectorCCx<0.\n",
"layer1 = (m1d.vectorCCx<-200.) & (m1d.vectorCCx>=-600.)\n",
"layer2 = (m1d.vectorCCx<-2000.) & (m1d.vectorCCx>=-4000.)\n",
"layer1 = (m1d.vectorCCx<-500.) & (m1d.vectorCCx>=-800.)\n",
"layer2 = (m1d.vectorCCx<-3500.) & (m1d.vectorCCx>=-5000.)\n",
"# Set the conductivity values\n",
"sig_half = 2e-3\n",
"sig_air = 1e-8\n",
"sig_layer1 = 1\n",
"sig_layer2 = .1\n",
"sig_layer1 = .2\n",
"sig_layer2 = .2\n",
"# Make the true model\n",
"sigma_true = np.ones(m1d.nCx)*sig_air\n",
"sigma_true[active] = sig_half\n",
@@ -123,14 +123,14 @@
"# Assign the datas to the survey object\n",
"survey.dtrue = d_true\n",
"survey.dobs = d_obs\n",
"survey.std = survey.dobs*0 + std\n",
"survey.std = np.abs(survey.dobs*std) + 0.01*np.linalg.norm(survey.dobs) #survey.dobs*0 + std\n",
"# Assign the data weight\n",
"survey.Wd = 1/(abs(survey.dobs)*survey.std)"
"survey.Wd = 1/survey.std #(abs(survey.dobs)*survey.std)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"execution_count": 5,
"metadata": {
"collapsed": false
},
@@ -149,13 +149,15 @@
"dmis = simpeg.DataMisfit.l2_DataMisfit(survey)\n",
"# Regularization\n",
"# Note: We want you use a mesh the corresponds to the domain we want to solve, the active cells.\n",
"if False:\n",
"if True:\n",
" regMesh = simpeg.Mesh.TensorMesh([m1d.hx[problem.mapping.sigmaMap.maps[-1].indActive]],m1d.x0)\n",
" reg = simpeg.Regularization.Tikhonov(regMesh)\n",
"else:\n",
" reg = simpeg.Regularization.Tikhonov(m1d,mapping=mappingExpAct)\n",
"reg.alpha_s = 1e-8\n",
"reg.smoothModel = True\n",
"reg.alpha_s = 1e-7\n",
"reg.alpha_x = 1.\n",
"# reg.alpha_xx = 0.001\n",
"# Inversion problem\n",
"invProb = simpeg.InvProblem.BaseInvProblem(dmis, reg, opt)\n",
"invProb.counter = C\n",
@@ -163,14 +165,14 @@
"beta = simpeg.Directives.BetaSchedule()\n",
"betaest = simpeg.Directives.BetaEstimate_ByEig(beta0_ratio=0.75)\n",
"saveModel = simpeg.Directives.SaveModelEveryIteration()\n",
"saveModel.fileName = 'Inversion_NoStopping'\n",
"saveModel.fileName = 'Inversion_NoStoppingregMesh_smoothTrue'\n",
"# Create an inversion object\n",
"inv = simpeg.Inversion.BaseInversion(invProb, directiveList=[beta,betaest,saveModel]) \n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": false
@@ -184,46 +186,46 @@
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.l2_DataMisfit is creating default weightings for Wd.\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_NoStopping.npy'\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_NoStoppingregMesh_smoothTrue.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 3.97e+05 1.32e+06 1.77e-07 1.32e+06 3.23e+05 0 \n",
" 1 3.97e+05 1.89e+05 3.57e-07 1.89e+05 4.74e+04 0 \n",
" 2 3.97e+05 3.88e+04 4.77e-06 3.88e+04 1.11e+04 0 Skip BFGS \n",
" 3 4.96e+04 3.69e+04 5.13e-06 3.69e+04 1.05e+04 0 Skip BFGS \n",
" 4 4.96e+04 2.71e+04 8.22e-06 2.71e+04 7.80e+03 0 Skip BFGS \n",
" 5 4.96e+04 2.34e+04 1.04e-05 2.34e+04 6.80e+03 0 Skip BFGS \n",
" 6 6.21e+03 2.11e+04 1.23e-05 2.11e+04 6.19e+03 0 Skip BFGS \n",
" 7 6.21e+03 1.27e+04 2.87e-05 1.27e+04 3.95e+03 0 Skip BFGS \n",
" 8 6.21e+03 1.07e+04 3.77e-05 1.07e+04 3.41e+03 0 Skip BFGS \n",
" 9 7.76e+02 9.53e+03 4.53e-05 9.53e+03 3.09e+03 0 Skip BFGS \n",
" 10 7.76e+02 5.51e+03 1.06e-04 5.51e+03 1.97e+03 0 Skip BFGS \n",
" 11 7.76e+02 4.57e+03 1.39e-04 4.57e+03 1.69e+03 0 Skip BFGS \n",
" 12 9.70e+01 4.02e+03 1.66e-04 4.02e+03 1.53e+03 0 Skip BFGS \n",
" 13 9.70e+01 2.27e+03 3.59e-04 2.27e+03 9.73e+02 0 Skip BFGS \n",
" 14 9.70e+01 1.83e+03 4.62e-04 1.83e+03 8.24e+02 0 Skip BFGS \n",
" 15 1.21e+01 1.57e+03 5.44e-04 1.57e+03 7.36e+02 0 Skip BFGS \n",
" 16 1.21e+01 8.91e+02 1.06e-03 8.91e+02 4.57e+02 0 Skip BFGS \n",
" 17 1.21e+01 6.95e+02 1.35e-03 6.95e+02 3.66e+02 0 Skip BFGS \n",
" 18 1.51e+00 5.92e+02 1.57e-03 5.92e+02 3.13e+02 0 Skip BFGS \n",
" 19 1.51e+00 3.56e+02 2.57e-03 3.56e+02 1.75e+02 0 Skip BFGS \n",
" 20 1.51e+00 3.22e+02 3.06e-03 3.22e+02 1.53e+02 0 Skip BFGS \n",
" 21 1.89e-01 2.75e+02 3.38e-03 2.75e+02 1.25e+02 0 \n",
" 22 1.89e-01 1.98e+02 4.78e-03 1.98e+02 8.83e+01 0 Skip BFGS \n",
" 23 1.89e-01 1.51e+02 5.79e-03 1.51e+02 7.53e+01 0 \n",
" 24 2.37e-02 1.19e+02 6.62e-03 1.19e+02 6.26e+01 0 Skip BFGS \n",
" 25 2.37e-02 8.19e+01 1.04e-02 8.19e+01 4.51e+01 0 Skip BFGS \n",
" 26 2.37e-02 7.08e+01 1.12e-02 7.08e+01 3.79e+01 1 \n",
" 27 2.96e-03 5.49e+01 1.16e-02 5.49e+01 3.51e+01 0 \n",
" 28 2.96e-03 4.67e+01 1.23e-02 4.67e+01 3.03e+01 1 \n",
" 29 2.96e-03 3.27e+01 1.32e-02 3.27e+01 3.13e+01 0 \n",
" 30 3.70e-04 2.51e+01 1.36e-02 2.51e+01 2.30e+01 0 \n",
" 0 2.55e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 \n",
" 1 2.55e+05 2.50e+04 2.21e-03 2.55e+04 5.64e+03 0 \n",
" 2 2.55e+05 3.37e+03 4.74e-03 4.58e+03 9.91e+02 0 Skip BFGS \n",
" 3 3.19e+04 1.78e+03 4.90e-03 1.93e+03 2.83e+02 0 Skip BFGS \n",
" 4 3.19e+04 9.92e+02 1.67e-02 1.52e+03 2.15e+02 0 Skip BFGS \n",
" 5 3.19e+04 7.50e+02 1.83e-02 1.33e+03 1.06e+02 0 \n",
" 6 3.99e+03 6.23e+02 2.13e-02 7.08e+02 1.40e+02 0 Skip BFGS \n",
" 7 3.99e+03 3.26e+02 5.92e-02 5.62e+02 2.61e+02 0 \n",
" 8 3.99e+03 3.58e+02 3.99e-02 5.17e+02 1.18e+02 0 \n",
" 9 4.98e+02 3.33e+02 4.07e-02 3.53e+02 1.14e+02 1 \n",
" 10 4.98e+02 2.51e+02 1.43e-01 3.22e+02 3.78e+02 0 \n",
" 11 4.98e+02 1.75e+02 1.17e-01 2.34e+02 2.27e+02 1 \n",
" 12 6.23e+01 7.99e+01 1.45e-01 8.89e+01 5.71e+01 0 Skip BFGS \n",
" 13 6.23e+01 7.36e+01 1.92e-01 8.56e+01 1.16e+02 0 Skip BFGS \n",
" 14 6.23e+01 6.72e+01 1.99e-01 7.96e+01 7.08e+01 0 \n",
" 15 7.79e+00 6.04e+01 2.08e-01 6.21e+01 2.97e+01 0 \n",
" 16 7.79e+00 5.60e+01 2.35e-01 5.78e+01 4.30e+01 0 \n",
" 17 7.79e+00 4.85e+01 3.72e-01 5.14e+01 3.44e+01 0 \n",
" 18 9.73e-01 4.34e+01 3.81e-01 4.38e+01 7.57e+00 0 \n",
" 19 9.73e-01 4.30e+01 3.60e-01 4.33e+01 1.87e+01 0 Skip BFGS \n",
" 20 9.73e-01 4.20e+01 3.74e-01 4.24e+01 1.23e+01 0 \n",
" 21 1.22e-01 4.03e+01 4.12e-01 4.04e+01 1.79e+01 2 \n",
" 22 1.22e-01 4.00e+01 4.83e-01 4.01e+01 2.70e+01 0 Skip BFGS \n",
" 23 1.22e-01 3.92e+01 4.79e-01 3.92e+01 2.06e+01 0 \n",
" 24 1.52e-02 3.86e+01 5.04e-01 3.86e+01 1.97e+01 2 Skip BFGS \n",
" 25 1.52e-02 3.82e+01 5.02e-01 3.82e+01 3.32e+01 0 \n",
" 26 1.52e-02 3.80e+01 4.74e-01 3.80e+01 2.44e+01 0 \n",
" 27 1.90e-03 3.76e+01 4.57e-01 3.76e+01 3.62e+01 1 Skip BFGS \n",
" 28 1.90e-03 3.74e+01 4.77e-01 3.74e+01 3.13e+01 1 \n",
" 29 1.90e-03 3.74e+01 4.55e-01 3.74e+01 2.68e+01 0 \n",
" 30 2.38e-04 3.71e+01 4.30e-01 3.71e+01 2.24e+01 1 \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 7.6530e+00 <= tolF*(1+|f0|) = 1.3164e+05\n",
"1 : |xc-x_last| = 4.1960e+00 <= tolX*(1+|x0|) = 4.2689e+00\n",
"0 : |proj(x-g)-x| = 2.2988e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 2.2988e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : |fc-fOld| = 3.3322e-01 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 1.0086e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 2.2396e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 2.2396e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 30 <= iter = 30\n",
"------------------------- DONE! -------------------------\n"
]
@@ -236,14 +238,14 @@
},
{
"cell_type": "code",
"execution_count": 21,
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"modList = []\n",
"modFiles = glob('*Inversion_NoStopping.npy')\n",
"modFiles = glob('*Inversion_NoStoppingregMesh_smoothTrue.npy')\n",
"modFiles.sort()\n",
"for f in modFiles:\n",
" modList.append(np.load(f))"
@@ -251,39 +253,157 @@
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,modList)\n",
"plt.show()\n"
"# simpegmt.Utils.dataUtils.plotMT1DModelData(problem,modList)\n",
"# plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/gudni/anaconda/lib/python2.7/site-packages/numpy/ma/core.py:2834: FutureWarning: Numpy has detected that you (may be) writing to an array returned\n",
"by numpy.diagonal or by selecting multiple fields in a record\n",
"array. This code will likely break in a future numpy release --\n",
"see numpy.diagonal or arrays.indexing reference docs for details.\n",
"The quick fix is to make an explicit copy (e.g., do\n",
"arr.diagonal().copy() or arr[['f0','f1']].copy()).\n",
" if (obj.__array_interface__[\"data\"][0]\n",
"/home/gudni/anaconda/lib/python2.7/site-packages/numpy/ma/core.py:2835: FutureWarning: Numpy has detected that you (may be) writing to an array returned\n",
"by numpy.diagonal or by selecting multiple fields in a record\n",
"array. This code will likely break in a future numpy release --\n",
"see numpy.diagonal or arrays.indexing reference docs for details.\n",
"The quick fix is to make an explicit copy (e.g., do\n",
"arr.diagonal().copy() or arr[['f0','f1']].copy()).\n",
" != self.__array_interface__[\"data\"][0]):\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7f7d27dca950>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib qt\n",
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,modList)\n",
"%matplotlib inline\n",
"fig = simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,mopt])\n",
"fig.suptitle('No stopping-useMref')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib qt\n",
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,modList[-3:-1])\n",
"reg.alpha_xx = 0.001\n",
"saveModel.fileName = 'Inversion_NoStoppingregMesh_smoothTrueWxx'"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_NoStoppingregMesh_smoothTrueWxx.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 2.54e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 \n",
" 1 2.54e+05 2.50e+04 2.21e-03 2.55e+04 5.64e+03 0 \n",
" 2 2.54e+05 3.37e+03 4.74e-03 4.57e+03 9.91e+02 0 Skip BFGS \n",
" 3 3.17e+04 1.77e+03 4.92e-03 1.93e+03 2.83e+02 0 Skip BFGS \n",
" 4 3.17e+04 9.89e+02 1.68e-02 1.52e+03 2.15e+02 0 Skip BFGS \n",
" 5 3.17e+04 7.47e+02 1.84e-02 1.33e+03 1.06e+02 0 \n",
" 6 3.96e+03 6.19e+02 2.14e-02 7.04e+02 1.39e+02 0 Skip BFGS \n",
" 7 3.96e+03 3.25e+02 5.92e-02 5.60e+02 2.61e+02 0 \n",
" 8 3.96e+03 3.55e+02 4.00e-02 5.14e+02 1.17e+02 0 \n",
" 9 4.95e+02 3.29e+02 4.10e-02 3.50e+02 1.13e+02 1 \n",
" 10 4.95e+02 2.48e+02 1.43e-01 3.19e+02 3.78e+02 0 \n",
" 11 4.95e+02 1.75e+02 1.18e-01 2.33e+02 2.31e+02 1 \n",
" 12 6.19e+01 7.93e+01 1.45e-01 8.83e+01 5.76e+01 0 Skip BFGS \n",
" 13 6.19e+01 6.97e+01 1.87e-01 8.13e+01 9.12e+01 0 Skip BFGS \n",
" 14 6.19e+01 6.36e+01 1.88e-01 7.53e+01 2.36e+01 0 \n",
" 15 7.74e+00 6.22e+01 1.94e-01 6.37e+01 2.16e+01 0 \n",
" 16 7.74e+00 5.72e+01 2.23e-01 5.89e+01 3.88e+01 1 \n",
" 17 7.74e+00 5.15e+01 3.19e-01 5.40e+01 4.78e+01 1 Skip BFGS \n",
" 18 9.68e-01 4.36e+01 3.51e-01 4.39e+01 1.50e+01 0 \n",
" 19 9.68e-01 4.22e+01 4.45e-01 4.27e+01 2.01e+01 0 Skip BFGS \n",
" 20 9.68e-01 4.13e+01 4.20e-01 4.17e+01 9.91e+00 0 \n",
" 21 1.21e-01 4.02e+01 4.47e-01 4.02e+01 2.47e+01 1 \n",
" 22 1.21e-01 3.96e+01 4.82e-01 3.96e+01 2.93e+01 0 Skip BFGS \n",
" 23 1.21e-01 3.92e+01 4.94e-01 3.93e+01 2.75e+01 0 \n",
" 24 1.51e-02 3.90e+01 5.51e-01 3.90e+01 2.27e+01 0 Skip BFGS \n",
" 25 1.51e-02 3.82e+01 5.19e-01 3.82e+01 1.94e+01 0 \n",
" 26 1.51e-02 3.79e+01 5.52e-01 3.79e+01 1.71e+01 1 Skip BFGS \n",
" 27 1.89e-03 3.76e+01 5.39e-01 3.76e+01 2.16e+01 1 \n",
" 28 1.89e-03 3.76e+01 6.14e-01 3.76e+01 3.82e+01 1 Skip BFGS \n",
" 29 1.89e-03 3.69e+01 5.53e-01 3.69e+01 3.71e+01 0 \n",
" 30 2.36e-04 3.57e+01 5.65e-01 3.57e+01 1.91e+01 0 \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 1.1797e+00 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 1.0384e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 1.9125e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.9125e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 30 <= iter = 30\n",
"------------------------- DONE! -------------------------\n"
]
}
],
"source": [
"moptWxx = inv.run(m_0)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7f7d1ef376d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"fig = simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[mopt,moptWxx])\n",
"fig.suptitle('No stopping-useMref - Wxx')\n",
"plt.show()"
]
},
@@ -53,8 +53,8 @@
"# Set the conductivity values\n",
"sig_half = 2e-3\n",
"sig_air = 1e-8\n",
"sig_layer1 = 1\n",
"sig_layer2 = .1\n",
"sig_layer1 = .2\n",
"sig_layer2 = .2\n",
"# Make the true model\n",
"sigma_true = np.ones(m1d.nCx)*sig_air\n",
"sigma_true[active] = sig_half\n",
@@ -102,7 +102,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 4,
"metadata": {
"collapsed": false
},
@@ -130,7 +130,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 5,
"metadata": {
"collapsed": false
},
@@ -154,6 +154,7 @@
" reg = simpeg.Regularization.Tikhonov(regMesh)\n",
"# else:\n",
"# reg = simpeg.Regularization.Tikhonov(m1d,mapping=mapAct)\n",
"reg.smoothModel = False\n",
"reg.alpha_s = 1e-8\n",
"reg.alpha_x = 1.\n",
"# Inversion problem\n",
@@ -163,17 +164,16 @@
"beta = simpeg.Directives.BetaSchedule()\n",
"betaest = simpeg.Directives.BetaEstimate_ByEig(beta0_ratio=0.75)\n",
"saveModel = simpeg.Directives.SaveModelEveryIteration()\n",
"saveModel.fileName = 'Inversion_NoStoppingregMesh'\n",
"saveModel.fileName = 'Inversion_NoStoppingregMesh_smoothFalse'\n",
"# Create an inversion object\n",
"inv = simpeg.Inversion.BaseInversion(invProb, directiveList=[beta,betaest,saveModel]) \n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": false
"collapsed": false
},
"outputs": [
{
@@ -184,21 +184,48 @@
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.l2_DataMisfit is creating default weightings for Wd.\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_NoStoppingregMesh.npy'\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_NoStoppingregMesh_smoothFalse.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 3.07e+06 5.84e+06 2.95e-02 5.93e+06 1.45e+06 0 \n",
" 1 3.07e+06 6.43e+05 2.81e-02 7.29e+05 1.64e+05 0 \n",
" 2 3.07e+06 6.97e+04 2.75e-02 1.54e+05 1.99e+04 0 Skip BFGS \n",
" 3 3.84e+05 1.01e+04 2.79e-02 2.08e+04 2.95e+03 0 Skip BFGS \n",
" 4 3.84e+05 5.52e+03 2.97e-02 1.69e+04 3.93e+02 0 Skip BFGS \n",
" 5 3.84e+05 5.44e+03 2.93e-02 1.67e+04 7.12e+01 0 Skip BFGS \n",
"------------------------------------------------------------------\n",
"0 : ft = 1.6712e+04 <= alp*descent = 1.6712e+04\n",
"1 : maxIterLS = 10 <= iterLS = 10\n",
"------------------------- End Linesearch -------------------------\n",
"The linesearch got broken. Boo.\n"
" 0 7.58e+05 5.84e+06 0.00e+00 5.84e+06 1.45e+06 0 \n",
" 1 7.58e+05 6.42e+05 2.33e-04 6.43e+05 1.64e+05 0 \n",
" 2 7.58e+05 6.95e+04 7.43e-04 7.00e+04 2.00e+04 0 Skip BFGS \n",
" 3 9.47e+04 9.80e+03 1.31e-03 9.92e+03 2.87e+03 0 Skip BFGS \n",
" 4 9.47e+04 4.94e+03 5.58e-03 5.47e+03 3.72e+02 0 Skip BFGS \n",
" 5 9.47e+04 4.62e+03 7.58e-03 5.33e+03 3.58e+01 0 Skip BFGS \n",
" 6 1.18e+04 4.61e+03 7.61e-03 4.70e+03 5.85e+02 0 Skip BFGS \n",
" 7 1.18e+04 3.57e+03 3.44e-02 3.97e+03 3.49e+02 0 \n",
" 8 1.18e+04 3.27e+03 3.71e-02 3.71e+03 3.65e+02 0 \n",
" 9 1.48e+03 3.19e+03 3.67e-02 3.24e+03 5.87e+02 0 \n",
" 10 1.48e+03 3.11e+03 5.52e-02 3.19e+03 5.02e+02 0 \n",
" 11 1.48e+03 3.10e+03 5.75e-02 3.18e+03 5.14e+02 2 \n",
" 12 1.85e+02 3.09e+03 5.75e-02 3.10e+03 5.39e+02 3 \n",
" 13 1.85e+02 3.06e+03 7.96e-02 3.07e+03 4.75e+02 0 \n",
" 14 1.85e+02 3.06e+03 8.25e-02 3.07e+03 4.80e+02 3 \n",
" 15 2.31e+01 3.05e+03 8.50e-02 3.05e+03 4.82e+02 4 \n",
" 16 2.31e+01 3.04e+03 1.39e-01 3.04e+03 4.80e+02 2 \n",
" 17 2.31e+01 3.01e+03 1.59e-01 3.01e+03 4.72e+02 2 \n",
" 18 2.89e+00 3.01e+03 1.26e-01 3.01e+03 4.87e+02 1 \n",
" 19 2.89e+00 2.45e+03 1.96e-01 2.45e+03 5.42e+02 1 \n",
" 20 2.89e+00 2.11e+03 4.55e-01 2.12e+03 8.59e+02 0 Skip BFGS \n",
" 21 3.61e-01 1.95e+03 5.59e-01 1.95e+03 4.88e+02 0 \n",
" 22 3.61e-01 1.72e+03 5.09e-01 1.72e+03 3.32e+02 0 \n",
" 23 3.61e-01 1.56e+03 6.15e-01 1.56e+03 2.82e+02 0 Skip BFGS \n",
" 24 4.52e-02 1.49e+03 7.06e-01 1.49e+03 2.61e+02 1 \n",
" 25 4.52e-02 1.45e+03 8.86e-01 1.45e+03 2.72e+02 3 Skip BFGS \n",
" 26 4.52e-02 1.41e+03 7.88e-01 1.41e+03 3.08e+02 0 \n",
" 27 5.64e-03 1.41e+03 7.02e-01 1.41e+03 2.64e+02 0 \n",
" 28 5.64e-03 1.27e+03 7.59e-01 1.27e+03 3.48e+02 0 \n",
" 29 5.64e-03 9.93e+02 1.47e+00 9.93e+02 4.30e+02 1 \n",
" 30 7.05e-04 8.33e+02 3.08e+00 8.33e+02 5.44e+02 1 Skip BFGS \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 1.5990e+02 <= tolF*(1+|f0|) = 5.8433e+05\n",
"0 : |xc-x_last| = 3.4554e+01 <= tolX*(1+|x0|) = 4.2689e+00\n",
"0 : |proj(x-g)-x| = 5.4392e+02 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 5.4392e+02 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 30 <= iter = 30\n",
"------------------------- DONE! -------------------------\n"
]
}
],
@@ -209,7 +236,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 7,
"metadata": {
"collapsed": false
},
@@ -224,40 +251,43 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/gudni/anaconda/lib/python2.7/site-packages/numpy/ma/core.py:2834: FutureWarning: Numpy has detected that you (may be) writing to an array returned\n",
"by numpy.diagonal or by selecting multiple fields in a record\n",
"array. This code will likely break in a future numpy release --\n",
"see numpy.diagonal or arrays.indexing reference docs for details.\n",
"The quick fix is to make an explicit copy (e.g., do\n",
"arr.diagonal().copy() or arr[['f0','f1']].copy()).\n",
" if (obj.__array_interface__[\"data\"][0]\n",
"/home/gudni/anaconda/lib/python2.7/site-packages/numpy/ma/core.py:2835: FutureWarning: Numpy has detected that you (may be) writing to an array returned\n",
"by numpy.diagonal or by selecting multiple fields in a record\n",
"array. This code will likely break in a future numpy release --\n",
"see numpy.diagonal or arrays.indexing reference docs for details.\n",
"The quick fix is to make an explicit copy (e.g., do\n",
"arr.diagonal().copy() or arr[['f0','f1']].copy()).\n",
" != self.__array_interface__[\"data\"][0]):\n"
"ename": "AttributeError",
"evalue": "'Figure' object has no attribute 'supplot'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-22-599803cc310e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'matplotlib inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msimpegmt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mUtils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdataUtils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplotMT1DModelData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mproblem\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mm_0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mmopt\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msupplot\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'Figure' object has no attribute 'supplot'"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7f7c525e7090>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,mopt])\n",
"plt.show()\n"
"%matplotlib inline\n",
"fig = simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,mopt])\n",
"fig.supplot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 9,
"metadata": {
"collapsed": false
},
@@ -270,45 +300,15 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib qt\n",
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,modList[-3:-1])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reg.mref"
"# %matplotlib qt\n",
"# simpegmt.Utils.dataUtils.plotMT1DModelData(problem,modList[-3:-1])\n",
"# plt.show()"
]
},
{
@@ -317,6 +317,28 @@
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"78.694562868192662"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linalg.norm(mopt - reg.mref)\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
@@ -332,18 +354,18 @@
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081])"
]
},
"execution_count": 11,
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m_0"
"reg.mref"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 13,
"metadata": {
"collapsed": false
},
@@ -369,7 +391,7 @@
" -5.82076609e-11])"
]
},
"execution_count": 12,
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
@@ -414,6 +436,160 @@
"m1d.gridN[active]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"self = reg\n",
"r1 = self.W * ( self.mapping * (m_0) )\n",
"r2 = self.Ws * ( self.mapping * (self.mref) )"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081,\n",
" -6.2146081, -6.2146081, -6.2146081, -6.2146081, -6.2146081])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"( self.mapping * (m_0) )"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<45x45 sparse matrix of type '<type 'numpy.float64'>'\n",
"\twith 45 stored elements in Compressed Sparse Row format>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.Ws"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<SimPEG.Maps.IdentityMap at 0x7f7c7b890390>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"self.mapping"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-1.7347234759768071e-18"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"0.5*(r1.dot(r1)-r2.dot(r2))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.029467074824486239"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r1.dot(r1)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.029467074824486243"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r2.dot(r2)"
]
},
{
"cell_type": "code",
"execution_count": null,
@@ -30,23 +30,23 @@
"nFreq = 31\n",
"freqs = np.logspace(3,-3,nFreq)\n",
"# Set mesh parameters\n",
"ct = 10\n",
"air = simpeg.Utils.meshTensor([(ct,25,1.3)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,5,-1.2)]),np.ones((3,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],25,-1.3)])\n",
"ct = 20\n",
"air = simpeg.Utils.meshTensor([(ct,16,1.4)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,10,-1.3)]),np.ones((5,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],10,-1.4)])\n",
"x0 = -np.array([np.sum(np.concatenate((core,bot)))])\n",
"# Make the model\n",
"m1d = simpeg.Mesh.TensorMesh([np.concatenate((bot,core,air))], x0=x0)\n",
"\n",
"# Setup model varibles\n",
"active = m1d.vectorCCx<0.\n",
"layer1 = (m1d.vectorCCx<-200.) & (m1d.vectorCCx>=-600.)\n",
"layer2 = (m1d.vectorCCx<-2000.) & (m1d.vectorCCx>=-4000.)\n",
"layer1 = (m1d.vectorCCx<-500.) & (m1d.vectorCCx>=-800.)\n",
"layer2 = (m1d.vectorCCx<-3500.) & (m1d.vectorCCx>=-5000.)\n",
"# Set the conductivity values\n",
"sig_half = 2e-3\n",
"sig_air = 1e-8\n",
"sig_layer1 = 1\n",
"sig_layer2 = .1\n",
"sig_layer1 = .2\n",
"sig_layer2 = .2\n",
"# Make the true model\n",
"sigma_true = np.ones(m1d.nCx)*sig_air\n",
"sigma_true[active] = sig_half\n",
@@ -109,19 +109,19 @@
"else:\n",
" d_true = survey.dpred(m_true)\n",
" np.save('MT1D_dtrue.npy',d_true)\n",
" d_obs = std*abs(d_true)*np.random.randn(*d_true.shape)\n",
" d_obs = d_true + std*abs(d_true)*np.random.randn(*d_true.shape)\n",
" np.save('MT1D_dobs.npy',d_obs)\n",
"# Assign the dobs\n",
"survey.dtrue = d_true\n",
"survey.dobs = d_obs\n",
"survey.std = survey.dobs*0 + std\n",
"survey.std = np.abs(survey.dobs*std) + 0.01*np.linalg.norm(survey.dobs) #survey.dobs*0 + std\n",
"# Assign the data weight\n",
"survey.Wd = 1/(abs(survey.dobs)*survey.std)"
"survey.Wd = 1/survey.std #(abs(survey.dobs)*survey.std)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 5,
"metadata": {
"collapsed": false
},
@@ -140,14 +140,14 @@
"dmis = simpeg.DataMisfit.l2_DataMisfit(survey)\n",
"# Regularization\n",
"# Either have to use \n",
"if False:\n",
"if True:\n",
" regMesh = simpeg.Mesh.TensorMesh([m1d.hx[problem.mapping.sigmaMap.maps[-1].indActive]],m1d.x0)\n",
" reg = simpeg.Regularization.Tikhonov(regMesh)\n",
"else:\n",
" reg = simpeg.Regularization.Tikhonov(m1d,mapping=mappingExpAct)\n",
"reg.alpha_s = 1e-6\n",
"reg.smoothModel = True\n",
"reg.alpha_s = 1e-7\n",
"reg.alpha_x = 1.\n",
"\n",
"# Inversion problem\n",
"invProb = simpeg.InvProblem.BaseInvProblem(dmis, reg, opt)\n",
"invProb.counter = C\n",
@@ -155,15 +155,16 @@
"beta = simpeg.Directives.BetaSchedule()\n",
"betaest = simpeg.Directives.BetaEstimate_ByEig(beta0_ratio=0.75)\n",
"targmis = simpeg.Directives.TargetMisfit()\n",
"targmis.target = 1/2 * survey.nD\n",
"saveModel = simpeg.Directives.SaveModelEveryIteration()\n",
"saveModel.fileName = 'Inversion_TargMisEqnD'\n",
"saveModel.fileName = 'Inversion_TargMisEqnD_smoothTrue'\n",
"# Create an inversion object\n",
"inv = simpeg.Inversion.BaseInversion(invProb, directiveList=[beta,betaest,targmis,saveModel]) \n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": false
@@ -177,85 +178,355 @@
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.l2_DataMisfit is creating default weightings for Wd.\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnD.npy'\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnD_smoothTrue.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 7.52e+05 1.32e+06 4.79e-07 1.32e+06 3.23e+05 0 \n",
" 1 7.52e+05 1.91e+05 1.61e-06 1.91e+05 4.88e+04 0 \n",
" 2 7.52e+05 8.47e+04 3.06e-06 8.47e+04 2.41e+04 0 Skip BFGS \n",
" 3 9.41e+04 7.39e+04 3.58e-06 7.39e+04 2.12e+04 0 Skip BFGS \n",
" 4 9.41e+04 4.00e+04 7.90e-06 4.00e+04 1.19e+04 0 Skip BFGS \n",
" 5 9.41e+04 3.37e+04 1.00e-05 3.37e+04 1.02e+04 0 Skip BFGS \n",
" 6 1.18e+04 3.00e+04 1.18e-05 3.00e+04 9.10e+03 0 Skip BFGS \n",
" 7 1.18e+04 1.71e+04 2.61e-05 1.71e+04 5.44e+03 0 Skip BFGS \n",
" 8 1.18e+04 1.41e+04 3.38e-05 1.41e+04 4.61e+03 0 Skip BFGS \n",
" 9 1.47e+03 1.25e+04 4.02e-05 1.25e+04 4.12e+03 0 Skip BFGS \n",
" 10 1.47e+03 6.91e+03 8.84e-05 6.91e+03 2.48e+03 0 Skip BFGS \n",
" 11 1.47e+03 5.65e+03 1.15e-04 5.65e+03 2.09e+03 0 Skip BFGS \n",
" 12 1.84e+02 4.93e+03 1.36e-04 4.93e+03 1.87e+03 0 Skip BFGS \n",
" 13 1.84e+02 2.73e+03 2.85e-04 2.73e+03 1.14e+03 0 Skip BFGS \n",
" 14 1.84e+02 2.22e+03 3.66e-04 2.22e+03 9.55e+02 0 Skip BFGS \n",
" 15 2.30e+01 1.95e+03 4.32e-04 1.95e+03 8.48e+02 0 Skip BFGS \n",
" 16 2.30e+01 1.16e+03 8.20e-04 1.16e+03 5.20e+02 0 Skip BFGS \n",
" 17 2.30e+01 9.61e+02 1.03e-03 9.61e+02 4.28e+02 0 Skip BFGS \n",
" 18 2.87e+00 8.51e+02 1.19e-03 8.51e+02 3.75e+02 0 Skip BFGS \n",
" 19 2.87e+00 5.60e+02 2.03e-03 5.60e+02 2.24e+02 0 Skip BFGS \n",
" 20 2.87e+00 4.64e+02 2.44e-03 4.64e+02 1.82e+02 0 Skip BFGS \n",
" 21 3.59e-01 4.09e+02 2.74e-03 4.09e+02 1.59e+02 0 Skip BFGS \n",
" 22 3.59e-01 2.75e+02 3.99e-03 2.75e+02 1.10e+02 0 Skip BFGS \n",
" 23 3.59e-01 2.28e+02 4.59e-03 2.28e+02 8.98e+01 0 \n",
" 24 4.48e-02 1.85e+02 4.88e-03 1.85e+02 8.62e+01 0 Skip BFGS \n",
" 25 4.48e-02 1.26e+02 6.70e-03 1.26e+02 7.39e+01 0 Skip BFGS \n",
" 26 4.48e-02 8.27e+01 7.76e-03 8.27e+01 5.01e+01 0 \n",
" 27 5.61e-03 6.54e+01 8.37e-03 6.54e+01 5.22e+01 1 \n",
" 0 3.72e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 \n",
" 1 3.72e+05 2.50e+04 2.19e-03 2.58e+04 5.62e+03 0 \n",
" 2 3.72e+05 3.39e+03 4.60e-03 5.10e+03 1.01e+03 0 Skip BFGS \n",
" 3 4.65e+04 1.91e+03 4.23e-03 2.10e+03 3.07e+02 0 Skip BFGS \n",
" 4 4.65e+04 1.18e+03 1.15e-02 1.72e+03 1.62e+02 0 Skip BFGS \n",
" 5 4.65e+04 1.00e+03 1.30e-02 1.60e+03 8.35e+01 0 \n",
" 6 5.81e+03 8.78e+02 1.50e-02 9.66e+02 1.87e+02 0 Skip BFGS \n",
" 7 5.81e+03 3.96e+02 5.56e-02 7.19e+02 2.51e+02 0 \n",
" 8 5.81e+03 3.44e+02 3.87e-02 5.69e+02 1.35e+02 1 \n",
" 9 7.26e+02 2.93e+02 4.41e-02 3.25e+02 9.13e+01 0 Skip BFGS \n",
" 10 7.26e+02 2.41e+02 6.62e-02 2.89e+02 1.21e+02 1 \n",
" 11 7.26e+02 1.47e+02 1.33e-01 2.44e+02 1.94e+02 0 \n",
" 12 9.08e+01 1.35e+02 1.15e-01 1.45e+02 7.35e+01 0 \n",
" 13 9.08e+01 8.40e+01 2.31e-01 1.05e+02 1.27e+02 0 \n",
" 14 9.08e+01 7.09e+01 2.78e-01 9.61e+01 7.14e+01 0 \n",
" 15 1.13e+01 6.65e+01 2.55e-01 6.94e+01 2.89e+01 0 \n",
" 16 1.13e+01 6.41e+01 3.38e-01 6.80e+01 5.48e+01 0 \n",
" 17 1.13e+01 5.44e+01 3.65e-01 5.85e+01 2.19e+01 0 \n",
" 18 1.42e+00 5.04e+01 4.33e-01 5.10e+01 7.08e+01 0 Skip BFGS \n",
" 19 1.42e+00 4.76e+01 4.52e-01 4.82e+01 1.68e+01 0 \n",
" 20 1.42e+00 4.62e+01 4.72e-01 4.69e+01 1.39e+01 0 \n",
" 21 1.77e-01 4.61e+01 4.68e-01 4.62e+01 1.08e+01 0 \n",
" 22 1.77e-01 4.54e+01 4.44e-01 4.55e+01 3.34e+01 0 Skip BFGS \n",
" 23 1.77e-01 4.40e+01 4.46e-01 4.41e+01 1.57e+01 0 \n",
" 24 2.22e-02 4.20e+01 3.77e-01 4.20e+01 2.55e+01 2 \n",
" 25 2.22e-02 4.03e+01 3.16e-01 4.03e+01 2.54e+01 0 \n",
" 26 2.22e-02 3.99e+01 3.82e-01 3.99e+01 2.41e+01 0 \n",
" 27 2.77e-03 3.93e+01 3.49e-01 3.93e+01 3.42e+01 3 Skip BFGS \n",
" 28 2.77e-03 3.88e+01 4.32e-01 3.88e+01 2.44e+01 0 \n",
" 29 2.77e-03 3.87e+01 4.49e-01 3.87e+01 3.02e+01 2 Skip BFGS \n",
" 30 3.46e-04 3.86e+01 4.63e-01 3.86e+01 2.54e+01 0 \n",
" 31 3.46e-04 3.86e+01 4.39e-01 3.86e+01 2.32e+01 0 \n",
" 32 3.46e-04 3.84e+01 4.42e-01 3.84e+01 2.16e+01 1 Skip BFGS \n",
" 33 4.33e-05 3.84e+01 4.54e-01 3.84e+01 2.25e+01 0 Skip BFGS \n",
" 34 4.33e-05 3.83e+01 4.44e-01 3.83e+01 2.15e+01 0 \n",
" 35 4.33e-05 3.72e+01 4.57e-01 3.72e+01 1.65e+01 0 \n",
" 36 5.41e-06 3.64e+01 4.85e-01 3.64e+01 2.32e+01 1 Skip BFGS \n",
" 37 5.41e-06 3.61e+01 4.70e-01 3.61e+01 2.34e+01 2 \n",
" 38 5.41e-06 3.56e+01 4.35e-01 3.56e+01 2.75e+01 2 Skip BFGS \n",
" 39 6.76e-07 3.56e+01 4.43e-01 3.56e+01 2.21e+01 0 \n",
" 40 6.76e-07 3.55e+01 4.44e-01 3.55e+01 2.07e+01 2 \n",
" 41 6.76e-07 3.50e+01 4.62e-01 3.50e+01 2.21e+01 2 Skip BFGS \n",
" 42 8.45e-08 3.49e+01 4.41e-01 3.49e+01 2.31e+01 2 \n",
" 43 8.45e-08 3.28e+01 4.83e-01 3.28e+01 3.06e+01 0 Skip BFGS \n",
" 44 8.45e-08 3.22e+01 5.30e-01 3.22e+01 2.44e+01 1 Skip BFGS \n",
" 45 1.06e-08 3.19e+01 5.73e-01 3.19e+01 1.06e+01 0 Skip BFGS \n",
" 46 1.06e-08 3.18e+01 5.27e-01 3.18e+01 1.20e+01 1 \n",
" 47 1.06e-08 3.17e+01 4.59e-01 3.17e+01 9.10e+00 0 Skip BFGS \n",
" 48 1.32e-09 3.17e+01 5.04e-01 3.17e+01 1.08e+01 2 \n",
" 49 1.32e-09 3.16e+01 5.22e-01 3.16e+01 9.32e+00 0 \n",
" 50 1.32e-09 3.13e+01 4.58e-01 3.13e+01 1.42e+01 1 \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 0.0000e+00 <= tolF*(1+|f0|) = 1.3164e+05\n",
"0 : |xc-x_last| = 5.4748e+00 <= tolX*(1+|x0|) = 4.2689e+00\n",
"0 : |proj(x-g)-x| = 5.2197e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 5.2197e+01 <= 1e3*eps = 1.0000e-02\n",
"0 : maxIter = 50 <= iter = 28\n",
"------------------------- DONE! -------------------------\n"
"1 : |fc-fOld| = 3.0199e-01 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 4.2553e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 1.4222e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.4222e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 50 <= iter = 50\n",
"------------------------- DONE! -------------------------\n",
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnD_smoothTrue.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 1.70e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 \n",
" 1 1.70e+05 2.50e+04 2.22e-03 2.53e+04 5.66e+03 0 \n",
" 2 1.70e+05 3.35e+03 4.85e-03 4.18e+03 9.85e+02 0 Skip BFGS \n",
" 3 2.13e+04 1.64e+03 5.93e-03 1.77e+03 2.67e+02 0 Skip BFGS \n",
" 4 2.13e+04 8.27e+02 2.45e-02 1.35e+03 2.67e+02 0 \n",
" 5 2.13e+04 7.95e+02 1.83e-02 1.18e+03 1.28e+02 0 \n",
" 6 2.66e+03 7.09e+02 2.17e-02 7.67e+02 1.49e+02 0 \n",
" 7 2.66e+03 4.57e+02 7.33e-02 6.52e+02 2.10e+02 0 \n",
" 8 2.66e+03 4.28e+02 5.88e-02 5.84e+02 1.75e+02 1 \n",
" 9 3.32e+02 3.56e+02 7.66e-02 3.82e+02 1.12e+02 0 \n",
" 10 3.32e+02 2.71e+02 1.23e-01 3.12e+02 1.62e+02 1 \n",
" 11 3.32e+02 2.06e+02 1.90e-01 2.69e+02 1.31e+02 1 \n",
" 12 4.15e+01 1.69e+02 2.30e-01 1.79e+02 1.30e+02 1 \n",
" 13 4.15e+01 1.53e+02 6.02e-01 1.78e+02 2.84e+02 0 Skip BFGS \n",
" 14 4.15e+01 1.08e+02 4.27e-01 1.26e+02 1.01e+02 0 \n",
" 15 5.19e+00 7.04e+01 5.63e-01 7.33e+01 7.23e+01 0 \n",
" 16 5.19e+00 6.28e+01 6.89e-01 6.64e+01 1.31e+02 1 Skip BFGS \n",
" 17 5.19e+00 5.21e+01 9.36e-01 5.70e+01 1.20e+02 0 Skip BFGS \n",
" 18 6.49e-01 4.37e+01 9.80e-01 4.43e+01 7.78e+00 0 Skip BFGS \n",
" 19 6.49e-01 4.28e+01 1.10e+00 4.35e+01 1.60e+01 0 \n",
" 20 6.49e-01 4.27e+01 1.18e+00 4.35e+01 1.31e+01 0 \n",
" 21 8.11e-02 4.27e+01 1.23e+00 4.28e+01 1.39e+01 2 Skip BFGS \n",
" 22 8.11e-02 4.26e+01 1.20e+00 4.27e+01 1.26e+01 2 \n",
" 23 8.11e-02 4.16e+01 1.47e+00 4.17e+01 1.59e+01 2 \n",
" 24 1.01e-02 4.13e+01 1.38e+00 4.13e+01 3.20e+01 0 Skip BFGS \n",
" 25 1.01e-02 4.10e+01 1.37e+00 4.10e+01 1.70e+01 0 \n",
" 26 1.01e-02 4.04e+01 1.44e+00 4.05e+01 2.21e+01 1 Skip BFGS \n",
" 27 1.27e-03 4.01e+01 1.33e+00 4.01e+01 2.03e+01 2 \n",
" 28 1.27e-03 4.00e+01 1.49e+00 4.00e+01 2.19e+01 0 \n",
" 29 1.27e-03 4.00e+01 1.48e+00 4.00e+01 2.50e+01 2 \n",
" 30 1.58e-04 4.00e+01 1.49e+00 4.00e+01 2.38e+01 2 \n",
" 31 1.58e-04 3.99e+01 1.44e+00 3.99e+01 2.75e+01 2 \n",
" 32 1.58e-04 3.97e+01 1.64e+00 3.97e+01 2.91e+01 1 \n",
" 33 1.98e-05 3.93e+01 1.79e+00 3.93e+01 3.19e+01 3 Skip BFGS \n",
" 34 1.98e-05 3.90e+01 2.03e+00 3.90e+01 3.42e+01 2 Skip BFGS \n",
" 35 1.98e-05 3.88e+01 2.44e+00 3.88e+01 3.22e+01 1 Skip BFGS \n",
" 36 2.47e-06 3.86e+01 1.90e+00 3.86e+01 1.92e+01 0 \n",
" 37 2.47e-06 3.85e+01 2.26e+00 3.85e+01 2.25e+01 2 \n",
" 38 2.47e-06 3.84e+01 2.25e+00 3.84e+01 2.03e+01 0 Skip BFGS \n",
" 39 3.09e-07 3.84e+01 2.36e+00 3.84e+01 2.10e+01 0 \n",
" 40 3.09e-07 3.84e+01 2.49e+00 3.84e+01 2.08e+01 2 Skip BFGS \n",
" 41 3.09e-07 3.84e+01 2.37e+00 3.84e+01 2.08e+01 1 \n",
" 42 3.87e-08 3.78e+01 2.59e+00 3.78e+01 1.62e+01 1 Skip BFGS \n",
" 43 3.87e-08 3.77e+01 2.62e+00 3.77e+01 1.14e+01 0 Skip BFGS \n",
" 44 3.87e-08 3.76e+01 2.83e+00 3.76e+01 1.67e+01 3 \n",
" 45 4.83e-09 3.75e+01 2.80e+00 3.75e+01 2.17e+01 2 Skip BFGS \n",
" 46 4.83e-09 3.73e+01 2.73e+00 3.73e+01 1.19e+01 0 \n",
" 47 4.83e-09 3.71e+01 2.46e+00 3.71e+01 1.67e+01 2 \n",
" 48 6.04e-10 3.71e+01 2.33e+00 3.71e+01 1.45e+01 0 \n",
" 49 6.04e-10 3.71e+01 2.46e+00 3.71e+01 1.85e+01 1 \n",
" 50 6.04e-10 3.70e+01 2.39e+00 3.70e+01 1.99e+01 3 Skip BFGS \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 2.5694e-02 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 1.9839e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 1.9850e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.9850e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 50 <= iter = 50\n",
"------------------------- DONE! -------------------------\n",
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnD_smoothTrue.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 1.19e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 Skip BFGS \n",
" 1 1.19e+05 2.50e+04 2.22e-03 2.52e+04 5.67e+03 0 Skip BFGS \n",
" 2 1.19e+05 3.35e+03 4.92e-03 3.93e+03 9.84e+02 0 Skip BFGS \n",
" 3 1.49e+04 1.53e+03 7.13e-03 1.63e+03 2.55e+02 0 Skip BFGS \n",
" 4 1.49e+04 7.29e+02 3.29e-02 1.22e+03 2.94e+02 0 \n",
" 5 1.49e+04 6.80e+02 2.16e-02 1.00e+03 1.41e+02 0 \n",
" 6 1.86e+03 6.17e+02 2.45e-02 6.63e+02 1.44e+02 0 \n",
" 7 1.86e+03 4.77e+02 7.62e-02 6.19e+02 2.19e+02 0 \n",
" 8 1.86e+03 4.43e+02 6.42e-02 5.63e+02 2.03e+02 1 \n",
" 9 2.32e+02 3.74e+02 8.67e-02 3.94e+02 1.32e+02 0 \n",
" 10 2.32e+02 2.67e+02 1.91e-01 3.11e+02 1.89e+02 1 \n",
" 11 2.32e+02 1.29e+02 5.16e-01 2.49e+02 1.79e+02 0 Skip BFGS \n",
" 12 2.91e+01 1.32e+02 3.87e-01 1.43e+02 1.57e+02 1 \n",
" 13 2.91e+01 1.11e+02 6.45e-01 1.30e+02 1.91e+02 1 \n",
" 14 2.91e+01 6.74e+01 9.75e-01 9.57e+01 1.25e+02 0 Skip BFGS \n",
" 15 3.63e+00 5.28e+01 1.03e+00 5.66e+01 1.14e+01 0 Skip BFGS \n",
" 16 3.63e+00 4.93e+01 1.04e+00 5.31e+01 3.75e+01 1 Skip BFGS \n",
" 17 3.63e+00 4.65e+01 1.16e+00 5.07e+01 8.86e+01 0 \n",
" 18 4.54e-01 4.36e+01 1.16e+00 4.42e+01 5.66e+01 0 \n",
" 19 4.54e-01 4.18e+01 1.21e+00 4.23e+01 5.22e+01 1 Skip BFGS \n",
" 20 4.54e-01 3.95e+01 1.24e+00 4.01e+01 1.23e+01 0 \n",
" 21 5.68e-02 3.93e+01 1.26e+00 3.94e+01 1.03e+01 0 \n",
" 22 5.68e-02 3.92e+01 1.29e+00 3.93e+01 9.85e+00 0 \n",
" 23 5.68e-02 3.89e+01 1.44e+00 3.90e+01 1.92e+01 1 Skip BFGS \n",
" 24 7.09e-03 3.87e+01 1.36e+00 3.87e+01 1.35e+01 0 \n",
" 25 7.09e-03 3.86e+01 1.34e+00 3.86e+01 1.28e+01 0 Skip BFGS \n",
" 26 7.09e-03 3.85e+01 1.36e+00 3.85e+01 1.29e+01 0 \n",
" 27 8.87e-04 3.79e+01 1.32e+00 3.79e+01 1.64e+01 1 Skip BFGS \n",
" 28 8.87e-04 3.79e+01 1.30e+00 3.79e+01 1.60e+01 0 \n",
" 29 8.87e-04 3.79e+01 1.22e+00 3.79e+01 2.12e+01 0 Skip BFGS \n",
" 30 1.11e-04 3.77e+01 1.26e+00 3.77e+01 1.51e+01 0 \n",
" 31 1.11e-04 3.77e+01 1.24e+00 3.77e+01 1.43e+01 0 Skip BFGS \n",
" 32 1.11e-04 3.76e+01 1.24e+00 3.76e+01 1.51e+01 0 \n",
" 33 1.39e-05 3.75e+01 1.29e+00 3.75e+01 1.85e+01 2 Skip BFGS \n",
" 34 1.39e-05 3.75e+01 1.24e+00 3.75e+01 1.58e+01 1 \n",
" 35 1.39e-05 3.75e+01 1.17e+00 3.75e+01 1.76e+01 1 Skip BFGS \n",
" 36 1.73e-06 3.75e+01 1.24e+00 3.75e+01 1.61e+01 1 \n",
" 37 1.73e-06 3.74e+01 1.41e+00 3.74e+01 1.76e+01 3 Skip BFGS \n",
" 38 1.73e-06 3.74e+01 1.37e+00 3.74e+01 1.76e+01 2 \n",
" 39 2.17e-07 3.73e+01 1.45e+00 3.73e+01 2.92e+01 1 Skip BFGS \n",
" 40 2.17e-07 3.71e+01 1.51e+00 3.71e+01 2.50e+01 1 \n",
" 41 2.17e-07 3.70e+01 1.46e+00 3.70e+01 3.25e+01 0 \n",
" 42 2.71e-08 3.67e+01 1.40e+00 3.67e+01 3.70e+01 2 Skip BFGS \n",
" 43 2.71e-08 3.67e+01 1.39e+00 3.67e+01 3.64e+01 2 Skip BFGS \n",
" 44 2.71e-08 3.66e+01 1.40e+00 3.66e+01 3.47e+01 2 \n",
" 45 3.38e-09 3.62e+01 1.30e+00 3.62e+01 2.46e+01 1 Skip BFGS \n",
" 46 3.38e-09 3.61e+01 1.24e+00 3.61e+01 1.97e+01 1 Skip BFGS \n",
" 47 3.38e-09 3.61e+01 1.28e+00 3.61e+01 2.11e+01 1 \n",
" 48 4.23e-10 3.60e+01 1.28e+00 3.60e+01 1.81e+01 0 Skip BFGS \n",
" 49 4.23e-10 3.60e+01 1.26e+00 3.60e+01 1.81e+01 1 \n",
" 50 4.23e-10 3.59e+01 1.27e+00 3.59e+01 1.80e+01 1 \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 1.8765e-02 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 4.3809e-01 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 1.8033e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.8033e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 50 <= iter = 50\n",
"------------------------- DONE! -------------------------\n",
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnD_smoothTrue.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 2.04e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 \n",
" 1 2.04e+05 2.50e+04 2.21e-03 2.54e+04 5.65e+03 0 \n",
" 2 2.04e+05 3.36e+03 4.81e-03 4.34e+03 9.87e+02 0 Skip BFGS \n",
" 3 2.55e+04 1.70e+03 5.43e-03 1.84e+03 2.74e+02 0 Skip BFGS \n",
" 4 2.55e+04 8.94e+02 2.07e-02 1.42e+03 2.45e+02 0 \n",
" 5 2.55e+04 8.27e+02 1.76e-02 1.28e+03 1.27e+02 0 \n",
" 6 3.19e+03 7.66e+02 1.96e-02 8.29e+02 1.52e+02 0 \n",
" 7 3.19e+03 4.82e+02 7.40e-02 7.18e+02 2.52e+02 0 \n",
" 8 3.19e+03 4.13e+02 6.65e-02 6.25e+02 1.58e+02 0 \n",
" 9 3.98e+02 3.81e+02 7.32e-02 4.11e+02 1.43e+02 0 \n",
" 10 3.98e+02 2.69e+02 1.28e-01 3.20e+02 1.49e+02 1 \n",
" 11 3.98e+02 2.01e+02 2.10e-01 2.84e+02 1.84e+02 0 \n",
" 12 4.98e+01 1.66e+02 2.25e-01 1.78e+02 1.25e+02 0 \n",
" 13 4.98e+01 1.28e+02 3.65e-01 1.46e+02 9.89e+01 0 \n",
" 14 4.98e+01 1.05e+02 4.50e-01 1.27e+02 1.64e+02 1 \n",
" 15 6.23e+00 6.86e+01 5.39e-01 7.19e+01 1.64e+02 0 Skip BFGS \n",
" 16 6.23e+00 4.97e+01 5.96e-01 5.34e+01 1.16e+01 0 Skip BFGS \n",
" 17 6.23e+00 4.83e+01 6.74e-01 5.25e+01 1.77e+01 0 Skip BFGS \n",
" 18 7.78e-01 4.76e+01 6.83e-01 4.81e+01 8.50e+00 0 \n",
" 19 7.78e-01 4.67e+01 7.68e-01 4.73e+01 6.91e+00 0 Skip BFGS \n",
" 20 7.78e-01 4.65e+01 7.23e-01 4.71e+01 3.93e+01 0 \n",
" 21 9.73e-02 4.58e+01 8.12e-01 4.59e+01 5.65e+01 2 \n",
" 22 9.73e-02 4.55e+01 7.62e-01 4.55e+01 3.81e+01 0 \n",
" 23 9.73e-02 4.52e+01 6.89e-01 4.53e+01 3.60e+01 2 \n",
" 24 1.22e-02 4.48e+01 7.67e-01 4.48e+01 3.68e+01 1 \n",
" 25 1.22e-02 4.46e+01 7.74e-01 4.46e+01 3.70e+01 3 \n",
" 26 1.22e-02 4.45e+01 7.45e-01 4.45e+01 4.29e+01 2 \n",
" 27 1.52e-03 4.43e+01 7.79e-01 4.43e+01 4.13e+01 2 \n",
" 28 1.52e-03 4.39e+01 7.69e-01 4.39e+01 4.83e+01 2 \n",
" 29 1.52e-03 4.38e+01 7.82e-01 4.38e+01 6.21e+01 0 Skip BFGS \n",
" 30 1.90e-04 4.36e+01 7.74e-01 4.36e+01 5.22e+01 1 \n",
" 31 1.90e-04 4.36e+01 7.93e-01 4.36e+01 5.35e+01 2 \n",
" 32 1.90e-04 4.31e+01 7.77e-01 4.31e+01 5.43e+01 1 \n",
" 33 2.38e-05 4.11e+01 8.44e-01 4.11e+01 2.16e+01 0 \n",
" 34 2.38e-05 4.05e+01 9.56e-01 4.05e+01 2.25e+01 0 \n",
" 35 2.38e-05 4.03e+01 9.07e-01 4.03e+01 1.80e+01 1 \n",
" 36 2.97e-06 4.03e+01 8.80e-01 4.03e+01 2.09e+01 3 \n",
" 37 2.97e-06 4.03e+01 8.13e-01 4.03e+01 2.11e+01 2 Skip BFGS \n",
" 38 2.97e-06 4.01e+01 8.53e-01 4.01e+01 2.04e+01 2 \n",
" 39 3.71e-07 4.00e+01 8.76e-01 4.00e+01 1.56e+01 0 \n",
" 40 3.71e-07 3.99e+01 9.15e-01 3.99e+01 1.25e+01 0 \n",
" 41 3.71e-07 3.94e+01 9.05e-01 3.94e+01 1.02e+01 1 \n",
" 42 4.64e-08 3.92e+01 9.48e-01 3.92e+01 8.52e+00 0 Skip BFGS \n",
" 43 4.64e-08 3.91e+01 8.92e-01 3.91e+01 4.37e+00 0 \n",
" 44 4.64e-08 3.89e+01 9.26e-01 3.89e+01 1.63e+01 1 \n",
" 45 5.80e-09 3.88e+01 8.77e-01 3.88e+01 1.21e+01 0 \n",
" 46 5.80e-09 3.88e+01 9.08e-01 3.88e+01 1.54e+01 0 \n",
" 47 5.80e-09 3.83e+01 7.94e-01 3.83e+01 1.77e+01 0 \n",
" 48 7.25e-10 3.81e+01 8.11e-01 3.81e+01 1.68e+01 1 \n",
" 49 7.25e-10 3.81e+01 7.94e-01 3.81e+01 1.47e+01 0 \n",
" 50 7.25e-10 3.80e+01 8.16e-01 3.80e+01 1.90e+01 3 Skip BFGS \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 1.5226e-01 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 1.1100e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 1.8975e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.8975e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 50 <= iter = 50\n",
"------------------------- DONE! -------------------------\n",
"1 loops, best of 3: 20min 52s per loop\n"
]
}
],
"source": [
"%%timeit\n",
"# Run the inversion, given the background model as a start.\n",
"mopt = inv.run(m_0)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7fef773ac550>"
]
},
"metadata": {},
"output_type": "display_data"
"ename": "NameError",
"evalue": "name 'mopt' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-7-915cfd00243c>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'matplotlib inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msimpegmt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mUtils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdataUtils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplotMT1DModelData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mproblem\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mm_0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mmopt\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msuptitle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Target - smooth true'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mNameError\u001b[0m: name 'mopt' is not defined"
]
}
],
"source": [
"%matplotlib inline\n",
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,mopt])\n",
"fig = simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,mopt])\n",
"fig.suptitle('Target - smooth true')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
"source": [
"reg.alpha_xx = 0.001\n",
"saveModel.fileName = 'Inversion_TargMisEqnD_smoothTrue_Wxx'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%%timeit\n",
"moptWxx = inv.run(m_0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"moptWxx = Out[11]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"fig = simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,moptWxx])\n",
"fig.suptitle('Target - smooth true-Wxx as 0.001')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"1/np.exp(moptWxx)"
]
},
{
"cell_type": "code",
@@ -272,18 +543,6 @@
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"metadata": {
"collapsed": false
},
@@ -17,7 +17,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 2,
"metadata": {
"collapsed": false
},
@@ -30,23 +30,23 @@
"nFreq = 31\n",
"freqs = np.logspace(3,-3,nFreq)\n",
"# Set mesh parameters\n",
"ct = 10\n",
"air = simpeg.Utils.meshTensor([(ct,25,1.3)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,5,-1.2)]),np.ones((3,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],25,-1.3)])\n",
"ct = 20\n",
"air = simpeg.Utils.meshTensor([(ct,16,1.4)])\n",
"core = np.concatenate( ( np.kron(simpeg.Utils.meshTensor([(ct,10,-1.3)]),np.ones((5,))) , simpeg.Utils.meshTensor([(ct,5)]) ) )\n",
"bot = simpeg.Utils.meshTensor([(core[0],10,-1.4)])\n",
"x0 = -np.array([np.sum(np.concatenate((core,bot)))])\n",
"# Make the model\n",
"m1d = simpeg.Mesh.TensorMesh([np.concatenate((bot,core,air))], x0=x0)\n",
"\n",
"# Setup model varibles\n",
"active = m1d.vectorCCx<0.\n",
"layer1 = (m1d.vectorCCx<-200.) & (m1d.vectorCCx>=-600.)\n",
"layer2 = (m1d.vectorCCx<-2000.) & (m1d.vectorCCx>=-4000.)\n",
"layer1 = (m1d.vectorCCx<-500.) & (m1d.vectorCCx>=-800.)\n",
"layer2 = (m1d.vectorCCx<-3500.) & (m1d.vectorCCx>=-5000.)\n",
"# Set the conductivity values\n",
"sig_half = 2e-3\n",
"sig_air = 1e-8\n",
"sig_layer1 = 1\n",
"sig_layer2 = .1\n",
"sig_layer1 = .2\n",
"sig_layer2 = .2\n",
"# Make the true model\n",
"sigma_true = np.ones(m1d.nCx)*sig_air\n",
"sigma_true[active] = sig_half\n",
@@ -66,7 +66,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 3,
"metadata": {
"collapsed": false
},
@@ -94,7 +94,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 4,
"metadata": {
"collapsed": false
},
@@ -109,19 +109,19 @@
"else:\n",
" d_true = survey.dpred(m_true)\n",
" np.save('MT1D_dtrue.npy',d_true)\n",
" d_obs = std*abs(d_true)*np.random.randn(*d_true.shape)\n",
" d_obs = d_true + std*abs(d_true)*np.random.randn(*d_true.shape)\n",
" np.save('MT1D_dobs.npy',d_obs)\n",
"# Assign the dobs\n",
"survey.dtrue = d_true\n",
"survey.dobs = d_obs\n",
"survey.std = survey.dobs*0 + std\n",
"survey.std = np.abs(survey.dobs*std) + 0.01*np.linalg.norm(survey.dobs) #survey.dobs*0 + std\n",
"# Assign the data weight\n",
"survey.Wd = 1/(abs(survey.dobs)*survey.std)"
"survey.Wd = 1/survey.std #(abs(survey.dobs)*survey.std)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 5,
"metadata": {
"collapsed": false
},
@@ -132,7 +132,7 @@
"# Define a counter\n",
"C = simpeg.Utils.Counter()\n",
"# Set the optimization\n",
"opt = simpeg.Optimization.InexactGaussNewton(maxIter = 50)\n",
"opt = simpeg.Optimization.InexactGaussNewton(maxIter = 30)\n",
"opt.counter = C\n",
"opt.LSshorten = 0.5\n",
"opt.remember('xc')\n",
@@ -145,9 +145,10 @@
" reg = simpeg.Regularization.Tikhonov(regMesh)\n",
"else:\n",
" reg = simpeg.Regularization.Tikhonov(m1d,mapping=mappingExpAct)\n",
"reg.alpha_s = 1e-6\n",
"reg.smoothModel = False\n",
"reg.alpha_s = 1e-7\n",
"reg.alpha_x = 1.\n",
"\n",
"# reg.alpha_xx = .001\n",
"# Inversion problem\n",
"invProb = simpeg.InvProblem.BaseInvProblem(dmis, reg, opt)\n",
"invProb.counter = C\n",
@@ -155,15 +156,16 @@
"beta = simpeg.Directives.BetaSchedule()\n",
"betaest = simpeg.Directives.BetaEstimate_ByEig(beta0_ratio=0.75)\n",
"targmis = simpeg.Directives.TargetMisfit()\n",
"targmis.target = 1/2 * survey.nD\n",
"saveModel = simpeg.Directives.SaveModelEveryIteration()\n",
"saveModel.fileName = 'Inversion_TargMisEqnDregMesh'\n",
"saveModel.fileName = 'Inversion_TargMisEqnDregMesh_smoothFalse'\n",
"# Create an inversion object\n",
"inv = simpeg.Inversion.BaseInversion(invProb, directiveList=[beta,betaest,targmis,saveModel]) \n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": false
@@ -173,33 +175,67 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Mon, 06 Jul 2015 15:56:58 +0000\n",
"SimPEG.InvProblem will set Regularization.mref to m0.\n",
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.l2_DataMisfit is creating default weightings for Wd.\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnDregMesh.npy'\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnDregMesh_smoothFalse.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 5.15e+05 1.32e+06 2.95e+00 2.83e+06 3.23e+05 0 \n",
" 1 5.15e+05 1.66e+05 2.77e+00 1.59e+06 3.93e+04 0 \n",
" 2 5.15e+05 2.22e+04 2.75e+00 1.44e+06 7.05e+03 0 Skip BFGS \n",
"------------------------------------------------------------------\n",
"0 : ft = 1.4405e+06 <= alp*descent = 1.4405e+06\n",
"1 : maxIterLS = 10 <= iterLS = 10\n",
"------------------------- End Linesearch -------------------------\n",
"The linesearch got broken. Boo.\n"
" 0 2.79e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 \n",
" 1 2.79e+05 2.50e+04 2.20e-03 2.56e+04 5.64e+03 0 \n",
" 2 2.79e+05 3.37e+03 4.71e-03 4.68e+03 9.94e+02 0 Skip BFGS \n",
" 3 3.48e+04 1.81e+03 4.72e-03 1.97e+03 2.88e+02 0 Skip BFGS \n",
" 4 3.48e+04 1.03e+03 1.53e-02 1.57e+03 2.02e+02 0 Skip BFGS \n",
" 5 3.48e+04 8.04e+02 1.70e-02 1.40e+03 1.02e+02 0 \n",
" 6 4.35e+03 6.75e+02 1.98e-02 7.61e+02 1.50e+02 0 Skip BFGS \n",
" 7 4.35e+03 3.41e+02 5.86e-02 5.96e+02 2.60e+02 0 \n",
" 8 4.35e+03 4.04e+02 3.73e-02 5.67e+02 1.27e+02 0 \n",
" 9 5.44e+02 3.85e+02 3.62e-02 4.05e+02 1.25e+02 1 \n",
" 10 5.44e+02 2.92e+02 1.37e-01 3.66e+02 3.80e+02 0 \n",
" 11 5.44e+02 2.08e+02 1.17e-01 2.71e+02 2.34e+02 1 \n",
" 12 6.80e+01 8.59e+01 1.52e-01 9.63e+01 3.85e+01 0 Skip BFGS \n",
" 13 6.80e+01 7.54e+01 1.76e-01 8.74e+01 7.22e+01 1 \n",
" 14 6.80e+01 6.53e+01 2.09e-01 7.95e+01 4.35e+01 0 \n",
" 15 8.50e+00 6.09e+01 2.13e-01 6.27e+01 4.35e+01 1 \n",
" 16 8.50e+00 5.11e+01 3.14e-01 5.38e+01 6.93e+01 0 Skip BFGS \n",
" 17 8.50e+00 4.66e+01 3.24e-01 4.93e+01 1.25e+01 0 \n",
" 18 1.06e+00 4.55e+01 3.34e-01 4.59e+01 1.58e+01 0 \n",
" 19 1.06e+00 4.26e+01 4.74e-01 4.31e+01 1.55e+01 0 \n",
" 20 1.06e+00 4.25e+01 4.64e-01 4.30e+01 1.74e+01 0 \n",
" 21 1.33e-01 4.22e+01 5.17e-01 4.22e+01 2.33e+01 2 \n",
" 22 1.33e-01 4.20e+01 4.96e-01 4.21e+01 2.25e+01 1 \n",
" 23 1.33e-01 4.18e+01 5.13e-01 4.19e+01 3.00e+01 0 \n",
" 24 1.66e-02 4.13e+01 5.34e-01 4.13e+01 3.75e+01 1 Skip BFGS \n",
" 25 1.66e-02 4.13e+01 4.91e-01 4.13e+01 2.33e+01 0 \n",
" 26 1.66e-02 4.04e+01 3.75e-01 4.04e+01 2.85e+01 2 \n",
" 27 2.08e-03 4.03e+01 3.92e-01 4.03e+01 2.55e+01 0 \n",
" 28 2.08e-03 3.97e+01 3.50e-01 3.97e+01 3.04e+01 3 \n",
" 29 2.08e-03 3.91e+01 3.46e-01 3.91e+01 3.72e+01 2 \n",
" 30 2.59e-04 3.86e+01 4.32e-01 3.86e+01 3.71e+01 0 Skip BFGS \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 4.3953e-01 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 1.9611e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 3.7072e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 3.7072e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 30 <= iter = 30\n",
"------------------------- DONE! -------------------------\n",
"CPU times: user 11min 29s, sys: 960 ms, total: 11min 30s\n",
"Wall time: 11min 30s\n"
]
}
],
"source": [
"# Run the inversion, given the background model as a start.\n",
"%%time\n",
"simpegmt.Utils.dataUtils.printTime()\n",
"mopt = inv.run(m_0)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 7,
"metadata": {
"collapsed": false
},
@@ -226,9 +262,9 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0bd6798710>"
"<matplotlib.figure.Figure at 0x7fab14b26910>"
]
},
"metadata": {},
@@ -238,9 +274,155 @@
"source": [
"%matplotlib inline\n",
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[m_0,mopt])\n",
"plt.suptitle('Target misfit-smooth False')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"reg.alpha_xx = 0.001\n",
"saveModel.fileName = 'Inversion_TargMisEqnDregMesh_smoothFalseWxx'"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mon, 06 Jul 2015 16:08:31 +0000\n",
"SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv.\n",
" ***Done using same solver as the problem***\n",
"SimPEG.SaveModelEveryIteration will save your models as: '###-Inversion_TargMisEqnDregMesh_smoothFalseWxx.npy'\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 2.41e+05 2.18e+05 0.00e+00 2.18e+05 4.01e+04 0 Skip BFGS \n",
" 1 2.41e+05 2.50e+04 2.21e-03 2.55e+04 5.64e+03 0 Skip BFGS \n",
" 2 2.41e+05 3.36e+03 4.76e-03 4.51e+03 9.90e+02 0 Skip BFGS \n",
" 3 3.01e+04 1.76e+03 5.03e-03 1.91e+03 2.81e+02 0 Skip BFGS \n",
" 4 3.01e+04 9.65e+02 1.77e-02 1.50e+03 2.23e+02 0 Skip BFGS \n",
" 5 3.01e+04 7.17e+02 1.92e-02 1.29e+03 1.08e+02 0 \n",
" 6 3.76e+03 5.91e+02 2.23e-02 6.75e+02 1.34e+02 0 Skip BFGS \n",
" 7 3.76e+03 3.17e+02 5.95e-02 5.41e+02 2.60e+02 0 \n",
" 8 3.76e+03 3.31e+02 4.15e-02 4.87e+02 1.12e+02 0 \n",
" 9 4.70e+02 3.02e+02 4.38e-02 3.22e+02 1.07e+02 1 \n",
" 10 4.70e+02 2.25e+02 1.46e-01 2.94e+02 3.72e+02 0 \n",
" 11 4.70e+02 1.55e+02 1.23e-01 2.13e+02 2.31e+02 1 \n",
" 12 5.88e+01 8.26e+01 1.35e-01 9.05e+01 5.12e+01 0 Skip BFGS \n",
" 13 5.88e+01 7.00e+01 1.74e-01 8.02e+01 7.64e+01 0 Skip BFGS \n",
" 14 5.88e+01 6.72e+01 1.77e-01 7.76e+01 3.88e+01 0 \n",
" 15 7.35e+00 6.55e+01 1.88e-01 6.69e+01 3.28e+01 0 \n",
" 16 7.35e+00 5.88e+01 2.19e-01 6.04e+01 4.50e+01 1 \n",
" 17 7.35e+00 5.59e+01 2.43e-01 5.77e+01 4.95e+01 2 Skip BFGS \n",
" 18 9.19e-01 5.33e+01 3.02e-01 5.36e+01 7.11e+01 0 Skip BFGS \n",
" 19 9.19e-01 4.81e+01 3.05e-01 4.83e+01 1.18e+01 0 \n",
" 20 9.19e-01 4.77e+01 3.34e-01 4.80e+01 1.56e+01 0 \n",
" 21 1.15e-01 4.76e+01 3.47e-01 4.76e+01 1.33e+01 0 \n",
" 22 1.15e-01 4.74e+01 3.49e-01 4.74e+01 9.70e+00 0 \n",
" 23 1.15e-01 4.72e+01 3.60e-01 4.73e+01 1.33e+01 2 Skip BFGS \n",
" 24 1.44e-02 4.66e+01 3.81e-01 4.66e+01 2.08e+01 0 \n",
" 25 1.44e-02 4.65e+01 3.70e-01 4.65e+01 1.70e+01 0 \n",
" 26 1.44e-02 4.52e+01 2.77e-01 4.52e+01 3.75e+01 2 Skip BFGS \n",
" 27 1.79e-03 4.45e+01 2.81e-01 4.45e+01 1.81e+01 0 \n",
" 28 1.79e-03 4.43e+01 2.78e-01 4.43e+01 1.40e+01 1 Skip BFGS \n",
" 29 1.79e-03 4.42e+01 2.68e-01 4.42e+01 1.68e+01 1 \n",
" 30 2.24e-04 4.31e+01 2.77e-01 4.31e+01 2.79e+01 1 Skip BFGS \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 1.1021e+00 <= tolF*(1+|f0|) = 2.1833e+04\n",
"1 : |xc-x_last| = 1.0668e+00 <= tolX*(1+|x0|) = 5.1104e+00\n",
"0 : |proj(x-g)-x| = 2.7855e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 2.7855e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 30 <= iter = 30\n",
"------------------------- DONE! -------------------------\n",
"CPU times: user 11min 31s, sys: 484 ms, total: 11min 31s\n",
"Wall time: 11min 31s\n"
]
}
],
"source": [
"%%time\n",
"simpegmt.Utils.dataUtils.printTime()\n",
"moptWxx = inv.run(m_0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7fab1024b7d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"simpegmt.Utils.dataUtils.plotMT1DModelData(problem,[mopt,moptWxx])\n",
"plt.suptitle('Target misfit-smooth False-Wxx included')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.62176541e+02, 1.93066605e+03, 5.43119942e+02,\n",
" 1.23983980e+02, 9.62568969e+01, 2.26952779e+02,\n",
" 4.16015718e+02, 3.36033260e+02, 1.49361976e+02,\n",
" 5.94809582e+01, 2.68597003e+01, 1.31073753e+01,\n",
" 6.60576408e+00, 4.10892000e+00, 4.03067488e+00,\n",
" 5.25251605e+00, 6.56267752e+00, 8.01989052e+00,\n",
" 1.02889234e+01, 1.50359567e+01, 2.35198494e+01,\n",
" 3.60094535e+01, 5.45566016e+01, 7.86143059e+01,\n",
" 1.05154338e+02, 1.27026062e+02, 1.43644507e+02,\n",
" 1.56945792e+02, 1.66362651e+02, 1.71043208e+02,\n",
" 1.70082239e+02, 1.65514714e+02, 1.57395317e+02,\n",
" 1.46351336e+02, 1.33299014e+02, 1.20754766e+02,\n",
" 1.09753808e+02, 9.89302713e+01, 8.85290515e+01,\n",
" 7.84946496e+01, 6.89501897e+01, 5.84210778e+01,\n",
" 4.29656441e+01, 2.24842307e+01, 6.30396936e+00,\n",
" 1.95241628e+00, 3.16204318e+00, 2.29981760e+01,\n",
" 6.19914391e+01, 1.26262913e+02, 2.26157313e+02,\n",
" 3.37249660e+02, 4.25572770e+02, 4.26317144e+02,\n",
" 3.41068698e+02, 2.39971365e+02, 1.64269182e+02,\n",
" 1.37876397e+02, 2.56982660e+02, 1.06313526e+03,\n",
" 4.35525995e+03, 1.32851564e+04, 3.27770877e+04,\n",
" 6.09617713e+04, 8.03476028e+04])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
@@ -11,6 +11,175 @@
"## Forward model a data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import SimPEG as simpeg\n",
"import simpegMT as simpegmt\n",
"import cPickle as pickle"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## Setup the forward modeling\n",
"# Read the model\n",
"modelname = \"simpegTDmodel.con\"\n",
"sigma = np.loadtxt(modelname)\n",
"# Make the mesh.\n",
"mTensor = simpeg.Utils.meshTensor\n",
"cSize = [50,20]\n",
"# Cells constant size mesh\n",
"hx = mTensor([(cSize[0],50)])\n",
"hy = mTensor([(cSize[0],50)])\n",
"hz = mTensor([(cSize[1],48)])\n",
"x0 = np.array([-1250,-1250,- 30*20])\n",
"mesh3dCons = simpeg.Mesh.TensorMesh([hx,hy,hz],x0)\n",
"# With padding\n",
"hPad = mTensor([(cSize[0],5,1.5)])\n",
"aPad = mTensor([(cSize[1],13,1.3)])\n",
"bPad = mTensor([(cSize[1],5,-1.5)])\n",
"hxPad = np.hstack((hPad[::-1],mTensor([(cSize[0],40)]),hPad))\n",
"hyPad = np.hstack((hPad[::-1],mTensor([(cSize[0],40)]),hPad))\n",
"hzPad = np.hstack((bPad,mTensor([(cSize[1],30)]),aPad))\n",
"x0Pad = np.array([-(np.sum(hPad)+1000),-(np.sum(hPad)+1000),-(np.sum(bPad)+600)])\n",
"mesh3d = simpeg.Mesh.TensorMesh([hxPad,hyPad,hzPad],x0Pad)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Load the model to the uniform cell mesh\n",
"modelUniCell = simpeg.Utils.meshutils.readUBCTensorModel(modelname,mesh3dCons)\n",
"# Save as a vtk file\n",
"simpeg.Utils.meshutils.writeVTRFile('modelTDuniMesh.vtr',mesh3dCons,{'S/m':modelUniCell})"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"# Load the model to the mesh with padding cells\n",
"modelTD = simpeg.Utils.meshutils.readUBCTensorModel(modelname,mesh3d)\n",
"# Save as a vtk file\n",
"simpeg.Utils.meshutils.writeVTRFile('modelTDpaddedMesh.vtr',mesh3d,{'S/m':modelTD})"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Define the data locations\n",
"xG,yG = np.meshgrid(np.linspace(-700,700,8),np.linspace(-700,700,8))\n",
"zG = np.zeros_like(xG)\n",
"locs = np.hstack((simpeg.mkvc(xG.ravel(),2),simpeg.mkvc(yG.ravel(),2),simpeg.mkvc(zG.ravel(),2)))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "SolverException",
"evalue": "Mumps Exception [-13] - An error occurred in a Fortran ALLOCATE statement. The size that the package requested is available in INFO(2). If INFO(2) is negative, then the size that the package requested is obtained by multiplying the absolute value of INFO(2) by 1 million.",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mSolverException\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-7-10aaec78a1f3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;31m# Forward model the data\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 22\u001b[1;33m \u001b[0mfields\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mproblem\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfields\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodelTD\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 23\u001b[0m \u001b[0mmtData\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msurvey\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprojectFields\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfields\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpegmt/simpegMT/ProblemMT3D/Problems.pyc\u001b[0m in \u001b[0;36mfields\u001b[1;34m(self, m)\u001b[0m\n\u001b[0;32m 100\u001b[0m \u001b[0mA\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetA\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfreq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[0mrhs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetRHS\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfreq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 102\u001b[1;33m \u001b[0mAinv\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSolver\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mA\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msolverOpts\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 103\u001b[0m \u001b[0me_s\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mAinv\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mrhs\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 104\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/pymatsolver/pymatsolver/Mumps/__init__.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, A, symmetric, fromPointer)\u001b[0m\n\u001b[0;32m 96\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 97\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mfromPointer\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 98\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 99\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfromPointer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_Pointer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 100\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpointer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfromPointer\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/pymatsolver/pymatsolver/Mumps/__init__.pyc\u001b[0m in \u001b[0;36mfactor\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 132\u001b[0m self.A.indptr+1)\n\u001b[0;32m 133\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mierr\u001b[0m \u001b[1;33m<\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 134\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mSolverException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Mumps Exception [%d] - %s\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mierr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_mumpsErrors\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mierr\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 135\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mierr\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 136\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m\"Mumps Warning [%d] - %s\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mierr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_mumpsErrors\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mierr\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mSolverException\u001b[0m: Mumps Exception [-13] - An error occurred in a Fortran ALLOCATE statement. The size that the package requested is available in INFO(2). If INFO(2) is negative, then the size that the package requested is obtained by multiplying the absolute value of INFO(2) by 1 million."
]
}
],
"source": [
"# Make the receiver list\n",
"rxList = []\n",
"for rxType in ['zxxr','zxxi','zxyr','zxyi','zyxr','zyxi','zyyr','zyyi']:\n",
" rxList.append(simpegmt.SurveyMT.RxMT(locs,rxType)) \n",
"# Source list\n",
"srcList =[]\n",
"freqs = np.logspace(3,0,13)\n",
"for freq in freqs:\n",
" srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq))\n",
"# Survey MT\n",
"survey = simpegmt.SurveyMT.SurveyMT(srcList)\n",
"\n",
"# Setup the problem object\n",
"sigma1d = mesh3d.r(modelTD,'CC','CC','M')[0,0,:] # Use the edge column as a background model\n",
"problem = simpegmt.ProblemMT3D.eForm_ps(mesh3d,sigmaPrimary = sigma1d)\n",
"problem.verbose = False\n",
"from pymatsolver import MumpsSolver\n",
"problem.Solver = MumpsSolver\n",
"problem.pair(survey)\n",
"\n",
"# Forward model the data\n",
"fields = problem.fields(modelTD)\n",
"mtData = survey.projectFields(fields)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
" 50*50*48"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"np.sum(modTD<1e-7)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"45000/50**2"
]
},
{
"cell_type": "code",
"execution_count": null,
@@ -18,9 +187,7 @@
"collapsed": true
},
"outputs": [],
"source": [
"# Define the model\n"
]
"source": []
}
],
"metadata": {
@@ -0,0 +1,71 @@
## Script to run 3D forward model
## Forward model a data
import numpy as np, sys, os, time, gzip, cPickle as pickle
sys.path.append('/tera_raid/gudni/gitCodes/simpegmt')
sys.path.append('/tera_raid/gudni/gitCodes/simpegem')
sys.path.append('/tera_raid/gudni/gitCodes/simpeg')
sys.path.append('/tera_raid/gudni')
from pymatsolver import MumpsSolver
import simpegMT as simpegmt, SimPEG as simpeg
import numpy as np, scipy
## Setup the forward modeling
# Read the model
modelname = "simpegTDmodel.con"
sigma = np.loadtxt(modelname)
# Make the mesh.
mTensor = simpeg.Utils.meshTensor
cSize = [50,20]
# Cells constant size mesh
hx = mTensor([(cSize[0],50)])
hy = mTensor([(cSize[0],50)])
hz = mTensor([(cSize[1],48)])
x0 = np.array([-1250,-1250,- 30*20])
mesh3dCons = simpeg.Mesh.TensorMesh([hx,hy,hz],x0)
# With padding
hPad = mTensor([(cSize[0],5,1.5)])
aPad = mTensor([(cSize[1],13,1.3)])
bPad = mTensor([(cSize[1],5,-1.5)])
hxPad = np.hstack((hPad[::-1],mTensor([(cSize[0],40)]),hPad))
hyPad = np.hstack((hPad[::-1],mTensor([(cSize[0],40)]),hPad))
hzPad = np.hstack((bPad,mTensor([(cSize[1],30)]),aPad))
x0Pad = np.array([-(np.sum(hPad)+1000),-(np.sum(hPad)+1000),-(np.sum(bPad)+600)])
mesh3d = simpeg.Mesh.TensorMesh([hxPad,hyPad,hzPad],x0Pad)
# Load the model to the uniform cell mesh
modelUniCell = simpeg.Utils.meshutils.readUBCTensorModel(modelname,mesh3dCons)
# Load the model to the mesh with padding cells
modelTD = simpeg.Utils.meshutils.readUBCTensorModel(modelname,mesh3d)
# Define the data locations
xG,yG = np.meshgrid(np.linspace(-700,700,8),np.linspace(-700,700,8))
zG = np.zeros_like(xG)
locs = np.hstack((simpeg.mkvc(xG.ravel(),2),simpeg.mkvc(yG.ravel(),2),simpeg.mkvc(zG.ravel(),2)))
# Make the receiver list
rxList = []
for rxType in ['zxxr','zxxi','zxyr','zxyi','zyxr','zyxi','zyyr','zyyi']:
rxList.append(simpegmt.SurveyMT.RxMT(locs,rxType))
# Source list
srcList =[]
freqs = np.logspace(3,0,13)
for freq in freqs:
srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq))
# Survey MT
survey = simpegmt.SurveyMT.SurveyMT(srcList)
# Setup the problem object
sigma1d = mesh3d.r(modelTD,'CC','CC','M')[0,0,:] # Use the edge column as a background model
problem = simpegmt.ProblemMT3D.eForm_ps(mesh3d,sigmaPrimary = sigma1d)
problem.verbose = False
from pymatsolver import MumpsSolver
problem.Solver = MumpsSolver
problem.pair(survey)
# Forward model the data
fields = problem.fields(modelTD)
mtData = survey.projectFields(fields)
# Save the data
np.save('seogiModel_MTdata.npy',simpeg.mkvc(mtData,1))
File diff suppressed because it is too large. Load diff
+9 -30
View File
@@ -23,40 +23,19 @@ class eForm_ps(BaseMTProblem):
_fieldType = 'e'
_eqLocs = 'FE'
fieldsPair = FieldsMT_3D
# Need to add the src ....
# Set new properties
# Background model
# Shouldn't need the commented block.
# @property
# def backModel(self):
# """
# Sets the model, and removes dependent mass matrices.
# """
# return getattr(self, '_backModel', None)
# @backModel.setter
# def backModel(self, value):
# if value is self.backModel:
# return # it is the same!
# self._backModel = Models.Model(value, self.mapping)
# for prop in self.deleteTheseOnModelUpdate:
# if hasattr(self, prop):
# delattr(self, prop)
# @property
# def MeDeltaSigma(self):
# #TODO: hardcoded to sigma as the model
# if getattr(self, '_MeDeltaSigma', None) is None:
# sigma = self.curModel
# sigmaBG = self.backModel
# self._MeDeltaSigma = self.mesh.getEdgeInnerProduct(sigma - sigmaBG)
# return self._MeDeltaSigma
_sigmaPrimary = None
def __init__(self, mesh, **kwargs):
BaseMTProblem.__init__(self, mesh, **kwargs)
@property
def sigmaPrimary(self):
return self._sigmaPrimary
@sigmaPrimary.setter
def sigmaPrimary(self, val):
# Note: TODO add logic for val, make sure it is the correct size.
self._sigmaPrimary = val
def getA(self, freq):
"""
Function to get the A matrix.
@@ -36,7 +36,7 @@ def setupSurvey(sigmaHalf,tD=True):
srcList.append(simpegmt.SurveyMT.srcMT_polxy_1DhomotD(rxList,freq))
else:
for freq in freqs:
srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq,sigma))
srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq))
survey = simpegmt.SurveyMT.SurveyMT(srcList)
return survey, sigma, m1d
@@ -63,7 +63,7 @@ def appRes_TotalFieldNorm(sigmaHalf):
# Make the survey
survey, sigma, mesh = setupSurvey(sigmaHalf)
problem = simpegmt.ProblemMT1D.eForm_TotalField(mesh,sigma)
problem = simpegmt.ProblemMT1D.eForm_TotalField(mesh)
problem.pair(survey)
# Get the fields
@@ -99,7 +99,7 @@ def appRes_psFieldNorm(sigmaHalf):
# Make the survey
survey, sigma, mesh = setupSurvey(sigmaHalf,False)
problem = simpegmt.ProblemMT1D.eForm_psField(mesh)
problem = simpegmt.ProblemMT1D.eForm_psField(mesh, sigmaPrimary = sigma)
problem.pair(survey)
# Get the fields
@@ -117,7 +117,7 @@ def appPhs_psFieldNorm(sigmaHalf):
# Make the survey
survey, sigma, mesh = setupSurvey(sigmaHalf,False)
problem = simpegmt.ProblemMT1D.eForm_psField(mesh)
problem = simpegmt.ProblemMT1D.eForm_psField(mesh, sigmaPrimary = sigma)
problem.pair(survey)
# Get the fields
@@ -109,7 +109,7 @@ def dataMis_AnalyticPrimarySecondary(sigmaHalf):
# Make the survey
# Primary secondary
surveyPS, sigmaPS, mesh = setupSurvey(sigmaHalf,False)
problemPS = simpegmt.ProblemMT1D.eForm_psField(mesh,sigma)
problemPS = simpegmt.ProblemMT1D.eForm_psField(mesh,sigmaPS)
problemPS.pair(surveyPS)
# Analytic data
dataAna = calculateAnalyticSolution(surveyPS.srcList,mesh,sigma)
@@ -18,7 +18,7 @@ def getInputs():
# M = simpeg.Mesh.TensorMesh([[(100,5,-1.5),(100.,10),(100,5,1.5)],[(100,5,-1.5),(100.,10),(100,5,1.5)],[(100,5,1.6),(100.,10),(100,3,2)]], x0=['C','C',-3529.5360])
M = simpeg.Mesh.TensorMesh([[(1000,6,-1.5),(1000.,6),(1000,6,1.5)],[(1000,6,-1.5),(1000.,2),(1000,6,1.5)],[(1000,10,-1.3),(1000.,2),(1000,10,1.3)]], x0=['C','C','C'])# Setup the model
# Set the frequencies
freqs = np.logspace(3,-3,7)
freqs = np.logspace(1,-3,5)
elev = 0
## Setup the the survey object
@@ -73,15 +73,18 @@ def runSimpegMTfwd_eForm_ps(inputsProblem):
srcList =[]
sigma1d = M.r(sigBG,'CC','CC','M')[0,0,:]
for freq in freqs:
srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq,sigma1d))
srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq))
# Survey MT
survey = simpegmt.SurveyMT.SurveyMT(srcList)
## Setup the problem object
problem = simpegmt.ProblemMT3D.eForm_ps(M)
problem = simpegmt.ProblemMT3D.eForm_ps(M,sigmaPrimary=sigma1d)
problem.verbose = False
from pymatsolver import MumpsSolver
problem.Solver = MumpsSolver
try:
from pymatsolver import MumpsSolver
problem.Solver = MumpsSolver
except:
pass
problem.pair(survey)
fields = problem.fields(sig)
@@ -106,19 +109,19 @@ def appResPhsHalfspace_eFrom_ps_Norm(sigmaHalf,appR=True):
# Calculate the app phs
app_rpxy, app_rpyx = np.array(getAppResPhs(data))
if appR:
return np.linalg.norm(np.abs(app_rpxy[0,:] - np.ones(survey.nFreq)/sigmaHalf) * sigmaHalf)
return np.all(np.abs(app_rpxy[0,:] - np.ones(survey.nFreq)/sigmaHalf) * sigmaHalf < .35)
else:
return np.linalg.norm(np.abs(app_rpxy[1,:] + np.ones(survey.nFreq)*135) / 135)
return np.all(np.abs(app_rpxy[1,:] + np.ones(survey.nFreq)*135) / 135 < .35)
class TestAnalytics(unittest.TestCase):
def setUp(self):
pass
def test_appRes2en1(self):self.assertLess(appResPhsHalfspace_eFrom_ps_Norm(2e-1), TOLr)
def test_appRes2en2(self):self.assertLess(appResPhsHalfspace_eFrom_ps_Norm(2e-2), TOLr)
def test_appRes2en3(self):self.assertLess(appResPhsHalfspace_eFrom_ps_Norm(2e-3), TOLr)
def test_appRes2en1(self):self.assertLess(appResPhsHalfspace_eFrom_ps_Norm(2e-1,False), TOLr)
def test_appRes2en2(self):self.assertLess(appResPhsHalfspace_eFrom_ps_Norm(2e-2,False), TOLr)
def test_appRes2en3(self):self.assertLess(appResPhsHalfspace_eFrom_ps_Norm(2e-3,False), TOLr)
# def test_appRes2en1(self):self.assertTrue(appResPhsHalfspace_eFrom_ps_Norm(2e-1))
def test_appRes1en2(self):self.assertTrue(appResPhsHalfspace_eFrom_ps_Norm(1e-2))
def test_appRes1en3(self):self.assertTrue(appResPhsHalfspace_eFrom_ps_Norm(1e-3))
# def test_appRes2en1(self):self.assertTrue(appResPhsHalfspace_eFrom_ps_Norm(2e-1,False))
def test_appPhs1en2(self):self.assertTrue(appResPhsHalfspace_eFrom_ps_Norm(1e-2,False))
def test_appPhs1en3(self):self.assertTrue(appResPhsHalfspace_eFrom_ps_Norm(1e-3,False))
if __name__ == '__main__':
unittest.main()
+5 -2
View File
@@ -65,7 +65,6 @@ def plotMT1DModelData(problem,models,symList=None):
# if not symList:
# symList = ['x']*len(models)
sys.path.append('/home/gudni/Dropbox/code/python/MTview')
import plotDataTypes as pDt
# Loop through the models.
modelList = [problem.survey.mtrue]
@@ -122,4 +121,8 @@ def plotMT1DModelData(problem,models,symList=None):
for ax in [axM,axR,axP]:
ax.xaxis.set_tick_params(labelsize=fontSize)
ax.yaxis.set_tick_params(labelsize=fontSize)
return fig
return fig
def printTime():
import time
print time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime())
+6 -1
View File
@@ -7,7 +7,12 @@ from simpegMT.Utils.dataUtils import rec2ndarr
# Import modules
import numpy as np
import os, osr, sys, re
import os, sys, re
try:
import osr
except ImportError as e:
print 'Could not import osr, missing the gdal package'
pass
class EDIimporter:
"""
+416
View File
@@ -0,0 +1,416 @@
from matplotlib import pyplot as plt, colors, numpy as np
def rec2nd(structArray):
""" Converts a structured/record array to ndarray to do operations on."""
return structArray.view((np.float,len(structArray.dtype.names)))
def plotIsoFreqNSimpedance(ax,freq,array,flag,par='abs',colorbar=True,colorNorm='SymLog',cLevel=True,contour=True):
indUniFreq = np.where(freq==array['freq'])
x, y = array['x'][indUniFreq],array['y'][indUniFreq]
if par == 'abs':
zPlot = np.abs(array[flag][indUniFreq])
cmap = plt.get_cmap('OrRd_r')#seismic')
level = np.logspace(0,-5,31)
clevel = np.logspace(0,-4,5)
plotNorm = colors.LogNorm()
elif par == 'real':
zPlot = np.real(array[flag][indUniFreq])
cmap = plt.get_cmap('RdYlBu')
if cLevel:
level = np.concatenate((-np.logspace(0,-10,31),np.logspace(-10,0,31)))
clevel = np.concatenate((-np.logspace(0,-8,5),np.logspace(-8,0,5)))
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
if colorNorm=='SymLog':
plotNorm = colors.SymLogNorm(1e-10,linscale=2)
else:
plotNorm = colors.Normalize()
elif par == 'imag':
zPlot = np.imag(array[flag][indUniFreq])
cmap = plt.get_cmap('RdYlBu')
level = np.concatenate((-np.logspace(0,-10,31),np.logspace(-10,0,31)))
clevel = np.concatenate((-np.logspace(0,-8,5),np.logspace(-8,0,5)))
plotNorm = colors.SymLogNorm(1e-10,linscale=2)
if cLevel:
level = np.concatenate((-np.logspace(0,-10,31),np.logspace(-10,0,31)))
clevel = np.concatenate((-np.logspace(0,-8,5),np.logspace(-8,0,5)))
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
if colorNorm=='SymLog':
plotNorm = colors.SymLogNorm(1e-10,linscale=2)
elif colorNorm=='Lin':
plotNorm = colors.Normalize()
if contour:
cs = ax.tricontourf(x,y,zPlot,levels=level,cmap=cmap,norm=plotNorm)#,extend='both')
else:
uniX,uniY = np.unique(x),np.unique(y)
X,Y = np.meshgrid(np.append(uniX-25,uniX[-1]+25),np.append(uniY-25,uniY[-1]+25))
cs = ax.pcolor(X,Y,np.reshape(zPlot,(len(uniY),len(uniX))),cmap=cmap,norm=plotNorm)
if colorbar:
plt.colorbar(cs,cax=ax.cax,ticks=clevel,format='%1.2e')
ax.set_title(flag+' '+par,fontsize=8)
return cs
def plotIsoFreqNSDiff(ax,freq,arrayList,flag,par='abs',colorbar=True,cLevel=True,mask=None,contourLine=True,useLog=False):
indUniFreq0 = np.where(freq==arrayList[0]['freq'])
indUniFreq1 = np.where(freq==arrayList[1]['freq'])
seicmap = plt.get_cmap('RdYlBu')#seismic')
x, y = arrayList[0]['x'][indUniFreq0],arrayList[0]['y'][indUniFreq0]
if par == 'abs':
if useLog:
zPlot = (np.log10(np.abs(arrayList[0][flag][indUniFreq0])) - np.log10(np.abs(arrayList[1][flag][indUniFreq1])))/np.log10(np.abs(arrayList[1][flag][indUniFreq1]))
else:
zPlot = (np.abs(arrayList[0][flag][indUniFreq0]) - np.abs(arrayList[1][flag][indUniFreq1]))/np.abs(arrayList[1][flag][indUniFreq1])
if mask:
maskInd = np.logical_or(np.abs(arrayList[0][flag][indUniFreq0])< 1e-3,np.abs(arrayList[1][flag][indUniFreq1]) < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
if cLevel:
level = np.arange(-200,201,10)
clevel = np.arange(-200,201,25)
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
elif par == 'real':
if useLog:
zPlot = (np.log10(np.real(arrayList[0][flag][indUniFreq0])) -np.log10(np.real(arrayList[1][flag][indUniFreq1])))/np.log10(np.abs((np.real(arrayList[1][flag][indUniFreq1]))))
else:
zPlot = (np.real(arrayList[0][flag][indUniFreq0]) -np.real(arrayList[1][flag][indUniFreq1]))/np.abs((np.real(arrayList[1][flag][indUniFreq1])))
if mask:
maskInd = np.logical_or(np.abs(np.real(arrayList[0][flag][indUniFreq0])) < 1e-3,np.abs(np.real(arrayList[1][flag][indUniFreq1])) < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
if cLevel:
level = np.arange(-200,201,10)
clevel = np.arange(-200,201,25)
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
elif par == 'imag':
if useLog:
zPlot = (np.log10(np.imag(arrayList[0][flag][indUniFreq0])) -np.log10(np.imag(arrayList[1][flag][indUniFreq1])))/np.log10(np.abs((np.imag(arrayList[1][flag][indUniFreq1]))))
else:
zPlot = (np.imag(arrayList[0][flag][indUniFreq0]) -np.imag(arrayList[1][flag][indUniFreq1]))/np.abs((np.imag(arrayList[1][flag][indUniFreq1])))
if mask:
maskInd = np.logical_or(np.abs(np.imag(arrayList[0][flag][indUniFreq0])) < 1e-3,np.abs(np.imag(arrayList[1][flag][indUniFreq1])) < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
if cLevel:
level = np.arange(-200,201,10)
clevel = np.arange(-200,201,25)
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
cs = ax.tricontourf(x,y,zPlot*100,levels=level*100,cmap=seicmap,extend='both') #,norm=colors.SymLogNorm(1e-2,linscale=2))
if contourLine:
csl = ax.tricontour(x,y,zPlot*100,levels=clevel*100,colors='k')
plt.clabel(csl, fontsize=7, inline=1,fmt='%1.1e',inline_spacing=10)
if colorbar:
cb = plt.colorbar(cs,cax=ax.cax,ticks=clevel*100,format='%1.1e')
for t in cb.ax.get_yticklabels():
t.set_rotation(60)
t.set_fontsize(8)
ax.set_title(flag+' '+par,fontsize=8)
def plotIsoFreqNStipper(ax,freq,array,flag,par='abs',colorbar=True,colorNorm='SymLog',cLevel=True,contour=True):
indUniFreq = np.where(freq==array['freq'])
x, y = array['x'][indUniFreq],array['y'][indUniFreq]
if par == 'abs':
cmap = plt.get_cmap('OrRd_r')#seismic')
zPlot = np.abs(array[flag][indUniFreq])
if cLevel:
level = np.logspace(-4,0,33)
clevel = np.logspace(-4,0,5)
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
if colorNorm=='SymLog':
plotNorm = colors.LogNorm()
else:
plotNorm = colors.Normalize()
elif par == 'real':
cmap = plt.get_cmap('RdYlBu')
zPlot = np.real(array[flag][indUniFreq])
if cLevel:
level = np.concatenate((-np.logspace(0,-4,33),np.logspace(-4,0,33)))
clevel = np.concatenate((-np.logspace(0,-4,5),np.logspace(-4,0,5)))
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
if colorNorm=='SymLog':
plotNorm = colors.SymLogNorm(1e-4,linscale=2)
else:
plotNorm = colors.Normalize()
elif par == 'imag':
cmap = plt.get_cmap('RdYlBu')
zPlot = np.imag(array[flag][indUniFreq])
if cLevel:
level = np.concatenate((-np.logspace(0,-4,33),np.logspace(-4,0,33)))
clevel = np.concatenate((-np.logspace(0,-4,5),np.logspace(-4,0,5)))
else:
level = np.linspace(zPlot.min(),zPlot.max(),100)
clevel = np.linspace(zPlot.min(),zPlot.max(),10)
if colorNorm=='SymLog':
plotNorm = colors.SymLogNorm(1e-4,linscale=2)
else:
plotNorm = colors.Normalize()
if contour:
cs = ax.tricontourf(x,y,zPlot,levels=level,cmap=cmap,norm=plotNorm)#,extend='both')
else:
uniX,uniY = np.unique(x),np.unique(y)
X,Y = np.meshgrid(np.append(uniX-25,uniX[-1]+25),np.append(uniY-25,uniY[-1]+25))
cs = ax.pcolor(X,Y,np.reshape(zPlot,(len(uniY),len(uniX))),levels=level,cmap=cmap,norm=plotNorm,edgecolors='k', linewidths=0.5)
if colorbar:
plt.colorbar(cs,cax=ax.cax,ticks=clevel,format='%1.2e')
ax.set_title(flag+' '+par,fontsize=8)
def plotIsoStaImpedance(ax,loc,array,flag,par='abs',pSym='s',pColor=None):
appResFact = 1/(8*np.pi**2*10**(-7))
treshold = 1.0 # 1 meter
indUniSta = np.sqrt(np.sum((rec2nd(array[['x','y']])-loc)**2,axis=1)) < treshold
freq = array['freq'][indUniSta]
if par == 'abs':
zPlot = np.abs(array[flag][indUniSta])
elif par == 'real':
zPlot = np.real(array[flag][indUniSta])
elif par == 'imag':
zPlot = np.imag(array[flag][indUniSta])
elif par == 'res':
zPlot = (appResFact/freq)*np.abs(array[flag][indUniSta])**2
elif par == 'phs':
zPlot = np.arctan2(array[flag][indUniSta].imag,array[flag][indUniSta].real)*(180/np.pi)
if not pColor:
if 'xx' in flag:
lab = 'XX'
pColor = 'g'
elif 'xy' in flag:
lab = 'XY'
pColor = 'r'
elif 'yx' in flag:
lab = 'YX'
pColor = 'b'
elif 'yy' in flag:
lab = 'YY'
pColor = 'y'
ax.plot(freq,zPlot,color=pColor,marker=pSym,label=flag)
def plotPsudoSectNSimpedance(ax,sectDict,array,flag,par='abs',colorbar=True,colorNorm='None',cLevel=None,contour=True):
indSect = np.where(sectDict.values()[0]==array[sectDict.keys()[0]])
# Define the plot axes
if 'x' in sectDict.keys()[0]:
x = array['y'][indSect]
else:
x = array['x'][indSect]
y = array['freq'][indSect]
if par == 'abs':
zPlot = np.abs(array[flag][indSect])
cmap = plt.get_cmap('OrRd_r')#seismic')
if cLevel:
level = np.logspace(0,-5,31,endpoint=True)
clevel = np.logspace(0,-4,5,endpoint=True)
else:
level = np.linspace(zPlot.min(),zPlot.max(),100,endpoint=True)
clevel = np.linspace(zPlot.min(),zPlot.max(),10,endpoint=True)
elif par == 'ares':
zPlot = np.abs(array[flag][indSect])**2/(8*np.pi**2*10**(-7)*array['freq'][indSect])
cmap = plt.get_cmap('RdYlBu')#seismic)
if cLevel:
zMax = np.log10(cLevel[1])
zMin = np.log10(cLevel[0])
else:
zMax = (np.ceil(np.log10(np.abs(zPlot).max())))
zMin = (np.floor(np.log10(np.abs(zPlot).min())))
level = np.logspace(zMin,zMax,(zMax-zMin)*8+1,endpoint=True)
clevel = np.logspace(zMin,zMax,(zMax-zMin)*2+1,endpoint=True)
plotNorm = colors.LogNorm()
elif par == 'aphs':
zPlot = np.arctan2(array[flag][indSect].imag,array[flag][indSect].real)*(180/np.pi)
cmap = plt.get_cmap('RdYlBu')#seismic)
if cLevel:
zMax = cLevel[1]
zMin = cLevel[0]
else:
zMax = (np.ceil(zPlot).max())
zMin = (np.floor(zPlot).min())
level = np.arange(zMin,zMax+.1,1)
clevel = np.arange(zMin,zMax+.1,10)
plotNorm = colors.Normalize()
elif par == 'real':
zPlot = np.real(array[flag][indSect])
cmap = plt.get_cmap('Spectral') #('RdYlBu')
if cLevel:
zMax = np.log10(cLevel[1])
zMin = np.log10(cLevel[0])
else:
zMax = (np.ceil(np.log10(np.abs(zPlot).max())))
zMin = (np.floor(np.log10(np.abs(zPlot).min())))
level = np.concatenate((-np.logspace(zMax,zMin-.125,(zMax-zMin)*8+1,endpoint=True),np.logspace(zMin-.125,zMax,(zMax-zMin)*8+1,endpoint=True)))
clevel = np.concatenate((-np.logspace(zMax,zMin,(zMax-zMin)*1+1,endpoint=True),np.logspace(zMin,zMax,(zMax-zMin)*1+1,endpoint=True)))
plotNorm = colors.SymLogNorm(np.abs(level).min(),linscale=0.1)
elif par == 'imag':
zPlot = np.imag(array[flag][indSect])
cmap = plt.get_cmap('Spectral') #('RdYlBu')
if cLevel:
zMax = np.log10(cLevel[1])
zMin = np.log10(cLevel[0])
else:
zMax = (np.ceil(np.log10(np.abs(zPlot).max())))
zMin = (np.floor(np.log10(np.abs(zPlot).min())))
level = np.concatenate((-np.logspace(zMax,zMin-.125,(zMax-zMin)*8+1,endpoint=True),np.logspace(zMin-.125,zMax,(zMax-zMin)*8+1,endpoint=True)))
clevel = np.concatenate((-np.logspace(zMax,zMin,(zMax-zMin)*1+1,endpoint=True),np.logspace(zMin,zMax,(zMax-zMin)*1+1,endpoint=True)))
plotNorm = colors.SymLogNorm(np.abs(level).min(),linscale=0.1)
if colorNorm=='SymLog':
plotNorm = colors.SymLogNorm(np.abs(level).min(),linscale=0.1)
elif colorNorm=='Lin':
plotNorm = colors.Normalize()
elif colorNorm=='Log':
plotNorm = colors.LogNorm()
if contour:
cs = ax.tricontourf(x,y,zPlot,levels=level,cmap=cmap,norm=plotNorm)#,extend='both')
else:
uniX,uniY = np.unique(x),np.unique(y)
X,Y = np.meshgrid(np.append(uniX-25,uniX[-1]+25),np.append(uniY-25,uniY[-1]+25))
cs = ax.pcolor(X,Y,np.reshape(zPlot,(len(uniY),len(uniX))),cmap=cmap,norm=plotNorm)
if colorbar:
csB = plt.colorbar(cs,cax=ax.cax,ticks=clevel,format='%1.2e')
# csB.on_mappable_changed(cs)
ax.set_title(flag+' '+par,fontsize=8)
return cs, csB
return cs,None
def plotPsudoSectNSDiff(ax,sectDict,arrayList,flag,par='abs',colorbar=True,colorNorm='SymLog',cLevel=None,contour=True,mask=None,useLog=False):
def sortInArr(arr):
return np.sort(arr,order=['freq','x','y','z'])
# Find the index for the slice
indSect0 = np.where(sectDict.values()[0]==arrayList[0][sectDict.keys()[0]])
indSect1 = np.where(sectDict.values()[0]==arrayList[1][sectDict.keys()[0]])
# Extract and sort the mats
arr0 = sortInArr(arrayList[0][indSect0])
arr1 = sortInArr(arrayList[1][indSect1])
# Define the plot axes
if 'x' in sectDict.keys()[0]:
x0 = arr0['y']
x1 = arr1['y']
else:
x0 = arr0['x']
x1 = arr1['x']
y0 = arr0['freq']
y1 = arr1['freq']
if par == 'abs':
if useLog:
zPlot = (np.log10(np.abs(arr0[flag])) - np.log10(np.abs(arr1[flag])))/np.log10(np.abs(arr1[flag]))
else:
zPlot = (np.abs(arr0[flag]) - np.abs(arr1[flag]))/np.abs(arr1[flag])
if mask:
maskInd = np.logical_or(np.abs(arr0[flag])< 1e-3,np.abs(arr1[flag]) < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
cmap = plt.get_cmap('RdYlBu')#seismic)
elif par == 'ares':
arF = 1/(8*np.pi**2*10**(-7))
if useLog:
zPlot = (np.log10((arF/arr0['freq'])*np.abs(arr0[flag])**2) - np.log10((arF/arr1['freq'])*np.abs(arr1[flag])**2))/np.log10((arF/arr1['freq'])*np.abs(arr1[flag])**2)
else:
zPlot = ((arF/arr0['freq'])*np.abs(arr0[flag])**2 - (arF/arr1['freq'])*np.abs(arr1[flag])**2)/((arF/arr1['freq'])*np.abs(arr1[flag])**2)
if mask:
maskInd = np.logical_or(np.abs(arr0[flag])< 1e-3,np.abs(arr1[flag]) < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
cmap = plt.get_cmap('Spectral')#seismic)
elif par == 'aphs':
if useLog:
zPlot = (np.log10(np.arctan2(arr0[flag].imag,arr0[flag].real)*(180/np.pi)) - np.log10(np.arctan2(arr1[flag].imag,arr1[flag].real)*(180/np.pi)) )/np.log10(np.arctan2(arr1[flag].imag,arr1[flag].real)*(180/np.pi))
else:
zPlot = ( np.arctan2(arr0[flag].imag,arr0[flag].real)*(180/np.pi) - np.arctan2(arr1[flag].imag,arr1[flag].real)*(180/np.pi) )/(np.arctan2(arr1[flag].imag,arr1[flag].real)*(180/np.pi))
if mask:
maskInd = np.logical_or(np.abs(arr0[flag])< 1e-3,np.abs(arr1[flag]) < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
cmap = plt.get_cmap('Spectral')#seismic)
elif par == 'real':
if useLog:
zPlot = (np.log10(arr0[flag].real) - np.log10(arr1[flag].real))/np.log10(arr1[flag].real)
else:
zPlot = (arr0[flag].real - arr1[flag].real)/arr1[flag].real
if mask:
maskInd = np.logical_or(arr0[flag].real< 1e-3,arr1[flag].real < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
cmap = plt.get_cmap('Spectral') #('Spectral')
elif par == 'imag':
if useLog:
zPlot = (np.log10(arr0[flag].imag) - np.log10(arr1[flag].imag))/np.log10(arr1[flag].imag)
else:
zPlot = (arr0[flag].imag - arr1[flag].imag)/arr1[flag].imag
if mask:
maskInd = np.logical_or(arr0[flag].imag< 1e-3,arr1[flag].imag < 1e-3)
zPlot = np.ma.array(zPlot)
zPlot[maskInd] = mask
cmap = plt.get_cmap('Spectral') #('RdYlBu')
if cLevel:
zMax = np.log10(cLevel[1])
zMin = np.log10(cLevel[0])
else:
zMax = (np.ceil(np.log10(np.abs(zPlot).max())))
zMin = (np.floor(np.log10(np.abs(zPlot).min())))
if colorNorm=='SymLog':
level = np.concatenate((-np.logspace(zMax,zMin-.125,(zMax-zMin)*8+1,endpoint=True),np.logspace(zMin-.125,zMax,(zMax-zMin)*8+1,endpoint=True)))
clevel = np.concatenate((-np.logspace(zMax,zMin,(zMax-zMin)*1+1,endpoint=True),np.logspace(zMin,zMax,(zMax-zMin)*1+1,endpoint=True)))
plotNorm = colors.SymLogNorm(np.abs(level).min(),linscale=0.1)
elif colorNorm=='Lin':
if cLevel:
level = np.arange(cLevel[0],cLevel[1]+.1,(cLevel[1] - cLevel[0])/50.)
clevel = np.arange(cLevel[0],cLevel[1]+.1,(cLevel[1] - cLevel[0])/10.)
else:
level = np.arange(zPlot.min(),zPlot.max(),(zPlot.max() - zPlot.min())/50.)
clevel = np.arange(zPlot.min(),zPlot.max(),(zPlot.max() - zPlot.min())/10.)
plotNorm = colors.Normalize()
elif colorNorm=='Log':
level = np.logspace(zMin-.125,zMax,(zMax-zMin)*8+1,endpoint=True)
clevel = np.logspace(zMin,zMax,(zMax-zMin)*2+1,endpoint=True)
plotNorm = colors.LogNorm()
if contour:
cs = ax.tricontourf(x0,y0,zPlot*100,levels=level*100,cmap=cmap,norm=plotNorm,extend='both')#,extend='both')
else:
uniX,uniY = np.unique(x0),np.unique(y0)
X,Y = np.meshgrid(np.append(uniX-25,uniX[-1]+25),np.append(uniY-25,uniY[-1]+25))
cs = ax.pcolor(X,Y,np.reshape(zPlot,(len(uniY),len(uniX))),cmap=cmap,norm=plotNorm)
if colorbar:
csB = plt.colorbar(cs,cax=ax.cax,ticks=clevel*100,format='%1.2e')
# csB.on_mappable_changed(cs)
ax.set_title(flag+' '+par + ' diff',fontsize=8)
return cs, csB
return cs,None