breaking up tests, also pass in u to df_dm

This commit is contained in:
Lindsey Heagy
2015-12-10 08:51:06 -08:00
parent 9e69455d6e
commit 22a6310a59
9 changed files with 446 additions and 296 deletions
+2 -2
View File
@@ -78,10 +78,10 @@ class BaseFDEMProblem(BaseEMProblem):
for rx in src.rxList:
df_duFun = getattr(f, '_%sDeriv_u'%rx.projField, None)
df_dudu_dm = df_duFun(src, du_dm, adjoint=False)
df_dudu_dm = df_duFun(src, du_dm, u_src, adjoint=False)
df_dmFun = getattr(f, '_%sDeriv_m'%rx.projField, None)
df_dm = df_dmFun(src, v, adjoint=False)
df_dm = df_dmFun(src, v, u_src, adjoint=False)
Df_Dm = np.array(df_dudu_dm + df_dm,dtype=complex)
+36 -38
View File
@@ -32,10 +32,9 @@ class Fields_e(Fields):
self._edgeCurl = self.survey.prob.mesh.edgeCurl
self._aveE2CCV = self.survey.prob.mesh.aveE2CCV
self._aveF2CCV = self.survey.prob.mesh.aveF2CCV
self._sigma = self.survey.prob.curModel.sigma
self._sigmaDeriv = self.survey.prob.curModel.sigmaDeriv
self._mui = self.survey.prob.curModel.mui
self._nC = self.survey.prob.mesh.nC
self._MeSigma = self.survey.prob.MeSigma
self._MeSigmaDeriv = self.survey.prob.MeSigmaDeriv
def _GLoc(self,fieldType):
if fieldType == 'e':
@@ -60,10 +59,10 @@ class Fields_e(Fields):
def _e(self, eSolution, srcList):
return self._ePrimary(eSolution,srcList) + self._eSecondary(eSolution,srcList)
def _eDeriv_u(self, src, v, adjoint = False):
def _eDeriv_u(self, src, v, eSolution, adjoint = False):
return Identity()*v
def _eDeriv_m(self, src, v, adjoint = False):
def _eDeriv_m(self, src, v, eSolution, adjoint = False):
# assuming primary does not depend on the model
return Zero()
@@ -83,13 +82,13 @@ class Fields_e(Fields):
b[:,i] = b[:,i]+ 1./(1j*omega(src.freq)) * S_m
return b
def _bSecondaryDeriv_u(self, src, v, adjoint = False):
def _bSecondaryDeriv_u(self, src, v, eSolution, adjoint = False):
C = self._edgeCurl
if adjoint:
return - 1./(1j*omega(src.freq)) * (C.T * v)
return - 1./(1j*omega(src.freq)) * (C * v)
def _bSecondaryDeriv_m(self, src, v, adjoint = False):
def _bSecondaryDeriv_m(self, src, v, eSolution, adjoint = False):
S_mDeriv, _ = src.evalDeriv(self.prob, adjoint)
S_mDeriv = S_mDeriv(v)
return 1./(1j * omega(src.freq)) * S_mDeriv
@@ -97,27 +96,50 @@ class Fields_e(Fields):
def _b(self, eSolution, srcList):
return self._bPrimary(eSolution, srcList) + self._bSecondary(eSolution, srcList)
def _bDeriv_u(self, src, v, adjoint=False):
def _bDeriv_u(self, src, v, eSolution, adjoint = False):
# Primary does not depend on u
return self._bSecondaryDeriv_u(src, v, adjoint)
def _bDeriv_m(self, src, v, adjoint=False):
def _bDeriv_m(self, src, v, eSolution, adjoint = False):
# Assuming the primary does not depend on the model
return self._bSecondaryDeriv_m(src, v, adjoint)
def _j(self, eSolution, srcList):
sigma = self._sigma
aveE2CCV = self._aveE2CCV
n = int(aveE2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
# Sigma = sdiag(np.kron(np.ones(n), sigma))
Sigma = self.prob.MeSigma
Sigma = self._MeSigma
VI = sdiag(1./np.kron(np.ones(n), self.prob.mesh.vol))
e = self._e(eSolution, srcList)
return VI * (aveE2CCV * (Sigma *e) )
def _h(self, eolution, srcList):
def _jDeriv_u(self, src, eSolution, v, adjoint = False):
aveE2CCV = self._aveE2CCV
n = int(aveE2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
Sigma = self._MeSigma
VI = sdiag(1./np.kron(np.ones(n), self.prob.mesh.vol))
if not adjoint:
return VI * (aveE2CCV * (Sigma * (self._eDeriv_u(src, v, adjoint) ) ) )
return self._eDeriv_u(src, Sigma.T * (aveE2CCV.T * (VI.T * v) ), adjoint)
def _jDeriv_m(self, src, v, eSolution, adjoint = False):
aveE2CCV = self._aveE2CCV
Sigma = self._MeSigma
SigmaDeriv = self._MeSigmaDeriv
e = self._e(eSolution, [src])
n = int(aveE2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
VI = sdiag(1./np.kron(np.ones(n), self.prob.mesh.vol))
if not adjoint:
return VI * (aveE2CCV * ( SigmaDeriv(e) * v + self._eDeriv_m(src, v, adjoint) ))
return SigmaDeriv(aveE2CCV.T * (VI.T * e), adjoint) * v + self._eDeriv_m(src, aveE2CCV.T * (VI.T * v), adjoint)
def _h(self, eSolution, srcList):
b = self._b(eSolution, srcList)
Mui = self.survey.prob.MfMui
aveF2CCV = self._aveF2CCV
@@ -129,30 +151,6 @@ class Fields_e(Fields):
return VI * (aveF2CCV * (Mui * b))
def _jDeriv_u(self, src, v, adjoint=False):
raise NotImplementedError
sigma = self._sigma
aveE2CCV = self._aveE2CCV
n = int(aveE2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
Sigma = sdiag(sp.kron(np.ones(n), sigma))
if not adjoint:
return Sigma * (aveE2CCV * (v + self._eDeriv_u(src, v, adjoint)))
return aveE2CCV.T * Sigma.T * v
def _jDeriv_m(self, src, v, adjoint=False):
raise NotImplementedError
sigma = self._sigma
aveE2CCV = self._aveE2CCV
n = int(aveE2CCV.shape[0] / self._nC) #TODO: This is a bit sloppy
Sigma = sdiag(sp.kron(np.ones(n), sigma))
if not adjoint:
dsigma_dm = self._sigmaDeriv(v)
dSigma_dm = sdiag(sp.kron(np.ones(n), dsigma_dm))
class Fields_b(Fields):
knownFields = {'bSolution':'F'}
+47 -1
View File
@@ -4,6 +4,13 @@ from SimPEG import EM
import sys
from scipy.constants import mu_0
FLR = 1e-20 # "zero", so if residual below this --> pass regardless of order
CONDUCTIVITY = 1e1
MU = mu_0
freq = 5e-1
addrandoms = False
def getFDEMProblem(fdemType, comp, SrcList, freq, verbose=False):
cs = 10.
ncx, ncy, ncz = 0, 0, 0
@@ -72,4 +79,43 @@ def getFDEMProblem(fdemType, comp, SrcList, freq, verbose=False):
except ImportError, e:
prb.Solver = SolverLU
return prb
return prb
def crossCheckTest(SrcList, fdemType1, fdemType2, comp, TOL=1e-5, verbose=False):
l2norm = lambda r: np.sqrt(r.dot(r))
prb1 = getFDEMProblem(fdemType1, comp, SrcList, freq, verbose)
mesh = prb1.mesh
print 'Cross Checking Forward: %s, %s formulations - %s' % (fdemType1, fdemType2, comp)
m = np.log(np.ones(mesh.nC)*CONDUCTIVITY)
mu = np.log(np.ones(mesh.nC)*MU)
if addrandoms is True:
m = m + np.random.randn(mesh.nC)*np.log(CONDUCTIVITY)*1e-1
mu = mu + np.random.randn(mesh.nC)*MU*1e-1
# prb1.PropMap.PropModel.mu = mu
# prb1.PropMap.PropModel.mui = 1./mu
survey1 = prb1.survey
d1 = survey1.dpred(m)
if verbose:
print ' Problem 1 solved'
prb2 = getFDEMProblem(fdemType2, comp, SrcList, freq, verbose)
# prb2.mu = mu
survey2 = prb2.survey
d2 = survey2.dpred(m)
if verbose:
print ' Problem 2 solved'
r = d2-d1
l2r = l2norm(r)
tol = np.max([TOL*(10**int(np.log10(l2norm(d1)))),FLR])
print l2norm(d1), l2norm(d2), l2r , tol, l2r < tol
return l2r < tol
+25 -177
View File
@@ -3,7 +3,7 @@ from SimPEG import *
from SimPEG import EM
import sys
from scipy.constants import mu_0
from SimPEG.EM.Utils.testingUtils import getFDEMProblem
from SimPEG.EM.Utils.testingUtils import getFDEMProblem, crossCheckTest
testEB = True
testHJ = True
@@ -15,215 +15,63 @@ 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
FLR = 1e-20 # "zero", so if residual below this --> pass regardless of order
CONDUCTIVITY = 1e1
MU = mu_0
freq = 5e-1
addrandoms = False
SrcList = ['RawVec', 'MagDipole_Bfield', 'MagDipole', 'CircularLoop']
def crossCheckTest(fdemType1, fdemType2, comp, TOL=TOLEBHJ):
l2norm = lambda r: np.sqrt(r.dot(r))
prb1 = getFDEMProblem(fdemType1, comp, SrcList, freq, verbose)
mesh = prb1.mesh
print 'Cross Checking Forward: %s, %s formulations - %s' % (fdemType1, fdemType2, comp)
m = np.log(np.ones(mesh.nC)*CONDUCTIVITY)
mu = np.log(np.ones(mesh.nC)*MU)
if addrandoms is True:
m = m + np.random.randn(mesh.nC)*np.log(CONDUCTIVITY)*1e-1
mu = mu + np.random.randn(mesh.nC)*MU*1e-1
# prb1.PropMap.PropModel.mu = mu
# prb1.PropMap.PropModel.mui = 1./mu
survey1 = prb1.survey
d1 = survey1.dpred(m)
if verbose:
print ' Problem 1 solved'
prb2 = getFDEMProblem(fdemType2, comp, SrcList, freq, verbose)
# prb2.mu = mu
survey2 = prb2.survey
d2 = survey2.dpred(m)
if verbose:
print ' Problem 2 solved'
r = d2-d1
l2r = l2norm(r)
tol = np.max([TOL*(10**int(np.log10(l2norm(d1)))),FLR])
print l2norm(d1), l2norm(d2), l2r , tol, l2r < tol
return l2r < tol
class FDEM_CrossCheck(unittest.TestCase):
if testEB:
def test_EB_CrossCheck_exr_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'exr'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'exr', verbose=verbose))
def test_EB_CrossCheck_eyr_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'eyr'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'eyr', verbose=verbose))
def test_EB_CrossCheck_ezr_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'ezr'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'ezr', verbose=verbose))
def test_EB_CrossCheck_exi_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'exi'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'exi', verbose=verbose))
def test_EB_CrossCheck_eyi_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'eyi'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'eyi', verbose=verbose))
def test_EB_CrossCheck_ezi_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'ezi'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'ezi', verbose=verbose))
def test_EB_CrossCheck_bxr_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'bxr'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'bxr', verbose=verbose))
def test_EB_CrossCheck_byr_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'byr'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'byr', verbose=verbose))
def test_EB_CrossCheck_bzr_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'bzr'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'bzr', verbose=verbose))
def test_EB_CrossCheck_bxi_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'bxi'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'bxi', verbose=verbose))
def test_EB_CrossCheck_byi_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'byi'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'byi', verbose=verbose))
def test_EB_CrossCheck_bzi_Eform(self):
self.assertTrue(crossCheckTest('e', 'b', 'bzi'))
self.assertTrue(crossCheckTest(SrcList, 'e', 'b', 'bzi', verbose=verbose))
if testHJ:
def test_HJ_CrossCheck_jxr_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'jxr'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'jxr', verbose=verbose))
def test_HJ_CrossCheck_jyr_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'jyr'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'jyr', verbose=verbose))
def test_HJ_CrossCheck_jzr_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'jzr'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'jzr', verbose=verbose))
def test_HJ_CrossCheck_jxi_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'jxi'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'jxi', verbose=verbose))
def test_HJ_CrossCheck_jyi_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'jyi'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'jyi', verbose=verbose))
def test_HJ_CrossCheck_jzi_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'jzi'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'jzi', verbose=verbose))
def test_HJ_CrossCheck_hxr_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'hxr'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'hxr', verbose=verbose))
def test_HJ_CrossCheck_hyr_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'hyr'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'hyr', verbose=verbose))
def test_HJ_CrossCheck_hzr_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'hzr'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'hzr', verbose=verbose))
def test_HJ_CrossCheck_hxi_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'hxi'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'hxi', verbose=verbose))
def test_HJ_CrossCheck_hyi_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'hyi'))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'hyi', verbose=verbose))
def test_HJ_CrossCheck_hzi_Jform(self):
self.assertTrue(crossCheckTest('j', 'h', 'hzi'))
if testEJ:
def test_EJ_CrossCheck_jxr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'jxr', TOL=TOLEJHB))
def test_EJ_CrossCheck_jyr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'jyr', TOL=TOLEJHB))
def test_EJ_CrossCheck_jzr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'jzr', TOL=TOLEJHB))
def test_EJ_CrossCheck_jxi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'jxi', TOL=TOLEJHB))
def test_EJ_CrossCheck_jyi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'jyi', TOL=TOLEJHB))
def test_EJ_CrossCheck_jzi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'jzi', TOL=TOLEJHB))
def test_EJ_CrossCheck_exr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'exr', TOL=TOLEJHB))
def test_EJ_CrossCheck_eyr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'eyr', TOL=TOLEJHB))
def test_EJ_CrossCheck_ezr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'ezr', TOL=TOLEJHB))
def test_EJ_CrossCheck_exi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'exi', TOL=TOLEJHB))
def test_EJ_CrossCheck_eyi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'eyi', TOL=TOLEJHB))
def test_EJ_CrossCheck_ezi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'ezi', TOL=TOLEJHB))
def test_EJ_CrossCheck_bxr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'bxr', TOL=TOLEJHB))
def test_EJ_CrossCheck_byr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'byr', TOL=TOLEJHB))
def test_EJ_CrossCheck_bzr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'bzr', TOL=TOLEJHB))
def test_EJ_CrossCheck_bxi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'bxi', TOL=TOLEJHB))
def test_EJ_CrossCheck_byi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'byi', TOL=TOLEJHB))
def test_EJ_CrossCheck_bzi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'bzi', TOL=TOLEJHB))
def test_EJ_CrossCheck_hxr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'hxr', TOL=TOLEJHB))
def test_EJ_CrossCheck_hyr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'hyr', TOL=TOLEJHB))
def test_EJ_CrossCheck_hzr_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'hzr', TOL=TOLEJHB))
def test_EJ_CrossCheck_hxi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'hxi', TOL=TOLEJHB))
def test_EJ_CrossCheck_hyi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'hyi', TOL=TOLEJHB))
def test_EJ_CrossCheck_hzi_Jform(self):
self.assertTrue(crossCheckTest('e', 'j', 'hzi', TOL=TOLEJHB))
if testBH:
def test_BH_CrossCheck_jxr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'jxr', TOL=TOLEJHB))
def test_BH_CrossCheck_jyr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'jyr', TOL=TOLEJHB))
def test_BH_CrossCheck_jzr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'jzr', TOL=TOLEJHB))
def test_BH_CrossCheck_jxi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'jxi', TOL=TOLEJHB))
def test_BH_CrossCheck_jyi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'jyi', TOL=TOLEJHB))
def test_BH_CrossCheck_jzi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'jzi', TOL=TOLEJHB))
def test_BH_CrossCheck_exr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'exr', TOL=TOLEJHB))
def test_BH_CrossCheck_eyr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'eyr', TOL=TOLEJHB))
def test_BH_CrossCheck_ezr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'ezr', TOL=TOLEJHB))
def test_BH_CrossCheck_exi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'exi', TOL=TOLEJHB))
def test_BH_CrossCheck_eyi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'eyi', TOL=TOLEJHB))
def test_BH_CrossCheck_ezi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'ezi', TOL=TOLEJHB))
def test_BH_CrossCheck_bxr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'bxr', TOL=TOLEJHB))
def test_BH_CrossCheck_byr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'byr', TOL=TOLEJHB))
def test_BH_CrossCheck_bzr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'bzr', TOL=TOLEJHB))
def test_BH_CrossCheck_bxi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'bxi', TOL=TOLEJHB))
def test_BH_CrossCheck_byi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'byi', TOL=TOLEJHB))
def test_BH_CrossCheck_bzi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'bzi', TOL=TOLEJHB))
def test_BH_CrossCheck_hxr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'hxr', TOL=TOLEJHB))
def test_BH_CrossCheck_hyr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'hyr', TOL=TOLEJHB))
def test_BH_CrossCheck_hzr_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'hzr', TOL=TOLEJHB))
def test_BH_CrossCheck_hxi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'hxi', TOL=TOLEJHB))
def test_BH_CrossCheck_hyi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'hyi', TOL=TOLEJHB))
def test_BH_CrossCheck_hzi_Jform(self):
self.assertTrue(crossCheckTest('b', 'h', 'hzi', TOL=TOLEJHB))
self.assertTrue(crossCheckTest(SrcList, 'j', 'h', 'hzi', verbose=verbose))
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,76 @@
import unittest
from SimPEG import *
from SimPEG import EM
import sys
from scipy.constants import mu_0
from SimPEG.EM.Utils.testingUtils import getFDEMProblem, crossCheckTest
testEB = True
testHJ = True
testEJ = True
testBH = True
verbose = False
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
SrcList = ['RawVec', 'MagDipole_Bfield', 'MagDipole', 'CircularLoop']
class FDEM_CrossCheck(unittest.TestCase):
if testEJ:
def test_EJ_CrossCheck_jxr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'jxr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_jyr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'jyr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_jzr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'jzr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_jxi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'jxi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_jyi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'jyi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_jzi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'jzi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_exr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'exr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_eyr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'eyr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_ezr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'ezr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_exi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'exi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_eyi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'eyi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_ezi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'ezi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_bxr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'bxr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_byr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'byr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_bzr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'bzr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_bxi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'bxi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_byi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'byi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_bzi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'bzi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_hxr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hxr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_hyr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hyr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_hzr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hzr', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_hxi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hxi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_hyi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hyi', verbose=verbose, TOL=TOLEJHB))
def test_EJ_CrossCheck_hzi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'e', 'j', 'hzi', verbose=verbose, TOL=TOLEJHB))
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,76 @@
import unittest
from SimPEG import *
from SimPEG import EM
import sys
from scipy.constants import mu_0
from SimPEG.EM.Utils.testingUtils import getFDEMProblem, crossCheckTest
testEB = True
testHJ = True
testEJ = True
testBH = True
verbose = False
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
SrcList = ['RawVec', 'MagDipole_Bfield', 'MagDipole', 'CircularLoop']
class FDEM_CrossCheck(unittest.TestCase):
if testBH:
def test_BH_CrossCheck_jxr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'jxr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_jyr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'jyr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_jzr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'jzr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_jxi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'jxi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_jyi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'jyi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_jzi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'jzi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_exr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'exr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_eyr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'eyr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_ezr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'ezr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_exi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'exi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_eyi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'eyi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_ezi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'ezi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_bxr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'bxr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_byr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'byr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_bzr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'bzr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_bxi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'bxi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_byi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'byi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_bzi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'bzi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_hxr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'hxr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_hyr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'hyr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_hzr_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'hzr', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_hxi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'hxi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_hyi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'hyi', verbose=verbose, TOL=TOLEJHB))
def test_BH_CrossCheck_hzi_Jform(self):
self.assertTrue(crossCheckTest(SrcList, 'b', 'h', 'hzi', verbose=verbose, TOL=TOLEJHB))
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,130 @@
import unittest
from SimPEG import *
from SimPEG import EM
import sys
from scipy.constants import mu_0
from SimPEG.EM.Utils.testingUtils import getFDEMProblem
testE = True
testB = False
verbose = False
TOL = 1e-5
FLR = 1e-20 # "zero", so if residual below this --> pass regardless of order
CONDUCTIVITY = 1e1
MU = mu_0
freq = 1e-1
addrandoms = True
SrcType = 'RawVec' #or 'MAgDipole_Bfield', 'CircularLoop', 'RawVec'
def adjointTest(fdemType, comp):
prb = getFDEMProblem(fdemType, comp, [SrcType], freq)
print 'Adjoint %s formulation - %s' % (fdemType, comp)
m = np.log(np.ones(prb.mapping.nP)*CONDUCTIVITY)
mu = np.ones(prb.mesh.nC)*MU
if addrandoms is True:
m = m + np.random.randn(prb.mapping.nP)*np.log(CONDUCTIVITY)*1e-1
mu = mu + np.random.randn(prb.mesh.nC)*MU*1e-1
survey = prb.survey
# prb.PropMap.PropModel.mu = mu
# prb.PropMap.PropModel.mui = 1./mu
u = prb.fields(m)
v = np.random.rand(survey.nD)
w = np.random.rand(prb.mesh.nC)
vJw = v.dot(prb.Jvec(m, w, u))
wJtv = w.dot(prb.Jtvec(m, v, u))
tol = np.max([TOL*(10**int(np.log10(np.abs(vJw)))),FLR])
print vJw, wJtv, vJw - wJtv, tol, np.abs(vJw - wJtv) < tol
return np.abs(vJw - wJtv) < tol
class FDEM_AdjointTests(unittest.TestCase):
if testE:
# def test_Jtvec_adjointTest_exr_Eform(self):
# self.assertTrue(adjointTest('e', 'exr'))
# def test_Jtvec_adjointTest_eyr_Eform(self):
# self.assertTrue(adjointTest('e', 'eyr'))
# def test_Jtvec_adjointTest_ezr_Eform(self):
# self.assertTrue(adjointTest('e', 'ezr'))
# def test_Jtvec_adjointTest_exi_Eform(self):
# self.assertTrue(adjointTest('e', 'exi'))
# def test_Jtvec_adjointTest_eyi_Eform(self):
# self.assertTrue(adjointTest('e', 'eyi'))
# def test_Jtvec_adjointTest_ezi_Eform(self):
# self.assertTrue(adjointTest('e', 'ezi'))
# def test_Jtvec_adjointTest_bxr_Eform(self):
# self.assertTrue(adjointTest('e', 'bxr'))
# def test_Jtvec_adjointTest_byr_Eform(self):
# self.assertTrue(adjointTest('e', 'byr'))
# def test_Jtvec_adjointTest_bzr_Eform(self):
# self.assertTrue(adjointTest('e', 'bzr'))
# def test_Jtvec_adjointTest_bxi_Eform(self):
# self.assertTrue(adjointTest('e', 'bxi'))
# def test_Jtvec_adjointTest_byi_Eform(self):
# self.assertTrue(adjointTest('e', 'byi'))
# def test_Jtvec_adjointTest_bzi_Eform(self):
# self.assertTrue(adjointTest('e', 'bzi'))
def test_Jtvec_adjointTest_exr_Eform(self):
self.assertTrue(adjointTest('e', 'jxr'))
# def test_Jtvec_adjointTest_eyr_Eform(self):
# self.assertTrue(adjointTest('e', 'jyr'))
# def test_Jtvec_adjointTest_ezr_Eform(self):
# self.assertTrue(adjointTest('e', 'jzr'))
# def test_Jtvec_adjointTest_exi_Eform(self):
# self.assertTrue(adjointTest('e', 'jxi'))
# def test_Jtvec_adjointTest_eyi_Eform(self):
# self.assertTrue(adjointTest('e', 'jyi'))
# def test_Jtvec_adjointTest_ezi_Eform(self):
# self.assertTrue(adjointTest('e', 'jzi'))
# def test_Jtvec_adjointTest_bxr_Eform(self):
# self.assertTrue(adjointTest('e', 'hxr'))
# def test_Jtvec_adjointTest_byr_Eform(self):
# self.assertTrue(adjointTest('e', 'hyr'))
# def test_Jtvec_adjointTest_bzr_Eform(self):
# self.assertTrue(adjointTest('e', 'hzr'))
# def test_Jtvec_adjointTest_bxi_Eform(self):
# self.assertTrue(adjointTest('e', 'hxi'))
# def test_Jtvec_adjointTest_byi_Eform(self):
# self.assertTrue(adjointTest('e', 'hyi'))
# def test_Jtvec_adjointTest_bzi_Eform(self):
# self.assertTrue(adjointTest('e', 'hzi'))
if testB:
def test_Jtvec_adjointTest_exr_Bform(self):
self.assertTrue(adjointTest('b', 'exr'))
def test_Jtvec_adjointTest_eyr_Bform(self):
self.assertTrue(adjointTest('b', 'eyr'))
def test_Jtvec_adjointTest_ezr_Bform(self):
self.assertTrue(adjointTest('b', 'ezr'))
def test_Jtvec_adjointTest_exi_Bform(self):
self.assertTrue(adjointTest('b', 'exi'))
def test_Jtvec_adjointTest_eyi_Bform(self):
self.assertTrue(adjointTest('b', 'eyi'))
def test_Jtvec_adjointTest_ezi_Bform(self):
self.assertTrue(adjointTest('b', 'ezi'))
def test_Jtvec_adjointTest_bxr_Bform(self):
self.assertTrue(adjointTest('b', 'bxr'))
def test_Jtvec_adjointTest_byr_Bform(self):
self.assertTrue(adjointTest('b', 'byr'))
def test_Jtvec_adjointTest_bzr_Bform(self):
self.assertTrue(adjointTest('b', 'bzr'))
def test_Jtvec_adjointTest_bxi_Bform(self):
self.assertTrue(adjointTest('b', 'bxi'))
def test_Jtvec_adjointTest_byi_Bform(self):
self.assertTrue(adjointTest('b', 'byi'))
def test_Jtvec_adjointTest_bzi_Bform(self):
self.assertTrue(adjointTest('b', 'bzi'))
if __name__ == '__main__':
unittest.main()
@@ -45,58 +45,6 @@ def adjointTest(fdemType, comp):
return np.abs(vJw - wJtv) < tol
class FDEM_AdjointTests(unittest.TestCase):
if testEB:
def test_Jtvec_adjointTest_exr_Eform(self):
self.assertTrue(adjointTest('e', 'exr'))
def test_Jtvec_adjointTest_eyr_Eform(self):
self.assertTrue(adjointTest('e', 'eyr'))
def test_Jtvec_adjointTest_ezr_Eform(self):
self.assertTrue(adjointTest('e', 'ezr'))
def test_Jtvec_adjointTest_exi_Eform(self):
self.assertTrue(adjointTest('e', 'exi'))
def test_Jtvec_adjointTest_eyi_Eform(self):
self.assertTrue(adjointTest('e', 'eyi'))
def test_Jtvec_adjointTest_ezi_Eform(self):
self.assertTrue(adjointTest('e', 'ezi'))
def test_Jtvec_adjointTest_bxr_Eform(self):
self.assertTrue(adjointTest('e', 'bxr'))
def test_Jtvec_adjointTest_byr_Eform(self):
self.assertTrue(adjointTest('e', 'byr'))
def test_Jtvec_adjointTest_bzr_Eform(self):
self.assertTrue(adjointTest('e', 'bzr'))
def test_Jtvec_adjointTest_bxi_Eform(self):
self.assertTrue(adjointTest('e', 'bxi'))
def test_Jtvec_adjointTest_byi_Eform(self):
self.assertTrue(adjointTest('e', 'byi'))
def test_Jtvec_adjointTest_bzi_Eform(self):
self.assertTrue(adjointTest('e', 'bzi'))
def test_Jtvec_adjointTest_exr_Bform(self):
self.assertTrue(adjointTest('b', 'exr'))
def test_Jtvec_adjointTest_eyr_Bform(self):
self.assertTrue(adjointTest('b', 'eyr'))
def test_Jtvec_adjointTest_ezr_Bform(self):
self.assertTrue(adjointTest('b', 'ezr'))
def test_Jtvec_adjointTest_exi_Bform(self):
self.assertTrue(adjointTest('b', 'exi'))
def test_Jtvec_adjointTest_eyi_Bform(self):
self.assertTrue(adjointTest('b', 'eyi'))
def test_Jtvec_adjointTest_ezi_Bform(self):
self.assertTrue(adjointTest('b', 'ezi'))
def test_Jtvec_adjointTest_bxr_Bform(self):
self.assertTrue(adjointTest('b', 'bxr'))
def test_Jtvec_adjointTest_byr_Bform(self):
self.assertTrue(adjointTest('b', 'byr'))
def test_Jtvec_adjointTest_bzr_Bform(self):
self.assertTrue(adjointTest('b', 'bzr'))
def test_Jtvec_adjointTest_bxi_Bform(self):
self.assertTrue(adjointTest('b', 'bxi'))
def test_Jtvec_adjointTest_byi_Bform(self):
self.assertTrue(adjointTest('b', 'byi'))
def test_Jtvec_adjointTest_bzi_Bform(self):
self.assertTrue(adjointTest('b', 'bzi'))
if testHJ:
def test_Jtvec_adjointTest_jxr_Jform(self):
@@ -6,8 +6,9 @@ from scipy.constants import mu_0
from SimPEG.EM.Utils.testingUtils import getFDEMProblem
testDerivs = True
testEB = True
testHJ = True
testE = True
testB = False
testHJ = False
verbose = False
@@ -43,33 +44,60 @@ def derivTest(fdemType, comp):
class FDEM_DerivTests(unittest.TestCase):
if testEB:
if testE:
# def test_Jvec_exr_Eform(self):
# self.assertTrue(derivTest('e', 'exr'))
# def test_Jvec_eyr_Eform(self):
# self.assertTrue(derivTest('e', 'eyr'))
# def test_Jvec_ezr_Eform(self):
# self.assertTrue(derivTest('e', 'ezr'))
# def test_Jvec_exi_Eform(self):
# self.assertTrue(derivTest('e', 'exi'))
# def test_Jvec_eyi_Eform(self):
# self.assertTrue(derivTest('e', 'eyi'))
# def test_Jvec_ezi_Eform(self):
# self.assertTrue(derivTest('e', 'ezi'))
# def test_Jvec_bxr_Eform(self):
# self.assertTrue(derivTest('e', 'bxr'))
# def test_Jvec_byr_Eform(self):
# self.assertTrue(derivTest('e', 'byr'))
# def test_Jvec_bzr_Eform(self):
# self.assertTrue(derivTest('e', 'bzr'))
# def test_Jvec_bxi_Eform(self):
# self.assertTrue(derivTest('e', 'bxi'))
# def test_Jvec_byi_Eform(self):
# self.assertTrue(derivTest('e', 'byi'))
# def test_Jvec_bzi_Eform(self):
# self.assertTrue(derivTest('e', 'bzi'))
def test_Jvec_exr_Eform(self):
self.assertTrue(derivTest('e', 'exr'))
def test_Jvec_eyr_Eform(self):
self.assertTrue(derivTest('e', 'eyr'))
def test_Jvec_ezr_Eform(self):
self.assertTrue(derivTest('e', 'ezr'))
def test_Jvec_exi_Eform(self):
self.assertTrue(derivTest('e', 'exi'))
def test_Jvec_eyi_Eform(self):
self.assertTrue(derivTest('e', 'eyi'))
def test_Jvec_ezi_Eform(self):
self.assertTrue(derivTest('e', 'ezi'))
self.assertTrue(derivTest('e', 'jxr'))
# def test_Jvec_eyr_Eform(self):
# self.assertTrue(derivTest('e', 'jyr'))
# def test_Jvec_ezr_Eform(self):
# self.assertTrue(derivTest('e', 'jzr'))
# def test_Jvec_exi_Eform(self):
# self.assertTrue(derivTest('e', 'jxi'))
# def test_Jvec_eyi_Eform(self):
# self.assertTrue(derivTest('e', 'jyi'))
# def test_Jvec_ezi_Eform(self):
# self.assertTrue(derivTest('e', 'jzi'))
def test_Jvec_bxr_Eform(self):
self.assertTrue(derivTest('e', 'bxr'))
def test_Jvec_byr_Eform(self):
self.assertTrue(derivTest('e', 'byr'))
def test_Jvec_bzr_Eform(self):
self.assertTrue(derivTest('e', 'bzr'))
def test_Jvec_bxi_Eform(self):
self.assertTrue(derivTest('e', 'bxi'))
def test_Jvec_byi_Eform(self):
self.assertTrue(derivTest('e', 'byi'))
def test_Jvec_bzi_Eform(self):
self.assertTrue(derivTest('e', 'bzi'))
# def test_Jvec_bxr_Eform(self):
# self.assertTrue(derivTest('e', 'hxr'))
# def test_Jvec_byr_Eform(self):
# self.assertTrue(derivTest('e', 'hyr'))
# def test_Jvec_bzr_Eform(self):
# self.assertTrue(derivTest('e', 'hzr'))
# def test_Jvec_bxi_Eform(self):
# self.assertTrue(derivTest('e', 'hxi'))
# def test_Jvec_byi_Eform(self):
# self.assertTrue(derivTest('e', 'hyi'))
# def test_Jvec_bzi_Eform(self):
# self.assertTrue(derivTest('e', 'hzi'))
if testB:
def test_Jvec_exr_Bform(self):
self.assertTrue(derivTest('b', 'exr'))
def test_Jvec_eyr_Bform(self):