annotate test/SbpOperators/volumeops/derivatives/first_derivative_test.jl @ 2091:e21c295fb2da refactor/sbp_operators/direction_check

Restructure methods for equidistant grids with a dim argument
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 02 Mar 2026 15:41:14 +0100
parents 67d8fbbb9e58
children
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
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
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