Coverage for gpaw/test/test_fermilevel.py: 100%

23 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-08 00:17 +0000

1import numpy as np 

2import pytest 

3from ase import Atoms 

4 

5from gpaw import GPAW, Davidson, FermiDirac 

6 

7 

8def test_fermilevel(in_tmp_dir): 

9 atoms = Atoms('He', pbc=True) 

10 atoms.center(vacuum=3) 

11 params = dict(mode='fd', 

12 nbands=1, 

13 eigensolver=Davidson(6), 

14 occupations=FermiDirac(0.0), 

15 txt=None) 

16 

17 atoms.calc = GPAW(**params) 

18 atoms.get_potential_energy() 

19 assert np.isinf(atoms.calc.get_fermi_level()) 

20 

21 params['nbands'] = 3 

22 params['convergence'] = {'bands': 2} 

23 atoms.calc = GPAW(**params) 

24 atoms.get_potential_energy() 

25 

26 homo, lumo = atoms.calc.get_homo_lumo() 

27 assert homo == pytest.approx(-15.4473, abs=0.01) 

28 assert lumo == pytest.approx(-0.2566, abs=0.01) 

29 

30 atoms.calc.write('test.gpw') 

31 print(GPAW('test.gpw').get_homo_lumo(), homo, lumo) 

32 assert np.all(GPAW('test.gpw').get_homo_lumo() == (homo, lumo)) 

33 ef = atoms.calc.get_fermi_level() 

34 assert ef == pytest.approx(-7.85196, abs=0.01)