我是Fortran的新手。 现在,我正在尝试创建一个应该打印矩阵系数的简单函数。 最初我想用矩阵做一些更有趣的事情(这就是我使用FUNCTION关键字的原因),但我不得不愚蠢,因为“Hello world”和“乘以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

所以我在编译时遇到这个错误:

错误:(1)中'size'的'dim'参数不是有效的维度索引。

为什么? size不是获得矩阵size的正确方法吗?

谢谢你的帮助。

===============>>#1 票数:2 已采纳

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

从函数print_coeffs的其余部分看, arr被声明为rank-2: real, intent(in), dimension(:,:) :: arr

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

  ask by John Smith Optional translate from so

未解决问题?本站智能推荐: