comparison test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 978:1a05009e731b feature/first_derivative

Add tests for constructors
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 15 Mar 2022 21:17:58 +0100
parents ba023fc09961
children b90446eb5f27
comparison
equal deleted inserted replaced
974:ba023fc09961 978:1a05009e731b
1 using Test 1 using Test
2
2 3
3 using Sbplib.SbpOperators 4 using Sbplib.SbpOperators
4 using Sbplib.Grids 5 using Sbplib.Grids
6 using Sbplib.LazyTensors
5 7
6 using Sbplib.SbpOperators: closure_size 8 using Sbplib.SbpOperators: closure_size, Stencil
7 9
8 """ 10 """
9 monomial(x,k) 11 monomial(x,k)
10 12
11 Evaluates ``x^k/k!` with the convetion that it is ``0`` for all ``k<0``. 13 Evaluates ``x^k/k!` with the convetion that it is ``0`` for all ``k<0``.
17 end 19 end
18 x^k/factorial(k) 20 x^k/factorial(k)
19 end 21 end
20 22
21 @testset "first_derivative" begin 23 @testset "first_derivative" begin
22 @testset "accuracy" begin 24 @testset "Constructors" begin
25 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2)
26
27 g₁ = EquidistantGrid(11, 0., 1.)
28 g₂ = EquidistantGrid((11,14), (0.,1.), (1.,3.))
29
30 @test first_derivative(g₁, stencil_set, 1) isa TensorMapping{Float64,1,1}
31 @test first_derivative(g₂, stencil_set, 2) isa TensorMapping{Float64,2,2}
32
33 interior_stencil = CenteredStencil(-1,0,1)
34 closure_stencils = [Stencil(-1,1, center=1)]
35
36 @test first_derivative(g₁, interior_stencil, closure_stencils, 1) isa TensorMapping{Float64,1,1}
37 @test first_derivative(g₂, interior_stencil, closure_stencils, 2) isa TensorMapping{Float64,2,2}
38 end
39
40 @testset "Accuracy" begin
23 N = 20 41 N = 20
24 g = EquidistantGrid(N, 0//1,2//1) 42 g = EquidistantGrid(N, 0//1,2//1)
25 @testset for order ∈ [2,4] 43 @testset for order ∈ [2,4]
26 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) 44 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order)
27 D₁ = first_derivative(g, stencil_set, 1) 45 D₁ = first_derivative(g, stencil_set, 1)
28 46
29 @testset "boundary accuracy $k" for k ∈ 0:order÷2 47 @testset "boundary x^$k" for k ∈ 0:order÷2
30 v = evalOn(g, x->monomial(x,k)) 48 v = evalOn(g, x->monomial(x,k))
31 49
32 @testset for i ∈ 1:closure_size(D₁) 50 @testset for i ∈ 1:closure_size(D₁)
33 x, = points(g)[i] 51 x, = points(g)[i]
34 @test (D₁*v)[i] == monomial(x,k-1) 52 @test (D₁*v)[i] == monomial(x,k-1)
38 x, = points(g)[i] 56 x, = points(g)[i]
39 @test (D₁*v)[i] == monomial(x,k-1) 57 @test (D₁*v)[i] == monomial(x,k-1)
40 end 58 end
41 end 59 end
42 60
43 @testset "interior accuracy $k" for k ∈ 0:order 61 @testset "interior x^$k" for k ∈ 0:order
44 v = evalOn(g, x->monomial(x,k)) 62 v = evalOn(g, x->monomial(x,k))
45 63
46 x, = points(g)[10] 64 x, = points(g)[10]
47 @test (D₁*v)[10] == monomial(x,k-1) 65 @test (D₁*v)[10] == monomial(x,k-1)
48 end 66 end