diff --git a/arraycontext/impl/pyopencl.py b/arraycontext/impl/pyopencl.py index 80ea558a679d87274ef6eb679164a0aec236aa78..1f632a5716944006a03410be7cbc688b2447d7c3 100644 --- a/arraycontext/impl/pyopencl.py +++ b/arraycontext/impl/pyopencl.py @@ -129,6 +129,14 @@ class PyOpenCLFakeNumpyNamespace(BaseFakeNumpyNamespace): queue=self._array_context.queue), *arrays) + def concatenate(self, arrays, axis=0): + import pyopencl.array as cla + return cla.concatenate( + arrays, axis, + self._array_context.queue, + self._array_context.allocator + ) + # }}} diff --git a/test/test_arraycontext.py b/test/test_arraycontext.py index a4fb4bfbfff4492d07415bb111cb8110530ee051..ac31d2a8d5831f0dabbbc675a323554d536fee91 100644 --- a/test/test_arraycontext.py +++ b/test/test_arraycontext.py @@ -178,6 +178,23 @@ def test_array_context_np_workalike(actx_factory): # }}} +def test_actx_concatenate(actx_factory): + actx = actx_factory() + + ndofs = 5000 + args = [np.random.randn(ndofs) for i in range(10)] + ref_result = np.concatenate(args) + + # {{{ test cl.Arrays + + actx_args = [actx.from_numpy(arg) for arg in args] + actx_result = actx.to_numpy(actx.np.concatenate(actx_args)) + + assert np.allclose(actx_result, ref_result) + + # }}} + + def test_dof_array_arithmetic_same_as_numpy(actx_factory): actx = actx_factory()