Coverage for gpaw/test/new/test_hybrid.py: 89%
45 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
1import pytest
2from ase import Atoms
3from gpaw import GPAW
4from gpaw.mpi import size
5import numpy as np
8def test_pawexxvv():
9 from gpaw.hybrids.paw import python_pawexxvv
10 from _gpaw import pawexxvv
11 for i in range(20):
12 D_ii = np.random.rand(i, i)
13 p = i * (i + 1) // 2
14 M_pp = np.random.rand(p, p)
15 V_ii = python_pawexxvv(M_pp, D_ii)
16 V2_ii = pawexxvv(M_pp, D_ii)
17 assert np.allclose(V_ii, V2_ii)
20@pytest.mark.parametrize('ccirs', [False, True])
21def test_hse06(gpaw_new, ccirs):
22 if gpaw_new and size > 4:
23 pytest.skip('Only band-parallelization!')
24 if gpaw_new:
25 experimental = {'ccirs': ccirs}
26 # Low max_buffer_mem to test that this value is overwritten due to
27 # the non band-local hybrid-xc hamiltonian.
28 eigensolver = {'name': 'dav',
29 'max_buffer_mem': 1024 * 4}
30 else:
31 eigensolver = 'dav'
32 experimental = {}
33 if ccirs:
34 pytest.skip('CCIRS only for new GPAW')
35 atoms = Atoms('Li2', [[0, 0, 0], [0, 0, 2.0]])
36 atoms.center(vacuum=2.5)
37 atoms.calc = GPAW(mode=dict(name='pw', force_complex_dtype=not True),
38 xc='HSE06',
39 experimental=experimental,
40 eigensolver=eigensolver,
41 nbands=4)
42 e = atoms.get_potential_energy()
43 eigs = atoms.calc.get_eigenvalues(spin=0)
44 assert e == pytest.approx(-5.633278, abs=1e-3)
45 assert eigs[0] == pytest.approx(-4.67477532, abs=1e-3)
48def test_h(gpaw_new):
49 if gpaw_new and size > 2:
50 pytest.skip('Only band-parallelization!')
51 atoms = Atoms('H', magmoms=[1])
52 atoms.center(vacuum=2.5)
53 atoms.calc = GPAW(mode='pw',
54 xc='HSE06',
55 eigensolver='dav',
56 nbands=2,
57 convergence={'energy': 1e-4})
58 e = atoms.get_potential_energy()
59 eigs = atoms.calc.get_eigenvalues(spin=0)
60 assert e == pytest.approx(-1.703969, abs=4e-3)
61 assert eigs[0] == pytest.approx(-9.71440, abs=1e-3)
64if __name__ == '__main__':
65 test_hse06(1, True)