Coverage for gpaw/test/gpu/test_poisson.py: 34%

29 statements  

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

1from gpaw.grid_descriptor import GridDescriptor 

2from gpaw.poisson import FDPoissonSolver 

3import pytest 

4import numpy as np 

5from gpaw.mpi import size 

6from gpaw.gpu import cupy_is_fake 

7 

8 

9@pytest.mark.gpu 

10@pytest.mark.skipif(cupy_is_fake, reason='No cupy') 

11@pytest.mark.skipif(size == 8, reason='Fails at the moment for size=8') 

12def test_poisson(): 

13 import cupy 

14 phis = [] 

15 for xp in [np, cupy]: 

16 lat = 8.0 

17 gd = GridDescriptor((8, 6, 8), (lat, lat, lat), 

18 pbc_c=[False, False, False]) 

19 # Use Gaussian as input 

20 x, y, z = gd.get_grid_point_coordinates() 

21 x, y, z = xp.asarray(x), xp.asarray(y), xp.asarray(z) 

22 sigma = 1.5 

23 mu = lat / 2.0 

24 

25 rho = gd.zeros(xp=xp) 

26 rho[:] = xp.exp( 

27 -((x - mu)**2 + (y - mu)**2 + (z - mu)**2) / (2.0 * sigma)) 

28 charge = gd.integrate(rho) 

29 rho -= charge * gd.dv 

30 

31 phi = gd.zeros(xp=xp) 

32 

33 poisson = FDPoissonSolver(xp=xp) 

34 poisson.set_grid_descriptor(gd) 

35 poisson.solve(phi, rho) 

36 phis.append(phi) 

37 cupy.allclose(phis[0], phis[1], rtol=1e-10)