mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-03 19:32:01 +08:00
working on deBugging
This commit is contained in:
+63
-23
@@ -4,32 +4,32 @@ from simpegEM.Utils.EMUtils import omega
|
||||
|
||||
class FieldsFDEM(Problem.Fields):
|
||||
"""Fancy Field Storage for a FDEM survey."""
|
||||
knownFields = {'b': 'F', 'e': 'E', 'j': 'F', 'h': 'E'} # TODO: a, phi
|
||||
# knownFields = {'b': 'F', 'e': 'E', 'b_sec' : 'F', 'e_sec':'E' ,'j': 'F', 'h': 'E'} # TODO: a, phi
|
||||
dtype = complex
|
||||
|
||||
def calcFields(self,sol,tx,fieldType):
|
||||
if fieldType == 'e':
|
||||
return self._e(sol,tx)
|
||||
elif fieldType == 'e_sec':
|
||||
return self._e_sec(sol,tx)
|
||||
elif fieldType == 'b':
|
||||
return self._b(sol,tx)
|
||||
elif fieldType == 'b_sec':
|
||||
return self._b_sec(sol,tx)
|
||||
else:
|
||||
raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
# def calcFields(self,sol,tx,fieldType):
|
||||
# if fieldType == 'e':
|
||||
# return self._e(sol,tx)
|
||||
# elif fieldType == 'e_sec':
|
||||
# return self._e_sec(sol,tx)
|
||||
# elif fieldType == 'b':
|
||||
# return self._b(sol,tx)
|
||||
# elif fieldType == 'b_sec':
|
||||
# return self._b_sec(sol,tx)
|
||||
# else:
|
||||
# raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
|
||||
def calcFieldsDeriv(self,sol,tx,fieldType,adjoint=False):
|
||||
if fieldType == 'e':
|
||||
return self._eDeriv(sol,tx,adjoint)
|
||||
elif fieldType == 'e_sec':
|
||||
return self._e_secDeriv(sol,tx,adjoint)
|
||||
elif fieldType == 'b':
|
||||
return self._bDeriv(sol,tx,adjoint,adjoint)
|
||||
elif fieldType == 'b_sec':
|
||||
return self._b_secDeriv(sol,tx,adjoint,adjoint)
|
||||
else:
|
||||
raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
# def calcFieldsDeriv(self,sol,tx,fieldType,adjoint=False):
|
||||
# if fieldType == 'e':
|
||||
# return self._eDeriv(sol,tx,adjoint)
|
||||
# elif fieldType == 'e_sec':
|
||||
# return self._e_secDeriv(sol,tx,adjoint)
|
||||
# elif fieldType == 'b':
|
||||
# return self._bDeriv(sol,tx,adjoint)
|
||||
# elif fieldType == 'b_sec':
|
||||
# return self._b_secDeriv(sol,tx,adjoint)
|
||||
# else:
|
||||
# raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
|
||||
|
||||
|
||||
@@ -48,6 +48,26 @@ class FieldsFDEM_e(FieldsFDEM):
|
||||
self.getSource = self.survey.prob.getSource
|
||||
self.getSourceDeriv = self.survey.prob.getSourceDeriv
|
||||
|
||||
def calcFields(self,sol,tx,fieldType):
|
||||
if fieldType == 'e':
|
||||
return self._e(sol,tx)
|
||||
elif fieldType == 'b':
|
||||
return self._b(sol,tx)
|
||||
elif fieldType == 'b_sec':
|
||||
return self._b_sec(sol,tx)
|
||||
else:
|
||||
raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
|
||||
def calcFieldsDeriv(self,sol,tx,fieldType,adjoint=False):
|
||||
if fieldType == 'e':
|
||||
return self._eDeriv(sol,tx,adjoint)
|
||||
elif fieldType == 'b':
|
||||
return self._bDeriv(sol,tx,adjoint)
|
||||
elif fieldType == 'b_sec':
|
||||
return self._b_secDeriv(sol,tx,adjoint)
|
||||
else:
|
||||
raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
|
||||
def _e(self, e, tx):
|
||||
return e
|
||||
|
||||
@@ -90,6 +110,26 @@ class FieldsFDEM_b(FieldsFDEM):
|
||||
self.getSource = self.survey.prob.getSource
|
||||
self.getSourceDeriv = self.survey.prob.getSourceDeriv
|
||||
|
||||
def calcFields(self,sol,tx,fieldType):
|
||||
if fieldType == 'e':
|
||||
return self._e(sol,tx)
|
||||
elif fieldType == 'e_sec':
|
||||
return self._e_sec(sol,tx)
|
||||
elif fieldType == 'b':
|
||||
return self._b(sol,tx)
|
||||
else:
|
||||
raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
|
||||
def calcFieldsDeriv(self,sol,tx,fieldType,adjoint=False):
|
||||
if fieldType == 'e':
|
||||
return self._eDeriv(sol,tx,adjoint)
|
||||
elif fieldType == 'e_sec':
|
||||
return self._e_secDeriv(sol,tx,adjoint)
|
||||
elif fieldType == 'b':
|
||||
return self._bDeriv(sol,tx,adjoint)
|
||||
else:
|
||||
raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType)
|
||||
|
||||
def _b(self, b, tx):
|
||||
return b
|
||||
|
||||
|
||||
+35
-22
@@ -10,6 +10,8 @@ testAdjoint = False
|
||||
testEB = True
|
||||
testHJ = False
|
||||
|
||||
verbose = True
|
||||
|
||||
TOL = 1e-4
|
||||
FLR = 1e-20 # "zero", so if residual below this --> pass regardless of order
|
||||
CONDUCTIVITY = 1e1
|
||||
@@ -37,6 +39,9 @@ def getProblem(fdemType, comp):
|
||||
survey = EM.FDEM.SurveyFDEM([Tx0])
|
||||
|
||||
|
||||
if verbose:
|
||||
print ' Fetching %s problem' % (fdemType)
|
||||
|
||||
if fdemType == 'e':
|
||||
prb = EM.FDEM.ProblemFDEM_e(mesh, mapping=mapping)
|
||||
elif fdemType == 'b':
|
||||
@@ -82,7 +87,9 @@ def adjointTest(fdemType, comp):
|
||||
print vJw, wJtv, vJw - wJtv, tol, np.abs(vJw - wJtv) < tol
|
||||
return np.abs(vJw - wJtv) < tol
|
||||
|
||||
|
||||
def derivTest(fdemType, comp):
|
||||
|
||||
prb = getProblem(fdemType, comp)
|
||||
print '%s formulation - %s' % (fdemType, comp)
|
||||
x0 = np.log(np.ones(prb.mesh.nC)*CONDUCTIVITY)
|
||||
@@ -119,6 +126,9 @@ def crossCheckTest(fdemType, comp):
|
||||
u1 = prb1.fields(m)
|
||||
d1 = Utils.mkvc(survey1.projectFields(u1))
|
||||
|
||||
if verbose:
|
||||
print ' Problem 1 solved'
|
||||
|
||||
prb1.unpair
|
||||
|
||||
if fdemType == 'e':
|
||||
@@ -138,6 +148,9 @@ def crossCheckTest(fdemType, comp):
|
||||
u2 = prb2.fields(m)
|
||||
d2 = Utils.mkvc(survey2.projectFields(u2))
|
||||
|
||||
if verbose:
|
||||
print ' Problem 2 solved'
|
||||
|
||||
r = d2-d1
|
||||
l2r = l2norm(r)
|
||||
|
||||
@@ -368,29 +381,29 @@ class FDEM_DerivTests(unittest.TestCase):
|
||||
if testEB:
|
||||
def test_EB_CrossCheck_exr_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'exr'))
|
||||
def test_EB_CrossCheck_eyr_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'eyr'))
|
||||
def test_EB_CrossCheck_ezr_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'ezr'))
|
||||
def test_EB_CrossCheck_exi_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'exi'))
|
||||
def test_EB_CrossCheck_eyi_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'eyi'))
|
||||
def test_EB_CrossCheck_ezi_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'ezi'))
|
||||
# def test_EB_CrossCheck_eyr_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'eyr'))
|
||||
# def test_EB_CrossCheck_ezr_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'ezr'))
|
||||
# def test_EB_CrossCheck_exi_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'exi'))
|
||||
# def test_EB_CrossCheck_eyi_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'eyi'))
|
||||
# def test_EB_CrossCheck_ezi_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'ezi'))
|
||||
|
||||
def test_EB_CrossCheck_bxr_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'bxr'))
|
||||
def test_EB_CrossCheck_byr_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'byr'))
|
||||
# def test_EB_CrossCheck_bzr_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'bzr')) # Doesn't make sense to test this for p-s approach
|
||||
def test_EB_CrossCheck_bxi_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'bxi'))
|
||||
def test_EB_CrossCheck_byi_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'byi'))
|
||||
def test_EB_CrossCheck_bzi_Eform(self):
|
||||
self.assertTrue(crossCheckTest('e', 'bzi'))
|
||||
# def test_EB_CrossCheck_bxr_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'bxr'))
|
||||
# def test_EB_CrossCheck_byr_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'byr'))
|
||||
# # def test_EB_CrossCheck_bzr_Eform(self):
|
||||
# # self.assertTrue(crossCheckTest('e', 'bzr')) # Doesn't make sense to test this for p-s approach
|
||||
# def test_EB_CrossCheck_bxi_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'bxi'))
|
||||
# def test_EB_CrossCheck_byi_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'byi'))
|
||||
# def test_EB_CrossCheck_bzi_Eform(self):
|
||||
# self.assertTrue(crossCheckTest('e', 'bzi'))
|
||||
|
||||
if testHJ:
|
||||
def test_HJ_CrossCheck_jxr_Jform(self):
|
||||
|
||||
Reference in New Issue
Block a user