LoginSignup
hattorisena
@hattorisena

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

fortran データ出力について

解決したいこと

1ステップごとにファイルに出力しているところを、容量が大きくなりすぎるので1000ステップごとに出力したいのですが,if (mod(istep,1000).eq.0)をつけるとファイルに書き込まれなくなりました。1ステップごとなら書き込まれるのに何が原因なのでしょうか?

発生している問題・エラー

open(40,file ='s_heikinn1102_time_series.dat')でファイルを生成し、そこにデータを記入していきたいがプログラミングを実行してもそこに書き込まれない。

該当するソースコード

do istep =1,10000
        if (mod(istep,iout).eq.0) write(*,100) 'istep = ',istep, ', ux(NXmax/2,0)=',ux(NXmax/2,0) !ターミナルに書き込まれる 反応する
        if (mod(istep,iout).eq.0) call output(nu,ux,uy,siita,istep) !dataファイルに書き込まれる 反応する
        call march(nu,ux,uy,siita) !時間発展 反応する

        if (mod(istep,iout).eq.0) then !ここがうまくいってない
            call siita_heikinn(siita,s_heikinn) !s_heikinnを出力する
            write(40,'(5e14.6)') dt*real(istep),s_heikinn
        endif

    enddo


### 自分で試したこと
自分では解決できませんでした。どなたかご存じの方よろしくお願いします。
0

1Answer

手元で問題を再現できないので確かなことは言えませんが,
もし「プログラム実行途中に出力ファイルの内容が更新されない」という話ならば,出力がバッファリングされているせいかもしれません.

バッファリングが原因ならば,以下のどちらかの変更により解消するはずです.

write 文の直後に flush 文を追加する.

write(40,'(5e14.6)') dt*real(istep),s_heikinn
flush(40)

write 文を呼ぶたびに open/close する.

open(40,file ='s_heikinn1102_time_series.dat')
write(40,'(5e14.6)') dt*real(istep),s_heikinn
close(40)
1Like

Your answer might help someone💌