From 903a418a117ca2eadaa60491462a44d2ca6591a9 Mon Sep 17 00:00:00 2001 From: Lindsey Date: Wed, 15 Apr 2015 09:33:21 -0700 Subject: [PATCH] each of the fields computations now just takes a transmitter --- simpegEM/FDEM/FieldsFDEM.py | 68 +++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/simpegEM/FDEM/FieldsFDEM.py b/simpegEM/FDEM/FieldsFDEM.py index 9c3c506f..3310f838 100644 --- a/simpegEM/FDEM/FieldsFDEM.py +++ b/simpegEM/FDEM/FieldsFDEM.py @@ -7,27 +7,27 @@ class FieldsFDEM(Problem.Fields): knownFields = {'b': 'F', 'e': 'E', 'j': 'F', 'h': 'E'} # TODO: a, phi dtype = complex - def calcFields(self,sol,txInd,freqInd,fieldType): + def calcFields(self,sol,tx,fieldType): if fieldType == 'e': - return self._e(sol,txInd,freqInd) + return self._e(sol,tx) elif fieldType == 'e_sec': - return self._e_sec(sol,txInd,freqInd) + return self._e_sec(sol,tx) elif fieldType == 'b': - return self._b(sol,txInd,freqInd) + return self._b(sol,tx) elif fieldType == 'b_sec': - return self._b_sec(sol,txInd,freqInd) + return self._b_sec(sol,tx) else: raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType) - def calcFieldsDeriv(self,sol,txInd,freqInd,fieldType,adjoint=False): + def calcFieldsDeriv(self,sol,tx,fieldType,adjoint=False): if fieldType == 'e': - return self._eDeriv(sol,txInd,freqInd,adjoint) + return self._eDeriv(sol,tx,adjoint) elif fieldType == 'e_sec': - return self._e_secDeriv(sol,txInd,freqInd,adjoint) + return self._e_secDeriv(sol,tx,adjoint) elif fieldType == 'b': - return self._bDeriv(sol,txInd,freqInd,adjoint,adjoint) + return self._bDeriv(sol,tx,adjoint,adjoint) elif fieldType == 'b_sec': - return self._b_secDeriv(sol,txInd,freqInd,adjoint,adjoint) + return self._b_secDeriv(sol,tx,adjoint,adjoint) else: raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType) @@ -37,7 +37,7 @@ class FieldsFDEM_e(FieldsFDEM): knownFields = {'e':'E'} aliasFields = { 'b_sec' : ['e','F','_b_sec'], - 'b' : ['e','F','_b'] + 'b' : ['b_sec','F','_b'] } def __init__(self,mesh,survey,**kwargs): @@ -45,43 +45,39 @@ class FieldsFDEM_e(FieldsFDEM): def startup(self): self.edgeCurl = self.survey.prob.mesh.edgeCurl - self.freqs = self.survey.freqs self.getSource = self.survey.prob.getSource self.getSourceDeriv = self.survey.prob.getSourceDeriv - def _e(self, e, txInd, freqInd): + def _e(self, e, tx): return e - def _eDeriv(self, e, txInd, freqInd, adjoint=False): + def _eDeriv(self, e, tx, adjoint=False): return None - def _b_sec(self, e, txInd, freqInd): #adjoint=False - iomegainv = 1./(1j*omega(self.freqs[freqInd])) + def _b_sec(self, e, tx): #adjoint=False + iomegainv = 1./(1j*omega(tx.freq)) return -iomegainv * (self.edgeCurl * e) - def _b_secDeriv(self, e, txInd, freqInd, adjoint=False): + def _b_secDeriv(self, e, tx, adjoint=False): return None - def _b(self, e, txInd, freqInd): #adjoint=False - freq = self.freqs[freqInd] - b_sec = self._bsec(e,txInd,freqInd) - j_m,_ = self.getSource(freq) - return 1./(1j*omega(freq)) + b_sec + def _b(self, b_sec, tx): #adjoint=False + j_m,_ = self.getSource(tx.freq) + return 1./(1j*omega(tx.freq)) + b_sec - def _bDreiv(self, e, txInd, freqInd, adjoint=False): - freq = self.freqs[freqInd] - j_mDeriv,_ = self.getSourceDeriv(freq, adjoint) + def _bDreiv(self, e, tx, adjoint=False): + j_mDeriv,_ = self.getSourceDeriv(tx.freq, adjoint) if j_mDeriv is None: return None else: - return 1./(1j*omega(freq)) * j_mDeriv + return 1./(1j*omega(tx.freq)) * j_mDeriv class FieldsFDEM_b(FieldsFDEM): knownFields = {'b':'F'} aliasFields = { 'e_sec' : ['b','E','_e_sec'], - 'e' : ['b','E','_e'] + 'e' : ['e_sec','E','_e'] } def __init__(self,mesh,survey,**kwargs): @@ -91,29 +87,27 @@ class FieldsFDEM_b(FieldsFDEM): self.edgeCurl = self.survey.prob.mesh.edgeCurl self.MeSigmaI = self.survey.prob.MeSigmaI self.MfMui = self.survey.prob.MfMui - self.freqs = self.survey.freqs self.getSource = self.survey.prob.getSource self.getSourceDeriv = self.survey.prob.getSourceDeriv - def _b(self, b, txInd, freqInd): + def _b(self, b, tx): return b - def _bDeriv(self, b, txInd, freqInd, adjoint=False): + def _bDeriv(self, b, tx, adjoint=False): return None - def _e_sec(self, b, txInd, freqInd): + def _e_sec(self, b, tx): return self.MeSigmaI * ( self.edgeCurl.T * ( self.MfMui * b) ) - def _e_secDeriv(self, b, txInd, freqInd, adjoint=False): + def _e_secDeriv(self, b, tx, adjoint=False): return None - def _e(self, b, txInd, freqInd): - e_sec = _e_sec(self, b, txInd, freqInd) - _, j_g = self.getSource(self.freqs[freqInd]) + def _e(self, e_sec, tx): + _, j_g = self.getSource(tx.freq) return e_s - j_g - def _eDeriv(self, b, txInd, freqInd, adjoint=False): - _,j_gDeriv = self.getSourceDeriv(self.freqs[freqInd], adjoint) + def _eDeriv(self, b, tx, adjoint=False): + _,j_gDeriv = self.getSourceDeriv(tx.freq, adjoint) if j_gDeriv is None: return None else: