@@ -115,28 +115,31 @@ const CHEB2JAC = 8
115115const ULTRA2CHEB = 9
116116const CHEB2ULTRA = 10
117117const 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
140143
141144
142145let k2s = Dict (LEG2CHEB => " Legendre--Chebyshev" ,
@@ -151,6 +154,9 @@ let k2s = Dict(LEG2CHEB => "Legendre--Chebyshev",
151154 ULTRA2CHEB => " ultraspherical--Chebyshev" ,
152155 CHEB2ULTRA => " Chebyshev--ultraspherical" ,
153156 ASSOCIATEDJAC2JAC => " Associated Jacobi--Jacobi" ,
157+ MODIFIEDJAC2JAC => " Modified Jacobi--Jacobi" ,
158+ MODIFIEDLAG2LAG => " Modified Laguerre--Laguerre" ,
159+ MODIFIEDHERM2HERM => " Modified Hermite--Hermite" ,
154160 SPHERE => " Spherical harmonic--Fourier" ,
155161 SPHEREV => " Spherical vector field--Fourier" ,
156162 DISK => " Zernike--Chebyshev×Fourier" ,
@@ -266,6 +272,9 @@ destroy_plan(p::FTPlan{Float64, 1}) = ccall((:ft_destroy_tb_eigen_FMM, libfasttr
266272destroy_plan (p:: FTPlan{BigFloat, 1} ) = ccall ((:ft_mpfr_destroy_plan , libfasttransforms), Cvoid, (Ptr{mpfr_t}, Cint), p, p. n)
267273destroy_plan (p:: FTPlan{Float32, 1, ASSOCIATEDJAC2JAC} ) = ccall ((:ft_destroy_btb_eigen_FMMf , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
268274destroy_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)
269278destroy_plan (p:: FTPlan{Float64} ) = ccall ((:ft_destroy_harmonic_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
270279destroy_plan (p:: FTPlan{Complex{Float64}, 2, SPINSPHERE} ) = ccall ((:ft_destroy_spin_harmonic_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
271280destroy_plan (p:: FTPlan{Float64, 2, SPHERESYNTHESIS} ) = ccall ((:ft_destroy_sphere_fftw_plan , libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, ), p)
383392for f in (:leg2cheb , :cheb2leg , :ultra2ultra , :jac2jac ,
384393 :lag2lag , :jac2ultra , :ultra2jac , :jac2cheb ,
385394 :cheb2jac , :ultra2cheb , :cheb2ultra , :associatedjac2jac ,
395+ :modifiedjac2jac , :modifiedlag2lag , :modifiedherm2herm ,
386396 :sph2fourier , :sphv2fourier , :disk2cxf ,
387397 :rectdisk2cheb , :tri2cheb , :tet2cheb )
388398 plan_f = Symbol (" plan_" , f)
@@ -526,6 +536,36 @@ function plan_associatedjac2jac(::Type{Float64}, n::Integer, c::Integer, α, β,
526536 return FTPlan {Float64, 1, ASSOCIATEDJAC2JAC} (plan, n)
527537end
528538
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
529569
530570function plan_leg2cheb (:: Type{BigFloat} , n:: Integer ; normleg:: Bool = false , normcheb:: Bool = false )
531571 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),
789829 end
790830end
791831
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+
792854for (fJ, fC) in ((:lmul! , :ft_mpfr_trmv_ptr ),
793855 (:ldiv! , :ft_mpfr_trsv_ptr ))
794856 @eval begin
@@ -854,6 +916,28 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bbbfmmf, :Float32),
854916 end
855917end
856918
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+
857941for (fJ, fC) in ((:lmul! , :ft_mpfr_trmm_ptr ),
858942 (:ldiv! , :ft_mpfr_trsm_ptr ))
859943 @eval begin
0 commit comments