Coverage for gpaw/eigensolvers/direct.py: 100%

21 statements  

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

1"""Module defining ``Eigensolver`` classes.""" 

2 

3 

4import numpy as np 

5from gpaw.eigensolvers.eigensolver import Eigensolver 

6from gpaw.matrix_descriptor import MatrixDescriptor 

7 

8 

9class DirectPW(Eigensolver): 

10 """Direct eigensolver for plane waves""" 

11 

12 def __init__(self, keep_htpsit=False): 

13 """Initialize direct eigensolver. """ 

14 

15 Eigensolver.__init__(self, keep_htpsit) 

16 

17 def iterate_one_k_point(self, ham, wfs, kpt, weights): 

18 """Setup H and S matries and diagonalize for the kpoint""" 

19 

20 self.timer.start('DirectPW') 

21 H_GG, S_GG = wfs.hs(ham, kpt.q, kpt.s) 

22 npw = len(H_GG) 

23 eps_n = np.empty(npw) 

24 md = MatrixDescriptor(npw, npw) 

25 psit_nG = md.empty(dtype=complex) 

26 md.general_diagonalize_dc(H_GG, S_GG, psit_nG, eps_n, 

27 iu=wfs.bd.nbands) 

28 kpt.eps_n[:] = eps_n[:wfs.bd.nbands] 

29 wfs.pt.integrate(kpt.psit_nG, kpt.P_ani, kpt.q) 

30 self.timer.stop('DirectPW') 

31 error = 0.0 

32 return error 

33 

34 def __repr__(self): 

35 return 'DirectPW eigensolver'