台风“摩羯”
“摩羯”台风路过。。。
GPI
经常在一些文章和组会中看到或听到GPI,一直不知道是什么东西,特地花半小时了解了一下。
潜在生成指数(Genesis Potential Index, GPI) 是一个用来预测热带气旋(台风)生成可能性的指数。
1979年,Gray提出与 TC 形成发展密切相关的 6 个大尺度参数因子。
3 个动力因子
柯氏参数 低层相对涡度 垂直风切变
3 个热力因子
中层湿度 中低层静力稳定度 SST
在此基础上,Emanuel and Nolan(2004)最早提出了 GPI 指数:
随后 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更强调大尺度动力因子的作用。
Potential Intensity
上述的三个公式除了,DGPI以外都有一个最大潜在强度(Potential Intensity, PI),该变量一般使用BE02算法来计算。该算法最初由 Kerry Emanuel 教授(麻省理工学院)用 FORTRAN 编写,然后用 MATLAB 编写。Kerry 的原始 MATLAB 代码 ( pcmin.m ) 位于:http://texmex.mit.edu/pub/emanuel/TCMAX
。
PI的BE02算法公式:
其中,
是绝对海表温度。 是平均出流温度。 是焓交换系数。 是拖曳系数。 是饱和湿空气从海平面上升时具有的对流有效位能。 是边界层空气上升时具有的有效对流位能。
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()
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()
结果相当接近。
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 | MJO | 位相图 Python | 半球间经度转换 Python | 大气科学 | 偏相关 37 个 CMIP6 模型对流参数化方案 Python | 解决 cmaps 库报错的问题 Python | 批量下载 NCEP2 再分析数据 Python | 北大西洋涛动 | NAO 指数 | EOF