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

1import numpy as np 

2import pytest 

3 

4import gpaw.tetrahedron as T 

5 

6 

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) 

23 

24 

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]) 

32 

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)