-1

我正在尝试编译一些 Fortran 代码,根据文档,这些代码已知可以使用“Intel Fortran Compiler 11”进行编译。但是,当我尝试使用 Intel® Fortran Composer XE 2013 for OS X 附带的 ifort 版本(此处:http://software.intel.com/en-us/fortran-compilers)编译代码时我得到一些错误。我怀疑我是 1) 使用的编译器与使用的 Fortran 的确切方言不兼容和/或 2) 没有包含一些必要的库。

我不是 Fortran 程序员,所以我希望有更多经验的人能够浏览代码并识别这是否只是使用不同编译器的简单问题,设置一些编译器选项,包括一些特定的库,或者如果我完全错过了其他东西。

完整的源代码可以在目录上方找到:http: //baydeltaoffice.water.ca.gov/modeling/deltamodeling/models/dsm2/dsm2.cfm

首先,我只是尝试在 /DSM2_v8_0_6_src/dsm2_v8_0/src/common 中编译 groups.f (这需要先编译一些其他模块),但最终目标是编译 DSM2_v8_0_6_src/dsm2_v8_0/src/ptm /native/fixedData.f 及其所有依赖项。

我使用的语法遵循这个基本模式:

ifort -c DSM2_v8_0_6_src/dsm2_v8_0/src/common/groups.f

为了了解我遇到的错误类型,这里有几种重复出现的类型:

groups.f(225): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: 
( * ) :: , . % + - [ : . ** / // .LT. < .LE. <= .EQ. == ...
write(unit_error,*)"Error in matching text pattern:",trim(pattern)
---------------------------------------------------------------------^

groups.f(265): error #5120: Unterminated character constant
&     "Error in pattern matching. Implementation count does not equal count in NumberMatches"
------^
4

2 回答 2

0

如果这可能有助于将有类似问题的人指向正确的方向,在进行一些挖掘之后,我能够确定代码最初是使用 Visual Studio 编译的,编译器选项 FixedFormLineLength="fixedLength132"。因此,从命令行使用 ifort,我可以使用以下基本模式进行编译(为了清楚起见,省略所有包含路径等):

ifort -c -132 DSM2_v8_0_6_src/dsm2_v8_0/src/common/groups.f

至于方言,后来听供应商说,代码大部分是用 Fortran 77 写的,有些部分后来修改为 Fortran 90。

于 2013-04-02T23:51:53.460 回答
0

可能是 F77 或 F90,具体取决于您进行格式化的方式。堆栈溢出格式需要 4 个空格来启动代码。在第 225 行,它是缩进 6 还是根本不缩进。如果它缩进 6 并且第 265 行缩进 5 则它是 F77。

另一个问题是当从一台机器移动到另一台机器时,前导空格是否已被剥离。如果是这种情况,则需要重新插入它们。

在有错误的第一行,检查行终止。所有行都应以 CR LF 或仅以 LF 结尾。如果有混合,编译器将抛出一个摆动。

如果是 F77,请尝试将带有 .f 扩展名的文件重命名为 .for 扩展名。ifort 肯定会把它们选为 f77。

于 2013-03-31T11:24:22.360 回答