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

1from gpaw import GPAW, restart 

2from ase.build import bcc111 

3from gpaw.poisson import PoissonSolver 

4import numpy as np 

5 

6 

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 

11 

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)) 

23 

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) 

33 

34 slab.calc.write('%s.gpw' % electrode) 

35 

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)