什么需要改变使Fortran 90子程序“PURE”?

时间:2012-03-23 00:29:37

标签: fortran fortran90 intel-fortran

我已经定义了一个代码模块(Fortran F90文件)并为它提供了这两个子程序:

pure Subroutine XRotation (x, y, z, Xrot, xp, yp, zp)
! Rotate about X-axis through the angle Xrot

real*4, INTENT(IN) :: x, y, z, xrot
real*4, INTENT(OUT) :: xp, yp, zp
real*4 xrad

Xrad = Xrot * 3.141592627 / 180 ! Convert to radians
yp = y * COS(Xrad) + z * SIN(Xrad)
xp = x
zp = z * COS(Xrad) - y * SIN(Xrad)


END


Pure Subroutine DummyDummy()

Call XRotation(1,2,3,4,5,6,7)

End Subroutine

编译器(英特尔Fortran 12,针对32位Windows,无论价值多少)都会返回一条错误消息:

  

错误#7137:PURE过程中引用的任何过程,包括   通过定义的操作或赋值引用的必须是   明确宣布PURE。 [XROTATION]

我有点难过。如何更改此代码以便PURE子程序“DummyDummy”编译?

1 个答案:

答案 0 :(得分:1)

我不太了解fortran 90(在我的日子等等),但如果你把它放在一个模块中就可以了。我得到的印象是各种“现代”fortran功能需要模块。

无论如何,比我更聪明(或更年轻?)的人可以解释,但这应该可以帮助你继续。

module foo
  implicit none
contains

  pure Subroutine XRotation (x, y, z, Xrot, xp, yp, zp)
  ....

end module foo

啊,这是一个解释(见答案) - Writing and calling pure subroutines in Fortran 90 using gfortran

ps我也会得到一个类型警告,因为你传入整数来浮动参数。