Mercurial > repos > public > sbplib_julia
annotate test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 2092:b1085efb78bf refactor/sbp_operators/direction_check
Close before merge
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Mon, 02 Mar 2026 15:52:55 +0100 |
| parents | e21c295fb2da |
| children |
| 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 |
|
1726
471a948cd2b2
Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1640
diff
changeset
|
4 using Diffinitive.SbpOperators |
|
471a948cd2b2
Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1640
diff
changeset
|
5 using Diffinitive.Grids |
|
471a948cd2b2
Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1640
diff
changeset
|
6 using Diffinitive.LazyTensors |
|
972
803f60f461c1
Start adding the first derivative
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 |
|
1726
471a948cd2b2
Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1640
diff
changeset
|
8 using Diffinitive.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 @testset "first_derivative" begin |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
11 @testset "Constructors" begin |
|
1018
5ec49dd2c7c4
Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
990
diff
changeset
|
12 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
|
13 |
|
1529
43aaf710463e
Change to signature of equidistant_grid to same style as many array methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
14 g₁ = equidistant_grid(0., 1., 11) |
|
43aaf710463e
Change to signature of equidistant_grid to same style as many array methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
15 g₂ = equidistant_grid((0.,1.), (1.,3.), 11, 14) |
|
983
5bfc03cf3ba7
Add testing for VolumeOperator
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
979
diff
changeset
|
16 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
17 @test first_derivative(g₁, stencil_set) isa LazyTensor{Float64,1,1} |
| 995 | 18 @test first_derivative(g₂, stencil_set, 2) isa LazyTensor{Float64,2,2} |
|
2080
0f949681d3d3
Check that direction of first/second derivative operators is within the dimension of the grid. Add 1D functions for first/second derivative operators that take a direction.
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1726
diff
changeset
|
19 |
|
0f949681d3d3
Check that direction of first/second derivative operators is within the dimension of the grid. Add 1D functions for first/second derivative operators that take a direction.
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1726
diff
changeset
|
20 @test first_derivative(g₁, stencil_set) == first_derivative(g₁, stencil_set, 1) |
|
2091
e21c295fb2da
Restructure methods for equidistant grids with a dim argument
Jonatan Werpers <jonatan@werpers.com>
parents:
2090
diff
changeset
|
21 @test_throws DomainError(3, "Derivative direction must be 1.") first_derivative(g₁, stencil_set, 3) |
|
e21c295fb2da
Restructure methods for equidistant grids with a dim argument
Jonatan Werpers <jonatan@werpers.com>
parents:
2090
diff
changeset
|
22 @test_throws DomainError(3, "Derivative direction must be in 1:2.") first_derivative(g₂, stencil_set, 3) |
|
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
23 |
|
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
24 interior_stencil = CenteredStencil(-1,0,1) |
|
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
25 closure_stencils = [Stencil(-1,1, center=1)] |
|
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
26 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
27 @test first_derivative(g₁, interior_stencil, closure_stencils) isa LazyTensor{Float64,1,1} |
|
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
28 end |
|
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
29 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
30 @testset "Accuracy conditions" begin |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
31 N = 20 |
|
1529
43aaf710463e
Change to signature of equidistant_grid to same style as many array methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
32 g = equidistant_grid(0//1, 2//1, N) |
|
1640
8e28cadfefb3
Move `monomial` in tests into a local scope to avoid overwriting warnings
Jonatan Werpers <jonatan@werpers.com>
parents:
1529
diff
changeset
|
33 |
|
8e28cadfefb3
Move `monomial` in tests into a local scope to avoid overwriting warnings
Jonatan Werpers <jonatan@werpers.com>
parents:
1529
diff
changeset
|
34 monomial(x,k) = k < 0 ? zero(x) : x^k/factorial(k) |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
35 @testset for order ∈ [2,4] |
|
1018
5ec49dd2c7c4
Reintroduce read_stencil_set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
990
diff
changeset
|
36 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
37 D₁ = first_derivative(g, stencil_set) |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
38 |
|
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
39 @testset "boundary x^$k" for k ∈ 0:order÷2 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
40 v = eval_on(g, x->monomial(x,k)) |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
41 |
|
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
42 @testset for i ∈ 1:closure_size(D₁) |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
43 x, = g[i] |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
44 @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
|
45 end |
|
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
46 |
|
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
47 @testset for i ∈ (N-closure_size(D₁)+1):N |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
48 x, = g[i] |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
49 @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
|
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 |
|
978
1a05009e731b
Add tests for constructors
Jonatan Werpers <jonatan@werpers.com>
parents:
974
diff
changeset
|
53 @testset "interior x^$k" for k ∈ 0:order |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
54 v = eval_on(g, x->monomial(x,k)) |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
55 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
56 x, = g[10] |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
57 @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
|
58 end |
|
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
59 end |
|
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
60 end |
|
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
61 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
62 @testset "Accuracy on function" begin |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
63 @testset "1D" begin |
|
1529
43aaf710463e
Change to signature of equidistant_grid to same style as many array methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
64 g = equidistant_grid(0., 1., 30) |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
65 v = eval_on(g, x->exp(x)) |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
66 @testset for (order, tol) ∈ [(2, 6e-3),(4, 2e-4)] |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
67 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
68 D₁ = first_derivative(g, stencil_set) |
|
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
69 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
70 @test D₁*v ≈ v rtol=tol |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
71 end |
|
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
72 end |
|
1046
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
73 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
74 @testset "2D" begin |
|
1529
43aaf710463e
Change to signature of equidistant_grid to same style as many array methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
1291
diff
changeset
|
75 g = equidistant_grid((0.,0.),(1.,2.), 30, 60) |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
76 v = eval_on(g, (x,y)->exp(0.8x+1.2*y)) |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
77 @testset for (order, tol) ∈ [(2, 6e-3),(4, 3e-4)] |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
78 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order) |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
79 Dx = first_derivative(g, stencil_set, 1) |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
80 Dy = first_derivative(g, stencil_set, 2) |
|
1046
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
81 |
|
1291
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
82 @test Dx*v ≈ 0.8v rtol=tol |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
83 @test Dy*v ≈ 1.2v rtol=tol |
|
356ec6a72974
Implement changes in SbpOperators
Jonatan Werpers <jonatan@werpers.com>
parents:
1285
diff
changeset
|
84 end |
|
1046
e00eb000346e
Add tests for 2D application
Jonatan Werpers <jonatan@werpers.com>
parents:
983
diff
changeset
|
85 end |
|
979
b90446eb5f27
Add accuracy test for funtion
Jonatan Werpers <jonatan@werpers.com>
parents:
978
diff
changeset
|
86 end |
|
974
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
87 end |
|
ba023fc09961
Add stencil_set method and accuracy tests
Jonatan Werpers <jonatan@werpers.com>
parents:
972
diff
changeset
|
88 |
