Fortranのwrite文は1回実行すると書き出したデータ本体の前後に<ヘッダ>と<フッタ>が付きます。
一方、MicroAVSにはデータ本体だけを読み込ませたいので、<ヘッダ><フッタ>はなるべく少なくした方がFLDヘッダーの定義が簡単になります。
つまり、Fortranプログラムにおけるバイナリ出力においては『1成分につき1つのwrite文を使って(全節点分の数値を)一度に書き出す』ことで、FLDヘッダーによる読み取りに都合がよくなります。
21×22×23の正規直行格子上に2つの成分がある時系列データ(10ステップ)の出力例です。
成分ごとに出力ファイルを分けていて、それぞれ10ステップ分を1つのファイルに書き出しています。
また、もう1つのファイルに各ステップの数値をアスキー出力しています。
parameter(nstep=10,nx=21,ny=22,nz=23,nall=nx*ny*nz)
dimension u(nx,ny,nz)
dimension v(nx,ny,nz)
d
open(30,file="f_time.dat",form="formatted",status="unknown")
open(40,file="f_u.dat",form="unformatted",status="unknown")
open(50,file="f_v.dat",form="unformatted",status="unknown")
d
DO 9000 n=1,nstep
DO 1000 k=1,nz
DO 2000 j=1,ny
DO 3000 i=1,nx
u(i,j,k) = i + j + k + n
v(i,j,k) = i + j - k - n
3000 continue
2000 continue
1000 continue
d
write(30,*) n
write(40) (((u(i,j,k),i=1,nx),j=1,ny),k=1,nz)
write(50) (((v(i,j,k),i=1,nx),j=1,ny),k=1,nz)
d
9000 continue
close(30)
close(40)
close(50)
d
stop
end
write文で書かれた<ヘッダ><フッタ>それぞれ4byteをskipで飛ばして読み込ませています。
2ステップ目以降は、<前ステップのフッタ><現ステップのヘッダ>と4byte×2をはじめに読み飛ばす必要があります。
※コンパイラによってはヘッダ、フッタのbyte数が異なる場合もあります。
# AVS field nstep=10 ndim = 3 dim1 = 21 dim2 = 22 dim3 = 23 nspace = 3 veclen = 2 data = float field = uniform # time start time file=./f_time.dat filetype=ascii skip=0 close=0 variable 1 file=./f_u.dat filetype=binary skip=4 close=0 variable 2 file=./f_v.dat filetype=binary skip=4 close=0 EOT DO time file=./f_time.dat filetype=ascii skip=0 close=0 variable 1 file=./f_u.dat filetype=binary skip=8 close=0 variable 2 file=./f_v.dat filetype=binary skip=8 close=0 EOT ENDDO