Mercurial > repos > public > sbplib_julia
annotate test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 974:ba023fc09961 feature/first_derivative
Add stencil_set method and accuracy tests
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 15 Mar 2022 07:29:41 +0100 |
parents | 803f60f461c1 |
children | 1a05009e731b |
rev | line source |
---|---|
972
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 using Test |
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 |
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 using Sbplib.SbpOperators |
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 using Sbplib.Grids |
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
6 using Sbplib.SbpOperators: closure_size |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
7 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
8 """ |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
9 monomial(x,k) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
10 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
11 Evaluates ``x^k/k!` with the convetion that it is ``0`` for all ``k<0``. |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
12 Has the property that ``d/dx monomial(x,k) = monomial(x,k-1)`` |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
13 """ |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
14 function monomial(x,k) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
15 if k < 0 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
16 return zero(x) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
17 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
18 x^k/factorial(k) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
19 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
20 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
21 @testset "first_derivative" begin |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
22 @testset "accuracy" begin |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
23 N = 20 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
24 g = EquidistantGrid(N, 0//1,2//1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
25 @testset for order ∈ [2,4] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
26 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
27 D₁ = first_derivative(g, stencil_set, 1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
28 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
29 @testset "boundary accuracy $k" for k ∈ 0:order÷2 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
30 v = evalOn(g, x->monomial(x,k)) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
31 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
32 @testset for i ∈ 1:closure_size(D₁) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
33 x, = points(g)[i] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
34 @test (D₁*v)[i] == monomial(x,k-1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
35 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
36 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
37 @testset for i ∈ (N-closure_size(D₁)+1):N |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
38 x, = points(g)[i] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
39 @test (D₁*v)[i] == monomial(x,k-1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
40 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
41 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
42 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
43 @testset "interior accuracy $k" for k ∈ 0:order |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
44 v = evalOn(g, x->monomial(x,k)) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
45 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
46 x, = points(g)[10] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
47 @test (D₁*v)[10] == monomial(x,k-1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
48 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
49 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
50 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
51 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
52 |