我是Fortran的新手。 现在,我试图创建一个应该打印矩阵系数的简单函数。 最初我想用矩阵做一些更有趣的事情(这就是我使用FUNCTION关键字的原因),但我不得不愚蠢,因为" Hello world"和" multiply数字乘以2"是迄今为止我设法编写的唯一程序。
这是我的代码:
PROGRAM my_program
IMPLICIT NONE
INTEGER, EXTERNAL :: print_coefs
END PROGRAM my_program
FUNCTION print_coefs(arr)
IMPLICIT NONE
REAL, INTENT(IN), DIMENSION(:) :: arr
INTEGER :: print_coefs
INTEGER :: i,j
do i = 1, size(arr, 1)
do j = 1, size(arr, 2)
print *, arr(i,j)
enddo
enddo
print_coefs = 0
END FUNCTION
所以我在编译时遇到这个错误:
错误:' dim'大小的论点' (1)处的内在函数不是有效的维度索引。
为什么呢?不是size
获得矩阵尺寸的正确方法吗?
感谢您的帮助。
答案 0 :(得分:2)
数组arr
被声明为等级1.因此,假设编译器指向给出size(arr,2)
的行,这不是有效代码:它要求的大小为第二个(不存在的)维度。
在功能print_coeffs
的其余部分,似乎需要将arr
声明为rank-2:real, intent(in), dimension(:,:) :: arr
。
但应注意,像这样的函数(arr
是假定形状数组)将需要调用者的显式接口。也就是说,如果你想最终从主程序调用这个函数,那么integer, external :: print_coeffs
就不够了。有关更多详细信息,请参阅有关SO的其他问题和答案,例如here ---。