Coverage for gpaw/test/parallel/test_augment_grid.py: 100%

32 statements  

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

1import numpy as np 

2from gpaw import GPAW 

3from ase.build import molecule 

4from gpaw.mpi import world 

5 

6 

7def test_parallel_augment_grid(in_tmp_dir): 

8 system = molecule('H2O') 

9 system.cell = (4, 4, 4) 

10 system.pbc = 1 

11 

12 for mode in ['fd', 

13 'pw', 

14 'lcao' 

15 ]: 

16 energy = [] 

17 force = [] 

18 stress = [] 

19 

20 if mode != 'lcao': 

21 eigensolver = 'rmm-diis' 

22 else: 

23 eigensolver = None 

24 

25 domain = 1 + (world.size >= 2) 

26 band = 1 + (world.size >= 4) 

27 

28 for augment_grids in 0, 1: 

29 if world.rank == 0: 

30 print(mode, augment_grids) 

31 calc = GPAW(mode=mode, 

32 gpts=(20, 20, 20), 

33 txt='gpaw.%s.%d.txt' % (mode, int(augment_grids)), 

34 eigensolver=eigensolver, 

35 parallel=dict(augment_grids=augment_grids, 

36 band=band, domain=domain), 

37 basis='szp(dzp)', 

38 kpts=[1, 1, 4], 

39 nbands=8, 

40 # Iterate enough for density to update so it depends 

41 # on potential 

42 convergence={'maximum iterations': 

43 3 if mode == 'lcao' else 5}) 

44 system.calc = calc 

45 energy.append(system.get_potential_energy()) 

46 force.append(system.get_forces()) 

47 if mode == 'pw': 

48 stress.append(system.get_stress()) 

49 ferr = np.abs(force[1] - force[0]).max() 

50 eerr = abs(energy[1] - energy[0]) 

51 if mode == 'pw': 

52 _ = np.abs(stress[1] - stress[0]).max() 

53 

54 assert eerr < 1e-10, eerr 

55 assert ferr < 1e-10, ferr