Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/readoperator.jl @ 764:d34b515b0ae7 operator_storage_array_of_table
Add functions for reading stencil sets
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sat, 06 Feb 2021 20:45:34 +0100 |
parents | ec7490fb4404 |
children | fdd48f6ace1c |
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 |
601
b05f542b2e8f
Export relevant functions and move export of read_D2_operator to readoperator.jl
Jonatan Werpers <jonatan@werpers.com>
parents:
600
diff
changeset
|
6 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
|
7 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
|
8 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
|
9 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
|
10 |
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 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
|
12 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
|
13 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
|
14 |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
15 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
|
16 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
|
17 D2 = operators["D2"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
18 H = operators["H"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
19 e = operators["e"] |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
20 d1 = operators["d1"] |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
21 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
22 # Create inner stencil |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
23 innerStencil = get_stencil(operators, "D2", "inner_stencil") |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
24 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
25 # Create boundary stencils |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
26 boundarySize = length(D2["closure_stencils"]) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
27 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
|
28 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
|
29 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
|
30 end |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
31 # TODO: Get rid of the padding here. Any padding should be handled by the consturctor accepting the stencils. |
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
32 eClosure = Stencil(pad_tuple(toml_string_array_to_tuple(Float64, e["closure"]), boundarySize), center=1) |
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
33 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
|
34 |
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
|
35 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
|
36 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
|
37 for i ∈ 1: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 = (quadratureClosure..., Stencil((q_tuple[i],), center=1)) |
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 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
|
40 |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
41 d2 = SbpOperators.D2( |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
42 innerStencil, |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
43 closureStencils, |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
44 eClosure, |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
45 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
|
46 quadratureClosure, |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
47 even |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
48 ) |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
49 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
50 return d2 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
51 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
52 |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
53 """ |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
54 read_stencil_set(fn, filter_pairs::Vararg{Pair}) |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
55 |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
56 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
|
57 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
|
58 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
59 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
|
60 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
|
61 """ |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
62 read_stencil_set(fn, filter_pairs::Vararg{Pair}) = get_stencil_set(TOML.parsefile(fn), filter_pairs...) |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
63 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
64 """ |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
65 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
|
66 |
764
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
67 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
|
68 """ |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
69 function get_stencil_set(parsed_toml; filters...) |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
70 matches = findall(parsed_toml["stencil_set"]) do set |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
71 for (key, val) ∈ filters |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
72 if set[string(key)] != val |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
73 return false |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
74 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
75 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
76 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
77 return true |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
78 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
79 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
80 if length(matches) != 1 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
81 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
|
82 end |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
83 |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
84 i = matches[1] |
d34b515b0ae7
Add functions for reading stencil sets
Jonatan Werpers <jonatan@werpers.com>
parents:
655
diff
changeset
|
85 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
|
86 end |
597
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
87 |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
88 """ |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
89 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
|
90 |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
91 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
|
92 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
|
93 |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
94 See also: [`read_stencils`](@ref), [`read_tuple`](@ref), [`get_stencil`](@ref). |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
95 |
597
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
96 # Examples |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
97 ``` |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
98 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
|
99 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
|
100 ``` |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
101 """ |
98cd99237176
Add a function for reading a stencil directly from the a file
Jonatan Werpers <jonatan@werpers.com>
parents:
596
diff
changeset
|
102 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
|
103 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
104 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
105 read_stencils(fn, path...; centers) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
106 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
107 Read stencils at `path` from the file `fn`. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
108 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
|
109 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
110 See also: [`read_stencil`](@ref), [`read_tuple`](@ref), [`get_stencils`](@ref). |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
111 """ |
608 | 112 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
|
113 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
114 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
115 read_tuple(fn, path...) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
116 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
117 Read tuple at `path` from the file `fn`. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
118 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
119 See also: [`read_stencil`](@ref), [`read_stencils`](@ref), [`get_tuple`](@ref). |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
120 """ |
600
dd7056869294
Fix a couple of types
Jonatan Werpers <jonatan@werpers.com>
parents:
599
diff
changeset
|
121 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
|
122 |
609
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
123 """ |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
124 get_stencil(parsed_toml, path...; center=nothing) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
125 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
126 Same as [`read_stencil`](@ref)) but takes already parsed toml. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
127 """ |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
128 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
|
129 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
|
130 @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
|
131 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
|
132 |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
133 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
|
134 |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
135 if isnothing(center) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
136 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
|
137 end |
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
138 |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
139 return Stencil(Tuple(stencil_weights), center=center) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
140 end |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
141 |
609
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 get_stencils(parsed_toml, path...; centers) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
144 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
145 Same as [`read_stencils`](@ref)) but takes already parsed toml. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
146 """ |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
147 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
|
148 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
|
149 @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
|
150 @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
|
151 |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
152 stencils = () |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
153 for i ∈ 1:length(parsed_toml) |
600
dd7056869294
Fix a couple of types
Jonatan Werpers <jonatan@werpers.com>
parents:
599
diff
changeset
|
154 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
|
155 stencils = (stencils..., stencil) |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
156 end |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
157 |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
158 return stencils |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
159 end |
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
160 |
609
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 get_tuple(parsed_toml, path...) |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
163 |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
164 Same as [`read_tuple`](@ref)) but takes already parsed toml. |
7975143118e8
Add some documentation
Jonatan Werpers <jonatan@werpers.com>
parents:
608
diff
changeset
|
165 """ |
598
19e1b169aa9c
Add funcitons for reading several stecils or reading tuples
Jonatan Werpers <jonatan@werpers.com>
parents:
597
diff
changeset
|
166 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
|
167 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
|
168 @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
|
169 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
|
170 return t |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
171 end |
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
172 |
655
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
173 function get_rationals() |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
174 end |
ec7490fb4404
Start sketching the toml format and needed functions
Jonatan Werpers <jonatan@werpers.com>
parents:
637
diff
changeset
|
175 |
596
a9744aa5e235
Simplify read_D2_operator by introducing a get_stencil function
Jonatan Werpers <jonatan@werpers.com>
parents:
594
diff
changeset
|
176 # 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
|
177 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
|
178 return Tuple(T.(parse_rational.(arr))) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
179 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
180 |
594
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
181 function parse_rational(str) |
cc86b920531a
Change the readoperator function to use the .toml format
Jonatan Werpers <jonatan@werpers.com>
parents:
340
diff
changeset
|
182 expr = Meta.parse(replace(str, "/"=>"//")) |
603
fbff4009c08a
Add tests for parse_rational()
Jonatan Werpers <jonatan@werpers.com>
parents:
602
diff
changeset
|
183 return eval(:(Rational($expr))) |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
184 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
185 |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
186 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
|
187 if N >= n |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
188 return t |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
189 else |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
190 return pad_tuple((t..., zero(T)), n) |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
191 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
192 end |
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
193 |
340
29df39a7b568
readoperator.jl: Fix path to operators
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
194 sbp_operators_path() = (@__DIR__) * "/operators/" |
249
7cb4492ccd60
Refactor package SbpOperators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
195 export sbp_operators_path |