comparison test/SbpOperators/boundaryops/normal_derivative_test.jl @ 1654:f4dc17cfafce feature/sbp_operators/laplace_curvilinear

Start adding normal derivative for mapped grid
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 26 Jun 2024 14:41:50 +0200
parents 9e2228449a72
children b30db2ea34ed
comparison
equal deleted inserted replaced
1653:9e2228449a72 1654:f4dc17cfafce
3 using Sbplib.SbpOperators 3 using Sbplib.SbpOperators
4 using Sbplib.Grids 4 using Sbplib.Grids
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
9 using StaticArrays
8 10
9 @testset "normal_derivative" begin 11 @testset "normal_derivative" begin
10 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) 12 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
11 13
12 @testset "EquidistantGrid" begin 14 @testset "EquidistantGrid" begin
56 @test d_s*v ≈ -v∂y[:,1] atol = 1e-13 58 @test d_s*v ≈ -v∂y[:,1] atol = 1e-13
57 @test d_n*v ≈ v∂y[:,end] atol = 1e-13 59 @test d_n*v ≈ v∂y[:,end] atol = 1e-13
58 end 60 end
59 end 61 end
60 end 62 end
63
64 @testset "MappedGrid" begin
65 c = Chart(unitsquare()) do (ξ,η)
66 @SVector[2ξ + η*(1-η), 3η+(1+η/2)*ξ^2]
67 end
68 Grids.jacobian(c::typeof(c), (ξ,η)) = @SMatrix[2 1-2η; (2+η)*ξ 3+ξ^2/2]
69
70 mg = equidistant_grid(c, 10,13)
71
72 b_w, b_e, b_s, b_n = boundary_identifiers(mg)
73
74 @test_broken normal_derivative(mg, stencil_set, b_w) isa LazyTensor{<:Any, 1, 2}
75 @test_broken normal_derivative(mg, stencil_set, b_e) isa LazyTensor{<:Any, 1, 2}
76 @test_broken normal_derivative(mg, stencil_set, b_s) isa LazyTensor{<:Any, 1, 2}
77 @test_broken normal_derivative(mg, stencil_set, b_n) isa LazyTensor{<:Any, 1, 2}
78
79 @testset "Accuracy" begin
80 v = map(x̄ -> NaN, mg)
81 dₙv = map(x̄ -> NaN, mg)
82
83 @testset "2nd order" begin
84 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2)
85 d_w, d_e, d_s, d_n = normal_derivative.(Ref(mg), Ref(stencil_set), boundary_identifiers(mg))
86
87 @test_broken d_w*v ≈ dₙv atol = 1e-13
88 @test_broken d_e*v ≈ dₙv atol = 1e-13
89 @test_broken d_s*v ≈ dₙv atol = 1e-13
90 @test_broken d_n*v ≈ dₙv atol = 1e-13
91 end
92
93 @testset "4th order" begin
94 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
95 d_w, d_e, d_s, d_n = normal_derivative.(Ref(mg), Ref(stencil_set), boundary_identifiers(mg))
96
97 @test_broken d_w*v ≈ dₙv atol = 1e-13
98 @test_broken d_e*v ≈ dₙv atol = 1e-13
99 @test_broken d_s*v ≈ dₙv atol = 1e-13
100 @test_broken d_n*v ≈ dₙv atol = 1e-13
101 end
102 end
103 end
61 end 104 end