Initial work Mag inversion

This commit is contained in:
SEOGI KANG committed 2014-03-03 08:53:19 -08:00
1 parent 18546d038b
commit 699c91f6d7
7 files changed
+1335 -275

No files matched your search

+29 -12
View File
@@ -42,13 +42,13 @@ class BaseMagData(Data.BaseData):
"""
This function projects the fields onto the data space.
Esepcially, here for we use total magnetic intensity (TMI) data,
which is common in practice.
Esepcially, here for we use total magnetic intensity (TMI) data,
which is common in practice.
First we project our B on to data location
First we project our B on to data location
.. math::
\mathbf{B}_{rec} = \mathbf{P} \mathbf{B}
then we take the dot product between B and b_0
@@ -121,13 +121,30 @@ class BaseMagModel(Model.BaseModel):
def __init__(self, mesh, **kwargs):
Model.BaseModel.__init__(self, mesh)
def transform(self, m, asMu=True):
if asMu:
return mu_0*(1 + m)
return m
def transform(self, m):
def transformDeriv(self, m, asMu=True):
if asMu:
return mu_0*sp.identity(self.nP)
return sp.identity(self.nP)
return mu_0*(1 + m)
def transformDeriv(self, m):
return mu_0*sp.identity(self.nP)
class BaseDepthModel(Model.BaseModel):
"""BaseDepthMagModel"""
def __init__(self, mesh, **kwargs):
Model.BaseModel.__init__(self, mesh)
self.mesh = mesh
self.active_ind = kwargs['active_ind']
def transform(self, m):
weight = abs(self.mesh.gridCC[:,2])**1.0
weight = weight/weight.max()
weight[~self.active_ind] = 1.
return m*weight
def transformDeriv(self, m):
weight = abs(self.mesh.gridCC[:,2])**1.0
weight = weight/weight.max()
weight[~self.active_ind] = 1.
return Utils.sdiag(weight)
+102 -65
View File
@@ -1,4 +1,4 @@
from SimPEG import Mesh, Problem, Utils, np, sp, Tests
from SimPEG import *
import BaseMag
from scipy.constants import mu_0
from MagAnalytics import spheremodel, CongruousMagBC
@@ -51,7 +51,7 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
def getRHS(self, m):
"""
.. math ::
\mathbf{rhs} = \Div(\MfMui)^{-1}\mathbf{M}^f_{\mu_0^{-1}}\mathbf{B}_0 - \Div\mathbf{B}_0+\diag(v)\mathbf{D} \mathbf{P}_{out}^T \mathbf{B}_{sBC}
@@ -61,7 +61,9 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
Dface = self.mesh.faceDiv
Mc = Utils.sdiag(self.mesh.vol)
chi = self.model.transform(m, asMu=False)
mu = self.model.transform(m)
chi = mu/mu_0-1
Bbc, Bbc_const = CongruousMagBC(self.mesh, self.data.B0, chi)
self.Bbc = Bbc
self.Bbc_const = Bbc_const
@@ -105,11 +107,11 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
return {'B': B, 'u': u}
@Utils.timeIt
def Jvec(self, m, v, fields=None):
def Jvec(self, m, v, u=None):
"""
Computing Jacobian multiplied by vector
By setting our problem as
By setting our problem as
.. math ::
@@ -124,51 +126,51 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
\\frac{\delta \mathbf{u}}{\delta \mathbf{m}} = - [\\nabla_u \mathbf{C}(\mathbf{u})]^{-1}\\nabla_m \mathbf{C}(\mathbf{m})
With some linear algebra we can have
With some linear algebra we can have
.. math ::
\\nabla_u \mathbf{C}(\mathbf{u}) = \mathbf{A}
\\nabla_m \mathbf{C}(\mathbf{m}) =
\\frac{\partial \mathbf{A}}{\partial \mathbf{m}}(\mathbf{m})\mathbf{u} - \\frac{\partial \mathbf{rhs}(\mathbf{m})}{\partial \mathbf{m}}
\\nabla_m \mathbf{C}(\mathbf{m}) =
\\frac{\partial \mathbf{A}}{\partial \mathbf{m}}(\mathbf{m})\mathbf{u} - \\frac{\partial \mathbf{rhs}(\mathbf{m})}{\partial \mathbf{m}}
.. math ::
.. math ::
\\frac{\partial \mathbf{A}}{\partial \mathbf{m}}(\mathbf{m})\mathbf{u} =
\\frac{\partial \mathbf{A}}{\partial \mathbf{m}}(\mathbf{m})\mathbf{u} =
\\frac{\partial \mathbf{\mu}}{\partial \mathbf{m}} \left[\Div \diag (\Div^T \mathbf{u}) \dMfMuI \\right]
\dMfMuI = \diag(\MfMui)^{-1}_{vec} \mathbf{Av}_{F2CC}^T\diag(\mathbf{v})\diag(\\frac{1}{\mu^2})
\\frac{\partial \mathbf{rhs}(\mathbf{m})}{\partial \mathbf{m}} = \\frac{\partial \mathbf{\mu}}{\partial \mathbf{m}} \left[
\\frac{\partial \mathbf{rhs}(\mathbf{m})}{\partial \mathbf{m}} = \\frac{\partial \mathbf{\mu}}{\partial \mathbf{m}} \left[
\Div \diag(\M^f_{\mu_{0}^{-1}}\mathbf{B}_0) \dMfMuI \\right] - \diag(\mathbf{v})\mathbf{D} \mathbf{P}_{out}^T\\frac{\partial B_{sBC}}{\partial \mathbf{m}}
In the end,
In the end,
.. math ::
\\frac{\delta \mathbf{u}}{\delta \mathbf{m}} =
- [ \mathbf{A} ]^{-1}\left[ \\frac{\partial \mathbf{A}}{\partial \mathbf{m}}(\mathbf{m})\mathbf{u}
\\frac{\delta \mathbf{u}}{\delta \mathbf{m}} =
- [ \mathbf{A} ]^{-1}\left[ \\frac{\partial \mathbf{A}}{\partial \mathbf{m}}(\mathbf{m})\mathbf{u}
- \\frac{\partial \mathbf{rhs}(\mathbf{m})}{\partial \mathbf{m}} \\right]
A little tricky point here is we are not interested in potential (u), but interested in magnetic flux (B).
Thus, we need sensitivity for B. Now we take derivative of B w.r.t m and have
A little tricky point here is we are not interested in potential (u), but interested in magnetic flux (B).
Thus, we need sensitivity for B. Now we take derivative of B w.r.t m and have
.. math ::
\\frac{\delta \mathbf{B}} {\delta \mathbf{m}} = \\frac{\partial \mathbf{\mu} } {\partial \mathbf{m} }
\left[
\\frac{\delta \mathbf{B}} {\delta \mathbf{m}} = \\frac{\partial \mathbf{\mu} } {\partial \mathbf{m} }
\left[
\diag(\M^f_{\mu_{0}^{-1} } \mathbf{B}_0) \dMfMuI \\
- \diag (\Div^T\mathbf{u})\dMfMuI
\\right ]
- (\MfMui)^{-1}\Div^T\\frac{\delta\mathbf{u}}{\delta \mathbf{m}}
Finally we evaluate the above, but we should remember that
- (\MfMui)^{-1}\Div^T\\frac{\delta\mathbf{u}}{\delta \mathbf{m}}
.. note ::
Finally we evaluate the above, but we should remember that
We only want to evalute
.. note ::
We only want to evalute
.. math ::
@@ -178,13 +180,13 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
"""
if fields is None:
fields = self.fields(m)
if u is None:
u = self.fields(m)
B, u = fields['B'], fields['u']
mu = self.model.transform(m, asMu=True)
dmudm = self.model.transformDeriv(m, asMu=True)
dmdmu = Utils.sdiag(1/(dmudm.diagonal()))
B, u = u['B'], u['u']
mu = self.model.transform(m)
dmudm = self.model.transformDeriv(m)
dchidmu = Utils.sdiag(1/mu_0*np.ones(self.mesh.nC))
vol = self.mesh.vol
Div = self._Div
@@ -204,42 +206,43 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
dCdm_A = Div * ( Utils.sdiag( Div.T * u )* dMfMuI *dmudm )
dCdm_RHS1 = Div * (Utils.sdiag( self.MfMu0*B0 ) * dMfMuI)
temp1 = (Dface*(self._Pout.T*self.Bbc_const*self.Bbc))
dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, v)
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, dchidmu*dmudm*v)
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_v = dCdm_A*v - dCdm_RHSv
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/dCdu.diagonal()))
sol, info = sp.linalg.bicgstab(dCdu, dCdm_v, tol=1e-8, maxiter=1000, M=m1)
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/dCdu.diagonal()))
sol, info = sp.linalg.bicgstab(dCdu, dCdm_v, tol=1e-6, maxiter=1000, M=m1)
if info > 0:
raise Exception ("Iterative solver did not work well")
print "Iterative solver did not work well (Jvec)"
# raise Exception ("Iterative solver did not work well")
# B = self.MfMuI*self.MfMu0*B0-B0-self.MfMuI*self._Div.T*u
# dBdm = d\mudm*dBd\mu
dudm = -sol
dudm = -sol
dBdmv = ( Utils.sdiag(self.MfMu0*B0)*(dMfMuI * (dmudm*v)) \
- Utils.sdiag(Div.T*u)*(dMfMuI* (dmudm*v)) \
- self.MfMuI*(Div.T* (dudm)) )
- self.MfMuI*(Div.T* (dudm)) )
return Utils.mkvc(P*dBdmv)
@Utils.timeIt
def Jtvec(self, m, v, fields=None):
def Jtvec(self, m, v, u=None):
"""
Computing Jacobian^T multiplied by vector.
.. math ::
(\\frac{\delta \mathbf{P}\mathbf{B}} {\delta \mathbf{m}})^{T} = \left[ \mathbf{P}_{deriv}\\frac{\partial \mathbf{\mu} } {\partial \mathbf{m} }
\left[
(\\frac{\delta \mathbf{P}\mathbf{B}} {\delta \mathbf{m}})^{T} = \left[ \mathbf{P}_{deriv}\\frac{\partial \mathbf{\mu} } {\partial \mathbf{m} }
\left[
\diag(\M^f_{\mu_{0}^{-1} } \mathbf{B}_0) \dMfMuI \\
- \diag (\Div^T\mathbf{u})\dMfMuI
\\right ]\\right]^{T}
\\right ]\\right]^{T}
- \left[\mathbf{P}_{deriv}(\MfMui)^{-1}\Div^T\\frac{\delta\mathbf{u}}{\delta \mathbf{m}} \\right]^{T}
where
where
.. math ::
@@ -247,20 +250,20 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
.. note ::
Here we only want to compute
Here we only want to compute
.. math ::
\mathbf{J}^{T}\mathbf{v} = (\\frac{\delta \mathbf{P}\mathbf{B}} {\delta \mathbf{m}})^{T} \mathbf{v}
"""
if fields is None:
fields = self.fields(m)
if u is None:
u = self.fields(m)
B, u = fields['B'], fields['u']
mu = self.model.transform(m, asMu=True)
dmudm = self.model.transformDeriv(m, asMu=True)
dmdmu = Utils.sdiag(1/(dmudm.diagonal()))
B, u = u['B'], u['u']
mu = self.model.transform(m)
dmudm = self.model.transformDeriv(m)
dchidmu = Utils.sdiag(1/mu_0*np.ones(self.mesh.nC))
vol = self.mesh.vol
Div = self._Div
@@ -279,26 +282,33 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
dCdu = self.getA(m)
s = Div * ( self.MfMuI.T * ( P.T*v ) )
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/(dCdu.T).diagonal()))
sol, info = sp.linalg.bicgstab(dCdu.T, s, tol=1e-8, maxiter=1000, M=m1)
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/(dCdu.T).diagonal()))
sol, info = sp.linalg.bicgstab(dCdu.T, s, tol=1e-6, maxiter=1000, M=m1)
if info > 0:
raise Exception ("Iterative solver did not work well")
print "Iterative solver did not work well (Jtvec)"
# raise Exception ("Iterative solver did not work well")
# dCdm_A = Div * ( Utils.sdiag( Div.T * u )* dMfMuI *dmudm )
dCdm_Atsol = ( dMfMuI.T*( Utils.sdiag( Div.T * u ) * (Div.T * dmudm)) ) * sol
# dCdm_Atsol = ( dMfMuI.T*( Utils.sdiag( Div.T * u ) * (Div.T * dmudm)) ) * sol
dCdm_Atsol = ( dmudm.T * dMfMuI.T*( Utils.sdiag( Div.T * u ) * Div.T ) ) * sol
# dCdm_RHS1 = Div * (Utils.sdiag( self.MfMu0*B0 ) * dMfMuI)
# dCdm_RHS1tsol = (dMfMuI.T*( Utils.sdiag( self.MfMu0*B0 ) ) * Div.T * dmudm) * sol
dCdm_RHS1tsol = ( dmudm.T * dMfMuI.T*( Utils.sdiag( self.MfMu0*B0 ) ) * Div.T ) * sol
# dCdm_RHS1 = Div * (Utils.sdiag( self.MfMu0*B0 ) * dMfMuI)
dCdm_RHS1tsol = (dMfMuI.T*( Utils.sdiag( self.MfMu0*B0 ) ) * Div.T * dmudm) * sol
# temp1 = (Dface*(self._Pout.T*self.Bbc_const*self.Bbc))
# dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, v)
temp1sol = ( Dface.T*( Utils.sdiag(vol)*sol ) )
temp2 = self.Bbc_const*(self._Pout.T*self.Bbc).T
dCdm_RHS2tsol = vol*np.inner(temp2, temp1sol)
# dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, dchidmu*dmudm*v)
dCdm_RHS2tsol = (dmudm.T*dchidmu.T*vol)*np.inner(temp2, temp1sol)
# dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_RHStsol = dCdm_RHS1tsol - dCdm_RHS2tsol
# dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
# dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
# dCdm_v = dCdm_A*v - dCdm_RHSv
Ctv = dCdm_Atsol - dCdm_RHStsol
@@ -311,7 +321,35 @@ class MagneticsDiffSecondary(Problem.BaseProblem):
Btemp = Utils.sdiag(Div.T*u)*(dMfMuI* (dmudm))
Jtv = Atemp.T*(P.T*v) - Btemp.T*(P.T*v) - Ctv
return Utils.mkvc(Jtv)
return Utils.mkvc(Jtv)
def MagneticsDiffSecondaryInv(mesh, model, data, **kwargs):
"""
Inversion module for MagneticsDiffSecondary
"""
from SimPEG import Optimization, Regularization, Parameters, ObjFunction, Inversion
prob = MagneticsDiffSecondary(mesh, model)
if prob.ispaired:
prob.unpair()
if data.ispaired:
data.unpair()
prob.pair(data)
# Create an optimization program
opt = Optimization.InexactGaussNewton(maxIter=5)
opt.bfgsH0 = Solver(sp.identity(model.nP),flag='D')
# Create a regularization program
reg = Regularization.Tikhonov(model)
# Create an objective function
beta = Parameters.BetaSchedule(beta0=1e0)
obj = ObjFunction.BaseObjFunction(data, reg, beta=beta)
# Create an inversion object
inv = Inversion.BaseInversion(obj, opt)
return inv, reg
@@ -337,7 +375,7 @@ if __name__ == '__main__':
Btot = 51000
data.setBackgroundField(Inc, Dec, Btot)
xr = np.linspace(-300, 300, 41)
yr = np.linspace(-300, 300, 41)
X, Y = np.meshgrid(xr, yr)
@@ -346,7 +384,6 @@ if __name__ == '__main__':
data.rxLoc = rxLoc
prob = MagneticsDiffSecondary(mesh, model)
prob.pair(data)
dpred = data.dpred(chi)
+11 -7
View File
@@ -30,11 +30,11 @@ class MagFwdProblemTests(unittest.TestCase):
data = PF.BaseMag.BaseMagData()
Inc = 90.
Dec = 0.
Inc = 45.
Dec = 45.
Btot = 51000
b0 = PF.MagAnalytics.IDTtoxyz(Inc, Dec, Btot)
b0 = PF.MagAnalytics.IDTtoxyz(Inc, Dec, Btot)
data.setBackgroundField(Inc, Dec, Btot)
xr = np.linspace(-300, 300, 41)
yr = np.linspace(-300, 300, 41)
@@ -42,21 +42,25 @@ class MagFwdProblemTests(unittest.TestCase):
Z = np.ones((xr.size, yr.size))*150
rxLoc = np.c_[Utils.mkvc(X), Utils.mkvc(Y), Utils.mkvc(Z)]
data.rxLoc = rxLoc
self.prob.pair(data)
u = self.prob.fields(self.chi)
B = u['B']
bxa,bya,bza = PF.MagAnalytics.MagSphereAnalFunA(rxLoc[:,0],rxLoc[:,1],rxLoc[:,2],100.,0.,0.,0.,0.01, b0,'secondary')
bxa,bya,bza = PF.MagAnalytics.MagSphereAnalFunA(rxLoc[:,0],rxLoc[:,1],rxLoc[:,2],100.,0.,0.,0.,0.01, b0,'secondary')
dpred = data.projectFieldsAsVector(B)
err = np.linalg.norm(dpred-np.r_[bxa, bya, bza])/np.linalg.norm(np.r_[bxa, bya, bza])
plt.plot(dpred)
plt.plot(np.r_[bxa, bya, bza])
plt.show()
if err > 0.05:
raise Exception('Anaytic test is failed T.T')
else:
print "Anaytic test is passed"
pass
if __name__ == '__main__':
unittest.main()
+49 -49
View File
@@ -18,7 +18,7 @@ class MagSensProblemTests(unittest.TestCase):
chibkg = 0.001
chiblk = 0.01
chi = np.ones(M.nC)*chibkg
Inc = 90.
Dec = 0.
Btot = 51000
@@ -58,7 +58,7 @@ class MagSensProblemTests(unittest.TestCase):
def test_mass(self):
print '\n >>Derivative for MfMuI works.'
mu = self.model.transform(self.chi, asMu=True)
mu = self.model.transform(self.chi)
def MfmuI(mu):
chi = mu/mu_0-1
@@ -70,36 +70,36 @@ class MagSensProblemTests(unittest.TestCase):
return MfMuI
def dMfmuI(mu, v):
chi = mu/mu_0-1
self.prob.makeMassMatrices(chi)
vol = self.prob.mesh.vol
aveF2CC = self.prob.mesh.aveF2CC
MfMuI = self.prob.MfMuI.diagonal()
dMfMuI = Utils.sdiag(MfMuI**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
dMfMuI = Utils.sdiag(MfMuI**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
return dMfMuI*v
d_mu = mu*0.8
derChk = lambda m: [MfmuI(m), lambda mx: dMfmuI(self.chi, mx)]
passed = Tests.checkDerivative(derChk, mu, num=4, dx = d_mu, plotIt=False)
self.assertTrue(passed)
def test_dCdm_Av(self):
print '\n >>Derivative for Cm_A.'
Div = self.prob._Div
Div = self.prob._Div
vol = self.prob.mesh.vol
aveF2CC = self.prob.mesh.aveF2CC
def Cm_A(chi):
dmudm = self.model.transformDeriv(chi, asMu=True)
dmudm = self.model.transformDeriv(chi)
u = self.u
# chi = mu/mu_0-1
self.prob.makeMassMatrices(chi)
mu = self.model.transform(self.chi, asMu=True)
mu = self.model.transform(self.chi)
A = self.prob.getA(self.chi)
MfMuIvec = 1/self.prob.MfMui.diagonal()
dMfMuI = Utils.sdiag(MfMuIvec**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
@@ -109,11 +109,11 @@ class MagSensProblemTests(unittest.TestCase):
return Cm_A
def dCdm_A(chi, v):
dmudm = self.model.transformDeriv(chi, asMu=True)
dmudm = self.model.transformDeriv(chi)
u = self.u
self.prob.makeMassMatrices(chi)
mu = self.model.transform(self.chi, asMu=True)
mu = self.model.transform(self.chi)
A = self.prob.getA(self.chi)
MfMuIvec = 1/self.prob.MfMui.diagonal()
dMfMuI = Utils.sdiag(MfMuIvec**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
@@ -133,7 +133,7 @@ class MagSensProblemTests(unittest.TestCase):
print '\n >>Derivative for Cm_RHS.'
u = self.u
Div = self.prob._Div
mu = self.model.transform(self.chi, asMu=True)
mu = self.model.transform(self.chi)
vol = self.prob.mesh.vol
Mc = Utils.sdiag(vol)
aveF2CC = self.prob.mesh.aveF2CC
@@ -143,45 +143,45 @@ class MagSensProblemTests(unittest.TestCase):
def Cm_RHS(chi):
self.prob.makeMassMatrices(chi)
dmudm = self.model.transformDeriv(chi, asMu=True)
dmudm = self.model.transformDeriv(chi)
dchidmu = Utils.sdiag(1/(dmudm.diagonal()))
Bbc, Bbc_const = PF.MagAnalytics.CongruousMagBC(self.prob.mesh, self.data.B0, chi)
MfMuIvec = 1/self.prob.MfMui.diagonal()
dMfMuI = Utils.sdiag(MfMuIvec**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
RHS1 = Div*self.prob.MfMuI*self.prob.MfMu0*B0
RHS2 = Mc*Dface*self.prob._Pout.T*Bbc
RHS = RHS1 + RHS2 + Div*B0
RHS1 = Div*self.prob.MfMuI*self.prob.MfMu0*B0
RHS2 = Mc*Dface*self.prob._Pout.T*Bbc
RHS = RHS1 + RHS2 + Div*B0
return RHS
def dCdm_RHS(chi, v):
self.prob.makeMassMatrices(chi)
dmudm = self.model.transformDeriv(chi, asMu=True)
dmudm = self.model.transformDeriv(chi)
dmdmu = Utils.sdiag(1/(dmudm.diagonal()))
Bbc, Bbc_const = PF.MagAnalytics.CongruousMagBC(self.prob.mesh, self.data.B0, chi)
MfMuIvec = 1/self.prob.MfMui.diagonal()
dMfMuI = Utils.sdiag(MfMuIvec**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
dMfMuI = Utils.sdiag(MfMuIvec**2)*aveF2CC.T*Utils.sdiag(vol*1./mu**2)
dCdm_RHS1 = Div * (Utils.sdiag( self.prob.MfMu0*B0 ) * dMfMuI)
temp1 = (Dface*(self.prob._Pout.T*Bbc_const*Bbc))
dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, v)
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
return dCdm_RHSv
d_chi = self.chi*0.8
derChk = lambda m: [Cm_RHS(m), lambda mx: dCdm_RHS(self.chi, mx)]
passed = Tests.checkDerivative(derChk, self.chi, num=4, dx = d_chi, plotIt=False)
self.assertTrue(passed)
self.assertTrue(passed)
def test_dudm(self):
print ">> Derivative test for dudm"
u = self.u
Div = self.prob._Div
mu = self.model.transform(self.chi, asMu=True)
mu = self.model.transform(self.chi)
vol = self.prob.mesh.vol
Mc = Utils.sdiag(vol)
aveF2CC = self.prob.mesh.aveF2CC
@@ -193,11 +193,11 @@ class MagSensProblemTests(unittest.TestCase):
return u
def dudm(chi, v):
chi = mu/mu_0-1
self.prob.makeMassMatrices(chi)
self.prob.makeMassMatrices(chi)
u = self.u
dmudm = self.model.transformDeriv(chi, asMu=True)
dmudm = self.model.transformDeriv(chi)
dmdmu = Utils.sdiag(1/(dmudm.diagonal()))
Bbc, Bbc_const = PF.MagAnalytics.CongruousMagBC(self.prob.mesh, self.data.B0, chi)
MfMuIvec = 1/self.prob.MfMui.diagonal()
@@ -207,21 +207,21 @@ class MagSensProblemTests(unittest.TestCase):
dCdm_RHS1 = Div * (Utils.sdiag( self.prob.MfMu0*B0 ) * dMfMuI)
temp1 = (Dface*(self.prob._Pout.T*Bbc_const*Bbc))
dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, v)
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_v = dCdm_A*v - dCdm_RHSv
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/dCdu.diagonal()))
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/dCdu.diagonal()))
sol, info = sp.linalg.bicgstab(dCdu, dCdm_v, tol=1e-8, maxiter=1000, M=m1)
dudm = -sol
dudm = -sol
return dudm
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
d_chi[d_sph_ind] = 0.1
derChk = lambda m: [ufun(m), lambda mx: dudm(self.chi, mx)]
# TODO: I am not sure why the order get worse as step decreases .. --;
# 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)
@@ -230,7 +230,7 @@ class MagSensProblemTests(unittest.TestCase):
print ">> Derivative test for dBdm"
u = self.u
Div = self.prob._Div
mu = self.model.transform(self.chi, asMu=True)
mu = self.model.transform(self.chi)
vol = self.prob.mesh.vol
Mc = Utils.sdiag(vol)
aveF2CC = self.prob.mesh.aveF2CC
@@ -242,11 +242,11 @@ class MagSensProblemTests(unittest.TestCase):
return B
def dBdm(chi, v):
chi = mu/mu_0-1
self.prob.makeMassMatrices(chi)
self.prob.makeMassMatrices(chi)
u = self.u
dmudm = self.model.transformDeriv(chi, asMu=True)
dmudm = self.model.transformDeriv(chi)
dmdmu = Utils.sdiag(1/(dmudm.diagonal()))
Bbc, Bbc_const = PF.MagAnalytics.CongruousMagBC(self.prob.mesh, self.data.B0, chi)
MfMuIvec = 1/self.prob.MfMui.diagonal()
@@ -256,47 +256,47 @@ class MagSensProblemTests(unittest.TestCase):
dCdm_RHS1 = Div * (Utils.sdiag( self.prob.MfMu0*B0 ) * dMfMuI)
temp1 = (Dface*(self.prob._Pout.T*Bbc_const*Bbc))
dCdm_RHS2v = (Utils.sdiag(vol)*temp1)*np.inner(vol, v)
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_RHSv = dCdm_RHS1*(dmudm*v) + dCdm_RHS2v
dCdm_v = dCdm_A*v - dCdm_RHSv
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/dCdu.diagonal()))
m1 = sp.linalg.interface.aslinearoperator(Utils.sdiag(1/dCdu.diagonal()))
sol, info = sp.linalg.bicgstab(dCdu, dCdm_v, tol=1e-8, maxiter=1000, M=m1)
dudm = -sol
dudm = -sol
dBdmv = ( Utils.sdiag(self.prob.MfMu0*B0)*(dMfMuI * (dmudm*v)) \
- Utils.sdiag(Div.T*u)*(dMfMuI* (dmudm*v)) \
- self.prob.MfMuI*(Div.T* (dudm)) )
- self.prob.MfMuI*(Div.T* (dudm)) )
return dBdmv
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
d_chi[d_sph_ind] = 0.1
derChk = lambda m: [Bfun(m), lambda mx: dBdm(self.chi, mx)]
# TODO: I am not sure why the order get worse as step decreases .. --;
passed = Tests.checkDerivative(derChk, self.chi, num=3, dx = d_chi, plotIt=False)
# 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_Jvec(self):
print ">> Derivative test for Jvec"
mu = self.model.transform(self.chi, asMu=True)
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
d_chi[d_sph_ind] = 0.1
a = self.prob.Jvec(self.chi, d_chi)
derChk = lambda m: [self.data.dpred(m), lambda mx: self.prob.Jvec(self.chi, mx)]
# TODO: I am not sure why the order get worse as step decreases .. --;
# 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, asMu=True)
mu = self.model.transform(self.chi)
dobs = self.data.dpred(self.chi)
def misfit (m, dobs):
@@ -307,10 +307,10 @@ class MagSensProblemTests(unittest.TestCase):
return misfit, dmisfit
# TODO: I am not sure why the order get worse as step decreases .. --;
# 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)
self.assertTrue(passed)
self.assertTrue(passed)
if __name__ == '__main__':
unittest.main()
+546
View File
@@ -0,0 +1,546 @@
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from SimPEG import *\n",
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Warning: Python backend is being used for solver. Run setup.py from the command line.\n",
"Warning: mumps solver not available.\n",
"Warning: upgrade your scipy to 0.13.0"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Populating the interactive namespace from numpy and matplotlib"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $$ Kernel(x, k) = e^{-pkx}cos(2 \\pi q k x) $$"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"M = Mesh.TensorMesh([1000]) # Make a 1D mesh from 0-1 with 1000 cells\n",
"\n",
"nk = 20 #: The number of kernals\n",
"p = q = 0.25 #: Some constants\n",
"\n",
"# Create a function for each row of the matrix\n",
"g = lambda k, x: np.exp(-p*k*x)*np.cos(2*np.pi*q*k*x)\n",
"\n",
"# Concatenate each row, and reshape\n",
"G = np.concatenate([g(i,M.vectorCCx) for i in range(nk)])\n",
"G.shape = (nk, M.nC)\n",
"\n",
"figure(figsize=(12,4))\n",
"plot(G.T)\n",
"title('Rows of G')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 2,
"text": [
"<matplotlib.text.Text at 0x9bf1940>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x9bdef60>"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## $$ \\mathbf{d}_{pred} = \\mathbf{G}\\mathbf{m} $$"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mtrue = np.zeros(M.nC) # Create a zeros vector, here nC means: number of cells\n",
"mtrue[M.vectorCCx > 0.3] = 1.\n",
"mtrue[M.vectorCCx > 0.45] = -0.5\n",
"mtrue[M.vectorCCx > 0.6] = 0\n",
"figure(figsize=(12,4))\n",
"subplot(121)\n",
"# Create a few models\n",
"models = np.c_[mtrue, np.r_[mtrue[200:],mtrue[:200]]*0.5 - 0.2, \n",
" M.vectorCCx - 0.5, -M.vectorCCx + 0.75, \n",
" Utils.ModelBuilder.randomModel(1000,seed=751,its=20000)-0.3]\n",
"plot(M.vectorCCx, models)\n",
"title('A few synthetic model.')\n",
"xlabel('x');ylabel('Amplitude')\n",
"data = G.dot(models) #: this is matrix multiplication!!\n",
"subplot(122)\n",
"plot(data)\n",
"title('The data created by each model.')\n",
"xlim([0,19]);xlabel('Kernal Number, i');ylabel('g(i) * x')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"<matplotlib.text.Text at 0x9fe2cc0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x9fb59b0>"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class LinearProblem(Problem.BaseProblem):\n",
" \n",
" def __init__(self, mesh, model, G, **kwargs):\n",
" Problem.BaseProblem.__init__(self, mesh, model, **kwargs)\n",
" self.G = G\n",
"\n",
" def fields(self, m, u=None):\n",
" return self.G.dot(m)\n",
"\n",
" def Jvec(self, m, v, u=None):\n",
" return self.G.dot(v)\n",
"\n",
" def Jtvec(self, m, v, u=None):\n",
" return self.G.T.dot(v)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Create a model, by default this is a model on the mesh\n",
"model = Model.BaseModel(M)\n",
"# Create the problem\n",
"prob = LinearProblem(M, model, G)\n",
"# create a simpeg data object, using a synthetic model and 5% noise\n",
"data = prob.createSyntheticData(models[:,0],std=0.05)\n",
"# Create an optimization program\n",
"opt = Optimization.InexactGaussNewton(maxIter=10)\n",
"# Create a regularization program\n",
"reg = Regularization.Tikhonov(model)\n",
"# Create an objective function\n",
"beta = Parameters.BetaSchedule??\n",
"obj = ObjFunction.BaseObjFunction(data, reg, beta=beta)\n",
"# Create an inversion object\n",
"inv = Inversion.BaseInversion(obj, opt)\n",
"# Start the inversion with a model of zeros, and run the inversion\n",
"m0 = data.mtrue*0\n",
"mopt = inv.run(m0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Warning: Parameter beta has switched to a new parent.\n",
"Regularization has not set mref. SimPEG will set it to m0.\n",
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 1.00e+00 3.83e+03 0.00e+00 3.83e+03 1.94e+04 0 \n",
" 1 1.00e+00 3.78e+03 8.61e-06 3.78e+03 7.51e+02 0 \n",
" 2 1.00e+00 1.90e+02 2.66e+01 2.16e+02 1.24e+04 0 \n",
" 3 5.00e-01 1.10e+02 2.46e+01 1.22e+02 1.23e+04 0 Skip BFGS \n",
" 4 5.00e-01 6.72e+01 2.66e+01 8.05e+01 1.22e+04 0 \n",
" 5 5.00e-01 4.98e+01 2.38e+01 6.17e+01 1.21e+04 0 \n",
" 6 2.50e-01 3.05e+01 2.35e+01 3.64e+01 1.21e+04 0 "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 7 2.50e-01 2.52e+01 2.57e+01 3.17e+01 1.19e+04 0 Skip BFGS \n",
" 8 2.50e-01 2.46e+01 2.28e+01 3.03e+01 1.18e+04 0 \n",
" 9 1.25e-01 2.42e+01 2.27e+01 2.71e+01 1.17e+04 0 \n",
" 10 1.25e-01 2.29e+01 2.63e+01 2.62e+01 1.15e+04 0 "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 8.7439e-01 <= tolF*(1+|f0|) = 3.8260e+02\n",
"0 : |xc-x_last| = 2.1814e-01 <= tolX*(1+|x0|) = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.1490e+04 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.1490e+04 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 10 <= iter = 10\n",
"------------------------- DONE! -------------------------\n"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"beta = Parameters.BetaSchedule"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plot(M.vectorCCx, np.c_[data.mtrue, mopt])\n",
"xlabel('x')\n",
"legend(('true model','recovered model'))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"<matplotlib.legend.Legend at 0xa5f54e0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xa28e400>"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def MagInversion(mesh, model, data):\n",
" \n",
" \n",
" # Create a model, by default this is a model on the mesh\n",
" model = Model.BaseModel(M)\n",
" # Create the problem\n",
" prob = LinearProblem(M, model, G)\n",
" # create a simpeg data object, using a synthetic model and 5% noise\n",
"# data = prob.createSyntheticData(models[:,0],std=0.05)\n",
" if prob.ispaired:\n",
" prob.unpair()\n",
" if data.ispaired:\n",
" data.unpair()\n",
" prob.pair(data)\n",
" # Create an optimization program\n",
" opt = Optimization.InexactGaussNewton(maxIter=10)\n",
" # Create a regularization program\n",
" reg = Regularization.Tikhonov(model)\n",
" # Create an objective function\n",
" beta = Parameters.BetaSchedule(beta0=1e0)\n",
" obj = ObjFunction.BaseObjFunction(data, reg, beta=beta)\n",
" # Create an inversion object\n",
" inv = Inversion.BaseInversion(obj, opt)\n",
" # Start the inversion with a model of zeros, and run the inversion\n",
"# mopt = inv.run(m0)\n",
" \n",
" return inv"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"inv = MagInversion(M, model, data)\n",
"m0 = data.mtrue*0"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" out = inv.run(m0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 1.00e+00 3.83e+03 0.00e+00 3.83e+03 2.00e+04 0 \n",
" 1 1.00e+00 3.78e+03 8.67e-06 3.78e+03 7.64e+02 0 \n",
" 2 1.00e+00 1.37e+02 2.71e+01 1.64e+02 8.09e+03 0 Skip BFGS \n",
" 3 5.00e-01 1.30e+02 2.71e+01 1.43e+02 1.69e+02 0 \n",
" 4 5.00e-01 4.12e+01 3.94e+01 6.09e+01 2.11e+02 0 Skip BFGS \n",
" 5 5.00e-01 2.33e+01 2.06e+01 3.36e+01 6.27e+01 0 \n",
" 6 2.50e-01 1.26e+01 2.20e+01 1.80e+01 3.70e+01 0 \n",
" 7 2.50e-01 5.46e+00 2.09e+01 1.07e+01 6.26e+01 0 "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 8 2.50e-01 4.19e+00 2.09e+01 9.41e+00 6.06e+01 0 Skip BFGS \n",
" 9 1.25e-01 3.80e+00 2.08e+01 6.41e+00 2.69e+02 0 \n",
" 10 1.25e-01 3.52e+00 2.12e+01 6.17e+00 6.18e+01 0 Skip BFGS \n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 2.4171e-01 <= tolF*(1+|f0|) = 3.8275e+02\n",
"0 : |xc-x_last| = 1.5878e-01 <= tolX*(1+|x0|) = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 6.1841e+01 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 6.1841e+01 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 10 <= iter = 10\n",
"------------------------- DONE! -------------------------\n"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dpred1 = data.dpred(out)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plot(np.arange(20), np.c_[data.dpred(data.mtrue), dpred1])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
"[<matplotlib.lines.Line2D at 0xcd43828>,\n",
" <matplotlib.lines.Line2D at 0xcd43a20>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xa8d3278>"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print dpred1.shape"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"(20L,)\n"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class MyBetaSchedule(Parameters.BetaEstimate)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def test(x, **kwargs):\n",
" \n",
" return x, kwargs['A'], kwargs['B']"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = np.ones(3)\n",
"b = a\n",
"options = {'A': a, 'B': b}\n",
"\n",
"test(a, **options)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 39,
"text": [
"(array([ 1., 1., 1.]), array([ 1., 1., 1.]), array([ 1., 1., 1.]))"
]
}
],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class blah(object):\n",
" A = None\n",
" B = None\n",
" def __init__(self,*args,**kwargs):\n",
" Utils.setKwargs(self, **kwargs)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = np.ones(3)\n",
"b = a\n",
"options = {'A': a, 'B': b}\n",
"\n",
"BLAH = blah(a,**options)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 46
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print options.get('notthere','default')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"default\n"
]
}
],
"prompt_number": 55
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
+598
View File
@@ -0,0 +1,598 @@
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from SimPEG import *\n",
"from simpegPF import BaseMag\n",
"from scipy.constants import mu_0\n",
"from simpegPF.MagAnalytics import spheremodel, CongruousMagBC\n",
"from simpegPF.Magnetics import MagneticsDiffSecondary, MagneticsDiffSecondaryInv\n",
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Warning: Python backend is being used for solver. Run setup.py from the command line.\n",
"Warning: mumps solver not available.\n",
"Warning: upgrade your scipy to 0.13.0"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Populating the interactive namespace from numpy and matplotlib"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# import matplotlib.pyplot as plt\n",
"hxind = ((5,25,1.5),(21, 25),(5,25,1.5))\n",
"hyind = ((5,25,1.5),(21, 25),(5,25,1.5))\n",
"hzind = ((5,25,1.5),(20, 25),(5,25,1.5))\n",
"hx, hy, hz = Utils.meshTensors(hxind, hyind, hzind)\n",
"mesh = Mesh.TensorMesh([hx, hy, hz], [-hx.sum()/2,-hy.sum()/2,-hz.sum()/2])\n",
"\n",
"chibkg = 1e-7\n",
"chiblk = 0.1\n",
"chi = np.ones(mesh.nC)*chibkg\n",
"sph_ind = spheremodel(mesh, 0., 0., -200., 80)\n",
"chi[sph_ind] = chiblk\n",
"# model = BaseMag.BaseMagModel(mesh)\n",
"\n",
"active_ind = ((mesh.gridCC[:,2]>-500)&(mesh.gridCC[:,2]<0)) & ((mesh.gridCC[:,0]>-800) & (mesh.gridCC[:,0]<800) & (mesh.gridCC[:,1]>-800) &(mesh.gridCC[:,1]<800))\n",
"\n",
"activemodel = Model.ActiveModel(mesh, active_ind, 1e-4)\n",
"options = {'active_ind': active_ind}\n",
"depthmodel = BaseMag.BaseDepthModel(mesh, **options)\n",
"model = Model.ComboModel(mesh, [BaseMag.BaseMagModel, depthmodel, activemodel ])\n",
"\n",
"# mu = (1.+chi)*mu_0\n",
"\n",
"data = BaseMag.BaseMagData()\n",
"Inc = 90.\n",
"Dec = 0.\n",
"Btot = 51000\n",
"\n",
"data.setBackgroundField(Inc, Dec, Btot)\n",
"\n",
"xr = np.linspace(-300, 300, 41)\n",
"yr = np.linspace(-300, 300, 41)\n",
"X, Y = np.meshgrid(xr, yr)\n",
"Z = np.ones((xr.size, yr.size))*(0.)\n",
"rxLoc = np.c_[Utils.mkvc(X), Utils.mkvc(Y), Utils.mkvc(Z)]\n",
"data.rxLoc = rxLoc\n",
"prob = MagneticsDiffSecondary(mesh, model)\n",
"prob.pair(data)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"weight = abs(mesh.gridCC[:,2])**1.0\n",
"weight = weight/weight.max()\n",
"weight[~active_ind] = 1.\n",
"data.mtrue = (chi*1/weight)[active_ind]\n",
"# data.mtrue = (chi)[active_ind]\n",
"\n",
"# data.mtrue = chi\n",
"\n",
"data.dtrue = data.dpred(data.mtrue)\n",
"std = 0.1\n",
"noise = std*np.linalg.norm(data.dtrue)/np.sqrt(data.dtrue.size)*np.random.randn(*data.dtrue.shape) #(*??)\n",
"data.dobs = data.dtrue+noise\n",
"data.std = std"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig, ax = plt.subplots(1,2, figsize = (8,5) )\n",
"dat = ax[0].imshow(np.reshape(noise, (xr.size, yr.size), order='F'), extent=[min(xr), max(xr), min(yr), max(yr)])\n",
"plt.colorbar(dat, ax = ax[0])\n",
"dat2 = ax[1].imshow(np.reshape(data.dobs, (xr.size, yr.size), order='F'), extent=[min(xr), max(xr), min(yr), max(yr)])\n",
"plt.colorbar(dat2, ax = ax[1])\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xa401400>"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.plot(noise)\n",
"plt.plot(data.dobs)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"[<matplotlib.lines.Line2D at 0xa3ced68>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xa3cecc0>"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"inv, reg = MagneticsDiffSecondaryInv(mesh, model, data)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"m0 = (np.ones(mesh.nC)*1e-4*1/weight)[active_ind]\n",
"# m0 = (np.ones(mesh.nC)*1e-4)[active_ind]\n",
"\n",
"reg.mref = m0*0."
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dobj = inv.objFunc.dataObj(m0)\n",
"print dobj\n",
"print model.transform(m0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"550874.334999\n",
"[ 1.25676273e-06 1.25676273e-06 1.25676273e-06 ..., 1.25676273e-06\n",
" 1.25676273e-06 1.25676273e-06]\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data_ini = data.dpred(m0)\n",
"colorbar(mesh.plotImage(model.transform(m0)))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"C:\\Users\\SEOGI\\AppData\\Local\\Enthought\\Canopy\\App\\appdata\\canopy-1.0.1.1189.win-x86_64\\lib\\site-packages\\matplotlib\\colorbar.py:808: RuntimeWarning: invalid value encountered in divide\n",
" z = np.take(y, i0) + (xn-np.take(b,i0))*dy/db\n",
"C:\\Users\\SEOGI\\AppData\\Local\\Enthought\\Canopy\\App\\appdata\\canopy-1.0.1.1189.win-x86_64\\lib\\site-packages\\matplotlib\\colorbar.py:561: RuntimeWarning: invalid value encountered in greater\n",
" inrange = (ticks > -0.001) & (ticks < 1.001)\n",
"C:\\Users\\SEOGI\\AppData\\Local\\Enthought\\Canopy\\App\\appdata\\canopy-1.0.1.1189.win-x86_64\\lib\\site-packages\\matplotlib\\colorbar.py:561: RuntimeWarning: invalid value encountered in less\n",
" inrange = (ticks > -0.001) & (ticks < 1.001)\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"<matplotlib.colorbar.Colorbar instance at 0x000000000E4D3408>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xa394940>"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print (model.transform(m0)/mu_0).max()\n",
"print model.transform(m0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1.0001\n",
"[ 1.25676273e-06 1.25676273e-06 1.25676273e-06 ..., 1.25676273e-06\n",
" 1.25676273e-06 1.25676273e-06]\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig, ax = plt.subplots(1,2, figsize = (8,5) )\n",
"dat = ax[0].imshow(np.reshape(data_ini, (xr.size, yr.size), order='F'), extent=[min(xr), max(xr), min(yr), max(yr)])\n",
"plt.colorbar(dat, ax = ax[0])\n",
"dat2 = ax[1].imshow(np.reshape(data.dobs, (xr.size, yr.size), order='F'), extent=[min(xr), max(xr), min(yr), max(yr)])\n",
"plt.colorbar(dat2, ax = ax[1])\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xb4096d8>"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"beta = Parameters.BetaSchedule(coolingFactor = 10, coolingRate = 2, beta0 = 1e14)\n",
"inv.objFunc.beta = beta\n",
"inv.opt.maxIterLS = 40\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"inv.objFunc.data.Wd = 10."
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"reg.alpha_s = 1e-4\n",
"reg.alpha_x = 1.\n",
"reg.alpha_y = 1.\n",
"reg.alpha_z = 1."
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"out = inv.run(m0)\n",
"# reg = Regularization.Tikhonov(model)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"============================ Inexact Gauss Newton ============================\n",
" # beta phi_d phi_m f |proj(x-g)-x| LS Comment \n",
"-----------------------------------------------------------------------------\n",
" 0 1.00e+14 1.67e+08 1.28e-07 1.80e+08 9.58e+08 0 Skip BFGS "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 1 1.00e+14 1.36e+07 1.29e-07 2.64e+07 1.11e+08 0 Skip BFGS "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Iterative solver did not work well (Jvec)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 2 1.00e+13 1.36e+07 1.29e-07 1.49e+07 1.09e+08 5 Skip BFGS "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 3 1.00e+13 1.29e+07 1.29e-07 1.42e+07 1.06e+08 5 Skip BFGS "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Iterative solver did not work well (Jvec)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Iterative solver did not work well (Jvec)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 4 1.00e+12 7.14e+06 1.29e-07 7.27e+06 1.94e+08 3 "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Iterative solver did not work well (Jvec)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
" 5 1.00e+12 7.14e+06 1.29e-07 7.27e+06 1.94e+08 17 Skip BFGS "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"------------------------- STOP! -------------------------\n",
"1 : |fc-fOld| = 7.5435e+01 <= tolF*(1+|f0|) = 1.7998e+07\n",
"1 : |xc-x_last| = 6.9661e-07 <= tolX*(1+|x0|) = 1.1412e-01\n",
"0 : |proj(x-g)-x| = 1.9436e+08 <= tolG = 1.0000e-01\n",
"0 : |proj(x-g)-x| = 1.9436e+08 <= 1e3*eps = 1.0000e-02\n",
"1 : maxIter = 5 <= iter = 5\n",
"------------------------- DONE! -------------------------\n"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"indx = 15\n",
"fig, axes = subplots(1,2, figsize = (12, 5))\n",
"ps1 = mesh.plotSlice(chi, vType='CC', ind=indx, normal='X',ax = axes[0], grid=True, gridOpts={'color':'b','lw':0.3, 'alpha':0.5}); axes[0].set_title('$\\chi_{true}$', fontsize = 16);\n",
"ps2 = mesh.plotSlice(model.transform(out\n",
" )/mu_0-1, vType='CC', ind=indx, normal='X', ax = axes[1], grid=True, gridOpts={'color':'b','lw':0.3, 'alpha':0.5}); axes[1].set_title('$\\chi_{pred}$', fontsize = 16);\n",
"colorbar(ps1[0], ax = axes[0])\n",
"colorbar(ps2[0], ax = axes[1])\n",
"print 'x=', mesh.vectorCCx[indx]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"x= 0.0\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAAFMCAYAAACK6AkBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt0VPW9///nJJBwMUIyINZKQiMxJK2VWzKpBYKUAtZj\n8YKrpi1eaL8nJ3Q1VAyni6Wnoud7FGv9lsoSzLEL/Z1Sqnax/NaimAJfQ6CVDBFaLAQvGEStFhgg\n5EouzO+PIZO57JCZ7NlJ9vB6rDVL57M/+7M/e2fyzofPfPZ7O7xerxcREREREekXCQPdARERERGR\nS4kG4CIiIiIi/UgDcBERERGRfqQBuIiIiIhIP9IAXERERESkH2kALiIiIiLSjzQAFxERERHpR0MG\nugMS/5566in27NnDkCFD2LBhA8OHD/dv27lzJ+3t7cydO3cAeygiIiLSfxx6EI9Y6fz585w+fZph\nw4aRnZ3N/fffzwMPPADAgQMH2LdvH/fee+/AdlJERABNmIj0Fy1BEUslJCTgdDoZOXIkP/jBD3j+\n+ecB+Oijj9i9e7cG3yIig8T58+e59957eeGFF9i1axfr1q3zbztw4AB1dXUafIvEiGbApd8cPXqU\nzMxMKisrefvtt7n//vsHuksiImLg4YcfZvPmzfz973/no48+4rXXXmPp0qUD3S2RuKEBuPSryZMn\n84UvfIHXX38dh8MRtK2jo4PbbruNP/7xjwPUOxERgf6bMFm6dCnNzc288MILlrQvMljpJkzpN+fP\nnyc9PZ2PPvoobPANUF1dTVZW1gD0TEREAk2YMIGvfvWrPP7447z++uuWHScvL8+ytkUGMw3Apd+s\nW7eO//iP/6CgoIC6ujq+9KUv+bf96U9/4qmnnuK6667jzTffZNiwYfzpT3+ipqaGgoIC9u3bx89/\n/nP27NnD8ePHuf/++3n55Zdpbm7m3nvv5cCBA7z++utcf/31jBgxgsLCwgE8UxERe+ttwiRW/vzn\nP7Ny5UrL2hcZrDQAl37x3//933z7298mPT2dG264geeff55HH33Uv33evHn84he/4Gc/+xmXX345\nhw4d4qtf/Sqtra08+OCDnDt3jr/85S+MHTuWd999F4CtW7fywAMP8M9//pPvfe97VFdXc/78eSoq\nKgbqNEVE4sLFJkxqamrYsmULI0aMIDs7G7fbzb/8y79QUVHB22+/7Z802bx5s+HkyO7du3nvvffo\n7Ozk0KFDXHPNNQN4piIDQ1lQxHK/+c1vcLlcpKenA7B48WKef/55mpub8Xg8eL1e2traaGpq4vLL\nLwcgNzeXN998k4ULFwKQnJzMjTfeyG9/+1u+//3vA/D3v/+dr3zlK1RUVDBhwgR27drFn//8Z/8+\nIiISva4Jk7y8PP+ESaCGhgauvfZaOjs7WbhwIePHj2f//v1cf/31fOUrX+HBBx/kd7/7nX9ypLS0\nlJkzZ3Ly5Ek+/fRT/vM//5MlS5bwL//yL/6/CyKXGg3AxVI7duzgi1/8Itdff72/7J577qGwsJB7\n7rmHl19+GYfDwdtvv8306dNpbm5m9+7dALjd7rD1gR9//DHXXnstR44cYfz48bz55pu0tbVx0003\nMX/+fObPn88//vGPfj1HiQ9VVVXk5OSQlZXF2rVrw7YfPnyYr33tawwbNoynnnoqqn1F7CKSCZMb\nb7yRN998k3nz5gHwzjvvMGHChKBJk6SkJMPJkd///vf+VIa7du3SckG5ZGkALpb6xje+wZw5c4LK\nkpOT2bhxI7///e8pKSkBID09nc7OTrZs2cLXv/51GhsbycjIIDExMWjfhQsX8pvf/IZNmzaRkpLC\niRMnKCoq4h//+AdbtmzhlVde4dy5c/12fhI/li1bRnl5Odu3b+eZZ57h5MmTQdudTidr166lrKws\n6n1F7KC3CZOXXnrJvx68urqaqVOn0trayuHDh7nxxhvDJk1CJ0c+/fRTTpw4wXXXXQdARUUFM2bM\nYOfOnf17oiKDgNIQisglr76+ntmzZ7N//34ASktLmT9/PjfffHNY3UceeYTLLrvM/0TXaPYViQcf\nffQRd9xxB8uXL+fkyZPcdNNNXHXVVSxZsoSXXnrJX6+pqYnHH3+cgoIC2tvb+cpXvoLX6/VPtLz2\n2mukpqZyxx13aCmKXHJseROmlXdki0j/MjMHMMLhoCXKfS677DIaGhqCyvbu3cukSZP873Nzc9mz\nZ09Eg2gz+14qFLPj0/e+9z3A9w1Ql5dffjnqdpYvXx6zPkn/6Gvc7kvMBkhNTeXUqVN9OuZgZcsB\nuM8qi9sffuG/ffmoAFQCs6Nsp7e6RtvNlFUCN8W4TTNlRuWXah8vdryL6aluJb7PY6TMfv4jtcrU\n3i19aGFVY6OpY0ofPeiFERYfo/nCf/tynB2r4Buromujt7pG2yMtMyrfsQq+tqrvbcaiP6c+gD9+\nD744Hb79zMD10ez+b6yCWati259It0dav+szaaaNWGsG/qvv/6DuS8wGWHX6dFhZVVUVxcXFdHR0\nUFpayo9//OOwOitXruSll14iNTWV3/72t/7JkiVLlvDaa69xxRVX8M4773QfZ9Uqfv3rXzN27FgA\nHnvsMW66yff3/emnn2bt2rUMHTqU//7v/2bGjBl9OJNuWgMuIrY2JMqXkby8PA4fPux/f/DgQQoK\nCiI6vpl9RWwnbSKUVPsG3yJ9EG3M7ilu93bvjdvtZteuXdTU1FBWVhZ0/859993HG2+8Edamw+Fg\n+fLl7N+/n/379/sH38ePH2fdunXs2LGD9evXU1paauoagAbgImJzQ6N8GRk1ahTgm1E5evQo27Zt\nw+VyGdYN/eo1mn1FRC510cZso7hdX18PwKxZs8jIyGDevHlUV1cH1amurmbRokWkpaVRVFREbW2t\nf9vMmTNJTU017J/R8prq6moWLFhAeno6hYWFeL3esKWM0dIA3DITBroDEZgw0B2IwISB7kAEJgx0\nByIwYaA7MOitWbOG4uJi5s6dy9KlSxkzZgzl5eWUl5cD8PnnnzN+/Hh++ctf8r//9/8mPT2dxgvL\nWYz2FZv50uyB7kHv1MfYyZg90D3onV2upQWOANsCXqF6uvcmkNvtJjc31/9+7NixHDlypNdjr127\nloKCAp544gn/INvtdpOTk+Ov0/UAKjNsvAZ8sJsw0B2IwISB7kAEJgx0ByIwYaA7EIEJA90By8Qq\niBUWFgbNkAAUFxf7///KK6/k448/jnhfsZnM2QPdg95lzu5e6ztYZc4e/H0EewzAM2cPdA8sEUnM\nzr7w6rK9D8fxer1hs9m93RBeUlLCz372M86ePcuKFSsoLy+nrKzMcFbc7M3lmgEXEVuLxRIUERHp\nH7FYghLJvTcul4tDhw753584cYLMzMyL9u2KK67A4XAwatQofvSjH/HKK68YtnX48OGwBwVGSwNw\nEbG1WNzMIyIi/SMWN2FGcu+Ny+Vi8+bNeDweNm3aFLSEpCefffYZAB0dHWzatIlvfetbAOTn51NR\nUcGxY8eorKwkISGBlJSU6E8+gP4eiYitaVZbRMQ+YhWzu+69aW9vp7S01H/fDviWD+bn5zNjxgym\nT59OWloaGzdu9O9bVFTEzp078Xg8jB8/nkcffZT77ruPn/70p/z1r38lKSmJWbNm+Z/WPW7cOEpK\nSpgzZw5JSUn+45hhyydh+tbdrLL4KLHKgzyY84Bb0WY89Wcg+9jb8XoyEJ9bM1aZehCPw+Hg+Sj3\nuQ9zD/+R6DkcjsGfB7wvbfR3HvCBLFN/eu9PpNvN1reqjUiP81+OPsfQvsRsiM+4rRlwEbE1zYCL\niNiHYraPBuAiYmsKYiIi9qGY7aPrICK2ptkUERH7UMz20QBcRGxNwVxExD4Us300ABcRW1MQExGx\nD8VsH10HEbE1zaaIiNiHYraPHsQjIiIiItKPNAMuIramICYiYh+K2T66DiJia/o6U0TEPhSzfTQA\nFxFbUxATEbEPxWwfXQcRsTXNpoiI2Idito8G4CJiawpiIiL2oZjto+sgIram2RQREftQzPbRAFxE\nbE1BTETEPhSzfXQdRMTWNJsiImIfitk+ehCPiNja0ChfPamqqiInJ4esrCzWrl1rWGflypVkZmYy\nbdo0Dh8+7C/ftGkThYWFfPnLX+bXv/51LE5LRCQuRRuz43XArhlwEbG1WAWxZcuWUV5eTkZGBvPn\nz6eoqIgxY8b4t7vdbnbt2kVNTQ0VFRWUlZWxZcsW6uvreeSRR9izZw9Dhw5lzpw53HnnnYwaNSpG\nPRMRiR8aePpoBlxEbG3okOheRurr6wGYNWsWGRkZzJs3j+rq6qA61dXVLFq0iLS0NIqKiqitrQXg\nL3/5C1OnTiU1NZXLLruMG2+8kbfeesvScxYRsatoY3ZPcdvuNAAXkbi22wtPnO9+Gdm7dy+TJk3y\nv8/NzWXPnj1BddxuN7m5uf73Y8eO5cMPP2TWrFm43W7q6ur47LPPeP311/nLX/5iybmIiEh8iNN/\nV4jIpWJIL1Fs9oVXl5+39u04Xq8Xr9cbVj5y5EjWrFnDj370I+rr67nuuusYNmxY3w4iIhLneovZ\nhjpi3o0BZ+MB+HCbtB9NO73VNdpupsyKNuOpPwPZx2i297Vuf7RjvaGJ5tvIy8tjxYoV/vcHDx5k\nwYIFQXVcLheHDh1i/vz5AJw4cYLMzEwAbrnlFm655RYA7rrrrrB9BWi2yTGiaaO3ukbbIy0zu3+s\ny9Sf3vsT6Xaz9a1qo5+OE4uYHQ+0BEVEbG3IkOheRrpumKyqquLo0aNs27YNl8sVVMflcrF582Y8\nHg+bNm0iJyfHv+348eMAbN++nXfeeYepU6dac7IiIjYXbczu04y5Ddj4tFpsdpxo2umtrtLine truncated
"text": [
"<matplotlib.figure.Figure at 0xe4c6780>"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig, axes = subplots(1,2, figsize = (12, 5))\n",
"mesh.plotImage(model.transform(out)/mu_0-1, ax = axes[0])\n",
"mesh.plotImage(chi, ax = axes[1])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": [
"<matplotlib.collections.QuadMesh at 0xa40ce10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAs8AAAE/CAYAAAC5CC4zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8FFWe//9X50IIEBQQAotE5DJAUIRwCS6MwctqZBSU\nyQAzCzoIIvD1B4w4oKBDXB/j3WEXfoo4s9FVUAZcUUD9iooBwSEggopAhAHkGsKdoOGS0N8/TldS\n6XSSTlLVSYf3k0c/0pfq6vOmOpVPnzp12uP1er2IiIiIiEiFImq6ASIiIiIi4ULFs4iIiIhIkFQ8\ni4iIiIgEScWziIiIiEiQVDyLiIiIiARJxbOIiIiISJBUPEud89FHH5GSkkLz5s1p2bIlAwcOZO3a\ntQAcPHiQkSNH0qFDBy677DKuu+46Zs2axcWLF2u41SIily7ttyWcqHiWOuWvf/0r//7v/07fvn1Z\nt24dO3bs4L777mPRokXk5OTQrVs38vLymDNnDkePHuWNN97g888/58yZMzXddBGRS5L22xJuPPqS\nFKkr8vLyuOqqq/jjH//Io48+Wurx+++/n9WrV5OdnV0DrRMREX/ab0s4Us+z1Blbtmzh5MmTDBo0\nKODjq1evLvMxEREJPe23JRypeJY6Y9++fcTFxdG1a9eAj+/fv59//dd/DXGrRESkLNpvSzhS8Sx1\nRps2bcjLy+P7778v8/Evv/wyxK0SEZGyaL8t4UjFs9QZ11xzDU2aNGHp0qUBH7/hhhtYtmxZiFsl\nIiJl0X5bwlFkenp6ek03QsQJMTExNGvWjCeffJKTJ0/Stm1boqKi+PDDD3nllVeYOXMmL774IllZ\nWVx++eUkJCSwdetWxo0bx+233079+vVrOoKIyCVF+20JR+p5ljplzJgxzJ8/n7Vr15KcnMwvfvEL\nMjIy+O1vf0t8fDzffvstDRs2ZMKECVxxxRWMHDmSG2+8kbi4uJpuuojIJUn7bQk3mqpORERERCRI\n6nkWEREREQmSimcRERERkSCpeBYRERERCVJUTTfAzuPx1HQTRESq7FI7hUT7bBEJZ1XdZ9eq4tkI\nhz8+6b5LYNa2qB1/V9Ipr63lCX2OdKra1oo4nyUdt9pakcpnSaem2lqRklnSqa3tLC0de1u93ku5\nkEyv6QYEKRMYEPARr3cmAB7PEyFrTdkyKaudwQhtlkyq09byOJ8jE7faWpHKZ8mkptpakdJZMqmt\nbS0tk5JtTa/ymjRsQ0REREQkSCqeRURERESCpOK5SgbUdAMqYUBNN6ASBtR0AyphQE03oBIG1HQD\ngjSgphtQCQNqugFSaW1rugFBalvTDaiEtjXdgEpoW9MNqIS2Nd2ASmhb0w2ohLaOrUnFc5UMqOkG\nVMKAmm5AJQyo6QZUwoCabkAlDKjpBgRpQE03oBIG1HQDpNLa1nQDgtS2phtQCW1rugGV0LamG1AJ\nbWu6AZXQtqYbUAltHVuTimcRERERkSCpeBYRERERCZKKZxERERGRIKl4FhEREREJkopnEREREZEg\nqXgWEREREQmSimcRERERkSCpeBYRERERCZKKZxERERGRIKl4FhEREREJkopnEREREZEgqXgWERER\nEQmSimcRERERkSCpeBYRERERCZKKZxERERGRIKl4FhEREREJkopnEREREZEgqXgWEREREQmSimcR\nERERkSCpeBYRERERCZKKZxERERGRIKl4FhEREREJkopnEREREZEgqXgWEREREQmSimcRERERkSCp\neBYRERERCZKKZxERERGRIKl4FhEREREJkopnEREREZEgqXgWEREREQmSimcRERERkSCpeBYRERER\nCZKKZxERERGRIKl4FhEREREJUoXFc9u2benWrRs9evSgT58+AOTl5TF48GASEhK46667OHPmTNHy\ns2fPpmPHjiQmJrJmzZqi+7dt20ZSUhLt2rVjxowZLkQRERHts0VE3FVh8ezxeMjMzGTTpk2sX78e\ngLlz55KQkMCOHTu48soreeWVVwDIzc3l5Zdf5rPPPmPu3LlMnDixaD1Tpkxh2rRpbNiwgVWrVvHV\nV1+5FElE5NKlfbaIiLuCGrbh9XpL3F6/fj2jR48mJiaG++67j6ysLACysrJITU0lISGBlJQUvF5v\nUQ9HdnY2w4YNo1mzZgwZMqToOSIi4izts0VE3BNUz/NNN93EXXfdxdKlSwHYsGEDnTt3BqBz585F\nvRtZWVl06dKl6LmdOnUiKyuLnTt30qJFi6L7ExMTWbduXRmvmG67ZFY6kIhIaGRi7avS09NrtCV2\nod9nZ9ouexxOIyLilD2U3F9VXYXF89q1a/nmm294+umneeihh8jJySnVq1Eej8dT6r7yn59uuwwI\n+nWCkZMDSUnm+qpVMHx48WOjRsHKlZCbC/v2wbx5cOutZa8rPh4OHYLCQmjVytFmBqW6WVJSTNv9\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0xb42da90>"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dpredout = data.dpred(out)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig, ax = plt.subplots(1,2, figsize = (8,5) )\n",
"dat = ax[0].imshow(np.reshape(dpredout, (xr.size, yr.size), order='F'), extent=[min(xr), max(xr), min(yr), max(yr)])\n",
"plt.colorbar(dat, ax = ax[0])\n",
"dat2 = ax[1].imshow(np.reshape(data.dobs, (xr.size, yr.size), order='F'), extent=[min(xr), max(xr), min(yr), max(yr)])\n",
"plt.colorbar(dat2, ax = ax[1])\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0xa3e4b00>"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
-142
View File
@@ -1,142 +0,0 @@
from SimPEG.Utils.matutils import kron3, speye, sdiag
from SimPEG import *
import numpy as np
import scipy.sparse as sp
def ddxFaceDivBC(n, bc):
ij = (np.array([0, n-1]),np.array([0, 1]))
vals = np.zeros(2)
# Set the first side
if(bc[0] == 'dirichlet'):
vals[0] = 0
elif(bc[0] == 'neumann'):
vals[0] = -1
# Set the second side
if(bc[1] == 'dirichlet'):
vals[1] = 0
elif(bc[1] == 'neumann'):
vals[1] = 1
D = sp.csr_matrix((vals, ij), shape=(n,2))
return D
def faceDivBC(mesh, BC, ind):
"""
The facd divergence boundary condtion matrix
.. math::
"""
# The number of cell centers in each direction
n = mesh.nCv
# Compute faceDivergence operator on faces
if(mesh.dim == 1):
D = ddxFaceDivBC(n[0], BC[0])
elif(mesh.dim == 2):
D1 = sp.kron(speye(n[1]), ddxFaceDivBC(n[0]), BC[0])
D2 = sp.kron(ddxFaceDivBC(n[1], BC[1]), speye(n[0]))
D = sp.hstack((D1, D2), format="csr")
elif(mesh.dim == 3):
D1 = kron3(speye(n[2]), speye(n[1]), ddxFaceDivBC(n[0], BC[0]))
D2 = kron3(speye(n[2]), ddxFaceDivBC(n[1], BC[1]), speye(n[0]))
D3 = kron3(ddxFaceDivBC(n[2], BC[2]), speye(n[1]), speye(n[0]))
D = sp.hstack((D1, D2, D3), format="csr")
# Compute areas of cell faces & volumes
S = mesh.area[ind]
V = mesh.vol
mesh._faceDiv = sdiag(1/V)*D*sdiag(S)
return mesh._faceDiv
def faceBCind(mesh):
"""
Find indices of boundary faces in each direction
"""
if(mesh.dim==1):
indxd = (mesh.gridFx[:,0]==min(mesh.gridFx[:,0]))
indxu = (mesh.gridFx[:,0]==max(mesh.gridFx[:,0]))
return indxd, indxu
elif(mesh.dim==1):
indxd = (mesh.gridFx[:,0]==min(mesh.gridFx[:,0]))
indxu = (mesh.gridFx[:,0]==max(mesh.gridFx[:,0]))
indyd = (mesh.gridFy[:,1]==min(mesh.gridFy[:,1]))
indyu = (mesh.gridFy[:,1]==max(mesh.gridFy[:,1]))
return indxd, indxu, indyd, indyu
elif(mesh.dim==3):
indxd = (mesh.gridFx[:,0]==min(mesh.gridFx[:,0]))
indxu = (mesh.gridFx[:,0]==max(mesh.gridFx[:,0]))
indyd = (mesh.gridFy[:,1]==min(mesh.gridFy[:,1]))
indyu = (mesh.gridFy[:,1]==max(mesh.gridFy[:,1]))
indzd = (mesh.gridFz[:,2]==min(mesh.gridFz[:,2]))
indzu = (mesh.gridFz[:,2]==max(mesh.gridFz[:,2]))
return indxd, indxu, indyd, indyu, indzd, indzu
def spheremodel(mesh, x0, y0, z0, r):
"""
Generate model indicies for sphere
- (x0, y0, z0 ): is the center location of sphere
- r: is the radius of the sphere
- it returns logical indicies of cell-center model
"""
ind = np.sqrt((mesh.gridCC[:,0]-x0)**2+(mesh.gridCC[:,1]-y0)**2+(mesh.gridCC[:,2]-z0)**2 ) < r
return ind
def MagSphereAnalFun(x, y, z, R, x0, y0, z0, mu1, mu2, H0, flag):
"""
Analytic function for Magnetics problem. The set up here is
magnetic sphere in whole-space.
- (x0,y0,z0)
- (x0, y0, z0 ): is the center location of sphere
- r: is the radius of the sphere
.. math::
\mathbf{H}^p = H_0\hat{x}
"""
if (~np.size(x)==np.size(y)==np.size(z)):
print "Specify same size of x, y, z"
return
dim = x.shape
x = Utils.mkvc(x)
y = Utils.mkvc(y)
z = Utils.mkvc(z)
ind = np.sqrt((x-x0)**2+(y-y0)**2+(z-z0)**2 ) < R
r = Utils.mkvc(np.sqrt((x-x0)**2+(y-y0)**2+(z-z0)**2 ))
Bx = np.zeros(x.size)
By = np.zeros(x.size)
Bz = np.zeros(x.size)
# Inside of the sphere
rf2 = 3*mu1/(mu2+2*mu1)
if (flag == 'total'):
Bx[ind] = mu2*H0*(rf2)
elif (flag == 'secondary'):
Bx[ind] = mu2*H0*(rf2)-mu1*H0
By[ind] = 0.
Bz[ind] = 0.
# Outside of the sphere
rf1 = (mu2-mu1)/(mu2+2*mu1)
if (flag == 'total'):
Bx[~ind] = mu1*(H0+H0/r[~ind]**5*(R**3)*rf1*(2*x[~ind]**2-y[~ind]**2-z[~ind]**2))
elif (flag == 'secondary'):
Bx[~ind] = mu1*(H0/r[~ind]**5*(R**3)*rf1*(2*x[~ind]**2-y[~ind]**2-z[~ind]**2))
By[~ind] = mu1*(H0/r[~ind]**5*(R**3)*rf1*(3*x[~ind]*y[~ind]))
Bz[~ind] = mu1*(H0/r[~ind]**5*(R**3)*rf1*(3*x[~ind]*z[~ind]))
return np.reshape(Bx, x.shape, order='F'), np.reshape(By, x.shape, order='F'), np.reshape(Bz, x.shape, order='F')