Skip to content

Commit c5bb299

Browse files
committed
export jac2jac
1 parent c4e41cf commit c5bb299

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/FastTransforms.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import AbstractFFTs: Plan
4141
import Compat: range, transpose, adjoint, axes
4242

4343
export cjt, icjt, jjt, plan_cjt, plan_icjt
44-
export leg2cheb, cheb2leg, leg2chebu, ultra2ultra, jac2jac
44+
export leg2cheb, cheb2leg, leg2chebu, ultra2ultra, jac2jac, plan_jac2jac
4545
export normleg2cheb, cheb2normleg, normleg12cheb2, cheb22normleg1
4646
export plan_leg2cheb, plan_cheb2leg
4747
export plan_normleg2cheb, plan_cheb2normleg
@@ -99,9 +99,11 @@ include("toeplitzhankel.jl")
9999

100100
#leg2cheb(x...)=th_leg2cheb(x...)
101101
#cheb2leg(x...)=th_cheb2leg(x...)
102-
leg2chebu(x...)=th_leg2chebu(x...)
103-
ultra2ultra(x...)=th_ultra2ultra(x...)
104-
jac2jac(x...)=th_jac2jac(x...)
102+
leg2chebu(x...) = th_leg2chebu(x...)
103+
ultra2ultra(x...) = th_ultra2ultra(x...)
104+
jac2jac(x...) = th_jac2jac(x...)
105+
plan_jac2jac(x...) = th_jac2jacplan(x...)
106+
plan_ultra2ultra(x...) = th_ultra2ultraplan(x...)
105107

106108
include("hierarchical.jl")
107109
include("SphericalHarmonics/SphericalHarmonics.jl")

src/toeplitzhankel.jl

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,25 @@ function ultra2ultraTH(::Type{S},n,λ₁,λ₂) where S
145145
end
146146

147147
function jac2jacTH(::Type{S},n,α,β,γ,δ) where S
148-
@assert β == δ
149-
@assert abs-γ) < 1
150-
@assert α+β > -1
151-
jk = zero(S):n-one(S)
152-
DL = (2jk .+ γ .+ β .+ one(S)).*Λ.(jk,γ+β+one(S),β+one(S))
153-
T = TriangularToeplitz(Λ.(jk,α-γ,one(S)),:U)
154-
H = Hankel(Λ.(jk,α+β+one(S),γ+β+two(S)),Λ.(jk.+n.-one(S),α+β+one(S),γ+β+two(S)))
155-
DR = Λ.(jk,β+one(S),α+β+one(S))./gamma-γ)
156-
T,H,DL,DR
148+
if β == δ
149+
@assert abs-γ) < 1
150+
@assert α+β > -1
151+
jk = zero(S):n-one(S)
152+
DL = (2jk .+ γ .+ β .+ one(S)).*Λ.(jk,γ+β+one(S),β+one(S))
153+
T = TriangularToeplitz(Λ.(jk,α-γ,one(S)),:U)
154+
H = Hankel(Λ.(jk,α+β+one(S),γ+β+two(S)),Λ.(jk.+n.-one(S),α+β+one(S),γ+β+two(S)))
155+
DR = Λ.(jk,β+one(S),α+β+one(S))./gamma-γ)
156+
T,H,DL,DR
157+
elseif α == γ
158+
T,H,DL,DR = jac2jacTH(S,n,β,α,δ,γ)
159+
ve = T.ve
160+
@inbounds for k = 2:2:length(ve)
161+
ve[k] *= -1
162+
end
163+
TriangularToeplitz(ve, :U),H,DL,DR
164+
else
165+
throw(ArgumentError("Cannot create Toeplitz dot Hankel, use a sequence of plans."))
166+
end
157167
end
158168

159169
struct ChebyshevToLegendrePlanTH{TH}

0 commit comments

Comments
 (0)