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
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
1"""Module defining ``Eigensolver`` classes."""
4import numpy as np
5from gpaw.eigensolvers.eigensolver import Eigensolver
6from gpaw.matrix_descriptor import MatrixDescriptor
9class DirectPW(Eigensolver):
10 """Direct eigensolver for plane waves"""
12 def __init__(self, keep_htpsit=False):
13 """Initialize direct eigensolver. """
15 Eigensolver.__init__(self, keep_htpsit)
17 def iterate_one_k_point(self, ham, wfs, kpt, weights):
18 """Setup H and S matries and diagonalize for the kpoint"""
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
34 def __repr__(self):
35 return 'DirectPW eigensolver'