结合F77和F95 fortran代码

Dur*_*and 2 fortran gfortran

我正在研究一些科学代码,主要是F77,但也有一些F95。在某些地方,我需要在F95代码中包含F77代码。有没有一种方法可以通过使用特定的编译器标记或其他方法使此代码在我的代码中正常播放?我正在使用gfortran,偶尔使用ifort。我可以修改旧版代码,但是我需要以一种明智的方式进行操作,以保持与其他F77代码的向后兼容性,同时也要与F95代码向前兼容。

我收到如下错误:

cstruc:16.12:
    Included at mod_op.f90:6:

      REAL*8
            1
Error: Invalid character in name at (1)
cstruc:17.6:
    Included at mod_op.f90:6:

     &       RH, RH1,      ! ln rho
      1
Error: Invalid character in name at (1)
cstruc:18.6:
    Included at mod_op.f90:6:

     &       RHP, RHP1,    ! d ln rho / d ln p
      1
Error: Invalid character in name at (1)
cstruc:19.6:
    Included at mod_op.f90:6:

     &       RHT, RHT1,    ! d ln rho / d ln T
      1
Error: Invalid character in name at (1)
Run Code Online (Sandbox Code Playgroud)

cstruc看起来像这样:

  REAL*8
 &       RH, RH1,      ! ln rho
 &       RHP, RHP1,    ! d ln rho / d ln p
 &       RHT, RHT1,    ! d ln rho / d ln T
 &       PSI,          ! ln Lambda (for degenerate gas)
 &       RHPSI,        ! d ln rho / d PSI
 &       RHPSIP,       ! d2 ln rho / d PSI d ln P
 &       RHPSIT,       ! d2 ln rho / d PSI d ln T
 &       PL,           ! P at J1
 &       TONI          ! T at J1
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢。谢谢!

fra*_*lus 5

除某些例外,Fortran 77代码是Fortran 95代码。我想您的错误是由于您试图将include格式固定的源代码(cstruc中的F77代码)固定为格式自由的源代码文件mod_op.f90。这不太可能顺利结束。

大多数编译器会假定以“ .f90”结尾的文件是自由格式的,因此,如果您确实使用固定格式,则需要一个编译器标志来覆盖该假设。

可以将自由格式和固定格式的代码组合到一个最终对象(每个对象分别编译)中,但是关于如何解决所看到的问题的一个很好的建议只能有更多细节。

但是,如果您尝试include创建一个模块来替换公共块,则没有理由不能将F95功能用于固定形式。只是有选择地做。

或者,您可以看到Vladimir F 的答案,该答案解释了如何编写同时可用作自由格式和固定格式源的源代码。您可以使用它来修改Fortran 77固定形式的代码,使其可以include被Fortran 90自由形式的代码使用,同时仍可以将其编译为固定形式(但无效的Fortran 77)。


Vla*_*r F 5

我建议尝试使用http://fortranwiki.org/fortran/show/Continuation+lines中的“交叉点”表单

无论是免费形式还是固定形式,它都是合法的。