From 50c35bfeb2dde2951595889603c0d00e2d8d4d2f Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pauli.t.virtanen@jyu.fi>
Date: Thu, 25 Apr 2024 11:54:55 +0300
Subject: [PATCH] solver: fix cpr vs. singlet & solver reset

---
 usadelndsoc/solver.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/usadelndsoc/solver.py b/usadelndsoc/solver.py
index 0004506..6e9af73 100644
--- a/usadelndsoc/solver.py
+++ b/usadelndsoc/solver.py
@@ -1155,6 +1155,7 @@ def _self_consistent_Delta_f(
     mask = mask1 & mask2
 
     solver.Delta[mask] = singlet_m(Delta[mask])
+    solver.reset()
 
     if workers is not None:
         jobs = []
@@ -1406,11 +1407,11 @@ def cpr(
             # Corrector
             def constraint_fun(phi, Delta):
                 # Pseudoarclength constraint
-                Delta[phase_mask] = Delta_00[phase_mask] * np.exp(1j * phi)
+                Delta[phase_mask] = singlet(Delta_00[phase_mask]) * np.exp(1j * phi)
 
                 m = solver.mask == MASK_NONE
                 dsa = theta * np.real(
-                    np.vdot(dDelta[m], Delta[m] - state.Deltas[-1][m])
+                    np.vdot(singlet(dDelta[m]), Delta[m] - singlet(state.Deltas[-1][m]))
                 )
                 dsb = (1 - theta) * dphi * (phi - state.phis[-1])
                 dstot = dsa + dsb
-- 
GitLab