simpeg.electromagnetics.time_domain.Simulation3DMagneticFluxDensity#

class simpeg.electromagnetics.time_domain.Simulation3DMagneticFluxDensity(mesh, survey=None, dt_threshold=1e-08, store_factors=False, **kwargs)[source]#

Bases: BaseTDEMSimulation

3D TDEM simulation in terms of the magnetic flux density.

This simulation solves for the magnetic flux density at each time-step. In this formulation, the electric fields are defined on mesh edges and the magnetic flux density is defined on mesh faces; i.e. it is an EB formulation. See the Notes section for a comprehensive description of the formulation.

Parameters:
meshdiscretize.base.BaseMesh

The mesh.

surveytime_domain.survey.Survey

The time-domain EM survey.

dt_thresholdfloat

Threshold used when determining the unique time-step lengths.

Attributes

Adcinv

Inverse of the factored system matrix for the DC resistivity problem.

Mcc

Get cell inner product matrix.

MccI

Get inverse of cell inner product matrix.

MccMu

Get cell center property inner product matrix.

MccMuI

Get cell center property inner product inverse matrix.

MccMui

Get cell center property inner product matrix.

MccMuiI

Get cell center property inner product inverse 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.

MeMu

Get edge property inner product matrix.

MeMuI

Get edge property inner product inverse matrix.

MeMui

Get edge property inner product matrix.

MeMuiI

Get edge property inner product inverse 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.

MfMu

Get face property inner product matrix.

MfMuI

Get face property inner product inverse matrix.

MfMui

Get face property inner product matrix.

MfMuiI

Get face property inner product inverse 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.

MnMu

Get node property inner product matrix.

MnMuI

Get node property inner product inverse matrix.

MnMui

Get node property inner product matrix.

MnMuiI

Get node property inner product inverse 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.

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.

dt_threshold

Threshold used when determining the unique time-step lengths.

mesh

Mesh for the simulation.

model

The inversion model.

mu

Magnetic permeability (h/m) physical property model.

muDeriv

Derivative of Magnetic Permeability (H/m) wrt the model.

muMap

Mapping of the inversion model to Magnetic Permeability (H/m).

mui

Inverse magnetic permeability (m/h) physical property model.

muiDeriv

Derivative of Inverse Magnetic Permeability (m/H) wrt the model.

muiMap

Mapping of the inversion model to Inverse Magnetic Permeability (m/H).

nT

Total number of time steps.

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.

storeInnerProduct

Whether to store inner product matrices

store_factors

Whether the factorization for each unique time step is stored.

survey

The TDEM survey object.

t0

Initial time, in seconds, for the time-dependent forward simulation.

time_mesh

Time mesh for easy interpolation to observation times.

time_steps

Time step lengths, in seconds, for the time domain simulation.

times

Evaluation times.

verbose

Verbose progress printout.

Methods

Fields_Derivs

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.

MccMuDeriv(u[, v, adjoint])

Get derivative of MccProperty with respect to the model.

MccMuIDeriv(u[, v, adjoint])

Get derivative of MccPropertyI with respect to the model.

MccMuiDeriv(u[, v, adjoint])

Get derivative of MccProperty with respect to the model.

MccMuiIDeriv(u[, v, adjoint])

Get derivative of MccPropertyI with respect to the model.

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.

MeMuDeriv(u[, v, adjoint])

Get derivative of MeProperty with respect to the model.

MeMuIDeriv(u[, v, adjoint])

Get derivative of MePropertyI with respect to the model.

MeMuiDeriv(u[, v, adjoint])

Get derivative of MeProperty with respect to the model.

MeMuiIDeriv(u[, v, adjoint])

Get derivative of MePropertyI 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.

MfMuDeriv(u[, v, adjoint])

Get derivative of MfProperty with respect to the model.

MfMuIDeriv(u[, v, adjoint])

Get derivative of MfPropertyI with respect to the model.

MfMuiDeriv(u[, v, adjoint])

Get derivative of MfProperty with respect to the model.

MfMuiIDeriv(u[, v, adjoint])

Get derivative of MfPropertyI 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.

MnMuDeriv(u[, v, adjoint])

