simpeg.electromagnetics.time_domain.Simulation3DCurrentDensity#
- class simpeg.electromagnetics.time_domain.Simulation3DCurrentDensity(mesh, survey=None, dt_threshold=1e-08, **kwargs)[source]#
Bases:
BaseTDEMSimulation
3D TDEM simulation in terms of the current density.
This simulation solves for the current density at each time-step. In this formulation, the magnetic fields are defined on mesh edges and the current densities are defined on mesh faces; i.e. it is an HJ formulation. See the Notes section for a comprehensive description of the formulation.
- Parameters:
- mesh
discretize.base.BaseMesh
The mesh.
- survey
time_domain.survey.Survey
The time-domain EM survey.
- dt_threshold
float
Threshold used when determining the unique time-step lengths.
- mesh
Attributes
Inverse of the factored system matrix for the DC resistivity problem.
Cell center inner product matrix.
Cell center property inner product matrix.
Cell center property inner product inverse matrix.
Cell center property inner product matrix.
Cell center property inner product inverse matrix.
Cell center property inner product matrix.
Cell center property inner product inverse matrix.
Cell center property inner product matrix.
Cell center property inner product inverse matrix.
Edge inner product matrix.
Edge inner product inverse matrix.
Edge property inner product matrix.
Edge property inner product inverse matrix.
Edge property inner product matrix.
Edge property inner product inverse matrix.
Edge property inner product matrix.
Edge property inner product inverse matrix.
Edge property inner product matrix.
Edge property inner product inverse matrix.
Face inner product matrix.
Face inner product inverse matrix.
Face property inner product matrix.
Face property inner product inverse matrix.
Face property inner product matrix.
Face property inner product inverse matrix.
Face property inner product matrix.
Face property inner product inverse matrix.
Face property inner product matrix.
Face property inner product inverse matrix.
Node inner product matrix.
Node inner product inverse matrix.
Node property inner product matrix.
Node property inner product inverse matrix.
Node property inner product matrix.
Node property inner product inverse matrix.
Node property inner product matrix.
Node property inner product inverse matrix.
Node property inner product matrix.
Node property inner product inverse matrix.
A list of solver objects to clean when the model is updated
SimPEG
Counter
object to store iterations and run-times.HasModel.deleteTheseOnModelUpdate has been deprecated.
Threshold used when determining the unique time-step lengths.
Mesh for the simulation.
The inversion model.
Magnetic permeability (h/m) physical property model.
Derivative of Magnetic Permeability (H/m) wrt the model.
Mapping of the inversion model to Magnetic Permeability (H/m).
Inverse magnetic permeability (m/h) physical property model.
Derivative of Inverse Magnetic Permeability (m/H) wrt the model.
Mapping of the inversion model to Inverse Magnetic Permeability (m/H).
Total number of time steps.
True if a model is necessary
Electrical resistivity (ohm m) physical property model.
Derivative of Electrical resistivity (Ohm m) wrt the model.
Mapping of the inversion model to Electrical resistivity (Ohm m).
Path to directory where sensitivity file is stored.
Electrical conductivity (s/m) physical property model.
Derivative of Electrical conductivity (S/m) wrt the model.
Mapping of the inversion model to Electrical conductivity (S/m).
Numerical solver used in the forward simulation.
Solver-specific parameters.
Whether to store inner product matrices
The TDEM survey object.
Initial time, in seconds, for the time-dependent forward simulation.
Time mesh for easy interpolation to observation times.
Time step lengths, in seconds, for the time domain simulation.
Evaluation times.
Verbose progress printout.
MccI
Vol
Methods
Fields_Derivs
alias of
FieldsDerivativesHJ
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])Derivative of MccProperty with respect to the model.
MccMuIDeriv
(u[, v, adjoint])Derivative of MccPropertyI with respect to the model.
MccMuiDeriv
(u[, v, adjoint])Derivative of MccProperty with respect to the model.
MccMuiIDeriv
(u[, v, adjoint])Derivative of MccPropertyI with respect to the model.
MccRhoDeriv
(u[, v, adjoint])Derivative of MccProperty with respect to the model.
MccRhoIDeriv
(u[, v, adjoint])Derivative of MccPropertyI with respect to the model.
MccSigmaDeriv
(u[, v, adjoint])Derivative of MccProperty with respect to the model.
MccSigmaIDeriv
(u[, v, adjoint])Derivative of MccPropertyI with respect to the model.
MeMuDeriv
(u[, v, adjoint])Derivative of MeProperty with respect to the model.
MeMuIDeriv
(u[, v, adjoint])Derivative of MePropertyI with respect to the model.
MeMuiDeriv
(u[, v, adjoint])Derivative of MeProperty with respect to the model.
MeMuiIDeriv
(u[, v, adjoint])Derivative of MePropertyI with respect to the model.
MeRhoDeriv
(u[, v, adjoint])Derivative of MeProperty with respect to the model.
MeRhoIDeriv
(u[, v, adjoint])Derivative of MePropertyI with respect to the model.
MeSigmaDeriv
(u[, v, adjoint])Derivative of MeProperty with respect to the model.
MeSigmaIDeriv
(u[, v, adjoint])Derivative of MePropertyI with respect to the model.
MfMuDeriv
(u[, v, adjoint])Derivative of MfProperty with respect to the model.
MfMuIDeriv
(u[, v, adjoint])I Derivative of MfPropertyI with respect to the model.
MfMuiDeriv
(u[, v, adjoint])Derivative of MfProperty with respect to the model.
MfMuiIDeriv
(u[, v, adjoint])I Derivative of MfPropertyI with respect to the model.
MfRhoDeriv
(u[, v, adjoint])Derivative of MfProperty with respect to the model.
MfRhoIDeriv
(u[, v, adjoint])I Derivative of MfPropertyI with respect to the model.
MfSigmaDeriv
(u[, v, adjoint])Derivative of MfProperty with respect to the model.
MfSigmaIDeriv
(u[, v, adjoint])I Derivative of MfPropertyI with respect to the model.
MnMuDeriv
(u[, v, adjoint])Derivative of MnProperty with respect to the model.
MnMuIDeriv
(u[, v, adjoint])Derivative of MnPropertyI with respect to the model.
MnMuiDeriv
(u[, v, adjoint])Derivative of MnProperty with respect to the model.
MnMuiIDeriv
(u[, v, adjoint])Derivative of MnPropertyI with respect to the model.
MnRhoDeriv
(u[, v, adjoint])Derivative of MnProperty with respect to the model.
MnRhoIDeriv
(u[, v, adjoint])Derivative of MnPropertyI with respect to the model.
MnSigmaDeriv
(u[, v, adjoint])Derivative of MnProperty with respect to the model.
MnSigmaIDeriv
(u[, v, adjoint])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
alias of
Fields3DCurrentDensity
getAdc
()The system matrix for the DC resistivity problem.
getAdcDeriv
(u, v[, adjoint])Derivative operation for the DC resistivity system matrix times a vector.
getAdiag
(tInd)Diagonal system matrix for the given time-step index.
getAdiagDeriv
(tInd, u, v[, adjoint])Derivative operation for the diagonal system matrix times a vector.
getAsubdiag
(tInd)Sub-diagonal system matrix for the time-step index provided.
getAsubdiagDeriv
(tInd, u, v[, adjoint])Derivative operation for the sub-diagonal system matrix times a vector.
Returns the fields for all sources at the initial time.
getInitialFieldsDeriv
(src, v[, adjoint, f])Derivative of the initial fields with respect to the model for a given source.
getRHS
(tInd)Right-hand sides for the given time index.
getRHSDeriv
(tInd, src, v[, adjoint])Derivative of the right-hand side 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 resistivity \(\rho\) and magnetic permeability \(\mu\) as:
\[\begin{split}\vec{e} &= \rho \vec{e} \\ \vec{b} &= \mu \vec{h}\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 (\nabla \times \vec{u}) \cdot \vec{e} \; dv - \oint_{\partial \Omega} \vec{u} \cdot (\vec{e} \times \hat{n} ) \, da + \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 \vec{u} \cdot (\nabla \times \vec{h} ) \, dv - \int_\Omega \vec{u} \cdot \vec{j} \, dv = \int_\Omega \vec{u} \cdot \vec{s}_e \, dv\\ & \int_\Omega \vec{u} \cdot \vec{e} \, dv = \int_\Omega \vec{u} \cdot \rho \vec{j} \, dv \\ & \int_\Omega \vec{u} \cdot \vec{b} \, dv = \int_\Omega \vec{u} \cdot \mu \vec{h} \, 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 magnetic fields \(\mathbf{h}\) are defined on mesh edges, and the discrete current densities \(\mathbf{j}\) are defined on mesh faces. This implies \(\mathbf{b}\) must be defined on mesh edges and \(\mathbf{e}\) 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_e^T C^T M_f \, e } + \mathbf{u_e^T M_e} \frac{\partial \mathbf{b}}{\partial t} = - \mathbf{u_e^T} \, \frac{\partial \mathbf{s_m}}{\partial t} \\ &\mathbf{u_f^T C \, h} - \mathbf{u_f^T j} = \mathbf{u_f^T s_e} \\ &\mathbf{u_f^T M_f e} = \mathbf{u_f^T M_{f\rho} \, j} \\ &\mathbf{u_e^T M_e b} = \mathbf{u_e^T M_{e \mu} h}\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\mu}}\) is the inner-product matrix for permeabilities projected to edges
\(\mathbf{M_{f\rho}}\) is the inner-product matrix for resistivities projected to faces
Cancelling like-terms and combining the discrete expressions in terms of the current density, we obtain:
\[\mathbf{C M_{e\mu}^{-1} C^T M_{f\rho} \, j} + \frac{\partial \mathbf{j}}{\partial t} = - \frac{\partial \mathbf{s_e}}{\partial t} - \mathbf{C M_{e\mu}^{-1}} \frac{\partial \mathbf{s_m}}{\partial t}\]Finally, we discretize in time according to backward Euler. The discrete current density on mesh edges at time \(t_k > t_0\) is obtained by solving the following at each time-step:
\[\mathbf{A}_k \mathbf{j}_k = \mathbf{q}_k - \mathbf{B}_k \mathbf{j}_{k-1}\]where \(\Delta t_k = t_k - t_{k-1}\) and
\[\begin{split}&\mathbf{A}_k = \mathbf{C M_{e\mu}^{-1} C^T M_{f\rho}} + \frac{1}{\Delta t_k} \mathbf{I} \\ &\mathbf{B}_k = - \frac{1}{\Delta t_k} \mathbf{I}\\ &\mathbf{q}_k = - \frac{1}{\Delta t_k} \big [ \mathbf{s}_{\mathbf{e},k} + \mathbf{s}_{\mathbf{e},k-1} \big ] \; - \; \frac{1}{\Delta t_k} \mathbf{C M_{e\mu}^{-1}} \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{j_1} \\ \mathbf{j_2} \\ \vdots \\ \mathbf{j_n} \end{bmatrix} = \begin{bmatrix} \mathbf{q_1} \\ \mathbf{q_2} \\ \vdots \\ \mathbf{q_n} \end{bmatrix} - \begin{bmatrix} \mathbf{B_1 j_0} \\ \mathbf{0} \\ \vdots \\ \mathbf{0} \end{bmatrix}\end{split}\]where the current densities at the initial time \(\mathbf{j_0}\) are computed analytically or numerically depending on whether the source carries non-zero current at the initial time.