从Fortran90中的纯子例程调用fftw例程

问题描述

可以从FFTW主页的this中实施多线程FFTW。相反,我们想使用多个线程在inp & ~sign_bit并行环境中调用串行FFTW例程。我们希望OpenMPvariable是线程安全的。这可以通过使用fourier_variable子例程并在其中声明PUREvariable来完成。这里的问题与从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 (将#修改为@)