Coverage for gpaw/test/pw/test_augment_grids.py: 79%
38 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 numpy as np
2import pytest
3from ase import Atoms
5from gpaw import PW, FermiDirac
6from gpaw.calculator import GPAW
7from gpaw.new.calculation import DFTCalculation
8from gpaw.mpi import rank
11@pytest.mark.old_gpaw_only
12@pytest.mark.stress
13def test_pw_augment_grids(in_tmp_dir, gpaw_new):
14 ecut = 200
15 kpoints = [1, 1, 4]
16 atoms = Atoms('HLi', cell=[6, 6, 3.4], pbc=True,
17 positions=[[3, 3, 0], [3, 3, 1.6]])
19 def calculate(aug):
20 if gpaw_new:
21 dft = DFTCalculation.from_parameters(
22 atoms,
23 dict(mode=PW(ecut),
24 parallel={'augment_grids': aug},
25 kpts={'size': kpoints},
26 occupations=FermiDirac(width=0.1)),
27 log=f'gpaw.aug{aug}.txt')
28 dft.converge(steps=4)
29 dft.energy()
30 dft.forces()
31 dft.stress()
32 e = dft.results['energy']
33 f = dft.results['forces']
34 s = dft.results['stress']
35 else:
36 atoms.calc = GPAW(mode=PW(ecut),
37 txt=f'gpaw.aug{aug}.txt',
38 parallel={'augment_grids': aug},
39 kpts={'size': kpoints},
40 occupations=FermiDirac(width=0.1),
41 convergence={'maximum iterations': 4})
42 e = atoms.get_potential_energy()
43 f = atoms.get_forces()
44 s = atoms.get_stress()
45 return e, f, s
47 e1, f1, s1 = calculate(False)
48 e2, f2, s2 = calculate(True)
50 eerr = abs(e2 - e1)
51 ferr = np.abs(f2 - f1).max()
52 serr = np.abs(s2 - s1).max()
53 if rank == 0:
54 print('errs', eerr, ferr, serr)
55 assert eerr < 5e-12, f'bad energy: err={eerr}'
56 assert ferr < 5e-12, f'bad forces: err={ferr}'
57 assert serr < 5e-12, f'bad stress: err={serr}'