回 帖 发 新 帖 刷新版面

主题:我的程序为什么不按我想要的执行

当t=0.6,y=0时,应该执行粉红色部分,u2和v2应该不为0,可是结果为0,求指点 

program main      
      
      real  TIME,y, pi,c,H,T,u1,v1,u2,v2,ALPHA
      read(*,*)TIME,y
      pi=3.14159265
      c=1400
      H=381
      T=0.5
      IF(y.LT.31.AND.y.GE.0)THEN
      IF(TIME.LE.(T+y/c).AND.TIME.GE.y/c)THEN
      u1=sin(4*pi*(TIME-y/c))-0.5*sin(8*pi*(TIME-y/c))
      v1=4*pi*cos(4*pi*(TIME-y/c))-4*pi*cos(8*pi*(TIME-y/c))
      u2=0
      v2=0
[color=FF00FF]      else if(TIME.GE.(2H-y)/c.AND.TIME.LE.(T+(2H-y)/c))THEN
      u1=0
      v1=0
      u2=sin(4*pi*(TIME-(2H-y)/c))-0.5*sin(8*pi*(TIME-(2H-y)/c))
      v2=4*pi*cos(4*pi*(TIME-(2H-y)/c))-4*pi*cos(8*pi*(TIME-(2H-y)/c)) [/color]   
      else
      u1=0
      v1=0
      u2=0
      v2=0
      end if
      else IF(y.LT.681.AND.y.GE.31)THEN     
      IF(TIME.LT.(2H-y)/c.AND.TIME.GE.y/c)THEN
      u1=sin(4*pi*(TIME-y/c))-0.5*sin(8*pi*(TIME-y/c))
      v1=4*pi*cos(4*pi*(TIME-y/c))-4*pi*cos(8*pi*(TIME-y/c))
      u2=0
      v2=0
      ELSE IF(TIME.LE.(T+y/c).AND.TIME.GE.(2H-y)/c)THEN
      u1=sin(4*pi*(TIME-y/c))-0.5*sin(8*pi*(TIME-y/c))
      v1=4*pi*cos(4*pi*(TIME-y/c))-4*pi*cos(8*pi*(TIME-y/c))
      u2=sin(4*pi*(TIME-(2H-y)/c))-0.5*sin(8*pi*(TIME-(2H-y)/c))
      v2=4*pi*cos(4*pi*(TIME-(2H-y)/c))-4*pi*cos(8*pi*(TIME-(2H-y)/c))
      ELSE IF(TIME.GT.(T+y/c).AND.TIME.LE.(T+(2H-y)/c))THEN
      u1=0
      v1=0
      u2=sin(4*pi*(TIME-(2H-y)/c))-0.5*sin(8*pi*(TIME-(2H-y)/c))
      v2=4*pi*cos(4*pi*(TIME-(2H-y)/c))-4*pi*cos(8*pi*(TIME-(2H-y)/c))
      ELSE
      u1=0
      v1=0
      u2=0
      v2=0
      end if
      END If 
      ALPHA=19.05*(6945*(u1+u2)+7560*(v1+v2))
      write(*,*) u1,v1,u2,v2,ALPHA
      pause
      stop
      END

回复列表 (共3个回复)

沙发

为了获得波得传播规律,取H高土体,波从底部入射,顶面自由边界,能反射波,当反射波达到底面时,完全被吸收,即波只走一个来回。我的目的是算出底边的力和位移,进而算出底部的力,为此把波分成反射波和入射波
入射波
t<y/c时,入射波波震面未到达,位移为0,速度为0
y/c=<t<0.5+y/c时,入射波经过,位移为u(t-y/1400),速度u’
0.5+y/c<t时,入射波已无影响,位移为0,速度为0


反射波
t<(2L-y)/c时,反射波未到达,u=0
(2L-y)/c=<t<0.5+(2L-y)/c,反射波经过,位移为u(t-(2L-y)/1400) ,速度u’
0.5+(2L-y)/c =<t,反射波已无影响,位移为0,速度为0

板凳

else if(TIME.GE.(2H-y)/c.AND.TIME.LE.(T+(2H-y)/c))THEN

改为:

else if(TIME.GE.(2*H-y)/c.AND.TIME.LE.(T+(2*H-y)/c))THEN

数学上可以写 2H ,相当于乘法省略乘号

但语法上不能,语法上的 2H 相当于 16进制的 2,十进制还是 2

PS:补充研究了一下 2H 的含义,应该是指 2H 之后的 2个字符,也就是 '-y' 的 ASCII 解释为浮点数的结果。搞不清楚编译器为什么这么设定。

3 楼

多谢!我太不小心了

我来回复

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