2013-06-01 95 views
1

我想寫一個標量輸入,但數組輸出的函數。Fortran函數數組

我的例子是:

Ts(theta) = reshape((/ dcos(theta)**2.d0, dsin(theta)**2.d0, -dsin(2.d0*theta)/2.d0, & 
    dsin(theta)**2.d0, dcos(theta)**2.d0, dsin(2.d0*theta)/2.d0, & 
    dsin(2.d0*theta), -dsin(2.d0*theta), dcos(2.d0*theta) /), (/3,3/)) 

Ts(theta)該被讀作一個1個維陣列,但我希望的輸出作爲2維陣列。

這可能嗎?

回答

4

當然

function Ts(theta) 
    real(rp) :: Ts(3,3) 
    real(rp),intent(in) :: theta 

    Ts = reshape((/ cos(theta)**2, sin(theta)**2, -sin(2*theta)/2, & 
     sin(theta)**2, cos(theta)**2, sin(2*theta)/2, & 
     sin(2*theta), -sin(2*theta), cos(2*theta) /), (/3,3/)) 
end function 

其中rp是正確的恆定電流實際精度。

備註:不使用特定的功能dsindcos,他們是FORTRAN 66的殘餘和廢棄因爲FORTRAN 77

你的語法Ts(theta) =意味着你可能嘗試過statement function。它們也過時了。我不確定它們是否可以是數組值,你可以試試。

+0

聲明函數不能是數組,你必須使用聲明的函數。 –

+0

@KyleKanos我是Fortran的新手,聲明函數和聲明函數有什麼區別? – user2443036

+0

我嘗試以下失敗:程序TEST2 隱無 實(RP):: TS(3,3) 打印*,TS(ACOS(0.d0)) 端程序test2的 功能TS(THETA) 隱(rp),intent(in):: theta real(rp):: Ts(3,3) Ts = reshape((/cosθ**)2.d0,sin(θ)** 2.d0,-sin(2.d0 *θ)/2.d0,& sinθ** 2.d0,cosθ** 2.d0,sin(2.d0 *θ)/ 2 (2.d0 *θ), - sin(2.d0 *θ),cos(2.d0 *θ)/),(/ 3,3 /)) END函數 – user2443036