do 100 it=1,nt
do 100 iz=1,nz irec=irec+1
write(12,rec=irec) ((var(i,j,iz,it),i=1,nx),j=1,ny)
100 Continue Close(1) Close(12) end
还可以用另外的一种方式写资料,见下:
c 打开目标文件,recl为记录的长度。 open(12,file='d:\\llp\\test.grd',
&form='unformatted',access='direct',
recl=nx*ny*nz*4) c 写数据资料
irec=0
do 100 it=1,nt
irec=irec+1 write(12,rec=irec)
(((var(i,j,iz,it),i=1,nx),j=1,ny),iz=,1,nz) 101 Continue
Close(1) Close(12) end
另外一种写法:
c 打开目标文件,recl为记录的长度。 open(12,file='d:\\llp\\test.grd', &form='binary')
c 写数据资料
do 100 it=1,nt
do 100 iz=1,nz
write(12) ((var(i,j,iz,it),i=1,nx),j=1,ny) 100 ntinue Close(1) Close(12) end
注意:
1)recl=:一次写入的数据量,与Fortran辑单位有关。
编 .以字节数为单位:需要*4,recl=nx*ny*nz*4 .以数据个数为单位,不需*4,recl=nx*ny*nz 2)recl与rec有关联
3)不同维数的循环嵌套顺序
(lon lat lev 不同变量 time ) (x y z 不同变量 t )
(内循环-------------外循环)
例 2、如何将多个要素写入同一个数据文件中? 现有ASCII码数据资料文件u.dat、v.dat和
oo
SST.dat,其空间范围60-150E,0-40N;层次:u、v为850、 200hPa;时段:1982.1-1985.12;分辨率:2.5*2.5。要求编写出将这三个文件转换成二进制无格式直接存取文件的Fortran程序,并给出相应的数据描述文件(CTL文件)。
Program main
C 定义一个X,Y,Z方向的格点以及总时次nt parameter(nx=37,ny=17,nz=2,nt=48) c 定义数组
dimension u(nx,ny,nz,nt), v(nx,ny,nz,nt),
sst(nx,ny,nt)
c 打开原数据文件
open(1,file='d:\\llp\%u.dat')
open(2,file='d:\\llp\\v.dat')
open(3,file='d:\\llp\\sst.dat')
c 打开目标文件,recl为记录的长度。 open(12,file='d:\\llp\\data.grd',
&form='unformatted',access='direct',
recl=nx*ny*4)
cccccccccccccccccccccccccccccccccccccccccccccc 按一定格式把数据文件读入 cc ccccccccccccccccccccccccccccccccccccccccccc
cccccccccc 写数据资料 ccccccccccc
irec=0 do 100 it=1,nt
do 50 iz=1,nz irec=irec+1
write(12,rec=irec) ((u(i,j,iz,it),i=1,nx),j=1,ny) 50 continue do 51 iz=1,nz
irec=irec+1
write(12,rec=irec) ((v(i,j,iz,it),i=1,nx),j=1,ny) 51 continue irec=irec+1
write(12,rec=irec) ((sst(i,j,it),i=1,nx),j=1,ny) 100
continue
close(1) close(12) end
注意:1)recl 与rec; 2)循环顺序;
3)数据描述文件中变量的顺序与此相同;