Coverage for gpaw/test/test_aedensity.py: 100%

25 statements  

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

1import pytest 

2from ase import Atom, Atoms 

3 

4from gpaw import GPAW 

5 

6 

7def test_aedensity(): 

8 h = 0.21 # gridspacing 

9 a = [6.5, 6.5, 7.7] # unit cell 

10 d = 2.3608 # experimental bond length 

11 

12 NaCl = Atoms([Atom('Na', [0, 0, 0]), 

13 Atom('Cl', [0, 0, d])], 

14 pbc=False, cell=a) 

15 NaCl.center() 

16 calc = GPAW(mode='fd', 

17 h=h, 

18 xc='LDA', 

19 nbands=5, 

20 setups={'Na': '1'}, 

21 convergence={'eigenstates': 1e-6}, 

22 spinpol=1) 

23 

24 NaCl.calc = calc 

25 e = NaCl.get_potential_energy() 

26 

27 assert e == pytest.approx(-4.907, abs=0.002) 

28 

29 dv = NaCl.get_volume() / calc.get_number_of_grid_points().prod() 

30 nt1 = calc.get_pseudo_density(gridrefinement=1) 

31 Zt1 = nt1.sum() * dv 

32 nt2 = calc.get_pseudo_density(gridrefinement=2) 

33 Zt2 = nt2.sum() * dv / 8 

34 print('Integral of pseudo density:', Zt1, Zt2) 

35 assert Zt1 == pytest.approx(Zt2, abs=1e-12) 

36 

37 for gridrefinement in [1, 2, 4]: 

38 n = calc.get_all_electron_density(gridrefinement=gridrefinement) 

39 Z = n.sum() * dv / gridrefinement**3 

40 print('Integral of all-electron density:', Z) 

41 assert Z == pytest.approx(28, abs=1e-5)