Coverage for gpaw/test/ofdft/test_ofdft.py: 100%
30 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 Atoms
3from gpaw import GPAW
4from gpaw.mixer import Mixer
5from gpaw.test import gen
8@pytest.mark.ofdft
9@pytest.mark.libxc
10def test_ofdft_ofdft(in_tmp_dir):
11 a = 6.0
12 c = a / 2
13 # d = 1.8
15 elements = ['C', 'Be']
16 results = [0.243, 9.9773]
17 electrons = [6, 3]
18 charges = [0, 1]
19 xcname = '1.0_LDA_K_TF+1.0_LDA_X'
21 setups = {}
22 for symbol in elements:
23 s = gen(symbol, xcname=xcname, scalarrel=False, orbital_free=True,
24 gpernode=75)
25 setups[symbol] = s
27 for element, result, e, charge in zip(elements,
28 results,
29 electrons,
30 charges):
31 atom = Atoms(element,
32 positions=[(c, c, c)],
33 cell=(a, a, a))
35 mixer = Mixer(0.3, 5, 1)
36 calc = GPAW(mode='fd',
37 gpts=(32, 32, 32),
38 txt='-',
39 xc=xcname,
40 setups=setups,
41 eigensolver='cg', mixer=mixer, charge=charge)
43 atom.calc = calc
45 E = atom.get_total_energy()
46 n = calc.get_all_electron_density()
48 dv = atom.get_volume() / calc.get_number_of_grid_points().prod()
49 I = n.sum() * dv / 2**3
51 assert I == pytest.approx(e, abs=1.0e-6)
52 assert result == pytest.approx(E, abs=1.0e-2)