GrADS站点文件作图详细解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fortran+GrADS站点作图详解
mofangbao@气象家园
帖子导读:
以前论坛也有过相关的帖子,但是到目前为止,仍然不断的有朋友看了那些帖子之后还是不知道如何下手,于是我打算为纯粹的新手写一份说明,这份文档会非常详细,因此适合刚接触GrADS的朋友来参考。
帖子介绍了fortran文件中读写数据的基本知识,grads的站点文件的存放格式,如何通过fortran来写出这个格式的文件,如何建立站点文件的CTL文件,如何为站点数据生成映射文件,站点映射文件的作用,如何通过站点CTL文件来预览站点数据,如何用fortran生成grads支持的格点文件,如何给格点配置CTL文件,如何编写GS文件来进行插值,如何绘制等值线以及阴影图,如何屏蔽区域外的图形等内容。如果你对以上问题存在疑惑,希望这个帖子能够对你有所帮助,因此,看完这份文档之后,您应该可以做到这些:
(会的就跳过吧,我也是犹豫了很久要不要写的,算是新手礼包的一部分吧)
开始之前,先了解站点数据的基本内容
一般情况下,我们看到的站点数据是这样的:
50353 126.39 51.43 100 89
50632 121.55 48.46 100 54
50527 119.45 49.13 100 29
50434 121.41 50.29 100 46
50557 125.14 49.10 100 83
50745 123.55 47.23 100 80
50756 126.58 47.26 100 74
50788 131.59 47.14 100 36
50873 130.17 46.49 100 31
50978 130.57 45.17 100 59
第一列为站号,第二、三列为经纬度,第四、五列为其他数据。当然,也可能是把经纬度单独存放,然后数据单独存放,比如气候中心免费开放的160站的月平均温度降水值。如果是micaps资料可以查看micaps用户手册。这个例子中使用的就是micaps的第三类数据格式,示例文件可以从这里下载:
(资料下载)
除了了解这些,还必须了解该数据的缺测值用什么来表示,这个在后面的数据描述文件中要用到。
1、在fortran中读入这些资料
在使用fortran之前,请确保你已经安装了fortran编译器,如果你是xp系统,建议安装CFV6,如果是win7系统,那么可以安装microsoft fortran powerstation4.0(以下简称4.0),这两个软件在气象资料站均有下载,安装完成后,请在你磁盘的某个文件夹下面新建一个文件夹用于本次作图,如果使用的是CVF6,该文件夹的路径中不要包含中文名。新建文件夹完成后,从开始菜单打开fortran编程窗口,然后点击file->new,新建一个free format的自由格式fortran文件,4.0的直接建立一个TextFile即可:
CVF中新建fortran文件
4.0中新建TextFile即可
注意:CVF中先选路径和文件名,然后会建立该文件,4.0中直接建立一个临时文件,当你按保存按钮时才会提示你选择保存的路径,如果你之前用4.0的fortran 编译过其他文件,那么请先关闭工作区再新建,从file->close workspace可以关闭。
当然也可以直接建立一个文本文件,然后重命名为sta2grd.f90,记住,要修改后缀为.f90,表示该文件为自由格式的fortran源文件。现在就可以开始着手读取数据了。
(1)先把fortran的开头和结尾写了,并且用implicit none声明不能使用未定义的变量,同时添加一个注释,自由格式中可以用一个英文的!来表示该行该符号往后均为注释内容,不参与编译:
Program sta2grd
Implicit none
!这里是程序的变量声明
!变量声明结束
!程序开始
!程序结束
End
(2)定义几个变量
Fortran中常用的变量类型有整型:integer,单精度实型real,双精度实型double,字符型character,关于fortran变量的更多内容请参考彭国伦的fortran95程序设计。
通过观察我们要读取的文件:
diamond 3 2011年05月降水量值
0 0 0 0 0 0 1 0 0 1 1000
50353 126.39 51.43 100 89
50632 121.55 48.46 100 54
…
第一行和第二行对我们转换没有什么作用,因此我们只需要定义必须要用到的变量,站号stid,类型为字符型,长度为8,其余的经度lon、纬度lat,一个无意义的变量(列中的100)var和降水数据rain,均为实型,原因在下面的GrADS中的存放方式有说明。
Character*8 stid
Real lon,lat,var, rain
(3)打开数据文件并读入数据
Fortran中使用open语句来实现打开文件,同时指定一个打开的文件号和文件路径,以及其他一些指定参数,下面的语句即可打开这次示例的文件:
Open(1,file=’raindata.txt’,status=’old’)
这里的1是一个文件号,是读写时需要用到的,file后的是文件名,直接写文件名表示在和程序同一个文件夹,status表示当前文件的状态,old表示该文件已经存在,这样就能避免通过write语句误写入数据覆盖了数据文件。
(4)开始读入数据到变量中
在fortran中使用read语句来读入数据,每读取一行文件的指针就会自动向下移动一行(关于文件指针指向这一行你可以想象成该行被选中,要从该行读取数据了)比如read(1,*)var,就表示从打开的1号文件中按默认格式读取数据到var中。我们先跳过两行“没用”的数据:
Read(1,*)
Read(1,*)
这样后面不接任何变量就表示把这两行跳过去了,现在文件指针在第三行的开头了,也就是我们需要的数据了,来读一行:
Read(1,*)stid,lon,lat,var,rain
Fortran 会自动把这五个数值分别给后面的五个变量了,现在文件的指针已经在第四行的开头了,我们需要继续读取数据,当然不能够又写一行,应该继续使用上面这一行来读取,可以通过goto语句实现,goto语句的含义是让程序跳转到指定的标号执行,这里就应该是去刚才的那个语句执行,所以在刚才的Read(1,*)stid,lon,lat,var,rain 前面加上一个标号10,然后在下面写上一句goto 10,如下所示:
10 Read(1,*)stid,lon,lat,var,rain
Goto 10
这样,程序就会不断的往下读取了,但是,文件的行数是有限的,这样做一旦到文件结束,fortran就会报出运行时错误,通常是end-of-file…的错误,这时候可以通过END标签来避免这种情况的出现。End标签能够让read语句读取到文件末尾的时候自动跳转到指定的