Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb & T-N) (已更正)

大气动力学中通常用波作用通量来诊断 Rossby波的传播。常用的三种波作用通量分别为局地E-P 通量,Plumb 波作用通量和T-N 波作用通量。局地E-P 通量可以诊断一段时间内天气尺度瞬变波对定长波的调控作用,但无法直接表现Rossby长波的时间演变过程,然而T-N 波或Plumb 波作用通量可以 ,因此需要诊断一次天气过程的波活动演变特征时,通常选择T-N 波或Plumb 波作用通量。


2014年11月300hPa两种波作用通量

Plumb波作用通量与T-N波作用通量的优劣

Plumb波作用通量

Plumb(1985)使用小振幅定常波在纬向均匀基本流中传播时的守恒关系,给出了定常Rossby波的三维波活动通量,代表波能量的传播方向。Plumb 波作用通量提出后被广泛使用,能有效分析定常Rossby波的三维传播特性。Plumb 波作用通量的纬向分量较大而经向分量较小,适用于振幅较小的纬向均匀的西风带Rossby长波的诊断。

T-N波作用通量

Takaya 和 Nakamura( 2001 ) 为了更好地诊断真实大气中Rossby波的三维传播特征,将Plumb 波通量进一步推广,使其更适用于复杂的背景气流,发展了T-N波作用通量。T-N 波作用通量是对Plumb 波作用通量的改进,经向分量得以增强,能更好地描述纬向非均匀气流中的较大振幅的西风带Rossby 长波扰动,但需要根据研究目的人为选择背景场。

数据准备

