Python | 台风GPI | Potential Intensity

文摘   2024-09-25 11:48   广东  

台风“摩羯”

“摩羯”台风路过。。。

林黛玉倒拔垂杨柳

GPI

经常在一些文章和组会中看到或听到GPI,一直不知道是什么东西,特地花半小时了解了一下。

潜在生成指数(Genesis Potential Index, GPI) 是一个用来预测热带气旋(台风)生成可能性的指数。

1979年,Gray提出与 TC 形成发展密切相关的 6 个大尺度参数因子。

3 个动力因子

  • 柯氏参数
  • 低层相对涡度
  • 垂直风切变

3 个热力因子

  • 中层湿度
  • 中低层静力稳定度
  • SST
Gray 1979

在此基础上,Emanuel and Nolan(2004)最早提出了 GPI 指数:

Proposed regime diagram for tropical cyclones

随后 Murakami et al(2011)对其进行了改进,增加了 500 hPa 垂直速度:

式中,

  • 为 850 hPa绝对涡度,单位是
  • RH 表示 600 hPa相对湿度,单位是 %,
  • 最大潜在强度,代表一定海-气热力条件下TC能够到达地的最大风速,单位是 (Emanuel, 1995; Emanuel et al., 2004),
  • 是 200~850 hPa的垂直风切变,单位是
  • 是 500 hPa垂直速度,单位是 Pa

另外一种形式的GPI方程是由国际著名气象学家王斌教授提出的DGPI:

ENGPI主要考虑了环境的热力因子,而DGPI更强调大尺度动力因子的作用。

根据 JRA-55 再分析得出的 1979-2020 年 7-10 月气候平均值 (a) DGPI 和 (b) ENGPI(填色)。等高线显示每个 2.5° 纬度 × 2.5° 经度网格框中的平均生成频率。绿色框勾勒出西北太平洋的主要生成区域(7.5°-30°N,110°-170°E)。面板右下方显示了 TC 生成频率与 ENGPI 和 DGPI 的模式相关系数 R。

Potential Intensity

上述的三个公式除了,DGPI以外都有一个最大潜在强度(Potential Intensity, PI),该变量一般使用BE02算法来计算。该算法最初由 Kerry Emanuel 教授(麻省理工学院)用 FORTRAN 编写,然后用 MATLAB 编写。Kerry 的原始 MATLAB 代码 ( pcmin.m ) 位于:http://texmex.mit.edu/pub/emanuel/TCMAX

PI的BE02算法公式:

其中,

  • 是绝对海表温度。
  • 是平均出流温度。
  • 是焓交换系数。
  • 是拖曳系数。
  • 是饱和湿空气从海平面上升时具有的对流有效位能。
  • 是边界层空气上升时具有的有效对流位能。
Potential Intensity

pyPI

Python可以使用tcpypi库来计算最大潜在强度。安装:

pip install tcpypi

使用示例:

import sys
sys.path.append(sys.path[0]+'/..')
import numpy as np
import xarray as xr
import matplotlib
import matplotlib.pyplot as plt
import time
# load PI calculation module
from tcpyPI import pi

# change default figure font settings
font = {'family' : 'sans-serif',
        'weight' : 1,
        'size'   : 16}

matplotlib.rc('font', **font)

# data location
dat_loc='../data/sample_data.nc'
# load and view netcdf file
ds = xr.open_dataset(dat_loc)

# store the data in numpy arrays
SST,MSL,Ta,R,P=np.asarray(ds.sst),np.asarray(ds.msl),np.asarray(ds.t),np.asarray(ds.q),np.asarray(ds.p)

# find the sizes of the the arrays
nlat,nlon=ds.sst.sizes['lat'],ds.sst.sizes['lon']
# create arrays to store data
VMAXp,PMINp,TOp,LNBp=np.zeros((12,nlat,nlon),dtype='float64'),np.zeros((12,nlat,nlon),dtype='float64'), \
    np.zeros((12,nlat,nlon),dtype='float64'),np.zeros((12,nlat,nlon),dtype='float64')
