Fortran Coder

标题: 子程序及结构跳出问题 [打印本页]

作者: weiz5022    时间: 2014-12-8 10:54
标题: 子程序及结构跳出问题
程序可以迭代200次,但是子程序运行一次后,程序就停止了,subroutine SWMS_3D_sub(xm,ym,zm,xstar,ystar,zstar,px,py,pz,funcval)一共10个参数,其中前九个参数是主程序传递来的变量,第十个参数是目标函数funcval。subroutine SetSnk(NumNP,NMat,MatNum,hNew,TPot,Sink,P0,POptm,P2H,P2L,P3,r2H,r2L,xm,ym,zm,xstar,ystar,zstar,px,py,pz,x,y,z,Beta,Length)是SWMS_3D_sub的子程序。
subroutine SWMS_3D_sub运行正常,结果没有问题,但是主程序却只能运行一次,并没有进行迭代。
[Fortran] 纯文本查看 复制代码
      if (abs(t-tMax).le.0.001*dt) then
         call getdat(i,i,iday)
         call gettim(ihours,mins,isecs,i)
         Rtime2=iday*24.*60.*60.+ihours*60.*60.+mins*60.+isecs
         write(70,*)
         write(70,*) 'Real time [sec]',Rtime2-RTime1
         write( *,*) 'Real time [sec]',Rtime2-RTime1
         stop
       end if

在SWMS_3D有一段代码如上所示,运行到这个stop处,子程序就停止运行了,而我需要计算的funcval,
        funcval=sfenzi/sqrt(sfenmu1*sfenmu2)
在stop的后面,跳出当前语句,并进行下面代码的运行,应该是用什么?子程序貌似不应用stop?

作者: vvt    时间: 2014-12-8 14:50
if 不需要跳出。删除 stop 既可。

跳出 Do 循环用 Exit ,直接跳到下一次循环用 Cycle

跳出函数用 return

stop 用于结束整个程序。
作者: weiz5022    时间: 2014-12-8 15:34
谢谢,该子程序用的是goto语句,我自己删除stop后,程序出错。子程序最后用return返回,但是没有起作用,或许return位置放在这个stop处有用,晚上接着再试试看。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2