有一段程序:
[Fortran] 纯文本查看 复制代码 program ode
use rksuite_90
implicit none
……
external::f
dimension(2)::f
……
call range_integrate_r1(comm,f,t_want,t_got,y_got,yderiv_got,flag)
stop
end program ode
function f(t,y)
use rksuite_90
implicit none
real(kind=wp)::t
real(kind=wp)::y(2)
real(kind=wp)::f(2) !声名返回值类型
f(1)=y(2)
f(2)=-y(1)
end function
module如下。
[Fortran] 纯文本查看 复制代码 module rksuite_90
……
recursive subroutine range_integrate_r1(comm,f,t_want,t_got,y_got,yderiv_got,flag)
interface
function f(t,y)
use rksuite_90_prec, only:wp
real(kind=wp), intent(in) :: t !indep!
real(kind=wp), dimension(:), intent(in) :: y !dep!
real(kind=wp), dimension(size(y,1)) :: f !dep!
end function f
end interface
……
comm%yp = f(comm%t,comm%y)
……
end module rksuite_90
range_integrate_r1中的形参f是个function,由于 f 在module中的定义是dimension形式的,见module代码,(size=2),
所以需要将 f 以external且以一个数组的形式传给range_integrate_r1,请问应怎么做?
f(t,y)中的形参数值是在其他子程序中给定的,见module代码(语句为comm%yp = f(comm%t,comm%y)),不能我自己定义
我用
[Fortran] 纯文本查看 复制代码 external::f
dimension(2)::f 在主程序定义以后,程序报错如图
|