如何编译未知方言和未知库的Fortran代码

时间:2013-03-31 00:19:36

标签: fortran intel-fortran

我正在尝试编译一些Fortran代码,根据文档,这些代码已知用“英特尔Fortran编译器11”进行编译。但是,当我尝试使用英特尔®FortranComposer 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"
------^

2 个答案:

答案 0 :(得分:0)

可能是F77或F90,具体取决于您完成格式化的方式。 Stack oveflow fomatting需要4个空格来启动代码。在第225行,它是缩进6还是根本没有缩进。如果它缩进6并且第265行缩进5,则它是F77。

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

在出错的第一行,检查行终止。所有行应以CR LF或LF结束。如果有混合,编译器会抛出一个摇摆不定的。

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

答案 1 :(得分:0)

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

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

至于方言,后来我从提供商处听说代码主要是用Fortran 77编写的,有些部分后来修改为Fortran 90.