From 2e947919dad10316242e10ee43a23bcc0cf18d08 Mon Sep 17 00:00:00 2001 From: Pierre Matalon Date: Mon, 25 Sep 2023 11:56:58 +0200 Subject: [PATCH] Fix transfer() function for vectorial fields --- include/samurai/reconstruction.hpp | 54 +++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/include/samurai/reconstruction.hpp b/include/samurai/reconstruction.hpp index cac3f0ed9..acdba7ae1 100644 --- a/include/samurai/reconstruction.hpp +++ b/include/samurai/reconstruction.hpp @@ -761,53 +761,53 @@ namespace samurai auto shift = level_dst - level_src; if constexpr (dim == 1) { - auto dst = field_dst(level_dst, i); for (value_t ii = 0; ii < static_cast(i.size()); ++ii) { + auto dst = field_dst(level_dst, interval_t{i.start + ii, i.start + ii + 1}); auto i_src = (i.start + static_cast(ii)) >> shift; - dst(ii) = portion(field_src, - level_src, - interval_t{i_src, i_src + 1}, - shift, - i.start + ii - (i_src << static_cast(shift)))[0]; + dst = portion(field_src, + level_src, + interval_t{i_src, i_src + 1}, + shift, + i.start + ii - (i_src << static_cast(shift))); } } else if constexpr (dim == 2) { - auto j = index[0]; - auto dst = field_dst(level_dst, i, j); + auto j = index[0]; for (value_t ii = 0; ii < static_cast(i.size()); ++ii) { + auto dst = field_dst(level_dst, interval_t{i.start + ii, i.start + ii + 1}, j); auto i_src = (i.start + static_cast(ii)) >> shift; auto j_src = j >> shift; - dst(ii) = portion(field_src, - level_src, - interval_t{i_src, i_src + 1}, - j_src, - shift, - i.start + ii - (i_src << static_cast(shift)), - j - (j_src << shift))[0]; + dst = portion(field_src, + level_src, + interval_t{i_src, i_src + 1}, + j_src, + shift, + i.start + ii - (i_src << static_cast(shift)), + j - (j_src << shift)); } } else if constexpr (dim == 3) { - auto j = index[0]; - auto k = index[1]; - auto dst = field_dst(level_dst, i, j, k); + auto j = index[0]; + auto k = index[1]; for (value_t ii = 0; ii < static_cast(i.size()); ++ii) { + auto dst = field_dst(level_dst, interval_t{i.start + ii, i.start + ii + 1}, j, k); auto i_src = (i.start + static_cast(ii)) >> shift; auto j_src = j >> shift; auto k_src = k >> shift; - dst(ii) = portion(field_src, - level_src, - interval_t{i_src, i_src + 1}, - j_src, - k_src, - shift, - i.start + ii - (i_src << static_cast(shift)), - j - (j_src << shift), - k - (k_src << shift))[0]; + dst = portion(field_src, + level_src, + interval_t{i_src, i_src + 1}, + j_src, + k_src, + shift, + i.start + ii - (i_src << static_cast(shift)), + j - (j_src << shift), + k - (k_src << shift)); } } });