Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 编译错误:(1)处的Dummy不能有初始值设定项。什么是虚拟变量?_Arrays_Fortran_Fortran90 - Fatal编程技术网

Arrays 编译错误:(1)处的Dummy不能有初始值设定项。什么是虚拟变量?

Arrays 编译错误:(1)处的Dummy不能有初始值设定项。什么是虚拟变量?,arrays,fortran,fortran90,Arrays,Fortran,Fortran90,我在模块中定义了子例程: MODULE dmotifs INTEGER, PARAMETER :: nsp=4,nrx=8,maxprx=4 TYPE :: PRM REAL, PRIVATE :: cref=1e-6,tref=1 REAL, DIMENSION(nrx,maxprx) :: k REAL :: input END TYPE PRM CONTAINS SUBROUTINE unreg(y,param,r,s) TYPE(PRM

我在模块中定义了子例程:

MODULE dmotifs

INTEGER, PARAMETER :: nsp=4,nrx=8,maxprx=4


TYPE :: PRM
    REAL, PRIVATE :: cref=1e-6,tref=1
    REAL, DIMENSION(nrx,maxprx) :: k
    REAL :: input
END TYPE PRM

CONTAINS

SUBROUTINE unreg(y,param,r,s)

        TYPE(PRM), INTENT(IN) :: param
        REAL, DIMENSION(nsp), INTENT(IN) :: y
        INTEGER, DIMENSION(nsp,nrx), INTENT(OUT) :: s=0
        REAL, DIMENSION(nrx,1), INTENT(OUT) :: r=0
        REAL :: mOut, mCtrl, pOut, pCtrl

        mOut=y(ind_mOut)
        mCtrl=y(ind_mCtrl) 
        pOut=y(ind_pOut)
        pCtrl=y(ind_pCtrl)  

        r(1)=param%k(1,1)*mOut
        s(ind_mOut,1)=-1 

        ! and so on ....

END SUBROUTINE unreg
END MODULE dmotifs
当我使用gfortran编译时:
gfortran-Wall-c“dmotifs.f90”
,我遇到了以下错误:

    SUBROUTINE unreg(y,param,r,s)
                    1
Error: Dummy 'r' at (1) cannot have an initializer
我不理解这个错误的本质。我试着保留和删除
INTENT(OUT)
,但没有任何区别

这里的虚拟变量是什么


这是不是
r(1)=参数%k(1,1)*mOut
赋值不正确?

这正是编译器告诉您的:您不能在声明时初始化伪变量。您的子例程应为:

SUBROUTINE unreg(y,param,r,s)

        TYPE(PRM), INTENT(IN)                    :: param
        REAL, DIMENSION(nsp), INTENT(IN)         :: y
        INTEGER, DIMENSION(nsp,nrx), INTENT(OUT) :: s
        REAL, DIMENSION(nrx,1), INTENT(OUT)      :: r
        REAL :: mOut, mCtrl, pOut, pCtrl

        ! Initialize the output
        s = 0
        r = 0.
        ! and so on ....

END SUBROUTINE unreg
“参数”
y
param
r
s
在Fortran中称为伪变量,以区别于
mOut
等“实”变量

r
是一个二维数组,所以

r(1)=param%k(1,1)*mOut
不好。。。你可能是说

r(1,1)=param%k(1,1)*mOut

因为
r
的第二维度只有一个长度

某些语言和文本使用Fortran所使用的术语“形式参数”,并且已经使用“伪参数”这个术语很久了。@HighPerformanceMark遗憾的是,编译器消息并不总是遵循Fortran约定。