Get derivative of MnProperty with respect to the model.

MnMuIDeriv(u[, v, adjoint])

Get derivative of MnPropertyI with respect to the model.

MnMuiDeriv(u[, v, adjoint])

Get derivative of MnProperty with respect to the model.

MnMuiIDeriv(u[, v, adjoint])

Get derivative of MnPropertyI 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)

Compute and return the fields for the model provided.

fieldsPair

getAdiag(tInd)

Return diagonal system matrix for the given time-step index.

getAdiagDeriv(tInd, u, v[, adjoint])

Return derivative operation for the diagonal system matrix times a vector.

getAsubdiag(tInd)

Return sub-diagonal system matrix for the time-step index provided.

getAsubdiagDeriv(tInd, u, v[, adjoint])

Return derivative operation for the sub-diagonal system matrix times a vector.

getInitialFields()

Return the fields for all sources at the initial time.

getInitialFieldsDeriv(src, v[, adjoint, f])

Return derivative of initial fields with respect to the model for a given source.

getRHS(tInd)

Return right-hand sides for the given time index.

getRHSDeriv(tInd, src, v[, adjoint])

Return right-hand side derivative times a vector for a given source and time index.

getSourceTerm(tInd)

Return the discrete source terms for the time index provided.

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

Make synthetic data for the model and Gaussian noise provided.

residual(m, dobs[, f])

The data residual.

Notes

Here, we start with the quasi-static approximation for Maxwell’s equations by neglecting electric displacement:

\[\begin{split}&\nabla \times \vec{e} + \frac{\partial \vec{b}}{\partial t} = - \frac{\partial \vec{s}_m}{\partial t} \\ &\nabla \times \vec{h} - \vec{j} = \vec{s}_e\end{split}\]

where \(\vec{s}_e\) is an electric source term that defines a source current density, and \(\vec{s}_m\) magnetic source term that defines a source magnetic flux density. We define the constitutive relations for the electrical conductivity \(\sigma\) and magnetic permeability \(\mu\) as:

\[\begin{split}\vec{j} &= \sigma \vec{e} \\ \vec{h} &= \mu^{-1} \vec{b}\end{split}\]

We then take the inner products of all previous expressions with a vector test function \(\vec{u}\). Through vector calculus identities and the divergence theorem, we obtain:

\[\begin{split}& \int_\Omega \vec{u} \cdot (\nabla \times \vec{e}) \, dv + \int_\Omega \vec{u} \cdot \frac{\partial \vec{b}}{\partial t} \, dv = - \int_\Omega \vec{u} \cdot \frac{\partial \vec{s}_m}{\partial t} \, dv \\ & \int_\Omega (\nabla \times \vec{u}) \cdot \vec{h} \, dv - \oint_{\partial \Omega} \vec{u} \cdot (\vec{h} \times \hat{n}) \, da - \int_\Omega \vec{u} \cdot \vec{j} \, dv = \int_\Omega \vec{u} \cdot \vec{s}_e \, dv \\ & \int_\Omega \vec{u} \cdot \vec{j} \, dv = \int_\Omega \vec{u} \cdot \sigma \vec{e} \, dv \\ & \int_\Omega \vec{u} \cdot \vec{h} \, dv = \int_\Omega \vec{u} \cdot \mu^{-1} \vec{b} \, dv\end{split}\]

Assuming natural boundary conditions, the surface integral is zero.

The above expressions are discretized in space according to the finite volume method. The discrete electric fields \(\mathbf{e}\) are defined on mesh edges, and the discrete magnetic flux densities \(\mathbf{b}\) are defined on mesh faces. This implies \(\mathbf{j}\) must be defined on mesh edges and \(\mathbf{h}\) must be defined on mesh faces. Where \(\mathbf{u_e}\) and \(\mathbf{u_f}\) represent test functions discretized to edges and faces, respectively, we obtain the following set of discrete inner-products:

