Mercurial > repos > public > sbplib_julia
diff sbpD2.jl @ 34:bb841977d198
Move stencil operator application to its own function
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 10 Jan 2019 15:49:44 +0100 |
parents | 55fea1ceb6aa |
children | 8b04efde1a46 |
line wrap: on
line diff
--- a/sbpD2.jl Thu Jan 10 14:46:15 2019 +0100 +++ b/sbpD2.jl Thu Jan 10 15:49:44 2019 +0100 @@ -1,9 +1,33 @@ -struct D2{T} +abstract type ConstantStencilOperator end + +function apply!(op::ConstantStencilOperator, u::AbstractVector, v::AbstractVector, h::Real, start::Int, N::Int; stride::Int=1) + cSize = closureSize(op) + + for i ∈ range(start; length=cSize, step=stride) + u[i] = apply!(op.closureStencils[i], v, i; stride=stride)/h^2 + end + + innerStart = start + cSize*stride + innerEnd = N - cSize*stride-1 + for i ∈ range(innerStart, stop=innerEnd, step=stride) + u[i] = apply(op.innerStencil, v, i; stride=stride)/h^2 + end + + for i ∈ range(innerEnd+1, length=cSize, step=cSize) + u[i] = op.parity*apply(flip(op.closureStencils[M-i+1]), v, i; stride=stride)/h^2 + end +end + +odd = -1 +even = 1 + +struct D2{T} <: ConstantStencilOperator quadratureClosure::Vector{T} innerStencil::Stencil closureStencils::Vector{Stencil} # TBD: Should this be a tuple? eClosure::Vector{T} dClosure::Vector{T} + parity::Int end function closureSize(D::D2)::Int @@ -34,6 +58,7 @@ closureStencils, stringToVector(Float64, d["e"]), stringToVector(Float64, d["d1"]), + even ) # Return d2!