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