diff --git a/SimPEG/forward/Richards.py b/SimPEG/forward/Richards.py index 99090d84..b23680d7 100644 --- a/SimPEG/forward/Richards.py +++ b/SimPEG/forward/Richards.py @@ -15,10 +15,10 @@ class RichardsProblem(Problem): @property def timeStep(self): """The time between steps.""" - return self._timeStep + return getattr(self, '_timeStep', None) @timeStep.setter def timeStep(self, value): - self._timeStep = float(value) + self._timeStep = float(value) # Because integers suck. @property def numIts(self): diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 871a7f06..9ab84fbd 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -93,6 +93,8 @@ class BaseInversion(object): self.m = m0 self._iter = 0 self._beta = None + self.phi_d_last = np.nan + self.phi_m_last = np.nan def doEndIteration(self): """ diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index ca2061f5..bf8b63be 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -189,7 +189,9 @@ class Minimize(object): self.f, self.g, self.H = evalFunction(self.xc, return_g=True, return_H=True) if doPub: pub.sendMessage('Minimize.evalFunction', minimize=self, f=self.f, g=self.g, H=self.H) self.printIter() - if self.stoppingCriteria(): break + if self.stoppingCriteria(): + self.doEndIteration(self.xc) + break p = self.findSearchDirection() if doPub: pub.sendMessage('Minimize.searchDirection', minimize=self, p=p) p = self.scaleSearchDirection(p) @@ -273,6 +275,11 @@ class Minimize(object): parent.printIter function and call that. """ + + for method in [posible for posible in dir(self) if '_printIter' in posible]: + if self.debug: print 'printIter is calling self.'+method + getattr(self,method)(inLS) + if doPub and not inLS: pub.sendMessage('Minimize.printIter', minimize=self) pad = ' '*10 if inLS else '' printLine(self, self.printers if not inLS else self.printersLS, pad=pad)