2017-07-04 8 views
1

FFTW知恵システムを使ってジョブ間のFFTW計画を覚えておきたいです。 Cプログラムの知恵の使用は、ここに文書化されています。http://www.fftw.org/fftw2_doc/fftw_2.html Cの場合、関連する文字列はFFTW_MEASURE | FFTW_USE_WISDOMに変更されます。FFTW知恵を現代Fortranからどのように使用する

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

任意の提案を? Modern Fortran interface documentationによれば

+0

あなたはFFTW2のドキュメントに従っている間にFFTW3を使用しています!! 。 –

+0

@M.Chinoune FFTW3でこれをどうすべきかについての提案はありますか? –

+0

[FFTW3](http://www.fftw.org/fftw3_doc/Accessing-the-wisdom-API-from-Fortran.html)のドキュメントに従ってください。 –

答えて

1

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) 

注フラグを結合するための同様の構文ことに記載されているようにレガシーFortranにも使用できます。

+0

答えに示された2番目の形式がそのトリックです。最初の形式は作るのgfortran不幸:「のgfortran -03 --fast-数学-I/USR /含む-o newJet newJet.f90 -lfftw3 newJet.f90:219:26: &IOR(FFTW_PATIENT、FFTW_USE_WISDOM))エラー:(1)の 'ior'の 'j'引数はINTEGERでなければなりません –

関連する問題