Coverage for gpaw/test/directopt/test_hess_numerically_pw.py: 100%
20 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
1import pytest
3from gpaw import GPAW
4from gpaw.directmin.derivatives import Derivatives
5from gpaw.directmin.etdm_fdpw import FDPWETDM
6from gpaw.mom import prepare_mom_calculation
9@pytest.mark.do
10def test_hess_numerically_pw(in_tmp_dir, gpw_files):
11 """
12 Test complex numerical Hessian
13 w.r.t rotation parameters in LCAO
15 :param in_tmp_dir:
16 :return:
17 """
19 calc = GPAW(gpw_files['h_hess_num_pw'])
20 atoms = calc.atoms
21 atoms.calc = calc
23 calc.set(eigensolver=FDPWETDM(excited_state=True))
24 f_sn = [calc.get_occupation_numbers(spin=s).copy() / 2
25 for s in range(calc.wfs.nspins)]
26 prepare_mom_calculation(calc, atoms, f_sn)
27 atoms.get_potential_energy()
29 numder = Derivatives(calc.wfs.eigensolver.outer_iloop, calc.wfs)
31 hess_n = numder.get_numerical_derivatives(
32 calc.wfs.eigensolver.outer_iloop,
33 calc.hamiltonian,
34 calc.wfs,
35 calc.density,
36 what2calc='hessian'
37 )
38 hess_a = numder.get_analytical_derivatives(
39 calc.wfs.eigensolver.outer_iloop,
40 calc.hamiltonian,
41 calc.wfs,
42 calc.density,
43 what2calc='hessian'
44 )
46 hess_nt = 0.464586
47 assert hess_n[0] == pytest.approx(hess_nt, abs=1e-3)
48 assert hess_a == pytest.approx(hess_n[0], abs=0.2)