Fortran Coder

查看: 23441|回复: 4

[数值问题] 程序运行出现:run-time error M6201:MATH - sqrt: DOMAIN error

[复制链接]

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

发表于 2015-1-19 21:59:01 | 显示全部楼层 |阅读模式
10F 币
本帖最后由 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实在无能啊,求各位大神指点。。。。



Help.zip

118.06 KB, 下载次数: 8

最佳答案

查看完整内容

做人呢,一定要长记性。 代码写错不丢人,丢人的是,同样的错误多次犯。 http://bbs.fcode.cn/thread-53-1-1.html 这是你上次的帖子吧?? 上次你错在,Common没有对齐。这次你犯了同样的错。 主程序中的 common: 子程序 SET 中的 Common: [mw_shl_code=fortran, ...

710

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
600 元
贡献
307 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

发表于 2015-1-19 21:59:02 | 显示全部楼层
本帖最后由 楚香饭 于 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 的原因。
回复

使用道具 举报

795

帖子

2

主题

0

精华

大宗师

F 币
3783 元
贡献
2264 点
发表于 2015-1-19 22:47:01 | 显示全部楼层
这个错误是说函数自变量的定义域错误,具体来说,就是对负数开方。检查使用了sqrt函数的地方。
各种常见错误及解决方案参考:http://fcode.cn/guide-36-1.html
回复

使用道具 举报

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

 楼主| 发表于 2015-1-20 11:58:08 | 显示全部楼层
li913 发表于 2015-1-19 22:47
这个错误是说函数自变量的定义域错误,具体来说,就是对负数开方。检查使用了sqrt函数的地方。
各种常见错 ...

这个我正在做排查,谢谢指导!但是我最纳闷的是这里:我附件中的两个for格式文件,代码内容几乎一致,所不同的是,我把Radial.for主程序中的一段计算在nRadial.for中放在了子程序中,这样的更改在我的理解是不会对程序运行结果有什么影响的,但是现在却出现了这个结果。。。不知道这个问题的原因在哪里?
回复

使用道具 举报

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

 楼主| 发表于 2015-1-21 11:48:41 | 显示全部楼层
楚香饭 发表于 2015-1-20 22:44
做人呢,一定要长记性。

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-16 09:40

Powered by Tencent X3.4

© 2013-2024 Tencent

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