在Fortran PURE FUNCTION中声明和初始化局部变量

时间:2014-01-28 22:48:10

标签: fortran

我有一个看起来像这样的函数:

PURE FUNCTION simulate(initial_state, time_specification)
        TYPE(ocean), INTENT(IN) :: initial_state
        TYPE(simulation_time), INTENT(IN) :: time_specification
        TYPE(ocean) :: simulate
        REAL :: t = 0.0      
        ! etc
END FUNCTION simulate

gfortran 4.8.1告诉我

 REAL :: t = 0.0
                1
Error: Initialization of variable at (1) is not allowed in a PURE procedure

据我了解,我应该能够在纯函数中使用局部变量,只要它们没有SAVE属性即可。那么我做错了什么?

3 个答案:

答案 0 :(得分:6)

在现代Fortran初始化意味着SAVE。从F2008 5.2.3

  

显式初始化不在公共块中的变量意味着SAVE属性,可以通过显式规范来确认。

您可以使用局部变量,但只需

real t
t = 0

这不是初始化。

答案 1 :(得分:4)

小心!在声明期间初始化变量意味着 save属性!这违反了pure条件。有关详细信息,请参阅here

最好稍后在代码中初始化变量......

答案 2 :(得分:-1)

REAL :: t = 0.0不是pure,因为它仅在第一次调用函数时生效。