Sub Ex_Rfft2c()
Const L = 4, M = 4
Dim Wsave() As Double, R(L - 1, M - 1) As Double, R0(L - 1, M - 1) As Double
Dim C(L - 1, M - 1) As Complex
Dim LWsave As Long, Info As Long, I As Long, J As Long
'-- Initialization
LWsave = L + 3 * M + Log(L) / Log(2) + 2 * Log(M) / Log(2) + 12
ReDim Wsave(LWsave - 1)
Call Rfft2i(L, M, Wsave, Info)
If Info <> 0 Then GoTo Err
'-- Generate test data
For I = 0 To L - 1
For J = 0 To M - 1
R(I, J) = Rnd()
R0(I, J) = R(I, J)
Next
Next
'-- Forward transform
Call Rfft2f(L, M, R(), Wsave(), Info)
If Info <> 0 Then GoTo Err
'-- Convert to full complex data
Call Rfft2c(L, M, R(), C(), Info)
'-- Initialization for Cfft2b
LWsave = 2 * (L + M) + Log(L) / Log(2) + Log(M) / Log(2) + 8
ReDim Wsave(LWsave - 1)
Call Cfft2i(L, M, Wsave, Info)
If Info <> 0 Then GoTo Err
'-- Backward transform by Cfft2b
Call Cfft2b(L, M, C(), Wsave(), Info)
If Info <> 0 Then GoTo Err
'-- Print result
For J = 0 To M - 1
For I = 0 To L - 1
Debug.Print R0(I, J), Creal(C(I, J)), Cimag(C(I, J)), Creal(C(I, J)) - R0(I, J)
Next
Debug.Print
Next
Exit Sub
Err:
Debug.Print "Error in Rfft2i/Rfft2f/Rfft2b: Info =", Info
End Sub