Coverage for gpaw/test/response/test_aluminum_EELS_ALDA.py: 88%
34 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 time
3import pytest
4import numpy as np
5from ase.parallel import parprint
7from gpaw.test import findpeak
8from gpaw.response.df import DielectricFunction, read_response_function
9from gpaw.mpi import size, world
12@pytest.mark.dielectricfunction
13@pytest.mark.response
14@pytest.mark.libxc
15def test_response_aluminum_EELS_ALDA(gpw_files, in_tmp_dir):
16 assert size <= 4**3
18 # Using bse_al fixture, since it was closest to the previous test
19 calc = gpw_files['bse_al']
21 t1 = time.time()
23 # Excited state calculation
24 q = np.array([1 / 4, 0, 0])
25 w = np.linspace(0, 24, 241)
27 df = DielectricFunction(calc=calc, frequencies=w, eta=0.2, ecut=50,
28 hilbert=False)
29 df.get_eels_spectrum(xc='ALDA', filename='EELS_Al_ALDA.csv', q_c=q)
31 t2 = time.time()
33 parprint('For excited state calc, it took', (t2 - t1) / 60, 'minutes')
35 world.barrier()
36 omega_w, eels0_w, eels_w = read_response_function('EELS_Al_ALDA.csv')
38 # New results are compared with test values
39 wpeak1, Ipeak1 = findpeak(omega_w, eels0_w)
40 wpeak2, Ipeak2 = findpeak(omega_w, eels_w)
42 test_wpeak1 = 15.1034604723 # eV
43 test_Ipeak1 = 27.3106588260
44 test_wpeak2 = 14.9421103838
45 test_Ipeak2 = 25.1284001349
47 if abs(test_wpeak1 - wpeak1) > 0.02 or abs(test_wpeak2 - wpeak2) > 0.02:
48 print(test_wpeak1 - wpeak1, test_wpeak2 - wpeak2)
49 raise ValueError('Plasmon peak not correct ! ')
51 if abs(test_Ipeak1 - Ipeak1) > 1 or abs(test_Ipeak2 - Ipeak2) > 1:
52 print(Ipeak1 - test_Ipeak1, Ipeak2 - test_Ipeak2)
53 raise ValueError('Please check spectrum strength ! ')