Mercurial > repos > public > sbplib_julia
changeset 553:d5c45785d318 feature/quadrature_as_outer_product
Add test of accuracy conditions for DiagonalQuadrature
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sun, 29 Nov 2020 18:57:29 +0100 |
parents | 9bfecd6b6aac |
children | dab9df9c4d66 |
files | test/testSbpOperators.jl |
diffstat | 1 files changed, 37 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/test/testSbpOperators.jl Sun Nov 29 18:04:03 2020 +0100 +++ b/test/testSbpOperators.jl Sun Nov 29 18:57:29 2020 +0100 @@ -116,6 +116,7 @@ Ly = Float64(π) g_1D = EquidistantGrid(77, 0.0, Lx) g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) + integral(H,v) = sum(H*v) @testset "Constructors" begin # 1D H_x = DiagonalQuadrature(spacing(g_1D)[1],op.quadratureClosure,size(g_1D)); @@ -131,9 +132,9 @@ @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 + 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) @@ -141,14 +142,16 @@ @test domain_size(H_xy) == size(g_2D) @test range_size(H_xy) == size(g_2D) 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 + 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 @@ -159,7 +162,32 @@ @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 + @testset "Accuracy" begin + v = () + for i = 0:4 + f_i(x) = 1/factorial(i)*x^i + v = (v...,evalOn(g_1D,f_i)) + end + # # 2nd order + # 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 + # end + + # 4th order + op4 = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") + H4 = diagonal_quadrature(g_1D,op4.quadratureClosure) + for i = 1:4 + @test integral(H4,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14 + end + end + @testset "Inferred" begin + H_x = diagonal_quadrature(g_1D,op.quadratureClosure) + H_xy = diagonal_quadrature(g_2D,op.quadratureClosure) + v_1D = ones(Float64, size(g_1D)) + v_2D = ones(Float64, size(g_2D)) @inferred H_x*v_1D @inferred H_x'*v_1D @inferred H_xy*v_2D