Skip to content

Commit

Permalink
Mesh2Mesh and Combo Map examples.
Browse files Browse the repository at this point in the history
Also fixed plotting codes to show the plots by default.
  • Loading branch information
rowanc1 committed Jun 26, 2016
1 parent 303da37 commit ba17367
Show file tree
Hide file tree
Showing 10 changed files with 215 additions and 47 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ nosetests.xml
docs/_build/
Makefile
docs/warnings.txt
.DS_Store
4 changes: 2 additions & 2 deletions SimPEG/Examples/DC_Analytic_Dipole.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from SimPEG import *
import SimPEG.EM.Static.DC as DC

def run(plotIt=False):
def run(plotIt=True):
cs = 25.
hx = [(cs,7, -1.3),(cs,21),(cs,7, 1.3)]
hy = [(cs,7, -1.3),(cs,21),(cs,7, 1.3)]
Expand Down Expand Up @@ -65,4 +65,4 @@ def DChalf(srclocP, srclocN, rxloc, sigma, I=1.):


if __name__ == '__main__':
print run(plotIt=True)
print run()
62 changes: 62 additions & 0 deletions SimPEG/Examples/Maps_ComboMaps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from SimPEG import Mesh, Maps, np

def run(plotIt=True):
"""
Maps: ComboMaps
===============
We will use an example where we want a 1D layered earth as
our model, but we want to map this to a 2D discretization to do our forward
modeling. We will also assume that we are working in log conductivity still,
so after the transformation we want to map to conductivity space.
To do this we will introduce the vertical 1D map (:class:`SimPEG.Maps.SurjectVertical1D`),
which does the first part of what we just described. The second part will be
done by the :class:`SimPEG.Maps.ExpMap` described above.
.. code-block:: python
:linenos:
M = Mesh.TensorMesh([7,5])
v1dMap = Maps.SurjectVertical1D(M)
expMap = Maps.ExpMap(M)
myMap = expMap * v1dMap
m = np.r_[0.2,1,0.1,2,2.9] # only 5 model parameters!
sig = myMap * m
If you noticed, it was pretty easy to combine maps. What is even cooler is
that the derivatives also are made for you (if everything goes right).
Just to be sure that the derivative is correct, you should always run the test
on the mapping that you create.
"""


M = Mesh.TensorMesh([7,5])
v1dMap = Maps.SurjectVertical1D(M)
expMap = Maps.ExpMap(M)
myMap = expMap * v1dMap
m = np.r_[0.2,1,0.1,2,2.9] # only 5 model parameters!
sig = myMap * m

if not plotIt: return

import matplotlib.pyplot as plt
figs, axs = plt.subplots(1,2)
axs[0].plot(m, M.vectorCCy, 'b-o')
axs[0].set_title('Model')
axs[0].set_ylabel('Depth, y')
axs[0].set_xlabel('Value, $m_i$')
axs[0].set_xlim(0,3)
axs[0].set_ylim(0,1)
clbar = plt.colorbar(M.plotImage(sig,ax=axs[1],grid=True,gridOpts=dict(color='grey'))[0])
axs[1].set_title('Physical Property')
axs[1].set_ylabel('Depth, y')
clbar.set_label('$\sigma = \exp(\mathbf{P}m)$')
plt.tight_layout()
plt.show()


if __name__ == '__main__':
run()

41 changes: 41 additions & 0 deletions SimPEG/Examples/Maps_Mesh2Mesh.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from SimPEG import Mesh, Maps, Utils

def run(plotIt=True):
"""
Maps: Mesh2Mesh
===============
This mapping allows you to go from one mesh to another.
"""

M = Mesh.TensorMesh([100,100])
h1 = Utils.meshTensor([(6,7,-1.5),(6,10),(6,7,1.5)])
h1 = h1/h1.sum()
M2 = Mesh.TensorMesh([h1,h1])
V = Utils.ModelBuilder.randomModel(M.vnC, seed=79, its=50)
v = Utils.mkvc(V)
modh = Maps.Mesh2Mesh([M,M2])
modH = Maps.Mesh2Mesh([M2,M])
H = modH * v
h = modh * H

if not plotIt: return

