diff --git a/simpegEM/FDEM/FDEM.py b/simpegEM/FDEM/FDEM.py index 4b5256c3..95a66799 100644 --- a/simpegEM/FDEM/FDEM.py +++ b/simpegEM/FDEM/FDEM.py @@ -2,10 +2,53 @@ from SimPEG import Survey, Problem, Utils, np, sp, Solver as SimpegSolver from scipy.constants import mu_0 from SurveyFDEM import SurveyFDEM, FieldsFDEM from simpegEM.Base import BaseEMProblem +from simpegEM.Utils.EMUtils import omega + + + +# class FieldsTDEM_e_from_b(FieldsFDEM): +# """Fancy Field Storage for a TDEM survey.""" +# knownFields = {'b_sec': 'F'} +# aliasFields = { +# 'b': ['b_sec','F','b_from_bsec'], +# 'e': ['b','E','e_from_b'] +# } + +# def startup(self): +# self.MeSigmaI = self.survey.prob.MeSigmaI +# self.edgeCurlT = self.survey.prob.mesh.edgeCurl.T +# self.MfMui = self.survey.prob.MfMui + +# def e_from_b(self, b, txInd, timeInd): +# # TODO: implement non-zero js +# return self.MeSigmaI*(self.edgeCurlT*(self.MfMui*b)) + +# def e_from_bDeriv(self, b, txInd, timeInd): +# # TODO: implement non-zero js +# return self.MeSigmaI*(self.edgeCurlT*(self.MfMui*b)) + + +# def calcFields(self, sol, freq, fieldType, adjoint=False): +# e = sol +# if fieldType == 'e': +# return e +# elif fieldType == 'b': +# if not adjoint: +# b = - self.mesh.edgeCurl * e +# b = 1./(1j*omega(freq)) * b +# else: +# b = -(1./(1j*omega(freq))) * ( self.mesh.edgeCurl.T * e ) +# return b +# raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType) + +# def calcFieldsDeriv(self, sol, freq, fieldType, v, adjoint=False): +# e = sol +# if fieldType == 'e': +# return None +# elif fieldType == 'b': +# return None +# raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType) -def omega(freq): - """Change frequency to angular frequency, omega""" - return 2.*np.pi*freq class BaseFDEMProblem(BaseEMProblem): @@ -19,9 +62,12 @@ class BaseFDEMProblem(BaseEMProblem): """ surveyPair = SurveyFDEM + # fieldsPair = FieldsFDEM def forward(self, m, RHS, CalcFields): + # F = self.fieldsPair(self.mesh, self.survey) + F = FieldsFDEM(self.mesh, self.survey) for freq in self.survey.freqs: @@ -33,6 +79,10 @@ class BaseFDEMProblem(BaseEMProblem): Txs = self.survey.getTransmitters(freq) F[Txs, fieldType] = CalcFields(sol, freq, fieldType) + + # Txs = self.survey.getTransmitters(freq) + # F[Txs, 'e_sec'] = sol + return F def Jvec(self, m, v, u=None): @@ -55,11 +105,11 @@ class BaseFDEMProblem(BaseEMProblem): fAinvw = self.calcFields(Ainvw, freq, rx.projField) P = lambda v: rx.projectFieldsDeriv(tx, self.mesh, u, v) + Jv[tx, rx] = - P(fAinvw) + df_dm = self.calcFieldsDeriv(u_tx, freq, rx.projField, v) - if df_dm is None: - Jv[tx, rx] = - P(fAinvw) - else: - Jv[tx, rx] = - P(fAinvw) + P(df_dm) + if df_dm is not None: + Jv[tx, rx] += P(df_dm) return Utils.mkvc(Jv) @@ -111,12 +161,13 @@ class BaseFDEMProblem(BaseEMProblem): :return: RHS """ Txs = self.survey.getTransmitters(freq) - rhs = range(len(Txs)) - + j_m = range(len(Txs)) + j_e = range(len(Txs)) for i, tx in enumerate(Txs): - rhs[i] = tx.getSource(self) + j_m[i], j_e[i] = tx.getSource(self) - return np.concatenate(rhs).reshape((-1, len(Txs)), order='F') + return j_m, j_e + # return np.concatenate(rhs).reshape((-1, len(Txs)), order='F') #, np.concatenate(j_e).reshape((-1, len(Txs)), order='F') ########################################################################################## ################################ E-B Formulation ######################################### @@ -141,6 +192,8 @@ class ProblemFDEM_e(BaseFDEMProblem): """ solType = 'e' + # _fieldType = 'e' + # fieldsPair = FieldsFDEM_e def __init__(self, model, **kwargs): BaseFDEMProblem.__init__(self, model, **kwargs) @@ -175,8 +228,23 @@ class ProblemFDEM_e(BaseFDEMProblem): :return: RHS """ - j_s = self.getSource(freq) - return -1j*omega(freq)*j_s + j_m, j_g = self.getSource(freq) + nTx_freq = self.survey.nTxByFreq[freq] + RHS = 1j*np.zeros([self.mesh.nE, nTx_freq]) + + C = self.mesh.edgeCurl + MfMui = self.MfMui + + for ii in range(nTx_freq): + if j_m[ii] is not None: + + RHS[:, ii] += C.T * (MfMui * j_m[ii]) + + if j_g[ii] is not None: + RHS[:, ii] += -1j*omega(freq)*j_g[ii] + + return RHS + def calcFields(self, sol, freq, fieldType, adjoint=False): e = sol @@ -184,7 +252,8 @@ class ProblemFDEM_e(BaseFDEMProblem): return e elif fieldType == 'b': if not adjoint: - b = -(1./(1j*omega(freq))) * ( self.mesh.edgeCurl * e ) + b = - self.mesh.edgeCurl * e + b = 1./(1j*omega(freq)) * b else: b = -(1./(1j*omega(freq))) * ( self.mesh.edgeCurl.T * e ) return b @@ -254,13 +323,27 @@ class ProblemFDEM_b(BaseFDEMProblem): :return: RHS """ - b_0 = self.getSource(freq) + j_m, j_g = self.getSource(freq) + nTx_freq = self.survey.nTxByFreq[freq] + RHS = 1j*np.zeros([self.mesh.nF, nTx_freq]) + + C = self.mesh.edgeCurl + MfSigmai = self.MfSigmai + + for ii in range(nTx_freq): + if j_m[ii] is not None: + RHS[:,ii] += j_m[ii] + + if j_g[ii] is not None: + RHS[:,ii] += C * ( MfSigmai * j_g[ii] ) + - rhs = -1j*omega(freq)*b_0 if self._makeASymmetric is True: mui = self.MfMui - return mui.T*rhs - return rhs + return mui.T*RHS + + return RHS + def calcFields(self, sol, freq, fieldType, adjoint=False): b = sol @@ -274,6 +357,7 @@ class ProblemFDEM_b(BaseFDEMProblem): return b raise NotImplementedError('fieldType "%s" is not implemented.' % fieldType) + def calcFieldsDeriv(self, sol, freq, fieldType, v, adjoint=False): b = sol if fieldType == 'e': @@ -389,13 +473,28 @@ class ProblemFDEM_j(BaseFDEMProblem): :rtype: numpy.ndarray (nE, nTx) :return: RHS """ - j_s = self.getSource(freq) - rhs = -1j*omega(freq)*j_s + + j_m, j_g = self.getSource(freq) + nTx_freq = self.survey.nTxByFreq[freq] + RHS = 1j*np.zeros([self.mesh.nF, nTx_freq]) + + C = self.mesh.edgeCurl + MeMuI = self.MeMuI + + for ii in range(nTx_freq): + if j_m[ii] is not None: + RHS[:,ii] += C * (MeMuI * j_m[ii]) + + if j_g[ii] is not None: + RHS[:,ii] += -1j * omega(freq) * j_g[ii] + if self._makeASymmetric is True: MfSigi = self.MfSigmai - return MfSigi.T*rhs - return rhs + return MfSigi.T*RHS + + return RHS + def calcFields(self, sol, freq, fieldType, adjoint=False): j = sol @@ -495,15 +594,29 @@ class ProblemFDEM_h(BaseFDEMProblem): return (C.T * (dMf_dsigi * (dsigi_dsig * (dsig_dm * v)))) - def getRHS(self, freq): """ :param float freq: Frequency :rtype: numpy.ndarray (nE, nTx) :return: RHS """ - b_0 = self.getSource(freq) - return -1j*omega(freq)*b_0 + + j_m, j_g = self.getSource(freq) + nTx_freq = self.survey.nTxByFreq[freq] + RHS = 1j*np.zeros([self.mesh.nE, nTx_freq]) + + C = self.mesh.edgeCurl + MfSigmai = self.MfSigmai + + for ii in range(nTx_freq): + if j_m[ii] is not None: + RHS[:,ii] += j_m[ii] + + if j_g[ii] is not None: + RHS[:,ii] += C.T * ( MfSigmai * j_g[ii] ) + + return RHS + def calcFields(self, sol, freq, fieldType, adjoint=False): h = sol diff --git a/simpegEM/FDEM/SurveyFDEM.py b/simpegEM/FDEM/SurveyFDEM.py index 97c77e7e..67db17f0 100644 --- a/simpegEM/FDEM/SurveyFDEM.py +++ b/simpegEM/FDEM/SurveyFDEM.py @@ -1,5 +1,10 @@ from SimPEG import Survey, Problem, Utils, np, sp from simpegEM import Sources +from simpegEM.Utils.EMUtils import omega + +def omega(freq): + """Change frequency to angular frequency, omega""" + return 2.*np.pi*freq class RxFDEM(Survey.BaseRx): @@ -99,7 +104,7 @@ class TxFDEM(Survey.BaseTx): def getSource(self, prob): tx = self - + freq = tx.freq solType = prob.solType if solType == 'e' or solType == 'b': @@ -180,12 +185,12 @@ class TxFDEM(Survey.BaseTx): a = SRC b_0 = C*a - if solType == 'b' or solType == 'h': - return b_0 - elif solType == 'e' or solType == 'j': - return C.T*mui*b_0 + # if solType == 'b' or solType == 'h': + return -1j*omega(freq)*b_0, None + # elif solType == 'e' or solType == 'j': + # return -1j*omega(freq)*C.T*mui*b_0, None -class SimpleTxFDEM(TxFDEM): +class SimpleTxFDEM_g(TxFDEM): def __init__(self, vec, freq, rxList): self.vec = vec @@ -193,9 +198,19 @@ class SimpleTxFDEM(TxFDEM): TxFDEM.__init__(self, None, 'Simple', freq, rxList) def getSource(self, prob): - return self.vec + return None, self.vec +class SimpleTxFDEM_m(TxFDEM): + + def __init__(self, vec, freq, rxList): + self.vec = vec + self.freq = float(freq) + TxFDEM.__init__(self, None, 'Simple', freq, rxList) + + def getSource(self, prob): + return self.vec, None + class FieldsFDEM(Problem.Fields): """Fancy Field Storage for a FDEM survey.""" diff --git a/simpegEM/FDEM/__init__.py b/simpegEM/FDEM/__init__.py index 0b881e39..5892ce31 100644 --- a/simpegEM/FDEM/__init__.py +++ b/simpegEM/FDEM/__init__.py @@ -1,2 +1,2 @@ from SurveyFDEM import * -from FDEM import BaseFDEMProblem, ProblemFDEM_e, ProblemFDEM_b, ProblemFDEM_j, ProblemFDEM_h, omega +from FDEM import BaseFDEMProblem, ProblemFDEM_e, ProblemFDEM_b, ProblemFDEM_j, ProblemFDEM_h diff --git a/simpegEM/Tests/test_FDEM.py b/simpegEM/Tests/test_FDEM.py index 3a1c4c92..69795175 100644 --- a/simpegEM/Tests/test_FDEM.py +++ b/simpegEM/Tests/test_FDEM.py @@ -4,6 +4,10 @@ import simpegEM as EM import sys from scipy.constants import mu_0 +testDerivs = True +testCrossCheck = True +testAdjoint = True + TOL = 1e-4 FLR = 1e-20 # "zero", so if residual below this --> pass regardless of order CONDUCTIVITY = 1e1 @@ -11,6 +15,7 @@ MU = mu_0 freq = 1e-1 addrandoms = True + def getProblem(fdemType, comp): cs = 5. ncx, ncy, ncz = 6, 6, 6 @@ -144,265 +149,268 @@ def crossCheckTest(fdemType, comp): class FDEM_DerivTests(unittest.TestCase): - def test_Jvec_exr_Eform(self): - self.assertTrue(derivTest('e', 'exr')) - def test_Jvec_exr_Bform(self): - self.assertTrue(derivTest('b', 'exr')) - def test_Jvec_eyr_Eform(self): - self.assertTrue(derivTest('e', 'eyr')) - def test_Jvec_eyr_Bform(self): - self.assertTrue(derivTest('b', 'eyr')) - def test_Jvec_ezr_Eform(self): - self.assertTrue(derivTest('e', 'ezr')) - def test_Jvec_ezr_Bform(self): - self.assertTrue(derivTest('b', 'ezr')) - def test_Jvec_exi_Eform(self): - self.assertTrue(derivTest('e', 'exi')) - def test_Jvec_exi_Bform(self): - self.assertTrue(derivTest('b', 'exi')) - def test_Jvec_eyi_Eform(self): - self.assertTrue(derivTest('e', 'eyi')) - def test_Jvec_eyi_Bform(self): - self.assertTrue(derivTest('b', 'eyi')) - def test_Jvec_ezi_Eform(self): - self.assertTrue(derivTest('e', 'ezi')) - def test_Jvec_ezi_Bform(self): - self.assertTrue(derivTest('b', 'ezi')) - - def test_Jvec_bxr_Eform(self): - self.assertTrue(derivTest('e', 'bxr')) - def test_Jvec_bxr_Bform(self): - self.assertTrue(derivTest('b', 'bxr')) - def test_Jvec_byr_Eform(self): - self.assertTrue(derivTest('e', 'byr')) - def test_Jvec_byr_Bform(self): - self.assertTrue(derivTest('b', 'byr')) - def test_Jvec_bzr_Eform(self): - self.assertTrue(derivTest('e', 'bzr')) - def test_Jvec_bzr_Bform(self): - self.assertTrue(derivTest('b', 'bzr')) - def test_Jvec_bxi_Eform(self): - self.assertTrue(derivTest('e', 'bxi')) - def test_Jvec_bxi_Bform(self): - self.assertTrue(derivTest('b', 'bxi')) - def test_Jvec_byi_Eform(self): - self.assertTrue(derivTest('e', 'byi')) - def test_Jvec_byi_Bform(self): - self.assertTrue(derivTest('b', 'byi')) - def test_Jvec_bzi_Eform(self): - self.assertTrue(derivTest('e', 'bzi')) - def test_Jvec_bzi_Bform(self): - self.assertTrue(derivTest('b', 'bzi')) + if testDerivs: + def test_Jvec_exr_Eform(self): + self.assertTrue(derivTest('e', 'exr')) + def test_Jvec_exr_Bform(self): + self.assertTrue(derivTest('b', 'exr')) + def test_Jvec_eyr_Eform(self): + self.assertTrue(derivTest('e', 'eyr')) + def test_Jvec_eyr_Bform(self): + self.assertTrue(derivTest('b', 'eyr')) + def test_Jvec_ezr_Eform(self): + self.assertTrue(derivTest('e', 'ezr')) + def test_Jvec_ezr_Bform(self): + self.assertTrue(derivTest('b', 'ezr')) + def test_Jvec_exi_Eform(self): + self.assertTrue(derivTest('e', 'exi')) + def test_Jvec_exi_Bform(self): + self.assertTrue(derivTest('b', 'exi')) + def test_Jvec_eyi_Eform(self): + self.assertTrue(derivTest('e', 'eyi')) + def test_Jvec_eyi_Bform(self): + self.assertTrue(derivTest('b', 'eyi')) + def test_Jvec_ezi_Eform(self): + self.assertTrue(derivTest('e', 'ezi')) + def test_Jvec_ezi_Bform(self): + self.assertTrue(derivTest('b', 'ezi')) + def test_Jvec_bxr_Eform(self): + self.assertTrue(derivTest('e', 'bxr')) + def test_Jvec_bxr_Bform(self): + self.assertTrue(derivTest('b', 'bxr')) + def test_Jvec_byr_Eform(self): + self.assertTrue(derivTest('e', 'byr')) + def test_Jvec_byr_Bform(self): + self.assertTrue(derivTest('b', 'byr')) + def test_Jvec_bzr_Eform(self): + self.assertTrue(derivTest('e', 'bzr')) + def test_Jvec_bzr_Bform(self): + self.assertTrue(derivTest('b', 'bzr')) + def test_Jvec_bxi_Eform(self): + self.assertTrue(derivTest('e', 'bxi')) + def test_Jvec_bxi_Bform(self): + self.assertTrue(derivTest('b', 'bxi')) + def test_Jvec_byi_Eform(self): + self.assertTrue(derivTest('e', 'byi')) + def test_Jvec_byi_Bform(self): + self.assertTrue(derivTest('b', 'byi')) + def test_Jvec_bzi_Eform(self): + self.assertTrue(derivTest('e', 'bzi')) + def test_Jvec_bzi_Bform(self): + self.assertTrue(derivTest('b', 'bzi')) - def test_Jtvec_adjointTest_exr_Eform(self): - self.assertTrue(adjointTest('e', 'exr')) - def test_Jtvec_adjointTest_exr_Bform(self): - self.assertTrue(adjointTest('b', 'exr')) - def test_Jtvec_adjointTest_eyr_Eform(self): - self.assertTrue(adjointTest('e', 'eyr')) - def test_Jtvec_adjointTest_eyr_Bform(self): - self.assertTrue(adjointTest('b', 'eyr')) - def test_Jtvec_adjointTest_ezr_Eform(self): - self.assertTrue(adjointTest('e', 'ezr')) - def test_Jtvec_adjointTest_ezr_Bform(self): - self.assertTrue(adjointTest('b', 'ezr')) - def test_Jtvec_adjointTest_exi_Eform(self): - self.assertTrue(adjointTest('e', 'exi')) - def test_Jtvec_adjointTest_exi_Bform(self): - self.assertTrue(adjointTest('b', 'exi')) - def test_Jtvec_adjointTest_eyi_Eform(self): - self.assertTrue(adjointTest('e', 'eyi')) - def test_Jtvec_adjointTest_eyi_Bform(self): - self.assertTrue(adjointTest('b', 'eyi')) - def test_Jtvec_adjointTest_ezi_Eform(self): - self.assertTrue(adjointTest('e', 'ezi')) - def test_Jtvec_adjointTest_ezi_Bform(self): - self.assertTrue(adjointTest('b', 'ezi')) + def test_Jvec_jxr_Jform(self): + self.assertTrue(derivTest('j', 'jxr')) + def test_Jvec_jyr_Jform(self): + self.assertTrue(derivTest('j', 'jyr')) + def test_Jvec_jzr_Jform(self): + self.assertTrue(derivTest('j', 'jzr')) + def test_Jvec_jxi_Jform(self): + self.assertTrue(derivTest('j', 'jxi')) + def test_Jvec_jyi_Jform(self): + self.assertTrue(derivTest('j', 'jyi')) + def test_Jvec_jzi_Jform(self): + self.assertTrue(derivTest('j', 'jzi')) - def test_Jtvec_adjointTest_bxr_Eform(self): - self.assertTrue(adjointTest('e', 'bxr')) - def test_Jtvec_adjointTest_bxr_Bform(self): - self.assertTrue(adjointTest('b', 'bxr')) - def test_Jtvec_adjointTest_byr_Eform(self): - self.assertTrue(adjointTest('e', 'byr')) - def test_Jtvec_adjointTest_byr_Bform(self): - self.assertTrue(adjointTest('b', 'byr')) - def test_Jtvec_adjointTest_bzr_Eform(self): - self.assertTrue(adjointTest('e', 'bzr')) - def test_Jtvec_adjointTest_bzr_Bform(self): - self.assertTrue(adjointTest('b', 'bzr')) - def test_Jtvec_adjointTest_bxi_Eform(self): - self.assertTrue(adjointTest('e', 'bxi')) - def test_Jtvec_adjointTest_bxi_Bform(self): - self.assertTrue(adjointTest('b', 'bxi')) - def test_Jtvec_adjointTest_byi_Eform(self): - self.assertTrue(adjointTest('e', 'byi')) - def test_Jtvec_adjointTest_byi_Bform(self): - self.assertTrue(adjointTest('b', 'byi')) - def test_Jtvec_adjointTest_bzi_Eform(self): - self.assertTrue(adjointTest('e', 'bzi')) - def test_Jtvec_adjointTest_bzi_Bform(self): - self.assertTrue(adjointTest('b', 'bzi')) + def test_Jvec_hxr_Jform(self): + self.assertTrue(derivTest('j', 'hxr')) + def test_Jvec_hyr_Jform(self): + self.assertTrue(derivTest('j', 'hyr')) + def test_Jvec_hzr_Jform(self): + self.assertTrue(derivTest('j', 'hzr')) + def test_Jvec_hxi_Jform(self): + self.assertTrue(derivTest('j', 'hxi')) + def test_Jvec_hyi_Jform(self): + self.assertTrue(derivTest('j', 'hyi')) + def test_Jvec_hzi_Jform(self): + self.assertTrue(derivTest('j', 'hzi')) + + def test_Jvec_hxr_Hform(self): + self.assertTrue(derivTest('h', 'hxr')) + def test_Jvec_hyr_Hform(self): + self.assertTrue(derivTest('h', 'hyr')) + def test_Jvec_hzr_Hform(self): + self.assertTrue(derivTest('h', 'hzr')) + def test_Jvec_hxi_Hform(self): + self.assertTrue(derivTest('h', 'hxi')) + def test_Jvec_hyi_Hform(self): + self.assertTrue(derivTest('h', 'hyi')) + def test_Jvec_hzi_Hform(self): + self.assertTrue(derivTest('h', 'hzi')) + + def test_Jvec_hxr_Hform(self): + self.assertTrue(derivTest('h', 'jxr')) + def test_Jvec_hyr_Hform(self): + self.assertTrue(derivTest('h', 'jyr')) + def test_Jvec_hzr_Hform(self): + self.assertTrue(derivTest('h', 'jzr')) + def test_Jvec_hxi_Hform(self): + self.assertTrue(derivTest('h', 'jxi')) + def test_Jvec_hyi_Hform(self): + self.assertTrue(derivTest('h', 'jyi')) + def test_Jvec_hzi_Hform(self): + self.assertTrue(derivTest('h', 'jzi')) - def test_Jvec_jxr_Jform(self): - self.assertTrue(derivTest('j', 'jxr')) - def test_Jvec_jyr_Jform(self): - self.assertTrue(derivTest('j', 'jyr')) - def test_Jvec_jzr_Jform(self): - self.assertTrue(derivTest('j', 'jzr')) - def test_Jvec_jxi_Jform(self): - self.assertTrue(derivTest('j', 'jxi')) - def test_Jvec_jyi_Jform(self): - self.assertTrue(derivTest('j', 'jyi')) - def test_Jvec_jzi_Jform(self): - self.assertTrue(derivTest('j', 'jzi')) + if testAdjoint: - def test_Jvec_hxr_Jform(self): - self.assertTrue(derivTest('j', 'hxr')) - def test_Jvec_hyr_Jform(self): - self.assertTrue(derivTest('j', 'hyr')) - def test_Jvec_hzr_Jform(self): - self.assertTrue(derivTest('j', 'hzr')) - def test_Jvec_hxi_Jform(self): - self.assertTrue(derivTest('j', 'hxi')) - def test_Jvec_hyi_Jform(self): - self.assertTrue(derivTest('j', 'hyi')) - def test_Jvec_hzi_Jform(self): - self.assertTrue(derivTest('j', 'hzi')) + def test_Jtvec_adjointTest_exr_Eform(self): + self.assertTrue(adjointTest('e', 'exr')) + def test_Jtvec_adjointTest_exr_Bform(self): + self.assertTrue(adjointTest('b', 'exr')) + def test_Jtvec_adjointTest_eyr_Eform(self): + self.assertTrue(adjointTest('e', 'eyr')) + def test_Jtvec_adjointTest_eyr_Bform(self): + self.assertTrue(adjointTest('b', 'eyr')) + def test_Jtvec_adjointTest_ezr_Eform(self): + self.assertTrue(adjointTest('e', 'ezr')) + def test_Jtvec_adjointTest_ezr_Bform(self): + self.assertTrue(adjointTest('b', 'ezr')) + def test_Jtvec_adjointTest_exi_Eform(self): + self.assertTrue(adjointTest('e', 'exi')) + def test_Jtvec_adjointTest_exi_Bform(self): + self.assertTrue(adjointTest('b', 'exi')) + def test_Jtvec_adjointTest_eyi_Eform(self): + self.assertTrue(adjointTest('e', 'eyi')) + def test_Jtvec_adjointTest_eyi_Bform(self): + self.assertTrue(adjointTest('b', 'eyi')) + def test_Jtvec_adjointTest_ezi_Eform(self): + self.assertTrue(adjointTest('e', 'ezi')) + def test_Jtvec_adjointTest_ezi_Bform(self): + self.assertTrue(adjointTest('b', 'ezi')) - def test_Jvec_hxr_Hform(self): - self.assertTrue(derivTest('h', 'hxr')) - def test_Jvec_hyr_Hform(self): - self.assertTrue(derivTest('h', 'hyr')) - def test_Jvec_hzr_Hform(self): - self.assertTrue(derivTest('h', 'hzr')) - def test_Jvec_hxi_Hform(self): - self.assertTrue(derivTest('h', 'hxi')) - def test_Jvec_hyi_Hform(self): - self.assertTrue(derivTest('h', 'hyi')) - def test_Jvec_hzi_Hform(self): - self.assertTrue(derivTest('h', 'hzi')) + def test_Jtvec_adjointTest_bxr_Eform(self): + self.assertTrue(adjointTest('e', 'bxr')) + def test_Jtvec_adjointTest_bxr_Bform(self): + self.assertTrue(adjointTest('b', 'bxr')) + def test_Jtvec_adjointTest_byr_Eform(self): + self.assertTrue(adjointTest('e', 'byr')) + def test_Jtvec_adjointTest_byr_Bform(self): + self.assertTrue(adjointTest('b', 'byr')) + def test_Jtvec_adjointTest_bzr_Eform(self): + self.assertTrue(adjointTest('e', 'bzr')) + def test_Jtvec_adjointTest_bzr_Bform(self): + self.assertTrue(adjointTest('b', 'bzr')) + def test_Jtvec_adjointTest_bxi_Eform(self): + self.assertTrue(adjointTest('e', 'bxi')) + def test_Jtvec_adjointTest_bxi_Bform(self): + self.assertTrue(adjointTest('b', 'bxi')) + def test_Jtvec_adjointTest_byi_Eform(self): + self.assertTrue(adjointTest('e', 'byi')) + def test_Jtvec_adjointTest_byi_Bform(self): + self.assertTrue(adjointTest('b', 'byi')) + def test_Jtvec_adjointTest_bzi_Eform(self): + self.assertTrue(adjointTest('e', 'bzi')) + def test_Jtvec_adjointTest_bzi_Bform(self): + self.assertTrue(adjointTest('b', 'bzi')) - def test_Jvec_hxr_Hform(self): - self.assertTrue(derivTest('h', 'jxr')) - def test_Jvec_hyr_Hform(self): - self.assertTrue(derivTest('h', 'jyr')) - def test_Jvec_hzr_Hform(self): - self.assertTrue(derivTest('h', 'jzr')) - def test_Jvec_hxi_Hform(self): - self.assertTrue(derivTest('h', 'jxi')) - def test_Jvec_hyi_Hform(self): - self.assertTrue(derivTest('h', 'jyi')) - def test_Jvec_hzi_Hform(self): - self.assertTrue(derivTest('h', 'jzi')) + def test_Jtvec_adjointTest_jxr_Jform(self): + self.assertTrue(adjointTest('j', 'jxr')) + def test_Jtvec_adjointTest_jyr_Jform(self): + self.assertTrue(adjointTest('j', 'jyr')) + def test_Jtvec_adjointTest_jzr_Jform(self): + self.assertTrue(adjointTest('j', 'jzr')) + def test_Jtvec_adjointTest_jxi_Jform(self): + self.assertTrue(adjointTest('j', 'jxi')) + def test_Jtvec_adjointTest_jyi_Jform(self): + self.assertTrue(adjointTest('j', 'jyi')) + def test_Jtvec_adjointTest_jzi_Jform(self): + self.assertTrue(adjointTest('j', 'jzi')) - def test_Jtvec_adjointTest_jxr_Jform(self): - self.assertTrue(adjointTest('j', 'jxr')) - def test_Jtvec_adjointTest_jyr_Jform(self): - self.assertTrue(adjointTest('j', 'jyr')) - def test_Jtvec_adjointTest_jzr_Jform(self): - self.assertTrue(adjointTest('j', 'jzr')) - def test_Jtvec_adjointTest_jxi_Jform(self): - self.assertTrue(adjointTest('j', 'jxi')) - def test_Jtvec_adjointTest_jyi_Jform(self): - self.assertTrue(adjointTest('j', 'jyi')) - def test_Jtvec_adjointTest_jzi_Jform(self): - self.assertTrue(adjointTest('j', 'jzi')) + def test_Jtvec_adjointTest_hxr_Jform(self): + self.assertTrue(adjointTest('j', 'hxr')) + def test_Jtvec_adjointTest_hyr_Jform(self): + self.assertTrue(adjointTest('j', 'hyr')) + def test_Jtvec_adjointTest_hzr_Jform(self): + self.assertTrue(adjointTest('j', 'hzr')) + def test_Jtvec_adjointTest_hxi_Jform(self): + self.assertTrue(adjointTest('j', 'hxi')) + def test_Jtvec_adjointTest_hyi_Jform(self): + self.assertTrue(adjointTest('j', 'hyi')) + def test_Jtvec_adjointTest_hzi_Jform(self): + self.assertTrue(adjointTest('j', 'hzi')) - def test_Jtvec_adjointTest_hxr_Jform(self): - self.assertTrue(adjointTest('j', 'hxr')) - def test_Jtvec_adjointTest_hyr_Jform(self): - self.assertTrue(adjointTest('j', 'hyr')) - def test_Jtvec_adjointTest_hzr_Jform(self): - self.assertTrue(adjointTest('j', 'hzr')) - def test_Jtvec_adjointTest_hxi_Jform(self): - self.assertTrue(adjointTest('j', 'hxi')) - def test_Jtvec_adjointTest_hyi_Jform(self): - self.assertTrue(adjointTest('j', 'hyi')) - def test_Jtvec_adjointTest_hzi_Jform(self): - self.assertTrue(adjointTest('j', 'hzi')) + def test_Jtvec_adjointTest_hxr_Hform(self): + self.assertTrue(adjointTest('h', 'hxr')) + def test_Jtvec_adjointTest_hyr_Hform(self): + self.assertTrue(adjointTest('h', 'hyr')) + def test_Jtvec_adjointTest_hzr_Hform(self): + self.assertTrue(adjointTest('h', 'hzr')) + def test_Jtvec_adjointTest_hxi_Hform(self): + self.assertTrue(adjointTest('h', 'hxi')) + def test_Jtvec_adjointTest_hyi_Hform(self): + self.assertTrue(adjointTest('h', 'hyi')) + def test_Jtvec_adjointTest_hzi_Hform(self): + self.assertTrue(adjointTest('h', 'hzi')) - def test_Jtvec_adjointTest_hxr_Hform(self): - self.assertTrue(adjointTest('h', 'hxr')) - def test_Jtvec_adjointTest_hyr_Hform(self): - self.assertTrue(adjointTest('h', 'hyr')) - def test_Jtvec_adjointTest_hzr_Hform(self): - self.assertTrue(adjointTest('h', 'hzr')) - def test_Jtvec_adjointTest_hxi_Hform(self): - self.assertTrue(adjointTest('h', 'hxi')) - def test_Jtvec_adjointTest_hyi_Hform(self): - self.assertTrue(adjointTest('h', 'hyi')) - def test_Jtvec_adjointTest_hzi_Hform(self): - self.assertTrue(adjointTest('h', 'hzi')) - - def test_Jtvec_adjointTest_hxr_Hform(self): - self.assertTrue(adjointTest('h', 'jxr')) - def test_Jtvec_adjointTest_hyr_Hform(self): - self.assertTrue(adjointTest('h', 'jyr')) - def test_Jtvec_adjointTest_hzr_Hform(self): - self.assertTrue(adjointTest('h', 'jzr')) - def test_Jtvec_adjointTest_hxi_Hform(self): - self.assertTrue(adjointTest('h', 'jxi')) - def test_Jtvec_adjointTest_hyi_Hform(self): - self.assertTrue(adjointTest('h', 'jyi')) - def test_Jtvec_adjointTest_hzi_Hform(self): - self.assertTrue(adjointTest('h', 'jzi')) + def test_Jtvec_adjointTest_hxr_Hform(self): + self.assertTrue(adjointTest('h', 'jxr')) + def test_Jtvec_adjointTest_hyr_Hform(self): + self.assertTrue(adjointTest('h', 'jyr')) + def test_Jtvec_adjointTest_hzr_Hform(self): + self.assertTrue(adjointTest('h', 'jzr')) + def test_Jtvec_adjointTest_hxi_Hform(self): + self.assertTrue(adjointTest('h', 'jxi')) + def test_Jtvec_adjointTest_hyi_Hform(self): + self.assertTrue(adjointTest('h', 'jyi')) + def test_Jtvec_adjointTest_hzi_Hform(self): + self.assertTrue(adjointTest('h', 'jzi')) - def test_EB_CrossCheck_exr_Eform(self): - self.assertTrue(crossCheckTest('e', 'exr')) - def test_EB_CrossCheck_eyr_Eform(self): - self.assertTrue(crossCheckTest('e', 'eyr')) - def test_EB_CrossCheck_ezr_Eform(self): - self.assertTrue(crossCheckTest('e', 'ezr')) - def test_EB_CrossCheck_exi_Eform(self): - self.assertTrue(crossCheckTest('e', 'exi')) - def test_EB_CrossCheck_eyi_Eform(self): - self.assertTrue(crossCheckTest('e', 'eyi')) - def test_EB_CrossCheck_ezi_Eform(self): - self.assertTrue(crossCheckTest('e', 'ezi')) + if testCrossCheck: + def test_EB_CrossCheck_exr_Eform(self): + self.assertTrue(crossCheckTest('e', 'exr')) + def test_EB_CrossCheck_eyr_Eform(self): + self.assertTrue(crossCheckTest('e', 'eyr')) + def test_EB_CrossCheck_ezr_Eform(self): + self.assertTrue(crossCheckTest('e', 'ezr')) + def test_EB_CrossCheck_exi_Eform(self): + self.assertTrue(crossCheckTest('e', 'exi')) + def test_EB_CrossCheck_eyi_Eform(self): + self.assertTrue(crossCheckTest('e', 'eyi')) + def test_EB_CrossCheck_ezi_Eform(self): + self.assertTrue(crossCheckTest('e', 'ezi')) - def test_EB_CrossCheck_bxr_Eform(self): - self.assertTrue(crossCheckTest('e', 'bxr')) - def test_EB_CrossCheck_byr_Eform(self): - self.assertTrue(crossCheckTest('e', 'byr')) - # def test_EB_CrossCheck_bzr_Eform(self): - # self.assertTrue(crossCheckTest('e', 'bzr')) # Doesn't make sense to test this for p-s approach - def test_EB_CrossCheck_bxi_Eform(self): - self.assertTrue(crossCheckTest('e', 'bxi')) - def test_EB_CrossCheck_byi_Eform(self): - self.assertTrue(crossCheckTest('e', 'byi')) - def test_EB_CrossCheck_bzi_Eform(self): - self.assertTrue(crossCheckTest('e', 'bzi')) + def test_EB_CrossCheck_bxr_Eform(self): + self.assertTrue(crossCheckTest('e', 'bxr')) + def test_EB_CrossCheck_byr_Eform(self): + self.assertTrue(crossCheckTest('e', 'byr')) + # def test_EB_CrossCheck_bzr_Eform(self): + # self.assertTrue(crossCheckTest('e', 'bzr')) # Doesn't make sense to test this for p-s approach + def test_EB_CrossCheck_bxi_Eform(self): + self.assertTrue(crossCheckTest('e', 'bxi')) + def test_EB_CrossCheck_byi_Eform(self): + self.assertTrue(crossCheckTest('e', 'byi')) + def test_EB_CrossCheck_bzi_Eform(self): + self.assertTrue(crossCheckTest('e', 'bzi')) - def test_HJ_CrossCheck_jxr_Jform(self): - self.assertTrue(crossCheckTest('j', 'jxr')) - def test_HJ_CrossCheck_jyr_Jform(self): - self.assertTrue(crossCheckTest('j', 'jyr')) - def test_HJ_CrossCheck_jzr_Jform(self): - self.assertTrue(crossCheckTest('j', 'jzr')) - def test_HJ_CrossCheck_jxi_Jform(self): - self.assertTrue(crossCheckTest('j', 'jxi')) - def test_HJ_CrossCheck_jyi_Jform(self): - self.assertTrue(crossCheckTest('j', 'jyi')) - def test_HJ_CrossCheck_jzi_Jform(self): - self.assertTrue(crossCheckTest('j', 'jzi')) + def test_HJ_CrossCheck_jxr_Jform(self): + self.assertTrue(crossCheckTest('j', 'jxr')) + def test_HJ_CrossCheck_jyr_Jform(self): + self.assertTrue(crossCheckTest('j', 'jyr')) + def test_HJ_CrossCheck_jzr_Jform(self): + self.assertTrue(crossCheckTest('j', 'jzr')) + def test_HJ_CrossCheck_jxi_Jform(self): + self.assertTrue(crossCheckTest('j', 'jxi')) + def test_HJ_CrossCheck_jyi_Jform(self): + self.assertTrue(crossCheckTest('j', 'jyi')) + def test_HJ_CrossCheck_jzi_Jform(self): + self.assertTrue(crossCheckTest('j', 'jzi')) - def test_HJ_CrossCheck_hxr_Jform(self): - self.assertTrue(crossCheckTest('j', 'hxr')) - def test_HJ_CrossCheck_hyr_Jform(self): - self.assertTrue(crossCheckTest('j', 'hyr')) - # def test_HJ_CrossCheck_hzr_Jform(self): - # self.assertTrue(crossCheckTest('j', 'hzr')) # Doesn't make sense to test this for p-s approach - def test_HJ_CrossCheck_hxi_Jform(self): - self.assertTrue(crossCheckTest('j', 'hxi')) - def test_HJ_CrossCheck_hyi_Jform(self): - self.assertTrue(crossCheckTest('j', 'hyi')) - def test_HJ_CrossCheck_hzi_Jform(self): - self.assertTrue(crossCheckTest('j', 'hzi')) + def test_HJ_CrossCheck_hxr_Jform(self): + self.assertTrue(crossCheckTest('j', 'hxr')) + def test_HJ_CrossCheck_hyr_Jform(self): + self.assertTrue(crossCheckTest('j', 'hyr')) + # def test_HJ_CrossCheck_hzr_Jform(self): + # self.assertTrue(crossCheckTest('j', 'hzr')) # Doesn't make sense to test this for p-s approach + def test_HJ_CrossCheck_hxi_Jform(self): + self.assertTrue(crossCheckTest('j', 'hxi')) + def test_HJ_CrossCheck_hyi_Jform(self): + self.assertTrue(crossCheckTest('j', 'hyi')) + def test_HJ_CrossCheck_hzi_Jform(self): + self.assertTrue(crossCheckTest('j', 'hzi')) if __name__ == '__main__': unittest.main() diff --git a/simpegEM/Utils/EMUtils.py b/simpegEM/Utils/EMUtils.py new file mode 100644 index 00000000..9d80728f --- /dev/null +++ b/simpegEM/Utils/EMUtils.py @@ -0,0 +1,5 @@ +import numpy as np + +def omega(freq): + """Change frequency to angular frequency, omega""" + return 2.*np.pi*freq \ No newline at end of file diff --git a/simpegEM/Utils/__init__.py b/simpegEM/Utils/__init__.py index 2e736a8c..608ff235 100644 --- a/simpegEM/Utils/__init__.py +++ b/simpegEM/Utils/__init__.py @@ -1,3 +1,4 @@ # import Sources # import Ana # import Solver +import EMUtils \ No newline at end of file diff --git a/simpegEM/__init__.py b/simpegEM/__init__.py index 90a1dcf7..381c18c8 100644 --- a/simpegEM/__init__.py +++ b/simpegEM/__init__.py @@ -4,3 +4,4 @@ import FDEM import Base import Sources import Analytics +import Utils