Mercurial > repos > public > sbplib_julia
annotate test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 1285:7d52c4835d15 refactor/grids
Skip broken testsets
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 01 Mar 2023 09:06:15 +0100 |
parents | c94a12327737 |
children | 356ec6a72974 |
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 |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
3 |
972
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 using Sbplib.SbpOperators |
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 using Sbplib.Grids |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
6 using Sbplib.LazyTensors |
972
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 |
983
5bfc03cf3ba7
Add testing for VolumeOperator
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
979
diff
changeset
|
8 using Sbplib.SbpOperators: closure_size, Stencil, VolumeOperator |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
9 |
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 monomial(x,k) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
12 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
13 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
|
14 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
|
15 """ |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
16 function monomial(x,k) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
17 if k < 0 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
18 return zero(x) |
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 x^k/factorial(k) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
21 end |
1158
c94a12327737
Disregard review comments about multi-d tests.
Jonatan Werpers <jonatan@werpers.com>
parents:
1153
diff
changeset
|
22 |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
23 @testset "first_derivative" begin |
1285
7d52c4835d15
Skip broken testsets
Jonatan Werpers <jonatan@werpers.com>
parents:
1158
diff
changeset
|
24 @test_skip @testset "Constructors" begin |
1018
5ec49dd2c7c4
Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
990
diff
changeset
|
25 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2) |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
26 |
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
27 g₁ = EquidistantGrid(11, 0., 1.) |
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
28 g₂ = EquidistantGrid((11,14), (0.,1.), (1.,3.)) |
983
5bfc03cf3ba7
Add testing for VolumeOperator
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
979
diff
changeset
|
29 |
995 | 30 @test first_derivative(g₁, stencil_set, 1) isa LazyTensor{Float64,1,1} |
31 @test first_derivative(g₂, stencil_set, 2) isa LazyTensor{Float64,2,2} | |
990
b6238afd3bb0
Add methods for creating derivative operators in 1D from stencil sets without providing directions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
989
diff
changeset
|
32 @test first_derivative(g₁, stencil_set, 1) == first_derivative(g₁, stencil_set) |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
33 |
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
34 interior_stencil = CenteredStencil(-1,0,1) |
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
35 closure_stencils = [Stencil(-1,1, center=1)] |
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
36 |
995 | 37 @test first_derivative(g₁, interior_stencil, closure_stencils, 1) isa LazyTensor{Float64,1,1} |
983
5bfc03cf3ba7
Add testing for VolumeOperator
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
979
diff
changeset
|
38 @test first_derivative(g₁, interior_stencil, closure_stencils, 1) isa VolumeOperator |
990
b6238afd3bb0
Add methods for creating derivative operators in 1D from stencil sets without providing directions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
989
diff
changeset
|
39 @test first_derivative(g₁, interior_stencil, closure_stencils, 1) == first_derivative(g₁, interior_stencil, closure_stencils) |
995 | 40 @test first_derivative(g₂, interior_stencil, closure_stencils, 2) isa LazyTensor{Float64,2,2} |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
41 end |
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
42 |
1285
7d52c4835d15
Skip broken testsets
Jonatan Werpers <jonatan@werpers.com>
parents:
1158
diff
changeset
|
43 @test_skip @testset "Accuracy conditions" begin |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
44 N = 20 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
45 g = EquidistantGrid(N, 0//1,2//1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
46 @testset for order ∈ [2,4] |
1018
5ec49dd2c7c4
Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
990
diff
changeset
|
47 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
48 D₁ = first_derivative(g, stencil_set, 1) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
49 |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
50 @testset "boundary x^$k" for k ∈ 0:order÷2 |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
51 v = evalOn(g, x->monomial(x,k)) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
52 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
53 @testset for i ∈ 1:closure_size(D₁) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
54 x, = points(g)[i] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
55 @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
|
56 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
57 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
58 @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
|
59 x, = points(g)[i] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
60 @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
|
61 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
62 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
63 |
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
64 @testset "interior x^$k" for k ∈ 0:order |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
65 v = evalOn(g, x->monomial(x,k)) |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
66 |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
67 x, = points(g)[10] |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
68 @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
|
69 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
70 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
71 end |
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
72 |
1285
7d52c4835d15
Skip broken testsets
Jonatan Werpers <jonatan@werpers.com>
parents:
1158
diff
changeset
|
73 @test_skip @testset "Accuracy on function" begin |
1046
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
74 # 1D |
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
75 g = EquidistantGrid(30, 0.,1.) |
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
76 v = evalOn(g, x->exp(x)) |
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
77 @testset for (order, tol) ∈ [(2, 6e-3),(4, 2e-4)] |
1018
5ec49dd2c7c4
Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
990
diff
changeset
|
78 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
79 D₁ = first_derivative(g, stencil_set, 1) |
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
80 |
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
81 @test D₁*v ≈ v rtol=tol |
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
82 end |
1046
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
83 |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
84 # 2D |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
85 g = EquidistantGrid((30,60), (0.,0.),(1.,2.)) |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
86 v = evalOn(g, (x,y)->exp(0.8x+1.2*y)) |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
87 @testset for (order, tol) ∈ [(2, 6e-3),(4, 3e-4)] |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
88 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
89 Dx = first_derivative(g, stencil_set, 1) |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
90 Dy = first_derivative(g, stencil_set, 2) |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
91 |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
92 @test Dx*v ≈ 0.8v rtol=tol |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
93 @test Dy*v ≈ 1.2v rtol=tol |
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
94 end |
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
95 end |
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
96 end |
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
97 |