需要更改哪些内容才能生成Fortran 90子程序“纯”?

需要更改哪些内容才能生成Fortran 90子程序“纯”?

问题描述:

我定义的代码模块(一个Fortran F90文件),并与这两个子程序提供它:需要更改哪些内容才能生成Fortran 90子程序“纯”?

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

请务必使用标签[tag:fortran],并在必要时添加版本以区分您的问题是否具体。例如,你不能使用Fortran 2008,但只能使用Fortran 90. – 2015-12-17 11:52:16

我不太了解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的,只要您的整数传递给float参数我还可以得到一个类型的警告。

+0

这样做。谢谢! – 2012-03-23 01:34:06