diff --git a/SimPEG/Directives.py b/SimPEG/Directives.py index 48d7abcf..60c9941e 100644 --- a/SimPEG/Directives.py +++ b/SimPEG/Directives.py @@ -207,6 +207,39 @@ class SaveOutputEveryIteration(_SaveEveryIteration): f.close() +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,dpred=self.invProb.dpred) + # class UpdateReferenceModel(Parameter): diff --git a/SimPEG/MT/BaseMT.py b/SimPEG/MT/BaseMT.py index 7ebf66d3..ddcff33f 100644 --- a/SimPEG/MT/BaseMT.py +++ b/SimPEG/MT/BaseMT.py @@ -66,6 +66,7 @@ class BaseMTProblem(BaseFDEMProblem): # v should be of size 2*nE (for 2 polarizations) PDeriv_u = lambda t: rx.projectFieldsDeriv(src, self.mesh, u, t) # wrt u, we don't have have PDeriv wrt m Jv[src, rx] = PDeriv_u(mkvc(du_dm)) + dA_duI.clean() # Return the vectorized sensitivities return mkvc(Jv) @@ -112,5 +113,6 @@ class BaseMTProblem(BaseFDEMProblem): Jtv += -du_dmT.real else: raise Exception('Must be real or imag') - + # Clean the factorization, clear memory. + ATinv.clean() return Jtv \ No newline at end of file