0

我已经定义了一个代码模块(一个 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”编译?

4

1 回答 1

1

我对fortran 90(回到我的时代等)了解不多,但如果你把它放在一个模块中它就可以工作。我的印象是各种“现代”fortran 功能都需要模块。

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

module foo
  implicit none
contains

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

end module foo

啊,这是一个解释(见答案)-使用 gfortran 在 Fortran 90 中编写和调用纯子例程

ps 当您将整数传递给浮点参数时,我还会收到类型警告。

于 2012-03-23T00:50:50.350 回答