只要你有一个明确的接口,它就可以工作。将该功能作为内部程序使用,就像将程序放入模块一样。考虑下面这个例子:
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