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
« 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
10@pytest.mark.old_gpaw_only
11def test_solvation_water_water_etdm_lcao():
12 SKIP_VAC_CALC = True
14 h = 0.24
15 vac = 4.0
16 convergence = {
17 'energy': 0.05 / 8.,
18 'density': 10.,
19 'eigenstates': 10.,
20 }
22 atoms = molecule('H2O')
23 adjust_cell(atoms, vac, h)
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
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)
52 assert DGSol == pytest.approx(-6.3, abs=2.)
53 assert Ewater == pytest.approx(Eelwater + Esurfwater, abs=1e-14)