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
« 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
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
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
31 phi = gd.zeros(xp=xp)
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)