2014-03-28 76 views
0

注:我仍然在調查這一問題 - 請不要考慮它,但 - 這個錯誤可能是其他地方Fortran 90能否將形狀數組作爲可選參數?

我想一個參數傳遞給一個子程序是可選的,但這樣的說法也正好是一個假設的形狀數組。當我嘗試編譯包含該子程序的模塊,得到類似如下錯誤:

PGF90-S-0189-參數數3〜(例程):標量實際參數的關聯陣列僞參數(位置)

例行看起來像這樣:

SUBROUTINE EXAMPLE(A, B, C) 
    IMPLICIT NONE 
    INTEGER, INTENT(IN) :: A, B 
    INTEGER, OPTIONAL, DIMENSION(:), INTENT(IN) :: C 
    INTEGER :: TEST 

    IF (PRESENT(C)) THEN 
     TEST=C(1) 
     PRINT *,TEST 
    ELSE 
     PRINT *,A,B 
    ENDIF 

END SUBROUTINE EXAMPLE 

它包含一個模塊內。當我嘗試僅使用來自使用該模塊的子例程的兩個參數來調用它時出現錯誤。

我只找到一個可能的相關問題,對Portland Group的論壇在這裏:

http://www.pgroup.com/userforum/viewtopic.php?t=624&sid=d76fdf8ca2bf4fc3109f4f49b1de0ad7

答案使用尚未分配的可選參數歸結到用戶 - 我不知道如果這適用於我的情況,因爲我沒有在IF(PRESENT(C))塊之外使用'C',但是當將變量定義爲假定的形狀時,會出現一個隱式分配情況,而這種分配不能在它不是首先通過的?

+0

這不是確切的代碼本身,我只是把它作爲一個簡化的插圖的本質。我已將子例程重命名爲EXAMPLE以防止出現名稱衝突。 –

+0

對假設形狀的假人使用'optional'完全沒有限制。這並不是說所有的用法都是正確的,所以你可以爲你的問題提供一個[MCVE](http://stackoverflow.com/help/mcve)? – francescalus

+5

您報告的錯誤消息與可選或假設形狀無關 - 它抱怨您將標量傳遞給數組參數,這是標準所不允許的(有一些例外)。我在http:///software.intel.com/en-us/blogs/2009/03/31/doctor-fortran-in-ive-come-here-for-an-argument。由於您沒有向我們顯示該電話,因此很難更具體。 –

回答

0

現在已解決此問題 - 您確實可以使用假定的形狀數組作爲可選參數。正如在評論中指出的那樣 - 錯誤源於源文件的舊版本,由於缺陷而不能通過預處理步驟重新生成。因此,調用並不是我認爲的 - 它實際上包含一個整數作爲第三個參數。

感謝您的幫助。