diff --git a/simpegEM/TDEM/BaseTDEM.py b/simpegEM/TDEM/BaseTDEM.py index 9c680158..c3663c3c 100644 --- a/simpegEM/TDEM/BaseTDEM.py +++ b/simpegEM/TDEM/BaseTDEM.py @@ -1,41 +1,11 @@ -from SimPEG import Utils, Solver -from SimPEG.Data import BaseData +from SimPEG import Solver from SimPEG.Problem import BaseProblem from simpegEM.Utils import Sources +from FieldsTDEM import FieldsTDEM from scipy.constants import mu_0 -from SimPEG.Utils import sdiag, mkvc +from SimPEG.Utils import sdiag import numpy as np -class DataTDEM1D(BaseData): - """ - docstring for DataTDEM1D - """ - - txLoc = None #: txLoc - txType = None #: txType - rxLoc = None #: rxLoc - rxType = None #: rxType - timeCh = None #: timeCh - - def __init__(self, **kwargs): - BaseData.__init__(self, **kwargs) - Utils.setKwargs(self, **kwargs) - - def projectFields(self, u): - return self.Qrx.dot(u.b[:,:,0].T) - - #################################################### - # Interpolation Matrices - #################################################### - - @property - def Qrx(self): - if self._Qrx is None: - if self.rxType == 'bz': - locType = 'fz' - self._Qrx = self.prob.mesh.getInterpolationMat(self.rxLoc, locType=locType) - return self._Qrx - _Qrx = None class MixinInitialFieldCalc(object): """docstring for MixinInitialFieldCalc""" @@ -181,70 +151,3 @@ class ProblemBaseTDEM(MixinTimeStuff, MixinInitialFieldCalc, BaseProblem): newFields = CalcFields(sol, self.solType, tInd) F.update(newFields, tInd) return F - - - -class FieldsTDEM(object): - """docstring for FieldsTDEM""" - - phi0 = None #: Initial electric potential - A0 = None #: Initial magnetic vector potential - e0 = None #: Initial electric field - b0 = None #: Initial magnetic flux density - j0 = None #: Initial current density - h0 = None #: Initial magnetic field - - phi = None #: Electric potential - A = None #: Magnetic vector potential - e = None #: Electric field - b = None #: Magnetic flux density - j = None #: Current density - h = None #: Magnetic field - - def __init__(self, mesh, nTx, nTimes, store): - - self.nTimes = nTimes #: Number of times - self.nTx = nTx #: Number of transmitters - self.mesh = mesh - - def update(self, newFields, tInd): - self.set_b(newFields['b'], tInd) - self.set_e(newFields['e'], tInd) - - def fieldVec(self): - u = np.ndarray((0,self.nTx)) - for i in range(self.nTimes): - u = np.r_[u, self.get_b(i), self.get_e(i)] - return u - - #################################################### - # Get Methods - #################################################### - - def get_b(self, ind): - if ind == -1: - return self.b0 - else: - return self.b[ind,:,:] - - def get_e(self, ind): - if ind == -1: - return self.e0 - else: - return self.e[ind,:,:] - - #################################################### - # Set Methods - #################################################### - - def set_b(self, b, ind): - if self.b is None: - self.b = np.zeros((self.nTimes, np.sum(self.mesh.nF), self.nTx)) - self.b[:] = np.nan - self.b[ind,:,:] = b - - def set_e(self, e, ind): - if self.e is None: - self.e = np.zeros((self.nTimes, np.sum(self.mesh.nE), self.nTx)) - self.e[:] = np.nan - self.e[ind,:,:] = e diff --git a/simpegEM/TDEM/DataTDEM.py b/simpegEM/TDEM/DataTDEM.py new file mode 100644 index 00000000..b69f0c4a --- /dev/null +++ b/simpegEM/TDEM/DataTDEM.py @@ -0,0 +1,33 @@ +from SimPEG import Utils +from SimPEG.Data import BaseData + +class DataTDEM1D(BaseData): + """ + docstring for DataTDEM1D + """ + + txLoc = None #: txLoc + txType = None #: txType + rxLoc = None #: rxLoc + rxType = None #: rxType + timeCh = None #: timeCh + + def __init__(self, **kwargs): + BaseData.__init__(self, **kwargs) + Utils.setKwargs(self, **kwargs) + + def projectFields(self, u): + return self.Qrx.dot(u.b[:,:,0].T) + + #################################################### + # Interpolation Matrices + #################################################### + + @property + def Qrx(self): + if self._Qrx is None: + if self.rxType == 'bz': + locType = 'fz' + self._Qrx = self.prob.mesh.getInterpolationMat(self.rxLoc, locType=locType) + return self._Qrx + _Qrx = None diff --git a/simpegEM/TDEM/FieldsTDEM.py b/simpegEM/TDEM/FieldsTDEM.py new file mode 100644 index 00000000..0a64881a --- /dev/null +++ b/simpegEM/TDEM/FieldsTDEM.py @@ -0,0 +1,67 @@ +import numpy as np + + +class FieldsTDEM(object): + """docstring for FieldsTDEM""" + + phi0 = None #: Initial electric potential + A0 = None #: Initial magnetic vector potential + e0 = None #: Initial electric field + b0 = None #: Initial magnetic flux density + j0 = None #: Initial current density + h0 = None #: Initial magnetic field + + phi = None #: Electric potential + A = None #: Magnetic vector potential + e = None #: Electric field + b = None #: Magnetic flux density + j = None #: Current density + h = None #: Magnetic field + + def __init__(self, mesh, nTx, nTimes, store): + + self.nTimes = nTimes #: Number of times + self.nTx = nTx #: Number of transmitters + self.mesh = mesh + + def update(self, newFields, tInd): + self.set_b(newFields['b'], tInd) + self.set_e(newFields['e'], tInd) + + def fieldVec(self): + u = np.ndarray((0,self.nTx)) + for i in range(self.nTimes): + u = np.r_[u, self.get_b(i), self.get_e(i)] + return u + + #################################################### + # Get Methods + #################################################### + + def get_b(self, ind): + if ind == -1: + return self.b0 + else: + return self.b[ind,:,:] + + def get_e(self, ind): + if ind == -1: + return self.e0 + else: + return self.e[ind,:,:] + + #################################################### + # Set Methods + #################################################### + + def set_b(self, b, ind): + if self.b is None: + self.b = np.zeros((self.nTimes, np.sum(self.mesh.nF), self.nTx)) + self.b[:] = np.nan + self.b[ind,:,:] = b + + def set_e(self, e, ind): + if self.e is None: + self.e = np.zeros((self.nTimes, np.sum(self.mesh.nE), self.nTx)) + self.e[:] = np.nan + self.e[ind,:,:] = e \ No newline at end of file diff --git a/simpegEM/TDEM/TDEM_b.py b/simpegEM/TDEM/TDEM_b.py index 9d28b6db..3ea90fb7 100644 --- a/simpegEM/TDEM/TDEM_b.py +++ b/simpegEM/TDEM/TDEM_b.py @@ -1,5 +1,5 @@ from BaseTDEM import ProblemBaseTDEM -from BaseTDEM import FieldsTDEM +from FieldsTDEM import FieldsTDEM import numpy as np class ProblemTDEM_b(ProblemBaseTDEM): diff --git a/simpegEM/TDEM/__init__.py b/simpegEM/TDEM/__init__.py index 8d01b56a..f4a04b7f 100644 --- a/simpegEM/TDEM/__init__.py +++ b/simpegEM/TDEM/__init__.py @@ -1,2 +1,4 @@ -from BaseTDEM import DataTDEM1D, ProblemBaseTDEM +from BaseTDEM import ProblemBaseTDEM +from DataTDEM import DataTDEM1D +from FieldsTDEM import FieldsTDEM from TDEM_b import ProblemTDEM_b \ No newline at end of file