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
« 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
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)
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')
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)
24 a.calc.write('H2.gpw')
26 if world.size == 1:
27 scalapack = None
28 else:
29 scalapack = (2, world.size // 2, 32)
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()
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()
40 calc.write('H2wf.gpw', 'all')
42 calc = GPAW('H2wf.gpw', txt=None, communicator=serial_comm)
43 w4 = calc.get_pseudo_wave_function(0)
44 e4 = calc.get_eigenvalues()
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
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