From 1c895f397d014677db5c8f45d13c14b31f08e2bc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 20 Nov 2013 19:37:09 -0800 Subject: [PATCH] Set Mref in inversion. --- SimPEG/inverse/Inversion.py | 11 ++++++++++- SimPEG/regularization/Regularization.py | 5 ++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 9ab84fbd..e0b62866 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -29,6 +29,11 @@ class BaseInversion(object): self.opt.printers.insert(3,SimPEG.inverse.IterationPrinters.phi_m) self.opt.stoppers.append(SimPEG.inverse.StoppingCriteria.phi_d_target_Minimize) + if not hasattr(opt, '_bfgsH0'): # Check if it has been set by the user and the default is not being used. + print 'Setting bfgsH0 to the inverse of the modelObj2Deriv.' + opt.bfgsH0 = SimPEG.Solver(reg.modelObj2Deriv(),doDirect=True,options={'factorize':True}) # False, options={'M':'GS','maxIter':15} + + @property def Wd(self): """ @@ -90,6 +95,10 @@ class BaseInversion(object): if self.debug: print 'startup is calling self.'+method getattr(self,method)(m0) + if not hasattr(self.reg, '_mref'): + print 'Regularization has not set mref. SimPEG will set it to m0.' + self.reg.mref = m0 + self.m = m0 self._iter = 0 self._beta = None @@ -159,7 +168,7 @@ class BaseInversion(object): if return_H: def H_fun(v): phi_d2Deriv = self.dataObj2Deriv(m, v, u=u) - phi_m2Deriv = self.reg.modelObj2Deriv(m)*v + phi_m2Deriv = self.reg.modelObj2Deriv()*v return phi_d2Deriv + self._beta * phi_m2Deriv diff --git a/SimPEG/regularization/Regularization.py b/SimPEG/regularization/Regularization.py index 6f5970e6..72335661 100644 --- a/SimPEG/regularization/Regularization.py +++ b/SimPEG/regularization/Regularization.py @@ -7,7 +7,7 @@ class Regularization(object): @property def mref(self): if getattr(self, '_mref', None) is None: - self._mref = np.zeros(self.mesh.nC); + return np.zeros(self.mesh.nC); return self._mref @mref.setter def mref(self, value): @@ -104,8 +104,7 @@ class Regularization(object): return mobjDeriv - def modelObj2Deriv(self, m): - mresid = m - self.mref + def modelObj2Deriv(self): mobj2Deriv = self.alpha_s * self.Ws.T * self.Ws