“数组的维度1具有范围4而不是2161727907037185”

时间:2018-04-23 02:25:25

标签: fortran

我在运行时遇到错误。我有一个名为“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向量作为输出吐出。

0 个答案:

没有答案