第十章GradsGrADS 描述语言及编程.docx

上传人:b****5 文档编号:14681836 上传时间:2023-06-26 格式:DOCX 页数:20 大小:1.03MB
下载 相关 举报
第十章GradsGrADS 描述语言及编程.docx_第1页
第1页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第2页
第2页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第3页
第3页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第4页
第4页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第5页
第5页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第6页
第6页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第7页
第7页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第8页
第8页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第9页
第9页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第10页
第10页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第11页
第11页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第12页
第12页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第13页
第13页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第14页
第14页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第15页
第15页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第16页
第16页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第17页
第17页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第18页
第18页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第19页
第19页 / 共20页
第十章GradsGrADS 描述语言及编程.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第十章GradsGrADS 描述语言及编程.docx

《第十章GradsGrADS 描述语言及编程.docx》由会员分享,可在线阅读,更多相关《第十章GradsGrADS 描述语言及编程.docx(20页珍藏版)》请在冰点文库上搜索。

第十章GradsGrADS 描述语言及编程.docx

第十章GradsGrADS描述语言及编程

GRADS(GridAnalysisandDisplaySystem)

讲义(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命令中得到的信息作注释等。

3、描述语言的所有变量都是字符串型的,描述变量可以进行计算。

流程控制是通过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

i=i+1

endwhile

上面的循环将产生10000个不同的变量名。

如果设置了以上这样较大数目的变量,将影响描述语言的执行。

5、运算

在GrADS描述语言中使用了下列运算符:

|逻辑变量:

&逻辑变量:

=等于

!

=不等于

>大于

>=大于等于

<小于

<=小于等于

%连结符

+加

-减

*乘

/除

!

一元否

-一元负

注意:

1)如果是数值运算对象,下列运算符可以用于数值运算:

=,!

=,>,>=,<,<=,+,-,*,/

2)如果是非数值运算对象,下列运算符在运算时将出错:

+,-,*,/

3)算术运算是以浮点形式进行的,如果结果是整数,那么结果字符串也是整数。

在逻辑运算中,如果结果为真,给出一个字符1,如果为假,给出一个字符0。

6、表达式

描述语言的表达式包含运算对象、运算符和括号,在运算过程中各种运算符的先后顺序为:

-,!

/,*

+,-

%

=,!

=,>,>=,<,<=

&

|

如果运算符在同一优先级上,则从左向右计算。

运算对象可以是变量、字符串常数或子程序函数调用。

注意:

1)字符型常数用单或双引号括起来。

而数值型常数可以不用引号括起来,但GrADS仍然认为是字符串常数。

下面是一个字符串常数的例子:

'Thisisastring'

2)有些情况下,连结运算符是隐含的,当两个运算对象并列靠在一起,中间没有任何运算符时(中间可以有空格),隐含着中间是一个连结符。

例如:

下列两个表达式是等价的。

var1%var2%'String'

var1var2'String'

2)括号可以改变运算的先后顺序。

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

endwhile

9、函数及函数子程序

用户可以自己编制函数子程序,也可以使用描述语言的内部函数。

在一般情况下,函数作为描述语言的表达式运算对象被调用。

描述语言函数子程序总是得到一个单一的字符串结果,但可以有一个或多个字符串自变量,它的调用格式为:

name(arg,arg,arg...)

注意:

1)函数名遵循变量名的规则,自变量可以是表达式。

2)如果函数子程序没有自变量,你仍然需要写上一对括号:

name()

3)在其它文件中的函数子程序不能调用。

(其它文件中的描述语言程序可以通过GrADS的run命令执行)

4)可以通过函数子程序的定义语句在描述语言程序中构造自己的函数:

functionname(variable,variable,...)

要回到调用处,使用return语句:

return表达式

这里表达式可以省略,如果省略表达式,就返还一个空字符串(空字符串是‘’)。

函数的结果是return语句中表达式的结果。

5)调用过程

