【问题标题】:How to use FFTW wisdom from modern Fortran [duplicate]如何使用现代 Fortran 中的 FFTW 智慧 [重复]
【发布时间】:2017-07-04 08:59:15
【问题描述】:

我想使用 FFTW 智慧系统来记住工作之间的 FFTW 计划。此处记录了 C 程序中智慧的使用:http://www.fftw.org/fftw2_doc/fftw_2.html 对于 C,相关字符串将修改为 FFTW_MEASURE | FFTW_USE_WISDOM。我试图在这里效仿:

!! 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)

有什么建议吗?

【问题讨论】:

  • 您在关注 FFTW2 文档时正在使用 FFTW3! .
  • @M.Chinoune 关于如何在 FFTW3 中完成此操作有什么建议吗?
  • 按照FFTW3的文档操作即可

标签: fortran fftw


【解决方案1】:

根据Modern Fortran interface documentation

多个规划器标志与ior 组合(相当于C 中的'|')。例如FFTW_MEASURE | FFTW_DESTROY_INPUT 变为 ior(FFTW_MEASURE, FFTW_DESTROY_INPUT)。 (您也可以使用“+”,只要您不尝试多次包含给定标志。)

因此,您应该包括 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)

请注意,用于组合标志的类似语法也可用于旧版 Fortran,如 this section of the documentation 中所述。

【讨论】:

  • 答案中给出的第二种形式可以解决问题。第一种形式让 gfortran 不高兴:'gfortran -O3 --fast-math -I/usr/include -o newJet newJet.f90 -lfftw3 newJet.f90:219:26: &ior(FFTW_PATIENT, FFTW_USE_WISDOM)) 1 Error: 'j ' 在 (1) 处的 'ior' 内在参数必须是 INTEGER
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多