diff --git a/integrators/mps.py b/integrators/mps.py index 98b0701ad3936adb7937f5d772df2327c1df4606..33138a29a67237c8af827d5b4bcc7150f6b80e59 100644 --- a/integrators/mps.py +++ b/integrators/mps.py @@ -312,6 +312,32 @@ class MPS(_integrator._Integrator, \ self._RHS = (2.0 / self._k) * (self._Mh_diag * self._Mag.m.vec.FV().NumPy()) +#------------------------------------------------------------------------------# + + + def _UpdateGuess(self): + if(self.parameters.guessType == "old"): + self._UpdateGuess_Old() + elif(self.parameters.guessType == None): + self._UpdateGuess_None() + else: + raise ValueError("guessType = ", self.parameters.guessType, "not known") + + +#------------------------------------------------------------------------------# + + + def _UpdateGuess_Old(self): + self._guess = self._Mag_eta.m.vec.FV().NumPy() + + +#------------------------------------------------------------------------------# + + + def _UpdateGuess_None(self): + self._guess = None + + #------------------------------------------------------------------------------# @@ -340,9 +366,12 @@ class MPS(_integrator._Integrator, \ self._Compute_LHS_iter() LHS = LHS_fix + self._LHS_iter + self._UpdateGuess() + self._Mag_eta.m.vec.FV().NumPy()[:], succ \ - = scipy.sparse.linalg.gmres(LHS, RHS , x0=None \ - , tol=self._solvetol, maxiter=4000, M=self._preconditioner, callback=self._callback) + = scipy.sparse.linalg.gmres(LHS, RHS \ + , x0=self._guess, tol=self._solvetol, maxiter=4000 \ + , M=self._preconditioner, callback=self._callback) diff_gf.vec.FV().NumPy()[:] = self._Mag_eta.m.vec.FV().NumPy()-oldIterate itError = sqrt( Integrate(diff_cf*diff_cf, self._GetMesh()) )