爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 26246|回复: 27

[其他] ncl求区域平均 经度范围跨过日界线 导致出错

[复制链接]

新浪微博达人勋

发表于 2014-12-20 17:51:21 | 显示全部楼层 |阅读模式

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

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

x
利用ncl的 wgt_areaave_Wrap函数 想求nino4指数,Niño4 区(5°S~5°N, 160°E~150°W) 。资料用的HadISST_sst.nc,它的lon属性是(-180,180)所以存在一个跨过日界线的问题 ncl算出的和用grads算出的nino4指数不一样,grads的经度设置是0-360 所以就避免了这个问题,想请教下大家,这种跨过日界线的情况怎么处理?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-12-20 19:23:54 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2014-12-20 17:54:10 | 显示全部楼层
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"

begin

;************************************************
; Specify geographical region and time span (year-month start and end
;************************************************

  latS     = -90               
  latN     =  90
  lonL     = -180
  lonR     =  180

  ymStrt   = 195001     
  ymLast   = 201312
  

;************************************************
; Read from netCDF file: variable is type short...unpack
;************************************************
   diri   = "E:/ENSO/"
   fili   = "HadISST_sst.nc"
   f      = addfile(diri+fili,"r")

   YYYYMM = cd_calendar( f->time, -1)

   iStrt  = ind(YYYYMM.eq.ymStrt)
   iLast  = ind(YYYYMM.eq.ymLast)

   x      = short2flt( f->sst(iStrt:iLast,{latS:latN},{lonL:lonR}) )

   printVarSummary(x)                            ; [time| 720]x[lat| 91]x[lon| 180]

   yyyymm = cd_calendar(x&time, -1)             ;转换时间格式
   yyyy   = yyyymm/100                          ;年份

   dimx = dimsizes(x)                           ;给各变量分配维数大小
   ntim = dimx(0)               
   nlat = dimx(1)
   mlon = dimx(2)

   year  = ispan(yyyy(0), yyyy(ntim-1), 1)       ;创建整型数组 (1948,。。。。2010)
   nyrs  = dimsizes(year)
   xann=clmMonTLL(x)
   xano=calcMonAnomTLL(x,xann)
    printVarSummary(xano)
   aave34 =  wgt_areaave_Wrap(xano(:,{-5:5},{-170:-120}),1.0,1.0,1)
   aave3  =  wgt_areaave_Wrap(xano(:,{-5:5},{-150:-90}),1.0,1.0,1)
   aave4  =  wgt_areaave_Wrap(xano(:,{-5:5},{160:-150}),1.0,1.0,1)
      printVarSummary(aave34)
   nina34 = onedtond(aave34,(/64,12/))
   nina3 = onedtond(aave3,(/64,12/))
   nina4 = onedtond(aave4,(/64,12/))
   opt34=True
   opt34@fout="E:/ENSO/nina34.txt"
   write_matrix(nina34,"12f6.2",opt34)
   opt3=True
   opt3@fout="E:/ENSO/nina3.txt"
   write_matrix(nina3,"12f6.2",opt3)
   opt4=True
   opt4@fout="E:/ENSO/nina4.txt"
   write_matrix(nina4,"12f6.2",opt4)
   end   
这是脚本 nino3和nino4指数求出来是没有问题的 可能是没跨日界线的原因
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-12-20 19:44:19 | 显示全部楼层
longlivehj 发表于 2014-12-20 19:23
lonFlip
http://www.ncl.ucar.edu/Document/Functions/Contributed/lonFlip.shtml

非常感谢!!!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-1 12:17:25 | 显示全部楼层
{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-1-9 20:02:01 | 显示全部楼层
我想问下楼主 你在用 wgt_avearea_wrap 的时候经纬权重都用1.0 是可以的吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-1-14 12:43:52 | 显示全部楼层
思考人生 发表于 2015-1-9 20:02
我想问下楼主 你在用 wgt_avearea_wrap 的时候经纬权重都用1.0 是可以的吗?

我是算nino区域的区域平均 这个也刚好是赤道对称的,这样的话应该不涉及权重问题吧,所以都设成了1,我是这样理解的 不知道对不对
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-3-5 16:01:37 | 显示全部楼层
我按照你的程序写出nino3.txt  但是怎么不能用fortran写成grd形式呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-3-6 15:14:10 | 显示全部楼层
天玖Y 发表于 2015-3-5 16:01
我按照你的程序写出nino3.txt  但是怎么不能用fortran写成grd形式呢

应该是没问题的吧,读进去再以二进制的格式输出就好了啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-3-7 13:21:20 | 显示全部楼层
Wziqi 发表于 2015-3-6 15:14
应该是没问题的吧,读进去再以二进制的格式输出就好了啊

  恩 可以的  是自己不小心出错了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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