comparison src/SbpOperators/laplace/secondderivative.jl @ 380:81053b1992b6

Remove parity field from Secondderivative
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 30 Sep 2020 21:35:10 +0200
parents e73af120ad38
children dacbcba33d7d
comparison
equal deleted inserted replaced
379:de4746d6d126 380:81053b1992b6
6 6
7 struct SecondDerivative{T,N,M,K} <: TensorMapping{T,1,1} 7 struct SecondDerivative{T,N,M,K} <: TensorMapping{T,1,1}
8 h_inv::T # The grid spacing could be included in the stencil already. Preferable? 8 h_inv::T # The grid spacing could be included in the stencil already. Preferable?
9 innerStencil::Stencil{T,N} 9 innerStencil::Stencil{T,N}
10 closureStencils::NTuple{M,Stencil{T,K}} 10 closureStencils::NTuple{M,Stencil{T,K}}
11 parity::Parity
12 size::NTuple{1,Int} 11 size::NTuple{1,Int}
13 end 12 end
14 export SecondDerivative 13 export SecondDerivative
15 14
16 function SecondDerivative(grid::EquidistantGrid{1}, innerStencil, closureStencils) 15 function SecondDerivative(grid::EquidistantGrid{1}, innerStencil, closureStencils)
17 h_inv = grid.inverse_spacing[1] 16 h_inv = grid.inverse_spacing[1]
18 return SecondDerivative(h_inv, innerStencil, closureStencils, even, size(grid)) 17 return SecondDerivative(h_inv, innerStencil, closureStencils, size(grid))
19 end 18 end
20 19
21 LazyTensors.range_size(D2::SecondDerivative) = D2.size 20 LazyTensors.range_size(D2::SecondDerivative) = D2.size
22 LazyTensors.domain_size(D2::SecondDerivative) = D2.size 21 LazyTensors.domain_size(D2::SecondDerivative) = D2.size
23 22
34 return @inbounds D2.h_inv*D2.h_inv*apply_stencil(D2.innerStencil, v, Int(I)) 33 return @inbounds D2.h_inv*D2.h_inv*apply_stencil(D2.innerStencil, v, Int(I))
35 end 34 end
36 35
37 function LazyTensors.apply(D2::SecondDerivative{T}, v::AbstractVector{T}, I::Index{Upper}) where T 36 function LazyTensors.apply(D2::SecondDerivative{T}, v::AbstractVector{T}, I::Index{Upper}) where T
38 N = length(v) # TODO: Use domain_size here instead? N = domain_size(D2,size(v)) 37 N = length(v) # TODO: Use domain_size here instead? N = domain_size(D2,size(v))
39 return @inbounds D2.h_inv*D2.h_inv*Int(D2.parity)*apply_stencil_backwards(D2.closureStencils[N-Int(I)+1], v, Int(I)) 38 return @inbounds D2.h_inv*D2.h_inv*apply_stencil_backwards(D2.closureStencils[N-Int(I)+1], v, Int(I))
40 end 39 end
41 40
42 function LazyTensors.apply(D2::SecondDerivative{T}, v::AbstractVector{T}, index::Index{Unknown}) where T 41 function LazyTensors.apply(D2::SecondDerivative{T}, v::AbstractVector{T}, index::Index{Unknown}) where T
43 N = length(v) # TODO: Use domain_size here instead? 42 N = length(v) # TODO: Use domain_size here instead?
44 r = getregion(Int(index), closuresize(D2), N) 43 r = getregion(Int(index), closuresize(D2), N)