Coverage for gpaw/test/eigen/test_blocked_rmm_diis.py: 100%

21 statements  

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

1from ase import Atom, Atoms 

2 

3from gpaw import GPAW, Mixer, RMMDIIS 

4import pytest 

5 

6 

7def test_eigen_blocked_rmm_diis(in_tmp_dir): 

8 a = 4.0 

9 n = 20 

10 d = 1.0 

11 x = d / 3**0.5 

12 atoms = Atoms([Atom('C', (0.0, 0.0, 0.0)), 

13 Atom('H', (x, x, x)), 

14 Atom('H', (-x, -x, x)), 

15 Atom('H', (x, -x, -x)), 

16 Atom('H', (-x, x, -x))], 

17 cell=(a, a, a), pbc=True) 

18 base_params = dict( 

19 mode='fd', 

20 gpts=(n, n, n), 

21 nbands=4, 

22 mixer=Mixer(0.25, 3, 1)) 

23 calc = GPAW(**base_params, txt='a.txt', eigensolver='rmm-diis') 

24 atoms.calc = calc 

25 e0 = atoms.get_potential_energy() 

26 niter0 = calc.get_number_of_iterations() 

27 

28 es = RMMDIIS(blocksize=3) 

29 calc = GPAW(**base_params, txt='b.txt', eigensolver=es) 

30 atoms.calc = calc 

31 e1 = atoms.get_potential_energy() 

32 niter1 = calc.get_number_of_iterations() 

33 assert e0 == pytest.approx(e1, abs=0.000001) 

34 assert niter0 == pytest.approx(niter1, abs=0)