Fortran函数重新声明数组

时间:2015-02-06 10:31:08

标签: arrays fortran

所以我有一个Fortran函数的代码,我很好奇参数X发生了什么?

DOUBLE PRECISION FUNCTION PBOIL(NGamma,T,X)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
DIMENSION X(NGamma),GAMMA(NGamma)

当X传入时,X是一个数组吗?在第3行中声明的X是否与参数X不同?

2 个答案:

答案 0 :(得分:0)

第一行将函数PBOIL定义为具有三个参数。

第二行表示默认情况下,名称以字母A-H和O-Z开头的变量(包括参数)将被声明为DOUBLE PRECISION(而不是单精度)浮点。

第三行表示参数X和局部变量GAMMA是长度为NGamma的数组。

几乎所有的FORTRAN教科书都应该解释上述内容。

我没有使用任何“现代”FORTRAN编译器。我最后一次真正感动FORTRAN是在20世纪80年代中期。根据我的经验,我会对尝试在FORTRAN中声明一个动态大小的本地数组感到非常不舒服。我不明白为什么MOD​​ERN编译器无法做到这一点,因为现在几乎每台机器都有一个不错的运行时堆栈,但我使用的机器却没有这样做。 (CDC 6600,我第一次学习FORTRAN的机器, NOT 有一个堆栈,我很确定它的FORTRAN编译器不允许使用可变尺寸的本地数组。)

答案 1 :(得分:0)

回答你的问题:

  • X传入时是否为数组?

是。它是一个DOUBLE PRECISION数组,其一个维度为NGamma

  • 第3行中声明的X是否与参数X不同?

首先,术语:在Fortran中,X是一个伪参数(与调用者的实际参数相关联)。在Fortran中,PARAMETER是一个完全不同的野兽:PARAMETER在Fortran中被命名为常量。

所以是的,作为伪参数的X与DIMENSION语句中的相同。它从IMPLICIT DOUBLE PRECISION语句中获取其类型。

现代的意识形态Fortran会声明类似

的声明
  DOUBLE PRECISION, DIMENSION(NGamma), INTENT(IN) :: X

这将使读者清楚这是一个数组伪参数 这个功能不允许改变。

GAMMA被声明为与X形状相同的数组。这曾经是无效的FORTRAN 77(但被许多编译器接受为扩展),但对Fortran 90或更高版本来说完全没问题。