comparison 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
comparison
equal deleted inserted replaced
33:e8d7137b3f07 34:bb841977d198
1 struct D2{T} 1 abstract type ConstantStencilOperator end
2
3 function apply!(op::ConstantStencilOperator, u::AbstractVector, v::AbstractVector, h::Real, start::Int, N::Int; stride::Int=1)
4 cSize = closureSize(op)
5
6 for i ∈ range(start; length=cSize, step=stride)
7 u[i] = apply!(op.closureStencils[i], v, i; stride=stride)/h^2
8 end
9
10 innerStart = start + cSize*stride
11 innerEnd = N - cSize*stride-1
12 for i ∈ range(innerStart, stop=innerEnd, step=stride)
13 u[i] = apply(op.innerStencil, v, i; stride=stride)/h^2
14 end
15
16 for i ∈ range(innerEnd+1, length=cSize, step=cSize)
17 u[i] = op.parity*apply(flip(op.closureStencils[M-i+1]), v, i; stride=stride)/h^2
18 end
19 end
20
21 odd = -1
22 even = 1
23
24 struct D2{T} <: ConstantStencilOperator
2 quadratureClosure::Vector{T} 25 quadratureClosure::Vector{T}
3 innerStencil::Stencil 26 innerStencil::Stencil
4 closureStencils::Vector{Stencil} # TBD: Should this be a tuple? 27 closureStencils::Vector{Stencil} # TBD: Should this be a tuple?
5 eClosure::Vector{T} 28 eClosure::Vector{T}
6 dClosure::Vector{T} 29 dClosure::Vector{T}
30 parity::Int
7 end 31 end
8 32
9 function closureSize(D::D2)::Int 33 function closureSize(D::D2)::Int
10 return length(quadratureClosure) 34 return length(quadratureClosure)
11 end 35 end
32 stringToVector(Float64, h["closure"]), 56 stringToVector(Float64, h["closure"]),
33 innerStencil, 57 innerStencil,
34 closureStencils, 58 closureStencils,
35 stringToVector(Float64, d["e"]), 59 stringToVector(Float64, d["e"]),
36 stringToVector(Float64, d["d1"]), 60 stringToVector(Float64, d["d1"]),
61 even
37 ) 62 )
38 63
39 # Return d2! 64 # Return d2!
40 65
41 return nothing 66 return nothing