....
abstract interface
pure function fi(t,u) result (fu)
use NumberKinds
real(kp), dimension(:), intent(in) :: u
real(kp), intent(in) :: t
real(kp), dimension(size(u)) :: fu
end function fi
end interface
contains
pure function rk4_step(u,f,dt) result(un)
use NumberKinds
real(kp), intent(in) :: dt
real(kp), intent(in), dimension(:) :: u
real(kp), dimension(size(u)) :: k1,k2,k3,k4,un
procedure(fi) :: f
integer :: N
...
end function rk4_step
...
我收到此错误消息g95:G95(GCC 4.0.3(g95 0.94!)2013年1月17日)
In file src/integrators.f95:34
pure function rk4_step(u,f,dt) result(un)
1
Error: Dummy procedure 'f' of PURE procedure at (1) must also be PURE
Makefile:28: recipe for target 'test_rk4' failed
我不知道gfortran:GNU Fortran(GCC)4.8.2 20140206(预发布) 并且程序编译没有进一步的问题
答案 0 :(得分:2)
只是一个编译器错误。当Fortran 2003刚刚开始在编译器中实现时,g95已经很老了。它具有良好的C互操作性,流访问等等,但许多其他功能根本没有实现。
如果您需要现代功能支持,请不要使用长时间未更新的编译器(最近有一个小例外)。
您可以尝试在rk4_step
内部使用接口块而不是abstract interface
,即Fortran 90,并在g95中为我工作。
pure function rk4_step(u,f,dt) result(un)
use NumberKinds
real(kp), intent(in) :: dt
real(kp), intent(in), dimension(:) :: u
real(kp), dimension(size(u)) :: k1,k2,k3,k4,un
integer :: N
interface
pure function f(t,u) result (fu)
use NumberKinds
real(kp), dimension(:), intent(in) :: u
real(kp), intent(in) :: t
real(kp), dimension(size(u)) :: fu
end function f
end interface
end function rk4_step