liGrads讲义910Word下载.docx
《liGrads讲义910Word下载.docx》由会员分享,可在线阅读,更多相关《liGrads讲义910Word下载.docx(32页珍藏版)》请在冰豆网上搜索。
sett1
setlon60150
setz1
a=ave(u,t=1,t=48)
da
mean函数用法同上,但不加权
2.aave函数
aave(expr,xdim1,xdim2,ydim1,ydim2)
求面积平均。
expr:
任何表达式
xdim1:
X维数方向的起始维数表达式
xdim2:
X维数方向的终止维数表达式
ydim1:
Y维数方向的起始维数表达式
ydim2:
Y维数方向的终止维数表达式
1)aave函数采用地球坐标进行运算,运算时考虑了不同纬度的权重。
Setx1;
sety1
a=aave(u,lon=110,lon=150,lat=0,lat=40)
2)amean()函数用法同上,不加权。
3.tmave()高级篇
const(expr,contant<
flag>
设置部分网格点的值取为常数,所有非缺值值的expr的格点的值取为常数,如果加上选项-a,所有网格值设为指定的常数值。
如果选项为-u,只把缺值值的格点设为常数值。
displayconst(p,0,-u)将降水变量p的缺值值的格点值设为常数0。
4.asum()和asumg对指定区域求和(二维求和)
asum(expr;
xdim1,xdim2,ydim1,ydim2)和asumg(expr;
xdim1,xdim2,ydim1,ydim2)对指定的区域求和(二维求和),asumg为不计任何权重求和。
对于全球(0~360°
,-90~90°
)范围可用以下方式表述:
asum(expr,global)/asum(expr,g)
5.sum()和sumg()一维求和函数
6.max()/min()(高版本)
返回指定表达式的最大/最小值maxloc/minloc()
返回指定表达式的最大/最小值的维数值(格点)系列,使用这个命令后,括号内的维数自动固定。
设定t/z/固定,看每个纬带上沿x方向的最大值
dmax(u,x=1,x=37)
dmaxloc(u,x=1,x=37)
7.vint函数
vint(psexpr,expr,top)
质量加权垂直积分函数,计算
。
psexpr表示地面气压变量,expr表示被积变量,top表示积分上限(须为常数,单位hPa),本函数要求定义水平维数环境。
如:
vint(ps,u,100)表示对u变量从ps到100hPa进行质量加权垂直积分。
4)gint(expr,dim1,dim2)普通积分函数(慎用)
8.scorr()求空间相关系数
两个场的空间相关系数是一个值,scorr函数之前的x/y维的设置没多大作用,函数会自动固定x/y维,但如果设时间维变动,得到的是相关系数时间序列。
*时间序列
‘setx1’;
’sety1’
‘setz1’
‘sett148’
‘dtloop(scoor(u,v,x=1,x=37,y=1,y=17))
剖面z-t:
‘setz12’
‘a=tloop(scoor(u,v,x=1,x=37,y=1,y=17))
‘da’
9.tcorr()求时间相关函数
10.空间回归/时间回归
reinit'
'
opene:
\liugd\data'
setz1'
sett1'
‘setx1’
‘sety1’
corr=sregr(u,v,x=1,x=37,y=1,y=17)'
dcorr'
----求回归系数,一个数值
;
c'
uave=aave(u,x=1,x=37,y=1,y=17)'
vave=aave(v,x=1,x=37,y=1,y=17)'
dcorr*(u-uave)+vave'
----回归场值
------------
*'
setz12'
sett148'
setx1'
sety1'
corr=tloop(sregr(u,v,x=1,x=37,y=1,y=17))'
setx137'
sety117'
b=corr*(u-uave)+vave'
db'
a=aave(u,x=1,x=37,y=1,y=17)'
sett1'
*dtregr(a,u,t=1,t=48)'
-----回归系数
corr=tregr(a,u,t=1,t=48)'
aave1=ave(a,t=1,t=48)'
uave=ave(u,t=1,t=48)'
dcorr*(a-aave1)+uave'
-----回归值
四、网格处理/平滑/差分函数
1.const函数
const(expr,constant<
设置部分网格点的值取为常数constant。
所有非缺测格点处的expr值取为常数
3)flag说明:
-a:
所有网格点值均设定为指定的常数
-u:
把缺测格点处的expr值设定为常数。
该函数对格点和台站资料均适用。
displayconst(p,0,-u)将变量p在缺测格点处的值设为常数0。
又如:
在linefill图形类型的输出中,若须将其中的一条线设为水平直线:
setlon-90
setlat-9090
setgxoutlinefill
setlev500
displayconst(t,-20);
t-273.16
2.maskout函数
maskout(expr,mask)
标记函数。
当mask所在的网格点值取为负值时,对应格点上的expr的值设定为缺测值;
当mask所在的网格点值取为正值时,对应格点上的expr值不变。
该函数对格点和台站资料均适合。
file1中的tsfc表示全球地表温度(在海洋上为SST)资料,file2中的mask表示海陆标记(海洋上为0,陆地上为1)资料,若需显示SST的分布,则可:
maskout(tsfc,0.5-mask.2)
3.skip函数
skip(expr,skipx,skipy)
设定样本的取样密度。
displayskip(u,2)表示在x,y方向上对变量u隔一个网格点取一次值构成要显示的场,
displayskip(u,1,3)表示在y方向隔二个点取一次值,而x方向取所有的格点进行显示操作。
该函数主要用于对矢量场的稀疏化显示。
4.cdiff函数
cdiff(expr,dim)
中央差分函数
expr表示进行差分运算的量,dim表示进行差分运算的维数方向,为X,Y,Z中的任一个字符。
边界格点的运算值设为缺测。
例如,以下运算是计算水平涡度,其效果与hcurl函数完全一样:
definedv=cdiff(v,x)
definedx=cdiff(lon,x)*3.1416/180
definedu=cdiff(u*cos(lat*3.1416/180),y)
definedy=cdiff(lat,y)*3.1416/180
display
(dv/dx-du/dy)/(6.37e6*cos(lat*3.1416/180))
以下运算是计算温度平流:
definedtx=cdiff(t,x)
definedty=cdiff(t,y)
definedy=cdiff(lat,y)*3.1416/180
display-1*((u*dtx)/(cos(lat*3.1416/180)*dx)+v*dty/dy)/6.37e6
5.smth9函数
smth9(expr)
9点平滑函数。
expr表示须平滑的表达式。
该函数主要用于改善图形的输出质量,使其更加美观。
当格点资料为1维时,9点平滑退化为3点平滑。
6.tloop函数
tloop(expr)
通过循环时间维数逐个逐个局地固定时间维来求expr的值,即对expr固定其时间维数求值,并在求值过程这对时间维进行逐个循环。
典型用法是求面积平均的时间序列,由于aave函数要求时间维固定,这时必须通过tloop函数才能实现这一目的,见下例:
setx1
sety1
setz3
sett131
dtloop(aave(ts,lon=0,lon=360,lat=-90,lat=90))
为求ts变量的全球面积平均的时间序列,须用前四行语句来设定维数环境,即固定x,y,z,而让时间t变化,再用tloop函数,让aave在求面积平均时固定时间维,并逐时刻循环求值。
7.寻找特征值
五、物理量计算/站点
函数
1.gr2stn函数
gr2stn(grid_expr,stn_expr)
将格点值回插至台站值。
grid_expr为代表格点资料的表达式,内插将采用该格点资料进行,stn_expr为代表台站资料的表达式,内插结果将放至其中。
为检验客观分析资料的质量,可将客观分析后得到的格点资料回插到原来台站,看其与原始台站资料之间的差值大小,即:
dt.3-gr2stn(t.1,t.3)
其中file1为格点资料,file3为台站资料。
2.coll2gr()
coll2gr(cnum<
num>
将collect命令形成的资料阵列形成格点场。
其中:
cnum:
采集资料序号;
num:
结果格点场的垂直层次值,缺省为10,若设为“-u”,则为所有采集的站点数据层次的集合。
3.hcurl函数
hcurl(uexpr,vexpr)
计算垂直涡度。
uexpr表示U分量,vexpr表示V分量,风速单位用m/s。
边界上的涡度值设定为缺测。
dhcurl(u,v)
4.hdivg函数
hdivg(uexpr,vexpr)
计算水平散度。
5.tvrh2q函数
tvrh2q(tvexpr,rhexpr)
由虚温tvexpr和相对湿度rhexpr计算比湿。
tvexpr的单位为0K,rhexpr的单位为百分比(取值范围0~100),运算结果的单位为g/g。
该函数仅适合用格点资料。
6.tvrh2t函数
tvrh2t(tvexpr,rhexpr)
由虚温tvexpr和相对湿度rhexpr计算温度。
运算结果的单位为0K,其余说明参见tvrh2q函数。
7.oacres函数
oacres(grid_expr,stn_expr<
radii>
Cressman内插函数,将台站资料插至格点上。
grid_expr表示格点资料表达式,stn_expr表示台站资料表达式,选项radii表示影响半径,一般采用多个影响半径,它们之间用逗号分开,如:
10,7,4,2,1(省缺值)。
oacres(ts,ts.2),oacres(ts,ts.2,12,8,5,4,3,2,1)
8.stnave函数
stnave(expr,dexpr1,dexpr2<
-mcnt>
2)功能:
台站资料时间平均函数。
3)说明:
expr表示欲平均的台站资料表达式;
dexpr1表示起始时间;
dexpr2表示结束时间;
选项-mcnt为质量控制项,表示参与平均运算的台站资料样本数最小不得少于cnt,否则运算结果设定为缺测。
cnt的省缺值为1。
stnave(ts,t=1,t=20,-m10)表示对头20个时刻的ts进行平均,若样本数少于10,则平均的结果为缺测。
9.stnmin函数
stnmin(expr,dexpr1,dexpr2<
时段内台站资料最小值。
参看stnave函数的说明。
10.stnmax函数
1)格式:
stnmax(expr,dexpr1,dexpr2<
时段内台站资料最大值。
11.oabin
oabin(gexpr,sexpr<
-flag>
根据站点的位置将观测资料放入单元格网中,若一个格网中有几个测站则取其平均以获得分析值。
gexpr:
有效的格点表达式;
sexpr:
有效的站点表达式。
flag选项可为两种值:
-f将值设为放入单元网格的第一个观测值,-c输出每个格网中的站点数。
讲义(10)GrADS描述语言及编程
一、描述语言概述
描述语言是GrADS软件包中自带的高级语言,可以用于GrADS的高级操作,更方便地使用GrADS的功能。
通过描述语言可以编写具有复杂功能的命令集(即gs文件)。
二、gs文件中的两类型语句
1.描述语句:
不用引号,需要经过编译的。
2.指令性语句:
GrADS命令,需用引号括起来。
通过描述语句来控制指令,描述语言用到指令性语句中要用引号,即,
i=1‘sett‘i’’(或者‘sett’i)
三、描述语言程序特点
1.程序通过GrADS的run命令来编译执行;
runfile-nameoptions
2.可以有变量、流程控制也可以执行GrADS的命令。
3.描述语言可以
1)编写函数子程序,
2)制作屏幕菜单,
3)可以显示动画图形,
4)可以使用从GrADS的query命令中得到的信息作注释等。
描述语言的所有变量都是字符串型的,描述变量可以进行计算。
流程控制是通过if/else/endif和while/endwhile语句块实现。
循环过程可以用continue或break命令改变。
变量中包含的或者由表达式结果产生的字符串可以作为GrADS命令项使用。
而由GrADS命令执行后产生的文字结果可以读入变量并在描述语言程序中使用。
描述语言也支持函数子程序功能。
四、描述语言的组成
1.一个描述语言程序是由许多语句组成,每个语句之间由换行号或分号分隔。
2.下面是GrADS描述语言中语句的类型:
赋值语句
If/Else/Endif
while/endwhile
break/continue
functionheader/return
say/pull
3.描述表达式
描述表达式是由运算对象和运算符组成。
运算对象:
描述变量、子程序函数或常数;
运算符:
数学、逻辑或连结运算符。
下面分别介绍变量、运算符、表达式
4、描述语言变量
1)构成
变量名是由1至8个字符组成,以字母开头,仅可以包含字母和数字,变量名区分大小写。
2)变量内容性质
内容总是一个字符串,在有些运算中,字符串将被解释为数字。
如果一个变量没有被赋值,那么它的值就是它的名字。
如果一个变量或字符串常数是一个具有正确格式的数字,可以进行某些数学运算,所得结果也是一个数字字符串。
在GrAD描述语言中,有两个变量名由其内部使用:
result'
和'
rc'
尽量避免使用这两个变量名。
3)复合描述变量
描述语言现在支持复合变量,利用它可以在描述语言程序中构造数组。
复合变量名可以是一个由“·
”分隔的多个变量名的复合体。
varname.i.j
这时,当变量内容被调用时,如果i和j也是变量,那么i和j的内容将会被i和j的字符串值所替代。
i=10
j=3
varname.i.j=343
在这个例子中,赋值语句相当于:
varname.10.3=343
注意:
i和j的字符串值可以是任何字符,但varname必须遵循描述变量名的规则,即:
由字母和数字组成,须字母打头。
因此复合变量名被替代后可以是任何字符串:
i='
a#$xx'
varname.i=343
以上表示是允许的,但不能直接将变量名写为:
varname.a#$xx=343
在i、j变量被替代前后,复合变量名的整个长度不能超过16个字符。
在GrADS描述语言中不能设置过多的变量,因此,不能利用复合变量产生一个大的数组,例如:
i=1
while(i<
10000)
var.i=i
endwhile
上面的循环将产生10000个不同的变量名。
如果设置了以上这样较大数目的变量,将影响描述语言的执行。
5.运算
在GrADS描述语言中使用了下列运算符:
|逻辑变量:
或
&
逻辑变量:
和
=等于
!
=不等于
>
大于
>
=大于等于
<
小于
=小于等于
%连结符
+加
-减
*乘
/除
一元否
-一元负
1)如果是数值运算对象,下列运算符可以用于数值运算:
=,!
=,>
>
=,<
<
=,+,-,*,/
2)如果是非数值运算对象,下列运算符在运算时将出错:
+,-,*,/
3)算术运算是以浮点形式进行的,如果结果是整数,那么结果字符串也是整数。
在逻辑运算中,如果结果为真,给出一个字符1,如果为假,给出一个字符0。
6.表达式
描述语言的表达式包含运算对象、运算符和括号,在运算过程中各种运算符的先后顺序为:
-,!
/,*
+,-
%
=,!
=
|
如果运算符在同一优先级上,则从左向右计算。
运算对象可以是变量、字符串常数或子程序函数调用。
1)字符型常数用单或双引号括起来。
而数值型常数可以不用引号括起来,但GrADS仍然认为是字符串常数。
下面是一个字符串常数的例子:
Thisisastring'
2)有些情况下,连结运算符是隐含的,当两个运算对象并列靠在一起,中间没有任何运算符时(中间可以有空格),隐含着中间是一个连结符。
下列两个表达式是等价的。
var1%var2%'
String'
var1var2'
3)括号可以改变运算的先后顺序。
7.IF语句块
程序执行流程可以通过if/else/endif语句控制,形式为:
IF(表达式)
描述语言语句
…
else(可不用)
endif(必须使用)
下列语句是错误的:
if(i=10)j=20
你必须写三个语句:
if(i=10)
j=20
endif
你也可以在同一行上写这三个语句:
if(i=10);
j=20;
endif;
if语句块的执行依赖于表达式的结果,如果表达式的结果是一个0字符(结果为假),则‘else’部分就被执行,如果表达式的结果是不为0的其它字符,则执行‘if’部分。
8.WHILE语句块
while语句块的格式为:
while(表达式)
描述语言语句
endwhile
当表达式结果为真,即:
是一个不为0的字符,循环就继续执行。
另外两个描述语言命令可以改变循环的执行,break可以立即中断循环,continue可以立即跳到循环体的开头,并重新计算表达式的结果。
t=1
while(t<
10)
sett'
t
displayz'
if(rc!
=0);
break;
endif;
t=t+1
9.函数及函数子程序
用户可以自己编制函数子程序,也可以使用描述语言的内部函数。
在一般情况下,函数作为描述语言的表达式运算对象被调用。
描述语言函数子程序总是得到一个单一的字符串结果,但可以有一个或多个字符串自变量,它的调用格式为:
name(arg,arg,arg...)
1)函数名遵循变量名的规则,自变量可以是表达式。
2)如果函数子程序没有自变量,你仍然需要写上一对括号:
name()
3)在其它文件中的函数子程序不能调用。
(其它文件中的描述语言程序可以通过GrADS的run命令执行)
4)可以通过函数子程序的定义语句在描述语言程序中构造自己的函数:
functionname(variable,variable,...)
要回到调用处,使用return语句:
return表达式
这里表达式可以省略,如果省略表达式,就返还一个空字符串(空字符串是‘’)。
函数的结果是return语句中表达式的结果。
5)调用过程
当一个函数子程序被