diff --git a/usadelndsoc/solver.py b/usadelndsoc/solver.py index 22f82660c2b555329418e41a21e893a9f18efa91..47ee7a7fc341c86a398baa6c4598159438b587d9 100644 --- a/usadelndsoc/solver.py +++ b/usadelndsoc/solver.py @@ -36,12 +36,39 @@ except ImportError: from .core import Core, MASK_NONE, MASK_TERMINAL, MASK_VACUUM, _DeltaArray from .matsubara import get_matsubara_sum -__all__ = ["Solver", "Result", "cpr", "tr", "MASK_NONE", "MASK_TERMINAL", "MASK_VACUUM"] +__all__ = [ + "Solver", + "Result", + "cpr", + "MASK_NONE", + "MASK_TERMINAL", + "MASK_VACUUM", + "tr", + "LEFT", + "UP", + "RIGHT", + "DOWN", + "S_x", + "S_y", + "S_z", + "S_0", +] _log = logging.getLogger(__name__) _log_solve = logging.getLogger(__name__ + ".solve") +S_x = np.array([[0, 1], [1, 0]]) +S_y = np.array([[0, -1j], [1j, 0]]) +S_z = np.array([[1, 0], [0, -1]]) +S_0 = np.array([[1, 0], [0, 1]]) + +LEFT = 0 +UP = 1 +RIGHT = 2 +DOWN = 3 + + def _core_property(name): def fget(self): return getattr(self._core, name) @@ -599,6 +626,18 @@ class Result: def J(self): return self._core.grad_A(self.Phi).transpose(0, 1, 2, 4, 3) * (1 / 16) + @property + def J_c(self): + t3 = np.diag([1, 1, -1, -1]) + return tr(self.J @ t3) + + @property + def J_s(self): + jx = tr(self.J @ np.kron(s0, sx)) + jy = tr(self.J @ np.kron(s0, sy)) + jz = tr(self.J @ np.kron(s0, sz)) + return np.array([jx, jy, jz]).transpose(1, 2, 3, 0) + @property def S(self): return self._core.grad_Omega(self.Phi).transpose(0, 1, 3, 2)