comparison SbpOperators/src/laplace/secondderivative.jl @ 299:27a0bca5e1f2

Add apply_transpose and fix minor issues
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 23 Jun 2020 17:31:50 +0200
parents f63232aeb1c6
children f2d6ec89dfc5
comparison
equal deleted inserted replaced
298:a0ec3cb6a65b 299:27a0bca5e1f2
16 even = 1 16 even = 1
17 end 17 end
18 18
19 LazyTensors.domain_size(D2::SecondDerivative, range_size::NTuple{1,Integer}) = range_size 19 LazyTensors.domain_size(D2::SecondDerivative, range_size::NTuple{1,Integer}) = range_size
20 20
21 function LazyTensors.apply(D2::SecondDerivative{T}, v::AbstractVector{T}, I::NTuple{1,Index}) where T 21 @inline function LazyTensors.apply(D2::SecondDerivative{T}, v::AbstractVector{T}, I::NTuple{1,Index}) where T
22 return apply(D2, v, I[1]) 22 return @inbounds apply(D2, v, I[1])
23 end 23 end
24
25 function LazyTensors.apply_transpose(D2::SecondDerivative{T}, v::AbstractVector{T}, I::NTuple{1,Index}) where T = LazyTensors.apply(D2, v, I)
24 26
25 # Apply for different regions Lower/Interior/Upper or Unknown region 27 # Apply for different regions Lower/Interior/Upper or Unknown region
26 @inline function LazyTensors.apply(D2::SecondDerivative, v::AbstractVector, i::Index{Lower}) 28 @inline function LazyTensors.apply(D2::SecondDerivative, v::AbstractVector, i::Index{Lower})
27 return @inbounds D2.h_inv*D2.h_inv*apply_stencil(D2.closureStencils[Int(i)], v, Int(i)) 29 return @inbounds D2.h_inv*D2.h_inv*apply_stencil(D2.closureStencils[Int(i)], v, Int(i))
28 end 30 end
41 r = getregion(Int(index), closuresize(L), N) 43 r = getregion(Int(index), closuresize(L), N)
42 i = Index(Int(index), r) 44 i = Index(Int(index), r)
43 return apply(D2, v, i) 45 return apply(D2, v, i)
44 end 46 end
45 47
46 function closuresize(D2::SecondDerivative{T<:Real,N,M,K}) where T,N,M,K 48 function closuresize(D2::SecondDerivative{T<:Real,N,M,K}) where {T,N,M,K}
47 return M 49 return M
48 end 50 end