Skip to content

Instantly share code, notes, and snippets.

@rowanc1
Last active January 3, 2016 14:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rowanc1/8479897 to your computer and use it in GitHub Desktop.
Save rowanc1/8479897 to your computer and use it in GitHub Desktop.
SimPEG Play - DC Resistivity Inversion

Working to incorporate DC resistivity inversions in the new SimPEG framework.

<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[1]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">SimPEG</span> <span class="kn">import</span> <span class="o">*</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>
Warning: mumps solver not available.
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[2]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="c"># Create the mesh</span>
<span class="n">h1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="n">h2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">21</span><span class="p">)</span>
<span class="n">M</span> <span class="o">=</span> <span class="n">Mesh</span><span class="o">.</span><span class="n">TensorMesh</span><span class="p">([</span><span class="n">h1</span><span class="p">,</span><span class="n">h2</span><span class="p">])</span>
<span class="c"># Create some parameters for the model</span>
<span class="n">sig1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="mf">0.001</span><span class="p">)</span>
<span class="n">sig2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c"># Create a synthetic model from a block in a half-space</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">Model</span><span class="o">.</span><span class="n">LogModel</span><span class="p">(</span><span class="n">M</span><span class="p">)</span>
<span class="n">mSynth</span> <span class="o">=</span> <span class="n">Utils</span><span class="o">.</span><span class="n">ModelBuilder</span><span class="o">.</span><span class="n">defineBlockConductivity</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">gridCC</span><span class="p">,[</span><span class="mi">50</span><span class="p">,</span> <span class="mi">10</span><span class="p">],[</span><span class="mi">80</span><span class="p">,</span> <span class="mi">16</span><span class="p">],[</span><span class="n">sig1</span><span class="p">,</span> <span class="n">sig2</span><span class="p">])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">plotImage</span><span class="p">(</span><span class="n">mSynth</span><span class="p">))</span>
<span class="n">Tx</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">10.5</span><span class="p">,</span><span class="mi">90</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span>
<span class="n">Rx</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">9.5</span><span class="p">,</span><span class="mi">90</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span>
<span class="n">yLoc</span> <span class="o">=</span> <span class="mf">13.5</span>
<span class="n">plot</span><span class="p">(</span><span class="n">Rx</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">ones_like</span><span class="p">(</span><span class="n">Rx</span><span class="p">)</span><span class="o">*</span><span class="n">yLoc</span><span class="p">,</span><span class="s">&#39;r.&#39;</span><span class="p">,</span><span class="n">ms</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
<span class="n">plot</span><span class="p">(</span><span class="n">Tx</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">ones_like</span><span class="p">(</span><span class="n">Tx</span><span class="p">)</span><span class="o">*</span><span class="n">yLoc</span><span class="p">,</span><span class="s">&#39;c.&#39;</span><span class="p">,</span><span class="n">ms</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt output_prompt">
Out[2]:</div>
<div class="output_text output_subarea output_pyout">
<pre>
[&lt;matplotlib.lines.Line2D at 0x10f9e1510&gt;]
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[3]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="n">inds</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">ii</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">Rx</span><span class="o">.</span><span class="n">size</span><span class="p">):</span>
<span class="k">for</span> <span class="n">jj</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">Rx</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="n">ii</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">inds</span><span class="o">.</span><span class="n">append</span><span class="p">([</span> <span class="n">ii</span><span class="p">,</span> <span class="n">ii</span> <span class="o">+</span> <span class="n">jj</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">])</span>
<span class="n">posElectrodes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="n">Rx</span><span class="p">[</span><span class="n">ind</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span><span class="n">yLoc</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">inds</span><span class="p">])</span>
<span class="n">negElectrodes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="n">Rx</span><span class="p">[</span><span class="n">ind</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span><span class="n">yLoc</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">inds</span><span class="p">])</span>
<span class="n">Ppos</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">getInterpolationMat</span><span class="p">(</span><span class="n">posElectrodes</span><span class="p">,</span> <span class="s">&#39;CC&#39;</span><span class="p">)</span>
<span class="n">Pneg</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">getInterpolationMat</span><span class="p">(</span><span class="n">negElectrodes</span><span class="p">,</span> <span class="s">&#39;CC&#39;</span><span class="p">)</span>
<span class="n">P</span> <span class="o">=</span> <span class="n">Ppos</span> <span class="o">-</span> <span class="n">Pneg</span>
<span class="n">inds</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">ii</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">Tx</span><span class="o">.</span><span class="n">size</span><span class="p">):</span>
<span class="k">for</span> <span class="n">jj</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">Tx</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="n">ii</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">inds</span><span class="o">.</span><span class="n">append</span><span class="p">([</span> <span class="n">ii</span><span class="p">,</span> <span class="n">ii</span> <span class="o">+</span> <span class="n">jj</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">])</span>
<span class="n">posElectrodes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="n">Tx</span><span class="p">[</span><span class="n">ind</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span><span class="n">yLoc</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">inds</span><span class="p">])</span>
<span class="n">negElectrodes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="n">Tx</span><span class="p">[</span><span class="n">ind</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span><span class="n">yLoc</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">inds</span><span class="p">])</span>
<span class="n">Qpos</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">getInterpolationMat</span><span class="p">(</span><span class="n">posElectrodes</span><span class="p">,</span> <span class="s">&#39;CC&#39;</span><span class="p">)</span>
<span class="n">Qneg</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">getInterpolationMat</span><span class="p">(</span><span class="n">negElectrodes</span><span class="p">,</span> <span class="s">&#39;CC&#39;</span><span class="p">)</span>
<span class="n">Q</span> <span class="o">=</span> <span class="p">(</span><span class="n">Qpos</span> <span class="o">-</span> <span class="n">Qneg</span><span class="p">)</span><span class="o">.</span><span class="n">T</span><span class="o">.</span><span class="n">toarray</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[4]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="n">prob</span> <span class="o">=</span> <span class="n">Examples</span><span class="o">.</span><span class="n">DC</span><span class="o">.</span><span class="n">DCProblem</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">model</span><span class="p">)</span>
<span class="c"># Create some data</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">prob</span><span class="o">.</span><span class="n">createSyntheticData</span><span class="p">(</span><span class="n">mSynth</span><span class="p">,</span> <span class="n">std</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">P</span><span class="o">=</span><span class="n">P</span><span class="p">,</span> <span class="n">RHS</span><span class="o">=</span><span class="n">Q</span><span class="p">)</span>
<span class="n">u</span> <span class="o">=</span> <span class="n">prob</span><span class="o">.</span><span class="n">field</span><span class="p">(</span><span class="n">mSynth</span><span class="p">)</span>
<span class="n">u</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">reshapeFields</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
<span class="n">M</span><span class="o">.</span><span class="n">plotImage</span><span class="p">(</span><span class="n">u</span><span class="p">[:,</span><span class="mi">2</span><span class="p">])</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt output_prompt">
Out[4]:</div>
<div class="output_text output_subarea output_pyout">
<pre>
&lt;matplotlib.collections.QuadMesh at 0x10fc77310&gt;
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
XovPP/9cNTU1eu+993T8+HG9+eab2r17d0Jei0tGcu6XPnp1E1eBUFpaqvfff3/wfltbm8rLyz1c
Uez19vZq7dq1qqqqUmVlpaSB69Le3i5Jam9vV2lpqZdLjIk33nhDu3bt0ty5c7Vu3Tq99tprqqqq
SshrMX/+fC1cuFCrVq1Senq61q1bp8bGxoS8Fi0tLSovL9f8+fM1ffp0fe9739Prr7+ekNfiErdz
Lysr03vvvTc47/3337/sdYmrQDCL1o4fP659+/aprKzM41XFjmVZ2rBhgxYvXjz40xPSwBe2oaFB
nZ2damhoSIiQfOSRR3Ty5En997//1XPPPacbbrhBTz/9dEJeC0lasGCBmpub1d/fr7/85S/67ne/
m5DXYvny5frnP/+pM2fOqLu7W3v27NGNN96YkNfiErdzX7p0qfbu3asTJ06oqalJycnJysjICL+z
MdU5R0FTU5OVn59vzZs3z9q2bZvXy4mp119/3UpKSrKKioqs4uJiq7i42NqzZ4917tw5a/Xq1VZu
bq5VWVlpBQIBr5caU01NTdaqVassy7IS9locPnzYKisrs4qKiqwHH3zQ6ujoSNhr8eSTT1orVqyw
rr32WmvTpk1WX19fwlyL22+/3Zo1a5aVlpZm5eTkWA0NDWHP/dFHH7XmzZtnLVq0yNq/f/9l909h
GgBAUpx9ZAQA8A6BAACQRCAAAGwEAgBAEoEAALARCAAASQQCAMBGIAAAJBEIQERaW1tVVFSk7u5u
nT9/XosXLw7pEwN8HVCpDETol7/8pbq6utTZ2anc3Fz9/Oc/93pJwLgiEIAI9fb26tprr1V6erre
fPPNy7YSBiYaPjICInT69GmdP39eHR0d6uzs9Ho5wLjjHQIQodWrV+uOO+7QBx98oI8//ljbt2/3
eknAuErxegHARPDUU0/J7/fr9ttvV39/v5YtW6ampiZVVFR4vTRg3PAOAQAgie8hAABsBAIAQBKB
AACwEQgAAEkEAgDARiAAACQRCAAAG4EAAJAk/T9Aq/celh6jfAAAAABJRU5ErkJggg==
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[5]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="c"># Now set up the prob to do some minimization</span>
<span class="c"># prob.dobs = dobs</span>
<span class="c"># prob.std = dobs*0 + 0.05</span>
<span class="n">m0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">nC</span><span class="p">)</span> <span class="o">+</span> <span class="n">sig2</span>
<span class="n">reg</span> <span class="o">=</span> <span class="n">Regularization</span><span class="o">.</span><span class="n">Tikhonov</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="n">beta</span> <span class="o">=</span> <span class="n">Parameters</span><span class="o">.</span><span class="n">BetaEstimate</span><span class="p">(</span><span class="n">beta0_ratio</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">ObjFunction</span><span class="o">.</span><span class="n">BaseObjFunction</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">reg</span><span class="p">,</span> <span class="n">beta</span><span class="o">=</span><span class="n">beta</span><span class="p">)</span>
<span class="n">opt</span> <span class="o">=</span> <span class="n">Optimization</span><span class="o">.</span><span class="n">InexactGaussNewton</span><span class="p">(</span><span class="n">maxIterLS</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">maxIter</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">maxIterCG</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="n">inv</span> <span class="o">=</span> <span class="n">Inversion</span><span class="o">.</span><span class="n">BaseInversion</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span>
<span class="c"># Check Derivative</span>
<span class="n">derChk</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">dataObj</span><span class="p">(</span><span class="n">m</span><span class="p">),</span> <span class="n">obj</span><span class="o">.</span><span class="n">dataObjDeriv</span><span class="p">(</span><span class="n">m</span><span class="p">)]</span>
<span class="c"># Tests.checkDerivative(derChk, mSynth)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[6]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="n">m</span> <span class="o">=</span> <span class="n">inv</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">m0</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>
Regularization has not set mref. SimPEG will set it to m0.
============================ Inexact Gauss Newton ============================
# beta phi_d phi_m f |proj(x-g)-x| LS Comment
-----------------------------------------------------------------------------
0 1.80e+02 1.25e+06 0.00e+00 1.25e+06 5.24e+03 0
1 1.80e+02 1.21e+06 6.15e+00 1.21e+06 6.17e+03 0
2 1.80e+02 1.14e+06 9.45e+01 1.16e+06 6.83e+03 0
3 1.80e+02 9.87e+05 1.53e+02 1.01e+06 1.69e+04 0
4 1.80e+02 8.33e+05 1.73e+02 8.64e+05 6.31e+04 2
5 1.80e+02 6.92e+05 2.17e+02 7.31e+05 6.27e+04 1
6 1.80e+02 5.64e+05 2.30e+02 6.05e+05 3.48e+04 0
7 1.80e+02 4.35e+05 2.70e+02 4.83e+05 1.48e+05 0
8 1.80e+02 3.55e+05 2.79e+02 4.05e+05 3.84e+04 0
9 1.80e+02 2.84e+05 2.82e+02 3.34e+05 5.42e+04 0
10 1.80e+02 2.01e+05 3.24e+02 2.60e+05 6.50e+04 0
------------------------- STOP! -------------------------
1 : |fc-fOld| = 7.4684e+04 &lt;= tolF*(1+|f0|) = 1.2546e+05
0 : |xc-x_last| = 6.7408e+00 &lt;= tolX*(1+|x0|) = 1.0000e-01
0 : |proj(x-g)-x| = 6.5036e+04 &lt;= tolG = 1.0000e-01
0 : |proj(x-g)-x| = 6.5036e+04 &lt;= 1e3*eps = 1.0000e-02
1 : maxIter = 10 &lt;= iter = 10
------------------------- DONE! -------------------------
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[7]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre><span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">M</span><span class="o">.</span><span class="n">plotImage</span><span class="p">(</span><span class="n">m</span><span class="p">))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt output_prompt">
Out[7]:</div>
<div class="output_text output_subarea output_pyout">
<pre>
&lt;matplotlib.colorbar.Colorbar instance at 0x111e14368&gt;
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
AAAASUVORK5CYII=
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">
In&nbsp;[7]:
</div>
<div class="inner_cell">
<div class="input_area">
<div class="highlight"><pre>
</pre></div>
</div>
</div>
</div>
</div>
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment