爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11859|回复: 16

[作图] 整层水汽通量的讨论

[复制链接]
发表于 2015-12-28 09:26:07 | 显示全部楼层 |阅读模式

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

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

x
关于水汽通量的帖子查了好多,根据大家的帮助也使用NCL画出来了,但是感觉出来的图有点怪怪的,希望大神们能帮忙看看,可能是哪里出错了,关于积分上限和下限值的设置,是要遵循什么规律吗
QQ图片20151228092705.png
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-12-28 10:07:57 | 显示全部楼层
andrewsoong 发表于 2015-12-28 10:02
的确是有点分辨率不高哇,你可以贴上脚本让大家给你看看吧
  1. ;2014年台风季——整层水汽输送
  2. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
  3. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
  4. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
  5. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
  6. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/skewt_func.ncl"
  7. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/wind_rose.ncl"
  8. load "$NCARG_ROOT/lib/ncarg/nclscripts/cnmap/cnmap.ncl"

  9. begin

  10. latS = 0
  11. latN = 60
  12. lonL = 60
  13. lonR = 180

  14. r1 = "/gpfsES/geo/zywang/get_flux_myan/vertical/"
  15. r2 = "/gpfsES/geo/zywang/data_CESM/"
  16. n1 = "U_on_p.nc"
  17. n2 = "V_on_p.nc"
  18. n3 = "SHUM_on_p.nc"
  19. n4 = "MASK_SV/T_SV.nc"

  20. f1 = addfile(r1+n1,"r")
  21. f2 = addfile(r1+n2,"r")
  22. f3 = addfile(r1+n3,"r")
  23. f4 = addfile(r2+n4,"r")

  24. u = f1->U
  25. lev_p = f3->lev_p
  26. lat = f4->lat
  27. lon = f4->lon
  28. v = f2->V
  29. shum = f3->SHUM
  30. lev_p = f3->lev_p
  31. pres = f4->PS       ;suface pressure(Pa)

  32. ;***********************
  33.   summer_u = new((/2000,10,48,96/),float)
  34.   summer_v = new((/2000,10,48,96/),float)
  35.   summer_shum = new((/2000,10,48,96/),float)
  36.   summer_pres = new((/2000,48,96/),float)
  37.   jj = 0;
  38.   do ii = 0,23988,12
  39.            summer_u(jj,:,:,:) = dim_avg_n_Wrap(u(ii+4:ii+7,:,:,:),0)
  40.       summer_v(jj,:,:,:) = dim_avg_n_Wrap(v(ii+4:ii+7,:,:,:),0)
  41.       summer_shum(jj,:,:,:) = dim_avg_n_Wrap(shum(ii+4:ii+7,:,:,:),0)
  42.       summer_pres(jj,:,:) = dim_avg_n_Wrap(pres(ii+4:ii+7,:,:),0)
  43.            jj = jj+1;
  44.    end do
  45.    summer_u11 = summer_u(:,:,23:40,16:48)
  46.    summer_v11 = summer_v(:,:,23:40,16:48)
  47.    summer_shum11 = summer_shum(:,:,23:40,16:48)
  48.    summer_pres11 = summer_pres(:,23:40,16:48)

  49.    ; add attributes

  50.    year = ispan(1,2000,1)
  51.    summer_u11!0 = "time"
  52.    summer_u11&time = year
  53.    summer_u11!1 = "lev_p"
  54.    summer_u11&lev_p = lev_p
  55.    summer_u11!2 = "lat"
  56.    summer_u11&lat = lat(23:40)
  57.    summer_u11!3 = "lon"
  58.    summer_u11&lon = lon(16:48)

  59.    summer_v11!0 = "time"
  60.    summer_v11&time = year
  61.    summer_v11!1 = "lev_p"
  62.    summer_v11&lev_p = lev_p
  63.    summer_v11!2 = "lat"
  64.    summer_v11&lat = lat(23:40)
  65.    summer_v11!3 = "lon"
  66.    summer_v11&lon = lon(16:48)

  67.    summer_shum11!0 = "time"
  68.    summer_shum11&time = year
  69.    summer_shum11!1 = "lev_p"
  70.    summer_shum11&lev_p = lev_p
  71.    summer_shum11!2 = "lat"
  72.    summer_shum11&lat = lat(23:40)
  73.    summer_shum11!3 = "lon"
  74.    summer_shum11&lon = lon(16:48)
  75.    
  76.    summer_pres11!0 = "time"
  77.    summer_pres11&time = year
  78.    summer_pres11!1 = "lat"
  79.    summer_pres11&lat = lat(23:40)
  80.    summer_pres11!2 = "lon"
  81.    summer_pres11&lon = lon(16:48)
  82.    
  83.    print(max(summer_pres11))
  84.    print(min(summer_pres11))
  85.    printVarSummary(summer_pres11)
  86.    printVarSummary(summer_pres11)

  87.    ;calculate qu = shum(specific humidity)*u(wind)

  88.    qu = new(dimsizes(summer_shum11),"float")
  89.    qu = summer_shum11*summer_u11
  90.    copy_VarMeta(summer_shum11,qu)
  91.   
  92.    ; calculate qv = shum(specific humidity)*v(wind)

  93.    qv = new(dimsizes(summer_shum11),"float")
  94.    qv = summer_shum11*summer_v11
  95.    copy_VarMeta(summer_shum11,qv)
  96.    printVarSummary(qu)
  97.    printVarSummary(qv)
  98.   
  99. ; vertically integrated water vapor transport(kg/(m.s))
  100.   
  101. linlog=1
  102. pbot=1000 (right?)
  103. ptop=100  (right?)   
  104. g=9.8

  105. vint_qu=vibeta(lev_p,qu(time|:,lat|:,lon|:,lev_p|:),linlog,summer_pres11,pbot,ptop)/g
  106. copy_VarMeta(qu(:,0,:,:),vint_qu)
  107. vint_qv=vibeta(lev_p,qv(time|:,lat|:,lon|:,lev_p|:),linlog,summer_pres11,pbot,ptop)/g
  108. copy_VarMeta(qv(:,0,:,:),vint_qv)   

  109.    vint_qu_W1 = vint_qu(270:369,:,:)
  110.    vint_qu_W2 = vint_qu(780:879,:,:)
  111.    vint_qu_W3 = vint_qu(1069:1168,:,:)
  112.    vint_qu_W4 = vint_qu(1900:1999,:,:)
  113.    vint_qu_C1 = vint_qu(610:709,:,:)
  114.    vint_qu_C2 = vint_qu(1440:1539,:,:)
  115.    vint_qu_C3 = vint_qu(1639:1738,:,:)
  116.    vint_qu_C4 = vint_qu(1760:1859,:,:)

  117.    vint_qu_W = (vint_qu_W1+vint_qu_W2+vint_qu_W3+vint_qu_W4)/4.0
  118.    vint_qu_C = (vint_qu_C1+vint_qu_C2+vint_qu_C3+vint_qu_C4)/4.0
  119.    avg_vint_qu = dim_avg_n_Wrap(vint_qu,0)

  120.    vint_qv_W1 = vint_qv(270:369,:,:)
  121.    vint_qv_W2 = vint_qv(780:879,:,:)
  122.    vint_qv_W3 = vint_qv(1069:1168,:,:)
  123.    vint_qv_W4 = vint_qv(1900:1999,:,:)
  124.    vint_qv_C1 = vint_qv(610:709,:,:)
  125.    vint_qv_C2 = vint_qv(1440:1539,:,:)
  126.    vint_qv_C3 = vint_qv(1639:1738,:,:)
  127.    vint_qv_C4 = vint_qv(1760:1859,:,:)

  128.    vint_qv_W = (vint_qv_W1+vint_qv_W2+vint_qv_W3+vint_qv_W4)/4.0
  129.    vint_qv_C = (vint_qv_C1+vint_qv_C2+vint_qv_C3+vint_qv_C4)/4.0
  130.    avg_vint_qv = dim_avg_n_Wrap(vint_qv,0)

  131.    do pp = 0,99,1
  132.            vint_qu_W(pp,:,:) = vint_qu_W(pp,:,:)-avg_vint_qu(:,:);
  133.       vint_qu_C(pp,:,:) = vint_qu_C(pp,:,:)-avg_vint_qu(:,:);
  134.            vint_qv_W(pp,:,:) = vint_qv_W(pp,:,:)-avg_vint_qv(:,:);
  135.       vint_qv_C(pp,:,:) = vint_qv_C(pp,:,:)-avg_vint_qv(:,:);
  136.    end do

  137.    printVarSummary(vint_qu_W)
  138.    printVarSummary(vint_qu_C)
  139.    printVarSummary(vint_qv_W)
  140.    printVarSummary(vint_qv_C)

  141.    qu_W = dim_avg_n_Wrap(vint_qu_W,0)
  142.    qu_C = dim_avg_n_Wrap(vint_qu_C,0)
  143.    qv_W = dim_avg_n_Wrap(vint_qv_W,0)
  144.    qv_C = dim_avg_n_Wrap(vint_qv_C,0)
  145.   
  146.    print(min(qu_W))
  147.    print(max(qv_W))
  148.    print(min(qu_C))
  149.    print(max(qv_C))

  150.    copy_VarMeta(vint_qu_W(0,:,:),qu_W)   
  151.    copy_VarMeta(vint_qu_C(0,:,:),qu_C)
  152.    copy_VarMeta(vint_qv_W(0,:,:),qv_W)   
  153.    copy_VarMeta(vint_qv_C(0,:,:),qv_C)
  154.    
  155.    mm_W = sqrt(qu_W^2+qv_W^2)
  156.    mm_C = sqrt(qu_C^2+qv_C^2)
  157.    copy_VarMeta(qu_W,mm_W)
  158.    copy_VarMeta(qu_C,mm_C)

  159.    print(max(mm_W))
  160.    print(min(mm_W))
  161.    print(max(mm_C))
  162.    print(min(mm_C))

  163. wks =gsn_open_wks("eps","vapour_flux_W")
  164. gsn_define_colormap(wks,"BlAqGrYeOrReVi200")   

  165. vcres = True
  166. vcres@gsnAddCyclic  = False
  167. vcres@gsnDraw      = False                        ; don't draw yet
  168. vcres@gsnFrame     = False                        ; don't advance frame yet
  169. vcres@mpDataSetName         = "Earth..3"   ; This new database contains  
  170. vcres@mpDataBaseVersion     = "MediumRes"  ; Medium resolution database
  171. vcres@mpOutlineOn           = True         ; Turn on map outlines
  172. vcres@mpProjection          = "CylindricalEquidistant"
  173. vcres@mpGeophysicalLineThicknessF = 0.7      ; double the thickness of geophysical boundaries
  174. vcres@mpNationalLineThicknessF    = 1.0      ; double the thickness of national boundaries

  175. vcres@pmTickMarkDisplayMode = "Always"

  176. vcres@mpMinLatF         = latS                        
  177. vcres@mpMaxLatF         = latN                        
  178. vcres@mpMinLonF         = lonL                        
  179. vcres@mpMaxLonF         = lonR                                                        
  180. vcres@lbLabelBarOn = True

  181. vcres@vcRefMagnitudeF         = 0.2              ; make vectors larger
  182. vcres@vcRefLengthF            = 0.05            ; ref vec length
  183. vcres@vcRefAnnoOrthogonalPosF   = -1.0            ; move ref vector
  184. vcres@vcRefAnnoArrowLineColor   = "black"         ; change ref vector color
  185. vcres@vcRefAnnoArrowUseVecColor = False           ; don't use vec color for ref

  186. vcres@vcGlyphStyle            = "CurlyVector"    ; turn on curly vectors
  187. ;vcres@vcMinDistanceF          = 0.017            ; thin out vectors
  188. ;vcres@vcRefAnnoOn = True
  189. ;vcres@vcMonoFillArrowFillColor  = True
  190. vcres@vcLineArrowThicknessF  = 2.0
  191. vcres@vcVectorDrawOrder= "PostDraw"
  192. vcres@tiMainString          ="vaper_flux : kg/(m*s)"
  193. vcres@gsnRightString ="Rammasun(1409)"

  194. plot=gsn_csm_vector_map(wks,qu_W,qv_W,vcres)  ; create plot

  195. cnres           = True
  196. cnres@china     = True       ;draw china map or not
  197. cnres@river     = False       ;draw changjiang&huanghe or not
  198. cnres@province  = False       ;draw province boundary or not
  199. cnres@nanhai    = False       ;draw nanhai or not
  200. cnres@diqu      = False       ; draw diqujie or not
  201. chinamap = add_china_map(wks,plot,cnres)



  202. txres               = True                           
  203. txres@txFontHeightF = 0.020             ; Set the font height
  204. txres@txPerimOn     = True
  205. txres@txBackgroundFillColor =0
  206. txres@txPerimColor    = 0


  207. res                 = True                    ; plot mods desired
  208. res@gsnDraw         = False                   ; don't draw yet
  209. res@gsnFrame        = False                   ; don't advance frame yet
  210. res@cnFillOn        = True                    ; turn on color
  211. res@gsnSpreadColors = True                    ; use full colormap
  212. res@gsnSpreadColorStart = 0
  213. res@gsnSpreadColorEnd   = 199
  214. res@cnLinesOn       = False                   ; turn off contour lines
  215. res@cnLineLabelsOn  = False                   ; tuen off line labels
  216. res@cnInfoLabelOn =False
  217. res@gsnLeftString=""
  218. res@gsnRightString=""
  219. res@cnLevelSelectionMode="ManualLevels"
  220. res@cnMinLevelValF = 0
  221. res@cnMaxLevelValF = 0.14
  222. res@cnLevelSpacingF = 0.014
  223. ;res@cnLevels=(/0,0.014,0.028,0.042,0.056,0.07,0.084,0.098,0.112,0.126,0.14/)


  224. res@lbLabelBarOn = True
  225. res@lbLabelStride       = 2         ; plot every other colar bar label
  226. res@lbOrientation        = "vertical"         ; vertical label bars
  227. ;res@lbLeftMarginF =-0.3
  228. res@lbAutoManage   = True
  229. res@lbLabelFontHeightF = 0.009
  230. ;mm_W = smth9(mm_W,0.5,0.25,False)
  231. plot1 = gsn_csm_contour(wks,mm_W,res)


  232. overlay(plot,plot1)


  233. mstring = "p"
  234. fontnum = 37
  235. xoffset = 0.0
  236. yoffset = 0.0
  237. ratio   = 1.0
  238. size    = 1.0
  239. angle   = 0.0
  240. new_index = NhlNewMarker(wks, mstring, fontnum, xoffset, yoffset, ratio, size, angle)
  241. mkres               = True
  242. mkres@gsMarkerSizeF = 0.02
  243. mkres@gsMarkerColor = "red"
  244. mkres@gsMarkerThicknessF=5.0
  245. mkres@gsMarkerIndex = new_index
  246. mkres@tfPolyDrawOrder = "PostDraw"  
  247. ;dum=gsn_add_polymarker(wks, plot, x(i), y(i), mkres)

  248. maximize_output(wks,False)
  249.                
  250. end
