爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3736|回复: 7

[分享资料] 【已解决】异常场时间维!!!

[复制链接]
发表于 2014-8-31 01:13:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 aa22556688 于 2014-8-31 11:25 编辑

看了下面的代码,可以帮助一些同学求单个时次的异常场,但是这并不是我想要的结果!!!
想求一个数据里面所有时间的异常场,例如,数据是1971.1-2000.12共360个月,每个月是一个场,现想求所有时间序列的异常场,但是总求不对,求高手给指点迷津!!!
'reinit'
'sdfopen sst.mnmean.nc'
tt=1                 *** 此处,求气候态,已验证没有问题*****
while(tt<=12)
ts=1512+tt
td=1860+tt
'define aa'tt'=ave(sst,t='ts',t='td',12)'
tt=tt+1
endwhile
'define aa0=aa12'
*** 问题在下面的循环的define ***
tt=1        *循环求每个时间场的距平场。但是没有办法生成时间序列的距平场 ****
while(tt<=1927)
ii=math_mod(tt,12)   
'set t 'tt''
'define temp=sst-aa'ii''  ***  此处define,会把上一个时次的场覆盖  ***
tt=tt+1                       ***  所以现在问题来,有没有方法,让每次循环不覆盖上次的结果,而生成一个时间序列的异常场 ***
endwhile
‘set t 12’   
‘d temp’
*我的目的:设置个时间,就可以画出对应时间的距平场,但是由于define会覆盖上一次循环的结果,最后画出来的始终是 t=1927那个时次的距平场

整个过程就是 define的问题,能不能让循环生成一个时间序列的异常场(例如 tloop和aave的搭配),这样想画哪个时次的距平场,直接在后面设置 t 就可以画出来了,这样既方便,还可以解画话距平折线的问题。
Grads的时间维太不人性化{:soso_e150:},始终没有理解这个问题,求高手给指点迷津,不仅感激!!!
***以下是解决方法***
'reinit'
'sdfopen sst.mnmean.nc'
'set t 1 12'
'define sstclim=ave(sst,t+1512,t=1872,12)'
'modify sstclim seasonal'
'set t 1 last'
'define anom=sst -sstclim'     *** 这样整个数据就都变成时间序列的异常场,求一个区域异常场的逐年演变也会很方便 ****
‘set t 12’
‘d anom’


感谢lqouc的指点!!!{:soso_e142:}

来自群组: 成于大气 信达天下
密码修改失败请联系微信:mofangbao
发表于 2014-8-31 10:00:53 | 显示全部楼层
查一下modify的用法

评分

参与人数 1金钱 +20 收起 理由
aa22556688 + 20 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-8-31 10:52:27 | 显示全部楼层
本帖最后由 aa22556688 于 2014-8-31 10:54 编辑
lqouc 发表于 2014-8-31 10:00
查一下modify的用法

'set t 1 12'
'define sstclim=ave(sst,t+384,t=744,12)'  
气候态:1980.1-2009.12,分别对应于t=385,t=744,把其修改成 ave(sst,t+385,t+732)、ave(sst,t+384,t+732)都不正确。
'modify sstclim seasonal'
'set t 1 last'
'define anom=sst -sstclim'
'set t 1717'
'd anom'
这样能画出图,但是画出来的异常场不对,请问ave里面的 t哪里设置错了么?
密码修改失败请联系微信:mofangbao
发表于 2014-8-31 10:57:54 | 显示全部楼层
aa22556688 发表于 2014-8-31 10:52
'set t 1 12'
'define sstclim=ave(sst,t+384,t=744,12)'  
气候态:1980.1-2009.12,分别对应于t=385 ...

我觉得没错哈,不过你的时间最后对么?只算了385-744的气候太,求1717的异常是不是不大合适?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-8-31 11:09:59 | 显示全部楼层
lqouc 发表于 2014-8-31 10:57
我觉得没错哈,不过你的时间最后对么?只算了385-744的气候太,求1717的异常是不是不大合适?

我想达到的目的,就是把所有时间序列的异常场求出来,总共有1927个时次,例如随意设置一个 t=500(1960.1),就可以画出对应的异常场。
我以前都是像下面那样求
‘define anom=ave(sst,t=1,t=349,12)' ***30年一月气候,如果求2月,就改成' t=2,t=350'
'set t 13'                                                 *** 设置时间,求一月气候态
'd sst-anom'                                    **如果求二月的,前面的时间都要对应修改,不仅麻烦还易出错
这样做的弊端,一次只能出来一个场,如果画一个区域的异常逐年演变(折线图)就没有办法实现。所以应该怎么解决,还希望给点指点。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-8-31 11:19:17 | 显示全部楼层
lqouc 发表于 2014-8-31 10:57
我觉得没错哈,不过你的时间最后对么?只算了385-744的气候太,求1717的异常是不是不大合适?

问题已经解决了,确实没有错,是气候态设置错了,那个时间是风场的气候态,太感谢啦!!!{:eb515:}{:eb515:}
密码修改失败请联系微信:mofangbao
发表于 2014-8-31 12:16:06 | 显示全部楼层
aa22556688 发表于 2014-8-31 11:19
问题已经解决了,确实没有错,是气候态设置错了,那个时间是风场的气候态,太感谢啦!!!{:eb5 ...

嘿嘿,解决了就好。
ps:以后还是早点休息哈,熬夜不好
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-8-31 12:44:51 | 显示全部楼层
lqouc 发表于 2014-8-31 12:16
嘿嘿,解决了就好。
ps:以后还是早点休息哈,熬夜不好

嗯嗯,非常感谢,刚跟导师做东西,想尽快弄出来,这些基本的早点学会,以后也就会轻松些。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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