[英]How to code a Fortran function that return an array
在我的研究中,我必須編寫 4 矩陣代碼,所以我編寫了這個代碼,但我有一個我不明白的錯誤。
我的 function:
function matrix(x_axis,Nblines) result(m)
implicit none
real(kind=8),dimension(3,3) :: m
real(kind=8), intent(in) :: x_axis(Nblines)
integer :: i, j
do i=1,3
do j=1,3
m(i,j) = sum(x_axis**(int(i+j-2)))/Nblines
end do
end do
end function matrix
x_axis 是一個向量,我計算它的多重平均值。 我有這個錯誤:
Legacy Extension: REAL array index at (1)
我讀過一些關於相同類型錯誤的人,這個解決方案是關於接口的,但我不明白這一點。
我會回答你提出的問題,即使這不太可能是你的最終問題。
對於診斷(這不是錯誤):在某個地方,在您沒有向我們展示的代碼中,您有一個數組引用,例如a(x)
,其中x
是 REAL 類型而不是 INTEGER。現在在 Fortran 中這是不允許的,但是,幾十年前,許多編譯器仍然支持它作為擴展。 編譯器幫了你一個忙,並指出了這一點。 這是不好的做法,可能是您的錯誤。
關於返回 arrays 的函數,這要求“顯式接口”對調用者可見。 執行此操作的最佳方法是將 function 放在一個module
中,然后從您要調用它的地方use
該模塊。 我在https://stevelionel.com/drfortran/2012/01/05/doctor-fortran-gets-explicit-again/更詳細地討論了顯式接口
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.