Mercurial > repos > public > sbplib_julia
changeset 559:08e27dee76c3 feature/quadrature_as_outer_product
Restructure and extend tests for InverseDiagonalQuadrature. Also minor cleanup in tests for DiagonalQuadrature.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sun, 29 Nov 2020 22:42:23 +0100 |
parents | 9b5710ae6587 |
children | 04d7b4eb63ef |
files | test/testSbpOperators.jl |
diffstat | 1 files changed, 64 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/test/testSbpOperators.jl Sun Nov 29 22:06:53 2020 +0100 +++ b/test/testSbpOperators.jl Sun Nov 29 22:42:23 2020 +0100 @@ -124,7 +124,6 @@ @test H_x == diagonal_quadrature(g_1D,op.quadratureClosure) @test H_x isa TensorMapping{T,1,1} where T @test H_x' isa TensorMapping{T,1,1} where T - # 2D H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) @test H_xy isa TensorMappingComposition @@ -133,30 +132,30 @@ end @testset "Sizes" begin + # 1D H_x = diagonal_quadrature(g_1D,op.quadratureClosure) - H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) - # 1D @test domain_size(H_x) == size(g_1D) @test range_size(H_x) == size(g_1D) # 2D + H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) @test domain_size(H_xy) == size(g_2D) @test range_size(H_xy) == size(g_2D) end @testset "Application" begin + # 1D H_x = diagonal_quadrature(g_1D,op.quadratureClosure) - H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) a = 3.2 - b = 2.1 v_1D = a*ones(Float64, size(g_1D)) - v_2D = b*ones(Float64, size(g_2D)) u_1D = evalOn(g_1D,x->sin(x)) - u_2D = evalOn(g_2D,(x,y)->sin(x)+cos(y)) - # 1D @test integral(H_x,v_1D) ≈ a*Lx rtol = 1e-13 @test integral(H_x,u_1D) ≈ 1. rtol = 1e-8 @test H_x*v_1D == H_x'*v_1D # 2D + H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) + b = 2.1 + v_2D = b*ones(Float64, size(g_2D)) + u_2D = evalOn(g_2D,(x,y)->sin(x)+cos(y)) @test integral(H_xy,v_2D) ≈ b*Lx*Ly rtol = 1e-13 @test integral(H_xy,u_2D) ≈ π rtol = 1e-8 @test H_xy*v_2D ≈ H_xy'*v_2D rtol = 1e-16 #Failed for exact equality. Must differ in operation order for some reason? @@ -173,7 +172,7 @@ # op2 = readOperator(sbp_operators_path()*"d2_2nd.txt",sbp_operators_path()*"h_2nd.txt") # H2 = diagonal_quadrature(g_1D,op2.quadratureClosure) # for i = 1:3 - # @test integral(H4,v[i]) ≈ v[i+1] rtol = 1e-14 + # @test integral(H2,v[i]) ≈ v[i+1] rtol = 1e-14 # end # 4th order @@ -198,31 +197,65 @@ @testset "InverseDiagonalQuadrature" begin op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") - Lx = 2.3 - g = EquidistantGrid(77, 0.0, Lx) - H = DiagonalQuadrature(g, op.quadratureClosure) - Hi = InverseDiagonalQuadrature(g,op.quadratureClosure) - v = evalOn(g, x->sin(x)) + Lx = π/2. + Ly = Float64(π) + g_1D = EquidistantGrid(77, 0.0, Lx) + g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) + @testset "Constructors" begin + # 1D + Hi_x = InverseDiagonalQuadrature(inverse_spacing(g_1D)[1], 1. ./ op.quadratureClosure, size(g_1D)); + @test Hi_x == InverseDiagonalQuadrature(g_1D,op.quadratureClosure) + @test Hi_x == inverse_diagonal_quadrature(g_1D,op.quadratureClosure) + @test Hi_x isa TensorMapping{T,1,1} where T + @test Hi_x' isa TensorMapping{T,1,1} where T - @test Hi isa TensorMapping{T,1,1} where T - @test Hi' isa TensorMapping{T,1,1} where T - @test Hi == inverse_diagonal_quadrature(g,op.quadratureClosure) - @test Hi*H*v ≈ v - @test Hi*v == Hi'*v - @inferred Hi*v + # 2D + Hi_xy = inverse_diagonal_quadrature(g_2D,op.quadratureClosure) + @test Hi_xy isa TensorMappingComposition + @test Hi_xy isa TensorMapping{T,2,2} where T + @test Hi_xy' isa TensorMapping{T,2,2} where T + end + + @testset "Sizes" begin + # 1D + Hi_x = inverse_diagonal_quadrature(g_1D,op.quadratureClosure) + @test domain_size(Hi_x) == size(g_1D) + @test range_size(Hi_x) == size(g_1D) + # 2D + Hi_xy = inverse_diagonal_quadrature(g_2D,op.quadratureClosure) + @test domain_size(Hi_xy) == size(g_2D) + @test range_size(Hi_xy) == size(g_2D) + end - # Test multiple dimension - Ly = 5.2 - g = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) + @testset "Application" begin + # 1D + H_x = diagonal_quadrature(g_1D,op.quadratureClosure) + Hi_x = inverse_diagonal_quadrature(g_1D,op.quadratureClosure) + v_1D = evalOn(g_1D,x->sin(x)) + u_1D = evalOn(g_1D,x->x^3-x^2+1) + @test Hi_x*H_x*v_1D ≈ v_1D rtol = 1e-15 + @test Hi_x*H_x*u_1D ≈ u_1D rtol = 1e-15 + @test Hi_x*v_1D == Hi_x'*v_1D + # 2D + H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) + Hi_xy = inverse_diagonal_quadrature(g_2D,op.quadratureClosure) + v_2D = evalOn(g_2D,(x,y)->sin(x)+cos(y)) + u_2D = evalOn(g_2D,(x,y)->x*y + x^5 - sqrt(y)) + @test Hi_xy*H_xy*v_2D ≈ v_2D rtol = 1e-15 + @test Hi_xy*H_xy*u_2D ≈ u_2D rtol = 1e-15 + @test Hi_xy*v_2D ≈ Hi_xy'*v_2D rtol = 1e-16 #Failed for exact equality. Must differ in operation order for some reason? + end - H = diagonal_quadrature(g, op.quadratureClosure) - Hi = inverse_diagonal_quadrature(g, op.quadratureClosure) - v = evalOn(g, (x,y)-> x^2 + (y-1)^2 + x*y) - - @test Hi isa TensorMapping{T,2,2} where T - @test Hi' isa TensorMapping{T,2,2} where T - @test Hi*H*v ≈ v - @test_broken Hi*v == Hi'*v # apply_transpose not implemented for InflatedTensorMapping! + @testset "Inferred" begin + Hi_x = inverse_diagonal_quadrature(g_1D,op.quadratureClosure) + Hi_xy = inverse_diagonal_quadrature(g_2D,op.quadratureClosure) + v_1D = ones(Float64, size(g_1D)) + v_2D = ones(Float64, size(g_2D)) + @inferred Hi_x*v_1D + @inferred Hi_x'*v_1D + @inferred Hi_xy*v_2D + @inferred Hi_xy'*v_2D + end end # # @testset "BoundaryValue" begin