diff --git a/SimPEG/EM/FDEM/FDEM.py b/SimPEG/EM/FDEM/FDEM.py index caca7602..1ac494b9 100644 --- a/SimPEG/EM/FDEM/FDEM.py +++ b/SimPEG/EM/FDEM/FDEM.py @@ -167,6 +167,7 @@ class BaseFDEMProblem(BaseEMProblem): for i, src in enumerate(Srcs): smi, sei = src.eval(self) + #Why are you adding? s_m[:,i] = s_m[:,i] + smi s_e[:,i] = s_e[:,i] + sei diff --git a/SimPEG/EM/Static/DC/ProblemDC.py b/SimPEG/EM/Static/DC/ProblemDC.py index f8f80234..f712e036 100644 --- a/SimPEG/EM/Static/DC/ProblemDC.py +++ b/SimPEG/EM/Static/DC/ProblemDC.py @@ -2,6 +2,7 @@ from SimPEG import Problem from SimPEG.EM.Base import BaseEMProblem from SurveyDC import Survey from FieldsDC import Fields, Fields_CC +import numpy as np class BaseDCProblem(BaseEMProblem): @@ -29,9 +30,28 @@ class BaseDCProblem(BaseEMProblem): """ takes concept of source and turns it into a matrix """ - raise NotImplementedError + """ + Evaluates the sources for a given frequency and puts them in matrix form + :param float freq: Frequency + :rtype: (numpy.ndarray, numpy.ndarray) + :return: s_m, s_e (nE or nF, nSrc) + """ + Srcs = self.survey.srcList + + if self._formulation is 'EB': + n = self.mesh.nN + # return NotImplementedError + + elif self._formulation is 'HJ': + n = self.mesh.nC + + q = np.zeros((n, len(Srcs))) + + for i, src in enumerate(Srcs): + q[:,i] = src.eval(self) + return q class Problem3D_CC(BaseDCProblem): @@ -63,6 +83,8 @@ class Problem3D_CC(BaseDCProblem): return V.T * A return A + def getADeriv(): + raise NotImplementedError def getRHS(self): """ @@ -76,4 +98,8 @@ class Problem3D_CC(BaseDCProblem): return self.Vol.T * RHS return RHS + def getRHSDeriv(): + raise NotImplementedError + + diff --git a/SimPEG/EM/Static/DC/RxDC.py b/SimPEG/EM/Static/DC/RxDC.py index f9a2546d..9fbd05cb 100644 --- a/SimPEG/EM/Static/DC/RxDC.py +++ b/SimPEG/EM/Static/DC/RxDC.py @@ -3,7 +3,7 @@ import SimPEG from SimPEG.Utils import Zero, closestPoints class BaseRx(SimPEG.Survey.BaseRx): - loc = None + locs = None rxType = None knownRxTypes = { @@ -16,8 +16,9 @@ class BaseRx(SimPEG.Survey.BaseRx): 'jz':['j','z'], } - def __init__(self, **kwargs): - SimPEG.Survey.BaseRx.__init__(locs, rxType, **kwargs) + def __init__(self, locs, rxType, **kwargs): + SimPEG.Survey.BaseRx.__init__(self, locs, rxType, **kwargs) + @property def projField(self): @@ -28,11 +29,11 @@ class BaseRx(SimPEG.Survey.BaseRx): """Grid Location projection (e.g. Ex Fy ...)""" comp = self.knownRxTypes[self.rxType][1] if comp is not None: - return f._GLoc(self.rxType[0]) + comp - return f._GLoc(self.rxType[0]) + return f._GLoc(self.rxType) + comp + return f._GLoc(self.rxType) def eval(self, src, mesh, f): - P = self.getP(self.prob.mesh) + P = self.getP(mesh, self.projGLoc(f)) return P*f[src, self.projField] # DC.Rx.Dipole(locs) @@ -40,24 +41,26 @@ class Dipole(BaseRx): def __init__(self, locsM, locsN, rxType = 'phi', **kwargs): assert locsM.shape == locsN.shape, 'locsM and locsN need to be the same size' - self.locs = [locsM, locsN] - BaseRx.__init__(self) + locs = [locsM, locsN] + # We may not need this ... + BaseRx.__init__(self, locs, rxType) @property def nD(self): """Number of data in the receiver.""" return self.locs[0].shape[0] - def getP(self,mesh): + def getP(self, mesh, Gloc): if mesh in self._Ps: return self._Ps[mesh] - P0 = mesh.getInterpolationMat(self.locs[0], self.projGLoc) - P1 = mesh.getInterpolationMat(self.locs[1], self.projGLoc) + P0 = mesh.getInterpolationMat(self.locs[0], Gloc) + P1 = mesh.getInterpolationMat(self.locs[1], Gloc) P = P0 - P1 if self.storeProjections: self._Ps[mesh] = P + return P diff --git a/SimPEG/EM/Static/DC/SrcDC.py b/SimPEG/EM/Static/DC/SrcDC.py index 61f490fa..cc855118 100644 --- a/SimPEG/EM/Static/DC/SrcDC.py +++ b/SimPEG/EM/Static/DC/SrcDC.py @@ -1,6 +1,7 @@ import SimPEG # from SimPEG.EM.Base import BaseEMSurvey from SimPEG.Utils import Zero, closestPoints +import numpy as np class BaseSrc(SimPEG.Survey.BaseSrc): diff --git a/SimPEG/EM/Static/__init__.py b/SimPEG/EM/Static/__init__.py new file mode 100644 index 00000000..6ebc9df2 --- /dev/null +++ b/SimPEG/EM/Static/__init__.py @@ -0,0 +1 @@ +import DC diff --git a/SimPEG/EM/TDEM/SurveyTDEM.py b/SimPEG/EM/TDEM/SurveyTDEM.py index 4d04f0ae..9c9ed4b9 100644 --- a/SimPEG/EM/TDEM/SurveyTDEM.py +++ b/SimPEG/EM/TDEM/SurveyTDEM.py @@ -87,7 +87,7 @@ class SrcTDEM_VMD_MVP(SrcTDEM): def getInitialFields(self, mesh): """Vertical magnetic dipole, magnetic vector potential""" if self.waveformType == "STEPOFF": - print ">> Step waveform: Non-zero initial condition" + print ">> Step waveform: Non-zero initial condition" if mesh._meshType is 'CYL': if mesh.isSymmetric: MVP = MagneticDipoleVectorPotential(self.loc, mesh, 'Ey') @@ -96,8 +96,8 @@ class SrcTDEM_VMD_MVP(SrcTDEM): elif mesh._meshType is 'TENSOR': MVP = MagneticDipoleVectorPotential(self.loc, mesh, ['Ex','Ey','Ez']) else: - raise Exception('Unknown mesh for VMD') - return {"b": mesh.edgeCurl*MVP} + raise Exception('Unknown mesh for VMD') + return {"b": mesh.edgeCurl*MVP} elif self.waveformType == "GENERAL": print ">> General waveform: Zero initial condition" return {"b": np.zeros(mesh.nF)} @@ -113,7 +113,7 @@ class SrcTDEM_VMD_MVP(SrcTDEM): elif mesh._meshType is 'TENSOR': MVP = MagneticDipoleVectorPotential(self.loc, mesh, ['Ex','Ey','Ez']) else: - raise Exception('Unknown mesh for VMD') + raise Exception('Unknown mesh for VMD') return mesh.edgeCurl.T*MfMui*mesh.edgeCurl*MVP @@ -122,7 +122,7 @@ class SrcTDEM_CircularLoop_MVP(SrcTDEM): self.loc = loc self.radius = radius self.waveformType = waveformType - SrcTDEM.__init__(self,rxList) + SrcTDEM.__init__(self,rxList) def getInitialFields(self, mesh): """Circular Loop, magnetic vector potential""" @@ -153,7 +153,7 @@ class SrcTDEM_CircularLoop_MVP(SrcTDEM): elif mesh._meshType is 'TENSOR': MVP = MagneticLoopVectorPotential(self.loc, mesh, ['Ex','Ey','Ez'], self.radius) else: - raise Exception('Unknown mesh for CircularLoop') + raise Exception('Unknown mesh for CircularLoop') return mesh.edgeCurl.T*MfMui*mesh.edgeCurl*MVP diff --git a/SimPEG/EM/__init__.py b/SimPEG/EM/__init__.py index 565f63a8..e42afbc5 100644 --- a/SimPEG/EM/__init__.py +++ b/SimPEG/EM/__init__.py @@ -1,5 +1,6 @@ import TDEM import FDEM +import Static import Base import Analytics import Utils