爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 16714|回复: 13

[作图] 【已解决】ncl 关于整层水汽通量计算和画图的问题 附脚本

[复制链接]

新浪微博达人勋

发表于 2021-11-12 12:30:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 guoguohh 于 2021-11-20 19:49 编辑

看到家园里几乎都是用vibeta求垂直积分的
而era5用vibeta函数求垂直积分函数一直报错,师姐在混合坐标系下使用vibeta就没有问题,
我按照一样的步骤用就一直报错“p没有从bottom to top”,但是实际上是符合要求的,
改了很多次也并没有解决,所以放弃用vibeta。

Dennis在ncl-talk里面回复说“"vibeta" was one of NCL's original functions. I would like
to see its use discontinued.”https://www.ncl.ucar.edu/Support/talk_archives/2010/0787.html不过也没说清楚原因,可能大家以后尽量就不要用vibeta了。

最后修改了官网给的画水汽通量里的方法画出了图,官网脚本链接https://www.ncl.ucar.edu/Applications/Scripts/mfc_div_1.ncl

附我的脚本和图:
begin
fu  = addfile("ujja1979-2018.nc","r");m/s
fv  = addfile("vjja1979-2018.nc","r");m/s
fq  = addfile("shum.nc","r");kg/kg
fps = addfile("pres.nc", "r");Pa=(kg/(m*s2))
pp=fv->level({1000:300});hPa
p=pp*100;Pa
u  =fu->uwnd(:,{1000:300},:,:);m/s eofts_high
v  =fv->vwnd(:,{1000:300},:,:);m/s
q   =short2flt(fq->q(:,{1000:300},:,:));kg/kg
ps =short2flt(fps->sp(:,:,:));Pa=(kg/(m*s2))

;--------------计算水汽通量 moisture flux=(dp(Pa)*u(m/s)*q(kg/kg))/g(m/s^2)  ----------------------
ptop=30000
g= 9.80665 ; m/s2
dp   = dpres_plevel_Wrap(p, ps, ptop, 0);这里变量单位必须全部统一成pa或者hpa
dpg  = dp/g   
dpg@long_name = "Layer Mass Weighting"
dpg@units     = "kg/m2"     
copy_VarCoords(u,dpg)
uq   = u*q                                  ; (:,:,:,:)
  uq@long_name = "Zonal Moisture Flux [uq]"
  uq@units = "["+u@units+"]["+q@units+"]"         
  copy_VarCoords(u,uq)
vq   = v*q                                  ; (:,:,:,:)
  vq@long_name = "Meridional Moisture Flux [vq]"
  vq@units = "["+v@units+"]["+q@units+"]"
  copy_VarCoords(v,vq)      
uq_dpg = uq*dpg
iuq    = dim_avg_n_Wrap(dim_sum_n(uq_dpg, 1),0);kg/m*s
vq_dpg = vq*dpg
ivq    = dim_avg_n_Wrap(dim_sum_n(vq_dpg, 1),0);kg/m*s
copy_VarCoords(u(0,0,:,:), iuq(:,:))
copy_VarCoords(u(0,0,:,:), ivq(:,:))
printMinMax(iuq,0)
printMinMax(ivq,0)

wks = gsn_open_wks("x11","flux")      ; send graphics to PNG file
res                   =  True              ; plot mods desired
  res@gsnLeftString     = "Wind"
  res@gsnDraw              = False        ; don't draw yet
  res@gsnFrame             =False    ; don't advance frame yet
  res@gsnAddCyclic         = False     ; plotted dataa are not cyclic
  res@gsnLeftString=" "
  res@gsnRightString=" "
  res@pmTickMarkDisplayMode="Always";在坐标标签上添加°符号
  res@mpFillOn             = True      ; turn off map fill
  res@mpMinLatF            = 0.        ; zoom in on map
  res@mpMaxLatF            =60.
  res@mpMinLonF            =30.
  res@mpMaxLonF            = 145.
  res@mpDataSetName         = "Earth..4"   ; This new database contains; divisions for other countries.
  res@mpDataBaseVersion     = "MediumRes"  ; Medium resolution database
  res@mpOutlineOn           = True         ; Turn on map outlines
  res@mpAreaMaskingOn            = True
  res@mpMaskAreaSpecifiers       = (/"land"/)
  res@mpOutlineSpecifiers   = (/"China"/)  
  res@mpLandFillColor            = "white"
  res@mpInlandWaterFillColor     = "white"
  res@mpOceanFillColor           = "white"
  res@vcRefMagnitudeF         =100.          ; define vector ref mag
  res@vcRefLengthF            = 0.04      ; define length of vec ref
  res@vcGlyphStyle            = "CurlyVector"   ; turn on curly vectors
  res@vcMinDistanceF          = 0.01
  res@vcRefAnnoOrthogonalPosF = -1.0             ; move ref vector up
base = gsn_csm_vector_map(wks,iuq, ivq, res)
  draw(base)
  frame(wks)
end

fluxtext.png
================分割线===========================================
老师们好
最近在画整层水汽通量图,出现了一些问题想请大家帮忙看看
数据来自era5的月均数据,引入变量的时候提前计算了夏季的年平均,
我用era5下载的比湿数据存在add_offset和scale_factor,直接用的话会报错不足三层,使用short2flt 转成实际数据(单位是kg/kg),

问题:绘图问题,选择用自己计算出的比湿计算整层水汽通量,出的图是这样的图1,而别人的图是图2,需要的趋势全都看不出来,
别人同样是气候态的图,差别太大了,贴一下我的脚本,麻烦大家帮我看看是哪里出错了
begin

