Hello,
I found a strange behaviour while using precomputed plans in 2D of real fft, plan_rfft and plan_irfft, with the function mul! and ldiv! from the LinearAlbegra package. For example, when computing the inverse transformation using the inverse plan with mul!, the two input matrices are mutated.
Let me show you:
using FFTW, LinearAlgebra
N = 4
hN = N÷2+1
p_2d = plan_rfft(zeros(N,N))
pi_2d = plan_irfft(zeros(ComplexF64,hN,N),N)
B = rand(N,N)
b = Matrix{ComplexF64}(undef,hN,N)
mul!(b,p_2d,B) # compute the fourier coefficients
giving the output:
julia> b
3×4 Array{Complex{Float64},2}:
9.03435+0.0im 0.928178+0.0428595im -1.26097+0.0im 0.928178-0.0428595im
-0.169974+0.736463im -1.19741-1.28333im -0.491232+0.206306im -1.59964+0.561067im
-1.08496+0.0im -0.511485-1.51638im 0.944023+0.0im -0.511485+1.51638im
Now, when we compute the inverse using mul!(B,pi_2d,b) both matrices, B and b are mutated, but this is not expected, only B should be mutated. As you can see:
julia> mul!(B,pi_2d,b);
julia> b
3×4 Array{Complex{Float64},2}:
9.62973+0.0im 10.2096+0.0im 5.91702+0.0im 10.381+0.0im
-3.45825+0.22051im 2.16565+0.932386im 2.13584+1.66503im -1.52313+0.127927im
-1.16391+0.0im 1.00377+0.0im 0.882031+0.0im -5.06174+0.0im
Whereas B is correctly computed, b is also changed. This also happens when using ldiv!(B,p_2d,b) to compute the inverse.
Since this behaviour doesn’t happen when using real plans in 1D or complex plans in 1D and 2D, I guess we could say there is a bug using real plans in 2D?
I didn’t know where to post this, If there is a better place to write this post, somebody can point it out?
Thanks!
