第四章Grads数据资料转换和数据描述文件.docx
《第四章Grads数据资料转换和数据描述文件.docx》由会员分享,可在线阅读,更多相关《第四章Grads数据资料转换和数据描述文件.docx(21页珍藏版)》请在冰豆网上搜索。
第四章Grads数据资料转换和数据描述文件
GrADS
(GridAnalysisandDisplaySystem)
讲义(4)
内容提要
一、GrADS所能处理的数据格式
二、数据资料的准备(binary)
ASCII码数据文件向二进制数据文件的转换
三、数据描述文件的构成
四、其它数据文件简介(netCDF/GRIB)
五、GrADS控制文件简介
一、GrADS所能处理的数据格式
--Binary:
自制,直接、顺序存取,Fortran可以读写。
*.grd
--netCDF(自描述):
精确性好,便于传输;*.nc
--GRIB:
压缩率高。
*.grb
--HDF-SDS(卫星资料)
--ASCII(台风路径)
--站点
--BUFR(V1.9版本):
二进制通用数据表示格式(BUFR),用于非格点气象数据的保存,便于网络传输,是世界气象组织(WMO)规定的标准格式,目前使用的常规气象资料数据以及雷达、卫星数据资料转换为BUFR格式
二、Binary格式介绍
1、简介
1)GrADS最基本的数据格式;
2)常用后缀:
*.grd,.bin,.dat;
3)可用fortran读写;
4)一般为二进制无格式文件(form=‘unformatted’);
5)访问形式
直接(access=‘direct’)
顺序(access=sequential)--ctl文件中说明
6)格式说明由数据描述文件(*.ctl)描述;
数据资料———数据描述文件———GrADS
翻译器
注意:
数据文件和数据描述文件是分开的。
后者为纯文本格式,可用一般的编辑器产生(如记事本等);
2、GrADS中数据的存放形式
1)5-D的数据集
(x,y),z,VAR,t
排放顺序为先经度、纬度、高度,然后是物理变量,最后是时次变化。
一个x、y数据场构成一个记录。
2)3—D空间的排列
x从西---东,
y从南---北,
z从下--上
3、如何由ASCII码数据生成一个直接存取的无格式数据文件
----------借助于Fortran程序完成
例1:
有一个4-D要素场,将其由ASCII码数据转为无格式直接存取文件,Fortran程序如下:
Programmain
C定义一个X,Y,Z方向的格点以及总时次nt
parameter(nx=144,ny=73,nz=17,nt=48)
c定义数组
dimensionvar(nx,ny,nz,nt)
c打开原数据文件
open(1,file='d:
\llp\test.dat')
!
!
ccccccccccccccccccccccccccccccccccccccccc!
!
ccccccc一定格式把数据文件读入
do100it=1,nt
do50iz=1,nz
read(1,*)((u(i,j,iz,it),i=1,nx),j=1,ny)
50continue
100continue
!
!
!
!
CCCCCCCCCCCCCCCCCCC
ccccccccccccccccccccccccccccccccccccccccccc
c打开目标文件,recl为记录的长度。
open(12,file='d:
\llp\test.grd',
&form='unformatted',access='direct',recl=nx*ny*4)
c写数据资料
irec=0
do100it=1,nt
do100iz=1,nz
irec=irec+1
write(12,rec=irec)((var(i,j,iz,it),i=1,nx),j=1,ny)
100Continue
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
do100it=1,nt
irec=irec+1
write(12,rec=irec)(((var(i,j,iz,it),i=1,nx),j=1,ny),iz=,1,nz)
101Continue
Close
(1)
Close(12)
end
另外一种写法:
c打开目标文件,recl为记录的长度。
open(12,file='d:
\llp\test.grd',
&form='binary')
c写数据资料
do100it=1,nt
do100iz=1,nz
write(12)((var(i,j,iz,it),i=1,nx),j=1,ny)
100ntinue
Close
(1)
Close(12)
end
注意:
1)recl=:
一次写入的数据量,与Fortran编辑单位有关。
.以字节数为单位:
需要*4,recl=nx*ny*nz*4
.以数据个数为单位,不需*4,recl=nx*ny*nz
2)recl与rec有关联
3)不同维数的循环嵌套顺序
(lonlatlev不同变量time)
(xyz不同变量t)
(内循环-------------外循环)
例2、如何将多个要素写入同一个数据文件中?
现有ASCII码数据资料文件u.dat、v.dat和SST.dat,其空间范围60-150oE,0-40oN;层次:
u、v为850、200hPa;时段:
1982.1-1985.12;分辨率:
2.5*2.5。
要求编写出将这三个文件转换成二进制无格式直接存取文件的Fortran程序,并给出相应的数据描述文件(CTL文件)。
Programmain
C定义一个X,Y,Z方向的格点以及总时次nt
parameter(nx=37,ny=17,nz=2,nt=48)
c定义数组
dimensionu(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
do100it=1,nt
do50iz=1,nz
irec=irec+1
write(12,rec=irec)((u(i,j,iz,it),i=1,nx),j=1,ny)
50continue
do51iz=1,nz
irec=irec+1
write(12,rec=irec)((v(i,j,iz,it),i=1,nx),j=1,ny)
51continue
irec=irec+1
write(12,rec=irec)((sst(i,j,it),i=1,nx),j=1,ny)
100continue
close
(1)
close(12)
end
注意:
1)recl与rec;
2)循环顺序;
3)数据描述文件中变量的顺序与此相同;
三、GRADS描述文件
下面为相应于例2的CTL文件(data.ctl)
dsetd:
\llp\data.grd--数据文件名
undef-9.99E+33----缺侧值
titleNCEP/NCARREANALYSISPROJECT---数据标题
xdef37linear60.0002.500----x方向维数
ydef17linear0.0002.500----y方向维数
zdef2levels850200----z方向维数
tdef48linearJAN19821mo---时间维数
vars3----变量总数
u299uwind(m/s)--U风场2层
v299vwind(m/s)--v风场2层
sst199TSFCDATA--海表温度
Endvars--变量描述结束
1、描述文件构成介绍
每个描述文件一般包含以下几项:
(1)被描述的数据文件名(dset)
(2)该数据说明文件的标题(title)
(3)数据类型、格式和选项(dtype,format,option)
(4)时间、空间维数环境设置
(xdef,ydef,zdef,tdef)
(5)变量定义(vars,endvars)
注意:
数据描述文件的每行记录的各项以空格分开,注释行在第一列打“*”,注释行不能出现在变量列表中,每行记录不超过80个字符,
2、数据描述文件中各记录的含义
1)DSETdata-set-name
二进制原始数据文件的文件名(可包含路径)
2)TITLEstring
用字符串string简略描述数据文件的内容。
3)UNDEFvalue
定义缺测值,GrADS在运算操作和图形操作时将忽略这些格点。
4)XDEFnumber或
XDEFnumber
Number:
是X方向网格点数,>=1的整型数;
LINEAR时:
网格点格距均匀;
Start:
起始经度(单位:
度),浮点数表示,负数表示西经,自西向东。
Increment:
网点间距,单位为度,正浮点数。
LEVELS时:
网格距可不均匀,
value-list顺序列出各格点的经度值,可续行表示,至少有两个以上格点时方可用LEVELS。
5)YDEFnumbermappingstart或
YDEFnumber
Number:
Y方向的格点数,用整数表示
mapping表示映射方式,有以下几种:
LINEAR--线性映射
GAUSR15--高斯(Gaussian)R15纬度
GAUSR20--高斯R20纬度
GAUSR30--高斯R30纬度
GAUSR40--高斯R40纬度
LINEAR时:
Start:
起始纬度(单位:
度),浮点数表示,负数表示南纬;
Increment:
Y方向网格距,正浮点数表示,由南向北。
LEVELS时:
value-list:
顺序枚举一系列网格点对应的纬度值,可续行表示,至少有两个以上格点时方可用LEVELS。
高斯GAUSRxx映射:
start为第一个高斯网格数,1表示最南端格点纬度
例如:
YDEF20GAUSR4015
表示共有20个Y方向网格点,起始点为高斯R40网格下的高斯纬度15(即64.100S),实际这20个网格点对应的纬度值为:
-64.10,-62.34,-60.58,-58.83,-57.07,-55.32,-53.56,
-51.80,-50.05,-48.29,-46.54,-44.78,-43.02,-41.27,
-39.51,-37.76,-36.00,-34.24,-32.49,-30.73
注:
常见形式
XDEFnumberLINEARstartincrement
YDEFnumberLINEARstartincrement
6)ZDEFnumbermapping或
ZDEFnumber
设置气压面与垂直网格点的映射关系
Number:
Z方向网格点数,为整型数
mapping为映射类型,有如下几种:
LINEAR--线性映射
Start:
Z=1时的值或起始值
Increment:
Z方向的增量,从低到高,该增量可取负值。
例如:
ZDEF10LINEAR1000-100
LEVELS–(常用)
value-list:
顺序枚举给出全部对应的等压面。
7)TDEFnumberLINEARstart-timeincrement
设置网格值与时间的映射关系。
Number:
总时次数,用整型数表示;
start-time:
起始日期/时间,格式为:
hh:
mmZddmmmyyyy
hh:
两位数的小时
mm:
两位数的分钟
dd:
一位或两位数的日期
mmm:
三个字符的月份缩写
yyyy:
两位或四位数年份,
注:
缺省值:
hh=00,mm=00,dd=1号;
月、年值不能省缺,整个时间串中不能有空格。
例如:
12Z1JAN1990
14:
20Z22JAN1987
JUN1960
Increment:
时间增量,
格式为vvkk,
vv:
增量值,用1位或2位整型数表示
kk:
增量类型,
mn表示分钟,
hr表示小时,
dy表示天,
mo表示月,
yr表示年,
如:
20mn---表示增量为20分钟,
1mo表示增量为1个月,
2dy表示增量为2天。
8)VARSnumber
abrevlevsunitsdescription(变量描述格式)
ENDVARS
变量描述部分
number:
变量个数,
abrev:
变量名,1-8个字符,以字母(a~z)开头,由字母和数字组成;
levs:
整型数,变量含有的垂直层次数,
0表示该变量只有一层,如地表变量;units:
为以后使用预留,暂时设为常数99;description:
一段说明该变量的字符串,最多40个字符.
ENDVARS:
表示数据描述文件结束。
9)dtype
说明数据格式的类型,当binary时省略;
包括:
-grid(省略)
-grb
-station
-bufr
-hdfsds
-netcdf
v1.9新增
9)OPTIONS
可替代"format"的功能且具有更广泛的用途。
包括:
sequential-顺序无格式存放数据;
yrev-y从北-南;
zrev-z从上-下;
byteswapped-二进制数据的位存放顺序取反序;
big_endian:
在SUN/SGI等机器上生成的数据;
little_endian:
在PC与DEC等机器上生成的数据;
365_day_calendar:
任何年份均是365天;
cray_32bit_ieee:
在Cray机上生成的数据;
template-多个时间序列共用一个数据描述文件统一描述时
*3、用一个Ctl文件描述多个数据文件(高级篇)
例如1:
有一组数据资料:
1Jan2007.grd,
2Jan2007.grd,
.......
31Dec2007.grd
其ctl文件的格式:
dsetd:
\llp\%d1%mc%y4.grd
。
。
。
。
optionstemplate
。
。
。
。
。
tdef365linear1Jan20071dy
格式替换:
%y2-2位数年
%y4-4位数年
%m1-1或2位数月
%m2-2位数月(1月须写成01)
%mc-3个字符的月缩写
%d1-1或2位天
%d2-2位天
%h1-1或2位小时
%h2-2位小时
%n2-2位分钟
例如2:
几个netcdf文件(v1.9版本新增)
u.1851-1900.Nc(1-600个月)
u.1901-2000.nc(601-1800个月)
需要的语法
dset%ch
chsubt1t2string
其ctl文件的格式:
dsetd:
\llp\u.%ch.nc
。
。
。
。
chsub16001851-1900
chsub60118001901-2000
optionstemplate
dtypenetcdf
。
。
。
。
。
tdef1800linearJan18511mo
若分别位于不同盘上:
Dset%ch
chsub1600d:
\1851-1900
chsub6011800c:
\1901-2000
四、netCDF格式数据和GRIB格式数据简介
五、GrADS控制文件简介
*.gs
特点:
用run命令执行,纯文本文件,里面含有用脚本语言(scriptlanguage)写成的批处理GrADS系统命令和设置,可以集成GrADS命令,具有强大功能。
下面是一个名为a.gs的文件内容:
例如1:
‘reinit’
‘opend:
\llp\data.ctl’
‘du’
例如2:
‘reinit’
‘enableprintsst811’
‘opensst.ctl’
‘setclopts11.20.15’
‘setxlopts11.20.15’
‘setylopts11.20.15’
‘setvpage05.54.258.5’
‘setgradsoff’
‘setclopts-1,-0.5,0.09’
‘setcsmoothon’
‘sett1+13’
‘setgxoutcontour’
‘setclevs-1.8051015202425262728293031’
‘du10’
‘drawtitleSSTDistributionJanurary1981C’