第四章Grads数据资料转换和数据描述文件2013 下载本文

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)数据描述文件中变量的顺序与此相同;