diff --git a/src/utils/ArrayUtils.hpp b/src/utils/ArrayUtils.hpp
index 734f0692bd23b6f48c719b462a02be0f02c90da2..6392eddd630bf4e22ce613348051aac93ff6c217 100644
--- a/src/utils/ArrayUtils.hpp
+++ b/src/utils/ArrayUtils.hpp
@@ -155,4 +155,23 @@ class Sum
   ~Sum() = default;
 };
 
+template <template <typename ...SourceT> typename SourceArray,
+          template <typename ...ImageT> typename ImageArray,
+          typename ...SourceT, typename ...ImageT>
+void value_copy(const SourceArray<SourceT...>& source_array,
+                ImageArray<ImageT...>& image_array)
+{
+  using SourceDataType = typename SourceArray<SourceT...>::data_type;
+  using ImageDataType = typename ImageArray<ImageT...>::data_type;
+
+  static_assert(std::is_same_v<std::remove_const_t<SourceDataType>,ImageDataType>);
+  static_assert(not std::is_const_v<ImageDataType>);
+
+  Assert(source_array.size() == image_array.size());
+
+  parallel_for(source_array.size(), PASTIS_LAMBDA(const size_t& i) {
+      image_array[i] = source_array[i];
+    });
+}
+
 #endif //ARRAY_UTILS_HPP