Coverage for gpaw/test/ofdft/test_ofdft_scale.py: 100%
33 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-20 00:19 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-20 00:19 +0000
1import pytest
2from ase import Atoms
3from gpaw import GPAW
4from gpaw.mixer import Mixer
5from gpaw.test import gen
6from gpaw.eigensolvers import CG
9@pytest.mark.ofdft
10@pytest.mark.libxc
11def test_ofdft_ofdft_scale(in_tmp_dir):
12 h = 0.18
13 a = 10.0
14 c = a / 2
16 elements = ['C']
17 results = [0.016]
18 electrons = [6]
19 lambda_coeff = 2.0
20 xcname = '1.0_LDA_K_TF+1.0_LDA_X'
22 setups = {}
23 for symbol in elements:
24 g = gen(symbol, xcname=xcname, scalarrel=False, orbital_free=True,
25 tw_coeff=lambda_coeff)
26 setups[symbol] = g
28 for element, result, e in zip(elements, results, electrons):
29 atom = Atoms(element,
30 positions=[(c, c, c)],
31 cell=(a, a, a))
33 mixer = Mixer(0.3, 5, 1)
34 eigensolver = CG(tw_coeff=lambda_coeff)
35 calc = GPAW(mode='fd',
36 h=h,
37 xc=xcname,
38 setups=setups,
39 maxiter=240,
40 mixer=mixer, eigensolver=eigensolver)
42 atom.calc = calc
44 E = atom.get_total_energy()
45 n = calc.get_all_electron_density()
47 dv = atom.get_volume() / calc.get_number_of_grid_points().prod()
48 I = n.sum() * dv / 2**3
50 assert I == pytest.approx(e, abs=1.0e-6)
51 assert result == pytest.approx(E, abs=1.0e-3)