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
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
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
8ae63e775f9d Fix another type
Jonatan Werpers <jonatan@werpers.com>
parents: 603
diff changeset
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