Coverage for gpaw/test/pw/test_fulldiag.py: 97%

33 statements  

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

1from ase import Atoms 

2from gpaw import GPAW, PW 

3from gpaw.mpi import world, serial_comm 

4 

5 

6def test_pw_fulldiag(in_tmp_dir, scalapack): 

7 a = Atoms('H2', 

8 [(0, 0, 0), (0, 0, 0.74)], 

9 cell=(3, 3, 3), 

10 pbc=1) 

11 

12 a.calc = GPAW(mode=PW(force_complex_dtype=True), 

13 eigensolver='rmm-diis', 

14 nbands=8, 

15 parallel={'domain': 1}, 

16 basis='dzp', 

17 txt='H2.txt') 

18 

19 a.get_potential_energy() 

20 _ = a.calc.get_pseudo_wave_function(0) 

21 e1 = a.calc.get_eigenvalues() 

22 w1 = a.calc.get_pseudo_wave_function(0) 

23 

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

25 

26 if world.size == 1: 

27 scalapack = None 

28 else: 

29 scalapack = (2, world.size // 2, 32) 

30 

31 a.calc.diagonalize_full_hamiltonian(nbands=120, scalapack=scalapack) 

32 w2 = a.calc.get_pseudo_wave_function(0) 

33 e2 = a.calc.get_eigenvalues() 

34 

35 calc = GPAW('H2.gpw', txt=None, parallel={'domain': 1}) 

36 calc.diagonalize_full_hamiltonian(nbands=120, scalapack=scalapack) 

37 w3 = calc.get_pseudo_wave_function(0) 

38 e3 = calc.get_eigenvalues() 

39 

40 calc.write('H2wf.gpw', 'all') 

41 

42 calc = GPAW('H2wf.gpw', txt=None, communicator=serial_comm) 

43 w4 = calc.get_pseudo_wave_function(0) 

44 e4 = calc.get_eigenvalues() 

45 

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

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

48 assert err < 5e-7, err 

49 

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

51 err = abs(e[1] - e1[1]) 

52 assert err < 1e-9, err 

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

54 assert err < 1e-10, err