diff --git a/src/scheme/DiscreteFunctionP0.hpp b/src/scheme/DiscreteFunctionP0.hpp
index ffcda127022b7b93eae812784f89785a9691657b..6bf5efc8b8add13d6f389f8c19b22b723f1025f4 100644
--- a/src/scheme/DiscreteFunctionP0.hpp
+++ b/src/scheme/DiscreteFunctionP0.hpp
@@ -68,6 +68,14 @@ class DiscreteFunctionP0 : public IDiscreteFunction
     m_cell_values.fill(data);
   }
 
+  PUGS_INLINE DiscreteFunctionP0
+  operator=(const DiscreteFunctionP0& f)
+  {
+    Assert(m_mesh == f.m_mesh);
+    m_cell_values = f.m_cell_values;
+    return *this;
+  }
+
   friend PUGS_INLINE DiscreteFunctionP0<Dimension, std::remove_const_t<DataType>>
   copy(const DiscreteFunctionP0& source)
   {
@@ -253,6 +261,8 @@ class DiscreteFunctionP0 : public IDiscreteFunction
     Assert(mesh->connectivity().shared_ptr() == cell_value.connectivity_ptr());
   }
 
+  DiscreteFunctionP0() noexcept = delete;
+
   DiscreteFunctionP0(const DiscreteFunctionP0&) noexcept = default;
   DiscreteFunctionP0(DiscreteFunctionP0&&) noexcept      = default;