comparison test/testSbpOperators.jl @ 694:6ab473e0ea80 refactor/operator_naming

Merging in default
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sat, 13 Feb 2021 16:07:46 +0100
parents 1accc3e051d0 04149e80e25c
children 1b3b8f82349e
comparison
equal deleted inserted replaced
690:1accc3e051d0 694:6ab473e0ea80
391 @test L*v ≈ Δv rtol = 5e-4 norm = l2 391 @test L*v ≈ Δv rtol = 5e-4 norm = l2
392 end 392 end
393 end 393 end
394 end 394 end
395 395
396 @testset "DiagonalQuadrature" begin 396 @testset "Quadrature diagonal" begin
397 Lx = π/2. 397 Lx = π/2.
398 Ly = Float64(π) 398 Ly = Float64(π)
399 Lz = 1.
399 g_1D = EquidistantGrid(77, 0.0, Lx) 400 g_1D = EquidistantGrid(77, 0.0, Lx)
400 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) 401 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly))
402 g_3D = EquidistantGrid((10,10, 10), (0.0, 0.0, 0.0), (Lx,Ly,Lz))
401 integral(H,v) = sum(H*v) 403 integral(H,v) = sum(H*v)
402 @testset "Constructors" begin 404 @testset "quadrature" begin
403 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 405 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
404 @testset "1D" begin 406 @testset "0D" begin
405 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 407 H = quadrature(EquidistantGrid{Float64}(),op.quadratureClosure)
408 @test H == IdentityMapping{Float64}()
409 @test H isa TensorMapping{T,0,0} where T
410 end
411 @testset "1D" begin
412 H = quadrature(g_1D,op.quadratureClosure)
406 inner_stencil = CenteredStencil(1.) 413 inner_stencil = CenteredStencil(1.)
407 @test H == Quadrature(g_1D,inner_stencil,op.quadratureClosure) 414 @test H == quadrature(g_1D,op.quadratureClosure,inner_stencil)
408 @test H isa TensorMapping{T,1,1} where T 415 @test H isa TensorMapping{T,1,1} where T
409 end 416 end
410 @testset "1D" begin 417 @testset "2D" begin
411 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 418 H = quadrature(g_2D,op.quadratureClosure)
412 H_x = DiagonalQuadrature(restrict(g_2D,1),op.quadratureClosure) 419 H_x = quadrature(restrict(g_2D,1),op.quadratureClosure)
413 H_y = DiagonalQuadrature(restrict(g_2D,2),op.quadratureClosure) 420 H_y = quadrature(restrict(g_2D,2),op.quadratureClosure)
414 @test H == H_x⊗H_y 421 @test H == H_x⊗H_y
415 @test H isa TensorMapping{T,2,2} where T 422 @test H isa TensorMapping{T,2,2} where T
416 end 423 end
417 end 424 end
418 425
419 @testset "Sizes" begin 426 @testset "Sizes" begin
420 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 427 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
421 @testset "1D" begin 428 @testset "1D" begin
422 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 429 H = quadrature(g_1D,op.quadratureClosure)
423 @test domain_size(H) == size(g_1D) 430 @test domain_size(H) == size(g_1D)
424 @test range_size(H) == size(g_1D) 431 @test range_size(H) == size(g_1D)
425 end 432 end
426 @testset "2D" begin 433 @testset "2D" begin
427 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 434 H = quadrature(g_2D,op.quadratureClosure)
428 @test domain_size(H) == size(g_2D) 435 @test domain_size(H) == size(g_2D)
429 @test range_size(H) == size(g_2D) 436 @test range_size(H) == size(g_2D)
430 end 437 end
431 end 438 end
432 439
439 end 446 end
440 u = evalOn(g_1D,x->sin(x)) 447 u = evalOn(g_1D,x->sin(x))
441 448
442 @testset "2nd order" begin 449 @testset "2nd order" begin
443 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2) 450 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
444 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 451 H = quadrature(g_1D,op.quadratureClosure)
445 for i = 1:2 452 for i = 1:2
446 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14 453 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14
447 end 454 end
448 @test integral(H,u) ≈ 1. rtol = 1e-4 455 @test integral(H,u) ≈ 1. rtol = 1e-4
449 end 456 end
450 457
451 @testset "4th order" begin 458 @testset "4th order" begin
452 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 459 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
453 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 460 H = quadrature(g_1D,op.quadratureClosure)
454 for i = 1:4 461 for i = 1:4
455 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14 462 @test integral(H,v[i]) ≈ v[i+1][end] - v[i+1][1] rtol = 1e-14
456 end 463 end
457 @test integral(H,u) ≈ 1. rtol = 1e-8 464 @test integral(H,u) ≈ 1. rtol = 1e-8
458 end 465 end
462 b = 2.1 469 b = 2.1
463 v = b*ones(Float64, size(g_2D)) 470 v = b*ones(Float64, size(g_2D))
464 u = evalOn(g_2D,(x,y)->sin(x)+cos(y)) 471 u = evalOn(g_2D,(x,y)->sin(x)+cos(y))
465 @testset "2nd order" begin 472 @testset "2nd order" begin
466 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2) 473 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
467 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 474 H = quadrature(g_2D,op.quadratureClosure)
468 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13 475 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13
469 @test integral(H,u) ≈ π rtol = 1e-4 476 @test integral(H,u) ≈ π rtol = 1e-4
470 end 477 end
471 @testset "4th order" begin 478 @testset "4th order" begin
472 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 479 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
473 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 480 H = quadrature(g_2D,op.quadratureClosure)
474 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13 481 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13
475 @test integral(H,u) ≈ π rtol = 1e-8 482 @test integral(H,u) ≈ π rtol = 1e-8
476 end 483 end
477 end 484 end
478 end 485 end
522 @testset "1D" begin 529 @testset "1D" begin
523 v = evalOn(g_1D,x->sin(x)) 530 v = evalOn(g_1D,x->sin(x))
524 u = evalOn(g_1D,x->x^3-x^2+1) 531 u = evalOn(g_1D,x->x^3-x^2+1)
525 @testset "2nd order" begin 532 @testset "2nd order" begin
526 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2) 533 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
527 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 534 H = quadrature(g_1D,op.quadratureClosure)
528 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure) 535 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure)
529 @test Hi*H*v ≈ v rtol = 1e-15 536 @test Hi*H*v ≈ v rtol = 1e-15
530 @test Hi*H*u ≈ u rtol = 1e-15 537 @test Hi*H*u ≈ u rtol = 1e-15
531 end 538 end
532 @testset "4th order" begin 539 @testset "4th order" begin
533 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 540 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
534 H = DiagonalQuadrature(g_1D,op.quadratureClosure) 541 H = quadrature(g_1D,op.quadratureClosure)
535 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure) 542 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure)
536 @test Hi*H*v ≈ v rtol = 1e-15 543 @test Hi*H*v ≈ v rtol = 1e-15
537 @test Hi*H*u ≈ u rtol = 1e-15 544 @test Hi*H*u ≈ u rtol = 1e-15
538 end 545 end
539 end 546 end
540 @testset "2D" begin 547 @testset "2D" begin
541 v = evalOn(g_2D,(x,y)->sin(x)+cos(y)) 548 v = evalOn(g_2D,(x,y)->sin(x)+cos(y))
542 u = evalOn(g_2D,(x,y)->x*y + x^5 - sqrt(y)) 549 u = evalOn(g_2D,(x,y)->x*y + x^5 - sqrt(y))
543 @testset "2nd order" begin 550 @testset "2nd order" begin
544 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2) 551 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=2)
545 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 552 H = quadrature(g_2D,op.quadratureClosure)
546 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure) 553 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure)
547 @test Hi*H*v ≈ v rtol = 1e-15 554 @test Hi*H*v ≈ v rtol = 1e-15
548 @test Hi*H*u ≈ u rtol = 1e-15 555 @test Hi*H*u ≈ u rtol = 1e-15
549 end 556 end
550 @testset "4th order" begin 557 @testset "4th order" begin
551 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) 558 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4)
552 H = DiagonalQuadrature(g_2D,op.quadratureClosure) 559 H = quadrature(g_2D,op.quadratureClosure)
553 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure) 560 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure)
554 @test Hi*H*v ≈ v rtol = 1e-15 561 @test Hi*H*v ≈ v rtol = 1e-15
555 @test Hi*H*u ≈ u rtol = 1e-15 562 @test Hi*H*u ≈ u rtol = 1e-15
556 end 563 end
557 end 564 end