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