我已经定义了一个代码模块(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”编译?
答案 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我也会得到一个类型警告,因为你传入整数来浮动参数。