Coverage for gpaw/test/pw/test_davidson_pw.py: 100%

24 statements  

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

1import pytest 

2from gpaw.mpi import world 

3from ase import Atom, Atoms 

4from gpaw import GPAW 

5 

6pytestmark = pytest.mark.skipif(world.size > 1, 

7 reason='world.size > 1') 

8 

9 

10def test_pw_davidson_pw(): 

11 a = 4.05 

12 d = a / 2**0.5 

13 bulk = Atoms([Atom('Al', (0, 0, 0)), 

14 Atom('Al', (0.5, 0.5, 0.5))], pbc=True) 

15 bulk.set_cell((d, d, a), scale_atoms=True) 

16 calc = GPAW(mode='pw', 

17 nbands=2 * 8, 

18 kpts=(2, 2, 2), 

19 convergence={'eigenstates': 7.2e-9, 'energy': 1e-5}) 

20 bulk.calc = calc 

21 e0 = bulk.get_potential_energy() 

22 niter0 = calc.get_number_of_iterations() 

23 calc = GPAW(mode='pw', 

24 nbands=2 * 8, 

25 kpts=(2, 2, 2), 

26 convergence={'eigenstates': 7.2e-9, 

27 'energy': 1e-5, 

28 'bands': 5}, 

29 eigensolver='dav') 

30 bulk.calc = calc 

31 e1 = bulk.get_potential_energy() 

32 niter1 = calc.get_number_of_iterations() 

33 assert e0 == pytest.approx(e1, abs=5.0e-6) 

34 

35 energy_tolerance = 0.0004 

36 assert e0 == pytest.approx(-6.97798, abs=energy_tolerance) 

37 assert 8 <= niter0 <= 12, niter0 

38 assert e1 == pytest.approx(-6.97798, abs=energy_tolerance) 

39 assert 8 <= niter1 <= 22, niter1