作业帮 > 综合 > 作业

关于Fortran中write语句的位置

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/04 11:11:36
关于Fortran中write语句的位置
有个Fortran的函数如下:
SUBROUTINE EXCOR_DER_PARA(RHO, NDER, EXCA, LEXCHG, TREL)
USE prec
USE constant
IMPLICIT NONE
LOGICAL TREL
INTEGER LEXCHG ! type of gradient corrected func.
INTEGER NDER ! number of derivative
REAL(q) RHO
REAL(q) EXCA(4),EXCA_(4)
REAL(q) RHOT,EXC0,EXC2,EXCD0,EXCD2,EPS
! this is the best compromise for densities between 1000 and 0.1
REAL(q),PARAMETER :: DELTA=1E-3_q
WRITE(*,*)"######" 《++++这一行是我后来加入的

CALL EXCOR_PARA(RHO,EXCA(1),EXCA(2),LEXCHG,TREL)
IF (NDER>0) THEN
EPS=DELTA*RHO
RHOT=RHO-EPS
CALL EXCOR_PARA(RHOT,EXC0,EXCD0,LEXCHG,TREL)
RHOT=RHO+EPS
CALL EXCOR_PARA(RHOT,EXC2,EXCD2,LEXCHG,TREL)
! 1st and 2nd derivative of energy
EXCA_(2)=(EXC2-EXC0)/ (2*EPS)
EXCA_(3)=(EXC2+EXC0-2*EXCA(1))/ (EPS*EPS)
! 2nd and 3nd derivative of potential=
! 1st and 2nd derivative of energy
EXCA(3)=(EXCD2-EXCD0)/ (2*EPS)
EXCA(4)=(EXCD2+EXCD0-2*EXCA(2))/ (EPS*EPS)
! WRITE(*,'(5E14.7)') EXCA(2),EXCA_(2),EXCA(3),EXCA_(3),EXCA(4)
ENDIF
END SUBROUTINE
本来里面是没有上面标注的那一行write的,编译也没有问题,但是当我加入那一行WRITE(*,*)"######"之后,就报错:
error #6404: This name does not have a type, and must have an explicit type. [DELTA]
EPS=DELTA*RHO
-------------^
说Delta变量没有类型
请问这是为什么呢?
关于Fortran中write语句的位置
两个方法可能可以解决你的问题:1.去掉语句中的IMPLICIT NONE.2.在程序中你的确没有定义delta,你可以定义一下.
再问: 谢谢您!关于delta的定义:REAL(q),PARAMETER :: DELTA=1E-3_q 这句话算不算定义呢?我从来没用过Fortran语言,请您指教!!
再答: 不算,要重新定义!你你直接将IMPLICIT NONE删了试试 这个比较简单
再问: 好的~ 那能否请您讲解一下REAL(q),PARAMETER :: DELTA=1E-3_q的语法和作用呢? 如果这句话不算定义,那么其中的DELTA=1E-3_q是否可以给delta赋值呢?如果不能赋值,删掉了DELTA=1E-3_qimplicit none以后即使不报错,delta在使用的时候也相当于没赋值吧? 我还是想在REAL(q),PARAMETER :: DELTA=1E-3_q加一个定义试试、、总觉得不implicit none不好>_