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
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-20 00:19 +0000
1from ase import Atoms
3from gpaw import GPAW
4from gpaw.mpi import serial_comm, world
7def test_pw_fulldiagk(in_tmp_dir, scalapack):
8 a = Atoms('H',
9 cell=(1, 3, 3),
10 pbc=1)
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})
20 a.get_potential_energy()
21 w1 = a.calc.get_pseudo_wave_function(0, 1)
22 e1 = a.calc.get_eigenvalues(1)
24 a.calc.write('H.gpw')
26 if world.size <= 2:
27 scalapack = None
28 else:
29 mb = world.size // 4
30 scalapack = (2, mb, 32)
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)
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)
43 calc.write('Hwf.gpw', 'all')
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)
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
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
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()
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
74if __name__ == '__main__':
75 test_pw_fulldiagk(1, 2)