只要你有一個明確的接口,它就可以工作。將該功能作爲內部程序使用,就像將程序放入模塊一樣。考慮下面這個例子:
program example
implicit none
real, dimension(2,4) :: matrixA
real, dimension(5,13) :: matrixB
integer :: matval
matval = test(matrixA)
print *, 'Test returned: ',matval
matval = test(matrixB)
print *, 'Test returned: ',matval
contains
function test(matrix)
implicit none
real, dimension(:,:), intent(in) :: matrix
integer :: test
print *, "matrix dimensions:"
print *, "i: ", lbound(matrix,1), ubound(matrix,1)
print *, "j: ", lbound(matrix,2), ubound(matrix,2)
test = ubound(matrix,1)*ubound(matrix,2)
end function test
end program example
這個程序的輸出是:
matrix dimensions:
i: 1 2
j: 1 4
Test returned: 8
matrix dimensions:
i: 1 5
j: 1 13
Test returned: 65
你可以看到,沒有一個數組是分配和任意大小的數組可以傳遞給函數。該函數可以檢查數組維度的邊界,並可以對數組的內容進行操作。作爲一個例子,我讓函數返回一個基於數組維數的值。
您的代碼片段的問題是您不正確地調用該函數並且沒有返回值。函數(在Fortran中)必須返回值,並且該值必須分配給一個變量。查看我在示例中如何調用函數的差異。如果您不想返回值,請使用子例程而不是函數。
我不明白你的問題(除了使用'test(mymatrix)'作爲裸體表達)。這裏的方法有什麼問題:你是否收到編譯器的任何投訴。 [你也沒有任何可分配的數組。] – francescalus