Mercurial > repos > public > sbplib_julia
diff test/testSbpOperators.jl @ 504:21fba50cb5b0 feature/quadrature_as_outer_product
Use LazyOuterProduct to construct multi-dimensional quadratures. This change allwed to:
- Replace the types Quadrature and InverseQuadrature by functions returning outer products of the 1D operators.
- Avoid convoluted naming of types. DiagonalInnerProduct is now renamed to DiagonalQuadrature, similarly for InverseDiagonalInnerProduct.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sat, 07 Nov 2020 13:07:31 +0100 |
parents | 3cecbfb3d623 |
children | 26485066394a |
line wrap: on
line diff
--- a/test/testSbpOperators.jl Fri Nov 06 21:37:10 2020 +0100 +++ b/test/testSbpOperators.jl Sat Nov 07 13:07:31 2020 +0100 @@ -110,67 +110,67 @@ @test L*v5 ≈ v5ₓₓ atol=5e-4 norm=l2 end -@testset "DiagonalInnerProduct" begin +@testset "DiagonalQuadrature" begin op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") - L = 2.3 - g = EquidistantGrid(77, 0.0, L) - H = DiagonalInnerProduct(g,op.quadratureClosure) + Lx = 2.3 + g = EquidistantGrid(77, 0.0, Lx) + H = DiagonalQuadrature(g,op.quadratureClosure) v = ones(Float64, size(g)) @test H isa TensorMapping{T,1,1} where T @test H' isa TensorMapping{T,1,1} where T - @test sum(H*v) ≈ L + @test H == diagonal_quadrature(g,op.quadratureClosure) + @test sum(H*v) ≈ Lx @test H*v == H'*v -end + @inferred H*v -@testset "Quadrature" begin - op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") - Lx = 2.3 + # Test multiple dimension Ly = 5.2 g = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) - Q = Quadrature(g, op.quadratureClosure) + H = diagonal_quadrature(g, op.quadratureClosure) - @test Q isa TensorMapping{T,2,2} where T - @test Q' isa TensorMapping{T,2,2} where T + @test H isa TensorMapping{T,2,2} where T + @test H' isa TensorMapping{T,2,2} where T v = ones(Float64, size(g)) - @test sum(Q*v) ≈ Lx*Ly + @test sum(H*v) ≈ Lx*Ly v = 2*ones(Float64, size(g)) - @test_broken sum(Q*v) ≈ 2*Lx*Ly + @test sum(H*v) ≈ 2*Lx*Ly - @test Q*v == Q'*v + @test_broken H*v == H'*v + + @inferred H*v end -@testset "InverseDiagonalInnerProduct" begin +@testset "InverseDiagonalQuadrature" begin op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") - L = 2.3 - g = EquidistantGrid(77, 0.0, L) - H = DiagonalInnerProduct(g, op.quadratureClosure) - Hi = InverseDiagonalInnerProduct(g,op.quadratureClosure) + 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)) @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 -end + @inferred Hi*v -@testset "InverseQuadrature" begin - op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") - Lx = 7.3 - Ly = 8.2 + # Test multiple dimension + Ly = 5.2 g = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) - Q = Quadrature(g, op.quadratureClosure) - Qinv = InverseQuadrature(g, op.quadratureClosure) + 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 Qinv isa TensorMapping{T,2,2} where T - @test Qinv' isa TensorMapping{T,2,2} where T - @test_broken Qinv*(Q*v) ≈ v - @test Qinv*v == Qinv'*v + @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 end # # @testset "BoundaryValue" begin