Fortran Coder

查看: 15906|回复: 18
打印 上一主题 下一主题

[数学库] IMSL编译错误,This name has already been used as an external function name.

[复制链接]

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

楼主
发表于 2015-4-7 09:26:38 | 显示全部楼层
use     NUMERICAL
use     CONSTANT
USE     VARIABLE
USE     IMSL
这些模块里,已经有定义过 Sxyz 了,可能冲突

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

沙发
发表于 2015-4-7 10:28:14 | 显示全部楼层
本帖最后由 楚香饭 于 2015-4-7 10:31 编辑

试试
use IMSL
改为
use IMSL , sxyz_1 => sxyz

可能 IMSL 里面有一个叫 sxyz 的函数,用来算三维向量的内积。所以给他改个名字。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

板凳
发表于 2015-4-7 11:09:09 | 显示全部楼层
参数类型不一致。ivprk 用于处理单精度,而 T 是双精度。
尝试使用 DIVPRK 函数

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

地板
发表于 2015-4-7 12:32:10 | 显示全部楼层
VARIABLE 模块中,
real*8  sk3(3,0:2,0:22)
而在  shouli.f90 第 50 行:
do i=1,20
do j=0,4
    sk3(1,i,j)=sXYZ(1,i,j+1)-sXYZ(1,i,j)  !// 此处 sk3 越界,i 从1 到 20,但第二维是 0:2
    sk3(2,i,j)=sXYZ(2,i,j+1)-sXYZ(2,i,j)

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

5#
发表于 2015-4-7 13:36:05 | 显示全部楼层
楼主的完整代码在 7 楼。

但是我不知道他之前的越界怎么改的,所以也不知道问题在哪儿。

sqrt domian 常见于负数开方。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

6#
发表于 2015-4-7 20:05:05 | 显示全部楼层
依旧是则徐 发表于 2015-4-7 14:39
越界问题 是把variable模块中的sk3(3,0:2,0:22)改成了sk3(3,0:22,0:5) 改过之后,在运行就出现了sqr ...

sqrt domain 不一定就是负数,有时候本身就是 NaN 也会出错。
至少在我这里,发现很多容易出负数的地方。

例如 130.f90 文件
YITABOU3(i)=Amp*DCOS(WK*X3(i)-W1*T)&
                  -Amp**2*WK/(2*DSINH(2*WK*H)) &
这里的 WK 为 0,导致分母为0

wk 应该是在更早的代码计算:
wk=newton(a,func,dfunc)
这里计算结果为0

可能是由此导致的 NaN

正如 pasuka 所言,没有注释的代码比较难看懂。我想你学习一下如何 Debug 单步运行,或许会让你自己更容易检查错误。

本站的文章:http://debug.w.fcode.cn 会指导你如何学习 Debug
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-3 17:56

Powered by Tencent X3.4

© 2013-2024 Tencent

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