Coverage for gpaw/test/poisson/test_metallic_poisson.py: 100%
22 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
1from gpaw import GPAW, restart
2from ase.build import bcc111
3from gpaw.poisson import PoissonSolver
4import numpy as np
7def test_poisson_metallic_poisson(in_tmp_dir):
8 slab = bcc111('Na', (1, 1, 2), vacuum=8)
9 electrodes = ['both', 'single']
10 charge = 0.05
12 for electrode in electrodes:
13 slab.calc = GPAW(
14 mode='fd',
15 xc='LDA', h=0.22,
16 txt='metallic.txt',
17 charge=charge,
18 convergence={'density': 1e-1,
19 'energy': 1e-1,
20 'eigenstates': 1e-1},
21 kpts=(2, 2, 1),
22 poissonsolver=PoissonSolver(metallic_electrodes=electrode))
24 _ = slab.get_potential_energy()
25 phi0 = slab.calc.get_electrostatic_potential()
26 assert np.all(abs(phi0[:, :, 0]) < 1e-10)
27 if electrode == 'both':
28 print(phi0[:, :, 0])
29 print(phi0[:, :, 1])
30 # The last zero boundary condition is implicit, so extrapolate
31 d = phi0[:, :, -1] - phi0[:, :, -2]
32 assert np.all(abs(phi0[:, :, -1] + d) < 1e-5)
34 slab.calc.write('%s.gpw' % electrode)
36 atoms, calc = restart('%s.gpw' % electrode, txt='restart.txt')
37 phi02 = calc.get_electrostatic_potential()
38 assert np.all(abs(phi02 - phi0) < 1e-10)