Mercurial > repos > public > sbplib_julia
annotate sbpD2.jl @ 24:55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 10 Jan 2019 10:12:11 +0100 |
parents | 433008d3b7d3 |
children | bb841977d198 91e662512e9a |
rev | line source |
---|---|
1 | 1 struct D2{T} |
2 quadratureClosure::Vector{T} | |
4 | 3 innerStencil::Stencil |
4 closureStencils::Vector{Stencil} # TBD: Should this be a tuple? | |
1 | 5 eClosure::Vector{T} |
6 dClosure::Vector{T} | |
7 end | |
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
1
diff
changeset
|
8 |
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
1
diff
changeset
|
9 function closureSize(D::D2)::Int |
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
1
diff
changeset
|
10 return length(quadratureClosure) |
24
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
11 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
12 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
13 function readOperator(D2fn, Hfn) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
14 d = readSectionedFile(D2fn) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
15 h = readSectionedFile(Hfn) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
16 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
17 # Create inner stencil |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
18 innerStencilWeights = stringToVector(Float64, d["inner_stencil"]) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
19 width = length(innerStencilWeights) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
20 r = (-width//2, width//2) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
21 innerStencil = Stencil(r, innerStencilWeights) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
22 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
23 # Create boundary stencils |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
24 boundarySize = length(d["boundary_stencils"]) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
25 closureStencils = Vector{Stencil}() |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
26 for i ∈ 1:boundarySize |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
27 stencilWeights = stringToVector(Float64, d["boundary_stencils"][i]) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
28 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
29 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
30 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
31 d2 = D2( |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
32 stringToVector(Float64, h["closure"]), |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
33 innerStencil, |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
34 closureStencils, |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
35 stringToVector(Float64, d["e"]), |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
36 stringToVector(Float64, d["d1"]), |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
37 ) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
38 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
39 # Return d2! |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
40 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
41 return nothing |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
42 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
43 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
44 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
45 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
|
46 f = open(filename) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
47 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
|
48 currentKey = "" |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
49 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
50 for ln ∈ eachline(f) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
51 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
|
52 continue |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
53 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
54 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
55 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
|
56 if ~haskey(sections, ln) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
57 sections[ln] = Vector{String}() |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
58 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
59 currentKey = ln |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
60 continue |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
61 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
62 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
63 push!(sections[currentKey], ln) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
64 end |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
65 |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
66 return sections |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
67 end |
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 function stringToVector(T::DataType, s::String; delimiter = " ") |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
70 return parse(T, split(s, delimiter)) |
55fea1ceb6aa
Start implementing reading 1D operator stencils from file into struct
Jonatan Werpers <jonatan@werpers.com>
parents:
8
diff
changeset
|
71 end |