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:
- 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. 
 
- 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 - Counterobject 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. 
