2017-10-20 136 views
-2

我有一個運行一系列子例程的fortran程序。其中的第一個從.txt文件讀取數據的負載。所有變量都在另一個文件中定義,該文件與程序和每個子例程中的'include'一起包含。我怎樣才能最好地將變量傳入和傳出各種子例程?Fortran 08中的'全局變量'?

+2

通過參數列表傳遞變量,使用派生類型適當。全局變量是一個壞主意。 –

+0

請閱讀[問]。你應該顯示你的代碼。我不清楚你到底在做什麼以及你想做什麼。另見[mcve]。 –

+1

即我的意思是,它們是可以在子程序中改變的變量嗎?或常量?你有什麼問題?問題設計?或者如何編碼?你想看看我們的一些代碼嗎?如果是的話,我們首先需要看到你的一些代碼。同樣參加[巡演],這很有用,說實話,我不僅僅是在嘲笑每個人都是一個混蛋。 –

回答

2

考慮將COMMON塊轉換爲模塊,然後只導入通過use some_module, only: var1, var3, var6實際使用的變量。由於各種原因,include文件是一個壞主意,尤其是因爲當您更改它們時,它們不會觸發make重建依賴它們的源文件。最好留下他們與其他可怕的F77isms ...

+3

*「他們不會觸發make重建」*看起來你沒有使用moern buid系統,或者沒有正確設置你的依賴列表。 –

+0

感謝您的幫助,這裏是主程序的第一部分(全部正開始後) '程序shear_3d' 隱無 !包含變量 包括「variables.f08」 通話的read_data 打印* 「讀取數據」 呼叫derive_variables(NX) 打印*, 「派生變量」 呼叫init_matrices 打印*, 「初始化矩陣」 呼叫initial_conditions' 和變量的文件是這樣的: '整數I,J ,k,t 整數NX,NY,NETA,NZ,nt下 整數read_nx,read_ny,read_nz 雙精度DX,DETA,DZ,DT' 與100行左右 – TomJ

+2

@TomJ它是完全不可能在這裏讀取的代碼。您的問題包括任何相關信息。請確實閱讀這些鏈接。 –