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
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-20 00:19 +0000
1import pytest
2import numpy as np
4from gpaw.lcaotddft import LCAOTDDFT
5from gpaw.lcaotddft.dipolemomentwriter import DipoleMomentWriter
6from gpaw.mpi import world
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)
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)
28 # Test the equivalence
29 world.barrier()
30 ref = np.loadtxt('dm_fxc.dat').ravel()
31 data = np.loadtxt('dm_lin.dat').ravel()
33 tol = 1e-9
34 assert data == pytest.approx(ref, abs=tol)
36 # Test the absolute values
37 if 0:
38 from gpaw.test import print_reference
39 print_reference(data, 'ref', '%.12le')
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]
57 print('result')
58 print(data.tolist())
60 tol = 1e-12
61 assert data == pytest.approx(ref, abs=tol)