diff src/SbpOperators/stencil.jl @ 1456:f13857f37b8f bugfix/sbp_operators/stencil_return_type

Fix broken tests using mapreduce(f,+,...). Needs to be evaluated for performance
author Jonatan Werpers <jonatan@werpers.com>
date Sun, 26 Nov 2023 22:30:44 +0100
parents 14cb97284373
children
line wrap: on
line diff
--- a/src/SbpOperators/stencil.jl	Fri Nov 24 21:49:07 2023 +0100
+++ b/src/SbpOperators/stencil.jl	Sun Nov 26 22:30:44 2023 +0100
@@ -69,20 +69,15 @@
 end
 
 Base.@propagate_inbounds @inline function apply_stencil(s::Stencil, v::AbstractVector, i::Int)
-    w = zero(promote_type(eltype(s),eltype(v)))
-    @simd for k ∈ 1:length(s)
-        w += s.weights[k]*v[i + s.range[k]]
+    return mapreduce(+, 1:length(s)) do k
+        s.weights[k]*v[i + s.range[k]]
     end
-
-    return w
 end
 
 Base.@propagate_inbounds @inline function apply_stencil_backwards(s::Stencil, v::AbstractVector, i::Int)
-    w = zero(promote_type(eltype(s),eltype(v)))
-    @simd for k ∈ length(s):-1:1
-        w += s.weights[k]*v[i - s.range[k]]
+    return mapreduce(+, length(s):-1:1) do k
+        s.weights[k]*v[i - s.range[k]]
     end
-    return w
 end
 
 function left_pad(s::Stencil, N)