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

1import time 

2 

3import pytest 

4import numpy as np 

5from ase.parallel import parprint 

6 

7from gpaw.test import findpeak 

8from gpaw.response.df import DielectricFunction, read_response_function 

9from gpaw.mpi import size, world 

10 

11 

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 

17 

18 # Using bse_al fixture, since it was closest to the previous test 

19 calc = gpw_files['bse_al'] 

20 

21 t1 = time.time() 

22 

23 # Excited state calculation 

24 q = np.array([1 / 4, 0, 0]) 

25 w = np.linspace(0, 24, 241) 

26 

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) 

30 

31 t2 = time.time() 

32 

33 parprint('For excited state calc, it took', (t2 - t1) / 60, 'minutes') 

34 

35 world.barrier() 

36 omega_w, eels0_w, eels_w = read_response_function('EELS_Al_ALDA.csv') 

37 

38 # New results are compared with test values 

39 wpeak1, Ipeak1 = findpeak(omega_w, eels0_w) 

40 wpeak2, Ipeak2 = findpeak(omega_w, eels_w) 

41 

42 test_wpeak1 = 15.1034604723 # eV 

43 test_Ipeak1 = 27.3106588260 

44 test_wpeak2 = 14.9421103838 

45 test_Ipeak2 = 25.1284001349 

46 

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 ! ') 

50 

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 ! ')