comparison test/testSbpOperators.jl @ 641:5e50e9815732 feature/volume_and_boundary_operators

Merge testsets Accuracy and Application for DiagonalQuadrature, and fix bugs
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 04 Jan 2021 17:16:04 +0100
parents 08b2c7a2d063
children f4a16b403487
comparison
equal deleted inserted replaced
640:0e20bfef5cee 641:5e50e9815732
413 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) 413 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly))
414 integral(H,v) = sum(H*v) 414 integral(H,v) = sum(H*v)
415 @testset "Constructors" begin 415 @testset "Constructors" begin
416 @testset "1D" begin 416 @testset "1D" begin
417 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 417 H = DiagonalQuadrature(g_1D,op.quadratureClosure)
418 inner_stencil = Stencil((spacing(g_1D)[1],),center=1) 418 inner_stencil = Stencil((1.,),center=1)
419 H == Quadrature(g_1D,inner_stencil,op.quadratureClosure) 419 @test H == Quadrature(g_1D,inner_stencil,op.quadratureClosure)
420 @test H isa TensorMapping{T,1,1} where T 420 @test H isa TensorMapping{T,1,1} where T
421 end 421 end
422 @testset "1D" begin 422 @testset "1D" begin
423 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 423 H = DiagonalQuadrature(g_2D,op.quadratureClosure)
424 H_x = DiagonalQuadrature(restrict(g_2D,1),op.quadratureClosure) 424 H_x = DiagonalQuadrature(restrict(g_2D,1),op.quadratureClosure)
439 @test domain_size(H) == size(g_2D) 439 @test domain_size(H) == size(g_2D)
440 @test range_size(H) == size(g_2D) 440 @test range_size(H) == size(g_2D)
441 end 441 end
442 end 442 end
443 443
444 @testset "Application" begin 444 @testset "Accuracy" begin
445 @testset "1D" begin 445 @testset "1D" begin
446 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 446 v = ()
447 a = 3.2 447 for i = 0:4
448 v_1D = a*ones(Float64, size(g_1D)) 448 f_i(x) = 1/factorial(i)*x^i
449 u_1D = evalOn(g_1D,x->sin(x)) 449 v = (v...,evalOn(g_1D,f_i))
450 @test integral(H,v_1D) ≈ a*Lx rtol = 1e-13 450 end
451 @test integral(H,u_1D) ≈ 1. rtol = 1e-8 451 u = evalOn(g_1D,x->sin(x))
452 end 452
453 @testset "1D" begin 453 @testset "2nd order" begin
454 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 454 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
455 H = DiagonalQuadrature(g_1D,op.quadratureClosure)
456 for i = 1:2
457 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14
458 end
459 @test integral(H,u) ≈ 1. rtol = 1e-4
460 end
461
462 @testset "4th order" begin
463 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
464 H = DiagonalQuadrature(g_1D,op.quadratureClosure)
465 for i = 1:4
466 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14
467 end
468 @test integral(H,u) ≈ 1. rtol = 1e-8
469 end
470 end
471
472 @testset "2D" begin
455 b = 2.1 473 b = 2.1
456 v_2D = b*ones(Float64, size(g_2D)) 474 v = b*ones(Float64, size(g_2D))
457 u_2D = evalOn(g_2D,(x,y)->sin(x)+cos(y)) 475 u = evalOn(g_2D,(x,y)->sin(x)+cos(y))
458 @test integral(H,v_2D) ≈ b*Lx*Ly rtol = 1e-13 476 @testset "2nd order" begin
459 @test integral(H,u_2D) ≈ π rtol = 1e-8 477 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
460 end 478 H = DiagonalQuadrature(g_2D,op.quadratureClosure)
461 end 479 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13
462 480 @test integral(H,u) ≈ π rtol = 1e-4
463 @testset "Accuracy" begin
464 v = ()
465 for i = 0:4
466 f_i(x) = 1/factorial(i)*x^i
467 v = (v...,evalOn(g_1D,f_i))
468 end
469
470 @testset "2nd order" begin
471 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
472 H = DiagonalQuadrature(g_1D,op.quadratureClosure)
473 for i = 1:2
474 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14
475 end 481 end
476 end 482 @testset "4th order" begin
477 483 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
478 @testset "4th order" begin 484 H = DiagonalQuadrature(g_2D,op.quadratureClosure)
479 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 485 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13
480 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 486 @test integral(H,u) ≈ π rtol = 1e-8
481 for i = 1:4
482 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14
483 end 487 end
484 end 488 end
485 end 489 end
486 end 490 end
487 491