fu  = addfile("ujja1979-2018.nc","r");m/s
fv  = addfile("vjja1979-2018.nc","r");m/s
fq  = addfile("shum.nc","r");kg/kg
fps = addfile("pres.nc", "r");Pa=(kg/(m*s2))
ft  =addfile("airjja.nc", "r");K
frh =addfile("rhumjja.nc", "r");%

ys=1979
ye=2010
Time   = fu->time
year   = cd_calendar(Time,-1)/100  ;获得年变量
iyear = ind(year.ge.ys .and. year .le.ye) ;找到年代为1979到2010的数据位置

u  =fu->uwnd(iyear,:,:,:);m/s
v  =fv->vwnd(iyear,:,:,:);m/s
ps =short2flt(fps->sp(iyear,:,:));Pa=(kg/(m*s2))
t=ft->air(iyear,:,:,:)
rh=frh->rhum(iyear,:,:,:)
p=fv->level
p@units="hPa"



q = mixhum_ptrh(conform(t,p,1), t ,rh, 2 );kg/kg  2 = specific humidity (kg/kg).
copy_VarMeta(v,q)
q@units="kg/kg"
printMinMax(q,False)

pbot=1000
ptop=300
g= 9.80665 ; m/s2


uq   = u*q                                  ; (:,:,:,:)
  copy_VarCoords(u,uq)                        ; (time,level,lat,lon)
;printMinMax(uq,False)
vq   = v*q                                  ; (:,:,:,:)
  copy_VarCoords(v,vq)                        ; (time,level,lat,lon)

vint_qu=100*vibeta(p,uq(time|:,lat|:,lon|:,level|:),1,ps,pbot,ptop)/g
copy_VarMeta(ps,vint_qu)

vint_qv=100*vibeta(p,vq(time|:,lat|:,lon|:,level|:),1,ps,pbot,ptop)/g
copy_VarMeta(ps,vint_qv)


mvq=dim_avg_n_Wrap(vint_qv,0)
muq=dim_avg_n_Wrap(vint_qu,0)
printMinMax(mvq, False)
printMinMax(muq, False)

wks = gsn_open_wks("X11","X1")      ; send graphics to PNG file
res                   =  True              ; plot mods desired
  res@gsnLeftString     = "Wind"
  res@gsnDraw              = False        ; don't draw yet
  res@gsnFrame             =False    ; don't advance frame yet
  res@gsnAddCyclic         = False     ; plotted dataa are not cyclic
  res@gsnLeftString=" "
  res@gsnRightString=" "
  res@pmTickMarkDisplayMode="Always";在坐标标签上添加°符号
  res@mpFillOn             = True      ; turn off map fill
  res@mpMinLatF            = 0.        ; zoom in on map
  res@mpMaxLatF            =60.
  res@mpMinLonF            =50.
  res@mpMaxLonF            = 145.
  res@mpDataSetName         = "Earth..4"   ; This new database contains; divisions for other countries.
  res@mpDataBaseVersion     = "MediumRes"  ; Medium resolution database
  res@mpOutlineOn           = True         ; Turn on map outlines
  res@mpAreaMaskingOn            = True
  res@mpMaskAreaSpecifiers       = (/"land"/)
  res@mpOutlineSpecifiers   = (/"China"/)  
  res@mpLandFillColor            = "white"
  res@mpInlandWaterFillColor     = "white"
  res@mpOceanFillColor           = "white"
  res@vcRefMagnitudeF         =100.           ; define vector ref mag
  res@vcRefLengthF            = 0.04      ; define length of vec ref
  res@vcGlyphStyle            = "CurlyVector"   ; turn on curly vectors
  res@vcMinDistanceF          = 0.02
  res@vcRefAnnoOrthogonalPosF = -1.0             ; move ref vector up
  base = gsn_csm_vector_map(wks,muq,mvq,res)
  draw(base)
  frame(wks)

end




图1

图1

图2

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

新浪微博达人勋

发表于 2022-3-31 10:34:52 | 显示全部楼层
{:eb511:}{:eb511:}{:eb511:}{:eb511:}{:eb511:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-2 17:27:07 | 显示全部楼层

用了楼主的脚本,但是会报错,急求帮助

用了楼主的脚本,但是会报错,急求帮助


用了楼主的脚本,但是可能是我自己的原因,会报错,急求帮助!!!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-2 17:39:34 | 显示全部楼层
dp   = dpres_plevel_Wrap(p, ps, ptop, 0) 这里dp会出现很多nan,需要修改成fillvalue=-9999
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-7 09:43:42 | 显示全部楼层
16度的可乐 发表于 2022-4-2 17:39
dp   = dpres_plevel_Wrap(p, ps, ptop, 0) 这里dp会出现很多nan,需要修改成fillvalue=-9999

应该是数据不一样的吧 我的没有这样
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-7 09:49:42 | 显示全部楼层
可乐售卖机 发表于 2022-4-2 17:27
用了楼主的脚本,但是可能是我自己的原因,会报错,急求帮助!!!!

维度不匹配 你检查一下自己的数据 我的脚本里的数据是四维的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-10 07:59:39 | 显示全部楼层
66666666666666666666666666
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-20 17:44:14 | 显示全部楼层
最近看到说ERA5再分析资料数据的默认高度层顺序是从高到低的比如从300到1000,而NCEP的高度层顺序是从低到高如1000到300,所以这是不是用Vibeta报错的原因?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-20 17:59:49 | 显示全部楼层
孙玻玻 发表于 2022-4-20 17:44
最近看到说ERA5再分析资料数据的默认高度层顺序是从高到低的比如从300到1000,而NCEP的高度层顺序是从低到 ...

不是 从高到低从低到高都试过 就是按照vibeta给的要求设置好的 不能用
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-2-7 19:29:44 来自手机 | 显示全部楼层
请问水汽通量散度怎么计算呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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