Coverage for gpaw/test/generic/test_H_force.py: 100%
21 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-08 00:17 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-08 00:17 +0000
1from ase import Atoms
2from gpaw.test import calculate_numerical_forces
3from gpaw import GPAW, Mixer, FermiDirac, Davidson
4import pytest
7def test_generic_H_force():
8 a = 4.0
9 n = 16
10 atoms = Atoms('H',
11 positions=[[1.234, 2.345, 3.456]],
12 cell=(a, a, a),
13 pbc=True)
14 calc = GPAW(mode='fd',
15 nbands=1,
16 gpts=(n, n, n),
17 txt=None,
18 eigensolver=Davidson(4),
19 mixer=Mixer(0.3, 3, 1),
20 convergence={'energy': 1e-7},
21 occupations=FermiDirac(0.0))
22 atoms.calc = calc
23 e1 = atoms.get_potential_energy()
24 f1 = atoms.get_forces()[0]
25 f2 = calculate_numerical_forces(atoms, 0.001)[0]
26 print(f1, f2)
27 assert f1 == pytest.approx(f2, abs=0.00025)
29 energy_tolerance = 0.001
30 force_tolerance = 0.004
31 assert e1 == pytest.approx(-0.5318, abs=energy_tolerance)
32 f1_ref = [-0.29138, -0.3060, -0.3583]
33 for i in range(3):
34 assert f1[i] == pytest.approx(f1_ref[i], abs=force_tolerance)