simpeg.electromagnetics.frequency_domain.Simulation3DMagneticField#
- class simpeg.electromagnetics.frequency_domain.Simulation3DMagneticField(mesh, survey=None, forward_only=False, permittivity=None, storeJ=False, **kwargs)[source]#
Bases:
BaseFDEMSimulation3D FDEM simulation in terms of the magnetic field.
This simulation solves for the magnetic field at each frequency. 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
frequency_domain.survey.Survey The frequency-domain EM survey.
- forward_onlybool,
optional If
True, the factorization for the inverse of the system matrix at each frequency is discarded after the fields are computed at that frequency. IfFalse, the factorizations of the system matrices for all frequencies are stored.- permittivity(n_cells,)
numpy.ndarray,optional Dielectric permittivity (F/m) defined on the entire mesh. If
None, electric displacement is ignored. Please note that permittivity is not an invertible property, and that future development will result in the deprecation of this propery.- storeJbool,
optional Whether to compute and store the sensitivity matrix.
- mesh
Attributes
Get cell inner product matrix.
Get inverse of cell inner product matrix.
Get cell center property inner product matrix.
Get cell center property inner product inverse matrix.
Get cell center property inner product matrix.
Get cell center property inner product inverse matrix.
Get cell center property inner product matrix.
Get cell center property inner product inverse matrix.
Get cell center property inner product matrix.
Get cell center property inner product inverse matrix.
Get edge inner product matrix.
Get inverse of edge inner product matrix.
Get edge property inner product matrix.
Get edge property inner product inverse matrix.
Get edge property inner product matrix.
Get edge property inner product inverse matrix.
Get edge property inner product matrix.
Get edge property inner product inverse matrix.
Get edge property inner product matrix.
Get edge property inner product inverse matrix.
Get face inner product matrix.
Get inverse of face inner product matrix.
Get face property inner product matrix.
Get face property inner product inverse matrix.
Get face property inner product matrix.
Get face property inner product inverse matrix.
Get face property inner product matrix.
Get face property inner product inverse matrix.
Get face property inner product matrix.
Get face property inner product inverse matrix.
Get node inner product matrix.
Get inverse of node inner product matrix.
Get node property inner product matrix.
Get node property inner product inverse matrix.
Get node property inner product matrix.
Get node property inner product inverse matrix.
Get node property inner product matrix.
Get node property inner product inverse matrix.
Get node property inner product matrix.
Get node property inner product inverse matrix.
Get volumes.
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.
Whether to store the factorizations of the inverses of the system matrices.
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).
True if a model is necessary
Dielectric permittivity (F/m)
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.
Set solver-specific parameters.
Whether to store inner product matrices
Whether to compute and store the sensitivity matrix.
The FDEM survey object.
Verbose progress printout.
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.
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.
fieldsPairgetA(freq)System matrix for the frequency provided.
getADeriv(freq, u, v[, adjoint])Get derivative operation for the system matrix times a vector.
getADeriv_mu(freq, u, v[, adjoint])Get permeability derivative operation for the system matrix times a vector.
getADeriv_rho(freq, u, v[, adjoint])Get resistivity derivative operation for the system matrix times a vector.
getJ(m[, f])Generate the full sensitivity matrix.
getJtJdiag(m[, W, f])Return the diagonal of \(\mathbf{J^T J}\).
getRHS(freq)Get right-hand sides for the given frequency.
getRHSDeriv(freq, src, v[, adjoint])Get right-hand side derivative times a vector for a given source and frequency.
getSourceTerm(freq)Return the discrete source terms for the frequency 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 Maxwell’s equations in the frequency-domain where a \(+i\omega t\) Fourier convention is used:
\[\begin{split}\begin{aligned} &\nabla \times \vec{E} + i\omega \vec{B} = \vec{S}_m \\ &\nabla \times \vec{H} - \vec{J} = \vec{S}_e \end{aligned}\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. For now, we neglect displacement current (the permittivity attribute is
None). We define the constitutive relations for the electrical resistivity \(\rho\) and magnetic permeability \(\mu\) as:\[\begin{split}\vec{E} &= \rho \vec{J} \\ \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 + i \omega \int_\Omega \vec{u} \cdot \vec{B} \, dv = \int_\Omega \vec{u} \cdot \vec{S}_m 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}_j \, 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 } + i \omega \mathbf{u_e^T M_e b} = \mathbf{u_e^T s_m} \\ &\mathbf{u_f^T M_f \, C \, h} - \mathbf{u_f^T M_f \, j} = \mathbf{u_f^T M_f \, 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_{f\rho}}\) is the inner-product matrix for resistivities projected to faces
\(\mathbf{M_{e\mu}}\) is the inner-product matrix for permeabilities projected to edges
By cancelling like-terms and combining the discrete expressions to solve for the magnetic field, we obtain:
\[\mathbf{A \, h} = \mathbf{q}\]where
\(\mathbf{A} = \mathbf{C^T M_{f\rho} C} + i\omega \mathbf{M_{e\mu}}\)
\(\mathbf{q} = \mathbf{C^T M_{f\rho} s_e} + \mathbf{s_m}\)