24小时热门版块排行榜    

查看: 1151  |  回复: 3

okagh

铁虫 (初入文坛)

[求助] 菜鸟求助关于fortran if循环的问题,经验丰富的前辈肯定一眼能看出问题出在哪

! 我把源程序出问题的那部分发了上来,这个主要是一个if循环,clock在0~100和100~200区间程序一切正常debug也没问题,但是在200~300区间Ac的输出就不正常了,后来我debug模式调试,在200步之后发现循环是正常,但是在第十一行单步调试提示“无可用源”,程序运行到第十二行时查看局部变量中的blf  ,看到blf的值经过十一行的运算没有改变,值还是上一个循环结尾的blf的值,因此在200~300区间程序把第十一行跳了过去,运行时又不显示出错,但结果是错的,请教大神能不能指出我的错误在哪?
一        DO 1000 CLOCK=1,10000                    
二        DO 100 i=((CLOCK-1)*10+1),CLOCK*10         
三        if ((CLOCK.LT.100 .AND. CLOCK.GT.0) .OR. (CLOCK.LT.300 .AND. CLOCK.GT.200))    then!
四        DO 110 j=1,mm                                                        
五                Aa(j)=Aa0*Ac(j)                                             
六                ok(j)=Ke0*Ac(j)/Ad(j+50)               
七                f(j)=ok(j)*dt1/(Aa(j)*dx*dx)
八                g(j)=g0*Ad(j+50)/Ac(j)               
九                alf(j)=g(j)**2*dt1*dt1/(Ab*Aa(j)*(1+g(j)*dt1/Ab))-1-2*f(j)-g(j)*dt1/Aa(j)
十                alf(j)=alf(j)/f(j)
十一        blf(j)=-Ac(j)-(W/Aa(j))*exp(-alpha*j*dx)*exp(-4*0.69315*((i-11000)/1000.0)**2)-g(j)*dt1*Ad(j+50)/Aa(j)        !出问题的地方 出问题的地方 出问题的地方
十二                blf(j)=blf(j)/f(j)
               
110        CONTINUE
         blf(1)=blf(1)-Ac(1)
         blf(mm)=blf(mm)-Ac(mm)

        DO 120 k=2,mm
          alf(k)=alf(k)-1/alf(k-1)                       
          blf(k)=blf(k)-blf(k-1)/alf(k-1)
120        CONTINUE
         Ac(mm)=blf(mm)/alf(mm)
        DO 130 k=mm-1,1,-1
         Ac(k)=(blf(k)-Ac(k+1))/alf(k)
130        CONTINUE
       
        else       
        DO 140 j=1,mm
        Aa(j)=Aa0*Ac(j)
                ok(j)=Ke0*Ac(j)/Ad(j+50)               
                f(j)=ok(j)*dt1/(Aa(j)*dx*dx)
                g(j)=g0*Ad(j+50)/Ac(j)               
                alf(j)=g(j)**2*dt1*dt1/(Ab*Aa(j)*(1+g(j)*dt1/Ab))-1-2*f(j)-g(j)*dt1/Aa(j)
                alf(j)=alf(j)/f(j)
                blf(j)=-Ac(j)-g(j)*dt1*Ad(j+50)/Aa(j)               
                blf(j)=blf(j)/f(j)
140        CONTINUE
         blf(1)=blf(1)-Ac(1)
         blf(mm)=blf(mm)-Ac(mm)
         DO 150 k=2,mm
          alf(k)=alf(k)-1/alf(k-1)
          blf(k)=blf(k)-blf(k-1)/alf(k-1)
150        CONTINUE
         Ac(mm)=blf(mm)/alf(mm)
         DO 160 k=mm-1,1,-1
         Ac(k)=(blf(k)-Ac(k+1))/alf(k)
160        CONTINUE
        end if
        100 CONTINUE
        write(*,*)Ac(5)
        1000 CONTINUE
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qchem

铁杆木虫 (著名写手)


还什么goto
改成f90先

[ 发自小木虫客户端 ]
2楼2014-10-16 13:45:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

okagh

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by qchem at 2014-10-16 13:45:31
还什么goto
改成f90先

啊,我是fortran菜鸟,刚刚学的,我好像没写goto语句
3楼2014-10-16 18:04:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

okagh

铁虫 (初入文坛)

本帖已完结,是程序问题
4楼2014-10-16 21:25:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 okagh 的主题更新
信息提示
请填处理意见