Coverage for gpaw/test/solvation/test_water_water_etdm_lcao.py: 89%

28 statements  

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

1from gpaw import GPAW 

2from gpaw.utilities.adjust_cell import adjust_cell 

3import pytest 

4from ase.build import molecule 

5from ase.units import mol, kcal 

6from gpaw.directmin.etdm_lcao import LCAOETDM 

7from gpaw.solvation import SolvationGPAW, get_HW14_water_kwargs 

8 

9 

10@pytest.mark.old_gpaw_only 

11def test_solvation_water_water_etdm_lcao(): 

12 SKIP_VAC_CALC = True 

13 

14 h = 0.24 

15 vac = 4.0 

16 convergence = { 

17 'energy': 0.05 / 8., 

18 'density': 10., 

19 'eigenstates': 10., 

20 } 

21 

22 atoms = molecule('H2O') 

23 adjust_cell(atoms, vac, h) 

24 

25 if not SKIP_VAC_CALC: 

26 atoms.calc = GPAW(mode='lcao', xc='PBE', h=h, basis='dzp', 

27 occupations={'name': 'fixed-uniform'}, 

28 eigensolver='etdm-lcao', 

29 mixer={'backend': 'no-mixing'}, 

30 nbands='nao', symmetry='off', 

31 convergence=convergence) 

32 Evac = atoms.get_potential_energy() 

33 print(Evac) 

34 else: 

35 # h=0.24, vac=4.0, setups: 0.9.20000, convergence: only energy 0.05 / 8 

36 Evac = -12.68228003345474 

37 

38 atoms.calc = SolvationGPAW(mode='lcao', xc='PBE', h=h, basis='dzp', 

39 occupations={'name': 'fixed-uniform'}, 

40 eigensolver=LCAOETDM( 

41 linesearch_algo={'name': 'max-step'}), 

42 mixer={'backend': 'no-mixing'}, 

43 nbands='nao', symmetry='off', 

44 convergence=convergence, 

45 **get_HW14_water_kwargs()) 

46 Ewater = atoms.get_potential_energy() 

47 Eelwater = atoms.calc.get_electrostatic_energy() 

48 Esurfwater = atoms.calc.get_solvation_interaction_energy('surf') 

49 DGSol = (Ewater - Evac) / (kcal / mol) 

50 print('Delta Gsol: %s kcal / mol' % DGSol) 

51 

52 assert DGSol == pytest.approx(-6.3, abs=2.) 

53 assert Ewater == pytest.approx(Eelwater + Esurfwater, abs=1e-14)