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

1from ase import Atoms 

2from gpaw.test import calculate_numerical_forces 

3from gpaw import GPAW, Mixer, FermiDirac, Davidson 

4import pytest 

5 

6 

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) 

28 

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)