Coverage for gpaw/test/response/test_gw_mpa.py: 100%

13 statements  

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

1import pytest 

2import numpy as np 

3from gpaw.response.g0w0 import G0W0 

4from ase.units import Hartree as Ha 

5from gpaw.mpi import world 

6 

7 

8@pytest.mark.response 

9@pytest.mark.parametrize('wigner_seitz', [True, False]) 

10def test_mpa_WS(in_tmp_dir, gpw_files, scalapack, wigner_seitz): 

11 

12 ref_result = {True: np.array([[[11.37680608, 21.56391991], 

13 [5.40811023, 16.11600678], 

14 [8.83575046, 22.42880098]]]), 

15 False: np.asarray([[[11.283458, 21.601906], 

16 [5.326717, 16.066114], 

17 [8.73869, 22.457025]]])} 

18 

19 mpa_dict = {'npoles': 4, 'wrange': [0 * Ha, 2 * Ha], 

20 'varpi': Ha, 

21 'eta0': 0.01 * Ha, 

22 'eta_rest': 0.1 * Ha, 

23 'alpha': 1} 

24 

25 gw = G0W0(gpw_files['bn_pw'], 

26 bands=(3, 5), 

27 nblocks=min(2, world.size), 

28 ecut=40 + 20 * wigner_seitz, 

29 nbands=9, 

30 integrate_gamma='WS' if wigner_seitz else 'sphere', 

31 mpa=mpa_dict) 

32 

33 results = gw.calculate() 

34 np.testing.assert_allclose(results['qp'], ref_result[wigner_seitz], 

35 rtol=1e-03)