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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
6 export parse_stencil
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
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
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
90 function parse_stencil(toml)
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
91 check_stencil_toml(toml)
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
92
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
93 if toml isa Array
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
94 weights = Float64.(parse_rational.(toml))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
95 return CenteredStencil(weights...)
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
96 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
97
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
98 weights = Float64.(parse_rational.(toml["s"]))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
99 return Stencil(weights..., center = toml["c"])
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
100 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
101
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
102 function check_stencil_toml(toml)
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
103 if !(toml isa Dict || toml isa Vector{String})
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
104 throw(ArgumentError("the TOML for a stecil must be a vector of strings or a table."))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
105 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
106
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
107 if toml isa Vector{String}
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
108 return
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
109 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
110
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
111 if !(haskey(toml, "s") && haskey(toml, "c"))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
112 throw(ArgumentError("the table form of a stencil must have fields `s` and `c`."))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
113 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
114
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
115 if !(toml["s"] isa Vector{String})
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
116 throw(ArgumentError("a stencil must be specified as a vector of strings."))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
117 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
118
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
119 if !(toml["c"] isa Int)
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
120 throw(ArgumentError("the center of a stencil must be specified as an integer."))
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
121 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
122 end
7624a1350ece Add parse_stencil
Jonatan Werpers <jonatan@werpers.com>
parents: 765
diff changeset
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
8ae63e775f9d Fix another type
Jonatan Werpers <jonatan@werpers.com>
parents: 603
diff changeset
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