mirror of
https://github.com/wassname/simpeg.git
synced 2026-09-13 13:03:14 +08:00
docs for fields_e
This commit is contained in:
@@ -307,7 +307,7 @@ class Fields_e(Fields):
|
|||||||
:param numpy.ndarray du_dm_v: vector to take product with
|
:param numpy.ndarray du_dm_v: vector to take product with
|
||||||
:param bool adjoint: adjoint?
|
:param bool adjoint: adjoint?
|
||||||
:rtype: numpy.ndarray
|
:rtype: numpy.ndarray
|
||||||
:return: product of the derivative of the secondary magnetic flux density with respect to the field we solved for with a vector
|
:return: product of the derivative of the magnetic flux density with respect to the field we solved for with a vector
|
||||||
"""
|
"""
|
||||||
|
|
||||||
C = self._edgeCurl
|
C = self._edgeCurl
|
||||||
@@ -331,19 +331,44 @@ class Fields_e(Fields):
|
|||||||
return 1./(1j * omega(src.freq)) * S_mDeriv
|
return 1./(1j * omega(src.freq)) * S_mDeriv
|
||||||
|
|
||||||
|
|
||||||
def _jSecondary(self, eSolution, srcList):
|
|
||||||
aveE2CCV = self._aveE2CCV
|
|
||||||
n = int(aveE2CCV.shape[0] / self._nC) # number of components (instead of checking if cyl or not)
|
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
|
||||||
return VI * (aveE2CCV * (self._MeSigma * eSolution) )
|
|
||||||
|
|
||||||
def _jPrimary(self, eSolution, srcList):
|
def _jPrimary(self, eSolution, srcList):
|
||||||
|
"""
|
||||||
|
Primary current density
|
||||||
|
|
||||||
|
:param numpy.ndarray eSolution: field we solved for
|
||||||
|
:param list srcList: list of sources
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: primary current density
|
||||||
|
"""
|
||||||
aveE2CCV = self._aveE2CCV
|
aveE2CCV = self._aveE2CCV
|
||||||
n = int(aveE2CCV.shape[0] / self._nC) # number of components (instead of checking if cyl or not)
|
n = int(aveE2CCV.shape[0] / self._nC) # number of components (instead of checking if cyl or not)
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
return VI * (aveE2CCV * (self._MeSigma * self._ePrimary(eSolution, srcList)) )
|
return VI * (aveE2CCV * (self._MeSigma * self._ePrimary(eSolution, srcList)) )
|
||||||
|
|
||||||
|
def _jSecondary(self, eSolution, srcList):
|
||||||
|
"""
|
||||||
|
Secondary current density from eSolution
|
||||||
|
|
||||||
|
:param numpy.ndarray eSolution: field we solved for
|
||||||
|
:param list srcList: list of sources
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: secondary current density
|
||||||
|
"""
|
||||||
|
aveE2CCV = self._aveE2CCV
|
||||||
|
n = int(aveE2CCV.shape[0] / self._nC) # number of components (instead of checking if cyl or not)
|
||||||
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
|
return VI * (aveE2CCV * (self._MeSigma * eSolution) )
|
||||||
|
|
||||||
def _jDeriv_u(self, src, du_dm_v, adjoint = False):
|
def _jDeriv_u(self, src, du_dm_v, adjoint = False):
|
||||||
|
"""
|
||||||
|
Derivative of the current density with respect to the thing we solved for
|
||||||
|
|
||||||
|
:param SimPEG.EM.FDEM.Src src: source
|
||||||
|
:param numpy.ndarray du_dm_v: vector to take product with
|
||||||
|
:param bool adjoint: adjoint?
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: product of the derivative of the current density with respect to the field we solved for with a vector
|
||||||
|
"""
|
||||||
n = int(self._aveE2CCV.shape[0] / self._nC) # number of components (instead of checking if cyl or not)
|
n = int(self._aveE2CCV.shape[0] / self._nC) # number of components (instead of checking if cyl or not)
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
|
|
||||||
@@ -353,6 +378,15 @@ class Fields_e(Fields):
|
|||||||
|
|
||||||
|
|
||||||
def _jDeriv_m(self, src, v, adjoint = False):
|
def _jDeriv_m(self, src, v, adjoint = False):
|
||||||
|
"""
|
||||||
|
Derivative of the current density with respect to the inversion model.
|
||||||
|
|
||||||
|
:param SimPEG.EM.FDEM.Src src: source
|
||||||
|
:param numpy.ndarray v: vector to take product with
|
||||||
|
:param bool adjoint: adjoint?
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: product of the current density derivative with respect to the inversion model with a vector
|
||||||
|
"""
|
||||||
e = self._e(self._fields['eSolution'], [src])
|
e = self._e(self._fields['eSolution'], [src])
|
||||||
n = int(self._aveE2CCV.shape[0] / self._nC) #number of components
|
n = int(self._aveE2CCV.shape[0] / self._nC) #number of components
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
@@ -364,18 +398,43 @@ class Fields_e(Fields):
|
|||||||
|
|
||||||
|
|
||||||
def _hPrimary(self, eSolution, srcList):
|
def _hPrimary(self, eSolution, srcList):
|
||||||
|
"""
|
||||||
|
Primary magnetic field
|
||||||
|
|
||||||
|
:param numpy.ndarray eSolution: field we solved for
|
||||||
|
:param list srcList: list of sources
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: primary magnetic field
|
||||||
|
"""
|
||||||
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
|
|
||||||
return VI * (self._aveF2CCV * (self._MfMui * self._bPrimary(eSolution, srcList)))
|
return VI * (self._aveF2CCV * (self._MfMui * self._bPrimary(eSolution, srcList)))
|
||||||
|
|
||||||
def _hSecondary(self, eSolution, srcList):
|
def _hSecondary(self, eSolution, srcList):
|
||||||
|
"""
|
||||||
|
Secondary magnetic field from eSolution
|
||||||
|
|
||||||
|
:param numpy.ndarray eSolution: field we solved for
|
||||||
|
:param list srcList: list of sources
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: secondary magnetic field
|
||||||
|
"""
|
||||||
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
|
|
||||||
return VI * (self._aveF2CCV * (self._MfMui * self._bSecondary(eSolution, srcList)))
|
return VI * (self._aveF2CCV * (self._MfMui * self._bSecondary(eSolution, srcList)))
|
||||||
|
|
||||||
def _hDeriv_u(self, src, du_dm_v, adjoint = False):
|
def _hDeriv_u(self, src, du_dm_v, adjoint = False):
|
||||||
|
"""
|
||||||
|
Derivative of the magnetic field with respect to the thing we solved for
|
||||||
|
|
||||||
|
:param SimPEG.EM.FDEM.Src src: source
|
||||||
|
:param numpy.ndarray du_dm_v: vector to take product with
|
||||||
|
:param bool adjoint: adjoint?
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: product of the derivative of the magnetic field with respect to the field we solved for with a vector
|
||||||
|
"""
|
||||||
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
if adjoint:
|
if adjoint:
|
||||||
@@ -384,6 +443,15 @@ class Fields_e(Fields):
|
|||||||
return VI * (self._aveF2CCV * (self._MfMui * self._bDeriv_u(src, du_dm_v, adjoint = adjoint)))
|
return VI * (self._aveF2CCV * (self._MfMui * self._bDeriv_u(src, du_dm_v, adjoint = adjoint)))
|
||||||
|
|
||||||
def _hDeriv_m(self, src, v, adjoint = False):
|
def _hDeriv_m(self, src, v, adjoint = False):
|
||||||
|
"""
|
||||||
|
Derivative of the magnetic field with respect to the inversion model.
|
||||||
|
|
||||||
|
:param SimPEG.EM.FDEM.Src src: source
|
||||||
|
:param numpy.ndarray v: vector to take product with
|
||||||
|
:param bool adjoint: adjoint?
|
||||||
|
:rtype: numpy.ndarray
|
||||||
|
:return: product of the magnetic field derivative with respect to the inversion model with a vector
|
||||||
|
"""
|
||||||
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
n = int(self._aveF2CCV.shape[0] / self._nC) # Number of Components
|
||||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||||
if adjoint:
|
if adjoint:
|
||||||
|
|||||||
Reference in New Issue
Block a user