- 积分
- 2263
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-8-1
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最近利用GrADS处理风场数据,想计算风速的月平均和风向的频率分布,但绝大部格点气候数据都是UV分量形式。百度到了一款Fortran的UV和Wind互转程序(http://blog.chinaunix.net/uid-523040-id-2388503.html)
! Copyright (c) 2006 Yongjun ZHENG
! Author : Yongjun ZHENG
! Date : 5/9/2006
但由于处理的数据文件数目非常巨大,又涉及Grib2文件读取,本人并不想用Fortran处理,基于Yongjun ZHENG的程序算法,编写了GrADS的脚本程序。其中UV计算风速的命令非常简单,只需要mag函数即可,但UV计算风向并不容易。因为对某个矩阵进行风向计算后会出现很多风向值大于360度的情况,需找出大于360的值,然后再减去360。这项工作换成Fortran或者Matlab,那只是一句话的事情,因为Fortran中有求余的函数mod,Matlab更是没得说,GrADS中内置变量计算是并无此相关函数,只有math_mod和math_fmod,仅可用于gs脚本内的数值形式计算,也就是说,需要对风速矩阵的每个元素进行循环判断,效率可见一斑。
突然想起,曾经看到过一个海浪图填色gs脚本,为了避免海岸线的缺测值出现白色的锯齿,采用将所有陆地位置的海浪高度值赋值为0的方法。
这样,风向处理可以类似。
第一步,利用maskout函数,将公式计算的风向值dt0<360部分设置为缺测值,赋给临时变量sw1,
利用const函数,将sw1缺测值部分设置为常数360,sw1=sw1-360,这样缺测值部分变成了0,dt0>=360部分变成了dt0-360
第二步,利用maskout函数,将公式计算的风向值dt0>360部分设置为缺测值,赋给临时变量sw2,
利用const函数,将sw2缺测值部分设置为常数0,这样原先dt0>360缺测值部分变成了0,dt0<360部分保持不变
第三步,新的风向值wdir=sw1+sw2
以上是本人设计的GrADS计算风向的算法,分享出来,敬请大家批评指正。
uw2wind的Fortran程序和GrADS脚本见附件。
|
|