Coverage for gpaw/test/tetrahedron/test_tetrahedron_method.py: 100%
26 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-08 00:17 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-08 00:17 +0000
1import numpy as np
2import pytest
4import gpaw.tetrahedron as T
7@pytest.mark.serial
8def test_bja():
9 """Test formulas from Blöchl et al. paper."""
10 eigs = np.linspace(1.0, 4.0, 4).reshape((4, 1))
11 for n in range(1, 4):
12 bjan = getattr(T, f'bja{n}')
13 bjanb = getattr(T, f'bja{n}b')
14 ef = n + 0.5
15 E = eigs - ef
16 f1, dfde1 = bjan(*E)
17 x = 0.0001
18 dfde2 = (bjan(*(E - x))[0] - bjan(*(E + x))[0]) / (2 * x)
19 f2 = bjanb(*E).sum()
20 print(n, f1, f2, dfde1, dfde2)
21 assert f1 == pytest.approx(f2)
22 assert dfde1 == pytest.approx(dfde2)
25@pytest.mark.serial
26def test_tetra():
27 """Test 2-d BZ exapmle."""
28 t = T.TetrahedronMethod(np.diag([1.0, 1.0, 0.1]),
29 [2, 2, 1],
30 False,
31 [0, 1, 2, 1])
33 eig_in = np.array([[0.0, 2.0], [0.0, 1.0], [0.0, 1.0]])
34 weight_i = [0.25, 0.5, 0.25]
35 f_in, (ef,), _ = t.calculate(1.5, eig_in, weight_i, [1.5])
36 assert ef == pytest.approx(2 - (2 / 3)**0.5)
37 assert f_in.sum(1).dot(weight_i) == pytest.approx(1.5)