diff --git a/SimPEG/EM/FDEM/FDEM.py b/SimPEG/EM/FDEM/FDEM.py index a20f1dc7..f0fd080a 100644 --- a/SimPEG/EM/FDEM/FDEM.py +++ b/SimPEG/EM/FDEM/FDEM.py @@ -4,6 +4,7 @@ from SurveyFDEM import SurveyFDEM from FieldsFDEM import FieldsFDEM, FieldsFDEM_e, FieldsFDEM_b, FieldsFDEM_h, FieldsFDEM_j from SimPEG.EM.Base import BaseEMProblem from SimPEG.EM.Utils.EMUtils import omega +from SimPEG.Utils import Zero, Identity class BaseFDEMProblem(BaseEMProblem): @@ -73,7 +74,7 @@ class BaseFDEMProblem(BaseEMProblem): ftype = self._fieldType + 'Solution' u_src = f[src, ftype] dA_dm = self.getADeriv_m(freq, u_src, v) - dRHS_dm = self.getRHSDeriv_m(freq, src, v) + dRHS_dm = self.getRHSDeriv_m(freq, src, v) # if dRHS_dm is None: # du_dm = dA_duI * ( - dA_dm ) # else: @@ -532,25 +533,25 @@ class ProblemFDEM_j(BaseFDEMProblem): v = MfRho*v S_mDerivv = S_mDeriv(MeMuI.T * (C.T * v)) S_eDerivv = S_eDeriv(v) - if S_mDerivv is not None and S_eDerivv is not None: - return S_mDerivv - 1j * omega(freq) * S_eDerivv - elif S_mDerivv is not None: - return S_mDerivv - elif S_eDerivv is not None: - return - 1j * omega(freq) * S_eDerivv - else: - return None + # if S_mDerivv is not None and S_eDerivv is not None: + return S_mDerivv - 1j * omega(freq) * S_eDerivv + # elif S_mDerivv is not None: + # return S_mDerivv + # elif S_eDerivv is not None: + # return - 1j * omega(freq) * S_eDerivv + # else: + # return None else: S_mDerivv, S_eDerivv = S_mDeriv(v), S_eDeriv(v) - if S_mDerivv is not None and S_eDerivv is not None: - RHSDeriv = C * (MeMuI * S_mDerivv) - 1j * omega(freq) * S_eDerivv - elif S_mDerivv is not None: - RHSDeriv = C * (MeMuI * S_mDerivv) - elif S_eDerivv is not None: - RHSDeriv = - 1j * omega(freq) * S_eDerivv - else: - return None + # if S_mDerivv is not None and S_eDerivv is not None: + RHSDeriv = C * (MeMuI * S_mDerivv) - 1j * omega(freq) * S_eDerivv + # elif S_mDerivv is not None: + # RHSDeriv = C * (MeMuI * S_mDerivv) + # elif S_eDerivv is not None: + # RHSDeriv = - 1j * omega(freq) * S_eDerivv + # else: + # return None if self._makeASymmetric: MfRho = self.MfRho @@ -634,30 +635,34 @@ class ProblemFDEM_h(BaseFDEMProblem): C = self.mesh.edgeCurl MfRho = self.MfRho - RHSDeriv = None + # RHSDeriv = Zero() - if S_e is not None: - MfRhoDeriv = self.MfRhoDeriv(S_e) - if not adjoint: - RHSDeriv = C.T * (MfRhoDeriv * v) - elif adjoint: - RHSDeriv = MfRhoDeriv.T * (C * v) + # if S_e is not None: + MfRhoDeriv = self.MfRhoDeriv(S_e) + if not adjoint: + RHSDeriv = C.T * (MfRhoDeriv * v) + elif adjoint: + RHSDeriv = MfRhoDeriv.T * (C * v) + + # print S_e, RHSDeriv S_mDeriv, S_eDeriv = src.evalDeriv(self, adjoint) S_mDeriv = S_mDeriv(v) S_eDeriv = S_eDeriv(v) - if S_mDeriv is not None: - if RHSDeriv is not None: - RHSDeriv += S_mDeriv(v) - else: - RHSDeriv = S_mDeriv(v) - if S_eDeriv is not None: - if RHSDeriv is not None: - RHSDeriv += C.T * (MfRho * S_e) - else: - RHSDeriv = C.T * (MfRho * S_e) + # if S_mDeriv is not None: + # if RHSDeriv is not None: + RHSDeriv += S_mDeriv - return RHSDeriv + # else: + # RHSDeriv = S_mDeriv(v) + # if S_eDeriv is not None: + # if RHSDeriv is not None: + return RHSDeriv + C.T * (MfRho * S_eDeriv) + # print RHSDeriv + # # else: + # # RHSDeriv = C.T * (MfRho * S_e) + # print RHSDeriv + # return RHSDeriv diff --git a/SimPEG/EM/FDEM/FieldsFDEM.py b/SimPEG/EM/FDEM/FieldsFDEM.py index 00b0d155..32f04d58 100644 --- a/SimPEG/EM/FDEM/FieldsFDEM.py +++ b/SimPEG/EM/FDEM/FieldsFDEM.py @@ -228,11 +228,11 @@ class FieldsFDEM_j(FieldsFDEM): return self._jPrimary(jSolution, srcList) + self._jSecondary(jSolution, srcList) def _jDeriv_u(self, src, v, adjoint=False): - return None + return Identity()*v def _jDeriv_m(self, src, v, adjoint=False): # assuming primary does not depend on the model - return None + return Zero() def _hPrimary(self, jSolution, srcList): hPrimary = np.zeros([self._edgeCurl.shape[1],jSolution.shape[1]],dtype = complex) @@ -274,12 +274,12 @@ class FieldsFDEM_j(FieldsFDEM): if not adjoint: S_mDeriv = S_mDeriv(v) - if S_mDeriv is not None: - hDeriv_m += 1./(1j*omega(src.freq)) * MeMuI * (Me * S_mDeriv) + # if S_mDeriv is not None: + hDeriv_m += 1./(1j*omega(src.freq)) * MeMuI * (Me * S_mDeriv) elif adjoint: S_mDeriv = S_mDeriv(Me.T * (MeMuI.T * v)) - if S_mDeriv is not None: - hDeriv_m += 1./(1j*omega(src.freq)) * S_mDeriv + # if S_mDeriv is not None: + hDeriv_m += 1./(1j*omega(src.freq)) * S_mDeriv return hDeriv_m @@ -329,11 +329,11 @@ class FieldsFDEM_h(FieldsFDEM): return self._hPrimary(hSolution, srcList) + self._hSecondary(hSolution, srcList) def _hDeriv_u(self, src, v, adjoint=False): - return None + return Identity()*v def _hDeriv_m(self, src, v, adjoint=False): # assuming primary does not depend on the model - return None + return Zero() def _jPrimary(self, hSolution, srcList): jPrimary = np.zeros([self._edgeCurl.shape[0], hSolution.shape[1]], dtype = complex) @@ -360,9 +360,9 @@ class FieldsFDEM_h(FieldsFDEM): def _jSecondaryDeriv_m(self, src, v, adjoint=False): _,S_eDeriv = src.evalDeriv(self.prob, adjoint) S_eDeriv = S_eDeriv(v) - if S_eDeriv is not None: - return -S_eDeriv - return None + # if S_eDeriv is not None: + return -S_eDeriv + # return None def _j(self, hSolution, srcList): return self._jPrimary(hSolution, srcList) + self._jSecondary(hSolution, srcList) diff --git a/SimPEG/EM/FDEM/SurveyFDEM.py b/SimPEG/EM/FDEM/SurveyFDEM.py index 5db248cd..a962fe7e 100644 --- a/SimPEG/EM/FDEM/SurveyFDEM.py +++ b/SimPEG/EM/FDEM/SurveyFDEM.py @@ -118,10 +118,10 @@ class SrcFDEM(Survey.BaseSrc): return None def S_m(self, prob): - return None + return Zero() def S_e(self, prob): - return None + return Zero() def S_mDeriv(self, prob, v, adjoint = False): return Zero()