Merge pull request #4 from simpeg/MapChanges

Map changes
This commit is contained in:
Rowan Cockett
2014-04-15 16:03:18 -07:00
6 changed files with 26 additions and 38 deletions
+1 -1
View File
@@ -16,7 +16,7 @@ Tests:
[https://travis-ci.org/simpeg/simpegpf](https://travis-ci.org/simpeg/simpegpf)
Build Status:
[![Build Status](https://travis-ci.org/simpeg/simpegpf.png)](https://travis-ci.org/simpeg/simpegpf)
[![Build Status](https://travis-ci.org/simpeg/simpegpf.svg?branch=master)](https://travis-ci.org/simpeg/simpegpf)
Bugs & Issues:
[https://github.com/simpeg/simpegpf/issues](https://github.com/simpeg/simpegpf/issues)
+1 -8
View File
@@ -20,22 +20,15 @@ Potential fields
api_PF
Testing SimPEG
==============
* Master Branch
.. image:: https://travis-ci.org/simpeg/simpegpf.png?branch=master
.. image:: https://travis-ci.org/simpeg/simpegpf.svg?branch=master
:target: https://travis-ci.org/simpeg/simpegpf
:alt: Master Branch
:align: center
* Develop Branch
.. image:: https://travis-ci.org/simpeg/simpegpf.png?branch=develop
:target: https://travis-ci.org/simpeg/simpegpf
:alt: Develop Branch
:align: center
Project Index & Search
+6 -6
View File
@@ -1,4 +1,4 @@
from SimPEG import Model, Survey, Utils, np, sp
from SimPEG import Maps, Survey, Utils, np, sp
from scipy.constants import mu_0
@@ -115,11 +115,11 @@ class MagSurveyBx(object):
return bfx
class BaseMagModel(Model.BaseModel):
"""BaseMagModel"""
class BaseMagMap(Maps.IdentityMap):
"""BaseMagMap"""
def __init__(self, mesh, **kwargs):
Model.BaseModel.__init__(self, mesh)
Maps.IdentityMap.__init__(self, mesh)
def transform(self, m):
@@ -129,11 +129,11 @@ class BaseMagModel(Model.BaseModel):
return mu_0*sp.identity(self.nP)
class BaseDepthModel(Model.BaseModel):
class BaseDepthMap(Maps.IdentityMap):
"""BaseDepthMagModel"""
def __init__(self, mesh, **kwargs):
Model.BaseModel.__init__(self, mesh)
Maps.IdentityMap.__init__(self, mesh)
self.mesh = mesh
self.active_ind = kwargs['active_ind']
self.c = kwargs['c']
+11 -11
View File
@@ -11,10 +11,10 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
"""
surveyPair = BaseMag.BaseMagSurvey
modelPair = BaseMag.BaseMagModel
modelPair = BaseMag.BaseMagMap
def __init__(self, model, **kwargs):
Problem.BaseProblem.__init__(self, model, **kwargs)
def __init__(self, model, mapping=None, **kwargs):
Problem.BaseProblem.__init__(self, model, mapping=mapping, **kwargs)
Pbc, Pin, self._Pout = \
self.mesh.getBCProjWF('neumann', discretization='CC')
@@ -33,12 +33,12 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
def MfMu0(self): return self._MfMu0
def makeMassMatrices(self, m):
mu = self.model.transform(m)
self._MfMui = self.mesh.getFaceMass(1./mu)
mu = self.mapping.transform(m)
self._MfMui = self.mesh.getFaceInnerProduct(1./mu)/self.mesh.dim
# self._MfMui = self.mesh.getFaceInnerProduct(1./mu)
#TODO: this will break if tensor mu
self._MfMuI = Utils.sdiag(1./self._MfMui.diagonal())
self._MfMu0 = self.mesh.getFaceMass(1/mu_0)
self._MfMu0 = self.mesh.getFaceInnerProduct(1./mu_0)/self.mesh.dim
# self._MfMu0 = self.mesh.getFaceInnerProduct(1/mu_0)
@Utils.requires('survey')
@@ -61,7 +61,7 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
Dface = self.mesh.faceDiv
Mc = Utils.sdiag(self.mesh.vol)
mu = self.model.transform(m)
mu = self.mapping.transform(m)
chi = mu/mu_0-1
Bbc, Bbc_const = CongruousMagBC(self.mesh, self.survey.B0, chi)
@@ -184,8 +184,8 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
u = self.fields(m)
B, u = u['B'], u['u']
mu = self.model.transform(m)
dmudm = self.model.transformDeriv(m)
mu = self.mapping.transform(m)
dmudm = self.mapping.transformDeriv(m)
dchidmu = Utils.sdiag(1/mu_0*np.ones(self.mesh.nC))
vol = self.mesh.vol
@@ -261,8 +261,8 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
u = self.fields(m)
B, u = u['B'], u['u']
mu = self.model.transform(m)
dmudm = self.model.transformDeriv(m)
mu = self.mapping.transform(m)
dmudm = self.mapping.transformDeriv(m)
dchidmu = Utils.sdiag(1/mu_0*np.ones(self.mesh.nC))
vol = self.mesh.vol
+2 -2
View File
@@ -19,8 +19,8 @@ class MagFwdProblemTests(unittest.TestCase):
chi = np.ones(M.nC)*chibkg
sph_ind = PF.MagAnalytics.spheremodel(M, 0., 0., 0., 100)
chi[sph_ind] = chiblk
model = PF.BaseMag.BaseMagModel(M)
prob = PF.Magnetics.MagneticsDiffSecondary(model)
model = PF.BaseMag.BaseMagMap(M)
prob = PF.Magnetics.MagneticsDiffSecondary(M, mapping=model)
self.prob = prob
self.M = M
self.chi = chi
+5 -10
View File
@@ -26,7 +26,7 @@ class MagSensProblemTests(unittest.TestCase):
b0 = PF.MagAnalytics.IDTtoxyz(Inc, Dec, Btot)
sph_ind = PF.MagAnalytics.spheremodel(M, 0., 0., 0., 100)
chi[sph_ind] = chiblk
model = PF.BaseMag.BaseMagModel(M)
model = PF.BaseMag.BaseMagMap(M)
survey = BaseMag.BaseMagSurvey()
@@ -40,7 +40,7 @@ class MagSensProblemTests(unittest.TestCase):
prob = PF.Magnetics.MagneticsDiffSecondary(model)
prob = PF.Magnetics.MagneticsDiffSecondary(M, mapping=model)
prob.pair(survey)
dpre = survey.dpred(chi)
@@ -281,25 +281,21 @@ class MagSensProblemTests(unittest.TestCase):
def test_Jvec(self):
print ">> Derivative test for Jvec"
mu = self.model.transform(self.chi)
d_chi = 10.0*self.chi #np.random.rand(mesh.nCz)
d_sph_ind = PF.MagAnalytics.spheremodel(self.prob.mesh, 0., 0., -50., 50)
d_chi[d_sph_ind] = 0.1
a = self.prob.Jvec(self.chi, d_chi)
derChk = lambda m: [self.survey.dpred(m), lambda mx: self.prob.Jvec(self.chi, mx)]
derChk = lambda m: (self.survey.dpred(m), lambda v: self.prob.Jvec(m, v))
# TODO: I am not sure why the order get worse as step decreases .. --;
passed = Tests.checkDerivative(derChk, self.chi, num=2, dx = d_chi, plotIt=False)
self.assertTrue(passed)
def test_Jtvec(self):
print ">> Derivative test for Jtvec"
mu = self.model.transform(self.chi)
dobs = self.survey.dpred(self.chi)
def misfit (m, dobs):
def misfit(m):
dpre = self.survey.dpred(m)
misfit = 0.5*np.linalg.norm(dpre-dobs)**2
residual = dpre-dobs
@@ -308,8 +304,7 @@ class MagSensProblemTests(unittest.TestCase):
return misfit, dmisfit
# TODO: I am not sure why the order get worse as step decreases .. --;
derChk = lambda m: misfit(m, dobs)
passed = Tests.checkDerivative(derChk, self.chi, num=4, plotIt=False)
passed = Tests.checkDerivative(misfit, self.chi, num=4, plotIt=False)
self.assertTrue(passed)
if __name__ == '__main__':