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
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
1import pytest
2from ase import Atom, Atoms
4from gpaw import GPAW
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
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)
24 NaCl.calc = calc
25 e = NaCl.get_potential_energy()
27 assert e == pytest.approx(-4.907, abs=0.002)
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)
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)