Mercurial > repos > public > sbplib_julia
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 |