annotate sbpD2.jl @ 4:ef878a3df87d

Use stencils in D2
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 17 Dec 2018 13:05:16 +0100
parents 19492ab142c3
children 2737156fb884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b714e341a0ba Starting julia project
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1
1
a286be5f8a32 Add type to sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
2 struct D2{T}
a286be5f8a32 Add type to sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
3 quadratureClosure::Vector{T}
4
ef878a3df87d Use stencils in D2
Jonatan Werpers <jonatan@werpers.com>
parents: 3
diff changeset
4 innerStencil::Stencil
ef878a3df87d Use stencils in D2
Jonatan Werpers <jonatan@werpers.com>
parents: 3
diff changeset
5 closureStencils::Vector{Stencil} # TBD: Should this be a tuple?
1
a286be5f8a32 Add type to sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
6 eClosure::Vector{T}
a286be5f8a32 Add type to sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
7 dClosure::Vector{T}
a286be5f8a32 Add type to sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
8 end
2
43be32298ae2 Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
9
43be32298ae2 Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
10 function closureSize(D::D2)::Int
43be32298ae2 Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
11 return length(quadratureClosure)
43be32298ae2 Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
12 end
3
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
13
4
ef878a3df87d Use stencils in D2
Jonatan Werpers <jonatan@werpers.com>
parents: 3
diff changeset
14 struct Stencil{T}
3
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
15 range::NTuple{2,Int}
4
ef878a3df87d Use stencils in D2
Jonatan Werpers <jonatan@werpers.com>
parents: 3
diff changeset
16 weights::Vector{T} # TBD: Should this be a tuple?
3
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
17 function Stencil(range, weights)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
18 width = range[2]-range[1]+1
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
19 if width != length(weights)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
20 error("The width and the number of weights must be the same")
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
21 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
22 new(range, weights)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
23 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
24 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
25
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
26 # Provides index into the Stencil based on offset for the root element
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
27 function Base.getindex(s::Stencil, i::Int)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
28 if s.range[1] <= i <= s.range[2]
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
29 return s.weights[1 + i - s.range[1]]
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
30 else
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
31 return 0
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
32 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
33 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
34
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
35 function apply(s::Stencil, v::AbstractVector, i::Int)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
36 w = zero(v[0])
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
37 for j ∈ i+(s.range[1]:s.range[2])
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
38 w += v[j]
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
39 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
40 return w
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
41 end