复制代码
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-12-28 09:27:28 | 显示全部楼层
画出来的矢量稀稀疏疏的 不知道可能是哪里出错了呢  望大神解救 谢谢~
密码修改失败请联系微信:mofangbao
发表于 2015-12-28 09:57:59 | 显示全部楼层
你资料分辨率多少?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-12-28 10:00:32 | 显示全部楼层
andrewsoong 发表于 2015-12-28 09:57
你资料分辨率多少?

3.75*3.75的   用这个资料单画风场的时候 不是这么稀疏的
密码修改失败请联系微信:mofangbao
发表于 2015-12-28 10:02:56 | 显示全部楼层
日不不不落 发表于 2015-12-28 10:00
3.75*3.75的   用这个资料单画风场的时候 不是这么稀疏的

的确是有点分辨率不高哇,你可以贴上脚本让大家给你看看吧
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-12-28 10:15:05 | 显示全部楼层
上面是代码  有点长  跪求大神们解答 谢谢~
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-12-28 15:41:24 | 显示全部楼层
本帖最后由 日不不不落 于 2015-12-28 15:55 编辑
andrewsoong 发表于 2015-12-28 10:02
的确是有点分辨率不高哇,你可以贴上脚本让大家给你看看吧

解决了 谢谢你,谢谢大家的 帮助  首先,气压的单位最好换算成Pa,其次,画图之前,变量的经纬度属性要设置!
密码修改失败请联系微信:mofangbao
发表于 2016-1-8 10:31:21 | 显示全部楼层

请问下你的脚本里面的各个数据的单位是多少,最后得出的结果是什么量级的啊?
密码修改失败请联系微信:mofangbao
发表于 2016-1-8 10:39:44 | 显示全部楼层
还有使用vibeta函数的时候linlog应为1还是2 啊?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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