\[\begin{split}&\mathbf{u_f^T C e} + \mathbf{u_f^T } \, \frac{\partial \mathbf{b}}{\partial t} = - \mathbf{u_f^T } \, \frac{\partial \mathbf{s_m}}{\partial t} \\ &\mathbf{u_e^T C^T M_f h} - \mathbf{u_e^T M_e j} = \mathbf{u_e^T s_e} \\ &\mathbf{u_e^T M_e j} = \mathbf{u_e^T M_{e\sigma} e} \\ &\mathbf{u_f^T M_f h} = \mathbf{u_f^T M_{f \frac{1}{\mu}} b}\end{split}\]

where

  • \(\mathbf{C}\) is the discrete curl operator

  • \(\mathbf{s_m}\) and \(\mathbf{s_e}\) are the integrated magnetic and electric source terms, respectively

  • \(\mathbf{M_e}\) is the edge inner-product matrix

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

  • \(\mathbf{M_{e\sigma}}\) is the inner-product matrix for conductivities projected to edges

  • \(\mathbf{M_{f\frac{1}{\mu}}}\) is the inner-product matrix for inverse permeabilities projected to faces

By cancelling like-terms and combining the discrete expressions in terms of the magnetic flux density, we obtain:

\[\mathbf{C M_{e\sigma}^{-1} C^T M_{f\frac{1}{\mu}} b} + \frac{\partial \mathbf{b}}{\partial t} = \mathbf{C M_{e\sigma}^{-1}} \mathbf{s_e} - \frac{\partial \mathbf{s_m}}{\partial t}\]

Finally, we discretize in time according to backward Euler. The discrete magnetic flux density on mesh faces at time \(t_k > t_0\) is obtained by solving the following at each time-step:

\[\mathbf{A}_k \mathbf{b}_k = \mathbf{q_k} - \mathbf{B}_k \mathbf{b}_{k-1}\]

where \(\Delta t_k = t_k - t_{k-1}\) and

\[\begin{split}&\mathbf{A}_k = \mathbf{C M_{e\sigma}^{-1} C^T M_{f\frac{1}{\mu}}} + \frac{1}{\Delta t_k} \mathbf{I} \\ &\mathbf{B}_k = -\frac{1}{\Delta t_k} \mathbf{I}\\ &\mathbf{q}_k = \mathbf{C M_{e\sigma}^{-1}} \mathbf{s}_{\mathbf{e}, k} \; - \; \frac{1}{\Delta t_k} \big [ \mathbf{s}_{\mathbf{m}, k} - \mathbf{s}_{\mathbf{m}, k-1} \big ]\end{split}\]

Although the following system is never explicitly formed, we can represent the solution at all time-steps as:

\[\begin{split}\begin{bmatrix} \mathbf{A_1} & & & & \\ \mathbf{B_2} & \mathbf{A_2} & & & \\ & & \ddots & & \\ & & & \mathbf{B_n} & \mathbf{A_n} \end{bmatrix} \begin{bmatrix} \mathbf{b_1} \\ \mathbf{b_2} \\ \vdots \\ \mathbf{b_n} \end{bmatrix} = \begin{bmatrix} \mathbf{q_1} \\ \mathbf{q_2} \\ \vdots \\ \mathbf{q_n} \end{bmatrix} - \begin{bmatrix} \mathbf{B_1 b_0} \\ \mathbf{0} \\ \vdots \\ \mathbf{0} \end{bmatrix}\end{split}\]

where the magnetic flux densities at the initial time \(\mathbf{b_0}\) are computed analytically or numerically depending on whether the source carries non-zero current at the initial time.

Galleries and Tutorials using simpeg.electromagnetics.time_domain.Simulation3DMagneticFluxDensity#

EM: TDEM: Permeable Target, Inductive Source

EM: TDEM: Permeable Target, Inductive Source

EM: TDEM: 1D: Inversion with VTEM waveform

EM: TDEM: 1D: Inversion with VTEM waveform

Heagy et al., 2017 1D FDEM and TDEM inversions

Heagy et al., 2017 1D FDEM and TDEM inversions

3D Forward Simulation for Transient Response on a Cylindrical Mesh

3D Forward Simulation for Transient Response on a Cylindrical Mesh

3D Forward Simulation with User-Defined Waveforms

3D Forward Simulation with User-Defined Waveforms

Forward Simulation Including Inductive Response

Forward Simulation Including Inductive Response