计算Plumb通量,需要准备所需时间的位势高度场,UV风场;
计算T-N通量,需要所需时间的位势高度场以及所处季节(月份)的多年气候平均场。
这里我以2014年11月的平均通量场为例(选取这一时间是由于有正确的图像作为对比,日本学者提供了相应的Grads及fortran计算脚本
http://www.atmos.rcast.u-tokyo.ac.jp/nishii/programs/index.html)。

#以下为数据读取部分,最终所得z300,u300,v300为2014年11月的300hPa位势高度场,UV风场的月平均;
#z_tmp,u_tmp,v_tmp为1979-2018年11月的气候态;
#所有数据来自ECMWF的ERA-Interim数据集
f_z300 = xr.open_dataset("z.nc")
z300 = np.array(f_z300['z'].loc[:,300,:,:].loc['2014-11-01'])
z300 = z300/9.8
z_tmp = np.array(f_z300['z'].loc[:,300,:,:].loc[f_z300.time.dt.month.isin([11])])
z_tmp = z_tmp.mean((0))/9.8

f_u300 = xr.open_dataset("u.nc")
u300 = np.array(f_u300['u'].loc[:,300,:,:].loc['2014-11-01'])
u_tmp = np.array(f_u300['u'].loc[:,300,:,:].loc[f_u300.time.dt.month.isin([11])])

f_v300 = xr.open_dataset("v.nc")
v300 = np.array(f_v300['v'].loc[:,300,:,:].loc['2014-11-01'])
v_tmp = np.array(f_v300['v'].loc[:,300,:,:].loc[f_v300.time.dt.month.isin([11])])

lat = f_z300['latitude']
lon = f_z300['longitude']

Plumb波作用通量计算的Python实现

首先先给出Plumb波作用通量的计算公式:


Plumb波作用通量的计算公式

其中上标带“-”和“ ' ”的变量分别表示纬圈平均和纬向偏差。φ,λ,Φ分别表示纬度,经度和位势,f = 2Ωsinφ表示科氏参数,a,Ω 分别表示地球半径和地球自转速率。p0 = 1000 hPa 。目前暂时不涉及垂直分量。
计算难点在于偏微分部分,思路就在于将微分变为差分计算,Numpy提供了关于差分的方法有两个,一个是使用np.diff()函数计算前后差,另一个方法是使用np.gradient()计算相邻梯度,然后除以格距。这里我使用的是np.gradient()。

a=6400000 #地球半径
omega=7.292e-5 #自转角速度
lev = 300/1000#p/p0
#要把经纬度转换成角度量,所以做(*np.pi/180.0)处理
#因为最终要计算Fx,Fy,所以统一数组shape,使用.reshape((1,-1))或(-1,1)处理
#只有经度维的使用((1,-1)),只有纬度维的使用((-1,1))
dlon=(np.gradient(lon)*np.pi/180.0).reshape((1,-1))
coslat = (np.cos(np.array(lat)*np.pi/180)).reshape((-1,1))
sin2lat = (np.sin(np.array(lat)*2*np.pi/180)).reshape((-1,1))
#计算纬偏值
ua = u300 - u300.mean((1)).reshape((-1,1))
va = v300 - v300.mean((1)).reshape((-1,1))
za = z300 - z300.mean(1).reshape((-1,1))
#微分部分,对经度求微分,因此是axis=1,dlon是之前求的经度格距
duzdlon = np.gradient(ua * za ,axis = 1)/dlon
dvzdlon = np.gradient(va * za ,axis = 1)/dlon
#根据公式,把各个部件组合起来,计算完毕
fx = p_p0*coslat*(va*va - dvzdlon/(sin2lat*2*omega*a))
fy = p_p0*coslat*((-1)*ua*va + duzdlon/(sin2lat*2*omega*a))

我没计算垂直分量两个原因,一个是我暂时没有正确的例子对比,另一个是我目前没有整层大气的温度数据。

T-N波作用通量计算的Python实现

T-N

Ψ= Φ/ f 是准地转流函数相对于气候场的扰动。基本流场U = ( U,V ) 表示气候场,其余参数与Plumb计算相同。
因此可以发现,T-N的计算结果与背景场的选择有重要的关系。
T-N的计算难度在于二阶微分的计算,其实就是差分的过程计算两次。

dlon=(np.gradient(lon)*np.pi/180.0).reshape((1,-1))
dlat=(np.gradient(lat)*np.pi/180.0).reshape((-1,1))
coslat = (np.cos(np.array(lat)*np.pi/180)).reshape((-1,1))
sinlat = (np.sin(np.array(lat)*np.pi/180)).reshape((-1,1))

#计算科氏力
f=np.array(2*omega*np.sin(lat*np.pi/180.0)).reshape((-1,1)) 
#计算|U|
wind = np.sqrt(u**2+v**2)
#计算括号外的参数,a^2可以从括号内提出
c=(lev)*coslat/(2*a*a*wind)
#Φ`
za = z300 - z_tmp.mean(1).reshape((-1,1))
#Ψ`
streamf = g*za/f
#计算各个部件,难度在于二阶导,变量的名字应该可以很容易看出我是在计算哪部分
dzdlon = np.gradient(streamf,axis = 1)/dlon
ddzdlonlon = np.gradient(dzdlon,axis = 1)/dlon
dzdlat = np.gradient(streamf,axis = 0)/dlat
ddzdlatlat = np.gradient(dzdlat,axis = 0)/dlat
ddzdlatlon = np.gradient(dzdlat,axis = 1)/dlon
#这是X,Y分量共有的部分
x_tmp = dzdlon*dzdlon-streamf*ddzdlonlon
y_tmp = dzdlon*dzdlat-streamf*ddzdlatlon
#计算两个分量
fx = c * ((u/coslat/coslat)*x_tmp+v*y_tmp/coslat)
fy = c * ((u/coslat)*y_tmp+v*x_tmp)
我计算得到的
这是日本学者提供的

两者对比来看我的计算应该没有什么错误。但从图来看,T-N波似乎更加平滑和流畅,plumb波辐合辐散的特征明显一点,当然了,具体的分析还是要结合天气事件各个槽脊系统或者波列的发展传播来分析。

致谢:感谢dd_atmo11的bug反馈,代码已更正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容