Fixed bug in setting self.curModel in FieldsFDEM_j

This commit is contained in:
Lindsey Heagy
2015-04-17 12:29:49 -07:00
parent 2864a976c6
commit 08d90bbb67
+130 -130
View File
@@ -3,114 +3,114 @@ from simpegEM.Utils.EMUtils import omega
class FieldsFDEM(Problem.Fields):
"""Fancy Field Storage for a FDEM survey."""
knownFields = {}
dtype = complex
"""Fancy Field Storage for a FDEM survey."""
knownFields = {}
dtype = complex
class FieldsFDEM_e(FieldsFDEM):
knownFields = {'e':'E'}
aliasFields = {
'b_sec' : ['e','F','_b_sec'],
'b' : ['e','F','_b']
}
knownFields = {'e':'E'}
aliasFields = {
'b_sec' : ['e','F','_b_sec'],
'b' : ['e','F','_b']
}
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def startup(self):
self.edgeCurl = self.survey.prob.mesh.edgeCurl
self.getSource = self.survey.prob.getSource
self.getSourceDeriv = self.survey.prob.getSourceDeriv
def startup(self):
self.edgeCurl = self.survey.prob.mesh.edgeCurl
self.getSource = self.survey.prob.getSource
self.getSourceDeriv = self.survey.prob.getSourceDeriv
def _b_sec(self, e, tx): #adjoint=False
return - 1./(1j*omega(tx.freq)) * (self.edgeCurl * e)
def _b_sec(self, e, tx): #adjoint=False
return - 1./(1j*omega(tx.freq)) * (self.edgeCurl * e)
def _b_secDeriv(self, e, tx, v, adjoint=False):
return None
def _b_secDeriv(self, e, tx, v, adjoint=False):
return None
def _b(self, e, tx): #adjoint=False
b_sec = self._b_sec(e,tx)
S_m,_ = self.getSource(tx.freq)
return b_sec + 1./(1j*omega(tx.freq)) * S_m
def _b(self, e, tx): #adjoint=False
b_sec = self._b_sec(e,tx)
S_m,_ = self.getSource(tx.freq)
return b_sec + 1./(1j*omega(tx.freq)) * S_m
def _bDeriv(self, e, tx, v, adjoint=False):
S_mDeriv,_ = self.getSourceDeriv(tx.freq, v, adjoint)
b_secDeriv = self._b_secDeriv(e, tx.freq, v, adjoint)
if S_mDeriv is None & b_secDeriv is None:
return None
elif b_secDeriv is None:
return 1./(1j*omega(tx.freq)) * S_mDeriv
elif S_mDeriv is None:
return b_secDeriv
else:
return 1./(1j*omega(tx.freq)) * S_mDeriv + b_secDeriv
def _bDeriv(self, e, tx, v, adjoint=False):
S_mDeriv,_ = self.getSourceDeriv(tx.freq, v, adjoint)
b_secDeriv = self._b_secDeriv(e, tx.freq, v, adjoint)
if S_mDeriv is None & b_secDeriv is None:
return None
elif b_secDeriv is None:
return 1./(1j*omega(tx.freq)) * S_mDeriv
elif S_mDeriv is None:
return b_secDeriv
else:
return 1./(1j*omega(tx.freq)) * S_mDeriv + b_secDeriv
class FieldsFDEM_b(FieldsFDEM):
knownFields = {'b':'F'}
aliasFields = {
'e_sec' : ['b','E','_e_sec'],
'e' : ['b','E','_e']
}
knownFields = {'b':'F'}
aliasFields = {
'e_sec' : ['b','E','_e_sec'],
'e' : ['b','E','_e']
}
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def startup(self):
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 startup(self):
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 _e_sec(self, b, tx):
return self.MeSigmaI * ( self.edgeCurl.T * ( self.MfMui * b) )
def _e_sec(self, b, tx):
return self.MeSigmaI * ( self.edgeCurl.T * ( self.MfMui * b) )
def _e_secDeriv(self, b, tx, v, adjoint=False):
return None
def _e_secDeriv(self, b, tx, v, adjoint=False):
return None
def _e(self, b, tx):
e_sec = self._e_sec(b,tx)
_, S_e = self.getSource(tx.freq)
return e_sec + S_e
def _e(self, b, tx):
e_sec = self._e_sec(b,tx)
_, S_e = self.getSource(tx.freq)
return e_sec + S_e
def _eDeriv(self, b, tx, v, adjoint=False):
_,S_eDeriv = self.getSourceDeriv(tx.freq, v, adjoint)
e_secDeriv = self._e_secDeriv(b, tx, v, adjoint)
def _eDeriv(self, b, tx, v, adjoint=False):
_,S_eDeriv = self.getSourceDeriv(tx.freq, v, adjoint)
e_secDeriv = self._e_secDeriv(b, tx, v, adjoint)
if S_eDeriv is None & e_secDeriv 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
if S_eDeriv is None & e_secDeriv 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
class FieldsFDEM_j(FieldsFDEM):
knownFields = {'j':'F'}
aliasFields = {
'h_sec' : ['j','E','_h_sec'],
'h' : ['j','E','_h']
}
knownFields = {'j':'F'}
aliasFields = {
'h_sec' : ['j','E','_h_sec'],
'h' : ['j','E','_h']
}
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def startup(self):
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.prob.curModel
def startup(self):
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 _h_sec(self, j, tx): #v, adjoint=False
return - 1./(1j*omega(tx.freq)) * self.MeMuI * (self.edgeCurl.T * (self.MfSigmai * j) )
def _h_sec(self, j, tx): #v, adjoint=False
return - 1./(1j*omega(tx.freq)) * self.MeMuI * (self.edgeCurl.T * (self.MfSigmai * j) )
def _h_secDeriv(self, j, tx, v, adjoint=False):
def _h_secDeriv(self, j, tx, v, adjoint=False):
MeMuI = self.MeMuI
C = self.edgeCurl
sig = self.curModel.transform
@@ -124,65 +124,65 @@ class FieldsFDEM_j(FieldsFDEM):
else:
return -(1./(1j*omega(freq))) * dsig_dm.T * ( dsigi_dsig.T * ( dMf_dsigi.T * ( C * ( MeMuI.T * v ) ) ) )
def _h(self, j, tx): #v, adjoint=False
h_sec = self._h_sec(j,tx)
S_m,_ = self.getSource(tx.freq)
return h_sec + 1./(1j*omega(tx.freq)) * self.MeMuI * S_m
def _h(self, j, tx): #v, adjoint=False
h_sec = self._h_sec(j,tx)
S_m,_ = self.getSource(tx.freq)
return h_sec + 1./(1j*omega(tx.freq)) * self.MeMuI * S_m
def _hDeriv(self, j, tx, v, adjoint=False):
S_mDeriv,_ = self.getSourceDeriv(tx.freq, v, adjoint)
h_secDeriv = self._h_secDeriv(j,tx.freq, v, adjoint)
if S_mDeriv is None & h_secDeriv is None:
return None
elif h_secDeriv is None:
return 1./(1j*omega(tx.freq)) * S_mDeriv
elif S_mDeriv is None:
return h_secDeriv
else:
return 1./(1j*omega(tx.freq)) * S_mDeriv + h_secDeriv
def _hDeriv(self, j, tx, v, adjoint=False):
S_mDeriv,_ = self.getSourceDeriv(tx.freq, v, adjoint)
h_secDeriv = self._h_secDeriv(j,tx.freq, v, adjoint)
if S_mDeriv is None & h_secDeriv is None:
return None
elif h_secDeriv is None:
return 1./(1j*omega(tx.freq)) * S_mDeriv
elif S_mDeriv is None:
return h_secDeriv
else:
return 1./(1j*omega(tx.freq)) * S_mDeriv + h_secDeriv
class FieldsFDEM_h(FieldsFDEM):
knownFields = {'h':'E'}
aliasFields = {
'j_sec' : ['h','F','_j_sec'],
'j' : ['h','F','_j']
}
knownFields = {'h':'E'}
aliasFields = {
'j_sec' : ['h','F','_j_sec'],
'j' : ['h','F','_j']
}
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def __init__(self,mesh,survey,**kwargs):
FieldsFDEM.__init__(self,mesh,survey,**kwargs)
def startup(self):
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
def startup(self):
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
def _j_sec(self, h, tx): # adjoint=False
return self.edgeCurl*h
def _j_sec(self, h, tx): # adjoint=False
return self.edgeCurl*h
def _j_secDeriv(self, h, tx, v, adjoint=False):
return None
def _j_secDeriv(self, h, tx, v, adjoint=False):
return None
def _j(self, h, tx): # adjoint=False
j_sec = self._j_sec(h,tx)
_,S_e = self.getSource(tx.freq)
return j_sec - S_e
def _j(self, h, tx): # adjoint=False
j_sec = self._j_sec(h,tx)
_,S_e = self.getSource(tx.freq)
return j_sec - S_e
def _jDeriv(self, h, tx, v, adjoint=False):
_,S_eDeriv = self.getSourceDeriv(tx.freq, v, adjoint)
j_secDeriv = self._j_secDeriv(j,tx.freq, v, adjoint)
if S_eDeriv is None & j_secDeriv 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
def _jDeriv(self, h, tx, v, adjoint=False):
_,S_eDeriv = self.getSourceDeriv(tx.freq, v, adjoint)
j_secDeriv = self._j_secDeriv(j,tx.freq, v, adjoint)
if S_eDeriv is None & j_secDeriv 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
# def calcFields(self, sol, freq, fieldType, adjoint=False):
# def calcFields(self, sol, freq, fieldType, adjoint=False):
# j = sol
# if fieldType == 'j':
# return j