Coverage for gpaw/directmin/locfunc/etdm_localization_fdpw.py: 26%
23 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-08 00:17 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-08 00:17 +0000
1from gpaw.directmin.fdpw.pz_localization import PZLocalization
2from gpaw.directmin.fdpw.etdm_inner_loop import ETDMInnerLoop
3import numpy as np
6class FDPWETDMLocalize:
8 def __init__(self, obj_f, wfs, maxiter=300, g_tol=1.0e-3, randval=0.01):
10 self.obj_f = obj_f
11 self.randval = randval
13 if obj_f.name == 'Zero':
14 self.iloop = ETDMInnerLoop(
15 obj_f, wfs, 'all', 5.0e-4, maxiter,
16 g_tol=g_tol, useprec=True)
17 else:
18 self.iloop = PZLocalization(
19 obj_f, wfs, maxiter=maxiter,
20 g_tol=g_tol)
22 def run(self, wfs, dens, ham=None, rewritepsi=True, log=None, seed=None):
24 wfs.timer.start('Inner loop')
26 if self.obj_f.name == 'Zero':
27 etotal, counter = self.iloop.run(wfs, dens, log, 0, ham=ham)
28 else:
29 counter = self.iloop.run(0.0, wfs, dens, log, 0,
30 randvalue=self.randval, seed=seed)
32 if rewritepsi:
33 for kpt in wfs.kpt_u:
34 k = self.iloop.n_kps * kpt.s + kpt.q
35 dim1 = self.iloop.U_k[k].shape[0]
36 kpt.psit_nG[:dim1] = np.tensordot(
37 self.iloop.U_k[k].T, kpt.psit_nG[:dim1], axes=1)
38 wfs.pt.integrate(kpt.psit_nG, kpt.P_ani, kpt.q)
40 wfs.timer.stop('Inner loop')
42 return counter