mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-06 03:25:33 +08:00
e,b,h,j from j formulation
This commit is contained in:
+150
-82
@@ -774,8 +774,12 @@ class Fields_j(Fields):
|
||||
'h' : ['jSolution','E','_h'],
|
||||
'hPrimary' : ['jSolution','E','_hPrimary'],
|
||||
'hSecondary' : ['jSolution','E','_hSecondary'],
|
||||
'e' : ['jSolution','C','_e'],
|
||||
'b' : ['jSolution','C','_b'],
|
||||
'e' : ['jSolution','CCV','_e'],
|
||||
'ePrimary' : ['jSolution','CCV','_ePrimary'],
|
||||
'eSecondary' : ['jSolution','CCV','_eSecondary'],
|
||||
'b' : ['jSolution','CCV','_b'],
|
||||
'bPrimary' : ['jSolution','CCV','_bPrimary'],
|
||||
'bSecondary' : ['jSolution','CCV','_bSecondary'],
|
||||
}
|
||||
|
||||
def __init__(self,mesh,survey,**kwargs):
|
||||
@@ -784,10 +788,10 @@ class Fields_j(Fields):
|
||||
def startup(self):
|
||||
self.prob = self.survey.prob
|
||||
self._edgeCurl = self.survey.prob.mesh.edgeCurl
|
||||
self._MeMu = self.survey.prob.MeMu
|
||||
self._MeMuI = self.survey.prob.MeMuI
|
||||
self._MfRho = self.survey.prob.MfRho
|
||||
self._MfRhoDeriv = self.survey.prob.MfRhoDeriv
|
||||
self._Me = self.survey.prob.Me
|
||||
self._rho = self.survey.prob.curModel.rho
|
||||
self._mu = self.survey.prob.curModel.mui
|
||||
self._aveF2CCV = self.survey.prob.mesh.aveF2CCV
|
||||
@@ -907,60 +911,9 @@ class Fields_j(Fields):
|
||||
return h
|
||||
|
||||
|
||||
def _hSecondaryDeriv_u(self, src, du_dm_v, adjoint=False):
|
||||
"""
|
||||
Derivative of the secondary 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 secondary magnetic field with respect to the field we solved for with a vector
|
||||
"""
|
||||
|
||||
if not adjoint:
|
||||
return -1./(1j*omega(src.freq)) * self._MeMuI * (self._edgeCurl.T * (self._MfRho * du_dm_v) )
|
||||
elif adjoint:
|
||||
return -1./(1j*omega(src.freq)) * self._MfRho.T * (self._edgeCurl * ( self._MeMuI.T * du_dm_v))
|
||||
|
||||
|
||||
def _hSecondaryDeriv_m(self, src, v, adjoint=False):
|
||||
"""
|
||||
Derivative of the secondary 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 derivative of the secondary magnetic field with respect to the model with a vector
|
||||
"""
|
||||
|
||||
jSolution = self[[src],'jSolution']
|
||||
MeMuI = self._MeMuI
|
||||
C = self._edgeCurl
|
||||
MfRho = self._MfRho
|
||||
MfRhoDeriv = self._MfRhoDeriv
|
||||
Me = self._Me
|
||||
|
||||
if not adjoint:
|
||||
hDeriv_m = -1./(1j*omega(src.freq)) * MeMuI * (C.T * (MfRhoDeriv(jSolution)*v ) )
|
||||
elif adjoint:
|
||||
hDeriv_m = -1./(1j*omega(src.freq)) * MfRhoDeriv(jSolution).T * ( C * (MeMuI.T * v ) )
|
||||
|
||||
S_mDeriv,_ = src.evalDeriv(self.prob, adjoint = adjoint)
|
||||
|
||||
if not adjoint:
|
||||
S_mDeriv = S_mDeriv(v)
|
||||
hDeriv_m = hDeriv_m + 1./(1j*omega(src.freq)) * MeMuI * (Me * S_mDeriv)
|
||||
elif adjoint:
|
||||
S_mDeriv = S_mDeriv(Me.T * (MeMuI.T * v))
|
||||
hDeriv_m = hDeriv_m + 1./(1j*omega(src.freq)) * S_mDeriv
|
||||
return hDeriv_m
|
||||
|
||||
|
||||
def _hDeriv_u(self, src, du_dm_v, adjoint=False):
|
||||
"""
|
||||
Partial derivative of the total magnetic field with respect to the thing we solved for
|
||||
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
|
||||
@@ -969,50 +922,165 @@ class Fields_j(Fields):
|
||||
:return: product of the derivative of the magnetic field with respect to the field we solved for with a vector
|
||||
"""
|
||||
|
||||
return self._hSecondaryDeriv_u(src, du_dm_v, adjoint)
|
||||
if not adjoint:
|
||||
return -1./(1j*omega(src.freq)) * self._MeMuI * (self._edgeCurl.T * (self._MfRho * du_dm_v) )
|
||||
return -1./(1j*omega(src.freq)) * self._MfRho.T * (self._edgeCurl * ( self._MeMuI.T * du_dm_v))
|
||||
|
||||
|
||||
def _hDeriv_m(self, src, v, adjoint=False):
|
||||
"""
|
||||
Partial derivative of the total magnetic field density with respect to the inversion model.
|
||||
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
|
||||
:return: product of the derivative of the magnetic field with respect to the model with a vector
|
||||
"""
|
||||
|
||||
# assuming the primary doesn't depend on the model
|
||||
return self._hSecondaryDeriv_m(src, u, v, adjoint)
|
||||
jSolution = Utils.mkvc(self[[src],'jSolution'])
|
||||
MeMuI = self._MeMuI
|
||||
C = self._edgeCurl
|
||||
MfRho = self._MfRho
|
||||
MfRhoDeriv = self._MfRhoDeriv
|
||||
S_mDeriv,_ = src.evalDeriv(self.prob, adjoint = adjoint)
|
||||
|
||||
def _e(self, jSolution, srcList):
|
||||
rho = self._rho
|
||||
aveF2CCV = self._aveF2CCV
|
||||
n = int(aveF2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
|
||||
if not adjoint:
|
||||
hDeriv_m = -1./(1j*omega(src.freq)) * MeMuI * (C.T * (MfRhoDeriv(jSolution)*v ) )
|
||||
S_mDeriv = S_mDeriv(v)
|
||||
hDeriv_m = hDeriv_m + 1./(1j*omega(src.freq)) * MeMuI * ( S_mDeriv)
|
||||
|
||||
elif adjoint:
|
||||
hDeriv_m = -1./(1j*omega(src.freq)) * MfRhoDeriv(jSolution).T * ( C * (MeMuI.T * v ) )
|
||||
|
||||
S_mDeriv = S_mDeriv(MeMuI.T * v)
|
||||
hDeriv_m = hDeriv_m + 1./(1j*omega(src.freq)) * S_mDeriv
|
||||
|
||||
Rho = self.prob.MfRho
|
||||
return hDeriv_m
|
||||
|
||||
|
||||
def _ePrimary(self, jSolution, srcList):
|
||||
"""
|
||||
Primary electric field
|
||||
|
||||
:param numpy.ndarray hSolution: field we solved for
|
||||
:param list srcList: list of sources
|
||||
:rtype: numpy.ndarray
|
||||
:return: primary electric field as defined by the sources
|
||||
"""
|
||||
n = int(self._aveF2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
return VI * (self._aveF2CCV * (self._MfRho * self._jPrimary(jSolution, srcList)))
|
||||
|
||||
def _eSecondary(self, jSolution, srcList):
|
||||
"""
|
||||
Secondary electric field from jSolution
|
||||
|
||||
:param numpy.ndarray hSolution: field we solved for
|
||||
:param list srcList: list of sources
|
||||
:rtype: numpy.ndarray
|
||||
:return: secondary electric field
|
||||
"""
|
||||
n = int(self._aveF2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
return VI * (self._aveF2CCV * (self._MfRho * self._jSecondary(jSolution, srcList)))
|
||||
|
||||
def _eDeriv_u(self, src, du_dm_v, adjoint=False):
|
||||
"""
|
||||
Derivative of the electric 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 electric field with respect to the field we solved for with a vector
|
||||
"""
|
||||
n = int(self._aveF2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
if adjoint:
|
||||
return self._MfRho.T * ( self._aveF2CCV.T * ( VI.T * du_dm_v ) )
|
||||
return VI * (self._aveF2CCV * (self._MfRho * du_dm_v))
|
||||
|
||||
def _eDeriv_m(self, src, v, adjoint=False):
|
||||
"""
|
||||
Derivative of the electric 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 derivative of the electric field with respect to the model with a vector
|
||||
"""
|
||||
jSolution = Utils.mkvc(self[src,'jSolution'])
|
||||
n = int(self._aveF2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
if adjoint:
|
||||
return self._MfRhoDeriv(jSolution).T * ( self._aveF2CCV.T * ( VI.T * v ) )
|
||||
return VI * (self._aveF2CCV * (self._MfRhoDeriv(jSolution) * v))
|
||||
|
||||
def _bPrimary(self, jSolution, srcList):
|
||||
"""
|
||||
Primary magnetic flux density
|
||||
|
||||
:param numpy.ndarray hSolution: field we solved for
|
||||
:param list srcList: list of sources
|
||||
:rtype: numpy.ndarray
|
||||
:return: primary magnetic flux density
|
||||
"""
|
||||
hPrimary = self._hPrimary(jSolution, srcList)
|
||||
n = int(self._aveE2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
|
||||
return VI * (self._aveE2CCV * (self._MeMu * hPrimary))
|
||||
|
||||
j = self._j(jSolution, srcList)
|
||||
def _bSecondary(self, jSolution, srcList):
|
||||
"""
|
||||
Secondary magnetic flux density from jSolution
|
||||
|
||||
return VI * (aveF2CCV * (Rho * j))
|
||||
|
||||
def _eDeriv_u(self, src, u, v, adjoint=False):
|
||||
raise NotImplementedError
|
||||
|
||||
def _eDeriv_m(self, src, u, v, adjoint=False):
|
||||
raise NotImplementedError
|
||||
|
||||
def _b(self, jSolution, srcList):
|
||||
h = self._h(jSolution, srcList)
|
||||
Mu = self.prob.MeMu
|
||||
aveE2CCV = self._aveE2CCV
|
||||
n = int(aveE2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
|
||||
# Mu = sdiag(sp.kron(np.ones(n), mu))
|
||||
:param numpy.ndarray hSolution: field we solved for
|
||||
:param list srcList: list of sources
|
||||
:rtype: numpy.ndarray
|
||||
:return: secondary magnetic flux density
|
||||
"""
|
||||
n = int(self._aveE2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
|
||||
return VI * (aveE2CCV * (Mu * h))
|
||||
return VI * (self._aveE2CCV * (self._edgeCurl.T * (self._MfRho * jSolution)))
|
||||
|
||||
def _bDeriv_u(self, src, du_dm_v, adjoint=False):
|
||||
"""
|
||||
Derivative of the magnetic flux 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 magnetic flux density with respect to the field we solved for with a vector
|
||||
"""
|
||||
n = int(self._aveF2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
|
||||
if adjoint:
|
||||
return self._MfRho.T * ( self._edgeCurl * ( self._aveE2CCV.T * (VI.T * du_dm_v) ) )
|
||||
return VI * (self._aveE2CCV * (self._edgeCurl.T * (self._MfRho * du_dm_v)))
|
||||
|
||||
def _bDeriv_m(self, src, v, adjoint=False):
|
||||
"""
|
||||
Derivative of the magnetic flux 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 derivative of the magnetic flux density with respect to the model with a vector
|
||||
"""
|
||||
jSolution = self[src,'jSolution']
|
||||
n = int(self._aveE2CCV.shape[0] / self._nC) # number of components
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
|
||||
if adjoint:
|
||||
return self._MfRhoDeriv(jSolution).T * ( self._edgeCurl * (self._aveE2CCV.T * ( VI.T * v)) )
|
||||
return VI * (self._aveE2CCV * (self._edgeCurl.T * (self._MfRhoDeriv(jSolution) * v )))
|
||||
|
||||
|
||||
class Fields_h(Fields):
|
||||
@@ -1208,7 +1276,7 @@ class Fields_h(Fields):
|
||||
def _e(self, hSolution, srcList):
|
||||
rho = self._rho
|
||||
aveF2CCV = self._aveF2CCV
|
||||
n = int(aveF2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
|
||||
n = int(self._aveF2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
|
||||
|
||||
Rho = self.prob.MfRho
|
||||
VI = sdiag(np.kron(np.ones(n), 1./self.prob.mesh.vol))
|
||||
|
||||
@@ -5,12 +5,9 @@ import sys
|
||||
from scipy.constants import mu_0
|
||||
from SimPEG.EM.Utils.testingUtils import getFDEMProblem, crossCheckTest
|
||||
|
||||
testEB = False
|
||||
testHJ = False
|
||||
testEJ = False
|
||||
testBH = False
|
||||
testEJ = True
|
||||
testBH = True
|
||||
|
||||
TOLEBHJ = 1e-5
|
||||
TOLEJHB = 1 # averaging and more sensitive to boundary condition violations (ie. the impact of violating the boundary conditions in each case is different.)
|
||||
#TODO: choose better testing parameters to lower this
|
||||
|
||||
@@ -71,5 +68,58 @@ class FDEM_CrossCheck(unittest.TestCase):
|
||||
def test_EJ_CrossCheck_hzi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hzi', TOL=TOLEJHB))
|
||||
|
||||
if testBH:
|
||||
def test_HB_CrossCheck_jxr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'jxr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_jyr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'jyr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_jzr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'jzr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_jxi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'jxi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_jyi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'jyi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_jzi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'jzi', TOL=TOLEJHB))
|
||||
|
||||
def test_HB_CrossCheck_exr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'exr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_eyr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'eyr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_ezr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'ezr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_exi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'exi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_eyi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'eyi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_ezi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'ezi', TOL=TOLEJHB))
|
||||
|
||||
def test_HB_CrossCheck_bxr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'bxr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_byr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'byr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_bzr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'bzr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_bxi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'bxi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_byi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'byi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_bzi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'bzi', TOL=TOLEJHB))
|
||||
|
||||
def test_HB_CrossCheck_hxr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'hxr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_hyr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'hyr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_hzr_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'hzr', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_hxi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'hxi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_hyi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'hyi', TOL=TOLEJHB))
|
||||
def test_HB_CrossCheck_hzi_Jform(self):
|
||||
self.assertTrue(crossCheckTest(SrcList, 'h', 'b', 'hzi', TOL=TOLEJHB))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -71,33 +71,59 @@ class FDEM_AdjointTests(unittest.TestCase):
|
||||
def test_Jtvec_adjointTest_hyi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'hyi'))
|
||||
def test_Jtvec_adjointTest_hzi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'hzi'))
|
||||
self.assertTrue(adjointTest('j', 'hzi'))
|
||||
|
||||
def test_Jtvec_adjointTest_hxr_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'hxr'))
|
||||
def test_Jtvec_adjointTest_hyr_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'hyr'))
|
||||
def test_Jtvec_adjointTest_hzr_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'hzr'))
|
||||
def test_Jtvec_adjointTest_hxi_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'hxi'))
|
||||
def test_Jtvec_adjointTest_hyi_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'hyi'))
|
||||
def test_Jtvec_adjointTest_hzi_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'hzi'))
|
||||
def test_Jtvec_adjointTest_exr_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'exr'))
|
||||
def test_Jtvec_adjointTest_eyr_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'eyr'))
|
||||
def test_Jtvec_adjointTest_ezr_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'ezr'))
|
||||
def test_Jtvec_adjointTest_exi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'exi'))
|
||||
def test_Jtvec_adjointTest_eyi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'eyi'))
|
||||
def test_Jtvec_adjointTest_ezi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'ezi'))
|
||||
|
||||
def test_Jtvec_adjointTest_hxr_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'jxr'))
|
||||
def test_Jtvec_adjointTest_hyr_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'jyr'))
|
||||
def test_Jtvec_adjointTest_hzr_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'jzr'))
|
||||
def test_Jtvec_adjointTest_hxi_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'jxi'))
|
||||
def test_Jtvec_adjointTest_hyi_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'jyi'))
|
||||
def test_Jtvec_adjointTest_hzi_Hform(self):
|
||||
self.assertTrue(adjointTest('h', 'jzi'))
|
||||
def test_Jtvec_adjointTest_bxr_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'bxr'))
|
||||
def test_Jtvec_adjointTest_byr_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'byr'))
|
||||
def test_Jtvec_adjointTest_bzr_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'bzr'))
|
||||
def test_Jtvec_adjointTest_bxi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'bxi'))
|
||||
def test_Jtvec_adjointTest_byi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'byi'))
|
||||
def test_Jtvec_adjointTest_bzi_Jform(self):
|
||||
self.assertTrue(adjointTest('j', 'bzi'))
|
||||
|
||||
# def test_Jtvec_adjointTest_hxr_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'hxr'))
|
||||
# def test_Jtvec_adjointTest_hyr_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'hyr'))
|
||||
# def test_Jtvec_adjointTest_hzr_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'hzr'))
|
||||
# def test_Jtvec_adjointTest_hxi_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'hxi'))
|
||||
# def test_Jtvec_adjointTest_hyi_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'hyi'))
|
||||
# def test_Jtvec_adjointTest_hzi_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'hzi'))
|
||||
|
||||
# def test_Jtvec_adjointTest_hxr_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'jxr'))
|
||||
# def test_Jtvec_adjointTest_hyr_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'jyr'))
|
||||
# def test_Jtvec_adjointTest_hzr_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'jzr'))
|
||||
# def test_Jtvec_adjointTest_hxi_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'jxi'))
|
||||
# def test_Jtvec_adjointTest_hyi_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'jyi'))
|
||||
# def test_Jtvec_adjointTest_hzi_Hform(self):
|
||||
# self.assertTrue(adjointTest('h', 'jzi'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -5,10 +5,11 @@ import sys
|
||||
from scipy.constants import mu_0
|
||||
from SimPEG.EM.Utils.testingUtils import getFDEMProblem
|
||||
|
||||
testDerivs = True
|
||||
|
||||
testE = True
|
||||
testB = True
|
||||
testHJ = False
|
||||
testH = True
|
||||
testJ = True
|
||||
|
||||
verbose = False
|
||||
|
||||
@@ -98,31 +99,31 @@ class FDEM_DerivTests(unittest.TestCase):
|
||||
self.assertTrue(derivTest('e', 'hzi'))
|
||||
|
||||
if testB:
|
||||
# def test_Jvec_exr_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'exr'))
|
||||
# def test_Jvec_eyr_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'eyr'))
|
||||
# def test_Jvec_ezr_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'ezr'))
|
||||
# def test_Jvec_exi_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'exi'))
|
||||
# def test_Jvec_eyi_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'eyi'))
|
||||
# def test_Jvec_ezi_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'ezi'))
|
||||
def test_Jvec_exr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'exr'))
|
||||
def test_Jvec_eyr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'eyr'))
|
||||
def test_Jvec_ezr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'ezr'))
|
||||
def test_Jvec_exi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'exi'))
|
||||
def test_Jvec_eyi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'eyi'))
|
||||
def test_Jvec_ezi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'ezi'))
|
||||
|
||||
# def test_Jvec_bxr_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'bxr'))
|
||||
# def test_Jvec_byr_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'byr'))
|
||||
# def test_Jvec_bzr_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'bzr'))
|
||||
# def test_Jvec_bxi_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'bxi'))
|
||||
# def test_Jvec_byi_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'byi'))
|
||||
# def test_Jvec_bzi_Bform(self):
|
||||
# self.assertTrue(derivTest('b', 'bzi'))
|
||||
def test_Jvec_bxr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'bxr'))
|
||||
def test_Jvec_byr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'byr'))
|
||||
def test_Jvec_bzr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'bzr'))
|
||||
def test_Jvec_bxi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'bxi'))
|
||||
def test_Jvec_byi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'byi'))
|
||||
def test_Jvec_bzi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'bzi'))
|
||||
|
||||
def test_Jvec_jxr_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'jxr'))
|
||||
@@ -150,7 +151,7 @@ class FDEM_DerivTests(unittest.TestCase):
|
||||
def test_Jvec_hzi_Bform(self):
|
||||
self.assertTrue(derivTest('b', 'hzi'))
|
||||
|
||||
if testHJ:
|
||||
if testJ:
|
||||
def test_Jvec_jxr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'jxr'))
|
||||
def test_Jvec_jyr_Jform(self):
|
||||
@@ -177,6 +178,34 @@ class FDEM_DerivTests(unittest.TestCase):
|
||||
def test_Jvec_hzi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'hzi'))
|
||||
|
||||
def test_Jvec_exr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'exr'))
|
||||
def test_Jvec_eyr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'eyr'))
|
||||
def test_Jvec_ezr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'ezr'))
|
||||
def test_Jvec_exi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'exi'))
|
||||
def test_Jvec_eyi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'eyi'))
|
||||
def test_Jvec_ezi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'ezi'))
|
||||
|
||||
def test_Jvec_bxr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'bxr'))
|
||||
def test_Jvec_byr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'byr'))
|
||||
def test_Jvec_bzr_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'bzr'))
|
||||
def test_Jvec_bxi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'bxi'))
|
||||
def test_Jvec_byi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'byi'))
|
||||
def test_Jvec_bzi_Jform(self):
|
||||
self.assertTrue(derivTest('j', 'bzi'))
|
||||
|
||||
|
||||
if testH:
|
||||
def test_Jvec_hxr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'hxr'))
|
||||
def test_Jvec_hyr_Hform(self):
|
||||
@@ -203,6 +232,32 @@ class FDEM_DerivTests(unittest.TestCase):
|
||||
def test_Jvec_hzi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'jzi'))
|
||||
|
||||
def test_Jvec_exr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'exr'))
|
||||
def test_Jvec_eyr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'eyr'))
|
||||
def test_Jvec_ezr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'ezr'))
|
||||
def test_Jvec_exi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'exi'))
|
||||
def test_Jvec_eyi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'eyi'))
|
||||
def test_Jvec_ezi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'ezi'))
|
||||
|
||||
def test_Jvec_bxr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'bxr'))
|
||||
def test_Jvec_byr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'byr'))
|
||||
def test_Jvec_bzr_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'bzr'))
|
||||
def test_Jvec_bxi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'bxi'))
|
||||
def test_Jvec_byi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'byi'))
|
||||
def test_Jvec_bzi_Hform(self):
|
||||
self.assertTrue(derivTest('h', 'bzi'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user