From 220e244cdfa7b5bbde9b31e10ce0ed531db119f1 Mon Sep 17 00:00:00 2001 From: rowanc1 Date: Fri, 16 May 2014 12:42:14 -0700 Subject: [PATCH] Memory clean ups with fancier fields objects. --- simpegEM/TDEM/BaseTDEM.py | 3 ++- simpegEM/TDEM/TDEM_b.py | 21 ++++++++++++++++++--- simpegEM/Tests/test_TDEM_b_DerivAdjoint.py | 3 +-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/simpegEM/TDEM/BaseTDEM.py b/simpegEM/TDEM/BaseTDEM.py index 3c48922f..2782853d 100644 --- a/simpegEM/TDEM/BaseTDEM.py +++ b/simpegEM/TDEM/BaseTDEM.py @@ -15,11 +15,12 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem): BaseTimeProblem.__init__(self, mesh, mapping=mapping, **kwargs) surveyPair = SurveyTDEM + _FieldsTDEM_pair = FieldsTDEM #: used for the forward calculation only def fields(self, m): self.curModel = m # Create a fields storage object - F = FieldsTDEM(self.mesh, self.survey) + F = self._FieldsTDEM_pair(self.mesh, self.survey) for tx in self.survey.txList: # Set the initial conditions F[tx,:,0] = tx.getInitialFields(self.mesh) diff --git a/simpegEM/TDEM/TDEM_b.py b/simpegEM/TDEM/TDEM_b.py index fbac0813..1a8fdbb2 100644 --- a/simpegEM/TDEM/TDEM_b.py +++ b/simpegEM/TDEM/TDEM_b.py @@ -3,6 +3,21 @@ from SimPEG.Utils import mkvc import numpy as np from SurveyTDEM import SurveyTDEM, FieldsTDEM + +class FieldsTDEM_e_from_b(FieldsTDEM): + """Fancy Field Storage for a TDEM survey.""" + knownFields = {'b': 'F'} + aliasFields = {'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, ind): + # TODO: implement non-zero js + return self.MeSigmaI*(self.edgeCurlT*(self.MfMui*b)) + class ProblemTDEM_b(BaseTDEMProblem): """ Time-Domain EM problem - B-formulation @@ -21,6 +36,7 @@ class ProblemTDEM_b(BaseTDEMProblem): solType = 'b' #: Type of the solution, in this case the 'b' field surveyPair = SurveyTDEM + _FieldsTDEM_pair = FieldsTDEM_e_from_b #: used for the forward calculation only #################################################### # Internal Methods @@ -45,12 +61,11 @@ class ProblemTDEM_b(BaseTDEMProblem): if self.solType == 'b': b = sol - e = self.MeSigmaI*(self.mesh.edgeCurl.T*(self.MfMui*b)) - # Todo: implement non-zero js + # e = self.MeSigmaI*(self.mesh.edgeCurl.T*(self.MfMui*b)) else: raise NotImplementedError('solType "%s" is not implemented in CalcFields.' % self.solType) - return {'b':b, 'e':e} + return {'b':b} #################################################### diff --git a/simpegEM/Tests/test_TDEM_b_DerivAdjoint.py b/simpegEM/Tests/test_TDEM_b_DerivAdjoint.py index db1a3dfb..bd39a09d 100644 --- a/simpegEM/Tests/test_TDEM_b_DerivAdjoint.py +++ b/simpegEM/Tests/test_TDEM_b_DerivAdjoint.py @@ -107,9 +107,8 @@ class TDEM_bDerivTests(unittest.TestCase): A = sp.bmat([[a11,a12],[a21,a22]]) f = prb.fields(sigma) - f[:,:,0] = {'e':0,'b':0} + f[:,:,0] = {'b':0} f[:,'b',1] = 0 - f[:,'e',1] = np.random.rand(prb.mesh.nE,1) self.assertTrue(np.all(np.r_[f[:,'b',1],f[:,'e',1]] == f.tovec()))