Fortran Coder

查看: 9063|回复: 2
打印 上一主题 下一主题

[子程序] 子程序及结构跳出问题

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
15 元
贡献
7 点
跳转到指定楼层
楼主
发表于 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运行正常,结果没有问题,但是主程序却只能运行一次,并没有进行迭代。
[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?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2014-12-8 14:50:03 | 只看该作者
if 不需要跳出。删除 stop 既可。

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

跳出函数用 return

stop 用于结束整个程序。

2

帖子

1

主题

0

精华

新人

F 币
15 元
贡献
7 点
板凳
 楼主| 发表于 2014-12-8 15:34:36 | 只看该作者
谢谢,该子程序用的是goto语句,我自己删除stop后,程序出错。子程序最后用return返回,但是没有起作用,或许return位置放在这个stop处有用,晚上接着再试试看。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-24 09:33

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表