liGrads讲义910Word下载.docx

上传人:b****6 文档编号:18819680 上传时间:2023-01-01 格式:DOCX 页数:32 大小:1.41MB
下载 相关 举报
liGrads讲义910Word下载.docx_第1页
第1页 / 共32页
liGrads讲义910Word下载.docx_第2页
第2页 / 共32页
liGrads讲义910Word下载.docx_第3页
第3页 / 共32页
liGrads讲义910Word下载.docx_第4页
第4页 / 共32页
liGrads讲义910Word下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

liGrads讲义910Word下载.docx

《liGrads讲义910Word下载.docx》由会员分享,可在线阅读,更多相关《liGrads讲义910Word下载.docx(32页珍藏版)》请在冰豆网上搜索。

liGrads讲义910Word下载.docx

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)调用过程

当一个函数子程序被

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1