diff --git a/AUTHORS.rst b/AUTHORS.rst
index 2a7d1903..f5e5ff7b 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -1,9 +1,13 @@
-- Luz Angelica Caudillo-Mata, (`@lacmajedrez `_)
- Rowan Cockett, (`@rowanc1 `_)
-- Eldad Haber, (`@ehaber99 `_)
- Lindsey Heagy, (`@lheagy `_)
- Seogi Kang, (`@sgkang `_)
-- Dave Marchant, (`@dwfmarchant `_)
+- Brendan Smithyman, (`@bsmithyman `_)
- Gudni Rosenkjaer, (`@grosenkj `_)
+- Dom Fournier, (`@fourndo `_)
+- Dave Marchant, (`@dwfmarchant `_)
- Lars Ruthotto, (`@lruthotto `_)
- Mike Wathen, (`@mrwathen `_)
+- Luz Angelica Caudillo-Mata, (`@lacmajedrez `_)
+- Eldad Haber, (`@ehaber99 `_)
+- Doug Oldenburg, (`@dougoldenburg `_)
+- Adam Pidlisecky, (`@aPid1 `_)
diff --git a/CITATION.rst b/CITATION.rst
index a3a13d7e..b0b2a76f 100644
--- a/CITATION.rst
+++ b/CITATION.rst
@@ -1,14 +1,13 @@
Citing SimPEG
-=============
+-------------
-There is a paper about SimPEG!
+There is a `paper about SimPEG `_, if you use this code, please help our scientific visibility by citing our work!
Cockett, R., Kang, S., Heagy, L. J., Pidlisecky, A., & Oldenburg, D. W. (2015). SimPEG: An open source framework for simulation and gradient based parameter estimation in geophysical applications. Computers & Geosciences.
BibTex:
--------
.. code::
diff --git a/LICENSE b/LICENSE
index 43ee31ab..c046b35d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2013-2015 SimPEG Developers
+Copyright (c) 2013-2016 SimPEG Developers
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/PROJECTS.rst b/PROJECTS.rst
deleted file mode 100644
index ce411d9d..00000000
--- a/PROJECTS.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-- Electromagnetics (`simpegEM `_)
- .. image:: https://travis-ci.org/simpeg/simpegem.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpegem
- :alt: Master Branch
- .. image:: https://coveralls.io/repos/simpeg/simpegem/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpegem?branch=master
-- Potential Fields (`simpegPF `_)
- .. image:: https://travis-ci.org/simpeg/simpegpf.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpegpf
- :alt: Master Branch
- .. image:: https://coveralls.io/repos/simpeg/simpegpf/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpegpf?branch=master
-- Ground Water Flow (`simpegFLOW `_)
- .. image:: https://travis-ci.org/simpeg/simpegflow.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpegflow
- :alt: Master Branch
- .. image:: https://coveralls.io/repos/simpeg/simpegflow/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpegflow?branch=master
-- Direct Current Resistivity (`simpegDC `_)
- .. image:: https://travis-ci.org/simpeg/simpegdc.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpegdc
- :alt: Master Branch
- .. image:: https://coveralls.io/repos/simpeg/simpegdc/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpegdc?branch=master
-- Electromagnetics 1D (`simpegEM1D `_)
- .. image:: https://travis-ci.org/simpeg/simpegEM1D.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpegEM1D
- :alt: Master Branch
- .. image:: https://coveralls.io/repos/simpeg/simpegEM1D/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpegEM1D?branch=master
-- Magnetotellurics (`simpegMT `_)
- .. image:: https://travis-ci.org/simpeg/simpegmt.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpegmt
- :alt: Master Branch
- .. image:: https://coveralls.io/repos/simpeg/simpegmt/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpegmt?branch=master
diff --git a/SimPEG/EM/Analytics/FDEM.py b/SimPEG/EM/Analytics/FDEM.py
index 9e776fdf..1f52459c 100644
--- a/SimPEG/EM/Analytics/FDEM.py
+++ b/SimPEG/EM/Analytics/FDEM.py
@@ -58,8 +58,9 @@ def MagneticDipoleWholeSpace(XYZ, srcLoc, sig, f, moment=1., orientation='X', mu
from SimPEG import EM
import matplotlib.pyplot as plt
+ from scipy.constants import mu_0
freqs = np.logspace(-2,5,100)
- Bx, By, Bz = EM.Analytics.FDEM.AnalyticMagDipoleWholeSpace([0,100,0], [0,0,0], 1e-2, freqs, m=1, orientation='Z')
+ Bx, By, Bz = EM.Analytics.FDEM.MagneticDipoleWholeSpace([0,100,0], [0,0,0], 1e-2, freqs, moment=1, orientation='Z')
plt.loglog(freqs, np.abs(Bz.real)/mu_0, 'b')
plt.loglog(freqs, np.abs(Bz.imag)/mu_0, 'r')
plt.legend(('real','imag'))
diff --git a/SimPEG/Regularization.py b/SimPEG/Regularization.py
index e3506290..97b5e7a2 100644
--- a/SimPEG/Regularization.py
+++ b/SimPEG/Regularization.py
@@ -115,86 +115,7 @@ class BaseRegularization(object):
class Tikhonov(BaseRegularization):
- """**Tikhonov Regularization**
-
- Here we will define regularization of a model, m, in general however, this should be thought of as (m-m_ref) but otherwise it is exactly the same:
-
- .. math::
-
- R(m) = \int_\Omega \\frac{\\alpha_x}{2}\left(\\frac{\partial m}{\partial x}\\right)^2 + \\frac{\\alpha_y}{2}\left(\\frac{\partial m}{\partial y}\\right)^2 \partial v
-
- Our discrete gradient operator works on cell centers and gives the derivative on the cell faces, which is not where we want to be evaluating this integral. We need to average the values back to the cell-centers before we integrate. To avoid null spaces, we square first and then average. In 2D with ij notation it looks like this:
-
- .. math::
-
- R(m) \\approx \sum_{ij} \left[\\frac{\\alpha_x}{2}\left[\left(\\frac{m_{i+1,j} - m_{i,j}}{h}\\right)^2 + \left(\\frac{m_{i,j} - m_{i-1,j}}{h}\\right)^2\\right]
- + \\frac{\\alpha_y}{2}\left[\left(\\frac{m_{i,j+1} - m_{i,j}}{h}\\right)^2 + \left(\\frac{m_{i,j} - m_{i,j-1}}{h}\\right)^2\\right]
- \\right]h^2
-
- If we let D_1 be the derivative matrix in the x direction
-
- .. math::
-
- \mathbf{D}_1 = \mathbf{I}_2\otimes\mathbf{d}_1
-
- .. math::
-
- \mathbf{D}_2 = \mathbf{d}_2\otimes\mathbf{I}_1
-
- Where d_1 is the one dimensional derivative:
-
- .. math::
-
- \mathbf{d}_1 = \\frac{1}{h} \left[ \\begin{array}{cccc}
- -1 & 1 & & \\\\
- & \ddots & \ddots&\\\\
- & & -1 & 1\end{array} \\right]
-
- .. math::
-
- R(m) \\approx \mathbf{v}^\\top \left[\\frac{\\alpha_x}{2}\mathbf{A}_1 (\mathbf{D}_1 m) \odot (\mathbf{D}_1 m) + \\frac{\\alpha_y}{2}\mathbf{A}_2 (\mathbf{D}_2 m) \odot (\mathbf{D}_2 m) \\right]
-
- Recall that this is really a just point wise multiplication, or a diagonal matrix times a vector. When we multiply by something in a diagonal we can interchange and it gives the same results (i.e. it is point wise)
-
- .. math::
-
- \mathbf{a\odot b} = \\text{diag}(\mathbf{a})\mathbf{b} = \\text{diag}(\mathbf{b})\mathbf{a} = \mathbf{b\odot a}
-
- and the transpose also is true (but the sizes have to make sense...):
-
- .. math::
-
- \mathbf{a}^\\top\\text{diag}(\mathbf{b}) = \mathbf{b}^\\top\\text{diag}(\mathbf{a})
-
- So R(m) can simplify to:
-
- .. math::
-
- R(m) \\approx \mathbf{m}^\\top \left[\\frac{\\alpha_x}{2}\mathbf{D}_1^\\top \\text{diag}(\mathbf{A}_1^\\top\mathbf{v}) \mathbf{D}_1 + \\frac{\\alpha_y}{2}\mathbf{D}_2^\\top \\text{diag}(\mathbf{A}_2^\\top \mathbf{v}) \mathbf{D}_2 \\right] \mathbf{m}
-
- We will define W_x as:
-
- .. math::
-
- \mathbf{W}_x = \sqrt{\\alpha_x}\\text{diag}\left(\sqrt{\mathbf{A}_1^\\top\mathbf{v}}\\right) \mathbf{D}_1
-
-
- And then W as a tall matrix of all of the different regularization terms:
-
- .. math::
-
- \mathbf{W} = \left[ \\begin{array}{c}
- \mathbf{W}_s\\\\
- \mathbf{W}_x\\\\
- \mathbf{W}_y\end{array} \\right]
-
- Then we can write
-
- .. math::
-
- R(m) \\approx \\frac{1}{2}\mathbf{m^\\top W^\\top W m}
-
-
+ """
"""
smoothModel = True #: SMOOTH and SMOOTH_MOD_DIF options
alpha_s = Utils.dependentProperty('_alpha_s', 1e-6, ['_W', '_Ws'], "Smallness weight")
@@ -311,7 +232,7 @@ class Tikhonov(BaseRegularization):
if self.smoothModel == True:
mD1 = self.mapping.deriv(m)
mD2 = self.mapping.deriv(m - self.mref)
- r1 = self.Wsmooth * ( self.mapping * (m))
+ r1 = self.Wsmooth * ( self.mapping * (m))
r2 = self.Ws * ( self.mapping * (m - self.mref) )
out1 = mD1.T * ( self.Wsmooth.T * r1 )
out2 = mD2.T * ( self.Ws.T * r2 )
diff --git a/docs/InversionWorkflow-PreSimPEG.png b/docs/InversionWorkflow-PreSimPEG.png
new file mode 100644
index 00000000..2396da69
Binary files /dev/null and b/docs/InversionWorkflow-PreSimPEG.png differ
diff --git a/docs/api_FiniteVolume.rst b/docs/api_FiniteVolume.rst
new file mode 100644
index 00000000..40e9b879
--- /dev/null
+++ b/docs/api_FiniteVolume.rst
@@ -0,0 +1,19 @@
+.. _api_FiniteVolume:
+
+Finite Volume
+*************
+
+Any numerical implementation requires the discretization of continuous functions into discrete approximations. These approximations are typically organized in a mesh, which defines boundaries, locations, and connectivity. Of specific interest to geophysical simulations, we require that averaging, interpolation and differential operators be defined for any mesh. In SimPEG, we have implemented a staggered mimetic finite volume approach (`Hyman and Shashkov, 1999 `_). This approach requires the definitions of variables at either cell-centers, nodes, faces, or edges as seen in the figure below.
+
+.. image:: images/finitevolrealestate.png
+ :width: 400 px
+ :alt: FiniteVolume
+ :align: center
+
+
+.. toctree::
+ :maxdepth: 2
+
+ api_Mesh
+ api_DiffOps
+ api_InnerProducts
diff --git a/docs/api_ForwardProblem.rst b/docs/api_ForwardProblem.rst
index b8f2fd90..0bf9596f 100644
--- a/docs/api_ForwardProblem.rst
+++ b/docs/api_ForwardProblem.rst
@@ -61,11 +61,6 @@ If the forward problem is invertible, then we can rearrange for \\(\\frac{\\part
This can often be computed given a vector (i.e. \\(J(v)\\)) rather than stored, as \\(J\\) is a large dense matrix.
-.. math::
-
- u(m)
-
-
The API
=======
@@ -78,7 +73,7 @@ Problem
Survey
------
-
.. automodule:: SimPEG.Survey
:members:
+ :undoc-members:
diff --git a/docs/api_Inverse.rst b/docs/api_Inversion.rst
similarity index 56%
rename from docs/api_Inverse.rst
rename to docs/api_Inversion.rst
index bd4d8704..5cac5f0c 100644
--- a/docs/api_Inverse.rst
+++ b/docs/api_Inversion.rst
@@ -1,21 +1,19 @@
-.. _api_Inverse:
-Regularization
-**************
+InvProblem
+**********
-.. automodule:: SimPEG.Regularization
+.. automodule:: SimPEG.InvProblem
:show-inheritance:
:members:
:undoc-members:
-Optimize
-********
+Inversion
+*********
-.. automodule:: SimPEG.Optimization
+.. automodule:: SimPEG.Inversion
:show-inheritance:
- :private-members:
:members:
:undoc-members:
@@ -27,12 +25,3 @@ Directives
:members:
:undoc-members:
-Inversion
-*********
-
-.. automodule:: SimPEG.Inversion
- :show-inheritance:
- :members:
- :undoc-members:
-
-
diff --git a/docs/api_InversionComponents.rst b/docs/api_InversionComponents.rst
new file mode 100644
index 00000000..eeaf1bbf
--- /dev/null
+++ b/docs/api_InversionComponents.rst
@@ -0,0 +1,11 @@
+Inversion Components
+********************
+
+.. toctree::
+ :maxdepth: 3
+
+ api_DataMisfit
+ api_Regularization
+ api_Optimization
+ api_Inversion
+
diff --git a/docs/api_Mesh.rst b/docs/api_Mesh.rst
index a7f7abae..ed216b13 100644
--- a/docs/api_Mesh.rst
+++ b/docs/api_Mesh.rst
@@ -24,8 +24,7 @@ the implementations.
.. plot::
from SimPEG import Examples
- Examples.Mesh_ThreeMeshes.run()
-
+ Examples.Mesh_Basic_Types.run()
Variable Locations and Terminology
diff --git a/docs/api_MeshCode.rst b/docs/api_MeshCode.rst
index a3813c13..2d7cab9f 100644
--- a/docs/api_MeshCode.rst
+++ b/docs/api_MeshCode.rst
@@ -9,6 +9,15 @@ Tensor Mesh
:undoc-members:
+Cylindrical Mesh
+================
+
+.. automodule:: SimPEG.Mesh.CylMesh
+ :show-inheritance:
+ :members:
+ :undoc-members:
+
+
Tree Mesh
=========
@@ -21,16 +30,7 @@ Tree Mesh
Curvilinear Mesh
================
-.. automodule:: SimPEG.Mesh.Curvilinear
- :show-inheritance:
- :members:
- :undoc-members:
-
-
-Cylindrical Mesh
-================
-
-.. automodule:: SimPEG.Mesh.CylMesh
+.. automodule:: SimPEG.Mesh.CurvilinearMesh
:show-inheritance:
:members:
:undoc-members:
diff --git a/docs/api_Optimization.rst b/docs/api_Optimization.rst
new file mode 100644
index 00000000..85ec523f
--- /dev/null
+++ b/docs/api_Optimization.rst
@@ -0,0 +1,9 @@
+
+Optimize
+********
+
+.. automodule:: SimPEG.Optimization
+ :show-inheritance:
+ :private-members:
+ :members:
+ :undoc-members:
diff --git a/docs/api_Regularization.rst b/docs/api_Regularization.rst
new file mode 100644
index 00000000..4ea1a554
--- /dev/null
+++ b/docs/api_Regularization.rst
@@ -0,0 +1,100 @@
+
+Regularization
+**************
+
+If there is one model that has a misfit that equals the desired tolerance, then there are infinitely many other models which can fit to the same degree. The challenge is to find that model which has the desired characteristics and is compatible with a priori information. A single model can be selected from an infinite ensemble by measuring the length, or norm, of each model. Then a smallest, or sometimes largest, member can be isolated. Our goal is to design a norm that embodies our prior knowledge and, when minimized, yields a realistic candidate for the solution of our problem. The norm can penalize variation from a reference model, spatial derivatives of the model, or some combination of these.
+
+Tikhonov Regularization
+=======================
+
+Here we will define regularization of a model, m, in general however, this should be thought of as (m-m_ref) but otherwise it is exactly the same:
+
+.. math::
+
+ R(m) = \int_\Omega \frac{\alpha_x}{2}\left(\frac{\partial m}{\partial x}\right)^2 + \frac{\alpha_y}{2}\left(\frac{\partial m}{\partial y}\right)^2 \partial v
+
+Our discrete gradient operator works on cell centers and gives the derivative on the cell faces, which is not where we want to be evaluating this integral. We need to average the values back to the cell-centers before we integrate. To avoid null spaces, we square first and then average. In 2D with ij notation it looks like this:
+
+.. math::
+
+ R(m) \approx \sum_{ij} \left[\frac{\alpha_x}{2}\left[\left(\frac{m_{i+1,j} - m_{i,j}}{h}\right)^2 + \left(\frac{m_{i,j} - m_{i-1,j}}{h}\right)^2\right] \\
+ + \frac{\alpha_y}{2}\left[\left(\frac{m_{i,j+1} - m_{i,j}}{h}\right)^2 + \left(\frac{m_{i,j} - m_{i,j-1}}{h}\right)^2\right]
+ \right]h^2
+
+If we let D_1 be the derivative matrix in the x direction
+
+.. math::
+
+ \mathbf{D}_1 = \mathbf{I}_2\otimes\mathbf{d}_1
+
+.. math::
+
+ \mathbf{D}_2 = \mathbf{d}_2\otimes\mathbf{I}_1
+
+Where d_1 is the one dimensional derivative:
+
+.. math::
+
+ \mathbf{d}_1 = \frac{1}{h} \left[ \begin{array}{cccc}
+ -1 & 1 & & \\
+ & \ddots & \ddots&\\
+ & & -1 & 1\end{array} \right]
+
+.. math::
+
+ R(m) \approx \mathbf{v}^\top \left[\frac{\alpha_x}{2}\mathbf{A}_1 (\mathbf{D}_1 m) \odot (\mathbf{D}_1 m) + \frac{\alpha_y}{2}\mathbf{A}_2 (\mathbf{D}_2 m) \odot (\mathbf{D}_2 m) \right]
+
+Recall that this is really a just point wise multiplication, or a diagonal matrix times a vector. When we multiply by something in a diagonal we can interchange and it gives the same results (i.e. it is point wise)
+
+.. math::
+
+ \mathbf{a\odot b} = \text{diag}(\mathbf{a})\mathbf{b} = \text{diag}(\mathbf{b})\mathbf{a} = \mathbf{b\odot a}
+
+and the transpose also is true (but the sizes have to make sense...):
+
+.. math::
+
+ \mathbf{a}^\top\text{diag}(\mathbf{b}) = \mathbf{b}^\top\text{diag}(\mathbf{a})
+
+So R(m) can simplify to:
+
+.. math::
+
+ R(m) \approx \mathbf{m}^\top \left[\frac{\alpha_x}{2}\mathbf{D}_1^\top \text{diag}(\mathbf{A}_1^\top\mathbf{v}) \mathbf{D}_1 + \frac{\alpha_y}{2}\mathbf{D}_2^\top \text{diag}(\mathbf{A}_2^\top \mathbf{v}) \mathbf{D}_2 \right] \mathbf{m}
+
+We will define W_x as:
+
+.. math::
+
+ \mathbf{W}_x = \sqrt{\alpha_x}\text{diag}\left(\sqrt{\mathbf{A}_1^\top\mathbf{v}}\right) \mathbf{D}_1
+
+
+And then W as a tall matrix of all of the different regularization terms:
+
+.. math::
+
+ \mathbf{W} = \left[ \begin{array}{c}
+ \mathbf{W}_s\\
+ \mathbf{W}_x\\
+ \mathbf{W}_y\end{array} \right]
+
+Then we can write
+
+.. math::
+
+ R(m) \approx \frac{1}{2}\mathbf{m^\top W^\top W m}
+
+The API
+-------
+
+.. autoclass:: SimPEG.Regularization.BaseRegularization
+ :members:
+ :undoc-members:
+
+
+.. autoclass:: SimPEG.Regularization.Tikhonov
+ :show-inheritance:
+ :members:
+
+
+
diff --git a/docs/api_Utilities.rst b/docs/api_Utilities.rst
new file mode 100644
index 00000000..c3a08b30
--- /dev/null
+++ b/docs/api_Utilities.rst
@@ -0,0 +1,10 @@
+Utilities
+*********
+
+.. toctree::
+ :maxdepth: 2
+
+ api_Solver
+ api_Maps
+ api_Utils
+ api_Tests
diff --git a/docs/api_Utils.rst b/docs/api_Utils.rst
index 042aef67..1bf86516 100644
--- a/docs/api_Utils.rst
+++ b/docs/api_Utils.rst
@@ -1,8 +1,5 @@
-.. _api_Utils:
-
-
-Utilities
-*********
+Utils
+*****
.. automodule:: SimPEG.Utils
:members:
@@ -52,7 +49,7 @@ Interpolation Utilities
:undoc-members:
Counter Utilities
-=======================
+=================
::
class MyClass(object):
diff --git a/docs/api_bigPicture.rst b/docs/api_bigPicture.rst
index ef7c1174..90266650 100644
--- a/docs/api_bigPicture.rst
+++ b/docs/api_bigPicture.rst
@@ -1,17 +1,69 @@
-.. _api_license:
-
Why SimPEG?
-***********
+===========
+Our essential functions as researchers are the pursuit and dissemination of knowledge through research and education. As scientists we
+seek to find models that reproduce the observations that we make in the world. In geophysics, we use inverse theory to mathematically
+create models of the earth from measured data. It is a difficult problem with many moving pieces: physics, discretization, simulation,
+regularization, optimization, computer science, linear algebra, geology. Exploring each of these disciplines can take a career, if you
+are so inclined, but as geophysicists we care about the combination: how to pull these disciplines together to answer our questions.
+This is the first problem we hope to help solve: to create a toolbox for the geophysicist that allows you to work at a high level and
+keep your geophysical question in focus. However, a toolbox is not enough. The research questions that we are interested in surround
+the integration of information to make better decisions.
+
+We believe that the feedback loops in the geosciences could use some serious work. For example, collect multiple data-sets from the
+same field area (geology, seismic, electromagnetics, hydrogeology), process the data separately, and then reconvene with your
+multidisciplinary team. You may be rather surprised (or not) that the everyone has a (completely!?) different model. Dissonant at best,
+but often conflicting in the details. Therein lies the second problem: how do we integrate these geoscience fields? Not by force or
+even by default, but at least to have the option of quantitative communication and built in feedback loops. What we require is an
+implementation that is inherently and unequivocally modular, with all pieces available to manipulation. Black-box software, where the
+implementations are hidden, obfuscated, or difficult to manipulate, do not promote experimentation and investigation. We are working on
+a framework that exposes the details of the implementation to the geophysicist in a manner that promotes productivity and question
+based interrogation. This framework can be easily extended to encompass many geophysical problems and is built with the inverse problem
+as the fundamental goal.
+
+The future we see is a mix of tools that span our disciplines, and a framework that allows us to integrate many different types of
+geophysical data so that we can communicate effectively and experiment efficiently. A toolbox combined with a framework that allows you
+to solve your own problems, and creates opportunities for us to work together to better image and understand the subsurface. What we
+are building is called SimPEG, simulation and parameter estimation in geophysics. We are building it in the open. We are testing it.
+Breaking it. Building it. Fixing it. Using it. If you believe, like we do, that geophysics can be more innovative and informative in
+the open and that these tools are necessary and invaluable in education as well as research, then you should get in touch. There is a
+lot of work to do!
The Big Picture
-===============
+---------------
+
+Defining a well-posed inverse problem and solving it is a complex task that requires many components that must interact. It is helpful
+to view this task as a workflow in which various elements are explicitly identified and integrated. The figure below outlines the inversion components that consists of inputs, implementation, and evaluation. The inputs are composed of the geophysical data, the equations which are a mathematical description of the governing physics, and prior knowledge or assumptions about the setting. The implementation consists of two broad categories: the forward simulation and the inversion. The **forward simulation** is the means by which we solve the governing equations given a model and the **inversion components** evaluate and update this model. We are considering a gradient based approach, which updates the model through an optimization routine. The output of this implementation is a model, which, prior to interpretation, must be evaluated. This requires considering, and often re-assessing, the choices and assumptions made in both the input and implementation stages.
+
+.. image:: InversionWorkflow-PreSimPEG.png
+ :width: 400 px
+ :alt: Components
+ :align: center
+
+
+A Comprehensive Framework
+-------------------------
+
+There are an overwhelming amount of choices to be made as one works through the forward modeling and inversion process (see figure above). As a result, software implementations of this workflow often become complex and highly interdependent, making it difficult to interact with and to ask other scientists to pick up and change. Our approach to handling this complexity is to propose a framework, (see below), that compartmentalizes the implementation of inversions into various units. We present it in this specific modular style, as each unit contains a targeted subset of choices crucial to the inversion process.
.. image:: InversionWorkflow.png
:width: 400 px
:alt: Framework
:align: center
+The process of obtaining an acceptable model from an inversion generally requires the geophysicist to perform several iterations of the inversion workflow, rethinking and redesigning each piece of the framework to ensure it is appropriate in the current context. Inversions are experimental and empirical by nature and our software package is designed to facilitate this iterative process. To accomplish this, we have divided the inversion methodology into eight major components (See figure above). The (:class:`SimPEG.Mesh.BaseMesh`) class handles the discretization of the earth and also provides numerical operators. The forward simulation is split into two classes, the (:class:`SimPEG.Survey.BaseSurvey`) and the (:class:`SimPEG.Problem.BaseProblem`). The (:class:`SimPEG.Survey.BaseSurvey`) class handles the geometry of a geophysical problem as well as sources. The (:class:`SimPEG.Problem.BaseProblem`) class handles the simulation of the physics for the geophysical problem of interest. Although created independently, these two classes must be paired to form all of the components necessary for a geophysical forward simulation and calculation of the sensitivity. The (:class:`SimPEG.Problem.BaseProblem`) creates geophysical fields given a source from the (:class:`SimPEG.Survey.BaseSurvey`). The (:class:`SimPEG.Survey.BaseSurvey`) interpolates these fields to the receiver locations and converts them to the appropriate data type, for example, by selecting only the measured components of the field. Each of these operations may have associated derivatives with respect to the model and the computed field; these are included in the calculation of the sensitivity. For the inversion, a (:class:`SimPEG.DataMisfit.BaseDataMisfit`) is chosen to capture the goodness of fit of the predicted data and a (:class:`SimPEG.Regularization.BaseRegularization`) is chosen to handle the non-uniqueness. These inversion elements and an Optimization routine are combined into an inverse problem class (:class:`SimPEG.InvProblem.BaseInvProblem`). (:class:`SimPEG.InvProblem.BaseInvProblem`) is the mathematical statement that will be numerically solved by running an Inversion. The (:class:`SimPEG.Inversion.BaseInversion`) class handles organization and dispatch of directives between all of the various pieces of the framework.
-Explaining The Big Picture
-==========================
+The arrows in the figure above indicate what each class takes as a primary argument. For example, both the (:class:`SimPEG.Problem.BaseProblem`) and (:class:`SimPEG.Regularization.BaseRegularization`) classes take a (:class:`SimPEG.Mesh.BaseMesh`) class as an argument. The diagram does not show class inheritance, as each of the base classes outlined have many subtypes that can be interchanged. The (:class:`SimPEG.Mesh.BaseMesh`) class, for example, could be a regular Cartesian mesh (:class:`SimPEG.Mesh.TensorMesh`) or a cylindrical coordinate mesh (:class:`SimPEG.Mesh.CylMesh`), which have many properties in common. These common features, such as both meshes being created from tensor products, can be exploited through inheritance of base classes, and differences can be expressed through subtype polymorphism. Please look at the documentation here for more in-depth information.
+
+
+.. include:: ../CITATION.rst
+
+Authors
+-------
+
+.. include:: ../AUTHORS.rst
+
+License
+-------
+
+.. include:: ../LICENSE
diff --git a/docs/api_installing.rst b/docs/api_installing.rst
index e0e7ab59..23938dee 100644
--- a/docs/api_installing.rst
+++ b/docs/api_installing.rst
@@ -1,7 +1,7 @@
.. _api_installing:
-Installation
-************
+Getting Started with SimPEG
+***************************
Dependencies
============
diff --git a/docs/api_license.rst b/docs/api_license.rst
deleted file mode 100644
index b8f2d439..00000000
--- a/docs/api_license.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. _api_license:
-
-License
-*******
-
-.. include:: ../LICENSE
-
-Authors
-*******
-
-.. include:: ../AUTHORS.rst
-
-
-Projects Using SimPEG
-*********************
-
-.. include:: ../PROJECTS.rst
diff --git a/docs/em/api_Utils.rst b/docs/em/api_Utils.rst
index b7e9ea45..8ae98855 100644
--- a/docs/em/api_Utils.rst
+++ b/docs/em/api_Utils.rst
@@ -7,7 +7,7 @@ sources, and analytic functions.
Analytic Functions - Time
=========================
-.. automodule:: SimPEG.EM.Utils.Ana.TEM
+.. automodule:: SimPEG.EM.Analytics.TDEM
:show-inheritance:
:members:
:undoc-members:
@@ -17,7 +17,7 @@ Analytic Functions - Time
Analytic Functions - Frequency
==============================
-.. automodule:: SimPEG.EM.Utils.Ana.FEM
+.. automodule:: SimPEG.EM.Analytics.FDEM
:show-inheritance:
:members:
:undoc-members:
@@ -27,8 +27,7 @@ Analytic Functions - Frequency
Sources
=======
-.. automodule:: SimPEG.EM.Utils.Sources.magneticDipole
+.. autoclass:: SimPEG.EM.FDEM.SrcFDEM.MagDipole
:show-inheritance:
:members:
:undoc-members:
- :inherited-members:
diff --git a/docs/em/index.rst b/docs/em/index.rst
index 8cbb8619..fdf4dc19 100644
--- a/docs/em/index.rst
+++ b/docs/em/index.rst
@@ -9,7 +9,7 @@ Time Domian Electromagnetics
----------------------------
.. toctree::
- :maxdepth: 2
+ :maxdepth: 2
api_TDEM_derivation
@@ -18,7 +18,7 @@ Code for Time Domian Electromagnetics
-------------------------------------
.. toctree::
- :maxdepth: 2
+ :maxdepth: 2
api_TDEM
@@ -28,7 +28,6 @@ Frequency Domian Electromagnetics
.. toctree::
:maxdepth: 2
- api_ForwardProblem
api_FDEM
diff --git a/docs/index.rst b/docs/index.rst
index d3ec4e8c..be173aae 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,25 +1,38 @@
+.. image:: https://raw.github.com/simpeg/simpeg/master/docs/simpeg-logo.png
+ :alt: SimPEG Logo
+
SimPEG Documentation
********************
-.. image:: simpeg-logo.png
- :width: 300 px
- :alt: SimPEG
- :align: center
+.. image:: https://img.shields.io/pypi/v/SimPEG.svg
+ :target: https://crate.io/packages/SimPEG/
+ :alt: Latest PyPI version
-SimPEG: Simulation and Parameter Estimation in Geophysics
+.. image:: https://img.shields.io/pypi/dm/SimPEG.svg
+ :target: https://crate.io/packages/SimPEG/
+ :alt: Number of PyPI downloads
-SimPEG is a framework and a collection of tools that aid in the development of
-large-scale geophysical inversion codes.
-The vision is to create a modular and extensible package for
-finite volume simulation and parameter estimation with
-applications to geophysical imaging and subsurface flow. To enable
-these goals, this package has the following features:
+.. image:: https://img.shields.io/badge/license-MIT-blue.svg
+ :target: https://github.com/simpeg/simpeg/blob/master/LICENSE
+ :alt: BSD 3 clause license.
-- is modular with respect to ... everything!
-- is built with the (large-scale) inverse problem in mind
-- provides a framework for geophysical and hydrogeologic problems
-- supports 1D, 2D and 3D problems
-- provides a set of commonly used visualization utilities
+.. image:: https://img.shields.io/travis/simpeg/simpeg.svg
+ :target: https://travis-ci.org/simpeg/simpeg
+ :alt: Travis CI build status
+
+.. image:: https://img.shields.io/coveralls/simpeg/simpeg.svg
+ :target: https://coveralls.io/r/simpeg/simpeg?branch=master
+ :alt: Coverage status
+
+Simulation and Parameter Estimation in Geophysics - A python package for simulation and gradient based parameter estimation in the context of geophysical applications.
+
+Our vision is to create a package for finite volume simulation with applications to geophysical imaging and subsurface flow. To enable the understanding of the many different components, this package has the following features:
+
+* modular with respect to the spacial discretization, optimization routine, and geophysical problem
+* built with the inverse problem in mind
+* provides a framework for geophysical and hydrogeologic problems
+* supports 1D, 2D and 3D problems
+* designed for large-scale inversions
About SimPEG
@@ -29,56 +42,8 @@ About SimPEG
:maxdepth: 2
api_bigPicture
- api_license
-
-
-Getting Started with SimPEG
-***************************
-
-.. toctree::
- :maxdepth: 2
-
api_installing
-Discretization
-**************
-
-.. toctree::
- :maxdepth: 3
-
- api_Mesh
- api_DiffOps
- api_InnerProducts
-
-Forward Problems
-****************
-
-.. toctree::
- :maxdepth: 2
-
- api_ForwardProblem
-
-Inversion
-*********
-
-.. toctree::
- :maxdepth: 3
-
- api_DataMisfit
- api_Inverse
-
-Utility Codes
-*************
-
-.. toctree::
- :maxdepth: 2
-
- api_Solver
- api_Maps
- api_Utils
- api_Tests
-
-
Packages
********
@@ -88,20 +53,46 @@ Packages
em/index
flow/index
-Developer's Documentation
-*************************
+Examples
+********
-* Travis-CI Testing
- .. image:: https://travis-ci.org/simpeg/simpeg.svg?branch=master
- :target: https://travis-ci.org/simpeg/simpeg
- :alt: Master Branch
- :align: center
+.. toctree::
+ :maxdepth: 2
-* Coveralls Testing
- .. image:: https://coveralls.io/repos/simpeg/simpeg/badge.png?branch=master
- :target: https://coveralls.io/r/simpeg/simpeg?branch=master
- :alt: Coveralls
- :align: center
+ api_Examples
+
+
+Finite Volume
+*************
+
+.. toctree::
+ :maxdepth: 3
+
+ api_FiniteVolume
+
+Forward Problems
+****************
+
+.. toctree::
+ :maxdepth: 3
+
+ api_ForwardProblem
+
+Inversion Components
+********************
+
+.. toctree::
+ :maxdepth: 3
+
+ api_InversionComponents
+
+Utility Codes
+*************
+
+.. toctree::
+ :maxdepth: 3
+
+ api_Utilities
Project Index & Search
@@ -110,11 +101,3 @@ Project Index & Search
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
-
-Examples
-********
-
-.. toctree::
- :maxdepth: 2
-
- api_Examples