问题描述
可以从FFTW主页的this中实施多线程FFTW。相反,我们想使用多个线程在inp & ~sign_bit
并行环境中调用串行FFTW例程。我们希望OpenMP
和variable
是线程安全的。这可以通过使用fourier_variable
子例程并在其中声明PURE
和variable
来完成。这里的问题与从fourier_variable
子例程中调用fftw_execute_dft_r2c
之类的FFTW例程有关。
此处提供了简化的代码版本,仅供参考(完整的代码是涉及许多FFTW调用的优化求解器)。
PURE
从PROGRAM main
USE fft_call
REAL(8),DIMENSION(1:N,1:N) :: variable
COMPLEX(C_DOUBLE_COMPLEX),DIMENSION(1:N/2+1,1:N) :: fourier_variable
INTEGER :: JJ
!$OMP ParaLLEL
!$OMP DO
DO JJ = 1,5
call fourier_to_physical(fourier_variable,variable)
END DO
!$OMP END DO
!$OMP END ParaLLEL
END PROGRAM main
MODULE fft_call
contains
PURE SUbroUTINE fourier_to_physical( fourier_variable,variable)
IMPLICIT NONE
REAL(8),1:N),INTENT(OUT) :: fourier_variable
CALL fftw_execute_dft_r2c (plan_fwd,variable,fourier_variable)
END SUbroUTINE fourier_to_physical
END MODULE fft_call
子例程fftw_plan_dft_r2c_2d
调用PURE
时出错:
fourier_to_physical
问题:是否有办法从Fortran90的Error: Function reference to 'fftw_plan_dft_r2c' at (1) is to a non-PURE procedure within a PURE procedure
子例程中调用fftw_execute_dft_r2c
之类的FFTW例程?
或者换句话说,它们的PURE
版本是PURE
,这样我们可以从fftw_execute_dft_r2c
过程中调用它们吗?我们是PURE
的初学者。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)