我正在尝试使用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编译它。 可能是什么问题以及如何解决这个问题?
答案 0 :(得分:1)
阅读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 。