气象程序设计及绘图期末复习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计 FORTRAN语言
分析
绘 图 GrADS
气象数据资料
FORTRAN程序设计 • 基本程序结构
program main implicit none integer real character complex logical
主程序开始 不采用I-N规则
变量(包括数组)申明 及初始化
FORTRAN程序设计 • 基本程序结构
ab=0
a2=0 b2=0 do i=1,n ab=ab+(a(i)-suma)*(b(i)-sumb) a2=a2+(a(i)-suma)**2 b2=b2+(b(i)-sumb)**2 enddo co=ab/sqrt(a2*b2) print*,co return end 子程序结束
子程序算法
顺序结构 选择结构 循环结构
获取数据
程序算法
单分支
IF(条件) THEN IF块 END IF
双分支
IF(条件)THEN IF块 ELSE ELSE块 END IF
多分支
IF(条件1)THEN 块1 ELSE IF(条件2)THEN 块2 ELSE IF(条件3)THEN 块3 . . ELSE IF(条件n)THEN 块n [ELSE 块n+1] END IF
!!!!!!!!!!!!!!!求相关系数r subroutine COR2 ( n, a, b, co ) 子程序开始 integer n real co 子程序变量申明 real a(n),b(n) !!!!!!!!!!!!!标准化a(i),b(i)
suma=sum(a(1:n))/n sumb=sum(b(1:n))/n
SELECT CASE (选择表达式) CASE(控制表达式1) 块1 CASE(控制表达式2) 块2 . IF(条件) 语句 . CASE(控制表达式n) 块n [CASE DEFAULT 默认块] END SELECT
逻辑if语句
可以相互嵌套
DO 循环变量 = E1,E2,E3
循环体
END DO R = MAX ( INT ( ( E2 - E1 + E3 ) / DO WHILE (逻辑表达式) E3 ),0 )
program main implicit none integer:: real:: character:: complex:: logical::
主程序开始 不采用I-N规则
变量(包括数组)申明 及初始化
注意:character类型的使用方法
赋值语句 data 变量列表/初值列表/ read *,……… open(文件号,file=‘路径及文件名’) read(文件号,格式)。。。。
v850.dat数据内容:
时间说明
准备数据文件:利用fortran将十进制文件转换为二进制文件
PROGRAM PROCESSING IMPLICIT none integer,parameter:: m0=37,n0=17,tim=48 real v(m0,n0,tim),u(m0,n0,tim) integer i,j,k open(1,file='d:\cvf\v850.dat') 十进制数据 open(2,file='d:\cvf\u850.dat') do k=1,tim read(1,1000) 读时间说明 read(1,2000) ((v(i,j,k),i=1,m0),j=1,n0) 循环顺序:经度、纬度、层次、时间 read(2,1000) read(2,2000) ((u(i,j,k),i=1,m0),j=1,n0) end do 1000 format(2i7) 2000 format(37F6.2)
主程序结束
程序入口 一个主程序 (program) 程序 需要被调用 若干子程序 子程序包括:函数子程序(function) 子例行程序(subroutine) 子程序又分为:外部子程序和内部子程序
外部函数子程序
由一个实现某种特定功能的子程序组成,调用程 序单元调用它得到一个函数值 表示函数子程序定义开始 定义形式: [类型说明] FUNCTION 函数名([虚参1,虚参2,…])
CTL 文件
编写gs文件
'reinit' 'open d:/cvf/wind850.ctl' 'enable print d:/cvf/wind850-1.gmf' 'set grads off' 'set grid off' 'set t 13' 'set parea 1 10 1.5 7.5' 'set xlopts 1 4 0.16' 'set ylopts 1 4 0.16' 'set xlint 10' 'set ylint 10' 'define uave1=ave(u,t=1,t=48,12)' 'define vave1=ave(v,t=1,t=48,12)' 'set gxout vector' 'set arrscl 0.5 10.0' 'd uave1;vave1' 'print' 'disable print‘ ;
说明语句 执行语句 。。。
END [FUNCTION [函数名]] 表示函数子程序定义结束
外部子例行程序
子例行程序不仅可求一个值,还可求多个值或 不求值而执行某种操作,因此具有更广泛的用途 表示子例行程序定义开始 定义形式: SUBROUTINE 子例行程序名([虚参1,虚参2,…])
说明语句 执行语句
编写gs文件
'reinit' ‘open d:/cvf/wind850.ctl ’ 打开二进制数据文件的文件 ‘enable print d:/cvf/wind850-1.gmf‘ 打开存图文件 ‘set grads off‘ 去掉画图角标 ‘set grid off‘ 去掉网格线 ‘set t 13‘ 设置固定于某个时次,以便绘制二维图形 ‘set parea 1 10 1.5 7.5‘ 设置绘图区域 ‘set xlopts 1 4 0.16‘ 设置x轴标记 ‘set ylopts 1 4 0.16‘ 设置y轴标记 ‘set xlint 10‘ 设置x轴标记间隔单位 'set ylint 10‘ 设置x轴标记间隔单位 ‘define uave1=ave(u,t=1,t=48,12)‘ 定义新变量,计算1月份平均u风场 ‘define vave1=ave(v,t=1,t=48,12)‘ 定义新变量,计算1月份平均v风场 ‘set gxout vector‘ 设置出图类型 ‘set arrscl 0.5 10.0‘ 设置风场矢量单位 ‘d uave1;vave1‘ 绘制风场 ‘print‘ 将图形窗口的图像存入图片文件 ‘disable print‘ 结束存图 ;绘图程序结束
GrADS绘图流程
准备数据 文件(包括 前期数据 处理)
编写及检 查wenku.baidu.com据描 述文件 *.ctl
设定图 样进行 绘图(可 编写脚 本文件 *.gs)
保 存 结 果
在“写字板”或者 “记事本”中编写
例题6-6
现有ASCII码(十进制数据格式)数据资料 文件u850.dat和v850.dat,其空间范围:60150°E,0-40°N;层次:u、v为850Pa;时段 :1982.1-1985.12;分辨率:2.5*2.5;数据排放 顺序满足 GrADS 要求。 GrADS 要求数据如何排放? 要求编写出将这2个文件转换成1个二进制( binary)文件的Fortran程序。
1 n ( xt x )( yt y ) n t 1 rxy n 1 n 1 2 2 ( x x ) . (y y ) t t n t 1 n t 1 1
n
(x x )
( y y)
循 环 嵌 套
integer,parameter:: n=60,start=1951 !character*10 char1 注释 integer i 主程序变量申明 !integer(4) station,nstation real a(n), b(n), c(160,n),co open(1,file='d:\aa\test1\h-p.dat',form='formatted') open(2,file='d:\aa\test1\t1601.txt',form='formatted') open(3,file='d:\aa\test1\mh-t-1.dat',form='formatted') 获取数据 open(4,file='d:\aa\test1\mh-t-1.grd',form='binary') read(1,*)(a(i),i=1,n) close(1) read(2,*)((c(i,j),i=1,160),j=1,n) close(2) do i=1,160 do j=1,60 b(j)=c(i,j) enddo call COR2 ( n, a, b, co) 调用子程序 write(3,'(f12.5)') co 输出数据 write(4) co !,colev !returns co=0.9548129; colev=0.1952 enddo close(3) close(4) 主程序结束 end
例题:
利用1951-2010年1月蒙古高压强度指数(data/h-p.dat)(备注:需要 标准化以后使用)和1951-2010年1月中国160站气温资料 (data/t1601.dat)(备注:实际存放的资料是61年的,只读60即可, 需要标准化以后使用),根据3.5节计算1月蒙古高压强度与中国160 站气温的相关关系。要求以“*.dat”和“*.grd”两种格式保存19512010年1月蒙古高压强度与我国气温的同期相关数据。
二进制数据
end
编写ctl文件
针对wind850.grd二进制数据文件,如果给出如 下数据说明文件,即可用GrADS绘图
dset d:\cvf\wind850.grd undef -9.99E+33 title NCEP/NCAR REANALYSIS PROJECT xdef 37 linear 60.000 2.500 ydef 17 linear 0.000 2.500 zdef 1 levels 850 tdef 48 linear JAN1982 1mo vars 2 v 1 99 v wind (m/s) u 1 99 u wind (m/s) endvars
循环体
END DO
可以相互嵌套
print *,输出列表 输出数据 write(*,*) 输出列表 open(文件号,file=‘路径及文件名’) write(文件号,格式)。。。。
注意:带格式的输入输出方式
二进制数据: open(文件号,file=‘路径及文件名’,form=‘binary’ read(文件号,格式)。。。。。 write(文件号,格式)。。。。 End [program main]
write(*,2000) ((v(i,j,1),i=1,m0),j=1,n0) open(3,file='d:\cvf\wind850.grd',form='binary') do k=1,tim write(3) ((v(i,j,k),i=1,m0),j=1,n0) write(3) ((u(i,j,k),i=1,m0),j=1,n0) end do
期末复习
气象程序设计及绘图
• 学习目标
通过学习,了解FORTRAN语言的特点,基本成 份及使用方法,具有阅读程序、编制程序、调试 程序的基本能力。在此基础上,根据气象数据处 理与分析的特点,切实地掌握用GrADS软件对数 据进行图形化显示的基本方法,初步具备编程绘 图的能力。
《气象程序设计及绘图》专业基础课
… END [SUBROUTINE [子例行程序名]] 表示子例行程序定义结束
调试FORTRAN程序
• 语法错误(syntax error)。如拼写错或标 点符号错,在编译时被编译器检测出来; • 运行错误(run-time error)。当程序执行 时企图做非法运算操作,则发生运行错误 (例如,除以0)。这些错误导致程序执行 时异常中断。 • 逻辑错误(logical error)。程序能够正常 编译和运行,但结果是错误的。
相关文档
最新文档