Fortran Coder

标题: 程序运行出现:run-time error M6201:MATH - sqrt: DOMAIN error [打印本页]

作者: zjl88915    时间: 2015-1-19 21:59
标题: 程序运行出现:run-time error M6201:MATH - sqrt: DOMAIN error
本帖最后由 zjl88915 于 2015-1-19 22:05 编辑

具体程序代码文件见附件:Radial.for文件可以正确运行,没有问题;nRadial4.for文件是我根据Radial.for进行的修改:
Radial.for文件中主程序里的: m1ka=m1ks-m1kw
  m2a=m2s-m2w
  Cw=(m1kw-m2w)/m2w
  Cvw=kw/rw/m2w
  Ca=m2a/(m1ka-m2a-n0*Sg0*Uatm/(ua0+Uatm)**2)
  Cva=ka*R*Temp/g/(ua0+Uatm)/M/(m1ka-m2a-n0*Sg0*Uatm/(ua0+Uatm)**2)
        Aa=-Cva/(1-Ca*Cw)
        Aw=Ca*Cvw/(1-Ca*Cw)
  Wa=Cw*Cva/(1-Ca*Cw)
  Ww=-Cvw/(1-Ca*Cw)
C--------Exchange Q1 and Q2 when the problem "divided by zero happens"------
  xx=(Aa-Ww)**2+4*Aw*Wa
  write(*,'(1x,''xx='',E12.6)')xx
  Q1=(Aa+Ww+dsqrt((Aa-Ww)**2+4*Aw*Wa))/2.0
        Q2=(Aa+Ww-dsqrt((Aa-Ww)**2+4*Aw*Wa))/2.0
c       q21=(Q1-Aa)/Wa
  q21=Aw/(Q1-Ww)
c       q12=(Q2-Ww)/Aw
        q12=Wa/(Q2-Aa)
这一段程序在nRadial4.for中放在了三个调用的子程序中(我不是无聊,真的是后续工作需要用到。。。);
这样nRadial4.for和Radial.for的结构不同,但按我设想应该结果相同(原谅我的无知与自信。。。),
现在的结果是:nRadial.for程序调试时没有任何错误,但是一旦运行就出现run-time errorM6201:MATH - sqrt: DOMAIN error
而之前编程的师兄毕业,我对fortran实在无能啊,求各位大神指点。。。。
[attach]533[/attach]


Help.zip

118.06 KB, 下载次数: 8


作者: 楚香饭    时间: 2015-1-19 21:59
本帖最后由 楚香饭 于 2015-1-20 22:49 编辑

做人呢,一定要长记性。

代码写错不丢人,丢人的是,同样的错误多次犯。

http://bbs.fcode.cn/thread-53-1-1.html
这是你上次的帖子吧??

上次你错在,Common没有对齐。这次你犯了同样的错。

主程序中的 common:
[Fortran] 纯文本查看 复制代码
common a,b,rr,epson
common ua0,uw0
common m1kw,m2w,m1ka,m2a,m1ks,m2s
common Q1,Q2,q12,q21
common Cw,Cvw,Ca,Cva

子程序 SET 中的 Common:
[Fortran] 纯文本查看 复制代码
common a,b,r,epson
common n0,Sl0,Sg0,ua0,uw0,rw,kw,ka,g,Temp,M,Uatm !// 这里多了很多
common m1kw,m2w,m1ka,m2a,m1ks,m2s
common Q1,Q2,q12,q21


这就导致 m2w = 0,在
Cw=(m1kw-m2w)/m2w 时,除数为 0,开始出错。后面各种浮点数错误。NaN 等等等等。

叫我说你什么好?

请一定要理解:COMMON不是根据变量名称进行对应,而是根据变量的顺序进行对应!!这就是为什么不提倡使用 COMMON 的原因。

作者: li913    时间: 2015-1-19 22:47
这个错误是说函数自变量的定义域错误,具体来说,就是对负数开方。检查使用了sqrt函数的地方。
各种常见错误及解决方案参考:http://fcode.cn/guide-36-1.html
作者: zjl88915    时间: 2015-1-20 11:58
li913 发表于 2015-1-19 22:47
这个错误是说函数自变量的定义域错误,具体来说,就是对负数开方。检查使用了sqrt函数的地方。
各种常见错 ...

这个我正在做排查,谢谢指导!但是我最纳闷的是这里:我附件中的两个for格式文件,代码内容几乎一致,所不同的是,我把Radial.for主程序中的一段计算在nRadial.for中放在了子程序中,这样的更改在我的理解是不会对程序运行结果有什么影响的,但是现在却出现了这个结果。。。不知道这个问题的原因在哪里?
作者: zjl88915    时间: 2015-1-21 11:48
楚香饭 发表于 2015-1-20 22:44
做人呢,一定要长记性。

代码写错不丢人,丢人的是,同样的错误多次犯。

看了您的回复,登时脸就红了。谢谢指点,谢谢批评,学习还需踏实,多谢您的直言。




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