Coverage for gpaw/test/pw/test_fulldiagk.py: 93%

42 statements  

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

1from ase import Atoms 

2 

3from gpaw import GPAW 

4from gpaw.mpi import serial_comm, world 

5 

6 

7def test_pw_fulldiagk(in_tmp_dir, scalapack): 

8 a = Atoms('H', 

9 cell=(1, 3, 3), 

10 pbc=1) 

11 

12 a.calc = GPAW(mode='pw', 

13 h=0.15, 

14 kpts=(4, 1, 1), 

15 basis='dzp', 

16 nbands=4, 

17 eigensolver='rmm-diis', 

18 parallel={'domain': 1}) 

19 

20 a.get_potential_energy() 

21 w1 = a.calc.get_pseudo_wave_function(0, 1) 

22 e1 = a.calc.get_eigenvalues(1) 

23 

24 a.calc.write('H.gpw') 

25 

26 if world.size <= 2: 

27 scalapack = None 

28 else: 

29 mb = world.size // 4 

30 scalapack = (2, mb, 32) 

31 

32 a.calc.diagonalize_full_hamiltonian(nbands=100, scalapack=scalapack) 

33 w2 = a.calc.get_pseudo_wave_function(0, 1) 

34 e2 = a.calc.get_eigenvalues(1) 

35 

36 calc = GPAW('H.gpw', 

37 txt=None, 

38 parallel={'domain': 1}) 

39 calc.diagonalize_full_hamiltonian(nbands=100, scalapack=scalapack) 

40 w3 = calc.get_pseudo_wave_function(0, 1) 

41 e3 = calc.get_eigenvalues(1) 

42 

43 calc.write('Hwf.gpw', 'all') 

44 

45 calc = GPAW('Hwf.gpw', txt=None, communicator=serial_comm) 

46 w4 = calc.get_pseudo_wave_function(0, 1) 

47 e4 = calc.get_eigenvalues(1) 

48 

49 for w in [w2, w3, w4]: 

50 err = abs(abs(w[1, 2, 3]) - abs(w1[1, 2, 3])) 

51 print(err) 

52 assert err < 5e-7, err 

53 

54 for e in [e2, e3, e4]: 

55 err = abs(e[0] - e1[0]) 

56 assert err < 2e-9, err 

57 err = abs(e[-1] - e2[-1]) 

58 assert err < 1e-10, err 

59 

60 a.calc = GPAW(mode='pw', 

61 parallel={'band': min(2, world.size)}, 

62 h=0.15, 

63 kpts=(4, 1, 1), 

64 convergence={'bands': 'CBM+10'}, 

65 nbands=4) 

66 a.get_potential_energy() 

67 

68 e5 = a.calc.get_eigenvalues(0) 

69 de = e5 - calc.get_eigenvalues(0)[:4] 

70 cbm = calc.get_fermi_level() 

71 assert abs(de[e5 < cbm + 10]).max() < 0.001 

72 

73 

74if __name__ == '__main__': 

75 test_pw_fulldiagk(1, 2)