Coverage for gpaw/test/test_unfold.py: 100%
49 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
1from ase import Atoms
2import pytest
3from gpaw.new.ase_interface import GPAW
4from gpaw.unfold import Unfold, find_K_from_k
7@pytest.mark.soc
8def test_unfold_Ni(gpw_files, in_tmp_dir):
9 # Collinear calculation
10 gpw = 'fcc_Ni_col'
11 calc_col = GPAW(gpw_files[gpw],
12 parallel={'domain': 1, 'band': 1})
14 pc = calc_col.atoms.get_cell(complete=True)
15 bp = pc.get_bravais_lattice().bandpath('GX', npoints=3)
17 M = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
19 # Spin 0
20 unfold = Unfold(name='Ni_defect_s0',
21 calc=gpw_files[gpw],
22 M=M,
23 spin=0,
24 spinorbit=False)
25 e_mk, P_mk = unfold.get_spectral_weights(bp.kpts)
26 N0 = len(e_mk)
27 assert P_mk == pytest.approx(1, abs=1.0e-6)
29 # Spin 1
30 unfold = Unfold(name='Ni_defect_s1',
31 calc=gpw_files[gpw],
32 M=M,
33 spin=1,
34 spinorbit=False)
35 e_mk, P_mk = unfold.get_spectral_weights(bp.kpts)
36 N1 = len(e_mk)
37 assert P_mk == pytest.approx(1, abs=1.0e-6)
39 # Full bands including nscf spin-orbit
40 unfold = Unfold(name='Ni_defect_soc',
41 calc=gpw_files[gpw],
42 M=M,
43 spinorbit=True)
44 e_mk, P_mk = unfold.get_spectral_weights(bp.kpts)
45 Nm = len(e_mk)
46 assert P_mk == pytest.approx(1, abs=1.0e-6)
47 assert Nm == N0 + N1
49 # Non-collinear calculation with self-consistent spin–orbit
50 gpw = 'fcc_Ni_ncolsoc'
51 calc_ncol = GPAW(gpw_files[gpw],
52 parallel={'domain': 1, 'band': 1})
53 pc = calc_ncol.atoms.get_cell(complete=True)
55 bp = pc.get_bravais_lattice().bandpath('GX', npoints=3)
57 M = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
59 unfold = Unfold(name='Ni_defect_nc',
60 calc=gpw_files[gpw],
61 M=M)
62 e_mk, P_mk = unfold.get_spectral_weights(bp.kpts)
63 assert P_mk == pytest.approx(1, abs=1.0e-6)
66def test_lcao(in_tmp_dir):
67 atoms = Atoms('H', [[2.0, 2.0, 0.0]], cell=[4.0, 4.0, 0.9], pbc=True)
68 atoms *= (1, 1, 2)
69 atoms.calc = GPAW(mode='lcao',
70 basis='dzp',
71 kpts=(1, 1, 4),
72 txt='gs.txt')
73 atoms.get_potential_energy()
74 atoms.calc.write('gs.gpw', 'all')
76 M = [[1, 0, 0], [0, 1, 0], [0, 0, 2]]
78 kpts = [[0, 0, 0], [0, 0, 0.25]]
79 Kpts = []
80 for k in kpts:
81 K = find_K_from_k(k, M)[0]
82 Kpts.append(K)
84 print(Kpts)
86 calc_bands = GPAW('gs.gpw').fixed_density(
87 kpts=Kpts,
88 symmetry='off',
89 nbands=4,
90 convergence={'bands': 2})
92 calc_bands.write('bands.gpw', 'all')
94 unfold = Unfold(name='2',
95 calc='bands.gpw',
96 M=M,
97 spinorbit=False)
98 unfold.get_spectral_weights(kpts)