gfortran编译错误:(1)处'intrinsic random_seed'的'put'参数大小过小

3
我正在尝试使用gfortran编译以下代码
program perm_field


implicit double precision(a-h,o-z)
parameter (pi=3.14159)

allocatable :: perm(:),alog_perm_all(:),u(:),xi(:),&
               perm_zone(:),alog_perm(:)
integer :: seed(2)
external    dgemm

open(unit=1,file='input.dat')
open(unit=3,file='random_log_perm.dat',access='append')
open(unit=31,file='random_log_perm_initial.dat',access='append')
open(unit=4,file='isim.dat')
open(unit=7,file='random_log_perm_updated.dat')
open(unit=5,file='kalman_index.dat')
open(unit=6,file='nsim.dat')
open(unit=8,file='perm_zone.dat')
open(unit=111,file='perm.dat')

read(4,*) isim
   seed(1)=isim;
   call random_seed(put=seed(1:2))
   call random_number(u)

但是这给我带来了错误。
   call random_seed(put=seed(1:2))
                        1
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (2/8)

它之前使用ifort编译成功,但现在需要使用gfortran进行编译。 可能的问题是什么,如何解决?


实际上,在调用随机种子和顶部之间有很多代码,我在这里提问时已经将其删除了! - Praveer N
1个回答

2
阅读有关 random_seed() 的文档。文档指出,put 必须大于或等于由 size 返回的数字。

因此,在我的系统上进行快速测试表明,seed 应至少为 12。

program seed_test

        implicit none
        integer n

        n = 0

        call random_seed(size=n)
        write(*,*) 'n = ', n
end program seed_test

当我编译并运行它时:
$ gfortran -o seed_test seed_test.f90
$ ./seed_test
 n =           12
$

根据您的错误提示,密码必须至少为8个字符。

我把它改成了8,现在可以编译了。谢谢! - Praveer N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接