Mercurial > repos > public > sbplib_julia
changeset 1018:5ec49dd2c7c4 feature/stencil_set_type
Reintroduce read_stencil_set
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Tue, 22 Mar 2022 09:57:28 +0100 |
parents | 37fd8c1cadb2 |
children | 3031ce7a4999 |
files | src/SbpOperators/SbpOperators.jl src/SbpOperators/readoperator.jl test/SbpOperators/boundaryops/boundary_restriction_test.jl test/SbpOperators/boundaryops/normal_derivative_test.jl test/SbpOperators/volumeops/derivatives/first_derivative_test.jl test/SbpOperators/volumeops/derivatives/second_derivative_test.jl test/SbpOperators/volumeops/inner_products/inner_product_test.jl test/SbpOperators/volumeops/inner_products/inverse_inner_product_test.jl test/SbpOperators/volumeops/laplace/laplace_test.jl |
diffstat | 9 files changed, 45 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/src/SbpOperators/SbpOperators.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/src/SbpOperators/SbpOperators.jl Tue Mar 22 09:57:28 2022 +0100 @@ -1,5 +1,15 @@ module SbpOperators +# Stencil set +export StencilSet +export read_stencil_set +export get_stencil_set +export parse_stencil +export parse_scalar +export parse_tuple +export sbp_operators_path + +# Operators export boundary_quadrature export boundary_restriction export inner_product
--- a/src/SbpOperators/readoperator.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/src/SbpOperators/readoperator.jl Tue Mar 22 09:57:28 2022 +0100 @@ -1,13 +1,5 @@ using TOML -export StencilSet -export get_stencil_set - -export parse_stencil -export parse_scalar -export parse_tuple - -export sbp_operators_path """ StencilSet @@ -22,7 +14,7 @@ """ - StencilSet(filename; filters) +read_stencil_set(filename; filters) Creates a `StencilSet` from a TOML file based on some key-value filters. If more than one set matches the filters an error is raised. The @@ -38,9 +30,9 @@ For more information see [Operator file format](@ref) in the documentation. -See also [`sbp_operators_path`](@ref), [`get_stencil_set`](@ref), [`parse_stencil`](@ref), [`parse_scalar`](@ref), [`parse_tuple`](@ref),. +See also [`StencilSet`](@ref), [`sbp_operators_path`](@ref), [`get_stencil_set`](@ref), [`parse_stencil`](@ref), [`parse_scalar`](@ref), [`parse_tuple`](@ref). """ -StencilSet(filename; filters...) = StencilSet(get_stencil_set(TOML.parsefile(filename); filters...)) +read_stencil_set(filename; filters...) = StencilSet(get_stencil_set(TOML.parsefile(filename); filters...)) """ @@ -49,7 +41,7 @@ Picks out a stencil set from an already parsed TOML based on some key-value filters. -See also [`StencilSet`](@ref). +See also [`read_stencil_set`](@ref). """ function get_stencil_set(parsed_toml; filters...) matches = findall(parsed_toml["stencil_set"]) do set @@ -75,7 +67,7 @@ Accepts parsed TOML and reads it as a stencil. -See also [`StencilSet`](@ref), [`parse_scalar`](@ref), [`parse_tuple`](@ref). +See also [`read_stencil_set`](@ref), [`parse_scalar`](@ref), [`parse_tuple`](@ref). """ function parse_stencil(parsed_toml) check_stencil_toml(parsed_toml) @@ -123,7 +115,7 @@ Parse a scalar, represented as a string or a number in the TOML, and return it as a `Rational` -See also [`StencilSet`](@ref), [`parse_stencil`](@ref) [`parse_tuple`](@ref). +See also [`read_stencil_set`](@ref), [`parse_stencil`](@ref) [`parse_tuple`](@ref). """ function parse_scalar(parsed_toml) try @@ -138,7 +130,7 @@ Parse an array as a tuple of scalars. -See also [`StencilSet`](@ref), [`parse_stencil`](@ref), [`parse_scalar`](@ref). +See also [`read_stencil_set`](@ref), [`parse_stencil`](@ref), [`parse_scalar`](@ref). """ function parse_tuple(parsed_toml) if !(parsed_toml isa Array) @@ -167,6 +159,6 @@ Calculate the path for the operators folder with included stencil sets. -See also [`StencilSet`](@ref) +See also [`StencilSet`](@ref), [`read_stencil_set`](@ref). """ sbp_operators_path() = (@__DIR__) * "/operators/"
--- a/test/SbpOperators/boundaryops/boundary_restriction_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/boundaryops/boundary_restriction_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -7,7 +7,7 @@ using Sbplib.SbpOperators: BoundaryOperator, Stencil @testset "boundary_restriction" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order = 4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order = 4) e_closure = parse_stencil(stencil_set["e"]["closure"]) g_1D = EquidistantGrid(11, 0.0, 1.0) g_2D = EquidistantGrid((11,15), (0.0, 0.0), (1.0,1.0))
--- a/test/SbpOperators/boundaryops/normal_derivative_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/boundaryops/normal_derivative_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -10,7 +10,7 @@ g_1D = EquidistantGrid(11, 0.0, 1.0) g_2D = EquidistantGrid((11,12), (0.0, 0.0), (1.0,1.0)) @testset "normal_derivative" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) d_closure = parse_stencil(stencil_set["d1"]["closure"]) @testset "1D" begin d_l = normal_derivative(g_1D, d_closure, CartesianBoundary{1,Lower}()) @@ -38,7 +38,7 @@ v∂y = evalOn(g_2D, (x,y)-> 2*(y-1) + x) # TODO: Test for higher order polynomials? @testset "2nd order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=2) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) d_closure = parse_stencil(stencil_set["d1"]["closure"]) d_w, d_e, d_s, d_n = normal_derivative.(Ref(g_2D), Ref(d_closure), boundary_identifiers(g_2D)) @@ -49,7 +49,7 @@ end @testset "4th order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) d_closure = parse_stencil(stencil_set["d1"]["closure"]) d_w, d_e, d_s, d_n = normal_derivative.(Ref(g_2D), Ref(d_closure), boundary_identifiers(g_2D))
--- a/test/SbpOperators/volumeops/derivatives/first_derivative_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/volumeops/derivatives/first_derivative_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -22,7 +22,7 @@ @testset "first_derivative" begin @testset "Constructors" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=2) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) g₁ = EquidistantGrid(11, 0., 1.) g₂ = EquidistantGrid((11,14), (0.,1.), (1.,3.)) @@ -44,7 +44,7 @@ N = 20 g = EquidistantGrid(N, 0//1,2//1) @testset for order ∈ [2,4] - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) D₁ = first_derivative(g, stencil_set, 1) @testset "boundary x^$k" for k ∈ 0:order÷2 @@ -74,7 +74,7 @@ g = EquidistantGrid(30, 0.,1.) v = evalOn(g, x->exp(x)) @testset for (order, tol) ∈ [(2, 6e-3),(4, 2e-4)] - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) D₁ = first_derivative(g, stencil_set, 1) @test D₁*v ≈ v rtol=tol
--- a/test/SbpOperators/volumeops/derivatives/second_derivative_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/volumeops/derivatives/second_derivative_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -8,7 +8,7 @@ @testset "SecondDerivative" begin operator_path = sbp_operators_path()*"standard_diagonal.toml" - stencil_set = StencilSet(operator_path; order=4) + stencil_set = read_stencil_set(operator_path; order=4) inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"]) closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"]) Lx = 3.5 @@ -51,7 +51,7 @@ # 2nd order interior stencil, 1nd order boundary stencil, # implies that L*v should be exact for monomials up to order 2. @testset "2nd order" begin - stencil_set = StencilSet(operator_path; order=2) + stencil_set = read_stencil_set(operator_path; order=2) Dₓₓ = second_derivative(g_1D,stencil_set) @test Dₓₓ*monomials[1] ≈ zeros(Float64,size(g_1D)...) atol = 5e-10 @test Dₓₓ*monomials[2] ≈ zeros(Float64,size(g_1D)...) atol = 5e-10 @@ -62,7 +62,7 @@ # 4th order interior stencil, 2nd order boundary stencil, # implies that L*v should be exact for monomials up to order 3. @testset "4th order" begin - stencil_set = StencilSet(operator_path; order=4) + stencil_set = read_stencil_set(operator_path; order=4) Dₓₓ = second_derivative(g_1D,stencil_set) # NOTE: high tolerances for checking the "exact" differentiation # due to accumulation of round-off errors/cancellation errors? @@ -88,7 +88,7 @@ # 2nd order interior stencil, 1st order boundary stencil, # implies that L*v should be exact for binomials up to order 2. @testset "2nd order" begin - stencil_set = StencilSet(operator_path; order=2) + stencil_set = read_stencil_set(operator_path; order=2) Dyy = second_derivative(g_2D,stencil_set,2) @test Dyy*binomials[1] ≈ zeros(Float64,size(g_2D)...) atol = 5e-9 @test Dyy*binomials[2] ≈ zeros(Float64,size(g_2D)...) atol = 5e-9 @@ -99,7 +99,7 @@ # 4th order interior stencil, 2nd order boundary stencil, # implies that L*v should be exact for binomials up to order 3. @testset "4th order" begin - stencil_set = StencilSet(operator_path; order=4) + stencil_set = read_stencil_set(operator_path; order=4) Dyy = second_derivative(g_2D,stencil_set,2) # NOTE: high tolerances for checking the "exact" differentiation # due to accumulation of round-off errors/cancellation errors?
--- a/test/SbpOperators/volumeops/inner_products/inner_product_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/volumeops/inner_products/inner_product_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -15,7 +15,7 @@ g_3D = EquidistantGrid((10,10, 10), (0.0, 0.0, 0.0), (Lx,Ly,Lz)) integral(H,v) = sum(H*v) @testset "inner_product" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) @testset "0D" begin @@ -41,7 +41,7 @@ end @testset "Sizes" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) @testset "1D" begin @@ -66,7 +66,7 @@ u = evalOn(g_1D,x->sin(x)) @testset "2nd order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=2) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_1D, quadrature_interior, quadrature_closure) @@ -77,7 +77,7 @@ end @testset "4th order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_1D, quadrature_interior, quadrature_closure) @@ -93,7 +93,7 @@ v = b*ones(Float64, size(g_2D)) u = evalOn(g_2D,(x,y)->sin(x)+cos(y)) @testset "2nd order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=2) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_2D, quadrature_interior, quadrature_closure) @@ -101,7 +101,7 @@ @test integral(H,u) ≈ π rtol = 1e-4 end @testset "4th order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_2D, quadrature_interior, quadrature_closure)
--- a/test/SbpOperators/volumeops/inner_products/inverse_inner_product_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/volumeops/inner_products/inverse_inner_product_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -12,7 +12,7 @@ g_1D = EquidistantGrid(77, 0.0, Lx) g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) @testset "inverse_inner_product" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) @testset "0D" begin @@ -38,7 +38,7 @@ end @testset "Sizes" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) @testset "1D" begin @@ -58,7 +58,7 @@ v = evalOn(g_1D,x->sin(x)) u = evalOn(g_1D,x->x^3-x^2+1) @testset "2nd order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=2) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_1D, quadrature_interior, quadrature_closure) @@ -67,7 +67,7 @@ @test Hi*H*u ≈ u rtol = 1e-15 end @testset "4th order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_1D, quadrature_interior, quadrature_closure) @@ -80,7 +80,7 @@ v = evalOn(g_2D,(x,y)->sin(x)+cos(y)) u = evalOn(g_2D,(x,y)->x*y + x^5 - sqrt(y)) @testset "2nd order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=2) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_2D, quadrature_interior, quadrature_closure) @@ -89,7 +89,7 @@ @test Hi*H*u ≈ u rtol = 1e-15 end @testset "4th order" begin - stencil_set = StencilSet(sbp_operators_path()*"standard_diagonal.toml"; order=4) + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) quadrature_interior = parse_scalar(stencil_set["H"]["inner"]) quadrature_closure = parse_tuple(stencil_set["H"]["closure"]) H = inner_product(g_2D, quadrature_interior, quadrature_closure)
--- a/test/SbpOperators/volumeops/laplace/laplace_test.jl Fri Mar 18 13:29:35 2022 +0100 +++ b/test/SbpOperators/volumeops/laplace/laplace_test.jl Tue Mar 22 09:57:28 2022 +0100 @@ -6,7 +6,7 @@ # Default stencils (4th order) operator_path = sbp_operators_path()*"standard_diagonal.toml" -stencil_set = StencilSet(operator_path; order=4) +stencil_set = read_stencil_set(operator_path; order=4) inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"]) closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"]) g_1D = EquidistantGrid(101, 0.0, 1.) @@ -42,7 +42,7 @@ # 2nd order interior stencil, 1st order boundary stencil, # implies that L*v should be exact for binomials up to order 2. @testset "2nd order" begin - stencil_set = StencilSet(operator_path; order=2) + stencil_set = read_stencil_set(operator_path; order=2) Δ = Laplace(g_3D, stencil_set) @test Δ*polynomials[1] ≈ zeros(Float64, size(g_3D)...) atol = 5e-9 @test Δ*polynomials[2] ≈ zeros(Float64, size(g_3D)...) atol = 5e-9 @@ -53,7 +53,7 @@ # 4th order interior stencil, 2nd order boundary stencil, # implies that L*v should be exact for binomials up to order 3. @testset "4th order" begin - stencil_set = StencilSet(operator_path; order=4) + stencil_set = read_stencil_set(operator_path; order=4) Δ = Laplace(g_3D, stencil_set) # NOTE: high tolerances for checking the "exact" differentiation # due to accumulation of round-off errors/cancellation errors?