diff --git a/tests/test_basic.py b/tests/test_basic.py index 1ac3cf65d5f600828e9487e1247b80fc20a2591b..e17b651f0eb0c0996ecf451b5a6087560ee30855 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -10,13 +10,10 @@ import usadelndsoc.solver usadelndsoc.logger.setLevel(logging.DEBUG) -def basic_setup(terminals=False, nx=15, ny=5): - Delta = np.zeros((4, 4)) - Delta[:2, 2:] = np.eye(2) - Delta[2:, :2] = np.eye(2) - +def basic_setup(terminals=False, nx=15, ny=5, h=0): s = usadelndsoc.solver.Solver(nx=nx, ny=ny) - s.Omega[...] = 1j * Delta + s.Delta[...] = np.eye(2) + s.Omega[...] += np.diag([1, -1, -1, 1]) * h s.alpha = 0.0 s.Lx = 10 s.Ly = 10 @@ -40,10 +37,11 @@ def test_solve_dos(): assert_allclose(g, g_an, rtol=1e-4) -@pytest.mark.parametrize("omega", [0.5 + 0.8j, -0.5 + 0.8j]) -def test_result_S_J0(omega): - s = basic_setup() - s.Delta[...] = np.eye(2) +@pytest.mark.parametrize( + "omega,h", [(w, h) for w in (0.5 + 0.8j, -0.5 + 0.8j) for h in (0, -0.5, 0.5)] +) +def test_result_S_J0(omega, h): + s = basic_setup(h=h) res = s.solve_many(omega=omega) S = res.S @@ -55,17 +53,20 @@ def test_result_S_J0(omega): assert_allclose(S[:, :, 2:, 2:], vol * res.Gc) # Check vs. analytic - Gan = omega / np.sqrt(omega**2 + 1) * np.eye(2) - Fan = 1 / np.sqrt(omega**2 + 1) * np.eye(2) - Fcan = 1 / np.sqrt(omega**2 + 1) * np.eye(2) - Gcan = -omega / np.sqrt(omega**2 + 1) * np.eye(2) + print(omega, h) + wp = omega - 1j * h + wm = omega + 1j * h + Gan = np.diag([wp / np.sqrt(wp**2 + 1), wm / np.sqrt(wm**2 + 1)]) + Fan = np.diag([1 / np.sqrt(wp**2 + 1), 1 / np.sqrt(wm**2 + 1)]) + Fcan = np.diag([1 / np.sqrt(wp**2 + 1), 1 / np.sqrt(wm**2 + 1)]) + Gcan = -np.diag([wp / np.sqrt(wp**2 + 1), wm / np.sqrt(wm**2 + 1)]) shp = res.G.shape - assert_allclose(res.G, np.broadcast_to(Gan, shp)) - assert_allclose(res.F, np.broadcast_to(Fan, shp)) - assert_allclose(res.Fc, np.broadcast_to(Fcan, shp)) - assert_allclose(res.Gc, np.broadcast_to(Gcan, shp)) + assert_allclose(res.G, np.broadcast_to(Gan, shp), rtol=1e-5) + assert_allclose(res.F, np.broadcast_to(Fan, shp), rtol=1e-5) + assert_allclose(res.Fc, np.broadcast_to(Fcan, shp), rtol=1e-5) + assert_allclose(res.Gc, np.broadcast_to(Gcan, shp), rtol=1e-5) # There are no gradients, hence no currents either J = res.J