From 80a7dfb51bee5747f8040bcc95a50a5d8095ba10 Mon Sep 17 00:00:00 2001 From: Lindsey Date: Mon, 1 Jun 2015 16:56:11 -0700 Subject: [PATCH] start of moving mass matrix derivs onto base.py --- simpegEM/Base.py | 10 ++++-- simpegEM/Tests/test_Base.py | 65 +++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 simpegEM/Tests/test_Base.py diff --git a/simpegEM/Base.py b/simpegEM/Base.py index 3bf0dec7..2c89fc59 100644 --- a/simpegEM/Base.py +++ b/simpegEM/Base.py @@ -99,8 +99,14 @@ class BaseEMProblem(Problem.BaseProblem): self._MeSigma = self.mesh.getEdgeInnerProduct(self.curModel.sigma) return self._MeSigma - # def dMeSigma_dsigma(self, u): - # return self.mesh.getEdgeInnerProductDeriv(self.sigma)(u) + @property + def MeSigmaDeriv(self, u): + """ + Deriv of MeSigma wrt sigma + """ + if getattr(self, 'MeSigmaDeriv', None) is None: + self._MeSigmaDeriv = self.mesh.getEdgeInnerProductDeriv(self.curModel.sigma)(u) + return self._MeSigmaDeriv @property def MeSigmaI(self): diff --git a/simpegEM/Tests/test_Base.py b/simpegEM/Tests/test_Base.py new file mode 100644 index 00000000..7d168148 --- /dev/null +++ b/simpegEM/Tests/test_Base.py @@ -0,0 +1,65 @@ +import unittest +from SimPEG import * +import simpegEM as EM +import sys +from scipy.constants import mu_0 +import copy + +testDerivs = False +testCrossCheck = True +testAdjoint = False +testEB = True +testHJ = True + +verbose = False + +TOL = 1e-4 +FLR = 1e-20 # "zero", so if residual below this --> pass regardless of order +CONDUCTIVITY = 1e1 +MU = mu_0 +freq = [1e-1, 2e-1] +addrandoms = True + +def getProblem(fdemType): + cs = 5. + ncx, ncy, ncz = 6, 6, 6 + npad = 3 + hx = [(cs,npad,-1.3), (cs,ncx), (cs,npad,1.3)] + hy = [(cs,npad,-1.3), (cs,ncy), (cs,npad,1.3)] + hz = [(cs,npad,-1.3), (cs,ncz), (cs,npad,1.3)] + mesh = Mesh.TensorMesh([hx,hy,hz],['C','C','C']) + + mapping = Maps.ExpMap(mesh) + + x = np.array([np.linspace(-30,-15,3),np.linspace(15,30,3)]) #don't sample right by the source + XYZ = Utils.ndgrid(x,x,np.r_[0.]) + Src0 = EM.FDEM.SrcFDEM_MagDipole([], loc=np.r_[0.,0.,0.], freq=freq[0]) + Src1 = EM.FDEM.SrcFDEM_MagDipole([], loc=np.r_[0.,0.,0.], freq=freq[1]) + + survey = EM.FDEM.SurveyFDEM([Src0]) + + + if verbose: + print ' Fetching %s problem' % (fdemType) + + if fdemType == 'e': + prb = EM.FDEM.ProblemFDEM_e(mesh, mapping=mapping) + elif fdemType == 'b': + prb = EM.FDEM.ProblemFDEM_b(mesh, mapping=mapping) + elif fdemType == 'j': + prb = EM.FDEM.ProblemFDEM_j(mesh, mapping=mapping) + elif fdemType == 'h': + prb = EM.FDEM.ProblemFDEM_h(mesh, mapping=mapping) + else: + raise NotImplementedError() + prb.pair(survey) + + try: + from pymatsolver import MumpsSolver + prb.Solver = MumpsSolver + except ImportError, e: + pass + + return prb + +def test_MassMatDeriv()