Fortran错误; forrtl:严重(408):堡垒(2)

时间:2014-03-18 16:00:05

标签: fortran intel-fortran

我可以很好地构建我的项目(IA-32 OS,Windows 7.与Microsoft Visual Studio 2008集成的Intel Visual Fortran 11.1.048)。当我运行.exe文件时,它会出现以下错误:

forrtl: severe (408): fort(2): Subscript #1 of the array dProductIDev has value 5 which is greater than the upper bound of 4

它还表示在最后一行中计算clcMatA时,函数clcMatA中发生了错误(我已标记如下所示)。功能代码是:

        function clcMatA(cStress,D,I_dev,dtime,props,ndi,ntens)

        implicit none

        integer :: ndi,ntens
        real*8 :: Z(2,ntens), dProductIDev(ntens,ntens), &
        clcMatA(ntens,ntens),D(ntens,ntens),I_dev(ntens,ntens),&
        cStress(ntens),dProductSigmadev2(ntens,ntens),&
        sigmaDevDyadicProduct(ntens,ntens),identity(ntens,ntens),&
        sigmaDev(ntens),props(5),alpha, beta,dtime,coeff_1,coeff_2,coeff_3


        call identityMatrix(identity,ntens)

        if (normm(cStress,ntens)==0) then

            clcMatA = identity

        else
            alpha = expValVolume/(2*expValDStran)
            beta = (6*expValVolume/(pi*expValPStran))**(1/props(4))*props(3)
            sigmaDev = dev(cStress,I_dev,ntens)
            dProductIDev = matmul(D,I_dev)

            do i=1,ntens
                do j=1,ntens
                    sigmaDevDyadicProduct(i,j)= sigmaDev(j)*sigmaDev(i)
                end do
            end do

            dProductSigmadev2 = matmul(D,sigmaDevDyadicProduct)


            call zVals(Z,sigmaDev,props,ntens)

            do i=1,ntens
                do j=1,ntens
                    clcMatA(i,j) = identity(i,j) + dtime*( (alpha+beta* &
                    normm(sigmaDev,ntens)**(1./props(4)-1.))*dProductIDev(i,j) + & ! The line causing the error
                    beta*(1./props(4)-1.)*normm(sigmaDev,ntens)**(1./props(4)-3.)* &
                    dProductSigmadev2(i,j) )
                end do    
            end do

        end if

        end function

变量ijexpValVolumeexpValDStranexpValPStran在函数clcMatA,{{包含1}},devidentityMatrix

normm值,下标的上限,传递给值为4的函数。我还在中断模式下检查它并检出。我还用ntens替换了ntens!在计算4但我得到了同样的错误。

我打印了传递给函数的参数,我遇到了一些奇怪的事情。 clcMatA应该是对称矩阵,并具有以下组件:

D

所以我也把D改成了它应该是什么,但又得到了同样的错误。

(我必须使用这种类型的变量,因为这个函数是由商业有限元软件(ABAQUS)间接调用的,并且交换变量的类型应该匹配。我也试过real(8),但是没有改变。)

我不知道那里发生了什么。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

总结:应该是本地的变量被声明为模块变量。这导致在使用模块的不同范围中使用相同的变量(使用关联)或者在模块内部(主机关联)。

应在该特定范围内声明对特定范围(例如程序)独立的变量。否则,调用的其他过程可能会无意中更改调用范围中使用的值。