2013-07-13 115 views
1

我正在嘗試在Fortran代碼中的兩個不同位置(主程序和子例程)未格式化文件中寫入。問題是,當我這樣做時,結果會改變,我懷疑這是因爲內存分配覆蓋了我用來在我的CFD代碼中進行仿真的數據。我問:是否有可能在代碼中只使用一次格式化的文件(寫入)?我的意思是,我必須使用相同的文件來保存所有數據,而不是使用不同的文件。在Fortran中寫入兩個不同格式的未格式化文件

我複製粘貼代碼的兩個部分,顯示什麼,我想描述:

在主程序中,循環是:

  call numcar (isave,suffix) 
     longueur=index(nchamp,' ')-1 
     nfichier=nchamp(1:longueur)//suffix 
     longueur=index(nfichier,' ')-1 
     open(10,file=nfichier(1:longueur),form='unformatted') 
     write(10) real(uxn,4),real(uyn,4),real(wzn,4),real(ppo,4) 
     close(10) 
!  *****************************************  
     isave=isave+1 

,並在子程序,循環是:

  call numcar (isavediv,suffix1) 
     longueur1=index(ndiv,' ')-1 
     nfichier1=ndiv(1:longueur1)//suffix1 
     longueur1=index(nfichier1,' ')-1 
     open(20,file=nfichier1(1:longueur1),form='unformatted') 
     write(20) real(ppm,4) 
     close(20) 
!  *****************************************  
     isavediv=isavediv+1 

所有的變量都聲明爲在這兩個主程序和子程序IMPLICIT NONE

+0

一:什麼樣的結果改變?文件中的值,運行時變量的值?其次:在兩個不同的調用中,變量看起來不同,所以如果您消除一個調用,則需要將變量添加到另一個調用中。 –

+0

第一:運行時間更改期間我的變量的值。第二:變量是不同的。正如你所說,我可以將變量添加到其他變量中,但是我想在每個子程序中進行調用。事實是:當我不使用第二次調用時,我的模擬結果很好,但是當我想在第二次調用中用未格式化的語句保存數據時,我的模擬結果發生了變化。我的模擬變得不穩定,我不明白他們爲什麼會改變(模擬的運行時數據),如果我只是將數據保存在文件中。 – flaviusaetius

回答

1

我解決了我的問題。 問題是我使用的是20號頻道,我的一位同事告訴我這個頻道被計算機或某些設備用來處理數據。 我改變了頻道號碼10,它再次運作良好。 感謝您的意見。 現在看起來這樣:

 open(10,file=nfichier1(1:longueur1),form='unformatted') 
    write(10) real(ppm,4) 
    close(10)