Fortran Coder

标题: 一个matmul的问题 [打印本页]

作者: little_kar    时间: 2017-2-26 22:35
标题: 一个matmul的问题
请教大家一个问题,我在用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]
请问怎么回事,怎么修改呢?小弟有点急,谢谢大家

作者: fcode    时间: 2017-2-27 07:57
请给出更多的代码。尽量是当前程序单元的全部。
作者: li913    时间: 2017-2-27 09:46
本帖最后由 li913 于 2017-2-27 09:49 编辑

matmul 只有两个参数。matmul(PST,dk,PS)  改为  matmul(matmul(PST,dk),PS) 。理论上可以,但如果矩阵太大,实际情况就不好说了。
作者: little_kar    时间: 2017-2-27 15:14
好的 多谢,我试试
作者: little_kar    时间: 2017-2-27 15:14
matmul(matmul(PST,dk),PS)
作者: little_kar    时间: 2017-2-27 16:36
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,这个不懂啊,是个断点

作者: li913    时间: 2017-2-27 17:39
little_kar 发表于 2017-2-27 16:36
按照你说的  以解决,多谢多谢,额,又遇到一个问题啊:forrtl: severe (179): Cannot allocate array -  ...

表示数组大小的变量,其值太大,溢出了。可以试试用integer(8).
作者: pasuka    时间: 2017-2-27 18:08
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
作者: fcode    时间: 2017-2-27 18:23
integer4 都表达不了数组的大小,那说明数组的确是太大太大了。用 integer8 也不行。(因为你内存就那么大~~)
作者: little_kar    时间: 2017-2-27 19:16
fcode 发表于 2017-2-27 18:23
integer4 都表达不了数组的大小,那说明数组的确是太大太大了。用 integer8 也不行。(因为你内存就那么大~ ...

我用的都是real,也就是说,只能吧数组变小了,比如变成100*100的就可以了?
作者: fcode    时间: 2017-2-27 19:17
数组是 real 类型的,但是数组的大小(编译器是用整数表示数组的大小)
是数组的大小超出了integer的范围




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2