From 056dc09fa63a3cc0e6582a915b5605f1f4206338 Mon Sep 17 00:00:00 2001 From: D Fournier Date: Fri, 29 Apr 2016 15:10:30 -0700 Subject: [PATCH] Fix Update_Precondition directive --- SimPEG/Directives.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/SimPEG/Directives.py b/SimPEG/Directives.py index ee29e770..b32cd798 100644 --- a/SimPEG/Directives.py +++ b/SimPEG/Directives.py @@ -305,11 +305,24 @@ class Update_IRLS(InversionDirective): self.reg._W = None class Update_lin_PreCond(InversionDirective): - - + """ + Create a Jacobi preconditioner for the linear problem + """ + onlyOnStart=True + + def initialize(self): + + if getattr(self.opt, 'approxHinv', None) is None: + # Update the pre-conditioner + diagA = np.sum(self.prob.G**2.,axis=0) + self.invProb.beta*(self.reg.W.T*self.reg.W).diagonal() #* (self.reg.mapping * np.ones(self.reg.curModel.size))**2. + PC = Utils.sdiag(diagA**-1.) + self.opt.approxHinv = PC + def endIter(self): # Cool the threshold parameter - + if self.onlyOnStart==True: + return + if getattr(self.opt, 'approxHinv', None) is not None: # Update the pre-conditioner diagA = np.sum(self.prob.G**2.,axis=0) + self.invProb.beta*(self.reg.W.T*self.reg.W).diagonal() #* (self.reg.mapping * np.ones(self.reg.curModel.size))**2.