如何使用现代Fortran的FFTW智慧

问题描述:

我想使用FFTW智慧系统记住作业之间的FFTW计划。在C程序中使用智慧记录如下:http://www.fftw.org/fftw2_doc/fftw_2.html对于C,相关字符串将被修改为FFTW_MEASURE | FFTW_USE_WISDOM。我试图在这里模仿:如何使用现代Fortran的FFTW智慧

!! to compile: gfortran -O3 --fast-math -I/usr/include -o usewisdom usewisdom.f90 -lfftw3 
Module FFTW3 
    use, intrinsic :: iso_c_binding 
    include 'fftw3.f03' 
End Module FFTW3 

Program usewisdom 
    use FFTW3 
    integer (kind=c_int), parameter :: nx=2048,ny=2048,np=ny/2+1 
    real (kind=c_double) :: omega(ny,nx)=1.d0 
    complex (kind=c_double_complex) :: fftomega(np,nx) 
    ier=fftw_import_wisdom_from_filename("wisdom") 
    print *,"wisdom output should not be 0:",ier 
    call dfftw_plan_dft_r2c_2d(fwd,ny,nx,omega,fftomega,& 
     &FFTW_PATIENT | FFTW_USE_WISDOM) 
    call dfftw_execute_dft_r2c(fwd,omega,fftomega) !rem clobbers omega 

End Program usewisdom 

但gfortran不喜欢的字符串:

gfortran -O3 --fast-math -I/usr/include -o usewisdom usewisdom.f90 -lfftw3 
usewisdom.f90:16:21: 

    &FFTW_PATIENT | FFTW_USE_WISDOM) 
       1 
Error: Syntax error in argument list at (1) 

有什么建议?

+0

当您使用FFTW2文档时,您正在使用FFTW3! 。 –

+0

@ M.Chinoune有关如何在FFTW3中完成这些任务的建议? –

+0

只需按照[FFTW3]的文档(http://www.fftw.org/fftw3_doc/Accessing-the-wisdom-API-from-Fortran.html) –

按照Modern Fortran interface documentation

Multiple planner flags are combined with ior (equivalent to ‘ | ’ in C). e.g. FFTW_MEASURE | FFTW_DESTROY_INPUT becomes ior(FFTW_MEASURE, FFTW_DESTROY_INPUT) . (You can also use ‘ + ’ as long as you don’t try to include a given flag more than once.)

你应该这样包括FFTW_USE_WISDOM策划师标志如下:

call dfftw_plan_dft_r2c_2d(fwd,ny,nx,omega,fftomega,& 
    &ior(FFTW_PATIENT, FFTW_USE_WISDOM)) 

call dfftw_plan_dft_r2c_2d(fwd,ny,nx,omega,fftomega,& 
    &FFTW_PATIENT + FFTW_USE_WISDOM) 

注意,类似的语法组合标志也可以用于中描述的Legacy Fortran。

+0

答案中给出的第二种形式就是这样。第一种形式使得gfortran不快:“gfortran -O3 --fast-数学-I/USR /包括-o newJet newJet.f90 -lfftw3 newJet.f90:219:26: &IOR(FFTW_PATIENT,FFTW_USE_WISDOM))错误:(1)处内部'ior'的'j'参数必须是INTEGER –