Fortran Coder

查看: 27340|回复: 10

[数值问题] 一个matmul的问题

[复制链接]

35

帖子

11

主题

0

精华

熟手

F 币
129 元
贡献
118 点
发表于 2017-2-26 22:35:17 | 显示全部楼层 |阅读模式
10F 币
请教大家一个问题,我在用matmul这个函数的时候,ZKM=ZKM+matmul(PST,dk,PS)  !总体刚度矩阵!
ZFM=ZFM+matmul(PST,FV)  !总体载荷向量!
其中,PS是3*90000的二维数组,dk是3*3的,PST是PS的转置,FV是3*1的二维数组,
然后调试的时候,下面有一个警告和一个错误,分别是这样的:
警告:The number of arguments is incompatible with intrinsic procedure, assume 'external'.   [MATMUL]
错误:This name does not have a type, and must have an explicit type.   [MATMUL]
请问怎么回事,怎么修改呢?小弟有点急,谢谢大家

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2017-2-27 07:57:05 | 显示全部楼层
请给出更多的代码。尽量是当前程序单元的全部。
回复

使用道具 举报

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2017-2-27 09:46:46 | 显示全部楼层
本帖最后由 li913 于 2017-2-27 09:49 编辑

matmul 只有两个参数。matmul(PST,dk,PS)  改为  matmul(matmul(PST,dk),PS) 。理论上可以,但如果矩阵太大,实际情况就不好说了。

评分

参与人数 1贡献 +6 收起 理由
fcode + 6 赞一个!

查看全部评分

回复

使用道具 举报

35

帖子

11

主题

0

精华

熟手

F 币
129 元
贡献
118 点
 楼主| 发表于 2017-2-27 15:14:11 | 显示全部楼层
好的 多谢,我试试
回复

使用道具 举报

35

帖子

11

主题

0

精华

熟手

F 币
129 元
贡献
118 点
 楼主| 发表于 2017-2-27 15:14:46 | 显示全部楼层
matmul(matmul(PST,dk),PS)
回复

使用道具 举报

35

帖子

11

主题

0

精华

熟手

F 币
129 元
贡献
118 点
 楼主| 发表于 2017-2-27 16:36:20 | 显示全部楼层
li913 发表于 2017-2-27 09:46
matmul 只有两个参数。matmul(PST,dk,PS)  改为  matmul(matmul(PST,dk),PS) 。理论上可以,但如果矩阵太大 ...

按照你说的  以解决,多谢多谢,额,又遇到一个问题啊:forrtl: severe (179): Cannot allocate array - overflow on array size calculation,这个不懂啊,是个断点
回复

使用道具 举报

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2017-2-27 17:39:52 | 显示全部楼层
little_kar 发表于 2017-2-27 16:36
按照你说的  以解决,多谢多谢,额,又遇到一个问题啊:forrtl: severe (179): Cannot allocate array -  ...

表示数组大小的变量,其值太大,溢出了。可以试试用integer(8).
回复

使用道具 举报

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

发表于 2017-2-27 18:08:09 | 显示全部楼层
little_kar 发表于 2017-2-27 16:36
按照你说的  以解决,多谢多谢,额,又遇到一个问题啊:forrtl: severe (179): Cannot allocate array -  ...

使用huge函数看看是否超过整型范围
https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gfortran/HUGE.html#HUGE
回复

使用道具 举报

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2017-2-27 18:23:33 | 显示全部楼层
integer4 都表达不了数组的大小,那说明数组的确是太大太大了。用 integer8 也不行。(因为你内存就那么大~~)
回复

使用道具 举报

35

帖子

11

主题

0

精华

熟手

F 币
129 元
贡献
118 点
 楼主| 发表于 2017-2-27 19:16:24 | 显示全部楼层
fcode 发表于 2017-2-27 18:23
integer4 都表达不了数组的大小,那说明数组的确是太大太大了。用 integer8 也不行。(因为你内存就那么大~ ...

我用的都是real,也就是说,只能吧数组变小了,比如变成100*100的就可以了?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:00

Powered by Tencent X3.4

© 2013-2024 Tencent

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