diff --git a/simpegEM/FDEM/FieldsFDEM.py b/simpegEM/FDEM/FieldsFDEM.py index 3310f838..129022ea 100644 --- a/simpegEM/FDEM/FieldsFDEM.py +++ b/simpegEM/FDEM/FieldsFDEM.py @@ -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 diff --git a/simpegEM/Tests/test_FDEM.py b/simpegEM/Tests/test_FDEM.py index c47ef782..b2476168 100644 --- a/simpegEM/Tests/test_FDEM.py +++ b/simpegEM/Tests/test_FDEM.py @@ -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):