weiz5022 发表于 2014-12-8 10:54:05

子程序及结构跳出问题

程序可以迭代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运行正常,结果没有问题,但是主程序却只能运行一次,并没有进行迭代。
      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 ',Rtime2-RTime1
         write( *,*) 'Real time ',Rtime2-RTime1
         stop
       end if
在SWMS_3D有一段代码如上所示,运行到这个stop处,子程序就停止运行了,而我需要计算的funcval,
      funcval=sfenzi/sqrt(sfenmu1*sfenmu2)
在stop的后面,跳出当前语句,并进行下面代码的运行,应该是用什么?子程序貌似不应用stop?

vvt 发表于 2014-12-8 14:50:03

if 不需要跳出。删除 stop 既可。

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

跳出函数用 return

stop 用于结束整个程序。

weiz5022 发表于 2014-12-8 15:34:36

谢谢,该子程序用的是goto语句,我自己删除stop后,程序出错。子程序最后用return返回,但是没有起作用,或许return位置放在这个stop处有用,晚上接着再试试看。
页: [1]
查看完整版本: 子程序及结构跳出问题