当一个函数子程序被调用时,首先计算自变量,然后执行函数子程序,作为函数自变量的变量的值初始取为传输给自变量的值。

如果传输给自变量的值的个数太少,则其余的变量初始没有值,如太多,则多余的被舍弃。

你可以从函数子程序定义语句中改变自变量而不改变调用方式。

变量的调用仅仅在函数子程序内部有效,但全域变量可以在整个程序中有效。

当一个描述语言程序文件被调用时(通过run命令),从这个文件的开头开始执行。

一个函数子程序定义语句也可以放在文件的开头,如果这样,必须定义一个变量名,这个变量将被任何’run’命令选项初始赋值,如果没有’run’命令选项,这个变量将初始赋为空字符串。

10、赋值语句

赋值语句的格式为:

变量名=表达式

表达式进行运算后,将结果赋予所指定的变量。

11、人机对话语句

'say'语句的语法为:

say表达式

这样,表达式的结果就写在屏幕上:

‘pull’语句的语法为:

pull变量名

程序运行到pull语句时,执行暂停等待用户键盘输入,按回车后,输入的内容就赋值给所指定的变量。

14、在描述语言程序中执行GrADS命令

指令语句仅仅包含一个表达式:

表达式:

在描述语言程序中执行GrADS命令是首先运算表达式,然后将结果字符串作为命令提交给GrADS。

注意:

1)当语句被执行后,GrADS命令的结果将输入到描述变量’result’(这时,’result’的字符串是GrADS命令执行后显示在屏幕上的内容)。

2)描述变量’rc’中则是GrADS命令的返还码。

’result’变量中,可能包含几行GrADS结果字符串,这可以利用’sublin’函数分离。

可以在描述语言环境中执行任何GrADS命令,包括run命令。

由执行run命令而产生的结果字符串将通过’return’命令从“低层”的描述语言程序传递回“高一层”的程序中。

你可以一层一层地调用多个描述语言程序,但要能控制不出现死循环而返还主调程序。

五、内部函数

目前描述语言中有几个内部函数:

1、substr(string,start,length)

这个函数可以从字符串’string’中从位置’start’开始截取长度为’length’的子字符串。

如果字符串’string’太短,结果字符串就短于’length’或得到一个空字符串。

这里,'start'和'length'必须是整的字符数目。

2、subwrd(string,word)

这个函数可以从字符串’string’中截取第’word’个词(词与词之间由空格分隔),如果字符串’string’太短,结果是一个空字符串。

'word'必须是整数。

3、sublin(string,line)

这个函数可以从字符串’string’中截取第’line’行的字符串,如果字符串’string’行数太少,结果是一个空字符串。

'line'必须是整数。

4、read(name)

读函数,可以读取文件’name’中的一个记录(一行),重复调用同一文件的’read’函数,将依次读取文件中的下一个记录。

所得结果有两行,第一行是返还码,第二行是所读记录。

每个记录的长度不能超过80个字符,可以使用'sublin'函数分离结果。

当第一次调用’read’函数读取一个指定文件时,这个文件就被打开,当描述语言程序执行终结时文件被关闭。

而在文件被多次调用过程中,始终保持打开状态。

返还码是:

0-正常

1-打开文件错误

2-文件结束

8-打开的文件用于写入

9-输入、输出错误

5、write(name,record<,append>)

写函数,当第一次调用’write’函数时,会生成一个文件名为’name’的文件,并处于打开的写入状态。

如果这个文件早已存在,这个文件会损坏。

如果使用’append’选项,写入的内容就会接到原来文件的后面。

返还码是:

0-正常

1-打开文件错误

8-打开的文件用于读取。

6、close(name)

关闭文件名为’name’的文件。

如果你想从一个刚写的文件中读取记录,那么首先要调用’close’函数关闭该文件。

返还码是:

0-正常

1-文件没有打开

 

六、全域描述变量

描述变量通常仅在所在的函数子程序中有效,全域描述变量可以在整个程序中都有效。