IFLp=np.zeros((12,nlat,nlon),dtype='float64')
# fill with missing data
VMAXp[:],PMINp[:],TOp[:],LNBp[:],IFLp[:]=np.nan,np.nan,np.nan,np.nan,np.nan
# (VMAX,PMIN,IFL,TO,LNB)=pi(sst1,msl1,p1,t1,q1,CKCD=0.9,ascent_flag=0,diss_flag=1,V_reduc=0.8,ptop=50,miss_handle=1)

# time the loop
start = time.time()

# loop over the data grid and calculate PI
for m in range(12):
    for x in range(nlon):
        for y in range(nlat):
            if (SST[m,y,x]>0.0):
                (VMAXp[m,y,x],PMINp[m,y,x],IFLp[m,y,x],TOp[m,y,x],LNBp[m,y,x]) = pi( \
                    SST[m,y,x],MSL[m,y,x],P,Ta[m,:,y,x],R[m,:,y,x],\
                    CKCD=0.9,ascent_flag=0,diss_flag=1,V_reduc=0.8,ptop=50,miss_handle=1)

end = time.time()
print(end - start)

# calculate the difference between Python and MATLAB
diff_VMAX=VMAXp-ds.Vmax

# plot both side by side in September
clevels=np.arange(0,140,10)
plt.figure(figsize=(22,6))
plt.subplot(1,2,1)
plt.contourf(ds.lon,ds.lat,VMAXp[8,:,:],clevels)
plt.xlabel(ds.lon.standard_name)
plt.ylabel(ds.lat.standard_name)
plt.title('September PI (Python, m/s)')
plt.colorbar()

plt.subplot(1,2,2)
plt.contourf(ds.lon,ds.lat,ds.Vmax.isel(month=8),clevels)
plt.xlabel(ds.lon.standard_name)
plt.ylabel(ds.lat.standard_name)
plt.title('September PI (MATLAB, m/s)')
plt.colorbar()
plt.show()
对比Python与MATLAB代码计算结果
plt.figure(figsize=(10,6))
clevels=np.linspace(-0.02,-0.0,11)
plt.contourf(ds.lon,ds.lat,diff_VMAX.isel(month=8),levels=clevels)
plt.xlabel(ds.lon.standard_name)
plt.ylabel(ds.lat.standard_name)
plt.title('September PI Difference (Python$-$MATLAB, m/s)')
plt.colorbar()
plt.show()
Python-MATLAB

结果相当接近。

References

  • Gray, W. M. 1979: Hurricanes: Their formation, structure and likely role in the general circulation. Meteorology over the Tropical Oceans, D. B. Shaw, Ed., Royal Meteorological Society, 155–218.
  • Emanuel K A, Nolan D S. 2004. Tropical cyclone activity and global climate [J]. Bull. Amer. Meteor. Soc., 85(5): 666−667.
  • Murakami, H., Wang, B., Kitoh, A., 2011. Future Change of Western North Pacific Typhoons: Projections by a 20-km-Mesh Global Atmospheric Model*. J. Clim. 24, 1154–1169. https://doi.org/10.1175/2010JCLI3723.1
  • Wang, B., & Murakami, H. (2020). Dynamic genesis potential index for diagnosing present-day and future global tropical cyclone genesis. Environmental Research Letters, 15(11), 114008. https://doi.org/10.1088/1748-9326/abbb01
  • Gilford, D. M.: pyPI (v1.3): Tropical Cyclone Potential Intensity Calculations in Python, Geosci. Model Dev., 14, 2351–2369, https://doi.org/10.5194/gmd-14-2351-2021, 2021.
  • Bister, M., Emanuel, K.A., 2002. Low frequency variability of tropical cyclone potential intensity 1. Interannual to interdecadal variability. J. Geophys. Res. Atmospheres 107. https://doi.org/10.1029/2001JD000776
  • Wang, C.,Wang, Y., Wang, B., Wu, L., Zhao, H., Cao, J. (2023). Opposite skills of ENGPIand DGPI in depicting decadal variability of tropical cyclone genesis over thewestern North Pacific. Journal of climate, 36(24): 8713–8721. doi:https://doi.org/10.1175/JCLI-D-23-0201.1.

往期回顾

·投稿或转载请联系·
小编微信
长按可关注


气python风雨
主要发一些涉及大气科学的Python文章与个人学习备忘录
 最新文章