simpeg.electromagnetics.static.resistivity.Simulation3DCellCentered#

class simpeg.electromagnetics.static.resistivity.Simulation3DCellCentered(mesh, survey=None, bc_type='Robin', **kwargs)[source]#

Bases: BaseDCSimulation

3D cell centered DC resistivity simulation class.

Where \(\phi\) is the electric potential, \(\rho\) is the electrical resistivity, and \(I \delta (r)\) represents a grounded source which injects static current I at location r, the 3D DC resistivity problem is define according to the following PDE:

\[\nabla \cdot \frac{1}{\rho} \nabla \phi = - I \delta (r)\]

The Simulation3DCellCentered class uses the mimetic finite volume approach to solve for the discrete electric potentials at cell centers. See the Notes section for a comprehensive description of the formulation.

Attributes

Mcc

Get cell inner product matrix.

MccI

Get inverse of cell inner product matrix.

MccRho

Get cell center property inner product matrix.

MccRhoI

Get cell center property inner product inverse matrix.

MccSigma

Get cell center property inner product matrix.

MccSigmaI

Get cell center property inner product inverse matrix.

Me

Get edge inner product matrix.

MeI

Get inverse of edge inner product matrix.

MeRho

Get edge property inner product matrix.

MeRhoI

Get edge property inner product inverse matrix.

MeSigma

Get edge property inner product matrix.

MeSigmaI

Get edge property inner product inverse matrix.

Mf

Get face inner product matrix.

MfI

Get inverse of face inner product matrix.

MfRho

Get face property inner product matrix.

MfRhoI

Get face property inner product inverse matrix.

MfSigma

Get face property inner product matrix.

MfSigmaI

Get face property inner product inverse matrix.

Mn

Get node inner product matrix.

MnI

Get inverse of node inner product matrix.

MnRho

Get node property inner product matrix.

MnRhoI

Get node property inner product inverse matrix.

MnSigma

Get node property inner product matrix.

MnSigmaI

Get node property inner product inverse matrix.

Vol

Get volumes.

bc_type

Type of boundary condition to use for simulation.

clean_on_model_update

A list of solver objects to clean when the model is updated

counter

SimPEG Counter object to store iterations and run-times.

deleteTheseOnModelUpdate

HasModel.deleteTheseOnModelUpdate has been deprecated.

mesh

Mesh for the simulation.

model

The inversion model.

needs_model

True if a model is necessary

rho

Electrical resistivity (ohm m) physical property model.

rhoDeriv

Derivative of Electrical resistivity (Ohm m) wrt the model.

rhoMap

Mapping of the inversion model to Electrical resistivity (Ohm m).

sensitivity_path

Path to directory where sensitivity file is stored.

sigma

Electrical conductivity (s/m) physical property model.

sigmaDeriv

Derivative of Electrical conductivity (S/m) wrt the model.

sigmaMap

Mapping of the inversion model to Electrical conductivity (S/m).

solver

Numerical solver used in the forward simulation.

solver_opts

Set solver-specific parameters.

storeJ

Whether to store the sensitivity matrix.

surface_faces

Return which boundary faces to interpret as surfaces of Neumann boundary.

survey

The DC survey object.

verbose

Verbose progress printout.

Ainv

Methods

Jtvec(m, v[, f])

Compute the adjoint sensitivity matrix times a vector.

Jtvec_approx(m, v[, f])

Approximation of the Jacobian transpose times a vector for the model provided.

Jvec(m, v[, f])

Compute the sensitivity matrix times a vector.

Jvec_approx(m, v[, f])

Approximation of the Jacobian times a vector for the model provided.

MccRhoDeriv(u[, v, adjoint])

Get derivative of MccProperty with respect to the model.

MccRhoIDeriv(u[, v, adjoint])

Get derivative of MccPropertyI with respect to the model.

MccSigmaDeriv(u[, v, adjoint])

Get derivative of MccProperty with respect to the model.

MccSigmaIDeriv(u[, v, adjoint])

Get derivative of MccPropertyI with respect to the model.

MeRhoDeriv(u[, v, adjoint])

Get derivative of MeProperty with respect to the model.

MeRhoIDeriv(u[, v, adjoint])

Get derivative of MePropertyI with respect to the model.

MeSigmaDeriv(u[, v, adjoint])

Get derivative of MeProperty with respect to the model.

MeSigmaIDeriv(u[, v, adjoint])

Get derivative of MePropertyI with respect to the model.

MfRhoDeriv(u[, v, adjoint])

Get derivative of MfProperty with respect to the model.

MfRhoIDeriv(u[, v, adjoint])

Get derivative of MfPropertyI with respect to the model.

MfSigmaDeriv(u[, v, adjoint])

Get derivative of MfProperty with respect to the model.

MfSigmaIDeriv(u[, v, adjoint])

Get derivative of MfPropertyI with respect to the model.

MnRhoDeriv(u[, v, adjoint])

