| 可以帮忙看一下这段代码哪里出问题了嘛,算出来的数据不太对  
 Module FFT2D_Mod   Implicit None   Integer, parameter :: DP = Selected_Real_Kind(15)   Integer, parameter :: FFT_Forward = 1   Integer, parameter :: FFT_Inverse = -1 contains     Subroutine fc2DFFT(x, forback)     ! 2D Fast Fourier Transform using Cooley-Tukey algorithm     Real(Kind=DP), parameter :: PI = 3.141592654_DP     Complex(Kind=DP), Intent(INOUT) :: x(:,:)     Integer, Intent(IN) :: forback     Integer :: nx, ny     Integer :: i, j, k, ncur, ntmp, itmp     Real(Kind=DP) :: ex, ey     Complex(Kind=DP) :: ctmp     nx = Size(x, 1)     ny = Size(x, 2)          ! Perform FFT along rows     Do j = 1, ny       ncur = nx       Do         ntmp = ncur         ex = 2.0_DP * PI / ncur         ncur = ncur / 2         if (ncur < 1) exit         Do i = 1, nx, ntmp           Do k = 1, ntmp / 2             itmp = i + k             ctmp = x(itmp, j) * Exp(forback * CMPLX(0.0_DP, ex * (k - 1), Kind=DP))             x(itmp, j) = x(i, j) - ctmp             x(i, j) = x(i, j) + ctmp           End Do         End Do       End Do     End Do          ! Perform FFT along columns     Do i = 1, nx       ncur = ny       Do         ntmp = ncur         ey = 2.0_DP * PI / ncur         ncur = ncur / 2         if (ncur < 1) exit         Do j = 1, ny, ntmp           Do k = 1, ntmp / 2             itmp = j + k             ctmp = x(i, itmp) * Exp(forback * CMPLX(0.0_DP, ey * (k - 1), Kind=DP))             x(i, itmp) = x(i, j) - ctmp             x(i, j) = x(i, j) + ctmp           End Do         End Do       End Do     End Do          ! If performing inverse FFT, divide by the total number of points     if (forback == FFT_Inverse) then       x = x / (nx * ny)     end if        End Subroutine fc2DFFT   End Module FFT2D_Mod   Program TwoDFFT   use FFT2D_Mod   Implicit None   Integer :: i, j   Integer, parameter :: Nx = 4   Integer, parameter :: Ny = 4   Complex(Kind=DP) :: x(Nx, Ny) = reshape([36.d0, 21.d0, 33.d0, 44.d0, 55.d0, 63.d0, 73.d0, 38.d0, &                                             36.d0, 21.d0, 33.d0, 44.d0, 55.d0, 63.d0, 73.d0, 38.d0], [Nx, Ny])      ! Perform 2D FFT   Call fc2DFFT(x, FFT_Forward)      ! Print the result   Do j = 1, Ny     Do i = 1, Nx       Write(*, *) x(i, j)     End Do   End Do      ! Perform inverse 2D FFT   Call fc2DFFT(x, FFT_Inverse)      ! Normalize and print the result   Do j = 1, Ny     Do i = 1, Nx       Write(*, *) x(i, j)     End Do   End Do    End Program TwoDFFT 
 |