Coverage for gpaw/test/test_fermisplit.py: 100%
28 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
1# this test should coverage the save and restore of
2# fermi-levels when using fixmagmom:
3#
4# yes, fermi-level-splitting sounds a little bit strange
5import numpy as np
6import pytest
7from ase import Atoms
9from gpaw import GPAW, FermiDirac, MixerSum
12def test_fermisplit(in_tmp_dir):
13 calc = GPAW(mode='fd',
14 occupations=FermiDirac(width=0.1, fixmagmom=True),
15 mixer=MixerSum(beta=0.05, nmaxold=3, weight=50.0),
16 convergence={'energy': 0.1, 'eigenstates': 1.5e-1,
17 'density': 1.5e-1})
18 atoms = Atoms('Cr', pbc=False)
19 atoms.center(vacuum=4)
20 mm = [1] * 1
21 mm[0] = 6.
22 atoms.set_initial_magnetic_moments(mm)
23 atoms.calc = calc
24 atoms.get_potential_energy()
26 ef1 = calc.get_fermi_levels().mean()
27 efsplit1 = np.ptp(calc.get_fermi_levels())
29 ef3 = calc.get_fermi_levels()
30 calc.write('test.gpw')
32 # check number one: is the splitting value saved?
33 readtest = GPAW('test.gpw')
34 ef2 = readtest.get_fermi_levels().mean()
35 efsplit2 = np.ptp(readtest.get_fermi_levels())
37 # numpy arrays
38 ef4 = readtest.get_fermi_levels()
40 # These values should be identic
41 assert ef1 == pytest.approx(ef2, abs=1e-9)
42 assert efsplit1 == pytest.approx(efsplit2, abs=1e-9)
43 assert ef3.mean() == pytest.approx(ef1, abs=1e-9)
44 assert ef3.mean() == pytest.approx(ef2, abs=1e-9)
45 assert ef3.mean() == pytest.approx(ef4.mean(), abs=1e-9)
46 assert ef3[0] - ef3[1] == pytest.approx(ef4[0] - ef4[1], abs=1e-9)
47 assert efsplit1 == pytest.approx(ef4[0] - ef4[1], abs=1e-9)