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