爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 255|回复: 1

[经验总结] 波折射指数

[复制链接]

新浪微博达人勋

发表于 2024-5-16 09:27:08 | 显示全部楼层 |阅读模式

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

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

x
同步一下俺的帖子!
去年研究了波折射指数的计算公式,当时觉得太复杂了不想写代码于是放弃,但今年突然又觉得还是算一下,于是又研究了几天,又被折磨了一下。人果然不能偷懒!


利用波折射指数诊断波的传播环境,计算方法:(Andrews et al.,1987)
微信截图_20240516092150.png
公式都差不多,但Weinberger et al.,(2021)这篇文章里面改变了好几个形式,我就算了一个比较原始的。
微信截图_20240516092305.png 微信截图_20240516092317.png
波折射指数体现大气环流的背景场是否有利于行星波传播;但其计算是基于纬圈平均的场,实际波的反射传播是一个局地的区域现象,波折射指数只能判断背景流是否有利于波动反射,但无法准确地表征波动反射的发生,当RI<0时,行星波发生反射;RI>0,行星波在此区域传播,越大越容易传播;(注意是波折射指数的平方RI,看文献好像没有找到识别局地区域反射的指数,还看见一个U2-U10的定义,感觉是风场的切变,定义方法比较粗糙)。
Albers and Birner., (2014)文章中RI的单位是m-2,根据(f/2NH)2,f单位为s-1,NN单位为s-2,H单位为m,倒推第三项单位为m-2,合理;计算结果乘了地球半径的平方,将RI无量纲化;感觉公式算出来量级有一点奇怪,算出来主要还是以位涡第一项为主导的样子;
(All fields are multiplied by Earth’s radius squared, which nondimensionalizes the refractive index and gives the PV gradient the units of meters per second)
微信截图_20240516092403.png
浅浅的用ncl算了一下,结果感觉看起来还算正常?但是第一项量级有一点问题;真烦人啊啊啊啊啊啊啊啊啊啊看了一下文献中的量级差不多(Li et al.,2017)
微信截图_20240516092449.png
Li et al.,2017文章中说正负折射指数的平方会相互抵消,新定义一个负波折射指数平凡的频率Fn2来诊断行星波的传播,具体的计算方法,将格电上n2为负值的一天定义为1,为正值的一天定义为0,Fn2定义为负值的天数除以总天数,Fn2合成的结果减去气候态的得到异常值,行星波在Fn2小的区域传播,在大的区域反射;
微信截图_20240516092536.png
  1. ;============================================================
  2. ; calculate QG RI index(Andrews et al.,1987)
  3. ;============================================================
  4. ;pv:potential vorticity;
  5. ;T :basic state of air temperature;
  6. ;u :basic state of  uwind;
  7. ;k :zonal wavenumber(k=1 means wave 1)
  8. ;Two methods:By using the pv data and calculting the pv;
  9. ;if the phase speed c equals zero, the RI is treated as the stationary wave RI;
  10. ;return:RI Uyy  Uzz RI1
  11. undef("def_cal_QGRI")
  12. function def_cal_QGRI(pv[*][*][*][*]:numeric,T[*][*][*][*]:numeric,u[*][*][*][*]:numeric,k[*]:numeric)
  13. local sclhgt,gc,pi,dName,level,lat,lon,re,f,density,coslat,leveltmp,coslattmp,ftmp,dthetadz,NN,pv_ZonalMean,u_ZonalMean,T_ZonalMean,k,T_ZonalMean,densitytmp,u_grad,uyy1,u_gradz,uzz1,pv_grad2,RI2,RI3


  14. begin
  15.     ;------ scale height
  16.     sclhgt  = 7000.;units:m
  17.     ; Gas constant
  18.     gc      = 290.
  19.     pi      = atan(1.0)*4.
  20.     ; 自转角速度
  21.     wmg=2.*pi/(60.*60.*24.)


  22.     dName   = getvardims(pv)
  23.     level   = pv&$dName(1)$
  24.     lat     = pv&$dName(2)$
  25.     lon     = pv&$dName(3)$
  26.     dim     =dimsizes(T)


  27.     ;------Radius of the earth
  28.     re      = 6.37*10^6 ;6378388 units:m
  29.     ;------Coriolis parameter
  30.     f       = lat(:)
  31.     f       = (/2.*2.*pi/(60.*60.*24.)*sin(pi/180.*f)/)

  32.     ;------ cosine
  33.     coslat  = cos(lat(:)*pi/180.)
  34.     coslat@_FillValue = default_fillvalue(typeof(coslat))
  35.     coslat  = (/where(coslat.le.0.,coslat@_FillValue,coslat)/)



  36.     ;zanal ano
  37.     T_ZonalMean=dim_avg_n_Wrap(T, 3)
  38.     printVarSummary(T_ZonalMean)


  39.     ; 1-D -> 3-D
  40.     leveltmp    = conform_dims(dimsizes(T_ZonalMean),level,1)
  41.     coslattmp   = conform_dims(dimsizes(T_ZonalMean),coslat,2)
  42.     ftmp        = conform_dims(dimsizes(T_ZonalMean),f,2)
  43.     ;densitytmp = conform_dims(dimsizes(T_ZonalMean),density,1)


  44.     ;ρ0=ρs*exp(-z/H)
  45.     densitytmp=1.2*(leveltmp/1000)


  46.     printVarSummary(leveltmp)  
  47.     printVarSummary(coslattmp)  
  48.     printVarSummary(ftmp)      
  49.     printVarSummary(densitytmp)
  50. ;-------------------------------------------------------------------------------
  51.     ; vertical gradient of potential temperature  (K/m)
  52.     dthetadz = center_finite_diff_n(T_ZonalMean*(1000./leveltmp)^0.286,-sclhgt*log(level/1000.),False,0,1)
  53.     printVarSummary(dthetadz)


  54. ;--------------------------------------------------------------------
  55.     ; Brunt Vaisala frequency
  56.     NN      = (gc*(leveltmp/1000.)^0.286)/sclhgt * dthetadz
  57.     NN@var_desc     = "Brunt Vaisala frequency"
  58.     NN@units        = "1/s^2"
  59.     NN@long_name    = "basic state Brunt Vaisala frequency (TN2001)"
  60.     NN@_FillValue   = T@_FillValue
  61.     NN              = where(NN.gt.0,NN,NN@_FillValue)
  62.     printVarSummary(NN)
  63.     print("-----NN-----")
  64.     printMinMax(NN, 0)


  65.     ;------ zonal-mean zonal wind
  66.     u_ZonalMean=dim_avg_n_Wrap(u, 3)
  67.     printVarSummary(u_ZonalMean)
  68.     print("-----u_ZonalMean-----")
  69.     printMinMax(u_ZonalMean, 1)


  70. ;------------------------------------------------------------------------------------------------
  71.     ;---------------------------求zonal mean的pv经向梯度 pv_grad
  72.     ;第1项:2*自转角速度/地球半径*cos纬度
  73.     pv_grad1 =2.*wmg/re*coslattmp
  74.     print("------pv_grad1-----")
  75.     printMinMax(pv_grad1, 0)


  76.     ;注意没有加负号!-uyy -uzz
  77.     ;-----第2项:uyy
  78.     u_grad  =center_finite_diff_n(u_ZonalMean*coslattmp ,lat*pi/180.,False,0,2)
  79.     uyy1    =center_finite_diff_n(u_grad/coslattmp      ,lat*pi/180.,False,0,2)

  80.     uyy     =1./(re^2)*uyy1
  81.     print("-----uyy-----")
  82.     printMinMax(uyy, 0)  



  83.     ;-----第3项:uzz
  84.     u_gradz     =center_finite_diff_n(u_ZonalMean,-sclhgt*log(level/1000.),False,0,1)
  85.     printVarSummary(u_gradz)  
  86.     uzz1        =center_finite_diff_n(u_gradz*densitytmp/NN,-sclhgt*log(level/1000.),False,0,1)
  87.     printVarSummary(uzz1)   


  88.     uzz=ftmp^2/densitytmp*(uzz1)
  89.     print("-----uzz-----")
  90.     printMinMax(uzz, 0)



  91.     print("-----cal pv_grad-----")
  92.     pv_grad=(/pv_grad1-uyy-uzz/)


  93.     printMinMax(pv_grad, 0)
  94.     copy_VarCoords(u_ZonalMean, pv_grad)
  95.     printVarSummary(pv_grad)
  96. ;=======================================================================
  97.     ;直接使用pv的数据计算
  98.     ;--------------------------------------------
  99.     pv_grad2=grad_latlon_cfd(pv, lat*pi/180., lon*pi/180., True, False)
  100.     ;0为经向梯度
  101.     printVarSummary(pv_grad2)
  102.     ;------ 对lon维 zonal-mean potential vorticity
  103.     pv_ZonalMean=dim_avg_n_Wrap(pv_grad2[0], 3)
  104.     print("-----data pv_grad-----")
  105.     printMinMax(pv_ZonalMean, 0)
  106.     printVarSummary(pv_ZonalMean)
  107. ;=======================================================================
  108.     ;------QG RI index for the stationary wave k(c=0)

  109.     print("-----RI1-----")
  110.     RI1=pv_grad/u_ZonalMean ;有一点问题感觉!为什么量级差异这么多啊啊啊啊啊啊啊啊!!!!!!10^-10/10^1 量级不对哇啊啊啊啊!
  111.     printMinMax(RI1, 0)     ;
  112.     copy_VarCoords(u_ZonalMean, RI1)


  113.     print("-----RI2-----")
  114.     RI2=(k/(re*coslattmp))^2
  115.     printMinMax(RI2, 0)


  116.     print("-----RI3-----")
  117.     RI3=(ftmp/(2.*sclhgt))^2/NN
  118.     printMinMax(RI3, 0)



  119.     print("-----RI-----")
  120.     RI=(/RI1-RI2-RI3/)
  121.     printVarSummary(RI)
  122.     printMinMax(RI, 0)


  123.     RI=RI*re^2  ;*地球半径的平方,将折射率无量纲化(Albers and Birner,2014);
  124.     ;根据(f/2NH)^2 f单位为s-1,NN单位为s-2,H单位为m,倒推第三项单位为m-2,合理!
  125.     copy_VarCoords(T_ZonalMean, RI)
  126.     RI@units = "1"
  127.     RI@long_name = "QGRI"
  128. ;--------------------不知道返回uyy和uzz时需不需要这样处理,输出看一下结果!
  129.     uyy=-uyy*re^2
  130.     uzz=-uzz*re^2


  131.     pv_grad=pv_grad*re^2


  132.     RI1=RI1*re^2


  133.     copy_VarCoords(T_ZonalMean, uyy)
  134.     copy_VarCoords(T_ZonalMean, uzz)
  135.     uyy@long_name = "uyy"
  136.     uzz@long_name = "uzz"


  137.     copy_VarCoords(T_ZonalMean, pv_grad)
  138.     pv_grad@long_name = "pv_grad"
  139.     pv_grad@units = "m/s"


  140.     copy_VarCoords(T_ZonalMean, RI1)
  141.     RI1@long_name = "RI1"

  142.     print("-----re2-----")
  143.     printMinMax(RI, 0)
  144.     return([/RI,uyy,uzz,pv_grad,RI1/])
  145. end
