zjl88915 发表于 2014-2-26 14:53:31

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

我使用的是CVF编译器,程序是以前师兄编好的,其他类似的几个代码都没有问题,但是这个我调试了好久,就是运行不出理想的结果。代码较长,附件中包含所有需要的文件,以及错误结果及理想结果的截图,跪求大神帮助啊:-L。。。


楚香饭 发表于 2014-2-26 14:53:32

本帖最后由 chuxf 于 2014-2-26 16:48 编辑

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

主程序中,common 部分:

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 变量为

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

楚香饭 发表于 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 是你的程序自行定义的错误代码,与语法无关。至于它代表什么含义,为什么会抛出这个错误,则要问代码作者或根据你的专业来分析了。

fcode 发表于 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 参数,或者两个都增加。

zjl88915 发表于 2014-2-26 15:45:59

fcode 发表于 2014-2-26 15:42
从 NAG Library 的帮助里可以看到: c06laf 是用于反拉普拉斯变换。

IFAIL = 4


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

fcode 发表于 2014-2-26 16:17:43

zjl88915 发表于 2014-2-26 15:45
对啊   c6laf用于拉普拉斯逆变换,但是我按照错误提示对相关参数修改后,问题依然存在。。。。 ...
你手边有 C06laf 的帮助吗?
我建议你认真阅读一下,以便了解函数的局限。设定合适的算例来运算。

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

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

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

zjl88915 发表于 2014-2-26 20:11:03

chuxf 发表于 2014-2-26 16:42
有一点可以引起你的注意:

主程序中,common 部分:


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

zjl88915 发表于 2014-2-26 20:12:16

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



谢谢您的建议,非常中肯。我会虚心接受的!:-)

zjl88915 发表于 2014-2-26 20:28:44

chuxf 发表于 2014-2-26 14:53
有一点可以引起你的注意:

主程序中,common 部分:


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

楚香饭 发表于 2014-2-26 20:39:17

发你修改后的程序。这个错误就比较简单一些了
页: [1] 2
查看完整版本: 程序运行有问题,有关子程序C06LAF