Fortran Coder

查看: 27999|回复: 19
打印 上一主题 下一主题

[子程序] 程序运行有问题,有关子程序C06LAF

[复制链接]

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

跳转到指定楼层
楼主
发表于 2014-2-26 14:53:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
4F 币
我使用的是CVF编译器,程序是以前师兄编好的,其他类似的几个代码都没有问题,但是这个我调试了好久,就是运行不出理想的结果。代码较长,附件中包含所有需要的文件,以及错误结果及理想结果的截图,跪求大神帮助啊。。。


问题.png (5.49 KB, 下载次数: 1824)

这是屏幕显示的错误结果

这是屏幕显示的错误结果

正常.png (4.85 KB, 下载次数: 1788)

这是应该得到的理想结果

这是应该得到的理想结果

Qiuzhu.zip

59.09 KB, 下载次数: 9

这是所有程序文件

最佳答案

查看完整内容

有一点可以引起你的注意: 主程序中,common 部分: 分别有 2,3,12,8 个变量 而被变换函数 Ua,Uw 中,common 变量为 [mw_shl_code=fortran,true]common H,z common n0,Sl0,Sg0,u ...
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

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

沙发
发表于 2014-2-26 14:53:32 | 只看该作者
本帖最后由 chuxf 于 2014-2-26 16:48 编辑

有一点可以引起你的注意:

主程序中,common 部分:

[Fortran] 纯文本查看 复制代码
common H,z
          common ua0,uw0,rw
          common E1w,G1w,E1a,G1a,E2w,G2w,E2a,G2a,E01w,E01a,E02w,
     +                    E02a
          common Cw,Cvw,Ca,Cva,Da,Dw,B,C


分别有 2,3,12,8 个变量

而被变换函数 Ua,Uw 中,common 变量为

[Fortran] 纯文本查看 复制代码
common H,z
          common n0,Sl0,Sg0,ua0,uw0,kw,rw,ka,g,R,Temp,M,Uatm
          common E1w,G1w,E1a,G1a,E2w,G2w,E2a,G2a,E01w,E01a,E02w,
     +                    E02a          
          common Cw,Cvw,Ca,Cva,Da,Dw,B,C


分别有 2,13,12,8 个变量

common 没有对齐,这样的结果是非常可怕的。

请注意,common 并不根据变量名字来一一对应,而是根据变量顺序来对应!!这就导致了你 Ua,Uw 中的 n0,Sl0,Sg0 的值与主程序完全不同!!

我建议你补齐主程序中的10个common变量:common n0,Sl0,Sg0,ua0,uw0,kw,rw,ka,g,R,Temp,M,Uatm
回复

使用道具 举报

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

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

板凳
发表于 2014-2-26 15:20:30 | 只看该作者
你的程序走到了 412 行,这里让 IERR = 4,而后因为 IERR 而导致输出错误提示后程序结束。

这是良性错误,即你的代码自行处理的错误。

你可以追溯到 383 行,此处的 IF 不满足条件。RELERX.GT.0.1D0*ERREST(NCURR) ,即 0.1D-3 不大于 01*3.98,因而跳转到412行,IERR=4

于是你看到错误提示为 IFAIL = 4

4 是你的程序自行定义的错误代码,与语法无关。至于它代表什么含义,为什么会抛出这个错误,则要问代码作者或根据你的专业来分析了。
回复

使用道具 举报

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2014-2-26 15:42:15 | 只看该作者
从 NAG Library 的帮助里可以看到: c06laf 是用于反拉普拉斯变换。

IFAIL = 4
The required accuracy cannot be obtained. It is possible that ALPHAB is less than 
Alternatively, the problem may be especially difficult. Try increasing TFAC, ALPHAB or both.

意思是,需要的精度无法达到。可能是 AlphAB 小于 alpha
试着增加 TFAC ALPHAB 参数,或者两个都增加。
回复

使用道具 举报

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

5#
 楼主| 发表于 2014-2-26 15:45:59 | 只看该作者
fcode 发表于 2014-2-26 15:42
从 NAG Library 的帮助里可以看到: c06laf 是用于反拉普拉斯变换。

IFAIL = 4

对啊   c6laf用于拉普拉斯逆变换,但是我按照错误提示对相关参数修改后,问题依然存在。。。。
回复

使用道具 举报

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

6#
发表于 2014-2-26 16:17:43 | 只看该作者
zjl88915 发表于 2014-2-26 15:45
对啊   c6laf用于拉普拉斯逆变换,但是我按照错误提示对相关参数修改后,问题依然存在。。。。 ...

你手边有 C06laf 的帮助吗?
我建议你认真阅读一下,以便了解函数的局限。设定合适的算例来运算。

我想你的代码里是没有错误的,绝大多数都是 NAG 库里的,输入输出代码很简单,没有问题。

应该还是算例不符合函数库的需求。一般不轻易怀疑函数库的错误。

你的拉氏域函数 Ua 太复杂了,再反变换回来就更复杂了,我实在没有精力帮你分析它。请原谅这些事情我恐怕不能代劳了。我想这恐怕不是一个 Fortran 的代码问题,而是一个学术问题了。
回复

使用道具 举报

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

7#
 楼主| 发表于 2014-2-26 20:11:03 | 只看该作者
chuxf 发表于 2014-2-26 16:42
有一点可以引起你的注意:

主程序中,common 部分:

谢谢您的指导,非常感谢!不管有没有用,都谢谢您的帮助。
回复

使用道具 举报

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

8#
 楼主| 发表于 2014-2-26 20:12:16 | 只看该作者
fcode 发表于 2014-2-26 16:17
你手边有 C06laf 的帮助吗?
我建议你认真阅读一下,以便了解函数的局限。设定合适的算例来运算。

谢谢您的建议,非常中肯。我会虚心接受的!
回复

使用道具 举报

19

帖子

3

主题

0

精华

入门

新手菜鸟

F 币
71 元
贡献
66 点

爱心勋章

9#
 楼主| 发表于 2014-2-26 20:28:44 | 只看该作者
chuxf 发表于 2014-2-26 14:53
有一点可以引起你的注意:

主程序中,common 部分:

你好,再次打扰不好意思。我按照您的建议修改后,出现新的问题,截图如下:不知道神马情况啊。。。。

NQ.png (8.75 KB, 下载次数: 1650)

NQ.png
回复

使用道具 举报

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

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

10#
发表于 2014-2-26 20:39:17 | 只看该作者
发你修改后的程序。这个错误就比较简单一些了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 23:22

Powered by Tencent X3.4

© 2013-2024 Tencent

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