Coverage for gpaw/test/lcaotddft/test_fxc_is_xc.py: 100%

24 statements  

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

1import numpy as np 

2import pytest 

3 

4from gpaw.lcaotddft import LCAOTDDFT 

5from gpaw.lcaotddft.dipolemomentwriter import DipoleMomentWriter 

6from gpaw.mpi import world 

7 

8 

9@pytest.mark.rttddft 

10def test_lcaotddft_fxc_is_xc(gpw_files, in_tmp_dir): 

11 # Time-propagation calculation without fxc 

12 td_calc = LCAOTDDFT(gpw_files['na2_tddft_dzp'], txt='td.out') 

13 DipoleMomentWriter(td_calc, 'dm.dat') 

14 td_calc.absorption_kick(np.ones(3) * 1e-5) 

15 td_calc.propagate(20, 4) 

16 world.barrier() 

17 

18 # Check dipole moment file 

19 ref = np.loadtxt('dm.dat').ravel() 

20 

21 # Time-propagation calculation with fxc=xc 

22 td_calc = LCAOTDDFT(gpw_files['na2_tddft_dzp'], fxc='LDA', 

23 txt='td_fxc.out') 

24 DipoleMomentWriter(td_calc, 'dm_fxc.dat') 

25 td_calc.absorption_kick(np.ones(3) * 1e-5) 

26 td_calc.propagate(20, 1) 

27 td_calc.write('td_fxc.gpw', mode='all') 

28 

29 # Restart from the restart point 

30 td_calc = LCAOTDDFT('td_fxc.gpw', txt='td_fxc2.out') 

31 DipoleMomentWriter(td_calc, 'dm_fxc.dat') 

32 td_calc.propagate(20, 3) 

33 

34 # Check dipole moment file 

35 data = np.loadtxt('dm_fxc.dat')[[0, 1, 2, 4, 5, 6]].ravel() 

36 

37 tol = 1e-9 

38 assert data == pytest.approx(ref, abs=tol)