复制代码
代码包括直接用pv数据计算梯度和用公式计算的,改一下输入就行,输出的变量需要啥就输出啥!

参考文献:
Andrews, D. G., J. R. Holton, and C. B. Leovy, 1987: Middle Atmosphere Dynamics. International Geophysics Series, Vol. 40, Academic Press, 489 pp.
Albers, J.R., Birner, T., 2014. Vortex Preconditioning due to Planetary and Gravity Waves prior to Sudden Stratospheric Warmings. Journal of the Atmospheric Sciences 71, 4028–4054.. https://doi.org/10.1175/jas-d-14-0026.1
Li, Q., Graf, H.-F., & Giorgetta, M. A. (2007). Stationary planetary wave propagation in Northern Hemisphere winter-climatological analysis of the refractive index. Atmospheric Chemistry and Physics, 7(1), 183–200. https://doi.org/10.5194/acp-7-183-2007
Weinberger, I., Garfinkel, C.I., White, I.P., Birner, T., 2021. The Efficiency of Upward Wave Propagation near the Tropopause: Importance of the Form of the Refractive Index. Journal of the Atmospheric Sciences 78, 2605–2617.. https://doi.org/10.1175/jas-d-20-0267.1

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

新浪微博达人勋

发表于 2024-5-17 09:39:15 | 显示全部楼层
谢谢分享,楼主厉害
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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