FORTRAN 块数据似乎不起作用
FORTRAN block data seems to not be working
我正在处理一些遗留代码,这些代码严重依赖于使用 BLOCK DATA
初始化的公共块,类似于下面的代码。
BLOCK DATA filename
PARAMETER (size=100)
CHARACTER*8 somearray(size)
COMMON /block1/ somearray
DATA(somearray(i), i=100)/
*'string1', 'string2', ... , 'string100'/
END
在程序的某个时刻,一个子例程使用了这个公共块,如下面的代码所示。
SUBROUTINE SUB(array)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
CHARACTER*8 array(*), somearray(100)
COMMON /block1/ somearray
DO 100 I=1, iterations
array(I)=somearray(I)
...
100 CONTINUE
END
此处 somearray
在每个字符串中有几个空格,而不是 BLOCK DATA
中指定的实际值。这可能是什么原因造成的?
注:代码是用Intel Fortran编译的
我通过在任何 BLOCK DATA
的 END
语句之前添加 SAVE
语句找到了解决此问题的方法,如下所示。
BLOCK DATA filename
PARAMETER (size=100)
CHARACTER*8 somearray(size)
COMMON /block1/ somearray
DATA(somearray(i), i=100)/
*'string1', 'string2', ... , 'string100'/
SAVE
END
我正在处理一些遗留代码,这些代码严重依赖于使用 BLOCK DATA
初始化的公共块,类似于下面的代码。
BLOCK DATA filename
PARAMETER (size=100)
CHARACTER*8 somearray(size)
COMMON /block1/ somearray
DATA(somearray(i), i=100)/
*'string1', 'string2', ... , 'string100'/
END
在程序的某个时刻,一个子例程使用了这个公共块,如下面的代码所示。
SUBROUTINE SUB(array)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
CHARACTER*8 array(*), somearray(100)
COMMON /block1/ somearray
DO 100 I=1, iterations
array(I)=somearray(I)
...
100 CONTINUE
END
此处 somearray
在每个字符串中有几个空格,而不是 BLOCK DATA
中指定的实际值。这可能是什么原因造成的?
注:代码是用Intel Fortran编译的
我通过在任何 BLOCK DATA
的 END
语句之前添加 SAVE
语句找到了解决此问题的方法,如下所示。
BLOCK DATA filename
PARAMETER (size=100)
CHARACTER*8 somearray(size)
COMMON /block1/ somearray
DATA(somearray(i), i=100)/
*'string1', 'string2', ... , 'string100'/
SAVE
END