爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: supersupergirl

[作图] 关于wrf数据画温度平流的问题探讨

[复制链接]

新浪微博达人勋

 楼主| 发表于 2019-8-25 18:04:41 | 显示全部楼层
听取小伙伴意见后重新设置了下等值线范围 虽然看着还是很奇怪 但好像原则上也没什么问题 求大佬们帮忙看看
temp_advent_700_02_00setcontour.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-25 22:06:21 | 显示全部楼层
supersupergirl 发表于 2019-8-24 15:20
此时艾特下我的大神好友@小其其格
  1. u     = f->UGRD_P0_L100_GLL0                           ; get u for January
  2. v     = f->VGRD_P0_L100_GLL0                           ; get u for January
  3. lat1d = f->lat_0
  4. lon1d = f->lon_0
  5. p     = f->lv_ISBL0
  6. t     = f->TMP_P0_L100_GLL0   ;温度

  7. printVarSummary(lat1d)
  8. printVarSummary(t)

  9. tlen = dimsizes(t)  

  10. Radians = 0.0174533
  11. R       = 6378388.
  12. nlat = dimsizes(lat1d)
  13. nlon = dimsizes(lon1d)

  14. dTdX = new((/tlen(0),tlen(1),tlen(2)/),typeof(t),t@_FillValue)
  15. dlon = (lon1d(2)-lon1d(1))*Radians
  16. do nl=0,nlat-1
  17.     dX = R*cos(Radians*lat1d(nl))*dlon ;constant at this lat
  18.     dTdX(:,nl:nl,:) = center_finite_diff_n(t(:,nl:nl,:), dX, True, 0, 2)   ;中央差分  (q(n+1)-q(n-1))/(r(n+1)-r(n-1))
  19. end do

  20. dTdY = new((/tlen(0),tlen(1),tlen(2)/),typeof(t),t@_FillValue)
  21. dlat = (lat1d(2)-lat1d(1))*Radians
  22. do ml=0,nlon-1
  23.     dY = R*dlat ;constant at this lat
  24.     dTdY(:,:,ml:ml) = center_finite_diff_n(t(:,:,ml:ml), dY, True, 0, 1)   ;中央差分  (q(n+1)-q(n-1))/(r(n+1)-r(n-1))
  25. end do

  26. advT = -(u*dTdX/dX+v*dTdY/dY)
  27. printVarSummary(advT)


  28. advT   = advT*1.e03

  29. advT!0 = "p"
  30. advT!1 = "lat"
  31. advT!2 = "lon"

  32. advT&p = p
  33. advT&lat = lat1d
  34. advT&lon = lon1d

  35. advT@long_name = "advT"
  36. advT@units = "le-3 ks-1"
  37. printVarSummary(advT)
复制代码


以上是我用fnl资料绘制温度平流的脚本,你照着修改一下看看

PS:我不是啥大神……ncl新手而已
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-25 23:53:55 | 显示全部楼层
river 发表于 2019-8-25 17:44
是GrADS的公式,主要是我不会NCL,你应该请教NCL大神@尽头的尽头 @兰溪之水

ncl6.3版本之后新加了求平流的函数,下面的例子就是求温度平流的
http://www.ncl.ucar.edu/Document ... vect_variable.shtml
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-26 16:34:22 | 显示全部楼层
小其其格 发表于 2019-8-25 22:06
以上是我用fnl资料绘制温度平流的脚本,你照着修改一下看看

PS:我不是啥大神……ncl新手而已

是呀 我用fnl数据画也是一点问题都没有 但是画wrf就不行了 然后我问了ncl老师 他说因为fnl数据是球坐标的 我这种直接用wrf输出模拟的那个dy网格距就好 不需要再计算。。我觉得好像不太行 因为我都已经插值过了 大神觉得呢 还有之前你帖子里的问题求帮忙解答!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-26 17:48:49 | 显示全部楼层
尽头的尽头 发表于 2019-8-25 23:53
ncl6.3版本之后新加了求平流的函数,下面的例子就是求温度平流的
http://www.ncl.ucar.edu/Document ... ...

啊啊 感谢! 我刚尝试了一下 输出全是缺省值 请问大神是什么原因呢 脚本如下:      
    tc   = wrf_user_getvar(a,"tc",it)      ; T in C
    rh   = wrf_user_getvar(a,"rh",it)      ; relative humidity
    u    = wrf_user_getvar(a,"ua",it)      ; 3D U at mass points
    v    = wrf_user_getvar(a,"va",it)      ; 3D V at mass points
    p    = wrf_user_getvar(a,"p",it)
    z    = wrf_user_getvar(a,"z",it)
    x    = wrf_user_getvar(a,"XLAT",it)        ;[south_north | 141] x [west_east | 153]
    y    = wrf_user_getvar(a,"XLONG",it)


