comparison src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl @ 1374:4f3dd84891f6 feature/variable_derivatives

Simplify constructor for SecondDerivativeVariable
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 26 May 2023 22:50:39 +0200
parents 3f7f826489a1
children e9dfc1998d31
comparison
equal deleted inserted replaced
1373:85bd47f3ba48 1374:4f3dd84891f6
24 check_coefficient(g, coeff) 24 check_coefficient(g, coeff)
25 25
26 Δxᵢ = spacing(g.grids[dir]) 26 Δxᵢ = spacing(g.grids[dir])
27 scaled_inner_stencil = scale(inner_stencil, 1/Δxᵢ^2) 27 scaled_inner_stencil = scale(inner_stencil, 1/Δxᵢ^2)
28 scaled_closure_stencils = scale.(Tuple(closure_stencils), 1/Δxᵢ^2) 28 scaled_closure_stencils = scale.(Tuple(closure_stencils), 1/Δxᵢ^2)
29 return SecondDerivativeVariable{dir, ndims(g)}(scaled_inner_stencil, scaled_closure_stencils, coeff) 29 return SecondDerivativeVariable(coeff, scaled_inner_stencil, scaled_closure_stencils, dir)
30 end 30 end
31 31
32 function check_coefficient(g, coeff) 32 function check_coefficient(g, coeff)
33 if ndims(g) != ndims(coeff) 33 if ndims(g) != ndims(coeff)
34 throw(ArgumentError("The coefficient has dimension $(ndims(coeff)) while the grid is dimension $(ndims(g))")) 34 throw(ArgumentError("The coefficient has dimension $(ndims(coeff)) while the grid is dimension $(ndims(g))"))
49 struct SecondDerivativeVariable{Dir,T,D,M,IStencil<:NestedStencil{T},CStencil<:NestedStencil{T},TArray<:AbstractArray} <: LazyTensor{T,D,D} 49 struct SecondDerivativeVariable{Dir,T,D,M,IStencil<:NestedStencil{T},CStencil<:NestedStencil{T},TArray<:AbstractArray} <: LazyTensor{T,D,D}
50 inner_stencil::IStencil 50 inner_stencil::IStencil
51 closure_stencils::NTuple{M,CStencil} 51 closure_stencils::NTuple{M,CStencil}
52 coefficient::TArray 52 coefficient::TArray
53 53
54 function SecondDerivativeVariable{Dir, D}(inner_stencil::NestedStencil{T}, closure_stencils::NTuple{M,NestedStencil{T}}, coefficient::AbstractArray) where {Dir,T,D,M} 54 function SecondDerivativeVariable(coefficient::AbstractArray, inner_stencil::NestedStencil{T}, closure_stencils::NTuple{M,NestedStencil{T}}, dir) where {T,M}
55 D = ndims(coefficient)
55 IStencil = typeof(inner_stencil) 56 IStencil = typeof(inner_stencil)
56 CStencil = eltype(closure_stencils) 57 CStencil = eltype(closure_stencils)
57 TArray = typeof(coefficient) 58 TArray = typeof(coefficient)
58 return new{Dir,T,D,M,IStencil,CStencil,TArray}(inner_stencil, closure_stencils, coefficient) 59 return new{dir,T,D,M,IStencil,CStencil,TArray}(inner_stencil, closure_stencils, coefficient)
59 end 60 end
60 end 61 end
61 62
62 derivative_direction(::SecondDerivativeVariable{Dir}) where {Dir} = Dir 63 derivative_direction(::SecondDerivativeVariable{Dir}) where {Dir} = Dir
63 64