首页 > 解决方案 > 编译旧代码时“在调用中缺少实际参数‘值’”

问题描述

我正在尝试编译的代码名为gepol93,它于 1994 年使用 FORTRAN 77 完成。

这是一个旨在计算分子的某些化学性质的程序。

我尝试使用命令编译文件,gfortran GEPOL93.FOR但出现错误:

EPOL93.FOR:598.72:

      IF(LPR)CALL STAT(NCOR)
                                                                        1
Error: Missing actual argument 'values' in call to 'stat' at (1)

我对 FORTRAN 不熟悉,我猜代码太旧了,无法与我计算机上的编译器兼容。

我可以肯定的是,该代码绝对正确,因为它自 1994 年以来从未被其他人修改过(您可以使用 进行检查ls -l),并且现在许多学者都在使用它进行研究。

但问题是如何将代码编译成 .out 文件?有谁能够帮我?

在第一个子程序PCOUNT中,STAT被调用。

      SUBROUTINE PCOUNT(NATOM,NCOR,KSURF,LPR)
C     -------------------------------------------------------------------
C     This prints general counters
C     -------------------------------------------------------------------

      IMPLICIT NONE

      LOGICAL FIRST
      LOGICAL LPR

      INTEGER*2 IUSE

      INTEGER*4 I,IUC
      INTEGER*4 J
      INTEGER*4 MC,MI
      INTEGER*4 NATOM,NCOR,NEWS

      REAL*4 RE
      REAL*4 XE
      REAL*4 YE
      REAL*4 ZE

      CHARACTER*5 KSURF

      PARAMETER (MC=100000,MI=6)

      COMMON/CSFE/XE(MC),YE(MC),ZE(MC),RE(MC),IUSE(MC)

      DIMENSION IUC(MI)

      IF(LPR)WRITE(6,'(/A)')' ===> Start Subroutine Pcount '

      NEWS=NCOR-NATOM

      IF(KSURF.EQ.'ESURF')THEN
         WRITE(6,'(3(A,I7/))')
     & ' Number of INITIAL coordinates          ',NATOM,
     & ' Number of NEW     coordinates          ',NEWS,
     & ' Number of TOTAL   coordinates          ',NCOR
      ELSE
         WRITE(6,'(A,I7/)')
     & ' Number of TOTAL coordinates            ',NCOR
      END IF      

      IF(LPR)THEN
      
        DO J=1,MI
        IUC(J)=0
        END DO

        DO I=1,NATOM
        J=IUSE(I)
        IUC(J)=IUC(J)+1
        END DO
     
        FIRST=.TRUE.
        DO J=1,MI
        IF(IUC(J).NE.0)THEN

          IF(FIRST)THEN
          FIRST=.FALSE.
          WRITE(6,'(A)')
     &          ' MORE INFORMATION ABOUT INITIAL SET OF COORDINATES'
          END IF

          WRITE(6,'(A,I2,A,I7)')
     &    ' Number of coordinates with IUSE ',J,'=',IUC(J)
        END IF
        END DO

        IF(KSURF.EQ.'ESURF')THEN

          DO J=1,MI
          IUC(J)=0
          END DO

          DO I=NATOM+1,NCOR
          J=IUSE(I)
          IUC(J)=IUC(J)+1
          END DO
     
          FIRST=.TRUE.
          DO J=1,MI
          IF(IUC(J).NE.0)THEN

              IF(FIRST)THEN
                FIRST=.FALSE.
                WRITE(6,'(A)')
     &        ' MORE INFORMATION ABOUT NEW SET OF COORDINATES'
              END IF

            WRITE(6,'(A,I2,A,I7)')
     &    ' Number of coordinates with IUSE ',J,'=',IUC(J)
          END IF
          END DO

        END IF

      IF(LPR)CALL STAT(NCOR)

      END IF
     
      RETURN
      END
      SUBROUTINE STAT(NCOR)
C     ------------------------------------------------------------- 
C     This prepares some statistics about the set of spheres
C     ------------------------------------------------------------- 
      IMPLICIT NONE

      INTEGER*2 IUSE

      INTEGER*4 CT6,CT4
      INTEGER*4 I
      INTEGER*4 J
      INTEGER*4 MAXI,MC
      INTEGER*4 NCOR,NINT
      INTEGER*4 TMIN,TMAX

      REAL*4 C
      REAL*4 R1,R2,RE
      REAL*4 VINT
      REAL*4 XE
      REAL*4 YE
      REAL*4 ZE

      PARAMETER (MC=100000,MAXI=100)

      COMMON/CSFE/XE(MC),YE(MC),ZE(MC),RE(MC),IUSE(MC)

      DIMENSION CT4(MAXI),CT6(MAXI)

      WRITE(6,'(/A)')' ==> Start subroutine STAT'
      
      VINT=0.1
      TMIN=9000
      TMAX=0

      DO J=1,MAXI
      CT4(J)=0      
      CT6(J)=0      
      END DO

      DO I=1,NCOR
      C=RE(I)/VINT
      J=INT(C)+1
      IF(IUSE(I).EQ.6)THEN

        IF(J.LT.MAXI)THEN
          CT6(J)=CT6(J)+1
          TMAX=MAX(TMAX,J)
          TMIN=MIN(TMIN,J)
        END IF

      ELSE IF(IUSE(I).EQ.4)THEN 

        IF(J.LT.MAXI)THEN
          CT4(J)=CT4(J)+1
          TMAX=MAX(TMAX,J)
          TMIN=MIN(TMIN,J)
        END IF

      END IF
      END DO

      WRITE(6,'(A)')' RADII .GE. and .LT.    TYPE 4    TYPE 6'

      DO J=TMIN,TMAX
      R1=(J-1)*VINT
      R2=J*VINT
      WRITE(6,'(2F10.5,2I10)')R1,R2,CT4(J),CT6(J)
      END DO
 
      RETURN
      END
C

标签: fortran

解决方案


推荐阅读