在FORTRAN 77和gfortran分配数组(Allocatable arrays in for

2019-10-19 22:08发布

我试图编译gfortran和获取误差分配数组一些老FORTRAN77程序。 如果我在F90-风格定义数组,如:

REAL*8,allocatable::somearray(:)

一切都很好,但在那些旧的程序数组定义为:

REAL*8  somearray[ALLOCATABLE](:)

引起gfortran误差输出:

REAL*8,allocatable::somearray[ALLOCATABLE](:)                        
                             1
Fatal Error: Coarrays disabled at (1), use -fcoarray= to enable

我真的想避免重写整个程序来F90的风格,所以,你可以告诉我,有没有办法强迫gfortran编译它? 非常感谢。

Answer 1:

对于标准的检查,你可以使用-std标志

-std = STD指明该方案预计将符合标准,这可以是以下之一f95', F2003' , f2008', GNU“或'传统”。

“逼” gfortran编译代码,你必须使用语法它承认



Answer 2:

我可能会去搜索和替换。 例如,

  sed 's/\(REAL\*8\)[[:blank:]]\+\([^[]\+\)\[ALLOCATABLE\]\(.*\)/\1, allocatable :: \2\3/' <old.source> > <new.source>

其中的sed是可用的。

当然,要小心SED :)。

在任何情况下,因为它似乎你的代码写在一些不规范的版本旧的Fortran的,你可能需要在任何情况下的变化。



Answer 3:

对于什么是值得的英特尔Fortran编译器(v13.something)无投诉编译如下微程序。 此执行和写入10到终端:

  REAL*8  somearray[ALLOCATABLE](:)
  allocate(somearray(10))
  print *, size(somearray)
  end

鉴于英特尔编译器我怀疑奇怪的声明是由DEC Fortran语言,可能是一个早期实现的东西在Fortran 90的,后来规范提供了一个扩展的历史。



文章来源: Allocatable arrays in fortran 77 and gfortran