diff --git a/SimPEG/EM/FDEM/ProblemFDEM.py b/SimPEG/EM/FDEM/ProblemFDEM.py index 026230c6..2aed1d91 100644 --- a/SimPEG/EM/FDEM/ProblemFDEM.py +++ b/SimPEG/EM/FDEM/ProblemFDEM.py @@ -87,7 +87,7 @@ class BaseFDEMProblem(BaseEMProblem): du_dm_v = Ainv * ( - dA_dm_v + dRHS_dm_v ) for rx in src.rxList: - df_dmFun = getattr(f, '_%sDeriv'%rx.projField, None) + df_dmFun = getattr(f, '_{0}Deriv'.format(rx.projField), None) df_dm_v = df_dmFun(src, du_dm_v, v, adjoint=False) Jv[src, rx] = rx.evalDeriv(src, self.mesh, f, df_dm_v) Ainv.clean() @@ -125,7 +125,7 @@ class BaseFDEMProblem(BaseEMProblem): for rx in src.rxList: PTv = rx.evalDeriv(src, self.mesh, f, v[src, rx], adjoint=True) # wrt f, need possibility wrt m - df_duTFun = getattr(f, '_%sDeriv'%rx.projField, None) + df_duTFun = getattr(f, '_{0}Deriv'.format(rx.projField), None) df_duT, df_dmT = df_duTFun(src, None, PTv, adjoint=True) ATinvdf_duT = ATinv * df_duT @@ -137,9 +137,9 @@ class BaseFDEMProblem(BaseEMProblem): df_dmT = df_dmT + du_dmT # TODO: this should be taken care of by the reciever? - if rx.real_or_imag is 'real': + if rx.component is 'real': Jtv += np.array(df_dmT, dtype=complex).real - elif rx.real_or_imag is 'imag': + elif rx.component is 'imag': Jtv += - np.array(df_dmT, dtype=complex).real else: raise Exception('Must be real or imag') diff --git a/SimPEG/EM/FDEM/RxFDEM.py b/SimPEG/EM/FDEM/RxFDEM.py index ef58d807..53d6c722 100644 --- a/SimPEG/EM/FDEM/RxFDEM.py +++ b/SimPEG/EM/FDEM/RxFDEM.py @@ -7,15 +7,15 @@ class BaseRx(SimPEG.Survey.BaseRx): :param numpy.ndarray locs: receiver locations (ie. :code:`np.r_[x,y,z]`) :param string orientation: receiver orientation 'x', 'y' or 'z' - :param string real_or_imag: real or imaginary component 'real' or 'imag' + :param string component: real or imaginary component 'real' or 'imag' """ - def __init__(self, locs, orientation=None, real_or_imag=None): + def __init__(self, locs, orientation=None, component=None): assert(orientation in ['x','y','z']), "Orientation %s not known. Orientation must be in 'x', 'y', 'z'. Arbitrary orientations have not yet been implemented."%orientation - assert(real_or_imag in ['real', 'imag']), "'real_or_imag' must be 'real' or 'imag', not %s"%real_or_imag + assert(component in ['real', 'imag']), "'component' must be 'real' or 'imag', not %s"%component self.projComp = orientation - self.real_or_imag = real_or_imag + self.component = component SimPEG.Survey.BaseRx.__init__(self, locs, rxType=None) #TODO: remove rxType from baseRx @@ -36,7 +36,7 @@ class BaseRx(SimPEG.Survey.BaseRx): P = self.getP(mesh, self.projGLoc(f)) f_part_complex = f[src, self.projField] - f_part = getattr(f_part_complex, self.real_or_imag) # get the real or imag component + f_part = getattr(f_part_complex, self.component) # get the real or imag component return P*f_part @@ -56,13 +56,13 @@ class BaseRx(SimPEG.Survey.BaseRx): if not adjoint: Pv_complex = P * v - Pv = getattr(Pv_complex, self.real_or_imag) + Pv = getattr(Pv_complex, self.component) elif adjoint: Pv_real = P.T * v - if self.real_or_imag == 'imag': + if self.component == 'imag': Pv = 1j*Pv_real - elif self.real_or_imag == 'real': + elif self.component == 'real': Pv = Pv_real.astype(complex) else: raise NotImplementedError('must be real or imag') @@ -70,57 +70,57 @@ class BaseRx(SimPEG.Survey.BaseRx): return Pv -class eField(BaseRx): +class Point_e(BaseRx): """ Electric field FDEM receiver :param numpy.ndarray locs: receiver locations (ie. :code:`np.r_[x,y,z]`) :param string orientation: receiver orientation 'x', 'y' or 'z' - :param string real_or_imag: real or imaginary component 'real' or 'imag' + :param string component: real or imaginary component 'real' or 'imag' """ - def __init__(self, locs, orientation=None, real_or_imag=None): + def __init__(self, locs, orientation=None, component=None): self.projField = 'e' - BaseRx.__init__(self, locs, orientation, real_or_imag) + super(Point_e, self).__init__(locs, orientation, component) -class bField(BaseRx): +class Point_b(BaseRx): """ Magnetic flux FDEM receiver :param numpy.ndarray locs: receiver locations (ie. :code:`np.r_[x,y,z]`) :param string orientation: receiver orientation 'x', 'y' or 'z' - :param string real_or_imag: real or imaginary component 'real' or 'imag' + :param string component: real or imaginary component 'real' or 'imag' """ - def __init__(self, locs, orientation=None, real_or_imag=None): + def __init__(self, locs, orientation=None, component=None): self.projField = 'b' - BaseRx.__init__(self, locs, orientation, real_or_imag) + super(Point_b, self).__init__(locs, orientation, component) -class hField(BaseRx): +class Point_h(BaseRx): """ Magnetic field FDEM receiver :param numpy.ndarray locs: receiver locations (ie. :code:`np.r_[x,y,z]`) :param string orientation: receiver orientation 'x', 'y' or 'z' - :param string real_or_imag: real or imaginary component 'real' or 'imag' + :param string component: real or imaginary component 'real' or 'imag' """ - def __init__(self, locs, orientation=None, real_or_imag=None): + def __init__(self, locs, orientation=None, component=None): self.projField = 'h' - BaseRx.__init__(self, locs, orientation, real_or_imag) + super(Point_h, self).__init__(locs, orientation, component) -class jField(BaseRx): +class Point_j(BaseRx): """ Current density FDEM receiver :param numpy.ndarray locs: receiver locations (ie. :code:`np.r_[x,y,z]`) :param string orientation: receiver orientation 'x', 'y' or 'z' - :param string real_or_imag: real or imaginary component 'real' or 'imag' + :param string component: real or imaginary component 'real' or 'imag' """ - def __init__(self, locs, orientation=None, real_or_imag=None): + def __init__(self, locs, orientation=None, component=None): self.projField = 'j' - BaseRx.__init__(self, locs, orientation, real_or_imag) + super(Point_j, self).__init__(locs, orientation, component) diff --git a/SimPEG/EM/Utils/testingUtils.py b/SimPEG/EM/Utils/testingUtils.py index c3fc50d2..22c925b6 100644 --- a/SimPEG/EM/Utils/testingUtils.py +++ b/SimPEG/EM/Utils/testingUtils.py @@ -26,7 +26,7 @@ def getFDEMProblem(fdemType, comp, SrcList, freq, useMu=False, verbose=False): x = np.array([np.linspace(-5.*cs,-2.*cs,3),np.linspace(5.*cs,2.*cs,3)]) + cs/4. #don't sample right by the source, slightly off alignment from either staggered grid XYZ = Utils.ndgrid(x,x,np.linspace(-2.*cs,2.*cs,5)) - Rx0 = getattr(EM.FDEM.Rx, comp[0] + 'Field') + Rx0 = getattr(EM.FDEM.Rx, 'Point_' + comp[0]) if comp[2] == 'r': real_or_imag = 'real' elif comp[2] == 'i': diff --git a/SimPEG/Examples/EM_FDEM_1D_Inversion.py b/SimPEG/Examples/EM_FDEM_1D_Inversion.py index 0a5c59a0..4275903d 100644 --- a/SimPEG/Examples/EM_FDEM_1D_Inversion.py +++ b/SimPEG/Examples/EM_FDEM_1D_Inversion.py @@ -43,7 +43,7 @@ def run(plotIt=True): rxOffset=10. - bzi = EM.FDEM.Rx.bField(np.array([[rxOffset, 0., 1e-3]]), orientation='z', real_or_imag='imag') + bzi = EM.FDEM.Rx.Point_b(np.array([[rxOffset, 0., 1e-3]]), orientation='z', component='imag') freqs = np.logspace(1,3,10) srcLoc = np.array([0., 0., 10.]) diff --git a/tests/em/fdem/forward/test_FDEM_analytics.py b/tests/em/fdem/forward/test_FDEM_analytics.py index 0ea43ca7..6f283666 100644 --- a/tests/em/fdem/forward/test_FDEM_analytics.py +++ b/tests/em/fdem/forward/test_FDEM_analytics.py @@ -28,7 +28,7 @@ class FDEM_analyticTests(unittest.TestCase): x = np.linspace(-10,10,5) XYZ = Utils.ndgrid(x,np.r_[0],np.r_[0]) - rxList = EM.FDEM.Rx.eField(XYZ, orientation='x', real_or_imag='imag') + rxList = EM.FDEM.Rx.Point_e(XYZ, orientation='x', component='imag') Src0 = EM.FDEM.Src.MagDipole([rxList],loc=np.r_[0.,0.,0.], freq=freq) survey = EM.FDEM.Survey([Src0])