Coverage for gpaw/test/symmetry/test_kpoint_mapping.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
1from gpaw.symmetry import map_k_points_fast, map_k_points
2from ase.dft.kpoints import monkhorst_pack
3from gpaw import GPAW
4from ase.build import bulk
5import numpy as np
6from itertools import product
9def test_symmetry_kpoint_mapping():
10 def test_mapping(bz2bz_ks, U_scc, bzk_kc, time_reversal=False):
11 eps = 1e-7
13 if time_reversal:
14 U_scc = np.concatenate([U_scc, -U_scc])
16 for k_c, bz2bz_s in zip(bzk_kc, bz2bz_ks):
17 delta_sc = (np.dot(U_scc, k_c) -
18 bzk_kc[bz2bz_s, :])[bz2bz_s >= 0]
19 delta_sc = np.abs(delta_sc - delta_sc.round())
20 assert delta_sc.max() < eps
22 # Test kpoint mapping functionality of the gpaw.symmetry module
23 atoms = bulk('C')
24 calc = GPAW(mode='pw',
25 kpts={'size': (5, 5, 5)},
26 txt=None)
27 atoms.calc = calc
28 atoms.get_potential_energy()
30 U_scc = calc.wfs.kd.symmetry.op_scc
31 time_reversal = False
33 for gamma in [True, False]:
34 for time_reversal in [True, False]:
35 for i, j, k in product(*([range(1, 7)] * 3)):
37 bzk_kc = monkhorst_pack((i, j, k))
39 if gamma:
40 offset = (((i + 1) % 2) / (2 * i),
41 ((j + 1) % 2) / (2 * j),
42 ((k + 1) % 2) / (2 * k))
43 bzk_kc += offset
45 bz2bz_ks = map_k_points(bzk_kc, U_scc,
46 time_reversal,
47 None, calc.wfs.kd.symmetry.tol)
48 bz2bzfast_ks = map_k_points_fast(bzk_kc, U_scc,
49 time_reversal,
50 None,
51 calc.wfs.kd.symmetry.tol)
53 assert ((bz2bz_ks - bz2bzfast_ks)**2 < 1e-9).all()
55 test_mapping(bz2bz_ks, U_scc, bzk_kc, time_reversal)
56 test_mapping(bz2bzfast_ks, U_scc, bzk_kc, time_reversal)