From 34a28c89b5b2ae26472d330ea7bc1c958bc3b689 Mon Sep 17 00:00:00 2001
From: Carl-Martin Pfeiler <carl-martin.pfeiler@asc.tuwien.ac.at>
Date: Mon, 19 Aug 2019 16:00:08 +0200
Subject: [PATCH] guess(x0 in gmres) for MPS

---
 integrators/mps.py | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/integrators/mps.py b/integrators/mps.py
index 98b0701..33138a2 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()) )
-- 
GitLab