mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-06 05:16:51 +08:00
removed sec fields which were defined based on source def
This commit is contained in:
+31
-78
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user