在fortran中传递数组的问题



我正在对fortran子例程进行函数调用:

CALL EGFpar(T_e,X_e,Y_e,cpi(1:nx,1:Nspec),WEG,IWEG)

这里,IWEG在初始化例程中用整数值进行初始化。IWEG和WEG在包含文件中声明:

INTEGER  LIWEGmax, LWEGMAX
PARAMETER (LIWEGmax=400, LWEGMAX=6000000)
INTEGER IWEG(LIWEGmax)
DOUBLE PRECISION WEG(LWEGmax)
COMMON/EGINI/    IWEG, WEG

在使用VSCode进行调试时,我可以看到我初始化它时使用的值。然而,当我进入EGFpar时,除了IWEG之外,所有传递的数组都有其初始化值。IWEG什么都没有。不是零,而是空白。子程序EGFpar在下面给出

C-----------------------------------------------------------------------
SUBROUTINE EGFPAR ( NP, T, X, Y, CP, WEG, IWEG )
C-----------------------------------------------------------------------
C
C     This subroutine initializes the thermomolecular
C     parameters that are needed in order to evaluate
C     the transport linear systems.
C     The parameters that have to be evaluated depend on the transport
C     coefficients that will be subsequently computed, as indicated
C     by JFLAG. This flag has been initialized when calling EGINI.
C
C     Input
C     -----
C        NP           number of nodes
C        T(NP)        temperature
C        X(NP,NS)     species mole fractions
C        Y(NP,NS)     species mass fractions
C        CP(NP,NS)    species heat capacities at constant pressure
C                     per unit mass
C        WEG          double precision work array for EGLIB
C        IWEG         integer work array for EGLIB
C
C-----------------------------------------------------------------------
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
IMPLICIT INTEGER (I-N)
DIMENSION WEG(*), IWEG(*)
C-----------------------------------------------------------------------
INCLUDE 'eg.cmn'
C-----------------------------------------------------------------------
CALL LFPAR ( NP, JFLAG, WEG(IEGPA), 
&       T, WEG(IDLT1), WEG(IDLT2), WEG(IDLT3), 
&       WEG(IDLT4), WEG(IDLT5), WEG(IDLT6),
&       WEG(IEGRU), NS, WEG(IAAA), WEG(IBBB),
&       WEG(IEGWT), WEG(IBIN), WEG(IETA), 
&       WEG(IETALG), WEG(ICTAIJ), WEG(IFITA), 
&       WEG(ICINT), CP, WEG(ICXI), 
&       WEG(IEPSIJ), WEG(IEGEPS), WEG(IEGCFD), WEG(IEGCFE), 
&       WEG(IEGZRT), WEG(IEGDIP), IWEG(IEGLIN) )
C-----------------------------------------------------------------------
CALL EGFXY ( NP, NS, WEG(IXTR), WEG(IYTR), WEG(IAUX), X, Y )
C-----------------------------------------------------------------------
RETURN
END

这里出了什么问题?

子程序调用
CALL EGFpar(T_e,X_e,Y_e,cpi(1:nx,1:Nspec),WEG,IWEG)

错过了它的第一个整数参数NP,而应该是

CALL EGFpar(NP, T_e,X_e,Y_e,cpi(1:nx,1:Nspec),WEG,IWEG)

如果您有一个显式接口,编译器可能会捕捉到此错误。这可以通过多种方式实现:

  • 手动定义接口块
  • 在现代Fortran中,通过将过程放在模块中
  • 将过程放入contains部分(例如子程序、子程序(

查看此答案,了解有关显式接口的更深入信息。

最新更新