Coverage for gpaw/test/parallel/test_kptpar.py: 42%

26 statements  

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

1# see changeset 4891 

2import pytest 

3import numpy as np 

4from ase import Atoms 

5from gpaw import GPAW 

6from gpaw.mpi import world 

7 

8 

9def test_parallel_kptpar(in_tmp_dir): 

10 a = 2.5 

11 H = Atoms('H', cell=[a, a, a], pbc=True) 

12 

13 energy_tolerance = 0.0006 

14 

15 base_params = dict(mode='fd', kpts=[6, 6, 1], spinpol=True) 

16 if world.size >= 3: 

17 calc = GPAW(**base_params, 

18 parallel={'domain': world.size}, 

19 txt='H-a.txt') 

20 H.calc = calc 

21 e1 = H.get_potential_energy() 

22 assert H.calc.wfs.kd.comm.size == 1 

23 

24 assert e1 == pytest.approx(-2.23708481, abs=energy_tolerance) 

25 

26 if world.rank < 3: 

27 comm = world.new_communicator(np.array([0, 1, 2])) 

28 H.calc = GPAW(**base_params, 

29 communicator=comm, 

30 txt='H-b.txt') 

31 e2 = H.get_potential_energy() 

32 assert H.calc.wfs.kd.comm.size == 3 

33 assert e2 == pytest.approx(e1, abs=5e-9) 

34 else: 

35 comm = world.new_communicator(np.array(range(3, world.size))) 

36 H.calc = GPAW(**base_params, 

37 communicator=comm, 

38 parallel={'kpt': comm.size}, 

39 txt='H-b2.txt') 

40 e2 = H.get_potential_energy() 

41 assert e2 == pytest.approx(e1, abs=5e-9)