From 2809339d8570d0fa40a6577c492d81e958e852c7 Mon Sep 17 00:00:00 2001 From: Gregor Olenik Date: Mon, 30 Sep 2024 13:25:50 +0200 Subject: [PATCH] Pull scaling field from from #136\n\nCo-authored-by: Henning Scheufler +struct ScalingField +{ + ScalingField() = default; + ScalingField(std::span values) : values(values), value(1.0), useSpan(true) {} + + ScalingField(std::span values, NeoFOAM::scalar value) + : values(values), value(value), useSpan(true) + {} + + ScalingField(NeoFOAM::scalar value) : values(), value(value), useSpan(false) {} + + std::span values; + NeoFOAM::scalar value; + bool useSpan; + + KOKKOS_INLINE_FUNCTION + ValueType operator[](const size_t i) const { return useSpan ? values[i] * value : value; } + + void operator*=(NeoFOAM::scalar scale) { value *= scale; } + + void operator=(NeoFOAM::scalar scale) { value = scale; } + + void operator*=(Field scalingField) + { + auto scale = scalingField.span(); + // otherwise we are unable to capture values in the lambda + auto selfValue = values; + NeoFOAM::parallelFor( + scalingField.exec(), + {0, scalingField.size()}, + KOKKOS_LAMBDA(const size_t i) { selfValue[i] *= scale[i]; } + ); + } +}; + +} // namespace NeoFOAM