Coverage for gpaw/test/xc/test_nonselfconsistentLDA.py: 100%

30 statements  

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

1from ase import Atom, Atoms 

2from ase.units import Bohr 

3from gpaw import GPAW 

4import pytest 

5 

6 

7def test_xc_nonselfconsistentLDA(in_tmp_dir): 

8 a = 7.5 * Bohr 

9 n = 16 

10 atoms = Atoms([Atom('He', (0.0, 0.0, 0.0))], cell=(a, a, a), pbc=True) 

11 calc = GPAW(mode='fd', gpts=(n, n, n), nbands=1, xc='LDA') 

12 atoms.calc = calc 

13 e1 = atoms.get_potential_energy() 

14 e1ref = calc.get_reference_energy() 

15 de12 = calc.get_xc_difference({'name': 'PBE', 'stencil': 1}) 

16 calc = GPAW( 

17 mode='fd', gpts=(n, n, n), nbands=1, xc={'name': 'PBE', 'stencil': 1}) 

18 atoms.calc = calc 

19 e2 = atoms.get_potential_energy() 

20 e2ref = calc.get_reference_energy() 

21 de21 = calc.get_xc_difference('LDA') 

22 print(e1ref + e1 + de12, e2ref + e2) 

23 print(e1ref + e1, e2ref + e2 + de21) 

24 print(de12, de21) 

25 assert e1ref + e1 + de12 == pytest.approx(e2ref + e2, abs=0.02) 

26 assert e1ref + e1 == pytest.approx(e2ref + e2 + de21, abs=0.025) 

27 

28 calc.write('PBE.gpw') 

29 

30 de21b = GPAW('PBE.gpw').get_xc_difference('LDA') 

31 print(de21, de21b) 

32 assert de21 == pytest.approx(de21b, abs=9e-8) 

33 

34 energy_tolerance = 0.0007 

35 assert e1 == pytest.approx(-0.0961003634812, abs=energy_tolerance) 

36 assert e2 == pytest.approx(-0.0790249564625, abs=energy_tolerance)