From 9d5db11b0e163008d7ca4679def144c40e076396 Mon Sep 17 00:00:00 2001 From: GudniRos Date: Thu, 13 Aug 2015 10:19:45 -0700 Subject: [PATCH] Added a new inversion derictive. --- SimPEG/Directives.py | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/SimPEG/Directives.py b/SimPEG/Directives.py index 3ec9e96e..9e3dafef 100644 --- a/SimPEG/Directives.py +++ b/SimPEG/Directives.py @@ -207,6 +207,76 @@ class SaveOutputEveryIteration(_SaveEveryIteration): f.close() +class SaveOutputDictEveryIteration(_SaveEveryIteration): + """SaveOutputDictEveryIteration""" + + def initialize(self): + print "SimPEG.SaveOutputDictEveryIteration will save your inversion progress as dictionary: '###-%s.npz'"%self.fileName + + def endIter(self): + # Save the data. + ms = self.reg.Ws * ( self.reg.mapping * (self.invProb.curModel - self.reg.mref) ) + phi_ms = 0.5*ms.dot(ms) + if self.reg.smoothModel == True: + mref = self.reg.mref + else: + mref = 0 + mx = self.reg.Wx * ( self.reg.mapping * (self.invProb.curModel - mref) ) + phi_mx = 0.5 * mx.dot(mx) + if self.prob.mesh.dim==2: + my = self.reg.Wy * ( self.reg.mapping * (self.invProb.curModel - mref) ) + phi_my = 0.5 * my.dot(my) + else: + phi_my = 'NaN' + if self.prob.mesh.dim==3: + mz = self.reg.Wz * ( self.reg.mapping * (self.invProb.curModel - mref) ) + phi_mz = 0.5 * mz.dot(mz) + else: + phi_mz = 'NaN' + + + # Save the file as a npz + np.savez('{:03d}-{:s}'.format(self.opt.iter,self.fileName), iter=self.opt.iter, beta=self.invProb.beta, phi_d=self.invProb.phi_d, phi_m=self.invProb.phi_m, phi_ms=phi_ms, phi_mx=phi_mx, phi_my=phi_my, phi_mz=phi_mz,f=self.opt.f, m=self.invProb.curModel) + + +class SaveOutputDictEveryIteration(_SaveEveryIteration): + """SaveOutputDictEveryIteration + + A directive that saves some relevant information from the inversion run to a numpy .npz dictionary file (see numpy.savez function for further info). + + + + """ + + def initialize(self): + print "SimPEG.SaveOutputDictEveryIteration will save your inversion progress as dictionary: '###-%s.npz'"%self.fileName + + def endIter(self): + # Save the data. + ms = self.reg.Ws * ( self.reg.mapping * (self.invProb.curModel - self.reg.mref) ) + phi_ms = 0.5*ms.dot(ms) + if self.reg.smoothModel == True: + mref = self.reg.mref + else: + mref = 0 + mx = self.reg.Wx * ( self.reg.mapping * (self.invProb.curModel - mref) ) + phi_mx = 0.5 * mx.dot(mx) + if self.prob.mesh.dim==2: + my = self.reg.Wy * ( self.reg.mapping * (self.invProb.curModel - mref) ) + phi_my = 0.5 * my.dot(my) + else: + phi_my = 'NaN' + if self.prob.mesh.dim==3: + mz = self.reg.Wz * ( self.reg.mapping * (self.invProb.curModel - mref) ) + phi_mz = 0.5 * mz.dot(mz) + else: + phi_mz = 'NaN' + + + # Save the file as a npz + np.savez('{:03d}-{:s}'.format(self.opt.iter,self.fileName), iter=self.opt.iter, beta=self.invProb.beta, phi_d=self.invProb.phi_d, phi_m=self.invProb.phi_m, phi_ms=phi_ms, phi_mx=phi_mx, phi_my=phi_my, phi_mz=phi_mz,f=self.opt.f, m=self.invProb.curModel) + + # class UpdateReferenceModel(Parameter):