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
« 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
6pytestmark = pytest.mark.skipif(world.size > 1,
7 reason='world.size > 1')
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)
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