changeset 906:33c7e266e1a9 feature/variable_derivatives

Add fix for type instability in SecondDerivativeVariable along with tests
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 15 Feb 2022 09:56:07 +0100
parents a3bc90c59e8e
children f800f97b3a45
files src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl test/SbpOperators/volumeops/derivatives/second_derivative_variable_test.jl
diffstat 2 files changed, 22 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl	Tue Feb 15 08:08:19 2022 +0100
+++ b/src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl	Tue Feb 15 09:56:07 2022 +0100
@@ -30,14 +30,17 @@
 
 Implements the one-dimensional second derivative with variable coefficients.
 """
-struct SecondDerivativeVariable{Dir,T,D,N,M,K,TArray<:AbstractArray} <: TensorMapping{T,D,D}
-    inner_stencil::NestedStencil{T,N}
-    closure_stencils::NTuple{M,NestedStencil{T,K}}
+struct SecondDerivativeVariable{Dir,T,D,M,IStencil<:NestedStencil{T},CStencil<:NestedStencil{T},TArray<:AbstractArray} <: TensorMapping{T,D,D}
+    inner_stencil::IStencil
+    closure_stencils::NTuple{M,CStencil}
     size::NTuple{D,Int}
     coefficient::TArray
 
-    function SecondDerivativeVariable{Dir, D}(inner_stencil::NestedStencil{T,N}, closure_stencils::NTuple{M,NestedStencil{T,K}}, size::NTuple{D,Int}, coefficient::TArray) where {Dir,T,D,N,M,K,TArray<:AbstractArray}
-        return new{Dir,T,D,N,M,K,TArray}(inner_stencil,closure_stencils,size, coefficient)
+    function SecondDerivativeVariable{Dir, D}(inner_stencil::NestedStencil{T}, closure_stencils::NTuple{M,NestedStencil{T}}, size::NTuple{D,Int}, coefficient::AbstractArray) where {Dir,T,D,M}
+        IStencil = typeof(inner_stencil)
+        CStencil = eltype(closure_stencils)
+        TArray = typeof(coefficient)
+        return new{Dir,T,D,M,IStencil,CStencil,TArray}(inner_stencil,closure_stencils,size, coefficient)
     end
 end
 
--- a/test/SbpOperators/volumeops/derivatives/second_derivative_variable_test.jl	Tue Feb 15 08:08:19 2022 +0100
+++ b/test/SbpOperators/volumeops/derivatives/second_derivative_variable_test.jl	Tue Feb 15 09:56:07 2022 +0100
@@ -3,6 +3,7 @@
 using Sbplib.Grids
 using Sbplib.LazyTensors
 using Sbplib.SbpOperators
+using Sbplib.RegionIndices
 using Sbplib.SbpOperators: NestedStencil, CenteredNestedStencil
 
 using LinearAlgebra
@@ -48,6 +49,19 @@
             @test apply_to_functions(v=x->x,   c=x-> -x ) == -ones(11)
             @test apply_to_functions(v=x->x^2, c=x->  1.) == 2ones(11)
         end
+
+        @testset "Inferred" begin
+            g = EquidistantGrid(11, 0., 10.) # h = 1
+            c̄ = evalOn(g,x-> -1)
+            v̄ = evalOn(g,x->1.)
+
+            D₂ᶜ = SecondDerivativeVariable(g, c̄, interior_stencil, closure_stencils)
+
+            @inferred SbpOperators.apply_lower(D₂ᶜ, v̄, 1)
+            @inferred SbpOperators.apply_interior(D₂ᶜ, v̄, 5)
+            @inferred SbpOperators.apply_upper(D₂ᶜ, v̄, 11)
+            @inferred (D₂ᶜ*v̄)[Index(1,Lower)]
+        end
     end
 
     @testset "2D" begin