【问题标题】:Difficulties compiling a FORTRAN program编译 FORTRAN 程序的困难
【发布时间】:2013-11-04 16:21:20
【问题描述】:

我想使用一些用 Fortran 编写的光散射代码。我非常熟悉 MATLAB 并自学 C++,但现在 Fortran 让我很伤心。

我刚刚让 Photran 与 Eclipse 一起工作,它可以编译(根据 Photrans 说明使用 Cygwin 中的 Gfortran)我在网上找到的示例 Fortran 程序。

我想开始工作的主要是:http://www.ugr.es/~aquiran/ciencia/codigos/homer.f(注意一半以上只是控制台输出和 cmets,实际代码很小)。

我实际上已经在 Mathematica 中编写了一个程序,它已经完成了这些计算,但我觉得这将是一个很好的测试案例,让我在 Fortran 中动手并转向其他代码。如果有人能指出我正确的方向来进行编译,那就太好了。谢谢。

编辑:所以我只用最多(只是警告)编译它

OPEN (1,FILE='q.dat')

我添加的第二个

DO I=1,5
    WRITE (*,*)
END DO

我收到 3 个错误:

删除 DO 后,我可以添加文字,例如。

    WRITE (*,*) 'This code calculates cross-efficiencies for'

它会编译并生成 .exe。我猜 DO 给我带来了问题。

【问题讨论】:

  • 如果您在这里发布一些代码,以及您尝试编译时遇到的错误,您可能会有更好的运气。
  • 如果您已经编译了示例 Fortran 程序,并且我猜想正在执行,那么是什么阻止您编译和执行自己的程序?我真的没有看到你的问题,而且你的问题对于你想被告知的内容非常模糊。哦,我当然不会阅读您指给我们的代码,我可能会阅读您问题中的合理数量的代码。
  • 仔细阅读错误信息。您的编译器实际上只在代码中发现了 1 个错误 (Symbol 'i' at (1) has no IMPLICIT type),其他两个错误是其直接后果。
  • @SteveHatcher 不要删除IMPLICIT NONE。而是在程序/过程/子例程(具有DO I=1,5 的顶级程序部分)的顶部写入INTEGER I 声明。如果您使用隐式声明,您将面临各种类型错误的错误,这些错误由于某种原因未被编译器捕获。您确定要记住默认情况下名称以A 开头的变量/函数是否具有REALINTEGER 或英文字母表中每个字母的任何类型?
  • 删除IMPLICIT NONE 并没有解决任何问题,它使编译器不会向您报告潜在的严重问题。删除 IMPLICIT NONE 会使事情变得更糟而不是更好。如果您不明白为什么会这样,请转到基础 Fortran 教程并再次阅读该章节。

标签: fortran gfortran


【解决方案1】:

原来我需要

gfortran -ffixed-line-length-n 

标志,对于我链接的源代码,n 为 132。我有一些其他代码可以进行类似的计算,并且它在 Eclipse 的指南中完美地排列,但是这个是出路了。 感谢你们让我走上正轨。

【讨论】:

    【解决方案2】:

    这是一个更简单的解决方案。您的代码是固定格式,即最大长度 源代码中的代码行是 72。您只需在新行中添加“额外”代码。 如下所示(在第 6 列以. 续行)

    C        1         2         3         4         5         6         7
    C23456789012345678901234567890123456789012345678901234567890123456789012
          WRITE (*,*) '(For a single particle size, make it equal to the min 
         .imum value)'
          READ (*,*) kr2 
    C Just in case Homer cannot handle it...
          IF((KR+4.0D0*KR**0.33333+2).gt.MSIZE) THEN
          WRITE (*,*) 'Sorry, this value is too high'
          WRITE (*,*) 'Please enter a value smaller than', int(msize-4.0D0*m
         .size**0.33333+2)
    

    【讨论】:

    • 如果您的 sn-p 应该是您声称的固定形式,为什么您在第 7 列左侧有部分语句?
    • 其实我没有,我在网上发的时候出错了。点。应出现在字母 R 下方,应在字母 W 前一个空格下方。
    • 抱歉,不应出现在字母 R 下方
    • 我明白了,谢谢。无论哪种方式,我都很高兴我最终成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 2011-02-17
    • 2016-04-18
    • 2020-01-03
    相关资源
    最近更新 更多