diff src/SbpOperators/stencil.jl @ 584:4aa7fe13a984

Add scale() and eltype() methods for stencils
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 02 Dec 2020 11:18:18 +0100
parents 01b851161018
children 03ef4d4740ab
line wrap: on
line diff
--- a/src/SbpOperators/stencil.jl	Mon Nov 30 09:13:13 2020 +0100
+++ b/src/SbpOperators/stencil.jl	Wed Dec 02 11:18:18 2020 +0100
@@ -8,6 +8,17 @@
     end
 end
 
+"""
+    scale(s::Stencil, a)
+
+Scale the weights of the stencil `s` with `a` and return a new stencil.
+"""
+function scale(s::Stencil, a)
+    return Stencil(s.range, a.*s.weights)
+end
+
+Base.eltype(::Stencil{T}) where T = T
+
 function flip(s::Stencil)
     range = (-s.range[2], -s.range[1])
     return Stencil(range, reverse(s.weights))
@@ -16,7 +27,7 @@
 # Provides index into the Stencil based on offset for the root element
 @inline function Base.getindex(s::Stencil, i::Int)
     @boundscheck if i < s.range[1] || s.range[2] < i
-        return eltype(s.weights)(0)
+        return zero(eltype(s))
     end
     return s.weights[1 + i - s.range[1]]
 end