我正在尝试使用mac-ports (OS-X)中的Gfortran 4.7编译以下简单代码:
program main
implicit none
integer :: n = 1, clock, i
integer, dimension(1) :: iseed
! initialize the random number generator
call random_seed(size = n)
call system_clock(COUNT=clock)
iseed = clock + 37 * (/ (i - 1, i = 1, n) /)
! iseed = clock
! iseed = abs( mod((clock*181)*((1-83)*359), 104729) )
call random_seed(PUT = iseed)
end program main
并且出现了这个错误:
gfortran-mp-4.7 tmp.f90
tmp.f90:17.23:
call random_seed(PUT = iseed)
1
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/12)
我完全不使用Fortran(我是C++开发人员),所以真的很感谢有人能帮忙使其正常工作。
p.s. 在类似问题上,我发现了几篇论坛文章,当前未注释的解决方案类似于此GCC错误报告中提到的。
在这个stackoverflow帖子中提到了使用abs
的方法(我没有运行并行程序,因此没有加PID)。
更新:
以下方式可行:
program main
implicit none
integer :: n = 12, clock, i
integer, dimension(:), allocatable :: iseed
! initialize the random number generator
allocate(iseed(n))
call random_seed(size = n)
call system_clock(COUNT=clock)
iseed = clock + 37 * [(i, i = 0,n-1)]
call random_seed(PUT = iseed)
end program main
n = 12
和integer,dimension(12):: iseed
。random_seed
函数的put
参数需要一个由12个整数组成的数组。 - Yossarian