annotate test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 1153:f1bb1b6d85dd refactor/sbpoperators/inflation

Review: Suggest changes to test and removal of conveninece constructor
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 25 Oct 2022 10:33:27 +0200
parents 157a78959e5d
children c94a12327737
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1153
f1bb1b6d85dd Review: Suggest changes to test and removal of conveninece constructor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1100
diff changeset
22 # Review:
f1bb1b6d85dd Review: Suggest changes to test and removal of conveninece constructor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1100
diff changeset
23 # If we test LazyTensor.inflation for e.g 1D-3D general tensors then we should only need to test
f1bb1b6d85dd Review: Suggest changes to test and removal of conveninece constructor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1100
diff changeset
24 # the 1D first derivative.
974
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
25 @testset "first_derivative" begin
978
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
26 @testset "Constructors" begin
1018
5ec49dd2c7c4 Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 990
diff changeset
27 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
28
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
29 g₁ = EquidistantGrid(11, 0., 1.)
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
30 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
31
995
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
32 @test first_derivative(g₁, stencil_set, 1) isa LazyTensor{Float64,1,1}
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
33 @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
34 @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
35
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
36 interior_stencil = CenteredStencil(-1,0,1)
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
37 closure_stencils = [Stencil(-1,1, center=1)]
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
38
995
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
39 @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
40 @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
41 @test first_derivative(g₁, interior_stencil, closure_stencils, 1) == first_derivative(g₁, interior_stencil, closure_stencils)
995
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
42 @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
43 end
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
44
979
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
45 @testset "Accuracy conditions" begin
974
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
46 N = 20
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
47 g = EquidistantGrid(N, 0//1,2//1)
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
48 @testset for order ∈ [2,4]
1018
5ec49dd2c7c4 Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 990
diff changeset
49 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
50 D₁ = first_derivative(g, stencil_set, 1)
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
51
978
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
52 @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
53 v = evalOn(g, x->monomial(x,k))
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
54
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
55 @testset for i ∈ 1:closure_size(D₁)
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
56 x, = points(g)[i]
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
57 @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
58 end
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
59
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
60 @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
61 x, = points(g)[i]
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
62 @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
63 end
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
64 end
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
65
978
1a05009e731b Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents: 974
diff changeset
66 @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
67 v = evalOn(g, x->monomial(x,k))
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
68
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
69 x, = points(g)[10]
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
70 @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
71 end
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
72 end
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
73 end
979
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
74
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
75 @testset "Accuracy on function" begin
1046
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
76 # 1D
979
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
77 g = EquidistantGrid(30, 0.,1.)
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
78 v = evalOn(g, x->exp(x))
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
79 @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
80 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
81 D₁ = first_derivative(g, stencil_set, 1)
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
82
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
83 @test D₁*v ≈ v rtol=tol
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
84 end
1046
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
85
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
86 # 2D
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
87 g = EquidistantGrid((30,60), (0.,0.),(1.,2.))
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
88 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
89 @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
90 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
91 Dx = first_derivative(g, stencil_set, 1)
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
92 Dy = first_derivative(g, stencil_set, 2)
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
93
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
94 @test Dx*v ≈ 0.8v rtol=tol
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
95 @test Dy*v ≈ 1.2v rtol=tol
e00eb000346e Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
96 end
979
b90446eb5f27 Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents: 978
diff changeset
97 end
974
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
98 end
ba023fc09961 Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents: 972
diff changeset
99