diff --git a/arraycontext/impl/pyopencl.py b/arraycontext/impl/pyopencl.py
index 3dd5f3f4e79b5c75edd8714fae643a4a82ed2a78..93610306f70ab10aa7e0ebf9a4a153e6850a5453 100644
--- a/arraycontext/impl/pyopencl.py
+++ b/arraycontext/impl/pyopencl.py
@@ -189,11 +189,17 @@ def _flatten_array(ary):
 class _PyOpenCLFakeNumpyLinalgNamespace(BaseFakeNumpyLinalgNamespace):
     def norm(self, ary, ord=None):
         from numbers import Number
+        import pyopencl.array as cla
+
         if isinstance(ary, Number):
             return abs(ary)
 
-        if ord is None:
-            ord = 2
+        if ord is None and isinstance(ary, cla.Array):
+            if ary.ndim == 1:
+                ord = 2
+            else:
+                # mimics numpy's norm computation
+                return self.norm(_flatten_array(ary), ord=2)
 
         try:
             from meshmode.dof_array import DOFArray
diff --git a/test/test_arraycontext.py b/test/test_arraycontext.py
index d8f9ccbe3e786bd7def309469588c063bea761d9..40a5c60ec87b561e4f0cfaacac11a3a3ee3aca33 100644
--- a/test/test_arraycontext.py
+++ b/test/test_arraycontext.py
@@ -713,6 +713,23 @@ def test_norm_complex(actx_factory, norm_ord):
     assert abs(norm_a_ref - norm_a)/norm_a < 1e-13
 
 
+@pytest.mark.parametrize("ndim", [1, 2, 3, 4, 5])
+def test_norm_ord_none(actx_factory, ndim):
+    from numpy.random import default_rng
+
+    actx = actx_factory()
+
+    rng = default_rng()
+    shape = tuple(rng.integers(2, 7, ndim))
+
+    a = rng.random(shape)
+
+    norm_a_ref = np.linalg.norm(a, ord=None)
+    norm_a = actx.np.linalg.norm(actx.from_numpy(a), ord=None)
+
+    np.testing.assert_allclose(norm_a, norm_a_ref)
+
+
 if __name__ == "__main__":
     import sys
     if len(sys.argv) > 1: