fortran - 编译旧代码时“在调用中缺少实际参数‘值’”
问题描述
我正在尝试编译的代码名为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
解决方案
推荐阅读
- elasticsearch - Elasticsearch 在使用 Function score 进行显着术语聚合时会考虑喜欢
- java - JUnit 测试 Android NullPointerException
- java - 升级到 Spring Boot 2.2 后 Springboot WebFlux 测试失败
- python - 如何将“for循环”转换为“递归”?
- jquery - 如何使用 laravel 中的 @included 在引导模型中编辑表单
- excel - Excel VBA - 将行复制并粘贴到新的空白行,从预定义的位置开始
- android - 如何为 MongoDB Atlas 中的每个设备建立单一连接?
- c# - C# - 将用户批量添加到 AD 组时出现问题
- python - Python discord bot 跳过代码或停止工作
- python - 运行 sys.meta_path[2].find_distributions() 时出现 Python OSError(pytest 需要)