Fortran如何将数组作为参数传递给函数

3

我正在尝试将一个长度未知的数组传递给一个函数。同时我希望a和b的索引相同,这种情况是否可能?

程序编译通过但在函数中未运行。

感谢任何帮助。

 function RealCumSum(i) result(j)
    real, dimension(1:), intent(in)  :: i ! input
    real, dimension(size(i)) :: j ! output
    integer :: m

    do m = 1,size(i)
        j(m) = sum(i(1:m))
    end do

 end function RealCumSum

 program xfunc
    implicit none
    real, dimension(2) :: a = (/ 3.2 , 2.5 /)
    real, dimension(2) :: b, RealCumSum

    b = RealCumSum(a)

    write(*,*) "cumulative sum of ",a," is ", b
 end program xfunc
1个回答

3

假设形数组参数(dimension(:))需要一个明确的接口。最好通过将过程放置在模块中来完成。其他选项是使过程内部(使用contains)或提供interface块。

module m
 implicit none
contains
 function RealCumSum(i) result(j)
    real, dimension(1:), intent(in)  :: i ! input
    real, dimension(size(i)) :: j ! output
    integer :: m

    do m = 1,size(i)
        j(m) = sum(i(1:m))
    end do

 end function RealCumSum
end module

 program xfunc
    use m

    implicit none
    real, dimension(2) :: a = (/ 3.2 , 2.5 /)
    real, dimension(2) :: b, RealCumSum

    b = RealCumSum(a)

    write(*,*) "cumulative sum of ",a," is ", b
 end program xfunc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接