Mercurial > repos > public > sbplib_julia
changeset 551:8ac1d0fcba41 feature/quadrature_as_outer_product
Add more tests for DiagonalQuadrature
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sat, 28 Nov 2020 18:12:11 +0100 |
parents | 09ae5b519b4c |
children | 9bfecd6b6aac |
files | test/testSbpOperators.jl |
diffstat | 1 files changed, 48 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/test/testSbpOperators.jl Fri Nov 27 12:33:10 2020 +0100 +++ b/test/testSbpOperators.jl Sat Nov 28 18:12:11 2020 +0100 @@ -112,36 +112,57 @@ @testset "DiagonalQuadrature" 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) - v = ones(Float64, size(g)) + 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 + H_x = DiagonalQuadrature(spacing(g_1D)[1],op.quadratureClosure,size(g_1D)); + @test H_x == DiagonalQuadrature(g_1D,op.quadratureClosure) + @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 - @test H isa TensorMapping{T,1,1} where T - @test H' isa TensorMapping{T,1,1} where T - @test H == diagonal_quadrature(g,op.quadratureClosure) - @test sum(H*v) ≈ Lx - @test H*v == H'*v - @inferred H*v + # 2D + H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) + @test H_xy isa TensorMappingComposition + @test H_xy isa TensorMapping{T,2,2} where T + @test H_xy' isa TensorMapping{T,2,2} where T + end + + H_x = diagonal_quadrature(g_1D,op.quadratureClosure) + H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) + @testset "Sizes" begin + # 1D + + # 2D - # Test multiple dimension - Ly = 5.2 - g = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) - - H = diagonal_quadrature(g, op.quadratureClosure) - - @test H isa TensorMapping{T,2,2} where T - @test H' isa TensorMapping{T,2,2} where T + end + 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)) + integral(H,v) = sum(H*v) + @testset "Application" begin + # 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 + @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? + end - v = ones(Float64, size(g)) - @test sum(H*v) ≈ Lx*Ly - - v = 2*ones(Float64, size(g)) - @test sum(H*v) ≈ 2*Lx*Ly - - @test_broken H*v == H'*v # apply_transpose not implemented for InflatedTensorMapping! - - @inferred H*v + @testset "Inferred" begin + @inferred H_x*v_1D + @inferred H_x'*v_1D + @inferred H_xy*v_2D + @inferred H_xy'*v_2D + end end @testset "InverseDiagonalQuadrature" begin