Coverage for gpaw/test/lcao/test_local_orbitals.py: 100%

36 statements  

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

1import pytest 

2from ase.build import graphene_nanoribbon, molecule 

3from gpaw import GPAW 

4from gpaw.lcao.local_orbitals import LocalOrbitals 

5from gpaw.mpi import world 

6 

7pytestmark = pytest.mark.skipif(world.size > 1, 

8 reason='world.size > 1') 

9 

10 

11@pytest.mark.old_gpaw_only 

12def test_gamma_point_calculation(): 

13 atoms = molecule('C6H6', vacuum=2) 

14 

15 calc = GPAW(mode='lcao', 

16 xc='LDA', 

17 basis='szp(dzp)', 

18 txt=None) 

19 atoms.calc = calc 

20 atoms.get_potential_energy() 

21 

22 los = LocalOrbitals(calc) 

23 

24 los.subdiagonalize('C', groupby='energy') 

25 group_energies = sorted(los.groups.keys()) 

26 

27 # Assert minimal model contains only pz-LOs 

28 los.take_model(minimal=True) 

29 assert los.indices == los.groups[group_energies[3]] 

30 assert len(los.indices) == 6 

31 

32 # Assert extended model also contains +2 d-LOs 

33 los.take_model(minimal=False) 

34 assert los.indices == ( 

35 los.groups[group_energies[3]] 

36 + los.groups[group_energies[-3]] 

37 + los.groups[group_energies[-1]]) 

38 assert len(los.indices) == (6 * 3) 

39 

40 

41@pytest.mark.old_gpaw_only 

42def test_k_point_calculation(): 

43 atoms = graphene_nanoribbon(2, 1, type='zigzag', saturated=True, 

44 C_H=1.1, C_C=1.4, vacuum=2) 

45 

46 calc = GPAW(mode='lcao', 

47 xc='LDA', 

48 basis='szp(dzp)', 

49 txt=None, 

50 kpts={'size': (1, 1, 11), 

51 'gamma': True}, 

52 symmetry={'point_group': False, 

53 'time_reversal': True}) 

54 atoms.calc = calc 

55 atoms.get_potential_energy() 

56 

57 los = LocalOrbitals(calc) 

58 

59 los.subdiagonalize('C', groupby='symmetry') 

60 group_energies = sorted(los.groups.keys()) 

61 

62 # Assert minimal model contains only pz-LOs 

63 los.take_model(minimal=True) 

64 assert los.indices == los.groups[group_energies[3]] 

65 assert len(los.indices) == 4 

66 

67 # Assert extended model also contains d-LOs 

68 los.take_model(minimal=False) 

69 assert los.indices == ( 

70 los.groups[group_energies[3]] 

71 + los.groups[group_energies[-3]] 

72 + los.groups[group_energies[-1]]) 

73 assert len(los.indices) == (4 * 3)