2013-04-29 86 views
1

我想要使用一個數組Ar(-3:3,5),它是模塊global中的一個可分配變量,並將其分配給一個子例程並在下一個子例程中訪問它(請參閱代碼下面的片段)。第二個子程序中的索引是從-3到3還是從1到5,還是必須在子程序中指定?Fortran:模塊中的可分配變量

module global 
    real, allocatable(:,:) :: Ar 
end module global 

subroutine allocateAr 
    use global 

    ALLOCATE(Ar(-3:3, 5)) 
end subroutine allocateAr 

subroutine useAr 
    use global 

    Ar(-3,1)=3.0 !is this -3,1 here or do I have to use 1,1???? 
end subroutine useAr 
+0

我會敦促你不要使用全局變量。這只是你將要面對的許多不必要的問題之一,如果你簡單地在例程之間傳遞變量而不是依賴於全局可變狀態,那麼這些問題將被大部分繞過。 – 2013-04-29 12:47:37

+0

如果我從頭開始編寫這個程序,可能是一個好主意,但我不會更改數千行代碼... – user1638145 2013-04-29 13:12:57

+0

您花費更新幾千行代碼的時間將少於重複使用的時間不必要地調試相同的幾千行代碼;特別是如果你在eclipse中使用像photran這樣的現代工具來進行重構。 – 2013-04-29 13:22:55

回答

2

分配數組始終保留自己的界限,如果你訪問它們作爲allocatables。這意味着即使直接使用「使用關聯」或「主機關聯」,如在子程序useAR中顯示的那樣,或者如果您將它們作爲可分配虛擬參數傳遞。如果您按照假定的形狀或假定的大小數組傳遞它們,則必須在每個調用的過程中指定下限,否則它將默認爲1.

因此,您可以使用-3,1

否則我同意Jonathan Dursi關於全局可變狀態。