如何修复FORTRAN IV错误:"虚拟参数名称在此上下文中无效"

时间:2015-10-08 12:01:03

标签: fortran intel-fortran

我需要运行一个旧的FORTRAN IV代码(我应该运行得很好)。我下载了英特尔编译器的试用版,并尝试使用以下命令编译我给出的源文件:

ifort  -f66 abel.for -o mycode

其中abel.for是源文件的名称。我收到了一堆警告和错误。我想问一下我给出的第一个错误:

A dummy argument name is invalid in this context [DINT]

编译器错误指示行:

EXTERNAL DINT

在下一个子程序中:

      SUBROUTINE ABEL4(IN,X,Y,DINT,YCALC)                               AAOK0354
      IMPLICIT REAL*8(A-H,O-Z)                                          AAOK0355
      EXTERNAL DINT                                                     AAOK0356
      DIMENSION X(1),Y(1),YCALC(1)                                      AAOK0357
      COMMON /PI/ PI                                                    AAOK0358
      COMMON /R/ R                                                      AAOK0359
      COMMON /IK/ IK                                                    AAOK0360
      COMMON /SPLIN/ XN(100),FN(100),GN(100),B(251),D(251),N            AAOK0361
      DO 50 L=1,IN                                                      AAOK0362
      R=X(L)                                                            AAOK0363
      IK=L                                                              AAOK0364
      IF(R.EQ.0.D0) R=1.D-6                                             AAOK0365
      YCALC(L)=0.D0                                                     AAOK0366
      IF(R.EQ.X(IN)) R=R-1.D-6                                          AAOK0367
      RE=1.D-6                                                          AAOK0368
      LEV=1                                                             AAOK0369
      UL=1.D0                                                           AAOK0370
      WL=R+1.D-6                                                        AAOK0371
      CALL DINTEG(YC,DINT,WL,UL,1.D-12,RE,LEV,ERR,IFL)                  AAOK0372
      YCALC(L)=-(-Y(L)/(1.D0-R*R)**.5D0+YC)/PI                          AAOK0373
50    CONTINUE                                                          AAOK0374
      RETURN                                                            AAOK0375
      END                                                               

我还必须指出主程序的第一行是:

      BLOCK DATA                                                        AAOK0028
        COMMON /WR/ IR,IW                                               AAOK0029
        DATA IR/5/,IW/6/                                                AAOK0030
      END                                                               AAOK0031
C                                                                       AAOK0032
C                 M  A  I  N      P  R  O  G  R  A  M                   AAOK0033
C                                                                       AAOK0034
C                                                                       AAOK0035
C COMMON AREAS:                                                         AAOK0036
C     /WR/ - I/O CHANNNELS. SEE BLOCK DATA.                             AAOK0037
C     /PI/ - PI=3.14......                                              AAOK0038
C     /R/  - R IS THE POSITION OF THE POINT CURRENTLY INVERTED.         AAOK0039
C     /SPLIN/ - X,Y ARE INPUT ARGUMENTS AND DATA,N -NO. OF KNOTS,       AAOK0040
C               XN,FN,GN -KNOTS,SPLINE VALUE AND ITS FIRST DERIVATIVE   AAOK0041
C                         AT KNOTS.                                     AAOK0042
C                                                                       AAOK0043
      IMPLICIT REAL*8 (A-H,O-Z)                                         AAOK0044
      DIMENSION A(100),B(100),YCALC(251),YREAL(251),                    AAOK0045
     *          C(100),D(100),XD(500),YD(500),WD(500),W(8006),          AAOK0046
     *          DN(500),THETA(500),RD(500)                              AAOK0047
      EXTERNAL DINT,GINT                                                AAOK0048
      COMMON /WR/ IR,IW                                                 AAOK0049
      COMMON /PI/ PI                                                    AAOK0050
      COMMON /R/ R                                                      AAOK0051
      COMMON /SPLIN/ XN(100),FN(100),GN(100),X(251),Y(251),N            AAOK0052
      DATA WD/500*1.D0/                                                 AAOK0053
      PI=4.D0*DATAN(1.D0)                                               AAOK0054

并且还包含以下声明:

EXTERNAL DINT
在AAOK0048行中,程序中还有一个函数DINT的定义:

C                                                                       AAOK0377
C INTEGRAND  FOR INVERSION FORMULA 4                                    AAOK0378
C                                                                       AAOK0379
      DOUBLE PRECISION FUNCTION DINT(T)                                 AAOK0380
      IMPLICIT REAL*8 (A-H,O-Z)                                         AAOK0381
      COMMON /IK/ IK                                                    AAOK0382
      COMMON /SPLIN/ XN(100),FN(100),GN(100),X(251),Y(251),N            AAOK0383
      U=SPLVAL(-1,N,XN,FN,GN,T)                                         AAOK0384
      V=X(IK)                                                           AAOK0385
      S=SPLVAL(-1,N,XN,FN,GN,V)                                         AAOK0386
      DINT=(U-S)*T/(T*T-V*V)**1.5D0                                     AAOK0387
      RETURN                                                            AAOK0388
      END                                                               AAOK0389

如果有人可以在这个迷宫中提供帮助,我会很感激,并告诉我如何解决这个错误,因为我不太了解FORTRAN,更不用说FORTRAN IV。

0 个答案:

没有答案