mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-08 01:54:55 +08:00
110 lines
3.6 KiB
Python
110 lines
3.6 KiB
Python
import SimPEG
|
|
from SimPEG.Utils import Identity, Zero
|
|
|
|
class Fields(SimPEG.Problem.Fields):
|
|
knownFields = {}
|
|
dtype = float
|
|
|
|
def _phiDeriv(self, src, du_dm_v, v, adjoint=False):
|
|
if getattr(self, '_phiDeriv_u', None) is None or getattr(self, '_phiDeriv_m', None) is None:
|
|
raise NotImplementedError ('Getting phiDerivs from %s is not implemented' %self.knownFields.keys()[0])
|
|
|
|
if adjoint:
|
|
return self._phiDeriv_u(src, v, adjoint), self._phiDeriv_m(src, v, adjoint)
|
|
return np.array(self._phiDeriv_u(src, du_dm_v, adjoint) + self._phiDeriv_m(src, v, adjoint), dtype = complex)
|
|
|
|
def _eDeriv(self, src, du_dm_v, v, adjoint=False):
|
|
if getattr(self, '_eDeriv_u', None) is None or getattr(self, '_eDeriv_m', None) is None:
|
|
raise NotImplementedError ('Getting eDerivs from %s is not implemented' %self.knownFields.keys()[0])
|
|
|
|
if adjoint:
|
|
return self._eDeriv_u(src, v, adjoint), self._eDeriv_m(src, v, adjoint)
|
|
return np.array(self._eDeriv_u(src, du_dm_v, adjoint) + self._eDeriv_m(src, v, adjoint), dtype = complex)
|
|
|
|
def _jDeriv(self, src, du_dm_v, v, adjoint=False):
|
|
if getattr(self, '_jDeriv_u', None) is None or getattr(self, '_jDeriv_m', None) is None:
|
|
raise NotImplementedError ('Getting jDerivs from %s is not implemented' %self.knownFields.keys()[0])
|
|
|
|
if adjoint:
|
|
return self._jDeriv_u(src, v, adjoint), self._jDeriv_m(src, v, adjoint)
|
|
return np.array(self._jDeriv_u(src, du_dm_v, adjoint) + self._jDeriv_m(src, v, adjoint), dtype = complex)
|
|
|
|
|
|
class Fields_CC(Fields):
|
|
knownFields = {'phiSolution':'CC'}
|
|
aliasFields = {
|
|
'phi': ['phiSolution','CC','_phi'],
|
|
'j' : ['phiSolution','F','_j'],
|
|
'e' : ['phiSolution','F','_e'],
|
|
}
|
|
# primary - secondary
|
|
# CC variables
|
|
|
|
def __init__(self, mesh, survey, **kwargs):
|
|
Fields.__init__(self, mesh, survey, **kwargs)
|
|
|
|
def startup(self):
|
|
self.prob = self.survey.prob
|
|
|
|
def _GLoc(self, fieldType):
|
|
if fieldType == 'phi':
|
|
return 'CC'
|
|
elif fieldType == 'e' or fieldType == 'j':
|
|
return 'F'
|
|
else:
|
|
raise Exception('Field type must be phi, e, j')
|
|
|
|
def _phi(self, phiSolution, srcList):
|
|
return phiSolution
|
|
|
|
def _phiDeriv_u():
|
|
return Identity()
|
|
|
|
def _phiDeriv_m():
|
|
return Zero()
|
|
|
|
def _j(self, phiSolution, srcList):
|
|
raise NotImplementedError
|
|
|
|
def _e(self, phiSolution, srcList):
|
|
raise NotImplementedError
|
|
|
|
class Fields_N(Fields):
|
|
knownFields = {'phiSolution':'N'}
|
|
aliasFields = {
|
|
'phi': ['phiSolution','N','_phi'],
|
|
'j' : ['phiSolution','E','_j'],
|
|
'e' : ['phiSolution','E','_e'],
|
|
}
|
|
# primary - secondary
|
|
# N variables
|
|
|
|
def __init__(self, mesh, survey, **kwargs):
|
|
Fields.__init__(self, mesh, survey, **kwargs)
|
|
|
|
def startup(self):
|
|
self.prob = self.survey.prob
|
|
|
|
def _GLoc(self, fieldType):
|
|
if fieldType == 'phi':
|
|
return 'N'
|
|
elif fieldType == 'e' or fieldType == 'j':
|
|
return 'E'
|
|
else:
|
|
raise Exception('Field type must be phi, e, j')
|
|
|
|
def _phi(self, phiSolution, srcList):
|
|
return phiSolution
|
|
|
|
def _phiDeriv_u():
|
|
return Identity()
|
|
|
|
def _phiDeriv_m():
|
|
return Zero()
|
|
|
|
def _j(self, phiSolution, srcList):
|
|
raise NotImplementedError
|
|
|
|
def _e(self, phiSolution, srcList):
|
|
raise NotImplementedError
|