Coverage for gpaw/lcaotddft/logger.py: 100%

29 statements  

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

1from time import localtime 

2from math import log as ln 

3 

4from gpaw.lcaotddft.observer import TDDFTObserver 

5from gpaw.tddft.units import autime_to_attosec 

6 

7 

8class TDDFTLogger(TDDFTObserver): 

9 

10 def __init__(self, paw, flush_interval=10, interval=1): 

11 super().__init__(paw, interval) 

12 assert flush_interval > 0 

13 self.flush_interval = flush_interval 

14 self.flush_next = paw.niter + self.flush_interval - 1 

15 

16 def _update(self, paw): 

17 if paw.action == 'init': 

18 self._write_header(paw) 

19 self._write_data(paw) 

20 

21 def _write_header(self, paw): 

22 paw.log('Logging time propagation') 

23 paw.log('------------------------') 

24 line = (' %4s %9s %11s %9s' % 

25 ('iter', 'realtime', 'calctime', 'log(norm)')) 

26 paw.log(line) 

27 paw.log.flush() 

28 

29 def _write_data(self, paw): 

30 density = paw.density 

31 norm = density.finegd.integrate(density.rhot_g) 

32 T = localtime() 

33 paw.log('iter: %4d %02d:%02d:%02d %11.2f %9.1f' % 

34 (paw.niter, T[3], T[4], T[5], 

35 paw.time * autime_to_attosec, 

36 ln(abs(norm) + 1e-16) / ln(10))) 

37 if paw.niter > self.flush_next: 

38 paw.log.flush() 

39 while paw.niter > self.flush_next: 

40 self.flush_next += self.flush_interval