1
1
using MultivariateOrthogonalPolynomials, StaticArrays, BlockArrays, BlockBandedMatrices, ArrayLayouts, Base64,
2
2
QuasiArrays, Test, ClassicalOrthogonalPolynomials, BandedMatrices, FastTransforms, LinearAlgebra
3
3
import MultivariateOrthogonalPolynomials: dunklxu_raising, dunklxu_lowering, AngularMomentum
4
+ using ForwardDiff
4
5
5
6
@testset " Dunkl-Xu disk" begin
6
7
@testset " basics" begin
@@ -13,6 +14,11 @@ import MultivariateOrthogonalPolynomials: dunklxu_raising, dunklxu_lowering, Ang
13
14
@test xy[SVector (0.1 ,0.2 )] == SVector (0.1 ,0.2 )
14
15
@test x[SVector (0.1 ,0.2 )] == 0.1
15
16
@test y[SVector (0.1 ,0.2 )] == 0.2
17
+
18
+ ρ = sqrt (1 - 0.1 ^ 2 )
19
+ @test P[SVector (0.1 ,0.2 ),1 ] ≈ 1
20
+ @test P[SVector (0.1 ,0.2 ),Block (2 )] ≈ [0.15 ,0.2 ]
21
+ @test P[SVector (0.1 ,0.2 ),Block (3 )] ≈ [jacobip (2 ,1 / 2 ,1 / 2 ,0.1 ),jacobip (1 ,3 / 2 ,3 / 2 ,0.1 )* ρ* legendrep (1 ,0.2 / ρ),ρ^ 2 * legendrep (2 ,0.2 / ρ)]
16
22
end
17
23
18
24
@testset " operators" begin
@@ -29,26 +35,39 @@ import MultivariateOrthogonalPolynomials: dunklxu_raising, dunklxu_lowering, Ang
29
35
30
36
x, y = coordinates (P)
31
37
32
- L = WP \ WQ
33
- R = Q \ P
38
+ @testset " lowering/raising" begin
39
+ L = WP \ WQ
40
+ @test WP[SVector (0.1 ,0.2 ),Block .(1 : 6 )]' L[Block .(1 : 6 ),Block .(1 : 4 )] ≈ WQ[SVector (0.1 ,0.2 ),Block .(1 : 4 )]'
41
+ R = Q \ P
42
+ @test Q[SVector (0.1 ,0.2 ),Block .(1 : 4 )]' R[Block .(1 : 4 ),Block .(1 : 4 )] ≈ P[SVector (0.1 ,0.2 ),Block .(1 : 4 )]'
34
43
35
- X = P \ (x .* P)
36
- Y = P \ (y .* P)
44
+ @test ( DunklXuDisk () \ WeightedDunklXuDisk ( 1.0 ))[ Block .( 1 : N), Block .( 1 : N)] ≈ ( WeightedDunklXuDisk ( 0.0 ) \ WeightedDunklXuDisk ( 1.0 ))[ Block .( 1 : N), Block .( 1 : N)]
45
+ end
37
46
38
- @test (L * R)[Block .(1 : N), Block .(1 : N)] ≈ (I - X^ 2 - Y^ 2 )[Block .(1 : N), Block .(1 : N)]
39
47
40
- @test (DunklXuDisk () \ WeightedDunklXuDisk (1.0 ))[Block .(1 : N), Block .(1 : N)] ≈ (WeightedDunklXuDisk (0.0 ) \ WeightedDunklXuDisk (1.0 ))[Block .(1 : N), Block .(1 : N)]
48
+ @testset " jacobi" begin
49
+ X = P \ (x .* P)
50
+ Y = P \ (y .* P)
41
51
42
- ∂x = Derivative (P, (1 ,0 ))
43
- ∂y = Derivative (P, (0 ,1 ))
52
+ @test (L * R)[Block .(1 : N), Block .(1 : N)] ≈ (I - X^ 2 - Y^ 2 )[Block .(1 : N), Block .(1 : N)]
53
+ @test P[SVector (0.1 ,0.2 ),Block .(1 : 5 )]' X[Block .(1 : 5 ),Block .(1 : 4 )] ≈ 0.1 P[SVector (0.1 ,0.2 ),Block .(1 : 4 )]'
54
+ @test P[SVector (0.1 ,0.2 ),Block .(1 : 5 )]' Y[Block .(1 : 5 ),Block .(1 : 4 )] ≈ 0.2 P[SVector (0.1 ,0.2 ),Block .(1 : 4 )]'
55
+ end
44
56
45
- Dx = Q \ (∂x * P)
46
- Dy = Q \ (∂y * P)
57
+ @testset " derivatives" begin
58
+ ∂x = Derivative (P, (1 ,0 ))
59
+ ∂y = Derivative (P, (0 ,1 ))
47
60
48
- Mx = Q \ (x .* Q)
49
- My = Q \ (y .* Q)
61
+ Dx = Q \ (∂x * P)
62
+ Dy = Q \ (∂y * P)
63
+
64
+ @test Q[SVector (0.1 ,0.2 ),Block .(1 : 3 )]' Dx[Block .(1 : 3 ),Block .(1 : 4 )] ≈ [ForwardDiff. gradient (𝐱 -> DunklXuDisk {eltype(𝐱)} (P. β)[𝐱,k], SVector (0.1 ,0.2 ))[1 ] for k= 1 : 10 ]'
65
+ Mx = Q \ (x .* Q)
66
+ My = Q \ (y .* Q)
67
+
68
+ A = (Mx * Dy - My * Dx)[Block .(1 : N), Block .(1 : N)]
69
+ end
50
70
51
- A = (Mx * Dy - My * Dx)[Block .(1 : N), Block .(1 : N)]
52
71
53
72
B = (Q \ P)[Block .(1 : N), Block .(1 : N)]
54
73
0 commit comments