爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9060|回复: 6

[其他] NCL脚本求教

[复制链接]
发表于 2016-8-6 20:14:15 | 显示全部楼层 |阅读模式

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

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

x
在下NCL小白,今天在学习NCL尝试用ncl脚本将500hpa的位势高度的月平均资料处理成年平均资料,然后画出01961-1990年气候场遇到了一点问题,请教各位大神!下面是我编辑的脚本:系统显示在脚本中红色那行左右有这样一个错误:Subscript out of range, error in subscript #0,应该是哪里下标出了问题 但是我就是找不到。对了 关于读出来的hgt500文件格式如下:dimt (这个dimt是dimt=dimsizes(hgt500) print(dimt)得到的
Type: integer
Total Size: 12 bytes
            3 values
Number of Dimensions: 1
Dimensions and sizes:   [3]
Coordinates:
(0)     1704
(1)     91
(2)     180

脚本:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
begin
f=addfile("C:/dream/bj/summer/data/hgt.mon.mean.nc","r")
hgt500=f->hgt(:,10,:,:)
hgt500=hgt500/10
dimt=dimsizes(hgt500)
print(dimt)
lon=f->lon
lat=f->lat
;calculate winterhgt
winterhgt500=new((/141,91,180/),float)
do i=0,90
  do j=0,179
    do it=0,1702
      if(mod(it,12).eq.11)then
       winterhgt500((it+1)/12,i,j)=(hgt500(it,i,j)+hgt500(it+1,i,j)+hgt500(it+2,i,j))/3
       end if
    end do
  end do
end do
copy_VarMeta(hgt500,winterhgt500)
;calculate ave winterhgt for 1961-1990
avehgt6190=new((/91,180/),float)
do i=0,90
  do j=0,179
    do it=90,119
      avehgt6190(i,j)=avehgt6190(i,j)+winterght500(it,i,j)
    end do
    avehgt6190(i,j)=avehgt6190(i,j)/30
  end do
end do
avehgt6190@op="time average:"+winterght500@long_name
wks=gsn_open_wks("png","C:/dream/bj/summer/slp/hgt/avehgt6191two")       ; send graphics to PNG file
res            = True                          ; plot mods desired
res@gsnPolar   = "NH"                          ; specify the hemisphere
res@gsnLeftString         = ""       ; turn off subtitles
res@gsnRightString        = ""
res@gsnCenterString       = ""
plot = gsn_csm_contour_map_polar(wks,avehgt6190,res)    ; create the plot
end





密码修改失败请联系微信:mofangbao
发表于 2016-8-7 09:55:03 | 显示全部楼层
标红的代码写错了。一共142年的数据,提取141的冬季数据。数组初始化是141大小,那么索引是从0到140。而你写的是从1到141,141自然就越界了。应改为winterhgt500((it+1)/12-1,i,j)=(hgt500(it,i,j)+hgt500(it+1,i,j)+hgt500(it+2,i,j))/3
另外,楼主全是硬编码写的,既然已经dimsizes取了坐标维数,为什么你的dimt(0),dimt(1),dimt(2)来分别代替你的数字呢。
密码修改失败请联系微信:mofangbao
发表于 2016-8-7 10:13:57 | 显示全部楼层
1702+2 数组越界了,你既然知道从0开始,应该最后是1073,而不是1074
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-8-7 10:31:55 | 显示全部楼层
流沙 发表于 2016-8-7 09:55
标红的代码写错了。一共142年的数据,提取141的冬季数据。数组初始化是141大小,那么索引是从0到140。而你 ...

嗯呐 这个问题昨天晚上被检查出来了 nc才学用有时候就会跟matlab搞混了。大神我还想请教您一下 我这样在赋值元数据的地方还是有问题?我把月数据处理成年数据那之类长度从1704*91*180变成看141*91*180,那这样元数据改怎么复制呢?用copy_VarMeta好像只能复制属性不能复制坐标变量额  麻烦您了
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-8-7 10:32:14 | 显示全部楼层
freekiller 发表于 2016-8-7 10:13
1702+2 数组越界了,你既然知道从0开始,应该最后是1073,而不是1074

嗯呐 这个问题昨天晚上被检查出来了 nc才学用有时候就会跟matlab搞混了。大神我还想请教您一下 我这样在赋值元数据的地方还是有问题?我把月数据处理成年数据那之类长度从1704*91*180变成看141*91*180,那这样元数据改怎么复制呢?用copy_VarMeta好像只能复制属性不能复制坐标变量额
密码修改失败请联系微信:mofangbao
发表于 2016-8-7 18:05:52 | 显示全部楼层
迷幻城堡 发表于 2016-8-7 10:31
嗯呐 这个问题昨天晚上被检查出来了 nc才学用有时候就会跟matlab搞混了。大神我还想请教您一下 我这样在 ...

坐标元数据需要自己设置。因为时间维已经改了。
如 a&lat = lat等
密码修改失败请联系微信:mofangbao
发表于 2018-1-31 16:18:33 | 显示全部楼层
同为ncl小白一个
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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