annotate sbpD2.jl @ 6:cb8e50ca9e15

Add attempt att apply methods for Laplace
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 17 Dec 2018 14:18:22 +0100
parents 2737156fb884
children 433008d3b7d3
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
5
2737156fb884 Add flip method for stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 4
diff changeset
26 function flip(s::Stencil)
2737156fb884 Add flip method for stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 4
diff changeset
27 range = (-s.range[2], -s.range[1])
2737156fb884 Add flip method for stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 4
diff changeset
28 s = Stencil(range, s.weights(end:-1:1))
2737156fb884 Add flip method for stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 4
diff changeset
29 end
2737156fb884 Add flip method for stencils
Jonatan Werpers <jonatan@werpers.com>
parents: 4
diff changeset
30
3
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
31 # 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
32 function Base.getindex(s::Stencil, i::Int)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
33 if s.range[1] <= i <= s.range[2]
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
34 return s.weights[1 + i - s.range[1]]
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
35 else
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
36 return 0
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
37 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
38 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
39
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
40 function apply(s::Stencil, v::AbstractVector, i::Int)
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
41 w = zero(v[0])
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
42 for j ∈ i+(s.range[1]:s.range[2])
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
43 w += v[j]
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
44 end
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
45 return w
19492ab142c3 Add 1d stencil type
Jonatan Werpers <jonatan@werpers.com>
parents: 2
diff changeset
46 end