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

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 

8 

9from gpaw import GPAW, FermiDirac, MixerSum 

10 

11 

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() 

25 

26 ef1 = calc.get_fermi_levels().mean() 

27 efsplit1 = np.ptp(calc.get_fermi_levels()) 

28 

29 ef3 = calc.get_fermi_levels() 

30 calc.write('test.gpw') 

31 

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()) 

36 

37 # numpy arrays 

38 ef4 = readtest.get_fermi_levels() 

39 

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)