爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 79470|回复: 91

[作图] NCL 计算整层水汽通量

  [复制链接]

新浪微博达人勋

发表于 2015-5-19 12:44:32 | 显示全部楼层 |阅读模式

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

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

x
用NCL计算整层水汽通量报错:
QQ截图20150519123741.png


部分脚本如下:
     nlat=73
     nlon=144
     nyear=35   
     nlev=8         
     p       = (/ 1000.,925.,850.,700.,600.,500., \
               400.,300./)
         linlog = 1
     pbot   = 1000.                                             
     ptop   = 300.
         u_file=addfile("uwnd_Dtrend.nc","r")
         v_file=addfile("vwnd_Dtrend.nc","r")
         p_file=addfile("pres_Dtrend.nc","r")
         shum_file=addfile("shum_Dtrend.nc","r")
         uu=u_file->uwnd_Dtrend
         vv=v_file->vwnd_Dtrend
         pres=p_file->pres_Dtrend
         shum=shum_file->shum_Dtrend
       
        ;;; 计算qu = q(比湿)乘以u(u风) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
         qu = new((/nyear,nlev,nlat,nlon/),float)
          qv = new((/nyear,nlev,nlat,nlon/),float)
         qu=shum*uu
         qv=shum*vv
         copy_VarCoords(uu,qu)
         copy_VarCoords(vv,qv)
         qu@_FillValue=-9.99E+33  
         qv@_FillValue=-9.99E+33  
        printVarSummary(qu)

         u = vibeta (p,qu(time|:,lat|:,lon|:,level|:),linlog,pres,pbot,ptop)/9.8  ; returns qu(time,lat,lon)
         v = vibeta (p,qv(time|:,lat|:,lon|:,level|:),linlog,pres,pbot,ptop)/9.8  ;;单位是g/s`hPa`cm
       
         copy_VarCoords(uu(:,0,:,:),u)
         copy_VarCoords(vv(:,0,:,:),v)
         u@_FillValue=-9.99E+33  
         v@_FillValue=-9.99E+33  
         
       
         printVarSummary(v)

请教各位大神们知道是什么原因嘛~多谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-6-21 20:41:21 | 显示全部楼层
hxyj 发表于 2015-6-21 09:51
请问楼主是否已解决该问题了?能否将计算的完整脚本贴出共享?

是的已经解决了
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
;************************************************
; open file and read in variable
;***********************************************
;levels 1000 925 850 700 600 500 400 300  
; 层数    0   1   2   3   4   5   6   7      
;***********************************************
     nlat=73
     nlon=144
         nyear=35   
     nlev=8         
         
         p       = (/ 1000.,925.,850.,700.,600.,500., \
               400.,300.,250.,200.,150.,100., \
                70.,50.,30.,20.,10. /)
         linlog = 1
     pbot   = 1100.                                             
     ptop   = 300.
         u_file=addfile("uwnd_Dtrend.nc","r")
     v_file=addfile("vwnd_Dtrend.nc","r")
         p_file=addfile("pres_Dtrend.nc","r")
         shum_file=addfile("shum_Dtrend.nc","r")
         xx_file=addfile("uwnd.mon.mean.nc","r")
         
         uu=u_file->uwnd_Dtrend
         vv=v_file->vwnd_Dtrend
         pres=p_file->pres_Dtrend
         shum=shum_file->shum_Dtrend
       
         qu = new((/nyear,nlev,nlat,nlon/),float)
     qv = new((/nyear,nlev,nlat,nlon/),float)
       
         qu=shum*uu
         qv=shum*vv
         copy_VarCoords(uu,qu)
         copy_VarCoords(vv,qv)
         qu@_FillValue=-9.99E+33  
         qv@_FillValue=-9.99E+33  
       
         qu_new = new((/nyear,nlev+9,nlat,nlon/),float)
     qv_new = new((/nyear,nlev+9,nlat,nlon/),float)

         do i=0,7
            qu_new(:,i,:,:)= qu(:,i,:,:)
                qv_new(:,i,:,:)= qv(:,i,:,:)
         end do
         
         do j=8,nlev+9-1
           qu_new(:,j,:,:)= 0.0
           qv_new(:,j,:,:)= 0.0
         end do
         qu_new&level = xx_file->uwnd&level
         qv_new&level = xx_file->uwnd&level
        ; printVarSummary(qu_new)
         
         u = vibeta (p,qu_new(time|:,lat|:,lon|:,level|:),linlog,pres,pbot,ptop)/9.8  ; returns u(time,lat,lon)
         v = vibeta (p,qv_new(time|:,lat|:,lon|:,level|:),linlog,pres,pbot,ptop)/9.8  
       
         copy_VarCoords(uu(:,0,:,:),u)
         copy_VarCoords(vv(:,0,:,:),v)
         u@_FillValue=-9.99E+33  
         v@_FillValue=-9.99E+33  
       
        ; printVarSummary(v)
         asciiwrite ("allqu.txt" , u)
         delete(uu)
         delete(vv)
         delete(pres)
     delete(shum)

end
密码修改失败请联系微信:mofangbao
回复 支持 4 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-5-19 12:47:55 | 显示全部楼层
没看出这部分代码什么问题~~~请斑竹来说
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-19 13:50:42 | 显示全部楼层
是ntime=35?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-19 14:51:07 | 显示全部楼层
看看pres=p_file->pres_Dtrend中是Pa还是hPa。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-19 15:31:03 | 显示全部楼层
风往北吹 发表于 2015-5-19 14:51
看看pres=p_file->pres_Dtrend中是Pa还是hPa。

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

新浪微博达人勋

 楼主| 发表于 2015-5-19 15:32:52 | 显示全部楼层

这只是变量名而已 应该没关系吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-19 15:50:19 | 显示全部楼层
本帖最后由 longlivehj 于 2015-5-19 15:54 编辑

vibeta采用的是中点公式,需要3个点进行积分。出现这种错误的原因是,地形以上不足3层。可以人为补几层上去。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-19 17:42:29 | 显示全部楼层
longlivehj 发表于 2015-5-19 15:50
vibeta采用的是中点公式,需要3个点进行积分。出现这种错误的原因是,地形以上不足3层。可以人为补几层上去 ...

你的意思是将qu,qv再人为的往上补几层吗?那补的那几层是设为缺省还是0比较好?因为我下面还遇到一个问题,就是用完vibeta后,数据出现了部分缺省值,然后我用uv2dv_cfd算完散度之后,想分解成辐散风和旋转风,在用到 dv2uvg(div,ud,vd)这句后 ,算出来的ud全部变成了缺省值,导致图画不出来
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-19 17:45:06 | 显示全部楼层
longlivehj 发表于 2015-5-19 15:50
vibeta采用的是中点公式,需要3个点进行积分。出现这种错误的原因是,地形以上不足3层。可以人为补几层上去 ...

我查了一下dv2uvg的说明,它的英文意思是“不处理缺省值,原本是缺省值的格点最后那个格点上输出的还是缺省值”,不知道我理解的对不对,但是也不应该我算出来的ud和vd所有格点全部是缺省值诶····
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-26 12:43:40 | 显示全部楼层
新手上路,围观学习
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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