Mercurial > repos > public > sbplib_julia
comparison test/testSbpOperators.jl @ 383:aaf8e331cb80 refactor/sbp_operators_tests/collect_and_compare
Remove collects around TensorMappingApplications
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Thu, 01 Oct 2020 06:11:40 +0200 |
| parents | 5c10cd0ed1fe |
| children | 3a779c31e59e |
comparison
equal
deleted
inserted
replaced
| 382:5c10cd0ed1fe | 383:aaf8e331cb80 |
|---|---|
| 62 accuracytol = 0.5*1e-3 | 62 accuracytol = 0.5*1e-3 |
| 63 # 4th order interior stencil, 2nd order boundary stencil, | 63 # 4th order interior stencil, 2nd order boundary stencil, |
| 64 # implies that L*v should be exact for v - monomial up to order 3. | 64 # implies that L*v should be exact for v - monomial up to order 3. |
| 65 # Exact differentiation is measured point-wise. For other grid functions | 65 # Exact differentiation is measured point-wise. For other grid functions |
| 66 # the error is measured in the l2-norm. | 66 # the error is measured in the l2-norm. |
| 67 @test all(abs.(collect(Dₓₓ*v0)) .<= equalitytol) | 67 @test all(abs.(Dₓₓ*v0) .<= equalitytol) |
| 68 @test all(abs.(collect(Dₓₓ*v1)) .<= equalitytol) | 68 @test all(abs.(Dₓₓ*v1) .<= equalitytol) |
| 69 @test all(abs.((collect(Dₓₓ*v2) - v0)) .<= equalitytol) | 69 @test all(abs.((Dₓₓ*v2 - v0)) .<= equalitytol) |
| 70 @test all(abs.((collect(Dₓₓ*v3) - v1)) .<= equalitytol) | 70 @test all(abs.((Dₓₓ*v3 - v1)) .<= equalitytol) |
| 71 e4 = collect(Dₓₓ*v4) - v2 | 71 e4 = Dₓₓ*v4 - v2 |
| 72 e5 = collect(Dₓₓ*v5) + v5 | 72 e5 = Dₓₓ*v5 + v5 |
| 73 @test sqrt(h*sum(collect(e4.^2))) <= accuracytol | 73 @test sqrt(h*sum(e4.^2)) <= accuracytol |
| 74 @test sqrt(h*sum(collect(e5.^2))) <= accuracytol | 74 @test sqrt(h*sum(e5.^2)) <= accuracytol |
| 75 end | 75 end |
| 76 | 76 |
| 77 @testset "Laplace2D" begin | 77 @testset "Laplace2D" begin |
| 78 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 78 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 79 Lx = 1.5 | 79 Lx = 1.5 |
| 108 accuracytol = 0.5*1e-3 | 108 accuracytol = 0.5*1e-3 |
| 109 # 4th order interior stencil, 2nd order boundary stencil, | 109 # 4th order interior stencil, 2nd order boundary stencil, |
| 110 # implies that L*v should be exact for v - monomial up to order 3. | 110 # implies that L*v should be exact for v - monomial up to order 3. |
| 111 # Exact differentiation is measured point-wise. For other grid functions | 111 # Exact differentiation is measured point-wise. For other grid functions |
| 112 # the error is measured in the H-norm. | 112 # the error is measured in the H-norm. |
| 113 @test all(abs.(collect(L*v0)) .<= equalitytol) | 113 @test all(abs.(L*v0) .<= equalitytol) |
| 114 @test all(abs.(collect(L*v1)) .<= equalitytol) | 114 @test all(abs.(L*v1) .<= equalitytol) |
| 115 @test all(collect(L*v2) .≈ v0) # Seems to be more accurate | 115 @test all(L*v2 .≈ v0) # Seems to be more accurate |
| 116 @test all(abs.((collect(L*v3) - v1)) .<= equalitytol) | 116 @test all(abs.((L*v3 - v1)) .<= equalitytol) |
| 117 e4 = collect(L*v4) - v2 | 117 e4 = L*v4 - v2 |
| 118 e5 = collect(L*v5) - v5ₓₓ | 118 e5 = L*v5 - v5ₓₓ |
| 119 | 119 |
| 120 h = spacing(g) | 120 h = spacing(g) |
| 121 @test sqrt(prod(h)*sum(collect(e4.^2))) <= accuracytol | 121 @test sqrt(prod(h)*sum(e4.^2)) <= accuracytol |
| 122 @test sqrt(prod(h)*sum(collect(e5.^2))) <= accuracytol | 122 @test sqrt(prod(h)*sum(e5.^2)) <= accuracytol |
| 123 end | 123 end |
| 124 | 124 |
| 125 @testset "DiagonalInnerProduct" begin | 125 @testset "DiagonalInnerProduct" begin |
| 126 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 126 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 127 L = 2.3 | 127 L = 2.3 |
| 129 H = DiagonalInnerProduct(g,op.quadratureClosure) | 129 H = DiagonalInnerProduct(g,op.quadratureClosure) |
| 130 v = ones(Float64, size(g)) | 130 v = ones(Float64, size(g)) |
| 131 | 131 |
| 132 @test H isa TensorMapping{T,1,1} where T | 132 @test H isa TensorMapping{T,1,1} where T |
| 133 @test H' isa TensorMapping{T,1,1} where T | 133 @test H' isa TensorMapping{T,1,1} where T |
| 134 @test sum(collect(H*v)) ≈ L | 134 @test sum(H*v) ≈ L |
| 135 @test collect(H*v) == collect(H'*v) | 135 @test H*v == H'*v |
| 136 end | 136 end |
| 137 | 137 |
| 138 @testset "Quadrature" begin | 138 @testset "Quadrature" begin |
| 139 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 139 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 140 Lx = 2.3 | 140 Lx = 2.3 |
| 163 Hi = InverseDiagonalInnerProduct(g,op.quadratureClosure) | 163 Hi = InverseDiagonalInnerProduct(g,op.quadratureClosure) |
| 164 v = evalOn(g, x->sin(x)) | 164 v = evalOn(g, x->sin(x)) |
| 165 | 165 |
| 166 @test Hi isa TensorMapping{T,1,1} where T | 166 @test Hi isa TensorMapping{T,1,1} where T |
| 167 @test Hi' isa TensorMapping{T,1,1} where T | 167 @test Hi' isa TensorMapping{T,1,1} where T |
| 168 @test collect(Hi*H*v) ≈ v | 168 @test Hi*H*v ≈ v |
| 169 @test collect(Hi*v) == collect(Hi'*v) | 169 @test Hi*v == Hi'*v |
| 170 end | 170 end |
| 171 | 171 |
| 172 @testset "InverseQuadrature" begin | 172 @testset "InverseQuadrature" begin |
| 173 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 173 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 174 Lx = 7.3 | 174 Lx = 7.3 |
| 179 Qinv = InverseQuadrature(g, op.quadratureClosure) | 179 Qinv = InverseQuadrature(g, op.quadratureClosure) |
| 180 v = evalOn(g, (x,y)-> x^2 + (y-1)^2 + x*y) | 180 v = evalOn(g, (x,y)-> x^2 + (y-1)^2 + x*y) |
| 181 | 181 |
| 182 @test Qinv isa TensorMapping{T,2,2} where T | 182 @test Qinv isa TensorMapping{T,2,2} where T |
| 183 @test Qinv' isa TensorMapping{T,2,2} where T | 183 @test Qinv' isa TensorMapping{T,2,2} where T |
| 184 @test_broken collect(Qinv*(Q*v)) ≈ v | 184 @test_broken Qinv*(Q*v) ≈ v |
| 185 @test collect(Qinv*v) == collect(Qinv'*v) | 185 @test Qinv*v == Qinv'*v |
| 186 end | 186 end |
| 187 # | 187 # |
| 188 # @testset "BoundaryValue" begin | 188 # @testset "BoundaryValue" begin |
| 189 # op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 189 # op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 190 # g = EquidistantGrid((4,5), (0.0, 0.0), (1.0,1.0)) | 190 # g = EquidistantGrid((4,5), (0.0, 0.0), (1.0,1.0)) |
| 212 # @test size(e_w'*v) == (5,) | 212 # @test size(e_w'*v) == (5,) |
| 213 # @test size(e_e'*v) == (5,) | 213 # @test size(e_e'*v) == (5,) |
| 214 # @test size(e_s'*v) == (4,) | 214 # @test size(e_s'*v) == (4,) |
| 215 # @test size(e_n'*v) == (4,) | 215 # @test size(e_n'*v) == (4,) |
| 216 # | 216 # |
| 217 # @test collect(e_w'*v) == [10,7,4,1.0,1] | 217 # @test e_w'*v == [10,7,4,1.0,1] |
| 218 # @test collect(e_e'*v) == [13,10,7,4,4.0] | 218 # @test e_e'*v == [13,10,7,4,4.0] |
| 219 # @test collect(e_s'*v) == [10,11,12,13.0] | 219 # @test e_s'*v == [10,11,12,13.0] |
| 220 # @test collect(e_n'*v) == [1,2,3,4.0] | 220 # @test e_n'*v == [1,2,3,4.0] |
| 221 # | 221 # |
| 222 # g_x = [1,2,3,4.0] | 222 # g_x = [1,2,3,4.0] |
| 223 # g_y = [5,4,3,2,1.0] | 223 # g_y = [5,4,3,2,1.0] |
| 224 # | 224 # |
| 225 # G_w = zeros(Float64, (4,5)) | 225 # G_w = zeros(Float64, (4,5)) |
| 238 # @test size(e_e*g_y) == (UnknownDim,5) | 238 # @test size(e_e*g_y) == (UnknownDim,5) |
| 239 # @test size(e_s*g_x) == (4,UnknownDim) | 239 # @test size(e_s*g_x) == (4,UnknownDim) |
| 240 # @test size(e_n*g_x) == (4,UnknownDim) | 240 # @test size(e_n*g_x) == (4,UnknownDim) |
| 241 # | 241 # |
| 242 # # These tests should be moved to where they are possible (i.e we know what the grid should be) | 242 # # These tests should be moved to where they are possible (i.e we know what the grid should be) |
| 243 # @test_broken collect(e_w*g_y) == G_w | 243 # @test_broken e_w*g_y == G_w |
| 244 # @test_broken collect(e_e*g_y) == G_e | 244 # @test_broken e_e*g_y == G_e |
| 245 # @test_broken collect(e_s*g_x) == G_s | 245 # @test_broken e_s*g_x == G_s |
| 246 # @test_broken collect(e_n*g_x) == G_n | 246 # @test_broken e_n*g_x == G_n |
| 247 # end | 247 # end |
| 248 # | 248 # |
| 249 # @testset "NormalDerivative" begin | 249 # @testset "NormalDerivative" begin |
| 250 # op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 250 # op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 251 # g = EquidistantGrid((5,6), (0.0, 0.0), (4.0,5.0)) | 251 # g = EquidistantGrid((5,6), (0.0, 0.0), (4.0,5.0)) |
| 271 # @test size(d_w'*v) == (6,) | 271 # @test size(d_w'*v) == (6,) |
| 272 # @test size(d_e'*v) == (6,) | 272 # @test size(d_e'*v) == (6,) |
| 273 # @test size(d_s'*v) == (5,) | 273 # @test size(d_s'*v) == (5,) |
| 274 # @test size(d_n'*v) == (5,) | 274 # @test size(d_n'*v) == (5,) |
| 275 # | 275 # |
| 276 # @test collect(d_w'*v) ≈ v∂x[1,:] | 276 # @test d_w'*v ≈ v∂x[1,:] |
| 277 # @test collect(d_e'*v) ≈ v∂x[5,:] | 277 # @test d_e'*v ≈ v∂x[5,:] |
| 278 # @test collect(d_s'*v) ≈ v∂y[:,1] | 278 # @test d_s'*v ≈ v∂y[:,1] |
| 279 # @test collect(d_n'*v) ≈ v∂y[:,6] | 279 # @test d_n'*v ≈ v∂y[:,6] |
| 280 # | 280 # |
| 281 # | 281 # |
| 282 # d_x_l = zeros(Float64, 5) | 282 # d_x_l = zeros(Float64, 5) |
| 283 # d_x_u = zeros(Float64, 5) | 283 # d_x_u = zeros(Float64, 5) |
| 284 # for i ∈ eachindex(d_x_l) | 284 # for i ∈ eachindex(d_x_l) |
| 315 # @test size(d_e*g_y) == (UnknownDim,6) | 315 # @test size(d_e*g_y) == (UnknownDim,6) |
| 316 # @test size(d_s*g_x) == (5,UnknownDim) | 316 # @test size(d_s*g_x) == (5,UnknownDim) |
| 317 # @test size(d_n*g_x) == (5,UnknownDim) | 317 # @test size(d_n*g_x) == (5,UnknownDim) |
| 318 # | 318 # |
| 319 # # These tests should be moved to where they are possible (i.e we know what the grid should be) | 319 # # These tests should be moved to where they are possible (i.e we know what the grid should be) |
| 320 # @test_broken collect(d_w*g_y) ≈ G_w | 320 # @test_broken d_w*g_y ≈ G_w |
| 321 # @test_broken collect(d_e*g_y) ≈ G_e | 321 # @test_broken d_e*g_y ≈ G_e |
| 322 # @test_broken collect(d_s*g_x) ≈ G_s | 322 # @test_broken d_s*g_x ≈ G_s |
| 323 # @test_broken collect(d_n*g_x) ≈ G_n | 323 # @test_broken d_n*g_x ≈ G_n |
| 324 # end | 324 # end |
| 325 # | 325 # |
| 326 # @testset "BoundaryQuadrature" begin | 326 # @testset "BoundaryQuadrature" begin |
| 327 # op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 327 # op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
| 328 # g = EquidistantGrid((10,11), (0.0, 0.0), (1.0,1.0)) | 328 # g = EquidistantGrid((10,11), (0.0, 0.0), (1.0,1.0)) |
| 360 # @test size(H_w*v_w) == (11,) | 360 # @test size(H_w*v_w) == (11,) |
| 361 # @test size(H_e*v_e) == (11,) | 361 # @test size(H_e*v_e) == (11,) |
| 362 # @test size(H_s*v_s) == (10,) | 362 # @test size(H_s*v_s) == (10,) |
| 363 # @test size(H_n*v_n) == (10,) | 363 # @test size(H_n*v_n) == (10,) |
| 364 # | 364 # |
| 365 # @test collect(H_w*v_w) ≈ q_y.*v_w | 365 # @test H_w*v_w ≈ q_y.*v_w |
| 366 # @test collect(H_e*v_e) ≈ q_y.*v_e | 366 # @test H_e*v_e ≈ q_y.*v_e |
| 367 # @test collect(H_s*v_s) ≈ q_x.*v_s | 367 # @test H_s*v_s ≈ q_x.*v_s |
| 368 # @test collect(H_n*v_n) ≈ q_x.*v_n | 368 # @test H_n*v_n ≈ q_x.*v_n |
| 369 # | 369 # |
| 370 # @test collect(H_w'*v_w) == collect(H_w'*v_w) | 370 # @test H_w'*v_w == H_w'*v_w |
| 371 # @test collect(H_e'*v_e) == collect(H_e'*v_e) | 371 # @test H_e'*v_e == H_e'*v_e |
| 372 # @test collect(H_s'*v_s) == collect(H_s'*v_s) | 372 # @test H_s'*v_s == H_s'*v_s |
| 373 # @test collect(H_n'*v_n) == collect(H_n'*v_n) | 373 # @test H_n'*v_n == H_n'*v_n |
| 374 # end | 374 # end |
| 375 | 375 |
| 376 end | 376 end |
