Mercurial > repos > public > sbplib_julia
changeset 1692:de2c4b2663b4 feature/sbp_operators/laplace_curvilinear
Add accuracy tests for normal derivative
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 26 Aug 2024 16:15:25 +0200 |
parents | b30db2ea34ed |
children | c7eee3952dcd |
files | test/SbpOperators/boundaryops/normal_derivative_test.jl |
diffstat | 1 files changed, 20 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/test/SbpOperators/boundaryops/normal_derivative_test.jl Sun Jun 30 15:57:22 2024 +0200 +++ b/test/SbpOperators/boundaryops/normal_derivative_test.jl Mon Aug 26 16:15:25 2024 +0200 @@ -7,6 +7,7 @@ import Sbplib.SbpOperators.BoundaryOperator using StaticArrays +using LinearAlgebra @testset "normal_derivative" begin stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) @@ -106,27 +107,28 @@ end @testset "Accuracy" begin - v = map(x̄ -> NaN, mg) - dₙv = map(x̄ -> NaN, mg) - - @testset "2nd order" begin - stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) - d_w, d_e, d_s, d_n = normal_derivative.(Ref(mg), Ref(stencil_set), boundary_identifiers(mg)) - - @test_broken d_w*v ≈ dₙv atol = 1e-13 - @test_broken d_e*v ≈ dₙv atol = 1e-13 - @test_broken d_s*v ≈ dₙv atol = 1e-13 - @test_broken d_n*v ≈ dₙv atol = 1e-13 + v = function(x̄) + sin(norm(x̄+@SVector[1,1])) + end + ∇v = function(x̄) + ȳ = x̄+@SVector[1,1] + cos(norm(ȳ))*(ȳ/norm(ȳ)) end - @testset "4th order" begin - stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) - d_w, d_e, d_s, d_n = normal_derivative.(Ref(mg), Ref(stencil_set), boundary_identifiers(mg)) + mg = equidistant_grid(c, 80,80) + v̄ = map(v, mg) + + @testset for (order, atol) ∈ [(2,4e-2),(4,2e-3)] + stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=order) - @test_broken d_w*v ≈ dₙv atol = 1e-13 - @test_broken d_e*v ≈ dₙv atol = 1e-13 - @test_broken d_s*v ≈ dₙv atol = 1e-13 - @test_broken d_n*v ≈ dₙv atol = 1e-13 + @testset for bId ∈ boundary_identifiers(mg) + ∂ₙv = map(boundary_grid(mg,bId),normal(mg,bId)) do x̄,n̂ + n̂⋅∇v(x̄) + end + + dₙ = normal_derivative(mg, stencil_set, bId) + @test dₙ*v̄ ≈ ∂ₙv atol=atol + end end end end