2012-03-23 62 views
0

我定義的代碼模塊(一個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

回答

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的,只要您的整數傳遞給float參數我還可以得到一個類型的警告。

+0

這樣做。謝謝! – 2012-03-23 01:34:06

相關問題