Get derivative of MnProperty with respect to the model.

MnRhoIDeriv(u[, v, adjoint])

Get derivative of MnPropertyI with respect to the model.

MnSigmaDeriv(u[, v, adjoint])

Get derivative of MnProperty with respect to the model.

MnSigmaIDeriv(u[, v, adjoint])

Get derivative of MnPropertyI with respect to the model.

dpred([m, f])

Predicted data for the model provided.

fields([m, calcJ])

Compute and return the fields for the model provided.

getA([resistivity])

Return the system matrix.

getADeriv(u, v[, adjoint])

Get resistivity derivative operation for the system matrix times a vector.

getJ(m[, f])

Compute the sensitivity matrix for a given model.

getJtJdiag(m[, W, f])

Return the diagonal of JtJ.

getRHS()

Compute and return right-hand sides for all sources.

getRHSDeriv(source, v[, adjoint])

Get derivative of the right-hand side with respect to the model.

getSourceTerm()

Return the discrete source term for all sources.

make_synthetic_data(m[, relative_error, ...])

Make synthetic data for the model and Gaussian noise provided.

residual(m, dobs[, f])

The data residual.

setBC()

Set the boundary conditions for the gradient operator.

fieldsPair

Notes

To derive the discrete solution, we start by considering Ampere’s law and Faraday’s law. In the static regime, all time-derivative are zero. By also taking the divergence of Ampere’s law, we obtain:

\[\begin{split}&\nabla \times \vec{e} = 0\\ &\nabla \cdot \vec{j} = - \nabla \cdot \vec{j}_s\end{split}\]

where \(\vec{e}\) is the electric field, \(\vec{j}\) is the current density outside the grounded source and and \(\vec{j}_s\) is the source current density. The constitutive relation between the electric field and current density is given by Ohm’s law:

\[\vec{e} = \rho \vec{j}\]

where \(\rho\) is the electrical resistivity.

Faraday’s law implies the electric field can be defined as the gradient of a scalar potential \(\phi\) as follows:

\[\vec{e} = -\nabla \phi\]

For a source representing current I injected at point r, the static form of Ampere’s law becomes:

\[\nabla \cdot \vec{j} = - I \delta (r)\]

For a vector test function \(\vec{u}\) and a scalar test function \(\psi\), we take the inner products with the three previous equations. Through vector calculus identities and the divergence theorem, we obtain:

\[\begin{split}& \int_\Omega \vec{u} \cdot \vec{e} \, dv = \int_\Omega \vec{u} \cdot \rho \vec{j} \, dv \\ & \int_\Omega \psi ( \nabla \cdot \vec{j} ) \, dv = - I \int_\Omega \psi \, \delta (r) \, dv \\ & \int_\Omega \vec{u} \cdot \vec{e} \, dv = \int_\Omega (\nabla \cdot \vec{u}) \phi \, dv - \oint_{\partial \Omega} (\vec{u} \cdot \hat{n} ) \, \phi \, da\end{split}\]

where the surface integral defines the boundary conditions.

The above expressions are discretized in space according to the finite volume method. The discrete current densities \(\mathbf{j}\) are defined on mesh faces, and the discrete electric potential \(\boldsymbol{\phi}\) are defined at cell centers. This implies \(\mathbf{u}\) and \(\mathbf{e}\) must be defined on mesh faces, and \(\boldsymbol{\psi}\) must be defined at cell centers. We obtain the following set of discrete inner-products:

\[\begin{split}&\mathbf{u^T M_f \, e} = \mathbf{u^T M_{f\rho} \, j} \\ &\boldsymbol{\psi^T} \mathbf{M_c D j} = \boldsymbol{\psi^T} \mathbf{q} \\ &\mathbf{u^T M_f e} = \mathbf{u^T (D^T - B ) M_c} \boldsymbol{\phi}\end{split}\]

where

  • \(\mathbf{D}\) is the divergence operator (faces to cell centers)

  • \(\mathbf{q}\) is an integrated source term

  • \(\mathbf{B}\) is a matrix that implements boundary conditions

  • \(\mathbf{M_c}\) is the cell inner-product matrix

  • \(\mathbf{M_f}\) is the face inner-product matrix

  • \(\mathbf{M_{f\rho}}\) is the inner-product matrix for resistivities projected to faces

By combining the discrete equations to form a discrete solution in terms of the discrete electric potential on mesh nodes, we obtain:

\[\big [ \mathbf{M_c D M_{f\rho}^{-1} (D^T - B ) M_c} \big ] \boldsymbol{\phi} = \mathbf{q}\]

Note that \(\mathbf{D^T - B}\) is effectively a gradient operator that has been modified to implement the boundary conditions.

Galleries and Tutorials using simpeg.electromagnetics.static.resistivity.Simulation3DCellCentered#

DC Analytic Dipole

DC Analytic Dipole

3D DC inversion of Dipole Dipole array

3D DC inversion of Dipole Dipole array