Mercurial > repos > public > sbplib_julia
comparison test/SbpOperators/boundaryops/normal_derivative_test.jl @ 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 | f3d7e2d7a43f |
comparison
equal
deleted
inserted
replaced
1680:b30db2ea34ed | 1692:de2c4b2663b4 |
---|---|
5 using Sbplib.LazyTensors | 5 using Sbplib.LazyTensors |
6 using Sbplib.RegionIndices | 6 using Sbplib.RegionIndices |
7 import Sbplib.SbpOperators.BoundaryOperator | 7 import Sbplib.SbpOperators.BoundaryOperator |
8 | 8 |
9 using StaticArrays | 9 using StaticArrays |
10 using LinearAlgebra | |
10 | 11 |
11 @testset "normal_derivative" begin | 12 @testset "normal_derivative" begin |
12 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) | 13 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) |
13 | 14 |
14 @testset "EquidistantGrid" begin | 15 @testset "EquidistantGrid" begin |
104 end | 105 end |
105 end | 106 end |
106 end | 107 end |
107 | 108 |
108 @testset "Accuracy" begin | 109 @testset "Accuracy" begin |
109 v = map(x̄ -> NaN, mg) | 110 v = function(x̄) |
110 dₙv = map(x̄ -> NaN, mg) | 111 sin(norm(x̄+@SVector[1,1])) |
111 | 112 end |
112 @testset "2nd order" begin | 113 ∇v = function(x̄) |
113 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) | 114 ȳ = x̄+@SVector[1,1] |
114 d_w, d_e, d_s, d_n = normal_derivative.(Ref(mg), Ref(stencil_set), boundary_identifiers(mg)) | 115 cos(norm(ȳ))*(ȳ/norm(ȳ)) |
115 | |
116 @test_broken d_w*v ≈ dₙv atol = 1e-13 | |
117 @test_broken d_e*v ≈ dₙv atol = 1e-13 | |
118 @test_broken d_s*v ≈ dₙv atol = 1e-13 | |
119 @test_broken d_n*v ≈ dₙv atol = 1e-13 | |
120 end | 116 end |
121 | 117 |
122 @testset "4th order" begin | 118 mg = equidistant_grid(c, 80,80) |
123 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) | 119 v̄ = map(v, mg) |
124 d_w, d_e, d_s, d_n = normal_derivative.(Ref(mg), Ref(stencil_set), boundary_identifiers(mg)) | |
125 | 120 |
126 @test_broken d_w*v ≈ dₙv atol = 1e-13 | 121 @testset for (order, atol) ∈ [(2,4e-2),(4,2e-3)] |
127 @test_broken d_e*v ≈ dₙv atol = 1e-13 | 122 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=order) |
128 @test_broken d_s*v ≈ dₙv atol = 1e-13 | 123 |
129 @test_broken d_n*v ≈ dₙv atol = 1e-13 | 124 @testset for bId ∈ boundary_identifiers(mg) |
125 ∂ₙv = map(boundary_grid(mg,bId),normal(mg,bId)) do x̄,n̂ | |
126 n̂⋅∇v(x̄) | |
127 end | |
128 | |
129 dₙ = normal_derivative(mg, stencil_set, bId) | |
130 @test dₙ*v̄ ≈ ∂ₙv atol=atol | |
131 end | |
130 end | 132 end |
131 end | 133 end |
132 end | 134 end |
133 end | 135 end |