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

30 statements  

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

1import pytest 

2import numpy as np 

3 

4from gpaw.lcaotddft import LCAOTDDFT 

5from gpaw.lcaotddft.dipolemomentwriter import DipoleMomentWriter 

6from gpaw.mpi import world 

7 

8 

9@pytest.mark.gllb 

10@pytest.mark.libxc 

11@pytest.mark.rttddft 

12def test_lcaotddft_fxc_vs_linearize(gpw_files, in_tmp_dir): 

13 fxc = 'LDA' 

14 # Time-propagation calculation with fxc 

15 td_calc = LCAOTDDFT(gpw_files['sih4_xc_gllbsc_lcao'], 

16 fxc=fxc, txt='td_fxc.out') 

17 DipoleMomentWriter(td_calc, 'dm_fxc.dat') 

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

19 td_calc.propagate(20, 4) 

20 

21 # Time-propagation calculation with linearize_to_fxc() 

22 td_calc = LCAOTDDFT(gpw_files['sih4_xc_gllbsc_lcao'], txt='td_lin.out') 

23 td_calc.linearize_to_xc(fxc) 

24 DipoleMomentWriter(td_calc, 'dm_lin.dat') 

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

26 td_calc.propagate(20, 4) 

27 

28 # Test the equivalence 

29 world.barrier() 

30 ref = np.loadtxt('dm_fxc.dat').ravel() 

31 data = np.loadtxt('dm_lin.dat').ravel() 

32 

33 tol = 1e-9 

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

35 

36 # Test the absolute values 

37 if 0: 

38 from gpaw.test import print_reference 

39 print_reference(data, 'ref', '%.12le') 

40 

41 ref = [0.00000000e+00, 1.62932507e-15, 

42 -7.87693913e-15, -1.14696427e-14, 

43 -5.80989675e-15, 0.00000000e+00, 

44 3.62636797e-15, -3.29113009e-14, 

45 -3.51289578e-14, -3.67931628e-14, 

46 8.26827470e-01, -1.81172385e-15, 

47 6.17633458e-05, 6.17633458e-05, 

48 6.17633458e-05, 1.65365493e+00, 

49 -8.01473100e-16, 9.88572381e-05, 

50 9.88572381e-05, 9.88572381e-05, 

51 2.48048240e+00, -2.63296003e-15, 

52 1.04139540e-04, 1.04139540e-04, 

53 1.04139540e-04, 3.30730987e+00, 

54 2.29033034e-15, 8.81733367e-05, 

55 8.81733367e-05, 8.81733367e-05] 

56 

57 print('result') 

58 print(data.tolist()) 

59 

60 tol = 1e-12 

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