Coverage for gpaw/test/gpu/test_acf.py: 97%
32 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-19 00:19 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-19 00:19 +0000
1import pytest
2import numpy as np
4from gpaw.core import UGDesc
5from gpaw.gpu import cupy as cp
6from gpaw.mpi import world
7from gpaw.spline import Spline
8from gpaw.new.c import GPU_AWARE_MPI
11@pytest.mark.gpu
12@pytest.mark.parametrize('dtype', [float, complex])
13def test_acf(dtype):
14 if world.size > 1 and not GPU_AWARE_MPI:
15 pytest.skip('MPI not GPU-aware')
16 s = Spline.from_data(0, 1.0, [1.0, 0.5, 0.0])
17 n = 40
18 a = 8.0
19 relpos_ac = [(0.5, 0.5, 0.25 + 0.25 * i) for i in [0, 1, 2]]
21 grid = UGDesc(cell=[a, a, a], size=(n, n, n), comm=world, dtype=dtype)
22 basis_cpu = grid.atom_centered_functions([[s], [s], [s]],
23 positions=relpos_ac, xp=np)
24 basis_gpu = grid.atom_centered_functions([[s], [s], [s]],
25 positions=relpos_ac, xp=cp)
27 P_cpu_ani = basis_cpu.layout.empty()
28 P_gpu_ani = basis_gpu.layout.empty()
29 P_cpu_ani.data[:] = 1.0
30 P_gpu_ani.data[:] = 1.0
32 b_cpu = grid.zeros(xp=np)
33 b_gpu = grid.zeros(xp=cp)
34 basis_cpu.add_to(b_cpu, P_cpu_ani)
35 basis_gpu.add_to(b_gpu, P_gpu_ani)
37 assert b_cpu.data == pytest.approx(b_gpu.data.get(), abs=1e-12)
39 out_cpu_ani = basis_cpu.integrate(b_cpu)
40 out_gpu_ani = basis_gpu.integrate(b_gpu)
42 for a, out_cpu_ni in out_cpu_ani.items():
43 assert out_cpu_ni == pytest.approx(out_gpu_ani[a].get(), abs=1e-12)