我在运行时遇到错误。我有一个名为“testing.f90”的文件,转载如下。
module constants
integer, parameter :: i4b = selected_int_kind(9)
integer, parameter :: ndp = kind(1.0d0)
end module constants
module common
use constants
implicit real(ndp) (a-h,o-z)
implicit integer(i4b) (i-n)
! Parameters
real(ndp), parameter :: mu = 6.0d-1
real(ndp), parameter :: phi = 1.0d-1
real(ndp), parameter :: theta = 4.0d-1
real(ndp) :: stock(2)
real :: output(4)
real(ndp) :: resource_split(4)
real(ndp) :: tfpm,tfps
end module common
program main
use common
use constants
stock(1) = 0.5
stock(2) = 2.5
resource_split = (/0.1 * stock(1),0.1* stock(2),0.9*stock(1),0.9*stock(2)/)
tfpm = 1.032
tfps = 1.512
output = funcv(resource_split)
end program main
我的函数funcv
包含在名为funcv.f90
的单独文件中。它看起来像这样:
function funcv(x)
use common
! the argument is a 4-vector. The elements are Ks,Ns,Km,Nm
real x(4)
dimension funcv(4)
funcv(1) = mu * tfpm * x(3)**phi * x(4)**(mu-1) &
- (1-theta) * tfps * x(1)**theta * x(2)**(-theta)
funcv(2) = phi * tfpm * x(3)**(phi-1) * x(4)**mu &
- theta * tfps * x(1)**(theta-1) * x(2)**(1-theta)
! stock(1) is the current capital stock
! stock(2) is the current labor force
funcv(3) = x(1) + x(3) - stock(1)
funcv(4) = x(2) + x(4) - stock(2)
return
end function funcv
代码编译好了。 (我用gfortran -o testing testing.f90 funcv.f90 -g3 -fcheck=all -Wall -fbacktrace -Wno-tabs
编译)。我意识到有很多类型转换错误;这是因为我借用了一些以单精度编写的例程,而我的代码是双精度的。但在运行时我收到以下错误:
At line 1 of file funcv.f90
Fortran runtime error: Dimension 1 of array 'funcv' has extent 4 instead of 2161727907037185
这是什么意思?我打算让funcv成为一个函数,将4向量作为输入,并将4向量作为输出吐出。