Coverage for gpaw/test/test_fixdensity.py: 94%

35 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-08 00:17 +0000

1import pytest 

2from ase import Atoms 

3 

4from gpaw import GPAW 

5from gpaw.calculator import DeprecatedParameterWarning as OldDPW 

6from gpaw.dft import DeprecatedParameterWarning as NewDPW 

7 

8 

9@pytest.mark.ci 

10def test_fixdensity(in_tmp_dir, gpaw_new): 

11 a = 2.5 

12 slab = Atoms('Li', cell=(a, a, 2 * a), pbc=1) 

13 slab.calc = GPAW(mode='fd', kpts=(3, 3, 1), txt='li-1.txt', 

14 parallel=dict(kpt=1)) 

15 slab.get_potential_energy() 

16 slab.calc.write('li.gpw') 

17 

18 # Gamma point: 

19 e1 = slab.calc.get_eigenvalues(kpt=0)[0] 

20 f1 = slab.calc.get_fermi_level() 

21 

22 kpts = [(0, 0, 0)] 

23 

24 # Fix density and continue: 

25 calc = slab.calc.fixed_density( 

26 txt='li-2.txt', 

27 nbands=5, 

28 kpts=kpts) 

29 e2 = calc.get_eigenvalues(kpt=0)[0] 

30 f2 = calc.get_fermi_level() 

31 

32 # Start from gpw-file: 

33 calc = GPAW('li.gpw') 

34 calc = calc.fixed_density( 

35 txt='li-3.txt', 

36 nbands=5, 

37 kpts=kpts) 

38 e3 = calc.get_eigenvalues(kpt=0)[0] 

39 f3 = calc.get_fermi_level() 

40 assert f2 == pytest.approx(f1, abs=1e-10) 

41 assert f3 == pytest.approx(f1, abs=1e-10) 

42 assert e2 == pytest.approx(e1, abs=3e-5) 

43 assert e3 == pytest.approx(e1, abs=3e-5) 

44 o3 = calc.get_occupation_numbers(kpt=0, raw=True)[0] 

45 

46 if gpaw_new: 

47 assert o3 == pytest.approx(1.0) 

48 return 

49 

50 calc = GPAW('li.gpw', 

51 txt='li-4.txt', 

52 fixdensity=True, 

53 nbands=5, 

54 kpts=kpts, 

55 symmetry='off') 

56 

57 with pytest.warns((OldDPW, NewDPW)): 

58 calc.get_potential_energy() 

59 e4 = calc.get_eigenvalues(kpt=0)[0] 

60 

61 assert e4 == pytest.approx(e1, abs=3e-5)