Coverage for gpaw/test/ps2ae/test_bader.py: 75%
28 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
1import subprocess
3import numpy as np
4import pytest
5from ase.io import write
6from ase.units import Bohr
8from gpaw import GPAW
9from gpaw.utilities.bader import read_bader_charges
10from gpaw.utilities.ps2ae import PS2AE
13@pytest.mark.serial
14def test_bader(gpw_files, in_tmp_dir, gpaw_new):
15 """Test bader analysis on interpolated density."""
16 calc = GPAW(gpw_files['c2h4_pw_nosym'])
17 if gpaw_new:
18 nt_sR = calc.dft.densities().pseudo_densities()
19 ne = nt_sR.integrate().sum()
20 density = nt_sR.data.sum(0)
21 else:
22 converter = PS2AE(calc)
23 density = converter.get_pseudo_density()
24 ne = density.sum() * converter.dv
26 assert ne == pytest.approx(12, abs=1e-5)
28 write('density.cube', calc.atoms, data=density * Bohr**3)
29 try:
30 subprocess.run('bader -p all_atom density.cube'.split())
31 except FileNotFoundError:
32 return
34 charges = read_bader_charges()
35 assert np.ptp(charges[:2]) == 0.0
36 assert np.ptp(charges[2:]) < 0.001
37 assert charges.sum() == pytest.approx(12.0, abs=0.0001)