mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-01 08:54:09 +08:00
Fixed Tests.
This commit is contained in:
@@ -10,6 +10,7 @@ class DCProblemTests(unittest.TestCase):
|
||||
h1 = np.ones(20)
|
||||
h2 = np.ones(20)
|
||||
mesh = Mesh.TensorMesh([h1,h2])
|
||||
model = Model.BaseModel(mesh)
|
||||
|
||||
# Create some parameters for the model
|
||||
sig1 = 1
|
||||
@@ -19,7 +20,7 @@ class DCProblemTests(unittest.TestCase):
|
||||
p0 = [2, 2]
|
||||
p1 = [5, 5]
|
||||
condVals = [sig1, sig2]
|
||||
mSynth = Utils.ModelBuilder.defineBlockConductivity(p0,p1,mesh.gridCC,condVals)
|
||||
mSynth = Utils.ModelBuilder.defineBlockConductivity(mesh.gridCC,p0,p1,condVals)
|
||||
|
||||
# Set up the projection
|
||||
nelec = 10
|
||||
@@ -29,36 +30,37 @@ class DCProblemTests(unittest.TestCase):
|
||||
elecend = 0.5+spacelec*(nelec-1)
|
||||
elecLocR = np.linspace(elecini, elecend, nelec)
|
||||
rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5
|
||||
q, Q, rxmidloc = genTxRxmat(nelec, spacelec, surfloc, elecini, mesh)
|
||||
q, Q, rxmidloc = simpegDC.genTxRxmat(nelec, spacelec, surfloc, elecini, mesh)
|
||||
P = Q.T
|
||||
Q = Q.toarray()
|
||||
|
||||
# Create some data
|
||||
|
||||
problem = DCProblem(mesh)
|
||||
problem.P = P
|
||||
problem.RHS = q
|
||||
data = problem.createSyntheticData(mSynth, std=0.05)
|
||||
prob = simpegDC.DCProblem(mesh, model)
|
||||
data = prob.createSyntheticData(mSynth, std=0.05, P=P, RHS=Q)
|
||||
|
||||
# Now set up the problem to do some minimization
|
||||
opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=10, tolF=1e-6, tolX=1e-6, tolG=1e-6, maxIterCG=6)
|
||||
reg = inverse.Regularization(mesh)
|
||||
inv = inverse.Inversion(problem, reg, opt, data, beta0=1e4)
|
||||
opt = Optimization.InexactGaussNewton(maxIterLS=20, maxIter=10, tolF=1e-6, tolX=1e-6, tolG=1e-6, maxIterCG=6)
|
||||
reg = Regularization.Tikhonov(model)
|
||||
objFunc = ObjFunction.BaseObjFunction(data, reg, beta=1e4)
|
||||
inv = Inversion.BaseInversion(objFunc, opt)
|
||||
|
||||
self.inv = inv
|
||||
self.reg = reg
|
||||
self.p = problem
|
||||
self.p = prob
|
||||
self.mesh = mesh
|
||||
self.m0 = mSynth
|
||||
self.data = data
|
||||
self.objFunc = objFunc
|
||||
|
||||
def test_misfit(self):
|
||||
derChk = lambda m: [self.p.dpred(m), lambda mx: self.p.J(self.m0, mx)]
|
||||
passed = checkDerivative(derChk, self.m0, plotIt=False)
|
||||
derChk = lambda m: [self.data.dpred(m), lambda mx: self.p.J(self.m0, mx)]
|
||||
passed = Tests.checkDerivative(derChk, self.m0, plotIt=False)
|
||||
self.assertTrue(passed)
|
||||
|
||||
def test_adjoint(self):
|
||||
# Adjoint Test
|
||||
u = np.random.rand(self.mesh.nC*self.p.RHS.shape[1])
|
||||
u = np.random.rand(self.mesh.nC*self.data.RHS.shape[1])
|
||||
v = np.random.rand(self.mesh.nC)
|
||||
w = np.random.rand(self.data.dobs.shape[0])
|
||||
wtJv = w.dot(self.p.J(self.m0, v, u=u))
|
||||
@@ -67,12 +69,8 @@ class DCProblemTests(unittest.TestCase):
|
||||
self.assertTrue(passed)
|
||||
|
||||
def test_dataObj(self):
|
||||
derChk = lambda m: [self.inv.dataObj(m), self.inv.dataObjDeriv(m)]
|
||||
checkDerivative(derChk, self.m0, plotIt=False)
|
||||
|
||||
def test_modelObj(self):
|
||||
derChk = lambda m: [self.reg.modelObj(m), self.reg.modelObjDeriv(m)]
|
||||
checkDerivative(derChk, self.m0, plotIt=False)
|
||||
derChk = lambda m: [self.objFunc.dataObj(m), self.objFunc.dataObjDeriv(m)]
|
||||
Tests.checkDerivative(derChk, self.m0, plotIt=False)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user