| 本帖最后由 kyra 于 2020-3-8 08:59 编辑 
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode SUBROUTINE zdf_phy1(kt, wp, jpjm1, jpkm1, jpi, jpj, jpk, avt, avm, avm_k, avt_k)
                 INTEGER, INTENT(in) ::   kt  
                 INTEGER, INTENT(in) :: wp 
                 INTEGER, INTENT(in) ::   jpjm1, jpkm1 
                 INTEGER, INTENT(in)  ::   jpi, jpj, jpk
                 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   avt, avm
                 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   avm_k , avt_k  
                 !
                 avt(:,:,2:jpkm1) = avt_k(:,:,2:jpkm1)
                avm(:,:,2:jpkm1) = avm_k(:,:,2:jpkm1)
END SUBROUTINE zdf_phy1
 我在上面的子程序中定义了一个wp,它在另一个module中被定义为一个常数:
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode MODULE par_kind
   INTEGER, PUBLIC, PARAMETER ::   dp = SELECTED_REAL_KIND(12,307)   
   INTEGER, PUBLIC, PARAMETER ::   wp = dp 
 我在主程序中调用了最上面那个SUBROUTINE,同时在主程序的MODULE中调用了下面这个wp,希望将wp的值传递给主程序中,但是编译却没有通过,错误信息为:
 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   avt, avm
 1
 Error: Parameter ‘wp’ at (1) has not been declared or is a variable, which does not reduce to a constant expression
 
 让我困惑的是例如最上方SUBROUTINE中的jpjm1,jpi等变量我采用的也是相同的方法并且可以编译通过,只不过它们不是常量。
 请问数据是否是常数对参数的传递会有影响吗?还是因为别的原因?我是初学者,有些地方表述不清请见谅。。
 
 
 
 |