南京信息工程大学 实验(实习)报告
实验(实习)名称 蒙古高压特征分析 日期 2016.9 得分 指导教师 孙晓娟 系大气科学 专业大气科学班次长望实验班 姓名夏新露 一、 实验目的
(1)掌握气象要素气候异常特征的基本方法。
(2)进一步巩固Fortran顺序结构和循环结构的程序设计方法,重点掌握文件、变量、函数、数组的使用方法、数据的有格式输入输出方法。 (3)了解并掌握GrADS的使用流程。
(4)学习并掌握数据描述文件(*.ctl文件)的书写方法。 (5)学习书写简单的“*.gs”文件。
(6)掌握GrADS中open,reinit,d,c,quit,q,run等基本命令的使用方法。 (7)掌握GrADS维数环境设置方法。
(8)掌握GrADS绘制“line”、“bar”图形类型的方法,绘制1951-2010年蒙古高压强度异常的时间序列图。
(9)掌握保持GrADS绘制图形的一种方法。
二、 实验内容
2.1 问题描述
已知1951-2010年1月蒙古高压强度、面积、经度、维度指数序列,计算蒙古高压各指数的气候值、变率和距平,绘制蒙古高压强度、面积、位置指数距平的时间序列图,分析冬季蒙古高压的异常规律。 2.2 问题分析
已知:1951-2010年1月蒙古高压强度、面积、经度、维度指数序列资料p.dat、s.dat、lon.dat、lat.dat。
计算:蒙古高压各指数的气候值、变率和距平值。
绘制:1948-2010年1月蒙古高压强度、面积、位置指数距平的时间序列图。 通过分析,根据公式求得蒙古高压1月环流指数气候及异常值。根据GrADS中line和bar两种图形格式绘制方法,绘制蒙古高压环流指数距平的时间序列图。
1
三、 实验步骤
3.1蒙古高压环流指数的气候和异常值计算
1.分析问题,理清算法和程序,设计程序流程图并编写程序。 2.启动软件开发环境Microsoft Developer Studio。 3.在D盘上创建新工作区shixi04。 4.在工作区shixi3内创建新项目shixi04。
5.在项目shixi04内创建源程序文件“mh.f90”,编辑输入源程序文本。 6.在源程序文本中打开数据文件“p.dat”、“s.dat”、“lon.dat”、“lat.dat”,并将其值读入到相应的数组中。
7.编写计算均值、变率和距平的子程序。
8.调用子程序分别计算强度、面积、经度、纬度环流指数的均值、变率和距平。 9.将蒙古高压环流指数的均值和变率写入到“mh1.dat”和“mh1.grd”两个文件中。将蒙古高压环流指数的距平值写入到“mh2.dat”和“mh2.grd”两个文件中。 10.编译、构建、运行、调试Fortran程序。
3.2蒙古高压环流指数距平时间序列图绘制
1.为蒙古高压环流指数距平数据文件“mh2.grd”书写数据描述文件“mh2.ctl”,在此文件中定义四个变量p、s、lo、la。
2.编写“mh2.gs”可执行文件,利用GrADS基本操作命令和line、bar两种绘图类型的绘图要素设置,以不同颜色和线形显示蒙古高压强度和面积时间序列图(曲线),分别以不同颜色显示蒙古高压经度和纬度时间序列图(柱状)。 3.将蒙古高压强度和面积时间序列图(曲线)保存到“mhline.gmf”,将蒙古高压经度和纬度时间序列图(柱状)分别保存到“mhlonbar.gmf”和“mhlatbar.gmf”中。
4.启动GrADS,调试、执行“mh2.gs”。 5.分析蒙古高压气候及其异常特征。
2
3.3实习关键技术及方法
1n?? 某数据资料时间序列距平x’为数据资料xt与其平均值x?x??xi?之差
ni?1??x'?xt?x,t?1,2,3,n
某数据资料的变率?为其均方差,反映变量围绕平均值的平均变化程度,其计算公式为:
1n??xi?x?ni??2
3.4实验程序编写
以下FORTRAN程序用于蒙古高压环流指数气候及异常值计算。 program mh implicit none
integer,parameter::ny=60
!p(ny)、pa(ny)、pav和pd分别为强度指数原序列、距平序列、均值和标准差,其他参数量类似定义 real
p(ny),s(ny),lon(ny),lat(ny),pa(ny),sa(ny),lona(ny),lata(ny),pav,sav,lonav,latav,pd,sd,lond,latd integer i,j,k
!利用open语句打开强度、面积、经度、纬度指数数据 open(1,file='D:\\GrAdsshixi\\GrAds\\chap4\\p.dat') open(2,file='D:\\GrAdsshixi\\GrAds\\chap4\\s.dat') open(3,file='D:\\GrAdsshixi\\GrAds\\chap4\\lon.dat') open(4,file='D:\\GrAdsshixi\\GrAds\\chap4\\lat.dat') !将打开数据保存到对应数组中 do i=1,ny read(1,*) p(i) read(2,*) s(i) read(3,*) lon(i)
3
read(4,*) lat(i) enddo close(1) close(2) close(3) close(4)
!调用气候及异常值计算函数 call cha(ny,p,pa,pav,pd) call cha(ny,s,sa,sav,sd) call cha(ny,lon,lona,lonav,lond) call cha(ny,lat,lata,latav,latd) !用open语句打开文件
open(5,file='D:\\GrAdsshixi\\GrAds\\chap4\\mh1.dat') write(5,100) pav,pd write(5,100) sav,sd write(5,100) lonav,lond write(5,100) latav,latd close(5)
!将蒙古高压环流指数气候值写入到\中
open(6,file='D:\\GrAdsshixi\\GrAds\\chap4\\mh1.grd',form='binary') write(6) pav,pd write(6) sav,sd write(6) lonav,lond write(6) latav,latd close(6)
!将蒙古高压环流指数距平值写入到\中,要求按pa(60)、sa(60)、lona(60)、lata(60)顺序存放
open(7,file='D:\\GrAdsshixi\\GrAds\\chap4\\mh2.dat') write(7,200) (pa(i),i=1,ny) write(7,200) (sa(i),i=1,ny)
4
write(7,200) (lona(i),i=1,ny) write(7,200) (lata(i),i=1,ny) close(7)
!将蒙古高压环流指数距平值写入到\中,要求利用do循环按pa(i)、sa(i)、lona(i)、lata(i)顺序存放
open(8,file='D:\\GrAdsshixi\\GrAds\\chap4\\mh2.grd',form='binary') do i=1,ny write(8) pa(i) write(8) sa(i) write(8) lona(i) write(8) lata(i) enddo close(8)
!上面两种书写数据的数据结构不同,注意区分 100 format(2f10.2) 200 format(f10.2) end !求特征值
subroutine cha(ny,x,xa,xav,xd) integer::ny integer i
!x(ny)为原序列值,xa,xav和xd分别保存序列距平、均值和标准差值 real ::x(ny),xa(ny),xav,xd,sum=0 xd=0 do i=1,ny
sum=sum+x(i) enddo xav=sum/ny do i=1,ny xa(i)=x(i)-xav
5