mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-02 15:23:26 +08:00
each of the fields computations now just takes a transmitter
This commit is contained in:
+31
-37
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user