2014-11-14 48 views
0

我在使用gfortran編譯的舊fortan代碼時遇到了一些麻煩。Gfortran與數組大小的常見塊

INTEGER NEQ 
DOUBLE PRECISION RE 
COMMON /DM18J/ RE,NEQ 
CALL FUNC(NEQ,RE) 

代碼的問題是該函數假定RE是一個NEQ大小的數組。但是,我不能事先指定數組的大小,因爲它來自公共塊。

由於代碼非常冗長,我希望在不訴諸模塊變量的情況下修復yhis。我想嘗試的一件事是將NEQ作爲參數插入,而不是通過公共塊獲取它。

+5

它不清楚你在問什麼。你是說你有一段時間的舊代碼,現在gfortran正在拋出一個編譯錯誤?錯誤是什麼?你是否想改變工作代碼,最新的變化是什麼? – agentp 2014-11-14 18:23:42

+0

這是舊代碼,無需在英特爾Fortran和g95編譯器中投訴。由於排名不匹配而引發警告。 – Hugo 2014-11-17 12:22:35

回答

1

如果RE是一個數組,那麼它應該被聲明爲這樣。對於參數來說,它的大小爲100

parameter (maxre = 100) 
integer neq 
double precision re(maxre) 
common /dm18j/re, neq 

當調用你的例程時,你需要指定函數需要操作的數組的大小。這不一定是數組的大小。您的陣列可能有10000個元素,但如果您只希望在前2個元素上操作,只需將NEQ設置爲2.

! sanity check 
if (neq .gt. maxre) then 
    print *, 'increase the size of maxre to at least ', neq 
    stop 
end if 

call func(re, neq) 
+0

我改變了代碼中所有常用塊的大小。這個伎倆。 – Hugo 2014-11-17 12:23:15