2014-02-20 37 views
1

我開始使用CFD fortran程序,並且想要更新它寫入輸出文件的變量。fortran初學者 - 將變量寫入輸出文件

我要輸出幾列,我和J座標(ILJL),水面高程(SURFEL),協調的底部高程(BELV),水(HP)的深度,最後,這是我在哪裏有問題,模擬過程中座標的最大水面高程(SURFELMAX)。 L是指一個特定的I,J協調,LA是在模擬的最後一個座標

到目前爲止,我有:

DO L=2,LA 
    SURFEL=BELV(L)+HP(L) 
    IF (SURFEL.GT.SURFELMAX)THEN 
     SURFELMAX=SURFEL 
    ELSE IF (SURFELMAX.GT.SURFEL) THEN 
     SURFELMAX=SURFELMAX 
     WRITE(10,200)IL(L),JL(L),SURFEL,SURFELMAX 
    ENDIF 
ENDDO 

一切工作正常以外的SURFELMAX,其中最高的記錄面的高地發生在整個域中的任何座標都是針對每個座標編寫的,即列中填充了相同的值,這是仿真過程中整個域中經歷的最高值。

我需要先爲SURFELMAX分配一個數組,並且每次都檢查SURFEL以查看它是否增加了?如果有的話,有人能爲我指出正確的方向嗎?

回答

0

如果我理解了正確的要求,那麼在開始寫出之前,您想要計算SURFELMAX。這可能很簡單:

SURFELMAX = MAXVAL(BELV(2:LA)+HP(2:LA)) 
WRITE(10,200) (IL(L), JL(L), BELV(L)+HP(L), SURFELMAX, L=2,LA) 

(或甚至作爲一個單一的行)。

看來我沒聽懂,我會再試一次 - 將上述內容保存爲其他人的警告。

看來您確實需要SURFELMAX(2:LA)其中每個元素在給定單元格中迄今爲止最高。

do L=2, LA 
    SURFELMAX(L) = MAX(SURFELMAX(L), BELV(L)+HP(L)) ! Store the historical maximum 
    WRITE (10,200) IL(L), JL(L), BELV(L)+HP(L), SURFELMAX(L) 
end do 

其中,最初,SURFELMAX已被設置爲足夠小的值。如果需要,您也可以明確計算SURFEL

+0

感謝您的快速回復 - 我不確定這會適用於我之後的工作 - 例如,該軟件模擬幾個月的河流流量,每隔15分鐘向該文件寫入水位。我正在尋找一個輸出文件,記錄整個模擬過程中每個網格單元中經歷的最大水位。 我想我需要在每個時間步驟製作一個大小爲L的水位數組,並且如果在該時間步中找到更高的值,則更新另一個數組?這聽起來正確嗎?我該怎麼寫呢?感謝您的幫助 – user3333464

+0

謝謝你們的有益回覆,我想我將能夠寫出我現在需要的東西。我非常感謝你的幫助。 – user3333464

0

如果這是時間相關的,那麼您將不得不定義尺寸爲(1:LA,1:T)(T =時間步數,LA =活動座標數)的二維數組。

然後在通過域的循環之外增加時間步長(比如迭代器稱爲I_T)。 最後將每個座標的最大值分配給SURFELMAX(I_T,L)

+0

謝謝你們兩位的有益回覆,我想我可以寫出我現在需要的東西。我非常感謝你的幫助。 – user3333464