....
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!) Jan 17 2013)
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(预发布) 并且程序编译时没有进一步的问题
最佳答案
只是一个编译器错误。 g95 已经很老了,当时 Fortran 2003 刚刚开始在编译器中实现。它具有不错的 C 互操作性、流访问等,但许多其他功能根本没有实现。
如果您需要现代功能支持,请不要使用已经很长时间没有更新的编译器(最近有一个小异常(exception))。
您可以尝试使用 rk4_step
内部的接口(interface) block 来代替 抽象接口(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
关于fortran - g95 与 gfortran : Dummy procedure 'f' of PURE procedure at (1) must also be PURE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770122/