我继承了固定格式文件FFTRUN.f 该文件的开头如下所示:
SUBROUTINE FFTRUN_2e
USE, intrinsic :: ISO_C_BINDING
USE FFTWmod, ONLY : FFTWplan_fwd, FFTWplan_inv, FFTWplanReady
INCLUDE 'INCL_PARAM.FOR'
INCLUDE 'INCL_PRATT.FOR'
INCLUDE 'INCL_XYZ.FOR'
INCLUDE 'FFTW3.f03'
PARAMETER (NDIM=2, NDAT=IMAX*JMAX)
DIMENSION NN(NDIM),DATA(NDAT)
COMPLEX*16 FACTR,SCATT(IMAX,JMAX),WAVINC,DATA
IF (.not.FFTWplanReady) THEN
FFTWplan_fwd = fftw_plan_dft_2d(nn2,nn1,data,data,
& FFTW_FORWARD,FFTW_MEASURE)
FFTWplan_inv = fftw_plan_dft_2d(nn2,nn1,data,data,
& FFTW_BACKWARD,FFTW_MEASURE)
ENDIF
我会用
编译它 gfortran -c FFTRUN.f
然而,它失败了,因为fftw3.f03是自由格式。有没有办法可以实现这一目标,而无需将fftw3.f03重新格式化为固定格式?
这是一个庞大的软件,所以我不可能重新格式化固定格式的整个项目的其余部分。
答案 0 :(得分:3)
没有。您可以通过分别编译这两个源并将它们链接在一起来更快地取得进展。由于您已经使用了use
这样的Fortran 90功能,这不会给您带来太多痛苦。
首先,确保fftw3.f03
包含一个本身包含您要使用的功能的模块。删除include fftw3.f03
行,并使用其他use
语句插入语句use fftw3_mod
(或调用模块的任何内容)。然后在编译fftw3.f03
之前修改makefile以编译fftrun.f
。这是关于它的。
答案 1 :(得分:0)
可用于所有源表单的源代码
要编写可用于所有源表单(免费,固定或制表符)的源代码,请遵循以下规则:
空白 - 视为重要(参见免费资料表格)。
对帐单标签 - 放置在列位置1到5(或第一个制表符字符之前)。
语句 - 从列位置7开始(或在第一个标签字符之后)。
评论指标 - 仅限使用!放置在列位置6之外的任何位置(或紧接在第一个制表符之后)。
延续指示 - 仅限使用&amp ;.放置在初始线和每个延续线的列位置73,以及每个延续线的第6列中(第6列中的符号前面没有制表符)。
答案 2 :(得分:-1)
gfortran有一个选项-ffree-form
。看here
两个建议:
-ffree-form
选项编译fftw3.f03。然后像往常一样编译整个项目,但是使用结果对象文件fftw3.o
。-ffree-form
选项编译整个项目。