comparison test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 1858:4a9be96f2569 feature/documenter_logo

Merge default
author Jonatan Werpers <jonatan@werpers.com>
date Sun, 12 Jan 2025 21:18:44 +0100
parents 471a948cd2b2
children
comparison
equal deleted inserted replaced
1857:ffde7dad9da5 1858:4a9be96f2569
1 using Test
2
3
4 using Diffinitive.SbpOperators
5 using Diffinitive.Grids
6 using Diffinitive.LazyTensors
7
8 using Diffinitive.SbpOperators: closure_size, Stencil, VolumeOperator
9
10 @testset "first_derivative" begin
11 @testset "Constructors" begin
12 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2)
13
14 g₁ = equidistant_grid(0., 1., 11)
15 g₂ = equidistant_grid((0.,1.), (1.,3.), 11, 14)
16
17 @test first_derivative(g₁, stencil_set) isa LazyTensor{Float64,1,1}
18 @test first_derivative(g₂, stencil_set, 2) isa LazyTensor{Float64,2,2}
19
20 interior_stencil = CenteredStencil(-1,0,1)
21 closure_stencils = [Stencil(-1,1, center=1)]
22
23 @test first_derivative(g₁, interior_stencil, closure_stencils) isa LazyTensor{Float64,1,1}
24 end
25
26 @testset "Accuracy conditions" begin
27 N = 20
28 g = equidistant_grid(0//1, 2//1, N)
29
30 monomial(x,k) = k < 0 ? zero(x) : x^k/factorial(k)
31 @testset for order ∈ [2,4]
32 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order)
33 D₁ = first_derivative(g, stencil_set)
34
35 @testset "boundary x^$k" for k ∈ 0:order÷2
36 v = eval_on(g, x->monomial(x,k))
37
38 @testset for i ∈ 1:closure_size(D₁)
39 x, = g[i]
40 @test (D₁*v)[i] == monomial(x,k-1)
41 end
42
43 @testset for i ∈ (N-closure_size(D₁)+1):N
44 x, = g[i]
45 @test (D₁*v)[i] == monomial(x,k-1)
46 end
47 end
48
49 @testset "interior x^$k" for k ∈ 0:order
50 v = eval_on(g, x->monomial(x,k))
51
52 x, = g[10]
53 @test (D₁*v)[10] == monomial(x,k-1)
54 end
55 end
56 end
57
58 @testset "Accuracy on function" begin
59 @testset "1D" begin
60 g = equidistant_grid(0., 1., 30)
61 v = eval_on(g, x->exp(x))
62 @testset for (order, tol) ∈ [(2, 6e-3),(4, 2e-4)]
63 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order)
64 D₁ = first_derivative(g, stencil_set)
65
66 @test D₁*v ≈ v rtol=tol
67 end
68 end
69
70 @testset "2D" begin
71 g = equidistant_grid((0.,0.),(1.,2.), 30, 60)
72 v = eval_on(g, (x,y)->exp(0.8x+1.2*y))
73 @testset for (order, tol) ∈ [(2, 6e-3),(4, 3e-4)]
74 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order)
75 Dx = first_derivative(g, stencil_set, 1)
76 Dy = first_derivative(g, stencil_set, 2)
77
78 @test Dx*v ≈ 0.8v rtol=tol
79 @test Dy*v ≈ 1.2v rtol=tol
80 end
81 end
82 end
83 end
84