質問内容
プログラミング初心者です.
Flexpart-WRFという粒子拡散モデルを用いてシミュレーションを行っています.
このモデルの出力結果にバイナリファイルで記述されているものがあり,それをテキストファイルとして変換したいです.
同様にバイナリ→テキストに変換するプログラムがモデルの公式の方で提供されているため,それを参考に自分でプログラムを作成→gfortranでコンパイル→実行してみたのですがエラーが出ている状況です.
ソースコードなど
fluxoutput.f90→今回変換したいバイナリファイルgrid_flux_を作成するプログラムです.このファイルから変数と値を読み取りたいです.
https://git.nilu.no/flexpart/flexpart-wrf/-/blob/master/fluxoutput.f90
readpartpos.f90→今回バイナリからテキスト変換をする際に参考にしたプログラムです
https://www.flexpart.eu/attachment/wiki/FpOutput/readpartpos.f90
実現したいこと
①バイナリファイルにどのような構造・変数が含まれデータが格納されているか知りたい
②バイナリファイルをテキストファイルに変換したい
発生している問題・エラーメッセージ
Fortran runtime error: I/O past end of record on unformatted file
readpartpos.f90を元に自作したプログラム
fortran90
1 program readflux4 2 3 integer :: ioutgrid_option 4 character (len=150) :: outfile, fname 5 real,allocatable, dimension (:,:,:) :: areanorth 6 real,allocatable, dimension (:,:,:) :: areaeast 7 8 open (9, file='fluxlist') 910 read (9,'(a)',end=90) fname 10 11 open (10,file=trim(fname),form='unformatted') 12 print*, 'reading ',trim(fname) 13 read (10) itime, numpart_out, ioutgrid_option 14 print*, 'simulation time:',itime, 's', itime/3600., 'hrs' 15 print*, '#particles in this file:', numpart_out !, outgrid_option 16 if (ioutgrid_option .eq. 1) then 17 print*, 'output is lat-lon grid' 18 else 19 print*, 'output is on WRF projection' 20 endif 21 print* 22 write (outfile,900) trim(fname) 23 900 format (a,'.dat') 24 25 open (20, file=trim(outfile) ) 26 27 read (10) flux 28 write (20,901) flux 29 901 format (f12.5) 30 31 goto 10 32 3390 close (9) 34 35 end 36
プログラムの説明
1.一回目のプログラム実行でfluxlistを作成
2.生成されたfluxlistにモデル出力されたバイナリファイルgrid_flux_の名前を入力
fluxlist
1grid_flux_20150515000000 2grid_flux_20150515010000 3grid_flux_20150515020000 4grid_flux_20150515030000 5grid_flux_20150515040000 6grid_flux_20150515050000
3.grid_flux内の変数fluxをテキスト形式で出力

回答1件
あなたの回答
tips
プレビュー