import matplotlib.pyplot as plt
ax = plt.subplot(131)
M.plotImage(v, ax=ax)
ax.set_title('Fine Mesh (Original)')
ax = plt.subplot(132)
M2.plotImage(H,clim=[0,1],ax=ax)
ax.set_title('Course Mesh')
ax = plt.subplot(133)
M.plotImage(h,clim=[0,1],ax=ax)
ax.set_title('Fine Mesh (Interpolated)')
plt.show()


if __name__ == '__main__':
run()

2 changes: 1 addition & 1 deletion SimPEG/Examples/Utils_surface2ind_topo.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from SimPEG.Utils import surface2ind_topo


def run(plotIt=False, nx=5, ny=5):
def run(plotIt=True, nx=5, ny=5):
"""
Utils: surface2ind_topo
Expand Down
4 changes: 3 additions & 1 deletion SimPEG/Examples/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import FLOW_Richards_1D_Celia1990
import Inversion_IRLS
import Inversion_Linear
import Maps_ComboMaps
import Maps_Mesh2Mesh
import Mesh_Basic_ForwardDC
import Mesh_Basic_PlotImage
import Mesh_Basic_Types
Expand All @@ -22,7 +24,7 @@
import MT_3D_Foward
import Utils_surface2ind_topo

__examples__ = ["DC_Analytic_Dipole", "DC_Forward_PseudoSection", "EM_FDEM_1D_Inversion", "EM_FDEM_Analytic_MagDipoleWholespace", "EM_Schenkel_Morrison_Casing", "EM_TDEM_1D_Inversion", "FLOW_Richards_1D_Celia1990", "Inversion_IRLS", "Inversion_Linear", "Mesh_Basic_ForwardDC", "Mesh_Basic_PlotImage", "Mesh_Basic_Types", "Mesh_Operators_CahnHilliard", "Mesh_QuadTree_Creation", "Mesh_QuadTree_FaceDiv", "Mesh_QuadTree_HangingNodes", "Mesh_Tensor_Creation", "MT_1D_ForwardAndInversion", "MT_3D_Foward", "Utils_surface2ind_topo"]
__examples__ = ["DC_Analytic_Dipole", "DC_Forward_PseudoSection", "EM_FDEM_1D_Inversion", "EM_FDEM_Analytic_MagDipoleWholespace", "EM_Schenkel_Morrison_Casing", "EM_TDEM_1D_Inversion", "FLOW_Richards_1D_Celia1990", "Inversion_IRLS", "Inversion_Linear", "Maps_ComboMaps", "Maps_Mesh2Mesh", "Mesh_Basic_ForwardDC", "Mesh_Basic_PlotImage", "Mesh_Basic_Types", "Mesh_Operators_CahnHilliard", "Mesh_QuadTree_Creation", "Mesh_QuadTree_FaceDiv", "Mesh_QuadTree_HangingNodes", "Mesh_Tensor_Creation", "MT_1D_ForwardAndInversion", "MT_3D_Foward", "Utils_surface2ind_topo"]

##### AUTOIMPORTS #####

Expand Down
47 changes: 4 additions & 43 deletions docs/content/api_core/api_Maps.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,26 +63,8 @@ done by the :class:`SimPEG.Maps.ExpMap` described above.
.. plot::

from SimPEG import *
import matplotlib.pyplot as plt
M = Mesh.TensorMesh([7,5])
v1dMap = Maps.SurjectVertical1D(M)
expMap = Maps.ExpMap(M)
myMap = expMap * v1dMap
m = np.r_[0.2,1,0.1,2,2.9] # only 5 model parameters!
sig = myMap * m
figs, axs = plt.subplots(1,2)
axs[0].plot(m, M.vectorCCy, 'b-o')
axs[0].set_title('Model')
axs[0].set_ylabel('Depth, y')
axs[0].set_xlabel('Value, $m_i$')
axs[0].set_xlim(0,3)
axs[0].set_ylim(0,1)
clbar = plt.colorbar(M.plotImage(sig,ax=axs[1],grid=True,gridOpts=dict(color='grey'))[0])
axs[1].set_title('Physical Property')
axs[1].set_ylabel('Depth, y')
clbar.set_label('$\sigma = \exp(\mathbf{P}m)$')
plt.tight_layout()
from SimPEG import Examples
Examples.Maps_ComboMaps.run()

If you noticed, it was pretty easy to combine maps. What is even cooler is
that the derivatives also are made for you (if everything goes right).
Expand Down Expand Up @@ -167,31 +149,10 @@ Map 2D Cross-Section to 3D Model
Mesh to Mesh Map
----------------


.. plot::

from SimPEG import *
import matplotlib.pyplot as plt
M = Mesh.TensorMesh([100,100])
h1 = Utils.meshTensor([(6,7,-1.5),(6,10),(6,7,1.5)])
h1 = h1/h1.sum()
M2 = Mesh.TensorMesh([h1,h1])
V = Utils.ModelBuilder.randomModel(M.vnC, seed=79, its=50)
v = Utils.mkvc(V)
modh = Maps.Mesh2Mesh([M,M2])
modH = Maps.Mesh2Mesh([M2,M])
H = modH * v
h = modh * H
ax = plt.subplot(131)
M.plotImage(v, ax=ax)
ax.set_title('Fine Mesh (Original)')
ax = plt.subplot(132)
M2.plotImage(H,clim=[0,1],ax=ax)
ax.set_title('Course Mesh')
ax = plt.subplot(133)
M.plotImage(h,clim=[0,1],ax=ax)
ax.set_title('Fine Mesh (Interpolated)')
plt.show()
from SimPEG import Examples
Examples.Maps_Mesh2Mesh.run()


.. autoclass:: SimPEG.Maps.Mesh2Mesh
Expand Down
26 changes: 26 additions & 0 deletions docs/content/examples/Inversion_IRLS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
.. _examples_Inversion_IRLS:

.. --------------------------------- ..
.. ..
.. THIS FILE IS AUTO GENEREATED ..
.. ..
.. SimPEG/Examples/__init__.py ..
.. ..
.. --------------------------------- ..
Inversion: Linear Problem
=========================

Here we go over the basics of creating a linear problem and inversion.



.. plot::

from SimPEG import Examples
Examples.Inversion_IRLS.run()

.. literalinclude:: ../../../SimPEG/Examples/Inversion_IRLS.py
:language: python
:linenos:
48 changes: 48 additions & 0 deletions docs/content/examples/Maps_ComboMaps.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
.. _examples_Maps_ComboMaps:

.. --------------------------------- ..
.. ..
.. THIS FILE IS AUTO GENEREATED ..
.. ..
.. SimPEG/Examples/__init__.py ..
.. ..
.. --------------------------------- ..
Maps: ComboMaps
===============

We will use an example where we want a 1D layered earth as
our model, but we want to map this to a 2D discretization to do our forward
modeling. We will also assume that we are working in log conductivity still,
so after the transformation we want to map to conductivity space.
To do this we will introduce the vertical 1D map (:class:`SimPEG.Maps.SurjectVertical1D`),
which does the first part of what we just described. The second part will be
done by the :class:`SimPEG.Maps.ExpMap` described above.

.. code-block:: python
:linenos:
M = Mesh.TensorMesh([7,5])
v1dMap = Maps.SurjectVertical1D(M)
expMap = Maps.ExpMap(M)
myMap = expMap * v1dMap
m = np.r_[0.2,1,0.1,2,2.9] # only 5 model parameters!
sig = myMap * m
If you noticed, it was pretty easy to combine maps. What is even cooler is
that the derivatives also are made for you (if everything goes right).
Just to be sure that the derivative is correct, you should always run the test
on the mapping that you create.



.. plot::

from SimPEG import Examples
Examples.Maps_ComboMaps.run()

.. literalinclude:: ../../../SimPEG/Examples/Maps_ComboMaps.py
:language: python
:linenos:
27 changes: 27 additions & 0 deletions docs/content/examples/Maps_Mesh2Mesh.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
.. _examples_Maps_Mesh2Mesh:

.. --------------------------------- ..
.. ..
.. THIS FILE IS AUTO GENEREATED ..
.. ..
.. SimPEG/Examples/__init__.py ..
.. ..
.. --------------------------------- ..
Maps: Mesh2Mesh
===============

This mapping allows you to go from one mesh to another.



.. plot::

from SimPEG import Examples
Examples.Maps_Mesh2Mesh.run()

.. literalinclude:: ../../../SimPEG/Examples/Maps_Mesh2Mesh.py
:language: python
:linenos:

0 comments on commit ba17367

Please sign in to comment.