Mercurial > repos > public > sbplib_julia
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