changeset 1065:fdd594b2a15e feature/nested_stencils

Fix type instability in apply_stencil_backwards and add tests (grafted from a3bc90c59e8e89de3535c7767963f3a3010c4f4c)
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 15 Feb 2022 08:08:19 +0100
parents a601427023e3
children d13f84dc267a
files src/SbpOperators/stencil.jl test/SbpOperators/stencil_test.jl
diffstat 2 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/SbpOperators/stencil.jl	Tue Feb 15 07:54:52 2022 +0100
+++ b/src/SbpOperators/stencil.jl	Tue Feb 15 08:08:19 2022 +0100
@@ -78,7 +78,7 @@
 end
 
 Base.@propagate_inbounds @inline function apply_stencil_backwards(s::Stencil, v::AbstractVector, i::Int)
-    w = zero(eltype(v))
+    w = zero(promote_type(eltype(s),eltype(v)))
     @simd for k ∈ length(s):-1:1
         w += s.weights[k]*v[i - s.range[k]]
     end
--- a/test/SbpOperators/stencil_test.jl	Tue Feb 15 07:54:52 2022 +0100
+++ b/test/SbpOperators/stencil_test.jl	Tue Feb 15 08:08:19 2022 +0100
@@ -55,7 +55,10 @@
         @inferred SbpOperators.apply_stencil(s_int,  v_float, 2)
         @inferred SbpOperators.apply_stencil(s_float, v_int, 2)
 
-        # TODO: apply backwards
+        @inferred SbpOperators.apply_stencil_backwards(s_int, v_int, 5)
+        @inferred SbpOperators.apply_stencil_backwards(s_float, v_float, 5)
+        @inferred SbpOperators.apply_stencil_backwards(s_int,  v_float, 5)
+        @inferred SbpOperators.apply_stencil_backwards(s_float, v_int, 5)
     end
 end
 
@@ -157,7 +160,15 @@
         @inferred SbpOperators.apply_stencil(s_int,   c_float, v_float, 2)
         @inferred SbpOperators.apply_stencil(s_float, c_float, v_int,   2)
 
-        # TODO: apply backwards
+        @inferred SbpOperators.apply_stencil_backwards(s_int,   c_int, v_int,   2)
+        @inferred SbpOperators.apply_stencil_backwards(s_float, c_int, v_float, 2)
+        @inferred SbpOperators.apply_stencil_backwards(s_int,   c_int, v_float, 2)
+        @inferred SbpOperators.apply_stencil_backwards(s_float, c_int, v_int,   2)
+
+        @inferred SbpOperators.apply_stencil_backwards(s_int,   c_float, v_int,   2)
+        @inferred SbpOperators.apply_stencil_backwards(s_float, c_float, v_float, 2)
+        @inferred SbpOperators.apply_stencil_backwards(s_int,   c_float, v_float, 2)
+        @inferred SbpOperators.apply_stencil_backwards(s_float, c_float, v_int,   2)
     end
 
 end