Mercurial > repos > public > sbplib_julia
changeset 565:15423a868d28 feature/boundary_ops
Restructure and extend tests for BoundaryRestriction
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 30 Nov 2020 23:19:20 +0100 |
parents | ccb41095def6 |
children | fe026b4f99ec |
files | test/testSbpOperators.jl |
diffstat | 1 files changed, 126 insertions(+), 60 deletions(-) [+] |
line wrap: on
line diff
diff -r ccb41095def6 -r 15423a868d28 test/testSbpOperators.jl --- a/test/testSbpOperators.jl Mon Nov 30 23:18:33 2020 +0100 +++ b/test/testSbpOperators.jl Mon Nov 30 23:19:20 2020 +0100 @@ -175,82 +175,148 @@ @testset "BoundaryRestrictrion" begin op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") - - g = EquidistantGrid(4, 0.0, 1.0) + g_1D = EquidistantGrid(4, 0.0, 1.0) + g_2D = EquidistantGrid((4,5), (0.0, 0.0), (1.0,1.0)) - e_l = BoundaryRestriction(g,op.eClosure,Lower()) - e_r = BoundaryRestriction(g,op.eClosure,Upper()) + @testset "Constructors" begin + # 1D + e_l = BoundaryRestriction{Float64,4,Lower}(op.eClosure,size(g_1D)) + @test e_l == BoundaryRestriction(g_1D,op.eClosure,Lower()) + @test e_l == boundary_restriction(g_1D,op.eClosure,CartesianBoundary{1,Lower}()) + @test e_l isa TensorMapping{T,0,1} where T - v = evalOn(g,x->1+x^2) - u = fill(3.124) + e_r = BoundaryRestriction{Float64,4,Upper}(op.eClosure,size(g_1D)) + @test e_r == BoundaryRestriction(g_1D,op.eClosure,Upper()) + @test e_r == boundary_restriction(g_1D,op.eClosure,CartesianBoundary{1,Upper}()) + @test e_r isa TensorMapping{T,0,1} where T - @test (e_l*v)[] == v[1] - @test (e_r*v)[] == v[end] - @test e_l'*u == [u[], 0, 0, 0] - @test e_r'*u == [0, 0, 0, u[]] - @test_throws BoundsError (e_l*v)[Index{Lower}(3)] - @test_throws BoundsError (e_r*v)[Index{Upper}(3)] + # 2D + e_w = boundary_restriction(g_2D,op.eClosure,CartesianBoundary{1,Upper}()) + @test e_w isa InflatedTensorMapping + @test e_w isa TensorMapping{T,1,2} where T + end + + e_l = boundary_restriction(g_1D, op.eClosure, CartesianBoundary{1,Lower}()) + e_r = boundary_restriction(g_1D, op.eClosure, CartesianBoundary{1,Upper}()) - g = EquidistantGrid((4,5), (0.0, 0.0), (1.0,1.0)) + e_w = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{1,Lower}()) + e_e = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{1,Upper}()) + e_s = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{2,Lower}()) + e_n = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{2,Upper}()) + + @testset "Sizes" begin + # 1D + @test domain_size(e_l) == (4,) + @test domain_size(e_r) == (4,) - e_w = boundary_restriction(g, op.eClosure, CartesianBoundary{1,Lower}()) - e_e = boundary_restriction(g, op.eClosure, CartesianBoundary{1,Upper}()) - e_s = boundary_restriction(g, op.eClosure, CartesianBoundary{2,Lower}()) - e_n = boundary_restriction(g, op.eClosure, CartesianBoundary{2,Upper}()) + @test range_size(e_l) == () + @test range_size(e_r) == () + + # 2D + @test domain_size(e_w) == (4,5) + @test domain_size(e_e) == (4,5) + @test domain_size(e_s) == (4,5) + @test domain_size(e_n) == (4,5) + + @test range_size(e_w) == (5,) + @test range_size(e_e) == (5,) + @test range_size(e_s) == (4,) + @test range_size(e_n) == (4,) + end + - v = zeros(Float64, 4, 5) - v[:,5] = [1, 2, 3,4] - v[:,4] = [1, 2, 3,4] - v[:,3] = [4, 5, 6, 7] - v[:,2] = [7, 8, 9, 10] - v[:,1] = [10, 11, 12, 13] + @testset "Application" begin + # 1D + v = evalOn(g_1D,x->1+x^2) + u = fill(3.124) + @test (e_l*v)[] == v[1] + @test (e_r*v)[] == v[end] + @test (e_r*v)[1] == v[end] + @test e_l'*u == [u[], 0, 0, 0] + @test e_r'*u == [0, 0, 0, u[]] + @test_throws BoundsError (e_l*v)[2] + @test_throws BoundsError (e_l'*u)[5] - @test e_w isa TensorMapping{T,1,2} where T - @test e_w' isa TensorMapping{T,2,1} where T - - @test domain_size(e_w) == (4,5) - @test domain_size(e_e) == (4,5) - @test domain_size(e_s) == (4,5) - @test domain_size(e_n) == (4,5) + # 2D + v = zeros(Float64, 4, 5) + v[:,5] = [1, 2, 3,4] + v[:,4] = [1, 2, 3,4] + v[:,3] = [4, 5, 6, 7] + v[:,2] = [7, 8, 9, 10] + v[:,1] = [10, 11, 12, 13] - @test range_size(e_w) == (5,) - @test range_size(e_e) == (5,) - @test range_size(e_s) == (4,) - @test range_size(e_n) == (4,) + @test e_w*v == [10,7,4,1.0,1] + @test e_e*v == [13,10,7,4,4.0] + @test e_s*v == [10,11,12,13.0] + @test e_n*v == [1,2,3,4.0] + + I_w = [(Index{Lower}(1),), + (Index{Interior}(2),), + (Index{Interior}(3),), + (Index{Interior}(4),), + (Index{Upper}(5),)] + for i = 1:length(I_w) + @test (e_w*v)[I_w[i]...] == [10,7,4,1.0,1][i]; + end + + g_x = [1,2,3,4.0] + g_y = [5,4,3,2,1.0] - I_w = [(Index{Lower}(1),), - (Index{Interior}(2),), - (Index{Interior}(3),), - (Index{Interior}(4),), - (Index{Upper}(5),)] - v_w = [10,7,4,1.0,1]; - for i = 1:length(I_w) - @test (e_w*v)[I_w[i]...] == v_w[i]; + G_w = zeros(Float64, (4,5)) + G_w[1,:] = g_y + + G_e = zeros(Float64, (4,5)) + G_e[4,:] = g_y + + G_s = zeros(Float64, (4,5)) + G_s[:,1] = g_x + + G_n = zeros(Float64, (4,5)) + G_n[:,5] = g_x + + @test e_w'*g_y == G_w + @test e_e'*g_y == G_e + @test e_s'*g_x == G_s + @test e_n'*g_x == G_n end - @test e_w*v == [10,7,4,1.0,1] - @test e_e*v == [13,10,7,4,4.0] - @test e_s*v == [10,11,12,13.0] - @test e_n*v == [1,2,3,4.0] - g_x = [1,2,3,4.0] - g_y = [5,4,3,2,1.0] + @testset "Inferred" begin + # 1D + v = ones(Float64, 4) + u = fill(1.) + @inferred (e_l*v)[] == 1 + @inferred (e_r*v)[] == 1 + @inferred e_l'*u == [1., 0., 0., 0.] + @inferred e_r'*u == [0., 0., 0., 1.] - G_w = zeros(Float64, (4,5)) - G_w[1,:] = g_y + # 2D + v = ones(Float64, 4, 5) + @inferred e_w*v == ones(Float64, 5) + @inferred e_e*v == ones(Float64, 5) + @inferred e_s*v == ones(Float64, 4) + @inferred e_n*v == ones(Float64, 4) - G_e = zeros(Float64, (4,5)) - G_e[4,:] = g_y + g_x = ones(Float64,4) + g_y = ones(Float64,5) - G_s = zeros(Float64, (4,5)) - G_s[:,1] = g_x + G_w = zeros(Float64, (4,5)) + G_w[1,:] = g_y + + G_e = zeros(Float64, (4,5)) + G_e[4,:] = g_y + + G_s = zeros(Float64, (4,5)) + G_s[:,1] = g_x - G_n = zeros(Float64, (4,5)) - G_n[:,5] = g_x + G_n = zeros(Float64, (4,5)) + G_n[:,5] = g_x - @test e_w'*g_y == G_w - @test e_e'*g_y == G_e - @test e_s'*g_x == G_s - @test e_n'*g_x == G_n + @inferred e_w'*g_y == G_w + @inferred e_e'*g_y == G_e + @inferred e_s'*g_x == G_s + @inferred e_n'*g_x == G_n + end + end # # @testset "NormalDerivative" begin