diff --git a/tests/test_solver.py b/tests/test_solver.py index 73822e109612223b4000d5f6586b78bb611d144f..670d2cee5f61e787f34ec4e7d1bb77e7388117fb 100644 --- a/tests/test_solver.py +++ b/tests/test_solver.py @@ -264,7 +264,10 @@ def curve_separation(x1, y1, x2, y2): return s.min(axis=1).max() -def test_soc_analytic(n=10): +@pytest.mark.parametrize( + "T,n,alpha_soc", [(0.1, 10, 0.01), (0.4, 10, 0.01), (0.4, 5, 0.0123)] +) +def test_soc_analytic(T, n, alpha_soc): sx = np.array([[0, 1], [1, 0]]) sy = np.array([[0, -1j], [1j, 0]]) sz = np.array([[1, 0], [0, -1]]) @@ -301,11 +304,9 @@ def test_soc_analytic(n=10): sol0 = get_sol(soc_alpha=0, alpha=0, h=h) # Solver for evaluating current perturbatively in SOC - alpha_soc = 0.01 alpha = 1.0 sol = get_sol(soc_alpha=alpha_soc, alpha=alpha, h=h, D=0) - T = 0.4 E_typical = 10 + 10 * T w, a = get_matsubara_sum(T, E_typical) @@ -325,20 +326,24 @@ def test_soc_analytic(n=10): res0 = sol0.solve(omega=ww) sol.omega = ww J = sol._core.grad_A(res0.Phi.copy()).transpose(0, 1, 2, 4, 3) * (1 / 16) - J[:, :, 0] /= dd[1] * sol.Ly - J[:, :, 1] /= dd[0] * sol.Lx - J[:, :, 2] /= dd[1] * sol.Ly - J[:, :, 3] /= dd[0] * sol.Lx - Jtot += aa * J + J[:, :, 0] /= dd[1] + J[:, :, 1] /= dd[0] + J[:, :, 2] /= dd[1] + J[:, :, 3] /= dd[0] + Jtot += pi * aa * J gp = (ww - 1j * h) / np.sqrt((ww - 1j * h) ** 2 + 1) gm = (ww + 1j * h) / np.sqrt((ww + 1j * h) ** 2 + 1) fp = 1 / np.sqrt((ww - 1j * h) ** 2 + 1) fm = 1 / np.sqrt((ww + 1j * h) ** 2 + 1) Jy_an = ( - (gp - gm) * (1 + gp * gm + fp * fm) * (-1j * pi * alpha * alpha_soc**3) + (gp - gm) * (1 + gp * gm + fp * fm) * (-1j * alpha_soc**3) * (32 * alpha) ) - Jantot += aa * Jy_an + Jantot += pi * aa * Jy_an + + Jy = tr(J @ t3)[n // 2, n // 2, 1] + + assert_allclose(-Jy, Jy_an, rtol=1e-2) Fs.append(res0.F.copy()) Gs.append(res0.G.copy())