爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14298|回复: 28

[分享资料] 【maskout】对多时次数据进行maskout的解决方案

[复制链接]

新浪微博达人勋

发表于 2012-7-12 17:30:49 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
        以前介绍过maskout方法以及maskout文件的制作,但当时只是提到了对单个时次的数据文件进行插值和maskout。实际上气象数据通常都是多时次的,这就涉及到对多时次数据进行maskout的问题。之前的帖子里强调过,maskout文件的时间描述必须跟数据文件一致,但是,maskout是一个单时次文件,怎么跟多时次的数据文件对应呢?笨笨在这里给大家提供一个解决方案,仅供参考。
       假设你的maskout文件是maskout.dat,对应的描述文件是maskout.ctl;数据文件是data.dat,数据文件的描述文件是data.ctl,时间描述是:tdef   5 linear 01jan1961 1mo。
       下面介绍解决步骤:
        1、对maskout.dat建立多个描述文件,描述文件个数与数据文件的时间维度一致,如这里是5个,笨笨分别命名为1.ctl、2.ctl、3.ctl、4.ctl、5.ctl,然后将其时间设置分别设置成数据文件的第一个时次、第二个时次。。。。。第五个时次,具体如下:
        描述文件                  时间设置
       1.ctl                          tdef   1 linear 01jan1961 1mo
       2.ctl                          tdef   1 linear 01FEB1961 1mo
       3.ctl                          tdef   1 linear 01MAR1961 1mo
       4.ctl                          tdef   1 linear 01APR1961 1mo
       5.ctl                          tdef   1 linear 01MAY1961 1mo
      2、绘图。由于maskout是单个时次的而数据文件是多个时次的,因此不能同时打开两个文件后再设定绘图时次,而是要分别设定时次。问题来了,grads里总是以后一次设定的时次为准的,这就是笨笨为什么要介绍这个解决方案的原因了。其实解决方法也不负责,就是先打开一个文件,设定时次后将其变量存在内存中,然后打开另一个文件,设定时次,文字是描述不清楚的,绘图语句如下(以绘制第3个时次的图为准,示例的数据是站点资料):
    'open d:/3.ctl'
    'define a=mask'  *mask是maskout文件的变量名
    'open d:/data.ctl'
    'set t 3'
    'define b=oacres(a,var.2,50,20) *var是data文件的变量名
    'd maskout(b,a)'
      3、完了。

评分

参与人数 3金钱 +51 贡献 +13 收起 理由
善人/jw + 22 + 4
做个霸气的木头 + 14 + 4 好帖子~
mofangbao + 15 + 5 给钱了,好久没见你的帖子了,鼓励下啊

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-12 17:33:18 | 显示全部楼层
做一下笨笨的沙发....
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-7-12 17:48:05 | 显示全部楼层
终于进来了,笨笨不错~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-12 18:39:08 | 显示全部楼层
顶笨笨~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-13 00:07:02 | 显示全部楼层

学习了 将其变量存在内存中 比较高明!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-7-13 12:42:25 | 显示全部楼层
默默的在背后顶笨笨
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-7-13 18:10:14 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-8-15 10:52:23 | 显示全部楼层
不是可以使用局部变量吗?我以前貌似是这样处理的:set t *(数据文件的任意时刻) define=oacres(mak(t=1),var.2,50,20)  只需要将maskou文件的起始时间设定成与数据文件的起始时间一样,同时时间增量一样就可以呀。   不知道没有错误吧?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-25 18:35:12 | 显示全部楼层
恩,不错。好东西
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-12 10:37:01 | 显示全部楼层
“冬日”的回复是可行的。在最近的一次画图中,我将maskou文件的ctl文件中起始时间和时间增量设定成与数据文件相同,同时在gs文件中事先define一个变量var=mask,其时次为起始时间,数据三维范围和maskout文件一致,之后就可以用循环---while(i<4) ; set t 'i' ; d mask (元数据变量,var) ; i=i+1 ; endwhile-----来输出各个时次的图。这样就不用配多个ctl来描述maskout文件。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表