annotate sbpD2.jl @ 170:6ba2238a9687 boundary_conditions

Avoid division in apply_d
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 21 May 2019 14:40:07 +0200
parents 6b6d921e8f05
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
1 abstract type ConstantStencilOperator end
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
2
98
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
3 # Apply for different regions Lower/Interior/Upper or Unknown region
97
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
4 @inline function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, i::Index{Lower})
129
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 122
diff changeset
5 return @inbounds h*h*apply(op.closureStencils[Int(i)], v, Int(i))
97
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
6 end
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
7
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
8 @inline function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, i::Index{Interior})
129
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 122
diff changeset
9 return @inbounds h*h*apply(op.innerStencil, v, Int(i))
97
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
10 end
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
11
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
12 @inline function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, i::Index{Upper})
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
13 N = length(v)
129
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 122
diff changeset
14 return @inbounds h*h*Int(op.parity)*apply_backwards(op.closureStencils[N-Int(i)+1], v, Int(i))
97
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
15 end
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
16
98
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
17 @inline function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, index::Index{Unknown})
34
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
18 cSize = closureSize(op)
56
27a8d3021a1c Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents: 47
diff changeset
19 N = length(v)
34
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
20
98
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
21 i = Int(index)
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
22
97
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
23 if 0 < i <= cSize
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
24 return apply(op, h, v, Index{Lower}(i))
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
25 elseif cSize < i <= N-cSize
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
26 return apply(op, h, v, Index{Interior}(i))
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
27 elseif N-cSize < i <= N
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
28 return apply(op, h, v, Index{Upper}(i))
56
27a8d3021a1c Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents: 47
diff changeset
29 else
97
8324c82c2dfb Make D2 support sbp.Index and specification of region
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
30 error("Bounds error") # TODO: Make this more standard
34
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
31 end
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
32 end
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
33
127
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
34
98
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
35 # Wrapper functions for using regular indecies without specifying regions
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
36 @inline function apply(op::ConstantStencilOperator, h::Real, v::AbstractVector, i::Int)
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
37 return apply(op, h, v, Index{Unknown}(i))
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
38 end
50273f745f05 Add "Unknown" region and implement D2 for it
Jonatan Werpers <jonatan@werpers.com>
parents: 97
diff changeset
39
47
8c4cfa680e5a Use enum for parity
Jonatan Werpers <jonatan@werpers.com>
parents: 43
diff changeset
40 @enum Parity begin
8c4cfa680e5a Use enum for parity
Jonatan Werpers <jonatan@werpers.com>
parents: 43
diff changeset
41 odd = -1
8c4cfa680e5a Use enum for parity
Jonatan Werpers <jonatan@werpers.com>
parents: 43
diff changeset
42 even = 1
8c4cfa680e5a Use enum for parity
Jonatan Werpers <jonatan@werpers.com>
parents: 43
diff changeset
43 end
34
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
44
84
48079bd39969 Change to using tuples in stencils and ops
Jonatan Werpers <jonatan@werpers.com>
parents: 47
diff changeset
45 struct D2{T,N,M,K} <: ConstantStencilOperator
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
46 quadratureClosure::NTuple{M,T}
84
48079bd39969 Change to using tuples in stencils and ops
Jonatan Werpers <jonatan@werpers.com>
parents: 47
diff changeset
47 innerStencil::Stencil{T,N}
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
48 closureStencils::NTuple{M,Stencil{T,K}}
127
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
49 eClosure::Stencil{T,M}
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
50 dClosure::Stencil{T,M}
47
8c4cfa680e5a Use enum for parity
Jonatan Werpers <jonatan@werpers.com>
parents: 43
diff changeset
51 parity::Parity
1
a286be5f8a32 Add type to sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
52 end
2
43be32298ae2 Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
53
43be32298ae2 Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
54 function closureSize(D::D2)::Int
43
ef060ab3b035 remove stride and remove some bugs
Ylva Rydin <ylva.rydin@telia.com>
parents: 40
diff changeset
55 return length(D.quadratureClosure)
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
56 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
57
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
58 function readOperator(D2fn, Hfn)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
59 d = readSectionedFile(D2fn)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
60 h = readSectionedFile(Hfn)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
61
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
62 # Create inner stencil
100
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
63 innerStencilWeights = stringToTuple(Float64, d["inner_stencil"][1])
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
64 width = length(innerStencilWeights)
35
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
65 r = (-div(width,2), div(width,2))
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
66
100
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
67 innerStencil = Stencil(r, innerStencilWeights)
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
68
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
69 # Create boundary stencils
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
70 boundarySize = length(d["boundary_stencils"])
68
d485da6e3a77 Make D2 more type stable
Jonatan Werpers <jonatan@werpers.com>
parents: 56
diff changeset
71 closureStencils = Vector{typeof(innerStencil)}() # TBD: is the the right way to get the correct type?
35
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
72
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
73 for i ∈ 1:boundarySize
100
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
74 stencilWeights = stringToTuple(Float64, d["boundary_stencils"][i])
35
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
75 width = length(stencilWeights)
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
76 r = (1-i,width-i)
100
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
77 closureStencils = (closureStencils..., Stencil(r, stencilWeights))
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
78 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
79
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
80 quadratureClosure = pad_tuple(stringToTuple(Float64, h["closure"][1]), boundarySize)
127
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
81 eClosure = Stencil((0,boundarySize-1), pad_tuple(stringToTuple(Float64, d["e"][1]), boundarySize))
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
82 dClosure = Stencil((0,boundarySize-1), pad_tuple(stringToTuple(Float64, d["d1"][1]), boundarySize))
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
83
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
84 d2 = D2(
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
85 quadratureClosure,
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
86 innerStencil,
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
87 closureStencils,
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
88 eClosure,
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
89 dClosure,
34
bb841977d198 Move stencil operator application to its own function
Jonatan Werpers <jonatan@werpers.com>
parents: 24
diff changeset
90 even
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
91 )
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
92
35
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
93 return d2
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
94 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
95
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
96
127
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
97 function apply_e(op::D2, v::AbstractVector, ::Type{Lower})
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
98 apply(op.eClosure,v,1)
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
99 end
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
100
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
101 function apply_e(op::D2, v::AbstractVector, ::Type{Upper})
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
102 apply(flip(op.eClosure),v,length(v))
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
103 end
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
104
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
105
170
6ba2238a9687 Avoid division in apply_d
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
106 function apply_d(op::D2, h_inv::Real, v::AbstractVector, ::Type{Lower})
6ba2238a9687 Avoid division in apply_d
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
107 -h_inv*apply(op.dClosure,v,1)
127
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
108 end
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
109
170
6ba2238a9687 Avoid division in apply_d
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
110 function apply_d(op::D2, h_inv::Real, v::AbstractVector, ::Type{Upper})
6ba2238a9687 Avoid division in apply_d
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
111 -h_inv*apply(flip(op.dClosure),v,length(v))
127
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
112 end
f01b70b81e95 Change Type of dClosure and dClosure to stencil.
Ylva Rydin <ylva.rydin@telia.com>
parents: 101
diff changeset
113
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
114 function readSectionedFile(filename)::Dict{String, Vector{String}}
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
115 f = open(filename)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
116 sections = Dict{String, Vector{String}}()
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
117 currentKey = ""
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
118
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
119 for ln ∈ eachline(f)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
120 if ln == "" || ln[1] == '#' # Skip comments and empty lines
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
121 continue
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
122 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
123
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
124 if isletter(ln[1]) # Found start of new section
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
125 if ~haskey(sections, ln)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
126 sections[ln] = Vector{String}()
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
127 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
128 currentKey = ln
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
129 continue
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
130 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
131
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
132 push!(sections[currentKey], ln)
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
133 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
134
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
135 return sections
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
136 end
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
137
100
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
138 function stringToTuple(T::DataType, s::String)
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
139 return Tuple(stringToVector(T,s))
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
140 end
49796ca2dfa0 Introduce and use the function stringToTuple in sbpD2.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 98
diff changeset
141
35
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
142 function stringToVector(T::DataType, s::String)
91e662512e9a Fix bugs in sbpD2
Ylva Rydin <ylva.rydin@telia.com>
parents: 24
diff changeset
143 return T.(eval.(Meta.parse.(split(s))))
24
55fea1ceb6aa Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents: 8
diff changeset
144 end
101
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
145
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
146
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
147 function pad_tuple(t::NTuple{N, T}, n::Integer) where {N,T}
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
148 if N >= n
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
149 return t
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
150 else
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
151 return pad_tuple((t..., zero(T)), n)
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
152 end
19031733bbbf Convert D2 to only use tuples
Jonatan Werpers <jonatan@werpers.com>
parents: 100
diff changeset
153 end