2
  ....
  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 (prerelease) 并且程序编译没有进一步的问题

4

1 回答 1

2

只是一个编译器错误。g95 非常古老,当时 Fortran 2003 刚刚开始在编译器中实现。它具有不错的 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
于 2014-03-31T19:19:40.317 回答