1
2from ase import Atom, Atoms
3
4from gpaw import GPAW
5from gpaw.test import equal
6
7
8def test_aedensity(in_tmp_dir):
9    try:
10        calc = GPAW('NaCl.gpw')
11        NaCl = calc.get_atoms()
12        e = NaCl.get_potential_energy()
13    except IOError:
14        h = 0.21  # gridspacing
15        a = [6.5, 6.5, 7.7]  # unit cell
16        d = 2.3608  # experimental bond length
17
18        NaCl = Atoms([Atom('Na', [0, 0, 0]),
19                      Atom('Cl', [0, 0, d])],
20                     pbc=False, cell=a)
21        NaCl.center()
22        calc = GPAW(h=h, xc='LDA', nbands=5,
23                    setups={'Na': '1'},
24                    convergence={'eigenstates': 1e-6}, spinpol=1)
25
26        NaCl.calc = calc
27        e = NaCl.get_potential_energy()
28        calc.write('NaCl.gpw')
29
30    equal(e, -4.907, 0.002)
31
32    dv = NaCl.get_volume() / calc.get_number_of_grid_points().prod()
33    nt1 = calc.get_pseudo_density(gridrefinement=1)
34    Zt1 = nt1.sum() * dv
35    nt2 = calc.get_pseudo_density(gridrefinement=2)
36    Zt2 = nt2.sum() * dv / 8
37    print('Integral of pseudo density:', Zt1, Zt2)
38    equal(Zt1, Zt2, 1e-12)
39
40    for gridrefinement in [1, 2, 4]:
41        n = calc.get_all_electron_density(gridrefinement=gridrefinement)
42        Z = n.sum() * dv / gridrefinement**3
43        print('Integral of all-electron density:', Z)
44        equal(Z, 28, 1e-5)
45