From 3810b392ddaeeaa42772e28137d3a718d4f9171a Mon Sep 17 00:00:00 2001 From: Lindsey Heagy Date: Sun, 31 May 2015 21:16:00 -0700 Subject: [PATCH] removed sec fields which were defined based on source def --- simpegEM/FDEM/FieldsFDEM.py | 109 ++++++++++-------------------------- 1 file changed, 31 insertions(+), 78 deletions(-) diff --git a/simpegEM/FDEM/FieldsFDEM.py b/simpegEM/FDEM/FieldsFDEM.py index 920cef67..0caccafd 100644 --- a/simpegEM/FDEM/FieldsFDEM.py +++ b/simpegEM/FDEM/FieldsFDEM.py @@ -12,7 +12,6 @@ class FieldsFDEM_e(FieldsFDEM): knownFields = {'e_sol':'E'} aliasFields = { 'e' : ['e_sol','E','_e'], - 'b_sec' : ['e_sol','F','_b_sec'], 'b' : ['e_sol','F','_b'] } @@ -29,16 +28,9 @@ class FieldsFDEM_e(FieldsFDEM): e += e_p return e - def _b_sec(self, e_sol, src): - C = self._edgeCurl - b_sec = - 1./(1j*omega(src.freq))*(C * e_sol) - return b_sec - - def _b_secDeriv(self,e_sol, src, v, adjoint=False): - return None - def _b(self, e_sol, src): - b = self._b_sec(e_sol, src) + C = self._edgeCurl + b = - 1./(1j*omega(src.freq))*(C * e_sol) S_m, _ = src.eval(self.survey.prob) if S_m is not None: b += 1./(1j*omega(src.freq)) * S_m @@ -51,22 +43,16 @@ class FieldsFDEM_e(FieldsFDEM): def _bDeriv(self, e, src, v, adjoint=False): S_mDeriv,_ = src.getSourceDeriv(self.survey.prob, v, adjoint) - b_secDeriv = self._b_secDeriv(e, src.freq, v, adjoint) - if S_mDeriv is None & b_secDeriv is None: + if S_mDeriv is None: return None - elif b_secDeriv is None: - return 1./(1j*omega(src.freq)) * S_mDeriv - elif S_mDeriv is None: - return b_secDeriv else: - return 1./(1j*omega(src.freq)) * S_mDeriv + b_secDeriv + return 1./(1j*omega(src.freq)) * S_mDeriv class FieldsFDEM_b(FieldsFDEM): knownFields = {'b_sol':'F'} aliasFields = { 'b' : ['b_sol','F','_b'], - 'e_sec' : ['b_sol','E','_e_sec'], 'e' : ['b_sol','E','_e'] } @@ -77,8 +63,6 @@ class FieldsFDEM_b(FieldsFDEM): self._edgeCurl = self.survey.prob.mesh.edgeCurl self._MeSigmaI = self.survey.prob.MeSigmaI self._MfMui = self.survey.prob.MfMui - # self._getSource = self.survey.prob.getSource - # self._getSourceDeriv = self.survey.prob.getSourceDeriv def _b(self, b_sol, src): b = b_sol @@ -87,14 +71,8 @@ class FieldsFDEM_b(FieldsFDEM): b += b_p return b - def _e_sec(self, b_sol, src): - return self._MeSigmaI * ( self._edgeCurl.T * ( self._MfMui * b_sol)) - - def _e_secDeriv(self, b_sol, src, v, adjoint=False): - return None - def _e(self, b_sol, src): - e = self._e_sec(b_sol,src) + e = self._MeSigmaI * ( self._edgeCurl.T * ( self._MfMui * b_sol)) _,S_e = src.eval(self.survey.prob) if S_e is not None: e += -self._MeSigmaI*S_e @@ -107,23 +85,17 @@ class FieldsFDEM_b(FieldsFDEM): def _eDeriv(self, b_sol, src, v, adjoint=False): _,S_eDeriv = src.getSourceDeriv(self.survey.prob, v, adjoint) - e_secDeriv = self._e_secDeriv(b_sol, src, v, adjoint) - if S_eDeriv is None & e_secDeriv is None: + if S_eDeriv is None: return None - elif e_secDeriv is None: - return -S_eDeriv - elif S_eDeriv is None: - return e_secDeriv else: - return e_secDeriv - S_eDeriv + return -S_eDeriv class FieldsFDEM_j(FieldsFDEM): knownFields = {'j_sol':'F'} aliasFields = { 'j' : ['j_sol','F','_j'], - 'h_sec' : ['j_sol','E','_h_sec'], 'h' : ['j_sol','E','_h'] } @@ -134,8 +106,6 @@ class FieldsFDEM_j(FieldsFDEM): self._edgeCurl = self.survey.prob.mesh.edgeCurl self._MeMuI = self.survey.prob.MeMuI self._MfSigmai = self.survey.prob.MfSigmai - # self._getSource = self.survey.prob.getSource - # self._getSourceDeriv = self.survey.prob.getSourceDeriv self._curModel = self.survey.prob.curModel def _j(self, j_sol, src): @@ -145,51 +115,45 @@ class FieldsFDEM_j(FieldsFDEM): j += j_p return j - def _h_sec(self, j_sol, src): #v, adjoint=False - return - 1./(1j*omega(src.freq)) * self._MeMuI * (self._edgeCurl.T * (self._MfSigmai * j_sol) ) - - def _h_secDeriv(self, j_sol, src, v, adjoint=False): + def _h(self, j_sol, src): MeMuI = self._MeMuI C = self._edgeCurl - sig = self._curModel.transform - sigi = 1/sig - dsig_dm = self._curModel.transformDeriv - dsigi_dsig = -Utils.sdiag(sigi)**2 - dMf_dsigi = self.mesh.getFaceInnerProductDeriv(sigi)(j) - sigi = self._MfSigmai - if not adjoint: - return -(1./(1j*omega(freq))) * MeMuI * ( C.T * ( dMf_dsigi * ( dsigi_dsig * ( dsig_dm * v ) ) ) ) - else: - return -(1./(1j*omega(freq))) * dsig_dm.T * ( dsigi_dsig.T * ( dMf_dsigi.T * ( C * ( MeMuI.T * v ) ) ) ) + MfSigmai = self._MfSigmai - def _h(self, j_sol, src): #v, adjoint=False - h = self._h_sec(j_sol,src) + h = - 1./(1j*omega(src.freq)) * MeMuI * (C.T * (MfSigmai * j_sol) ) S_m,_ = src.eval(self.survey.prob) if S_m is not None: - h += 1./(1j*omega(src.freq)) * self._MeMuI * S_m + h += 1./(1j*omega(src.freq)) * MeMuI * S_m + h_p = src.h_p(self.survey.prob) if h_p is not None: h += h_p return h def _hDeriv(self, j_sol, src, v, adjoint=False): + + sig = self._curModel.transform + sigi = 1/sig + dsig_dm = self._curModel.transformDeriv + dsigi_dsig = -Utils.sdiag(sigi)**2 + dMf_dsigi = self.mesh.getFaceInnerProductDeriv(sigi)(j) + sigi = self._MfSigmai + S_mDeriv,_ = src.getSourceDeriv(self.survey.prob, v, adjoint) - h_secDeriv = self._h_secDeriv(j_sol,src.freq, v, adjoint) - if S_mDeriv is None & h_secDeriv is None: - return None - elif h_secDeriv is None: - return 1./(1j*omega(src.freq)) * S_mDeriv - elif S_mDeriv is None: - return h_secDeriv + + if not adjoint: + h_Deriv= -(1./(1j*omega(freq))) * MeMuI * ( C.T * ( dMf_dsigi * ( dsigi_dsig * ( dsig_dm * v ) ) ) ) else: - return 1./(1j*omega(src.freq)) * S_mDeriv + h_secDeriv + h_Deriv= -(1./(1j*omega(freq))) * dsig_dm.T * ( dsigi_dsig.T * ( dMf_dsigi.T * ( C * ( MeMuI.T * v ) ) ) ) + + if S_mDeriv is not None: + return 1./(1j*omega(src.freq)) * S_mDeriv + h_Deriv class FieldsFDEM_h(FieldsFDEM): knownFields = {'h_sol':'E'} aliasFields = { 'h' : ['h_sol','E','_h'], - 'j_sec' : ['h_sol','F','_j_sec'], 'j' : ['h_sol','F','_j'] } @@ -208,14 +172,8 @@ class FieldsFDEM_h(FieldsFDEM): h += h_p return h - def _j_sec(self, h_sol, src): # adjoint=False - return self._edgeCurl*h_sol - - def _j_secDeriv(self, h_sol, src, v, adjoint=False): - return None - - def _j(self, h_sol, src): # adjoint=False - j = self._j_sec(h_sol,src) + def _j(self, h_sol, src): + j = self._edgeCurl*h_sol _,S_e = src.eval(self.survey.prob) if S_e is not None: j += -S_e @@ -226,15 +184,10 @@ class FieldsFDEM_h(FieldsFDEM): def _jDeriv(self, h_sol, src, v, adjoint=False): _,S_eDeriv = src.getSourceDeriv(self.survey.prob, v, adjoint) - j_secDeriv = self._j_secDeriv(j,src.freq, v, adjoint) - if S_eDeriv is None & j_secDeriv is None: + if S_eDeriv is None: return None - elif j_secDeriv is None: - return - S_eDeriv - elif S_eDeriv is None: - return j_secDeriv else: - return - S_eDeriv + j_secDeriv + return - S_eDeriv # def calcFields(self, sol, freq, fieldType, adjoint=False):