使用带有mpi的1D FFT的2D FFT

时间:2012-12-06 18:07:41

标签: fortran mpi fftw

我正在尝试使用带有fftw_mpi子程序(版本3.3.2)的维度(nxn)的复杂矩阵:所有行上的1D FFT(复数到复数)和1D FFT之后(复杂到复杂) )对于所有列。首先我在Fortran中创建了一个串行代码,一切正常,但是当我用mpi尝试fftw子程序时,结果并不像我预期的那样。如何创建一维FFT变换计划有什么不对?下面是一个例子(只有行上的第一个1D FFT):


    !   get local data size and allocate (dimension reversal)

    alloc_local = fftw_mpi_local_size_2d(M, L, MPI_COMM_WORLD, &
                                                local_M, local_j_offset)

    cdata = fftw_alloc_complex(alloc_local)
    call c_f_pointer(cdata, ldata, [L,local_M])
    call c_f_pointer(cdata, data, [L,local_M])
    !   create MPI plan
    plan = fftw_mpi_plan_many_dft(1, L*local_M, local_M, FFTW_MPI_DEFAULT_BLOCK, &
    FFTW_MPI_DEFAULT_BLOCK, ldata, data, MPI_COMM_WORLD, FFTW_FORWARD, FFTW_ESTIMATE)
    do j = 1, local_M
        do i = 1, L
     ldata(i,j)= my_function
    enddo
    enddo
    ! compute transform 
     call fftw_mpi_execute_dft(plan, ldata, data)
    call fftw_destroy_plan(plan)
    call fftw_free(cdata)
    call MPI_FINALIZE(mpi_err)

0 个答案:

没有答案