使用(更多)现代Fortran代码编译旧版Fortran代码

时间:2018-03-29 01:07:11

标签: fortran fortran90 intel-fortran fortran77

我一直在使用同事使用的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是一个变量,而不是评论?),但我不知道它会如何产生这些错误。

0 个答案:

没有答案