Mercurial > repos > public > sbplib_julia
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 |