Edited at

Fortranのpure functionはModuleで定義されるグローバル変数を書き換えない。

例:



module mod
integer :: glocalVar = 0

contains

pure function square(x)
real, intent(in) :: x
real :: square
square = x * x
glocalVar = 1 !<---ここで書き換え発生させる
end function

end module

program main
use mod
real :: a, b ! square
a = 2.0
b = square(a)
print*, a, b, glocalVar
end program main

このブログラムを実行すると、ちゃんとエラーがでる。

glocalVar = 1

1
Error: Variable 'glocalvar' can not appear in a variable definition context (assignment) at (1) in PURE procedure


結論

Fortranのpure functionはmodule内部のグローバル変数を書き換えない、安全な関数である。