Fortran,' dim'大小的论点' intrinsic不是有效的维度索引

时间:2014-04-19 23:28:09

标签: matrix multidimensional-array size fortran fortran90

我是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获得矩阵尺寸的正确方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

数组arr被声明为等级1.因此,假设编译器指向给出size(arr,2)的行,这不是有效代码:它要求的大小为第二个(不存在的)维度。

在功能print_coeffs的其余部分,似乎需要将arr声明为rank-2:real, intent(in), dimension(:,:) :: arr

但应注意,像这样的函数(arr假定形状数组)将需要调用者的显式接口。也就是说,如果你想最终从主程序调用这个函数,那么integer, external :: print_coeffs就不够了。有关更多详细信息,请参阅有关SO的其他问题和答案,例如here ---。