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