它们是通过文件名的格式来定义是否全域描述变量。

任何变量名前加上一个下划线(_)就假设为全域描述变量,就使它的值在整个程序中都有效(类似于FORTRAN程序中由公用语句块定义的变量)。

注意:

全域变量不能用于函数子程序的函数自变量。

如:

下面的用法是不允许的。

functiondostuff(_var)

七、描述语言程序的自动执行

你可以让每个display命令前自动执行一个简单的描述语言程序:

setimprunscript-name

这个命令通常用于每次执行display命令后都要重新设置的命令,如:

'setgradsoff'

你可以从这个程序中执行任何GrADS命令,但有时会遇到一些问题,例如:

在这个程序中出现一个display命令,这时将会无限制地显示图形。

程序举例

1)‘opendata.ctl’

‘setlev300’

‘enableprintstream.gmf’

i=1

while(i<=120)

‘sett‘I’’

‘du;v’

‘drawtitle300hPastreamfieldNo.’I’’

‘c’

i=i+1

endwhile

2)'reinit'

'openk:

\baoxue\uwndbdp.ctl'

file='k:

\baoxue\g.txt'

'setgxoutprint'

'setprnopts%g93u'

'duwnd'

rc=write(file,result)

rc=close(file)

;

3)

6)自定义函数子程序

自定义函数子程序是GrADS编程中的重点也是难点。

函数子程序的定义形式为

Functionname(args)

Return(expr)

其调用形式有两种[2],

1、一种是明举式参数传递,

如isen.gs,这种函数子程序要和主程序放在一个文件中,主程序调用形式为

1)‘d’isen(w,t,pp,320)

2)rc=isen(u,t,pp,320)

3)‘definexs’=isen(w,t,pp,320)

其中,isen.gs定义内容略。

2、另一种是隐式参数传递,

如cbarn.gs,主程序的调用方式也有两种,若独立保存为一个cbarn.gs,其调用方式为

‘runcbarn.gs(0.815.50.5)’

若拷贝到主程序所在文件,其调用方式为

rc=colorbar(‘0.815.50.5’)

注意:

'cbarn0.81.55.50.5'中,

0.8指定了标尺宽度,0.5指定了距离横轴的距离

下面以绘黑白阴影图型为例,简单介绍如何定义和调用函数子程序,通过该例也可学习如何定义和使用新的颜色(图2)。

‘reinit’

‘opend:

\llp\data.ctl’

‘setgxoutshaded’

pp()*调用自定义的函数子程序

ss()*调用自定义的函数子程序

‘dsmth9(olr)’

‘cbarn’*调用已存在的gs文件形式的函数子程序,用于绘阴影图标

‘setgxoutcontour’

‘setclevs-0.06-0.0300.030.06’

‘dsmth9(olr)’

‘dsst’

Functionpp()

*设置新的颜色,颜色号为16-18

‘setrgb16505050’

‘setrgb17100100100’

‘setrgb18150150150’

return

Functionss()

*设置阴影图的等值线和所填的颜色

‘setclevs-0.06-0.0300.030.06’

‘setccols1716001617’

return

图2使用新定义的黑白颜色绘图

例2

'reinit'

'openk:

\rt\sy.ctl'

'enableprintk:

\rt\sy.gmf'

****SouthChina

**Decprep

'setxlopts140.15'

'setylopts140.15'

'setclopts140.10'

'setxlaboff'

'setaxlim-2050'

'setyaxis-205010'

'setxaxis195120074'

'setgridoff'

'sett157'

'a1=34.63'

'b1=-34.63'

'setcthick10'

'setcstyle1'

'setccolor1'

'setcmark1'

'setgradsoff'

'drs12'

'setcmark2'

'setcstyle2'

'setcthick10'

'setccolor2'

'drs1'

'cbar_line-c12-m12-l12-t"line1""line2"-p'(作图前在屏幕上点击)

 

'print'

'disableprint'

pulldummy

return

小结

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

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2