@@ -115,28 +115,31 @@ const CHEB2JAC = 8
115
115
const ULTRA2CHEB = 9
116
116
const CHEB2ULTRA = 10
117
117
const ASSOCIATEDJAC2JAC = 11
118
- const SPHERE = 12
119
- const SPHEREV = 13
120
- const DISK = 14
121
- const RECTDISK = 15
122
- const TRIANGLE = 16
123
- const TETRAHEDRON = 17
124
- const SPINSPHERE = 18
125
- const SPHERESYNTHESIS = 19
126
- const SPHEREANALYSIS = 20
127
- const SPHEREVSYNTHESIS = 21
128
- const SPHEREVANALYSIS = 22
129
- const DISKSYNTHESIS = 23
130
- const DISKANALYSIS = 24
131
- const RECTDISKSYNTHESIS = 25
132
- const RECTDISKANALYSIS = 26
133
- const TRIANGLESYNTHESIS = 27
134
- const TRIANGLEANALYSIS = 28
135
- const TETRAHEDRONSYNTHESIS = 29
136
- const TETRAHEDRONANALYSIS = 30
137
- const SPINSPHERESYNTHESIS = 31
138
- const SPINSPHEREANALYSIS = 32
139
- const SPHERICALISOMETRY = 33
118
+ const MODIFIEDJAC2JAC = 12
119
+ const MODIFIEDLAG2LAG = 13
120
+ const MODIFIEDHERM2HERM = 14
121
+ const SPHERE = 15
122
+ const SPHEREV = 16
123
+ const DISK = 17
124
+ const RECTDISK = 18
125
+ const TRIANGLE = 19
126
+ const TETRAHEDRON = 20
127
+ const SPINSPHERE = 21
128
+ const SPHERESYNTHESIS = 22
129
+ const SPHEREANALYSIS = 23
130
+ const SPHEREVSYNTHESIS = 24
131
+ const SPHEREVANALYSIS = 25
132
+ const DISKSYNTHESIS = 26
133
+ const DISKANALYSIS = 27
134
+ const RECTDISKSYNTHESIS = 28
135
+ const RECTDISKANALYSIS = 29
136
+ const TRIANGLESYNTHESIS = 30
137
+ const TRIANGLEANALYSIS = 31
138
+ const TETRAHEDRONSYNTHESIS = 32
139
+ const TETRAHEDRONANALYSIS = 33
140
+ const SPINSPHERESYNTHESIS = 34
141
+ const SPINSPHEREANALYSIS = 35
142
+ const SPHERICALISOMETRY = 36
140
143
141
144
142
145
let k2s = Dict (LEG2CHEB => " Legendre--Chebyshev" ,
@@ -151,6 +154,9 @@ let k2s = Dict(LEG2CHEB => "Legendre--Chebyshev",
151
154
ULTRA2CHEB => " ultraspherical--Chebyshev" ,
152
155
CHEB2ULTRA => " Chebyshev--ultraspherical" ,
153
156
ASSOCIATEDJAC2JAC => " Associated Jacobi--Jacobi" ,
157
+ MODIFIEDJAC2JAC => " Modified Jacobi--Jacobi" ,
158
+ MODIFIEDLAG2LAG => " Modified Laguerre--Laguerre" ,
159
+ MODIFIEDHERM2HERM => " Modified Hermite--Hermite" ,
154
160
SPHERE => " Spherical harmonic--Fourier" ,
155
161
SPHEREV => " Spherical vector field--Fourier" ,
156
162
DISK => " Zernike--Chebyshev×Fourier" ,
@@ -266,6 +272,9 @@ destroy_plan(p::FTPlan{Float64, 1}) = ccall((:ft_destroy_tb_eigen_FMM, libfasttr
266
272
destroy_plan (p:: FTPlan{BigFloat, 1} ) = ccall ((:ft_mpfr_destroy_plan , libfasttransforms), Cvoid, (Ptr{mpfr_t}, Cint), p, p. n)
267
273
destroy_plan (p:: FTPlan{Float32, 1, ASSOCIATEDJAC2JAC} ) = ccall ((:ft_destroy_btb_eigen_FMMf , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
268
274
destroy_plan (p:: FTPlan{Float64, 1, ASSOCIATEDJAC2JAC} ) = ccall ((:ft_destroy_btb_eigen_FMM , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
275
+ destroy_plan (p:: FTPlan{Float64, 1, MODIFIEDJAC2JAC} ) = ccall ((:ft_destroy_modified_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
276
+ destroy_plan (p:: FTPlan{Float64, 1, MODIFIEDLAG2LAG} ) = ccall ((:ft_destroy_modified_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
277
+ destroy_plan (p:: FTPlan{Float64, 1, MODIFIEDHERM2HERM} ) = ccall ((:ft_destroy_modified_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
269
278
destroy_plan (p:: FTPlan{Float64} ) = ccall ((:ft_destroy_harmonic_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
270
279
destroy_plan (p:: FTPlan{Complex{Float64}, 2, SPINSPHERE} ) = ccall ((:ft_destroy_spin_harmonic_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
271
280
destroy_plan (p:: FTPlan{Float64, 2, SPHERESYNTHESIS} ) = ccall ((:ft_destroy_sphere_fftw_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
383
392
for f in (:leg2cheb , :cheb2leg , :ultra2ultra , :jac2jac ,
384
393
:lag2lag , :jac2ultra , :ultra2jac , :jac2cheb ,
385
394
:cheb2jac , :ultra2cheb , :cheb2ultra , :associatedjac2jac ,
395
+ :modifiedjac2jac , :modifiedlag2lag , :modifiedherm2herm ,
386
396
:sph2fourier , :sphv2fourier , :disk2cxf ,
387
397
:rectdisk2cheb , :tri2cheb , :tet2cheb )
388
398
plan_f = Symbol (" plan_" , f)
@@ -526,6 +536,36 @@ function plan_associatedjac2jac(::Type{Float64}, n::Integer, c::Integer, α, β,
526
536
return FTPlan {Float64, 1, ASSOCIATEDJAC2JAC} (plan, n)
527
537
end
528
538
539
+ function plan_modifiedjac2jac (:: Type{Float64} , n:: Integer , α, β, w:: Vector{Float64} ; verbose:: Bool = false )
540
+ # plan_modifiedjac2jac(Float64, n, α, β, w, Vector{Float64}(undef, 0); verbose=verbose)
541
+ plan = ccall ((:ft_plan_modified_jacobi_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Float64, Float64, Cint, Ptr{Float64}, Cint, Ptr{Float64}, Cint), n, α, β, length (w), w, 0 , C_NULL , verbose)
542
+ return FTPlan {Float64, 1, MODIFIEDJAC2JAC} (plan, n)
543
+ end
544
+
545
+ function plan_modifiedjac2jac (:: Type{Float64} , n:: Integer , α, β, u:: Vector{Float64} , v:: Vector{Float64} ; verbose:: Bool = false )
546
+ plan = ccall ((:ft_plan_modified_jacobi_to_jacobi , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Float64, Float64, Cint, Ptr{Float64}, Cint, Ptr{Float64}, Cint), n, α, β, length (u), u, length (v), v, verbose)
547
+ return FTPlan {Float64, 1, MODIFIEDJAC2JAC} (plan, n)
548
+ end
549
+
550
+ function plan_modifiedlag2lag (:: Type{Float64} , n:: Integer , α, w:: Vector{Float64} ; verbose:: Bool = false )
551
+ plan = ccall ((:ft_plan_modified_laguerre_to_laguerre , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Float64, Cint, Ptr{Float64}, Cint, Ptr{Float64}, Cint), n, α, length (w), w, 0 , C_NULL , verbose)
552
+ return FTPlan {Float64, 1, MODIFIEDLAG2LAG} (plan, n)
553
+ end
554
+
555
+ function plan_modifiedlag2lag (:: Type{Float64} , n:: Integer , α, u:: Vector{Float64} , v:: Vector{Float64} ; verbose:: Bool = false )
556
+ plan = ccall ((:ft_plan_modified_laguerre_to_laguerre , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Float64, Cint, Ptr{Float64}, Cint, Ptr{Float64}, Cint), n, α, length (u), u, length (v), v, verbose)
557
+ return FTPlan {Float64, 1, MODIFIEDLAG2LAG} (plan, n)
558
+ end
559
+
560
+ function plan_modifiedherm2herm (:: Type{Float64} , n:: Integer , w:: Vector{Float64} ; verbose:: Bool = false )
561
+ plan = ccall ((:ft_plan_modified_hermite_to_hermite , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Ptr{Float64}, Cint, Ptr{Float64}, Cint), n, length (w), w, 0 , C_NULL , verbose)
562
+ return FTPlan {Float64, 1, MODIFIEDHERM2HERM} (plan, n)
563
+ end
564
+
565
+ function plan_modifiedherm2herm (:: Type{Float64} , n:: Integer , u:: Vector{Float64} , v:: Vector{Float64} ; verbose:: Bool = false )
566
+ plan = ccall ((:ft_plan_modified_hermite_to_hermite , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Ptr{Float64}, Cint, Ptr{Float64}, Cint), n, length (u), u, length (v), v, verbose)
567
+ return FTPlan {Float64, 1, MODIFIEDHERM2HERM} (plan, n)
568
+ end
529
569
530
570
function plan_leg2cheb (:: Type{BigFloat} , n:: Integer ; normleg:: Bool = false , normcheb:: Bool = false )
531
571
plan = ccall ((:ft_mpfr_plan_legendre_to_chebyshev , libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Cint, Clong, Int32), normleg, normcheb, n, precision (BigFloat), Base. MPFR. ROUNDING_MODE[])
@@ -789,6 +829,28 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bbbfmvf, :Float32),
789
829
end
790
830
end
791
831
832
+ for (fJ, fC, elty) in ((:lmul! , :ft_mpmv , :Float64 ),
833
+ (:ldiv! , :ft_mpsv , :Float64 ))
834
+ @eval begin
835
+ ModifiedFTPlan = Union{FTPlan{$ elty, 1 , MODIFIEDJAC2JAC}, FTPlan{$ elty, 1 , MODIFIEDLAG2LAG}, FTPlan{$ elty, 1 , MODIFIEDHERM2HERM}}
836
+ function $fJ (p:: ModifiedFTPlan , x:: Vector{$elty} )
837
+ checksize (p, x)
838
+ ccall (($ (string (fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$ elty}), ' N' , p, x)
839
+ return x
840
+ end
841
+ function $fJ (p:: AdjointFTPlan{$elty, ModifiedFTPlan} , x:: Vector{$elty} )
842
+ checksize (p, x)
843
+ ccall (($ (string (fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$ elty}), ' T' , p, x)
844
+ return x
845
+ end
846
+ function $fJ (p:: TransposeFTPlan{$elty, ModifiedFTPlan} , x:: Vector{$elty} )
847
+ checksize (p, x)
848
+ ccall (($ (string (fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$ elty}), ' T' , p, x)
849
+ return x
850
+ end
851
+ end
852
+ end
853
+
792
854
for (fJ, fC) in ((:lmul! , :ft_mpfr_trmv_ptr ),
793
855
(:ldiv! , :ft_mpfr_trsv_ptr ))
794
856
@eval begin
@@ -854,6 +916,28 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bbbfmmf, :Float32),
854
916
end
855
917
end
856
918
919
+ for (fJ, fC, elty) in ((:lmul! , :ft_mpmm , :Float64 ),
920
+ (:ldiv! , :ft_mpsm , :Float64 ))
921
+ @eval begin
922
+ ModifiedFTPlan = Union{FTPlan{$ elty, 1 , MODIFIEDJAC2JAC}, FTPlan{$ elty, 1 , MODIFIEDLAG2LAG}, FTPlan{$ elty, 1 , MODIFIEDHERM2HERM}}
923
+ function $fJ (p:: ModifiedFTPlan , x:: Matrix{$elty} )
924
+ checksize (p, x)
925
+ ccall (($ (string (fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$ elty}, Cint, Cint), ' N' , p, x, size (x, 1 ), size (x, 2 ))
926
+ return x
927
+ end
928
+ function $fJ (p:: AdjointFTPlan{$elty, ModifiedFTPlan} , x:: Matrix{$elty} )
929
+ checksize (p, x)
930
+ ccall (($ (string (fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$ elty}, Cint, Cint), ' T' , p, x, size (x, 1 ), size (x, 2 ))
931
+ return x
932
+ end
933
+ function $fJ (p:: TransposeFTPlan{$elty, ModifiedFTPlan} , x:: Matrix{$elty} )
934
+ checksize (p, x)
935
+ ccall (($ (string (fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$ elty}, Cint, Cint), ' T' , p, x, size (x, 1 ), size (x, 2 ))
936
+ return x
937
+ end
938
+ end
939
+ end
940
+
857
941
for (fJ, fC) in ((:lmul! , :ft_mpfr_trmm_ptr ),
858
942
(:ldiv! , :ft_mpfr_trsm_ptr ))
859
943
@eval begin
0 commit comments