@@ -80,6 +80,7 @@ function AbstractFFTs.plan_brfft(x::AbstractArray{T}, len, region; kwargs...)::F
8080 g1 = CallGraph {T} (len)
8181 g2 = CallGraph {T} (size (x,region[2 ]))
8282 pinv = FFTAInvPlan {T,N} ()
83+ # @info "" g2[1]
8384 return FFTAPlan_re {T,N} ((g1,g2), region, FFT_BACKWARD, pinv, len)
8485 end
8586end
@@ -115,12 +116,14 @@ function LinearAlgebra.mul!(y::AbstractArray{U,N}, p::FFTAPlan{T,2}, x::Abstract
115116 for I1 in R1
116117 for I2 in R2
117118 for I3 in R3
119+
118120 for k in 1 : cols
119- @views fft! (y_tmp[:,k], x[I1,:,I2,k,I3], 1 , 1 , p. dir, p. callgraph[2 ][1 ]. type, p. callgraph[2 ], 1 )
121+ @views fft! (y_tmp[:,k], x[I1,:,I2,k,I3], 1 , 1 , p. dir, p. callgraph[1 ][1 ]. type, p. callgraph[1 ], 1 )
120122 end
121-
123+ # @info "" y_tmp[:, 1] x[I1,:,I2,1,I3] y_tmp[1,:] y[I1,1,I2,:,I3] cols rows
122124 for k in 1 : rows
123- @views fft! (y[I1,k,I2,:,I3], y_tmp[k,:], 1 , 1 , p. dir, p. callgraph[1 ][1 ]. type, p. callgraph[1 ], 1 )
125+ # @info "" k
126+ @views fft! (y[I1,k,I2,:,I3], y_tmp[k,:], 1 , 1 , p. dir, p. callgraph[2 ][1 ]. type, p. callgraph[2 ], 1 )
124127 end
125128 end
126129 end
@@ -155,7 +158,16 @@ function *(p::FFTAPlan_re{T,1}, x::AbstractVector{T}) where {T<:Union{Real, Comp
155158end
156159
157160function * (p:: FFTAPlan_re{T,N} , x:: AbstractArray{T,2} ) where {T<: Union{Real, Complex} , N}
158- y = similar (x, T <: Real ? Complex{T} : T)
159- LinearAlgebra. mul! (y, p, x)
160- y
161+ if p. dir == FFT_FORWARD
162+ y = similar (x, T <: Real ? Complex{T} : T)
163+ LinearAlgebra. mul! (y, p, x)
164+ return y[1 : end ÷ 2 + 1 ,:]
165+ else
166+ x_tmp = similar (x, p. flen, size (x)[2 ])
167+ x_tmp[1 : end ÷ 2 + 1 ,:] .= x
168+ x_tmp[end ÷ 2 + 2 : end ,:] .= iseven (p. flen) ? conj .(x[end - 1 : - 1 : 2 ,:]) : conj .(x[end : - 1 : 2 ,:])
169+ y = similar (x_tmp)
170+ LinearAlgebra. mul! (y, p, x_tmp)
171+ return y
172+ end
161173end
0 commit comments