Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/readoperator.jl @ 767:210d3f58bd56 operator_storage_array_of_table
Make signature of read_stencil_set conform to signature of get_stencil_set
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 14 Jul 2021 23:22:34 +0200 |
parents | 7624a1350ece |
children | 7c87a33963c5 |
rev | line source |
---|---|
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
1 using TOML |
601
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
2 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
3 export read_stencil_set |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
4 export get_stencil_set |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
5 |
766 | 6 export parse_stencil |
7 | |
601
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
8 export read_D2_operator |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
9 export read_stencil |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
10 export read_stencils |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
11 export read_tuple |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
12 |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
13 export get_stencil |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
14 export get_stencils |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
15 export get_tuple |
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
16 |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
17 function read_D2_operator(fn; order) |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
18 operators = TOML.parsefile(fn)["order$order"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
19 D2 = operators["D2"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
20 H = operators["H"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
21 e = operators["e"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
22 d1 = operators["d1"] |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
23 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
24 # Create inner stencil |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
25 innerStencil = get_stencil(operators, "D2", "inner_stencil") |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
26 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
27 # Create boundary stencils |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
28 boundarySize = length(D2["closure_stencils"]) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
29 closureStencils = Vector{typeof(innerStencil)}() # TBD: is the the right way to get the correct type? |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
30 for i ∈ 1:boundarySize |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
31 closureStencils = (closureStencils..., get_stencil(operators, "D2", "closure_stencils", i; center=i)) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
32 end |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
33 # TODO: Get rid of the padding here. Any padding should be handled by the consturctor accepting the stencils. |
671
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
34 eClosure = Stencil(pad_tuple(toml_string_array_to_tuple(Float64, e["closure"]), boundarySize)..., center=1) |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
35 dClosure = Stencil(pad_tuple(toml_string_array_to_tuple(Float64, d1["closure"]), boundarySize)..., center=1) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
36 |
637
4a81812150f4
Change qudrature closure from tuple of reals to tuple of Stencils. Also remove parametrization of stencil width in D2 since this was illformed for the 2nd order case.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
609
diff
changeset
|
37 q_tuple = pad_tuple(toml_string_array_to_tuple(Float64, H["closure"]), boundarySize) |
4a81812150f4
Change qudrature closure from tuple of reals to tuple of Stencils. Also remove parametrization of stencil width in D2 since this was illformed for the 2nd order case.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
609
diff
changeset
|
38 quadratureClosure = Vector{typeof(innerStencil)}() |
4a81812150f4
Change qudrature closure from tuple of reals to tuple of Stencils. Also remove parametrization of stencil width in D2 since this was illformed for the 2nd order case.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
609
diff
changeset
|
39 for i ∈ 1:boundarySize |
671
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
40 quadratureClosure = (quadratureClosure..., Stencil(q_tuple[i], center=1)) |
637
4a81812150f4
Change qudrature closure from tuple of reals to tuple of Stencils. Also remove parametrization of stencil width in D2 since this was illformed for the 2nd order case.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
609
diff
changeset
|
41 end |
4a81812150f4
Change qudrature closure from tuple of reals to tuple of Stencils. Also remove parametrization of stencil width in D2 since this was illformed for the 2nd order case.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
609
diff
changeset
|
42 |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
43 d2 = SbpOperators.D2( |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
44 innerStencil, |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
45 closureStencils, |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
46 eClosure, |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
47 dClosure, |
637
4a81812150f4
Change qudrature closure from tuple of reals to tuple of Stencils. Also remove parametrization of stencil width in D2 since this was illformed for the 2nd order case.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
609
diff
changeset
|
48 quadratureClosure, |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
49 even |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
50 ) |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
51 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
52 return d2 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
53 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
54 |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
55 """ |
767
210d3f58bd56
Make signature of read_stencil_set conform to signature of get_stencil_set
Jonatan Werpers <jonatan@werpers.com>
parents:
766
diff
changeset
|
56 read_stencil_set(fn; filters) |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
57 |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
58 Picks out a stencil set from the given toml file based on some filters. |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
59 If more than one set matches the filters an error is raised. |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
60 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
61 The stencil set is not parsed beyond the inital toml parse. To get usable |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
62 stencils use the `parse_stencil` functions on the fields of the stencil set. |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
63 """ |
767
210d3f58bd56
Make signature of read_stencil_set conform to signature of get_stencil_set
Jonatan Werpers <jonatan@werpers.com>
parents:
766
diff
changeset
|
64 read_stencil_set(fn; filters...) = get_stencil_set(TOML.parsefile(fn), filters...) |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
65 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
66 """ |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
67 get_stencil_set(parsed_toml; filters...) |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
68 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
69 Same as `read_stencil_set` but works on already parsed TOML. |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
70 """ |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
71 function get_stencil_set(parsed_toml; filters...) |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
72 matches = findall(parsed_toml["stencil_set"]) do set |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
73 for (key, val) ∈ filters |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
74 if set[string(key)] != val |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
75 return false |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
76 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
77 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
78 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
79 return true |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
80 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
81 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
82 if length(matches) != 1 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
83 throw(ArgumentError("filters must pick out a single stencil set")) |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
84 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
85 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
86 i = matches[1] |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
87 return parsed_toml["stencil_set"][i] |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
88 end |
597
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
89 |
766 | 90 function parse_stencil(toml) |
91 check_stencil_toml(toml) | |
92 | |
93 if toml isa Array | |
94 weights = Float64.(parse_rational.(toml)) | |
95 return CenteredStencil(weights...) | |
96 end | |
97 | |
98 weights = Float64.(parse_rational.(toml["s"])) | |
99 return Stencil(weights..., center = toml["c"]) | |
100 end | |
101 | |
102 function check_stencil_toml(toml) | |
103 if !(toml isa Dict || toml isa Vector{String}) | |
104 throw(ArgumentError("the TOML for a stecil must be a vector of strings or a table.")) | |
105 end | |
106 | |
107 if toml isa Vector{String} | |
108 return | |
109 end | |
110 | |
111 if !(haskey(toml, "s") && haskey(toml, "c")) | |
112 throw(ArgumentError("the table form of a stencil must have fields `s` and `c`.")) | |
113 end | |
114 | |
115 if !(toml["s"] isa Vector{String}) | |
116 throw(ArgumentError("a stencil must be specified as a vector of strings.")) | |
117 end | |
118 | |
119 if !(toml["c"] isa Int) | |
120 throw(ArgumentError("the center of a stencil must be specified as an integer.")) | |
121 end | |
122 end | |
123 | |
597
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
124 """ |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
125 read_stencil(fn, path...; [center]) |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
126 |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
127 Read a stencil at `path` from the file with name `fn`. |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
128 If a center is specified the given element of the stecil is set as the center. |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
129 |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
130 See also: [`read_stencils`](@ref), [`read_tuple`](@ref), [`get_stencil`](@ref). |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
131 |
597
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
132 # Examples |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
133 ``` |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
134 read_stencil(sbp_operators_path()*"standard_diagonal.toml", "order2", "D2", "inner_stencil") |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
135 read_stencil(sbp_operators_path()*"standard_diagonal.toml", "order2", "d1", "closure"; center=1) |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
136 ``` |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
137 """ |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
138 read_stencil(fn, path...; center=nothing) = get_stencil(TOML.parsefile(fn), path...; center=center) |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
139 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
140 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
141 read_stencils(fn, path...; centers) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
142 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
143 Read stencils at `path` from the file `fn`. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
144 Centers of the stencils are specified as a tuple or array in `centers`. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
145 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
146 See also: [`read_stencil`](@ref), [`read_tuple`](@ref), [`get_stencils`](@ref). |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
147 """ |
608 | 148 read_stencils(fn, path...; centers) = get_stencils(TOML.parsefile(fn), path...; centers=centers) |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
149 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
150 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
151 read_tuple(fn, path...) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
152 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
153 Read tuple at `path` from the file `fn`. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
154 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
155 See also: [`read_stencil`](@ref), [`read_stencils`](@ref), [`get_tuple`](@ref). |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
156 """ |
600
dd7056869294
Fix a couple of types
Jonatan Werpers <jonatan@werpers.com>
parents:
599
diff
changeset
|
157 read_tuple(fn, path...) = get_tuple(TOML.parsefile(fn), path...) |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
158 |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
159 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
160 get_stencil(parsed_toml, path...; center=nothing) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
161 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
162 Same as [`read_stencil`](@ref)) but takes already parsed toml. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
163 """ |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
164 get_stencil(parsed_toml, path...; center=nothing) = get_stencil(parsed_toml[path[1]], path[2:end]...; center=center) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
165 function get_stencil(parsed_toml; center=nothing) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
166 @assert parsed_toml isa Vector{String} |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
167 stencil_weights = Float64.(parse_rational.(parsed_toml)) |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
168 |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
169 width = length(stencil_weights) |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
170 |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
171 if isnothing(center) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
172 center = div(width,2)+1 |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
173 end |
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
174 |
671
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
175 return Stencil(stencil_weights..., center=center) |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
176 end |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
177 |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
178 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
179 get_stencils(parsed_toml, path...; centers) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
180 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
181 Same as [`read_stencils`](@ref)) but takes already parsed toml. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
182 """ |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
183 get_stencils(parsed_toml, path...; centers) = get_stencils(parsed_toml[path[1]], path[2:end]...; centers=centers) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
184 function get_stencils(parsed_toml; centers) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
185 @assert parsed_toml isa Vector{Vector{String}} |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
186 @assert length(centers) == length(parsed_toml) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
187 |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
188 stencils = () |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
189 for i ∈ 1:length(parsed_toml) |
600
dd7056869294
Fix a couple of types
Jonatan Werpers <jonatan@werpers.com>
parents:
599
diff
changeset
|
190 stencil = get_stencil(parsed_toml[i], center = centers[i]) |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
191 stencils = (stencils..., stencil) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
192 end |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
193 |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
194 return stencils |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
195 end |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
196 |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
197 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
198 get_tuple(parsed_toml, path...) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
199 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
200 Same as [`read_tuple`](@ref)) but takes already parsed toml. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
201 """ |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
202 get_tuple(parsed_toml, path...) = get_tuple(parsed_toml[path[1]], path[2:end]...) |
602
c2239c7cd71e
Fix another typo in get_tuple signature
Jonatan Werpers <jonatan@werpers.com>
parents:
601
diff
changeset
|
203 function get_tuple(parsed_toml) |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
204 @assert parsed_toml isa Vector{String} |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
205 t = Tuple(Float64.(parse_rational.(parsed_toml))) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
206 return t |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
207 end |
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
208 |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
209 function get_rationals() |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
210 end |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
211 |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
212 # TODO: Probably should be deleted once we have gotten rid of read_D2_operator() |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
213 function toml_string_array_to_tuple(::Type{T}, arr::AbstractVector{String}) where T |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
214 return Tuple(T.(parse_rational.(arr))) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
215 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
216 |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
217 function parse_rational(str) |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
218 expr = Meta.parse(replace(str, "/"=>"//")) |
603
fbff4009c08a
Add tests for parse_rational()
Jonatan Werpers <jonatan@werpers.com>
parents:
602
diff
changeset
|
219 return eval(:(Rational($expr))) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
220 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
221 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
222 function pad_tuple(t::NTuple{N, T}, n::Integer) where {N,T} |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
223 if N >= n |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
224 return t |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
225 else |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
226 return pad_tuple((t..., zero(T)), n) |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
227 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
228 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
229 |
340
29df39a7b568
readoperator.jl: Fix path to operators
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
230 sbp_operators_path() = (@__DIR__) * "/operators/" |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
231 export sbp_operators_path |