第二章 数据处理
存时为.ctl。
练习:为data.grd文件(刚才进行数据转 换得到的新文件)编写数据描述文件
data.ctl。
dset data.grd undef -9.99E+33 title NCEP/NCAR REANALYSIS PROJECT xdef 37 linear 60.0 2.5 ydef 17 linear 0.0 2.5 zdef 2 levels 850 200 tdef 48 linear JAN1982 1mo vars 3 u 2 99 u wind(m/s) v 2 99 v wind(m/s) sst 0 99 TSFC DATA endvars
XDEF 80 LINEAR -140.0 1.0
YDEF 50 LINEAR 20.0 1.0
ZDEF 10 LEVELS 1000 850 700 500 400 300 250 200 150 100
TDEF 4 LINEAR 0Z10apr1991 12hr
vars 6 slp 0 0 sea level pressure z 10 0 heights t 10 0 temps td 6 0 dewpoints u 10 0 u winds v 10 0 v winds endvars
第二章 数据处理
2.1 各类数据格式的特点
一般二进制无格式直接或者顺序记录
的数据格式:可以是格点数据或站点 数据,可以用Fortran或者C语言读写。
Binary格式数据
常用后缀.dat .grd .bin , ……
需要.ctl文件一起使用
是无格式文件(form=‘unformatted’)
3.数据描述文件的构成
(1)每个数据描述文件一般包含以下几项: 被描述的数据文件名(dset) 该数据说明文件的标题(title) 数据类型、格式和选项(dtype,format,option) 时间、空间维数环境设置 (xdef,ydef,zdef,tdef) 变量定义(vars,endvars)
3. 举例(格点资料)
现有ASCII码(十进制存放格式)数 据资料文件u.dat、v.dat和SST.dat,其空间 范围:60-150°E,0-40°N;层次:u、v 为850、 200hPa;时段:1982.1-1985.12; 分辨率:2.5*2.5。要求编写出将这三个文 件转换成二进制无格式直接存取(Grads 格式.grd)文件的Fortran程序。
50 continue
do 51 iz=1,nz
read(2,*) ((v(i,j,iz,it),i=1,nx),j=1,ny)
51 continue
read(3,*) ((sst(i,j,it),i=1,nx),j=1,ny)
100 continue
do 200 it=1,nt do 30 iz=1,nz write(12) ((u(i,j,iz,it),i=1,nx),j=1,ny) 30 Continue do 31 iz=1,nz write(12) ((v(i,j,iz,it),i=1,nx),j=1,ny) 31 continue write(12) ((sst(i,j,it),i=1,nx),j=1,ny) 200 continue end
时间表示法 :hh:mmZddmmmyyyy 时间增量表示法:vvkk
VARS number
表示变量描述开始,同时给出变 量个数number 。 用ENDVARS表示数据描述文件结 束。
4.数据描述文件的建立 数据描述文件为纯文本格式,可 用一般的编辑器产生(如记事本,写 字板等)。描述文件编辑完成后,保
如果不考虑采用无格式直接方式存取文件的话, 可以使用下面的编程形式,较为简单。 parameter(nx=37,ny=17,nz=2,nt=48) dimension u(nx,ny,nz,nt), # v(nx,ny,nz,nt), sst(nx,ny,nt) open(1,file='u.dat')
2.3 数据描述文件
GrADS绘图不能直接使用“数据文 件”,而是通过“数据描述文件”间
接使用“数据文件”。
1. 数据描述文件的概念
数据描述文件是原始数据文件的描 述文件。
2. 数据描述文件的形式
以下是一个格点数据描述文件的例子:
* this is an example to demonstrate the data descriptor file DSET ua.dat TITLE Upper Air Data DTYPE grid OPTION byteswapped UNDEF -9.99E33
GRIB格式数据
等 常用后缀.grb 需.ctl和.idx文件一起使用 用grib2ctl.pl生成数据说明(描述)文件.ctl $ perl grib2ctl.pl test.grb 用gribmap –i test.ctl 生成映射文件.idx $ gribmap –i test.ctl 在GrADS中处理 ga->open grib.ctl
open(2,file='v.dat')
open(3,file='sst.dat')
c 打开目标文件,recl为记录的长度,对于直 接存取文件必须指定记录长度 。 open(12,file=‘data.grd',form='unformatted',
# access='direct', recl=nx*ny*4)
定义Y方向格点与纬度的映射关系
ZDEF number mapping <start increment>
或ZDEF number <value-list>
设置气压面与垂直网格点的映射关系。
TDEF number LINEAR start-time increment
设置网格值与时间的映射关系 。
open(2,file='v.dat')
open(3,file='sst.dat')
open(12,file=‘data.grd',form=‘binary')
do 100 it=1,nt do 50 iz=1,nz read(1,*) ((u(i,j,iz,it),i=1,nx),j=1,ny)
2.2 数据文件的转换
1. 转换方法
转换文件的数据存放格式,一般 是通过Power Station或Visual Fortran
等软件使用Fortran或者C语言来编程
转换。
2.数据存放形式
数据排放顺序为:经度、纬度、层次,
然后是物理变量,最后是时次变化 。
Write(10,rec=1)(((temp(I,j,k),i=1,18),j=1,9),k=1,5)
Fortran程序编写如下:
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='u.dat')
c按一定格式把数据文件读入,irec为记录累加器 irec=0 do 100 it=1,nt do 50 iz=1,nz irec=irec+1 read(1,rec=irec) ((u(i,j,iz,it),i=1,nx),j=1,ny) 50 continue do 51 iz=1,nz irec=irec+1 read(2,rec=irec) ((v(i,j,iz,it),i=1,nx),j=1,ny) 51 continue irec=irec+1 read(3,rec=irec) ((sst(i,j,it),i=1,nx),j=1,ny) 100 continue
c 将数据资料写入新文件中, irec重新进行记录累加 irec=0 do 200 it=1,nt do 30 iz=1,nz irec=irec+1 write(12,rec=irec) ((u(i,j,iz,it),i=1,nx),j=1,ny) 30 continue do 31 iz=1,nz irec=irec+1 write(12,rec=irec) ((v(i,j,iz,it),i=1,nx),j=1,ny) 31 continue irec=irec+1 write(12,rec=irec) ((sst(i,j,it),i=1,nx),j=1,ny) 200 continue end
(2)数据描述文件中各记录的含义:
DSET data-set-name
给定二进制原始数据文件的文件 名(可包含路径)。
TITLE string
用字符串string简略描述数据文件 的内容。
UNDEF value
定义缺测值。
OPTIONS <keywords> 定义数据格式选项,keywords 有: <yrev> <zrev> <sequential> <byteswapped> <template> <big-endian> <little-endian>
netCDF格式数据
自定义数据格式,精确性好,便于传输 ECMWF/NCEP再分析资料等 常用后缀.nc 自带数据内容说明(自描述) 标准NC格式,GrADS可直接处理 ga->sdfopen absolute.nc 非标准NC,写.ddf描述文件(v1.8)后可处 理 ga->xdfopen absolute.ddf