Mercurial > repos > public > sbplib_julia
changeset 1367:71e89507dd9a feature/variable_derivatives
Remove size field from SecondDerivativeVariable since it duplicates info from the coefficient field
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 26 May 2023 14:53:19 +0200 |
parents | 4684c7f1c4cb |
children | 26ad90b42efd |
files | src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl |
diffstat | 1 files changed, 14 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl Sun May 21 21:55:14 2023 +0200 +++ b/src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl Fri May 26 14:53:19 2023 +0200 @@ -9,14 +9,13 @@ struct SecondDerivativeVariable{Dir,T,D,M,IStencil<:NestedStencil{T},CStencil<:NestedStencil{T},TArray<:AbstractArray} <: LazyTensor{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}, closure_stencils::NTuple{M,NestedStencil{T}}, size::NTuple{D,Int}, coefficient::AbstractArray) where {Dir,T,D,M} + function SecondDerivativeVariable{Dir, D}(inner_stencil::NestedStencil{T}, closure_stencils::NTuple{M,NestedStencil{T}}, 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) + return new{Dir,T,D,M,IStencil,CStencil,TArray}(inner_stencil, closure_stencils, coefficient) end end @@ -26,7 +25,7 @@ Δxᵢ = spacing(g.grids[dir]) scaled_inner_stencil = scale(inner_stencil, 1/Δxᵢ^2) scaled_closure_stencils = scale.(Tuple(closure_stencils), 1/Δxᵢ^2) - return SecondDerivativeVariable{dir, ndims(g)}(scaled_inner_stencil, scaled_closure_stencils, size(g), coeff) + return SecondDerivativeVariable{dir, ndims(g)}(scaled_inner_stencil, scaled_closure_stencils, coeff) end function SecondDerivativeVariable(g::EquidistantGrid, coeff::AbstractVector, inner_stencil::NestedStencil, closure_stencils) @@ -78,8 +77,8 @@ closure_size(op::SecondDerivativeVariable) = length(op.closure_stencils) -LazyTensors.range_size(op::SecondDerivativeVariable) = op.size -LazyTensors.domain_size(op::SecondDerivativeVariable) = op.size +LazyTensors.range_size(op::SecondDerivativeVariable) = size(op.coefficient) +LazyTensors.domain_size(op::SecondDerivativeVariable) = size(op.coefficient) function derivative_view(op, a, I) @@ -110,7 +109,8 @@ c̃ = derivative_view(op, op.coefficient, I) i = I[derivative_direction(op)] - stencil = op.closure_stencils[op.size[derivative_direction(op)]-i+1] + sz = domain_size(op)[derivative_direction(op)] + stencil = op.closure_stencils[sz-i+1] return @inbounds apply_stencil_backwards(stencil, c̃, ṽ, i) end @@ -128,6 +128,7 @@ function LazyTensors.apply(op::SecondDerivativeVariable, v::AbstractArray, I...) dir = derivative_direction(op) + sz = domain_size(op)[dir] i = I[dir] @@ -135,10 +136,10 @@ if 0 < i <= closure_size(op) I = Base.setindex(I, Index(i, Lower), dir) return LazyTensors.apply(op, v, I...) - elseif closure_size(op) < i <= op.size[dir]-closure_size(op) + elseif closure_size(op) < i <= sz-closure_size(op) I = Base.setindex(I, Index(i, Interior), dir) return LazyTensors.apply(op, v, I...) - elseif op.size[dir]-closure_size(op) < i <= op.size[dir] + elseif sz-closure_size(op) < i <= sz I = Base.setindex(I, Index(i, Upper), dir) return LazyTensors.apply(op, v, I...) else @@ -170,7 +171,8 @@ ṽ = @view v[:,j] c̃ = @view op.coefficient[:,j] - stencil = op.closure_stencils[op.size[derivative_direction(op)]-i+1] + sz = domain_size(op)[derivative_direction(op)] + stencil = op.closure_stencils[sz-i+1] return @inbounds apply_stencil_backwards(stencil, c̃, ṽ, i) end @@ -194,6 +196,7 @@ ṽ = @view v[i,:] c̃ = @view op.coefficient[i,:] - stencil = op.closure_stencils[op.size[derivative_direction(op)]-j+1] + sz = domain_size(op)[derivative_direction(op)] + stencil = op.closure_stencils[sz-j+1] return @inbounds apply_stencil_backwards(stencil, c̃, ṽ, j) end