From c0fbbd6adb6d9c45f3dcf4b46e70a03da37e4ee5 Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pauli.t.virtanen@jyu.fi>
Date: Mon, 15 Jan 2024 14:28:24 +0200
Subject: [PATCH] solver: don't reset preconditioner on initial continuation

Reusing same preconditioner for the continuation is a little bit faster.
---
 usadelndsoc/solver.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/usadelndsoc/solver.py b/usadelndsoc/solver.py
index c8e2783..04c81ea 100644
--- a/usadelndsoc/solver.py
+++ b/usadelndsoc/solver.py
@@ -394,12 +394,12 @@ class Solver:
                     minw = max(1e-6, 0.25 * abs_re_w)
                     steps = [0.75**k for k in range(50) if 0.75**k > abs_re_w / 5]
                     try:
+                        self._M = M = None
                         for domega in steps:
                             _log_solve.debug(f"  Continuation step {domega}")
                             self._core.omega = old_omega + domega * (
                                 1 if np.real(old_omega) >= 0 else -1
                             )
-                            self._M = M = None
                             self._Phi[...] = self._solve(
                                 eval_rhs,
                                 eval_jac_mul,
@@ -421,7 +421,8 @@ class Solver:
                     if np.isnan(self._Phi).any():
                         break
                     _log_solve.debug(f"    continuation step 0")
-                self._M = M = None
+                else:
+                    self._M = M = None
                 return self._solve(
                     eval_rhs,
                     eval_jac_mul,
-- 
GitLab