我一直在使用同事使用的Fortran中的一些旧遗留代码。实际的代码是专有的,所以我在这里使用的例子是缩写与我正在使用的代码相比较。
* .f文件中单独定义的某些过程包含一个名为variables.h
的文件:
variables.h
的示例内容:
c VARIABLE DIMENSIONS FOR MODEL
c height_dim -- number of vertical (z) steps
c length_dim -- number of horizontal (x) steps
c width_dim -- number of horizontal (y) steps
INTEGER height_dim, length_dim, width_dim, nmodes, styleFlag
PARAMETER (height_dim=80, length_dim=50, width_dim=40)
PARAMETER (nmodes = 4,
$ styleFlag = 3)
我将其更改为以下内容:
! VARIABLE DIMENSIONS FOR MODEL
! height_dim -- number of vertical (z) steps
! length_dim -- number of horizontal (x) steps
! width_dim -- number of horizontal (y) steps
INTEGER height_dim, length_dim, width_dim, nmodes, styleFlag
PARAMETER (height_dim=80, length_dim=50, width_dim=40)
PARAMETER (nmodes = 4, styleFlag = 3)
使用这些例程的示例例程可能如下,名为initial_conditions.f
:
c This sets up the PDE's initial conditions
subroutine initial_conditions( temperature, density )
IMPLICIT NONE
INCLUDE 'variables.h'
real*8 temperature(height_dim,length_dim,width_dim)
real*8 density(height_dim)
temperature = 273.15D0
density = 1.0D0
return
end
我尝试编译用F90(或更新版本)编写的包含dimensions.h
的测试例程,但编译器不喜欢将固定格式的注释包含在自由格式* .f90源文件中,所以我将所有评论从c
更改为!
。然后我能够成功编译我的测试程序。我们称之为test.f90
:
program test
implicit none
include 'variables.h'
real*8, dimension(height_dim,length_dim,width_dim) :: vx, vy, vz
! <<Initialize data...>>
! << Output data...>>
end program test
不幸的是,现在原始代码无法编译。似乎代码不喜欢以!
开头的注释行(基于我改变的事实),但它给出的实际错误如下:
variables.h(8): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: =
PARAMETER (nmodes = 4, styleFlag = 3)
------------------------------------------^
variables.h(5): error #6219: This variable, used in a specification expression, must be a dummy argument, a COMMON block object, or an object accessible through host or use association. [NMODES]
INTEGER height_dim, length_dim, width_dim, nmodes, styleFlag
---------------------------------------------^
世界上发生了什么,又如何解决?!
我认为评论样式是不兼容的(自由形式的fortran认为c
是一个变量,而不是评论?),但我不知道它会如何产生这些错误。