回 帖 发 新 帖 刷新版面

主题:一小段FORTRAN 程序的问题

    SUBROUTINE WAVE1(NAME,NIN,NOU,AT,TIM)
C    EARTHQUAKE GROUND MOTION
C    ACCELERATION UNIT:M/S*S
    CHARACTER*12 NAME
    DIMENSION XG(0:600),AT(NOU),TIM(NOU)
    OPEN(1,FILE=NAME, STATUS='OLD')
    READ(1,*)(XG(I),I=1,NIN) 
    CLOSE(1) 
    XG(0)=0
    IF(NOU.EQ.NIN) THEN
    DO 20 I=1,NIN
    AT(I)=XG(I)/100
    TIM(I)=0.02*I
20    CONTINUE
    ELSE
    LN=NINT(NOU/NIN)
    DO 30 I=1,NIN
    AT(4*I)=XG(I)/100
30    CONTINUE
    DO 45 I=1,NIN
    DO 40 J=1,LN-1
    AT(4*I-LN+J)=0.25*J/LN*(XG(I)-XG(I-1))/100
40    CONTINUE
45    CONTINUE
    DO 50 I=1,NOU
    TIM(I)=0.02/FLOAT(LN)*I
50    CONTINUE
    END IF
    RETURN
    END
其中的NIN和NOU都是integer,应该怎么定义呢,定义在那呢(其他的还用变吗)?求指导

回复列表 (共3个回复)

沙发

按默认规则可以不用定义,NIN和NOU为integer, XG(0:600),AT(NOU),TIM(NOU)为real.
程序中第16行 LN=NINT(NOU/NIN)  此处有一个警告,原因是NINT要求是real型参数,而NOU/MIN结果为整型,改成 LN=NINT(real(NOU)/real(NIN)) 不知合不合楼主的原意?

板凳

NIN,NOU按照默认规则是整型,不需要声明。

这段程序中出现了大量了整型和实型数据的混合运算,为了避免出现不可预知的结果,最好先把整型转换成实型再进行运算操作。例如J写为real(J),100写为100.0

3 楼

谢谢各位了

我来回复

您尚未登录,请登录后再回复。点此登录或注册