第四章Grads数据资料转换和数据描述文件2013解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
G r ADS
(Grid Analysis and Display System)
讲义(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程序如下:
Program main
C 定义一个X,Y,Z方向的格点以及总时次nt
parameter(nx=144,ny=73,nz=17,nt=48)
c 定义数组
dimension var(nx,ny,nz,nt)
c 打开原数据文件
open(1,file='d:\llp\test.dat')
!!ccccccccccccccccccccccccccccccccccccccccc
!!ccccccc 一定格式把数据文件读入
do 100 it=1,nt
do 50 iz=1,nz
read(1,*) ((u(i,j,iz,it),i=1,nx),j=1,ny) 50 continue
100 continue CCCCCCCCCCCCCCCCCCC
ccccccccccccccccccccccccccccccccccccccccccc c 打开目标文件,recl为记录的长度。
open(12,file='d:\llp\test.grd',
&form='unformatted',access='direct', recl=nx*ny*4)
c 写数据资料
irec=0
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) 100n tinue
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和SST.dat,其空间范围60-150o E,0-40o N;层次: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) ccccccccccccccccccccccccccccccccccccccccccc
ccc 按一定格式把数据文件读入 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)
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)dset d:\llp\data.grd --数据文件名undef -9.99E+33 ----缺侧值title NCEP/NCAR REANALYSIS PROJECT ---数据标题xdef 37 linear 60.000 2.500 ----x方向维数ydef 17 linear 0.000 2.500 ----y方向维数zdef 2 levels 850 200 ----z方向维数tdef 48 linear JAN1982 1mo ---时间维数vars 3 ----变量总数
u 2 99 u wind (m/s) --U风场2层
v 2 99 v wind (m/s) --v风场2层sst 1 99 TSFC DATA --海表温度Endvars --变量描述结束
1、描述文件构成介绍
每个描述文件一般包含以下几项:
(1)被描述的数据文件名(dset)
(2)该数据说明文件的标题(title)
(3)数据类型、格式和选项(dtype,format,option)
(4)时间、空间维数环境设置
(xdef,ydef,zdef,tdef)
(5)变量定义(vars,endvars)
注意:数据描述文件的每行记录的各项以空格分开,注释行在第一列打“*”,注释行不能出现在变量列表中,每行记录不超过80个字符,
2、数据描述文件中各记录的含义
1)DSET data-set-name
二进制原始数据文件的文件名(可包含路径) 2)TITLE string
用字符串string简略描述数据文件的内容。
3)UNDEF value
定义缺测值,GrADS在运算操作和图形操作时将忽略这些格点。
4)XDEF number <LINEAR start increment> 或XDEF number <LEVELS value-list>
Number:是X方向网格点数,>=1的整型数;
LINEAR时:网格点格距均匀;
Start:起始经度(单位:度),浮点数表示,负数表示西经,自西向东。
Increment:网点间距,单位为度,正浮点数。
LEVELS时:
网格距可不均匀,
value-list顺序列出各格点的经度值,可续行表示,至少有两个以上格点时方可用LEVELS。
5)YDEF number mapping start <increment> 或 YDEF number <LEVELS value-list>
Number:Y方向的格点数,用整数表示
mapping表示映射方式,有以下几种:
LINEAR -- 线性映射
GAUSR15 -- 高斯(Gaussian) R15 纬度
GAUSR20 -- 高斯R20 纬度
GAUSR30 -- 高斯R30 纬度
GAUSR40 -- 高斯R40 纬度
LINEAR时:
Start:起始纬度(单位:度),浮点数表示,负数表示南纬;
Increment:Y方向网格距,正浮点数表示,由南向北。
LEVELS时:
value-list:顺序枚举一系列网格点对应的纬度值,可续行表示,至少有两个以上格点时方可用LEVELS。
高斯GAUSRxx映射:
start为第一个高斯网格数,1表示最南端格点纬度
例如:YDEF 20 GAUSR40 15
表示共有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
注:常见形式
XDEF number LINEAR start increment
YDEF number LINEAR start increment
6)ZDEF number mapping <start increment> 或 ZDEF number <value-list>
设置气压面与垂直网格点的映射关系
Number:Z方向网格点数,为整型数
mapping 为映射类型,有如下几种:
LINEAR -- 线性映射
Start:Z=1时的值或起始值
Increment:Z方向的增量,从低到高,该增量可取负值。
例如:
ZDEF 10 LINEAR 1000 -100
LEVELS – (常用)
value-list:顺序枚举给出全部对应的等压面。
7)TDEF number LINEAR start-time increment 设置网格值与时间的映射关系。
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)VARS number
abrev levs units description (变量描述格式) ENDVARS
变量描述部分
number:变量个数,
abrev:变量名,1-8个字符,以字母(a~z)开头,由字母和数字组成;
levs:整型数,变量含有的垂直层次数,
0表示该变量只有一层,如地表变量;
units:为以后使用预留,暂时设为常数99;
description:一段说明该变量的字符串,最多
40个字符.
ENDV ARS:表示数据描述文件结束。
9)dtype <keywords>
说明数据格式的类型,当binary时省略;
<keywords>包括:
-grid(省略)
-grb
-station
-bufr
-hdfsds
-netcdf
v1.9新增
9)OPTIONS <keywords>
可替代"format"的功能且具有更广泛的用途。
<keywords>包括:
<yrev>
<zrev>
<sequential>
<byteswapped>
<big_endian>
<little_endian>
<template>
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文件的格式:
dset d:\llp\%d1%mc%y4.grd。
options template。
tdef 365 linear 1Jan2007 1dy
格式替换:
%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
chsub t1 t2 string
其ctl文件的格式:
dset d:\llp\u.%ch.nc。
chsub 1 600 1851-1900
chsub 601 1800 1901-2000
options template
dtype netcdf。
tdef 1800 linear Jan1851 1mo
若分别位于不同盘上:
Dset %ch
chsub 1 600 d:\1851-1900
chsub 601 1800 c:\1901-2000
四、netCDF格式数据和GRIB格式数据简介
五、 GrADS控制文件简介
*.gs
特点:用run命令执行,纯文本文件,里面含有用脚本语言(script language)写成的批处理GrADS系统命令和设置,可以集成GrADS命令,具有强大功能。
下面是一个名为a.gs的文件内容:
例如1:
‘reinit’
‘open d:\llp\data.ctl’
‘d u’
例如2:
‘reinit’
‘enable print sst811’
‘open sst.ctl’
‘set clopts 1 1.2 0.15’
‘set xlopts 1 1.2 0.15’
‘set ylopts 1 1.2 0.15’
‘set vpage 0 5.5 4.25 8.5’
‘set grads off’
‘set clopts -1, -0.5, 0.09’
‘set csmooth on’
‘set t 1+13’
‘set gxout contour’
‘set clevs -1.8 0 5 10 15 20 24 25 26 27 28 29 30 31’
‘d u10’
‘draw title SST Distribution Janurary 1981 C’。