Mercurial > repos > public > sbplib_julia
comparison test/testSbpOperators.jl @ 697:1b3b8f82349e refactor/operator_naming
Update tests for inner_product and inverse_inner_product
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sun, 14 Feb 2021 13:49:44 +0100 |
parents | 6ab473e0ea80 |
children | 5ddf28ddee18 |
comparison
equal
deleted
inserted
replaced
696:0bec3c4e78c0 | 697:1b3b8f82349e |
---|---|
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 "Quadrature diagonal" begin | 396 @testset "Diagonal-stencil inner_product" begin |
397 Lx = π/2. | 397 Lx = π/2. |
398 Ly = Float64(π) | 398 Ly = Float64(π) |
399 Lz = 1. | 399 Lz = 1. |
400 g_1D = EquidistantGrid(77, 0.0, Lx) | 400 g_1D = EquidistantGrid(77, 0.0, Lx) |
401 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)) | 402 g_3D = EquidistantGrid((10,10, 10), (0.0, 0.0, 0.0), (Lx,Ly,Lz)) |
403 integral(H,v) = sum(H*v) | 403 integral(H,v) = sum(H*v) |
404 @testset "quadrature" begin | 404 @testset "inner_product" begin |
405 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) |
406 @testset "0D" begin | 406 @testset "0D" begin |
407 H = quadrature(EquidistantGrid{Float64}(),op.quadratureClosure) | 407 H = inner_product(EquidistantGrid{Float64}(),op.quadratureClosure) |
408 @test H == IdentityMapping{Float64}() | 408 @test H == IdentityMapping{Float64}() |
409 @test H isa TensorMapping{T,0,0} where T | 409 @test H isa TensorMapping{T,0,0} where T |
410 end | 410 end |
411 @testset "1D" begin | 411 @testset "1D" begin |
412 H = quadrature(g_1D,op.quadratureClosure) | 412 H = inner_product(g_1D,op.quadratureClosure) |
413 inner_stencil = CenteredStencil(1.) | 413 inner_stencil = CenteredStencil(1.) |
414 @test H == quadrature(g_1D,op.quadratureClosure,inner_stencil) | 414 @test H == inner_product(g_1D,op.quadratureClosure,inner_stencil) |
415 @test H isa TensorMapping{T,1,1} where T | 415 @test H isa TensorMapping{T,1,1} where T |
416 end | 416 end |
417 @testset "2D" begin | 417 @testset "2D" begin |
418 H = quadrature(g_2D,op.quadratureClosure) | 418 H = inner_product(g_2D,op.quadratureClosure) |
419 H_x = quadrature(restrict(g_2D,1),op.quadratureClosure) | 419 H_x = inner_product(restrict(g_2D,1),op.quadratureClosure) |
420 H_y = quadrature(restrict(g_2D,2),op.quadratureClosure) | 420 H_y = inner_product(restrict(g_2D,2),op.quadratureClosure) |
421 @test H == H_x⊗H_y | 421 @test H == H_x⊗H_y |
422 @test H isa TensorMapping{T,2,2} where T | 422 @test H isa TensorMapping{T,2,2} where T |
423 end | 423 end |
424 end | 424 end |
425 | 425 |
426 @testset "Sizes" begin | 426 @testset "Sizes" begin |
427 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) |
428 @testset "1D" begin | 428 @testset "1D" begin |
429 H = quadrature(g_1D,op.quadratureClosure) | 429 H = inner_product(g_1D,op.quadratureClosure) |
430 @test domain_size(H) == size(g_1D) | 430 @test domain_size(H) == size(g_1D) |
431 @test range_size(H) == size(g_1D) | 431 @test range_size(H) == size(g_1D) |
432 end | 432 end |
433 @testset "2D" begin | 433 @testset "2D" begin |
434 H = quadrature(g_2D,op.quadratureClosure) | 434 H = inner_product(g_2D,op.quadratureClosure) |
435 @test domain_size(H) == size(g_2D) | 435 @test domain_size(H) == size(g_2D) |
436 @test range_size(H) == size(g_2D) | 436 @test range_size(H) == size(g_2D) |
437 end | 437 end |
438 end | 438 end |
439 | 439 |
446 end | 446 end |
447 u = evalOn(g_1D,x->sin(x)) | 447 u = evalOn(g_1D,x->sin(x)) |
448 | 448 |
449 @testset "2nd order" begin | 449 @testset "2nd order" begin |
450 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) |
451 H = quadrature(g_1D,op.quadratureClosure) | 451 H = inner_product(g_1D,op.quadratureClosure) |
452 for i = 1:2 | 452 for i = 1:2 |
453 @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 |
454 end | 454 end |
455 @test integral(H,u) ≈ 1. rtol = 1e-4 | 455 @test integral(H,u) ≈ 1. rtol = 1e-4 |
456 end | 456 end |
457 | 457 |
458 @testset "4th order" begin | 458 @testset "4th order" begin |
459 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) |
460 H = quadrature(g_1D,op.quadratureClosure) | 460 H = inner_product(g_1D,op.quadratureClosure) |
461 for i = 1:4 | 461 for i = 1:4 |
462 @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 |
463 end | 463 end |
464 @test integral(H,u) ≈ 1. rtol = 1e-8 | 464 @test integral(H,u) ≈ 1. rtol = 1e-8 |
465 end | 465 end |
469 b = 2.1 | 469 b = 2.1 |
470 v = b*ones(Float64, size(g_2D)) | 470 v = b*ones(Float64, size(g_2D)) |
471 u = evalOn(g_2D,(x,y)->sin(x)+cos(y)) | 471 u = evalOn(g_2D,(x,y)->sin(x)+cos(y)) |
472 @testset "2nd order" begin | 472 @testset "2nd order" begin |
473 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) |
474 H = quadrature(g_2D,op.quadratureClosure) | 474 H = inner_product(g_2D,op.quadratureClosure) |
475 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13 | 475 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13 |
476 @test integral(H,u) ≈ π rtol = 1e-4 | 476 @test integral(H,u) ≈ π rtol = 1e-4 |
477 end | 477 end |
478 @testset "4th order" begin | 478 @testset "4th order" begin |
479 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) |
480 H = quadrature(g_2D,op.quadratureClosure) | 480 H = inner_product(g_2D,op.quadratureClosure) |
481 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13 | 481 @test integral(H,v) ≈ b*Lx*Ly rtol = 1e-13 |
482 @test integral(H,u) ≈ π rtol = 1e-8 | 482 @test integral(H,u) ≈ π rtol = 1e-8 |
483 end | 483 end |
484 end | 484 end |
485 end | 485 end |
486 end | 486 end |
487 | 487 |
488 @testset "InverseDiagonalQuadrature" begin | 488 @testset "Diagonal-stencil inverse_inner_product" begin |
489 Lx = π/2. | 489 Lx = π/2. |
490 Ly = Float64(π) | 490 Ly = Float64(π) |
491 g_1D = EquidistantGrid(77, 0.0, Lx) | 491 g_1D = EquidistantGrid(77, 0.0, Lx) |
492 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) | 492 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) |
493 @testset "Constructors" begin | 493 @testset "inverse_inner_product" begin |
494 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) | 494 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) |
495 @testset "1D" begin | 495 @testset "1D" begin |
496 Hi = InverseDiagonalQuadrature(g_1D, op.quadratureClosure); | 496 Hi = inverse_inner_product(g_1D, op.quadratureClosure); |
497 inner_stencil = CenteredStencil(1.) | 497 inner_stencil = CenteredStencil(1.) |
498 closures = () | 498 closures = () |
499 for i = 1:length(op.quadratureClosure) | 499 for i = 1:length(op.quadratureClosure) |
500 closures = (closures...,Stencil(op.quadratureClosure[i].range,1.0./op.quadratureClosure[i].weights)) | 500 closures = (closures...,Stencil(op.quadratureClosure[i].range,1.0./op.quadratureClosure[i].weights)) |
501 end | 501 end |
502 @test Hi == InverseQuadrature(g_1D,inner_stencil,closures) | 502 @test Hi == inverse_inner_product(g_1D,closures,inner_stencil) |
503 @test Hi isa TensorMapping{T,1,1} where T | 503 @test Hi isa TensorMapping{T,1,1} where T |
504 end | 504 end |
505 @testset "2D" begin | 505 @testset "2D" begin |
506 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure) | 506 Hi = inverse_inner_product(g_2D,op.quadratureClosure) |
507 Hi_x = InverseDiagonalQuadrature(restrict(g_2D,1),op.quadratureClosure) | 507 Hi_x = inverse_inner_product(restrict(g_2D,1),op.quadratureClosure) |
508 Hi_y = InverseDiagonalQuadrature(restrict(g_2D,2),op.quadratureClosure) | 508 Hi_y = inverse_inner_product(restrict(g_2D,2),op.quadratureClosure) |
509 @test Hi == Hi_x⊗Hi_y | 509 @test Hi == Hi_x⊗Hi_y |
510 @test Hi isa TensorMapping{T,2,2} where T | 510 @test Hi isa TensorMapping{T,2,2} where T |
511 end | 511 end |
512 end | 512 end |
513 | 513 |
514 @testset "Sizes" begin | 514 @testset "Sizes" begin |
515 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) | 515 op = read_D2_operator(sbp_operators_path()*"standard_diagonal.toml"; order=4) |
516 @testset "1D" begin | 516 @testset "1D" begin |
517 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure) | 517 Hi = inverse_inner_product(g_1D,op.quadratureClosure) |
518 @test domain_size(Hi) == size(g_1D) | 518 @test domain_size(Hi) == size(g_1D) |
519 @test range_size(Hi) == size(g_1D) | 519 @test range_size(Hi) == size(g_1D) |
520 end | 520 end |
521 @testset "2D" begin | 521 @testset "2D" begin |
522 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure) | 522 Hi = inverse_inner_product(g_2D,op.quadratureClosure) |
523 @test domain_size(Hi) == size(g_2D) | 523 @test domain_size(Hi) == size(g_2D) |
524 @test range_size(Hi) == size(g_2D) | 524 @test range_size(Hi) == size(g_2D) |
525 end | 525 end |
526 end | 526 end |
527 | 527 |
529 @testset "1D" begin | 529 @testset "1D" begin |
530 v = evalOn(g_1D,x->sin(x)) | 530 v = evalOn(g_1D,x->sin(x)) |
531 u = evalOn(g_1D,x->x^3-x^2+1) | 531 u = evalOn(g_1D,x->x^3-x^2+1) |
532 @testset "2nd order" begin | 532 @testset "2nd order" begin |
533 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) |
534 H = quadrature(g_1D,op.quadratureClosure) | 534 H = inner_product(g_1D,op.quadratureClosure) |
535 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure) | 535 Hi = inverse_inner_product(g_1D,op.quadratureClosure) |
536 @test Hi*H*v ≈ v rtol = 1e-15 | 536 @test Hi*H*v ≈ v rtol = 1e-15 |
537 @test Hi*H*u ≈ u rtol = 1e-15 | 537 @test Hi*H*u ≈ u rtol = 1e-15 |
538 end | 538 end |
539 @testset "4th order" begin | 539 @testset "4th order" begin |
540 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) |
541 H = quadrature(g_1D,op.quadratureClosure) | 541 H = inner_product(g_1D,op.quadratureClosure) |
542 Hi = InverseDiagonalQuadrature(g_1D,op.quadratureClosure) | 542 Hi = inverse_inner_product(g_1D,op.quadratureClosure) |
543 @test Hi*H*v ≈ v rtol = 1e-15 | 543 @test Hi*H*v ≈ v rtol = 1e-15 |
544 @test Hi*H*u ≈ u rtol = 1e-15 | 544 @test Hi*H*u ≈ u rtol = 1e-15 |
545 end | 545 end |
546 end | 546 end |
547 @testset "2D" begin | 547 @testset "2D" begin |
548 v = evalOn(g_2D,(x,y)->sin(x)+cos(y)) | 548 v = evalOn(g_2D,(x,y)->sin(x)+cos(y)) |
549 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)) |
550 @testset "2nd order" begin | 550 @testset "2nd order" begin |
551 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) |
552 H = quadrature(g_2D,op.quadratureClosure) | 552 H = inner_product(g_2D,op.quadratureClosure) |
553 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure) | 553 Hi = inverse_inner_product(g_2D,op.quadratureClosure) |
554 @test Hi*H*v ≈ v rtol = 1e-15 | 554 @test Hi*H*v ≈ v rtol = 1e-15 |
555 @test Hi*H*u ≈ u rtol = 1e-15 | 555 @test Hi*H*u ≈ u rtol = 1e-15 |
556 end | 556 end |
557 @testset "4th order" begin | 557 @testset "4th order" begin |
558 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) |
559 H = quadrature(g_2D,op.quadratureClosure) | 559 H = inner_product(g_2D,op.quadratureClosure) |
560 Hi = InverseDiagonalQuadrature(g_2D,op.quadratureClosure) | 560 Hi = inverse_inner_product(g_2D,op.quadratureClosure) |
561 @test Hi*H*v ≈ v rtol = 1e-15 | 561 @test Hi*H*v ≈ v rtol = 1e-15 |
562 @test Hi*H*u ≈ u rtol = 1e-15 | 562 @test Hi*H*u ≈ u rtol = 1e-15 |
563 end | 563 end |
564 end | 564 end |
565 end | 565 end |