simpeg.electromagnetics.static.resistivity.Simulation3DHierarchicalNodal#
- class simpeg.electromagnetics.static.resistivity.Simulation3DHierarchicalNodal(mesh, survey=None, *, edge_area_conductance=None, edge_area_conductance_map=None, **kwargs)[source]#
Bases:
BaseHierarchicalElectricalSimulation,Simulation3DNodal3D hierarchical nodal DC resistivity simulation class.
Where \(\phi\) is the electric potential, \(\sigma\) is the electrical conductivity, and \(I \delta (r)\) represents a grounded source which injects static current I at location r, the DC resistivity problem is given by:
\[\nabla \cdot \sigma \nabla \phi = - I \delta (r)\]The
Simulation3DHierarchicalNodalclass uses the mimetic finite volume approach to solve for the discrete electric potentials at mesh nodes. This simulation adopts the hierarchical framework wherein:Thick structures are parameterized as conductivities at cell centers. This property and the corresponding mapping are set with sigma and sigmaMap.
Sheet-like structures can be parameterized as conductances on mesh faces. This property and the corresponding mapping are set with face_conductance and face_conductance_map.
Wire-like structures can be parameterized as area-integrated conductivities on mesh edges. This property and the corresponding mapping as set with edge_area_conductance and edge_area_conductance_map.
See the Notes section for a comprehensive description of the formulation.
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 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 conductivity inner-product matrix.
Get inverse of conductivity inner-product 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 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 volumes.
Get type of boundary condition to use for simulation.
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.
Electrical conductivity times cross-sectional area on edge elements (sm).
Derivative of Electrical conductivity times cross-sectional area on edge elements (Sm).
Mapping of the inversion model to Electrical conductivity times cross-sectional area on edge elements (Sm)..
Electrical conductivity times thickness on face elements (s).
Derivative of Electrical conductivity times thickness on face elements (S).
Mapping of the inversion model to Electrical conductivity times thickness on face elements (S)..
Mesh for the simulation.
The inversion model.
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.
Set solver-specific parameters.
Whether to store the sensitivity matrix.
Return which boundary faces to interpret as surfaces of Neumann boundary.
The DC survey object.
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])Compute derivative operation for conductivity inner-product matrix.
MeSigmaIDeriv(u[, v, adjoint])Compute derivative operation for inversion of conductivity inner-product matrix.
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 conductivity 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.
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 boundary conditions for the divergence operation.
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{j} = \sigma \vec{e}\]where \(\sigma\) is the electrical conductivity.
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{j} \, dv = \int_\Omega \vec{u} \cdot \sigma \vec{e} \, dv \\ & \int_\Omega \vec{u} \cdot \vec{e} \, dv = - \int_\Omega \vec{u} \cdot \nabla \phi \, dv \\ & -\int_\Omega \nabla \psi \cdot \vec{j} \, dv +\oint_{\partial \Omega} \psi (\vec{j} \cdot \hat{n}) \, da = -I \int_\Omega \psi \, \delta (r) dv\end{split}\]where the surface integral defines the boundary conditions.
The hierarchical approach assumes the existence of infinitesimally thin plate-like regions between adjacent mesh faces and infinitesimally thin wire-like regions between adjacent mesh edges. We re-express the inner-product with Ohm’s law as follows:
\[\begin{split}\int_\Omega \vec{u} \cdot \vec{j} \, dv =& \sum_{n}^{nc} \int \vec{u} \cdot \sigma_n \vec{e} \, dv \\ &+ \sum_{n}^{nf} \int \vec{u} \cdot \tau_n \vec{e} \, da \\ &+ \sum_{n}^{ne} \int \vec{u} \cdot \kappa_n \vec{e} \, d\ell\end{split}\]where \(\sigma_n\) is the conductivity in cell n, \(\tau_n\) is the face conductance on face n, and \(\kappa_n\) is the area-integrated conductivity on edge n.
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 electric potentials \(\boldsymbol{\phi}\) are defined on nodes. This implies \(\mathbf{j}\) and \(\mathbf{u}\) must be defined on mesh edges, and \(\boldsymbol{\psi}\) must be defined on nodes. We obtain the following set of discrete inner-products:
\[\begin{split}&\mathbf{u^T M_e \, j} = \mathbf{u^T M_{e\Sigma} \, e} \\ &\mathbf{u^T M_e \, e} = -\mathbf{u^T M_e G} \boldsymbol{\phi} \\ &-\boldsymbol{\psi} \mathbf{(G^T - B) M_e \, j} = \boldsymbol{\psi} \mathbf{q}\end{split}\]where:
\[\mathbf{M_{e\Sigma}} = \mathbf{M_{e\sigma} + M_{e\tau} + M_{e\kappa}}\]and
\(\mathbf{G}\) is the nodal gradient operator
\(\mathbf{q}\) is an integrated source term
\(\mathbf{B}\) is a matrix that applies boundary conditions
\(\mathbf{M_e}\) is the edge inner-product matrix
\(\mathbf{M_{e\sigma}}\) is the inner-product matrix for conductivities projected to edges
\(\mathbf{M_{e\tau}}\) is the inner-product matrix for conductances projected to edges
\(\mathbf{M_{e\kappa}}\) is the inner-product matrix for area integrated conductivities projected to edges
By combining the discrete equations to form a discrete solution in terms of the discrete electric potential on mesh nodes, we obtain:
\[\big [ \mathbf{(G^T - B) M_{e\Sigma} G} \big ] \boldsymbol{\phi} = \mathbf{q}\]