pressure = 700.
  tk = wrf_user_intrp3d(tc,p,"h",pressure,0.,False)
  z_p = wrf_user_intrp3d(z,p,"h",pressure,0.,False)
  rh_p = wrf_user_intrp3d(rh,p,"h",pressure,0.,False)
  u_p = wrf_user_intrp3d(u,p,"h",pressure,0.,False)
  v_p = wrf_user_intrp3d(v,p,"h",pressure,0.,False)

  tc_p = tk+273.166
  copy_VarCoords(tk, tc_p)

;Return the advected variable only (opt=0)

   advT_0 = advect_var(u_p,v_p,tc_p,0,"advection of temperature","K/s",0)

   printVarSummary(advT_0)


; Return the advected variable and the longitudinal (dT/dx) and latitudinal (dT/dy) gradients
; of the scalar variable (opt=1). The returned variable is of type list containing three variable

   advT_1 = advect_var(u_p,v_p,tc_p,0,"advection of temperature","K/s",1)
   printVarSummary(advT_1)  ; variable of type list: 3 items

; For clarity: explicitly extract the returned elements of the list variable. All meta data is present.

   Tadv = advT_1[0]           ; advected quantity
   Tgrx = advT_1[1]           ; longitudinal gradient
   Tgry = advT_1[2]           ; latitudinal  gradient
   printVarSummary(Tadv)    ; advection of temperature
   printVarSummary(Tgrx)    ; longitudinal gradient
   printVarSummary(Tgry)    ; latitudinal gradient

然后各变量输出如下:
(0)     Working on time: 2018-02-28_00:30:00
(0)     advect_var: Warning: No named dimensions. Can not check grid order.
warning:gradsg: 1 2-dimensional input array(s) contained missing values. No interpolation performed on these arrays

Variable: advT_0
Type: float
Total Size: 86292 bytes
            21573 values
Number of Dimensions: 2
Dimensions and sizes:   [south_north | 141] x [west_east | 153]
Coordinates:
Number Of Attributes: 3
  _FillValue :  9.96921e+36
  long_name :   advection of temperature
  units :       K/s
(0)     advect_var: Warning: No named dimensions. Can not check grid order.
warning:gradsg: 1 2-dimensional input array(s) contained missing values. No interpolation performed on these arrays

Variable: advT_1
Type: list <fifo>
Total items: 3


Variable: Tadv
Type: float
Total Size: 86292 bytes
            21573 values
Number of Dimensions: 2
Dimensions and sizes:   [south_north | 141] x [west_east | 153]
Coordinates:
Number Of Attributes: 3
  _FillValue :  9.96921e+36
  long_name :   advection of temperature
  units :       K/s

Variable: Tgrx
Type: float
Total Size: 86292 bytes
            21573 values
Number of Dimensions: 2
Dimensions and sizes:   [south_north | 141] x [west_east | 153]
Coordinates:
Number Of Attributes: 2
  _FillValue :  9.96921e+36
  long_name :   longitudinal gradient

Variable: Tgry
Type: float
Total Size: 86292 bytes
            21573 values
Number of Dimensions: 2
Dimensions and sizes:   [south_north | 141] x [west_east | 153]
Coordinates:
Number Of Attributes: 2
  _FillValue :  9.96921e+36
  long_name :   latitudinal gradient

还出现了一些warning,求大神解答疑惑!


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

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-26 18:14:46 | 显示全部楼层
尽头的尽头 发表于 2019-8-25 23:53
ncl6.3版本之后新加了求平流的函数,下面的例子就是求温度平流的
http://www.ncl.ucar.edu/Document ... ...

而且我用了advect_variable_cfd 报错说没有这个函数。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-27 09:29:35 | 显示全部楼层
supersupergirl 发表于 2019-8-26 18:14
而且我用了advect_variable_cfd 报错说没有这个函数。。

advect_variable必须是全球数据,advect_variable_cdf可以是区域数据,后者是ncl6.6.2新增函数,使用之前多看看函数的说明
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-27 09:37:28 | 显示全部楼层
尽头的尽头 发表于 2019-8-27 09:29
advect_variable必须是全球数据,advect_variable_cdf可以是区域数据,后者是ncl6.6.2新增函数,使用之前 ...

好吧 看来我只能用计算的方法来画平流了 感谢大神! 那请问我之前计算是对的嘛
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-27 11:11:07 | 显示全部楼层
小其其格 发表于 2019-8-25 22:06
以上是我用fnl资料绘制温度平流的脚本,你照着修改一下看看

PS:我不是啥大神……ncl新手而已

还有我看了很多脚本 最后算平流的时候都没有/dx和/dy 所以也不知道哪个是对的 求大神指点
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-27 11:14:09 | 显示全部楼层
ut = advect_variable(u, v, air, 1, long_name, units, opt)
你可以试试这个函数,算温度平流前面要乘-1
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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