comparison sbpD2.jl @ 72:4640839b1616 cell_based_test

Make apply operator more efficient using @inbounds and @inline
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 18 Jan 2019 14:26:04 +0100
parents d485da6e3a77
children b795ec7f9ca0
comparison
equal deleted inserted replaced
71:18d0d794d3bb 72:4640839b1616
1 abstract type ConstantStencilOperator end 1 abstract type ConstantStencilOperator end
2 2
3 function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, i::Int) 3 @inline function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, i::Int)
4 cSize = closureSize(op) 4 cSize = closureSize(op)
5 N = length(v) 5 N = length(v)
6 6
7 if i ∈ range(1; length=cSize) 7 if i ∈ range(1; length=cSize)
8 uᵢ = apply(op.closureStencils[i], v, i)/h^2 8 @inbounds uᵢ = apply(op.closureStencils[i], v, i)/h^2
9 elseif i ∈ range(N - cSize+1, length=cSize) 9 elseif i ∈ range(N - cSize+1, length=cSize)
10 uᵢ = Int(op.parity)*apply(flip(op.closureStencils[N-i+1]), v, i)/h^2 10 @inbounds uᵢ = Int(op.parity)*apply(flip(op.closureStencils[N-i+1]), v, i)/h^2
11 else 11 else
12 uᵢ = apply(op.innerStencil, v, i)/h^2 12 @inbounds uᵢ = apply(op.innerStencil, v, i)/h^2
13 end 13 end
14 14
15 return uᵢ 15 return uᵢ
16 end 16 end
17 17